@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,123 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useRef } from "react";
3
+ const AX_COMPOSER_CSS = `
4
+ .ax-composer {
5
+ background: var(--surface-card);
6
+ border: 1px solid var(--border-strong);
7
+ border-radius: var(--radius-3);
8
+ transition: border-color var(--dur-1) var(--ease-out), box-shadow var(--dur-1) var(--ease-out);
9
+ }
10
+ .ax-composer:focus-within { border-color: var(--fg-2); box-shadow: 0 0 0 3px var(--focus-soft); }
11
+ .ax-composer__input {
12
+ display: block; width: 100%; resize: none;
13
+ background: transparent; border: none; outline: none;
14
+ padding: 14px 16px 4px; min-height: 44px; max-height: 200px;
15
+ color: var(--text-body); font-family: var(--font-body);
16
+ font-size: var(--text-md); line-height: var(--leading-snug);
17
+ }
18
+ .ax-composer__input::placeholder { color: var(--text-faint); }
19
+ .ax-composer__row {
20
+ display: flex; align-items: center; gap: 8px;
21
+ padding: 6px 8px 8px 16px;
22
+ }
23
+ .ax-composer__model {
24
+ display: inline-flex; align-items: center; gap: 6px;
25
+ font-family: var(--font-mono); font-size: var(--text-xs);
26
+ letter-spacing: 0.04em; color: var(--text-faint);
27
+ border: 1px solid var(--border-default); border-radius: var(--radius-1);
28
+ padding: 3px 8px; background: transparent; cursor: pointer;
29
+ transition: color var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out);
30
+ }
31
+ .ax-composer__model:hover { color: var(--text-muted); border-color: var(--border-strong); }
32
+ .ax-composer__spacer { flex: 1; }
33
+ .ax-composer__send {
34
+ display: inline-flex; align-items: center; justify-content: center;
35
+ width: 32px; height: 32px; flex: none; cursor: pointer;
36
+ background: var(--accent); color: var(--accent-fg);
37
+ border: none; border-radius: var(--radius-2);
38
+ transition: background var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);
39
+ }
40
+ .ax-composer__send:hover:not(:disabled) { background: var(--accent-hover); }
41
+ .ax-composer__send:active:not(:disabled) { transform: translateY(1px); }
42
+ .ax-composer__send:focus-visible { outline: none; box-shadow: var(--ring); }
43
+ .ax-composer__send:disabled { opacity: 0.3; cursor: not-allowed; }
44
+ .ax-composer__hint {
45
+ font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint);
46
+ }
47
+ `;
48
+ if (typeof document !== "undefined" && !document.getElementById("ax-composer-css")) {
49
+ const s = document.createElement("style");
50
+ s.id = "ax-composer-css";
51
+ s.textContent = AX_COMPOSER_CSS;
52
+ document.head.appendChild(s);
53
+ }
54
+ const SendIcon = /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: [
55
+ /* @__PURE__ */ jsx("path", { d: "M12 19V5" }),
56
+ /* @__PURE__ */ jsx("path", { d: "M5 12l7-7 7 7" })
57
+ ] });
58
+ function Composer({
59
+ value,
60
+ onChange,
61
+ onSend,
62
+ placeholder = "Message Agentaily…",
63
+ model = "agentaily-2",
64
+ onModelClick,
65
+ disabled = false,
66
+ className = "",
67
+ ...rest
68
+ }) {
69
+ const ref = useRef(null);
70
+ const handleKeyDown = (e) => {
71
+ if (e.key === "Enter" && !e.shiftKey) {
72
+ e.preventDefault();
73
+ if (value && value.trim() && onSend) onSend();
74
+ }
75
+ };
76
+ const autoGrow = () => {
77
+ const el = ref.current;
78
+ if (!el) return;
79
+ el.style.height = "auto";
80
+ el.style.height = Math.min(el.scrollHeight, 200) + "px";
81
+ };
82
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-composer", className].filter(Boolean).join(" "), ...rest, children: [
83
+ /* @__PURE__ */ jsx(
84
+ "textarea",
85
+ {
86
+ ref,
87
+ className: "ax-composer__input",
88
+ rows: 1,
89
+ value,
90
+ placeholder,
91
+ disabled,
92
+ onChange: (e) => {
93
+ autoGrow();
94
+ onChange && onChange(e.target.value);
95
+ },
96
+ onKeyDown: handleKeyDown
97
+ }
98
+ ),
99
+ /* @__PURE__ */ jsxs("div", { className: "ax-composer__row", children: [
100
+ /* @__PURE__ */ jsxs("button", { type: "button", className: "ax-composer__model", onClick: onModelClick, children: [
101
+ "▣ ",
102
+ model
103
+ ] }),
104
+ /* @__PURE__ */ jsx("span", { className: "ax-composer__spacer" }),
105
+ /* @__PURE__ */ jsx("span", { className: "ax-composer__hint", children: "⏎ send" }),
106
+ /* @__PURE__ */ jsx(
107
+ "button",
108
+ {
109
+ type: "button",
110
+ className: "ax-composer__send",
111
+ "aria-label": "Send",
112
+ disabled: disabled || !value || !value.trim(),
113
+ onClick: () => onSend && onSend(),
114
+ children: SendIcon
115
+ }
116
+ )
117
+ ] })
118
+ ] });
119
+ }
120
+ export {
121
+ Composer
122
+ };
123
+ //# sourceMappingURL=Composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.js","sources":["../../../src/components/chat/Composer.jsx"],"sourcesContent":["import React, { useRef } from \"react\";\n\nconst AX_COMPOSER_CSS = `\n.ax-composer {\n background: var(--surface-card);\n border: 1px solid var(--border-strong);\n border-radius: var(--radius-3);\n transition: border-color var(--dur-1) var(--ease-out), box-shadow var(--dur-1) var(--ease-out);\n}\n.ax-composer:focus-within { border-color: var(--fg-2); box-shadow: 0 0 0 3px var(--focus-soft); }\n.ax-composer__input {\n display: block; width: 100%; resize: none;\n background: transparent; border: none; outline: none;\n padding: 14px 16px 4px; min-height: 44px; max-height: 200px;\n color: var(--text-body); font-family: var(--font-body);\n font-size: var(--text-md); line-height: var(--leading-snug);\n}\n.ax-composer__input::placeholder { color: var(--text-faint); }\n.ax-composer__row {\n display: flex; align-items: center; gap: 8px;\n padding: 6px 8px 8px 16px;\n}\n.ax-composer__model {\n display: inline-flex; align-items: center; gap: 6px;\n font-family: var(--font-mono); font-size: var(--text-xs);\n letter-spacing: 0.04em; color: var(--text-faint);\n border: 1px solid var(--border-default); border-radius: var(--radius-1);\n padding: 3px 8px; background: transparent; cursor: pointer;\n transition: color var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out);\n}\n.ax-composer__model:hover { color: var(--text-muted); border-color: var(--border-strong); }\n.ax-composer__spacer { flex: 1; }\n.ax-composer__send {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; flex: none; cursor: pointer;\n background: var(--accent); color: var(--accent-fg);\n border: none; border-radius: var(--radius-2);\n transition: background var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);\n}\n.ax-composer__send:hover:not(:disabled) { background: var(--accent-hover); }\n.ax-composer__send:active:not(:disabled) { transform: translateY(1px); }\n.ax-composer__send:focus-visible { outline: none; box-shadow: var(--ring); }\n.ax-composer__send:disabled { opacity: 0.3; cursor: not-allowed; }\n.ax-composer__hint {\n font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint);\n}\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-composer-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-composer-css\";\n s.textContent = AX_COMPOSER_CSS;\n document.head.appendChild(s);\n}\n\nconst SendIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 19V5\"></path>\n <path d=\"M5 12l7-7 7 7\"></path>\n </svg>\n);\n\nexport function Composer({\n value,\n onChange,\n onSend,\n placeholder = \"Message Agentaily…\",\n model = \"agentaily-2\",\n onModelClick,\n disabled = false,\n className = \"\",\n ...rest\n}) {\n const ref = useRef(null);\n\n const handleKeyDown = (e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (value && value.trim() && onSend) onSend();\n }\n };\n\n const autoGrow = () => {\n const el = ref.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = Math.min(el.scrollHeight, 200) + \"px\";\n };\n\n return (\n <div className={[\"ax-composer\", className].filter(Boolean).join(\" \")} {...rest}>\n <textarea\n ref={ref}\n className=\"ax-composer__input\"\n rows={1}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(e) => { autoGrow(); onChange && onChange(e.target.value); }}\n onKeyDown={handleKeyDown}\n ></textarea>\n <div className=\"ax-composer__row\">\n <button type=\"button\" className=\"ax-composer__model\" onClick={onModelClick}>\n ▣ {model}\n </button>\n <span className=\"ax-composer__spacer\"></span>\n <span className=\"ax-composer__hint\">⏎ send</span>\n <button\n type=\"button\"\n className=\"ax-composer__send\"\n aria-label=\"Send\"\n disabled={disabled || !value || !value.trim()}\n onClick={() => onSend && onSend()}\n >\n {SendIcon}\n </button>\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CxB,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,WACJ,qBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SACvI,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,WAAA,CAAW;AAAA,EACnB,oBAAC,QAAA,EAAK,GAAE,gBAAA,CAAgB;AAAA,GAC1B;AAGK,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,QAAQ;AAAA,EACR;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,GAAG;AACL,GAAG;AACD,QAAM,MAAM,OAAO,IAAI;AAEvB,QAAM,gBAAgB,CAAC,MAAM;AAC3B,QAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;AACpC,QAAE,eAAA;AACF,UAAI,SAAS,MAAM,KAAA,KAAU,OAAQ,QAAA;AAAA,IACvC;AAAA,EACF;AAEA,QAAM,WAAW,MAAM;AACrB,UAAM,KAAK,IAAI;AACf,QAAI,CAAC,GAAI;AACT,OAAG,MAAM,SAAS;AAClB,OAAG,MAAM,SAAS,KAAK,IAAI,GAAG,cAAc,GAAG,IAAI;AAAA,EACrD;AAEA,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACxE,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,CAAC,MAAM;AAAE,mBAAA;AAAY,sBAAY,SAAS,EAAE,OAAO,KAAK;AAAA,QAAG;AAAA,QACrE,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAEb,qBAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,MAAA,qBAAC,YAAO,MAAK,UAAS,WAAU,sBAAqB,SAAS,cAAc,UAAA;AAAA,QAAA;AAAA,QACvE;AAAA,MAAA,GACL;AAAA,MACA,oBAAC,QAAA,EAAK,WAAU,sBAAA,CAAsB;AAAA,MACtC,oBAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA,UAAM;AAAA,MAC1C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,cAAW;AAAA,UACX,UAAU,YAAY,CAAC,SAAS,CAAC,MAAM,KAAA;AAAA,UACvC,SAAS,MAAM,UAAU,OAAA;AAAA,UAExB,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * One chat turn. User turns are right-aligned cards; assistant turns are
3
+ * full-width prose under a mono name label.
4
+ */
5
+ export interface MessageProps {
6
+ /** @default "assistant" */
7
+ role?: "user" | "assistant";
8
+ /** Assistant label. @default "Agentaily" */
9
+ name?: string;
10
+ /** Mono timestamp next to the name. */
11
+ time?: string;
12
+ /** Append a blinking block cursor (response in progress). @default false */
13
+ streaming?: boolean;
14
+ children?: React.ReactNode;
15
+ }
16
+ export declare function Message(props: MessageProps): JSX.Element;
@@ -0,0 +1,63 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_MSG_CSS = `
4
+ .ax-msg { display: flex; flex-direction: column; }
5
+ .ax-msg--user { align-items: flex-end; }
6
+ .ax-msg--user .ax-msg__body {
7
+ max-width: 78%;
8
+ background: var(--surface-card);
9
+ border: 1px solid var(--border-default);
10
+ border-radius: var(--radius-3);
11
+ padding: 10px 14px;
12
+ }
13
+ .ax-msg--assistant { align-items: stretch; }
14
+ .ax-msg__head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 6px; }
15
+ .ax-msg__name {
16
+ font-family: var(--font-mono); font-size: var(--text-xs);
17
+ font-weight: var(--weight-medium); letter-spacing: var(--tracking-label);
18
+ text-transform: uppercase; color: var(--text-faint);
19
+ }
20
+ .ax-msg__time { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint); opacity: 0.7; }
21
+ .ax-msg__body { font-size: var(--text-md); line-height: var(--leading-body); color: var(--text-body); min-width: 0; }
22
+ .ax-msg__body > p { margin: 0 0 0.7em; }
23
+ .ax-msg__body > p:last-child { margin-bottom: 0; }
24
+ .ax-msg__cursor {
25
+ display: inline-block; width: 0.55em; height: 1.05em;
26
+ background: currentColor; vertical-align: text-bottom; margin-left: 2px;
27
+ animation: ax-msg-blink 1.1s steps(1) infinite;
28
+ }
29
+ @keyframes ax-msg-blink { 50% { opacity: 0; } }
30
+ @media (prefers-reduced-motion: reduce) { .ax-msg__cursor { animation: none; } }
31
+ `;
32
+ if (typeof document !== "undefined" && !document.getElementById("ax-msg-css")) {
33
+ const s = document.createElement("style");
34
+ s.id = "ax-msg-css";
35
+ s.textContent = AX_MSG_CSS;
36
+ document.head.appendChild(s);
37
+ }
38
+ function Message({
39
+ role = "assistant",
40
+ name,
41
+ time,
42
+ streaming = false,
43
+ children,
44
+ className = "",
45
+ ...rest
46
+ }) {
47
+ const isUser = role === "user";
48
+ const cls = ["ax-msg", isUser ? "ax-msg--user" : "ax-msg--assistant", className].filter(Boolean).join(" ");
49
+ return /* @__PURE__ */ jsxs("div", { className: cls, ...rest, children: [
50
+ !isUser ? /* @__PURE__ */ jsxs("div", { className: "ax-msg__head", children: [
51
+ /* @__PURE__ */ jsx("span", { className: "ax-msg__name", children: name || "Agentaily" }),
52
+ time ? /* @__PURE__ */ jsx("span", { className: "ax-msg__time", children: time }) : null
53
+ ] }) : null,
54
+ /* @__PURE__ */ jsxs("div", { className: "ax-msg__body", children: [
55
+ children,
56
+ streaming ? /* @__PURE__ */ jsx("span", { className: "ax-msg__cursor" }) : null
57
+ ] })
58
+ ] });
59
+ }
60
+ export {
61
+ Message
62
+ };
63
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sources":["../../../src/components/chat/Message.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_MSG_CSS = `\n.ax-msg { display: flex; flex-direction: column; }\n.ax-msg--user { align-items: flex-end; }\n.ax-msg--user .ax-msg__body {\n max-width: 78%;\n background: var(--surface-card);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-3);\n padding: 10px 14px;\n}\n.ax-msg--assistant { align-items: stretch; }\n.ax-msg__head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 6px; }\n.ax-msg__name {\n font-family: var(--font-mono); font-size: var(--text-xs);\n font-weight: var(--weight-medium); letter-spacing: var(--tracking-label);\n text-transform: uppercase; color: var(--text-faint);\n}\n.ax-msg__time { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint); opacity: 0.7; }\n.ax-msg__body { font-size: var(--text-md); line-height: var(--leading-body); color: var(--text-body); min-width: 0; }\n.ax-msg__body > p { margin: 0 0 0.7em; }\n.ax-msg__body > p:last-child { margin-bottom: 0; }\n.ax-msg__cursor {\n display: inline-block; width: 0.55em; height: 1.05em;\n background: currentColor; vertical-align: text-bottom; margin-left: 2px;\n animation: ax-msg-blink 1.1s steps(1) infinite;\n}\n@keyframes ax-msg-blink { 50% { opacity: 0; } }\n@media (prefers-reduced-motion: reduce) { .ax-msg__cursor { animation: none; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-msg-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-msg-css\";\n s.textContent = AX_MSG_CSS;\n document.head.appendChild(s);\n}\n\nexport function Message({\n role = \"assistant\",\n name,\n time,\n streaming = false,\n children,\n className = \"\",\n ...rest\n}) {\n const isUser = role === \"user\";\n const cls = [\"ax-msg\", isUser ? \"ax-msg--user\" : \"ax-msg--assistant\", className].filter(Boolean).join(\" \");\n return (\n <div className={cls} {...rest}>\n {!isUser ? (\n <div className=\"ax-msg__head\">\n <span className=\"ax-msg__name\">{name || \"Agentaily\"}</span>\n {time ? <span className=\"ax-msg__time\">{time}</span> : null}\n </div>\n ) : null}\n <div className=\"ax-msg__body\">\n {children}\n {streaming ? <span className=\"ax-msg__cursor\"></span> : null}\n </div>\n </div>\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;AAAA;AAAA;AA8BnB,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,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,GAAG;AACD,QAAM,SAAS,SAAS;AACxB,QAAM,MAAM,CAAC,UAAU,SAAS,iBAAiB,qBAAqB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACzG,SACE,qBAAC,OAAA,EAAI,WAAW,KAAM,GAAG,MACtB,UAAA;AAAA,IAAA,CAAC,SACA,qBAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,gBAAgB,UAAA,QAAQ,aAAY;AAAA,MACnD,OAAO,oBAAC,QAAA,EAAK,WAAU,gBAAgB,gBAAK,IAAU;AAAA,IAAA,EAAA,CACzD,IACE;AAAA,IACJ,qBAAC,OAAA,EAAI,WAAU,gBACZ,UAAA;AAAA,MAAA;AAAA,MACA,YAAY,oBAAC,QAAA,EAAK,WAAU,kBAAiB,IAAU;AAAA,IAAA,EAAA,CAC1D;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ /** Agent identity pill: square avatar, name, optional model tag, working/idle/error status. */
2
+ export interface AgentProps { name?: string; model?: string; status?: "working" | "idle" | "error"; task?: string; }
3
+ export declare function Agent(props: AgentProps): JSX.Element;
@@ -0,0 +1,44 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_AGENT_CSS = `
4
+ .ax-agent { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border: 1px solid var(--border-default); border-radius: var(--radius-full); background: var(--surface-card); }
5
+ .ax-agent__avatar { width: 26px; height: 26px; flex: none; border-radius: var(--radius-2); background: var(--accent); color: var(--accent-fg); display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 12px; font-weight: var(--weight-bold); }
6
+ .ax-agent__body { display: flex; flex-direction: column; min-width: 0; }
7
+ .ax-agent__name { font-family: var(--font-mono); font-size: var(--text-sm); color: var(--text-body); display: flex; align-items: center; gap: 7px; }
8
+ .ax-agent__status { display: flex; align-items: center; gap: 5px; font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }
9
+ .ax-agent__dot { width: 6px; height: 6px; border-radius: 1px; background: var(--text-faint); }
10
+ .ax-agent--working .ax-agent__dot { background: var(--warn); animation: ax-agent-pulse 1s var(--ease-out) infinite; }
11
+ .ax-agent--working .ax-agent__status { color: var(--warn); }
12
+ .ax-agent--idle .ax-agent__dot { background: var(--ok); }
13
+ .ax-agent--idle .ax-agent__status { color: var(--ok); }
14
+ .ax-agent__model { font-size: 10px; color: var(--text-faint); border: 1px solid var(--border-default); border-radius: var(--radius-1); padding: 1px 5px; }
15
+ @keyframes ax-agent-pulse { 50% { opacity: 0.35; } }
16
+ @media (prefers-reduced-motion: reduce) { .ax-agent--working .ax-agent__dot { animation: none; } }
17
+ `;
18
+ if (typeof document !== "undefined" && !document.getElementById("ax-agent-css")) {
19
+ const s = document.createElement("style");
20
+ s.id = "ax-agent-css";
21
+ s.textContent = AX_AGENT_CSS;
22
+ document.head.appendChild(s);
23
+ }
24
+ const STATUS = { working: "Working", idle: "Ready", error: "Error" };
25
+ function Agent({ name = "agent", model, status = "idle", task, className = "", ...rest }) {
26
+ const initials = name.slice(0, 2).toUpperCase();
27
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-agent", "ax-agent--" + status, className].filter(Boolean).join(" "), ...rest, children: [
28
+ /* @__PURE__ */ jsx("span", { className: "ax-agent__avatar", children: initials }),
29
+ /* @__PURE__ */ jsxs("span", { className: "ax-agent__body", children: [
30
+ /* @__PURE__ */ jsxs("span", { className: "ax-agent__name", children: [
31
+ name,
32
+ model ? /* @__PURE__ */ jsx("span", { className: "ax-agent__model", children: model }) : null
33
+ ] }),
34
+ /* @__PURE__ */ jsxs("span", { className: "ax-agent__status", children: [
35
+ /* @__PURE__ */ jsx("span", { className: "ax-agent__dot" }),
36
+ task || STATUS[status]
37
+ ] })
38
+ ] })
39
+ ] });
40
+ }
41
+ export {
42
+ Agent
43
+ };
44
+ //# sourceMappingURL=Agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Agent.js","sources":["../../../src/components/code/Agent.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_AGENT_CSS = `\n.ax-agent { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border: 1px solid var(--border-default); border-radius: var(--radius-full); background: var(--surface-card); }\n.ax-agent__avatar { width: 26px; height: 26px; flex: none; border-radius: var(--radius-2); background: var(--accent); color: var(--accent-fg); display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 12px; font-weight: var(--weight-bold); }\n.ax-agent__body { display: flex; flex-direction: column; min-width: 0; }\n.ax-agent__name { font-family: var(--font-mono); font-size: var(--text-sm); color: var(--text-body); display: flex; align-items: center; gap: 7px; }\n.ax-agent__status { display: flex; align-items: center; gap: 5px; font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }\n.ax-agent__dot { width: 6px; height: 6px; border-radius: 1px; background: var(--text-faint); }\n.ax-agent--working .ax-agent__dot { background: var(--warn); animation: ax-agent-pulse 1s var(--ease-out) infinite; }\n.ax-agent--working .ax-agent__status { color: var(--warn); }\n.ax-agent--idle .ax-agent__dot { background: var(--ok); }\n.ax-agent--idle .ax-agent__status { color: var(--ok); }\n.ax-agent__model { font-size: 10px; color: var(--text-faint); border: 1px solid var(--border-default); border-radius: var(--radius-1); padding: 1px 5px; }\n@keyframes ax-agent-pulse { 50% { opacity: 0.35; } }\n@media (prefers-reduced-motion: reduce) { .ax-agent--working .ax-agent__dot { animation: none; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-agent-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-agent-css\";\n s.textContent = AX_AGENT_CSS;\n document.head.appendChild(s);\n}\n\nconst STATUS = { working: \"Working\", idle: \"Ready\", error: \"Error\" };\n\nexport function Agent({ name = \"agent\", model, status = \"idle\", task, className = \"\", ...rest }) {\n const initials = name.slice(0, 2).toUpperCase();\n return (\n <div className={[\"ax-agent\", \"ax-agent--\" + status, className].filter(Boolean).join(\" \")} {...rest}>\n <span className=\"ax-agent__avatar\">{initials}</span>\n <span className=\"ax-agent__body\">\n <span className=\"ax-agent__name\">{name}{model ? <span className=\"ax-agent__model\">{model}</span> : null}</span>\n <span className=\"ax-agent__status\"><span className=\"ax-agent__dot\"></span>{task || STATUS[status]}</span>\n </span>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBrB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,cAAc,GAAG;AAC/E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEA,MAAM,SAAS,EAAE,SAAS,WAAW,MAAM,SAAS,OAAO,QAAA;AAEpD,SAAS,MAAM,EAAE,OAAO,SAAS,OAAO,SAAS,QAAQ,MAAM,YAAY,IAAI,GAAG,KAAA,GAAQ;AAC/F,QAAM,WAAW,KAAK,MAAM,GAAG,CAAC,EAAE,YAAA;AAClC,8BACG,OAAA,EAAI,WAAW,CAAC,YAAY,eAAe,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAC5F,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,oBAAoB,UAAA,UAAS;AAAA,IAC7C,qBAAC,QAAA,EAAK,WAAU,kBACd,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA;AAAA,QAAA;AAAA,QAAM,QAAQ,oBAAC,QAAA,EAAK,WAAU,mBAAmB,iBAAM,IAAU;AAAA,MAAA,GAAK;AAAA,MACxG,qBAAC,QAAA,EAAK,WAAU,oBAAmB,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,gBAAA,CAAgB;AAAA,QAAQ,QAAQ,OAAO,MAAM;AAAA,MAAA,EAAA,CAAE;AAAA,IAAA,EAAA,CACpG;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ /** Generated artifact frame with Preview/Code tabs and an action slot. */
2
+ export interface ArtifactProps { title?: string; subtitle?: string; code?: string; preview?: React.ReactNode; defaultTab?: "preview" | "code"; actions?: React.ReactNode; }
3
+ export declare function Artifact(props: ArtifactProps): JSX.Element;
@@ -0,0 +1,50 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ const AX_ARTIFACT_CSS = `
4
+ .ax-artifact { border: 1px solid var(--border-strong); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); }
5
+ .ax-artifact__head { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--border-default); }
6
+ .ax-artifact__icon { width: 16px; height: 16px; flex: none; color: var(--text-faint); }
7
+ .ax-artifact__meta { flex: 1; min-width: 0; }
8
+ .ax-artifact__title { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
9
+ .ax-artifact__sub { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); margin-top: 1px; }
10
+ .ax-artifact__tabs { display: flex; gap: 2px; padding: 2px; background: var(--surface-raised); border-radius: var(--radius-2); }
11
+ .ax-artifact__tab { appearance: none; background: none; border: none; cursor: pointer; padding: 4px 10px; border-radius: var(--radius-1); font-family: var(--font-mono); font-size: 11px; color: var(--text-faint); }
12
+ .ax-artifact__tab--active { background: var(--surface-card); color: var(--text-body); }
13
+ .ax-artifact__actions { display: flex; gap: 2px; }
14
+ .ax-artifact__body { max-height: 280px; overflow: auto; }
15
+ .ax-artifact__preview { padding: 20px; background: var(--bg-0); min-height: 120px; }
16
+ [data-theme="light"] .ax-artifact__preview { background: var(--bg-1); }
17
+ .ax-artifact__pre { margin: 0; padding: 14px 16px; font-family: var(--font-mono); font-size: var(--text-sm); line-height: 1.6; color: var(--text-body); white-space: pre; overflow-x: auto; }
18
+ `;
19
+ if (typeof document !== "undefined" && !document.getElementById("ax-artifact-css")) {
20
+ const s = document.createElement("style");
21
+ s.id = "ax-artifact-css";
22
+ s.textContent = AX_ARTIFACT_CSS;
23
+ document.head.appendChild(s);
24
+ }
25
+ const Box = /* @__PURE__ */ jsxs("svg", { className: "ax-artifact__icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
26
+ /* @__PURE__ */ jsx("path", { d: "M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" }),
27
+ /* @__PURE__ */ jsx("path", { d: "m3.3 7 8.7 5 8.7-5M12 22V12" })
28
+ ] });
29
+ function Artifact({ title = "Artifact", subtitle, code, preview, defaultTab = "preview", actions, className = "", ...rest }) {
30
+ const [tab, setTab] = useState(preview ? defaultTab : "code");
31
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-artifact", className].filter(Boolean).join(" "), ...rest, children: [
32
+ /* @__PURE__ */ jsxs("div", { className: "ax-artifact__head", children: [
33
+ Box,
34
+ /* @__PURE__ */ jsxs("div", { className: "ax-artifact__meta", children: [
35
+ /* @__PURE__ */ jsx("p", { className: "ax-artifact__title", children: title }),
36
+ subtitle ? /* @__PURE__ */ jsx("p", { className: "ax-artifact__sub", children: subtitle }) : null
37
+ ] }),
38
+ preview && code ? /* @__PURE__ */ jsxs("div", { className: "ax-artifact__tabs", children: [
39
+ /* @__PURE__ */ jsx("button", { className: "ax-artifact__tab" + (tab === "preview" ? " ax-artifact__tab--active" : ""), onClick: () => setTab("preview"), children: "Preview" }),
40
+ /* @__PURE__ */ jsx("button", { className: "ax-artifact__tab" + (tab === "code" ? " ax-artifact__tab--active" : ""), onClick: () => setTab("code"), children: "Code" })
41
+ ] }) : null,
42
+ actions ? /* @__PURE__ */ jsx("div", { className: "ax-artifact__actions", children: actions }) : null
43
+ ] }),
44
+ /* @__PURE__ */ jsx("div", { className: "ax-artifact__body", children: tab === "preview" && preview ? /* @__PURE__ */ jsx("div", { className: "ax-artifact__preview", children: preview }) : /* @__PURE__ */ jsx("pre", { className: "ax-artifact__pre", children: code }) })
45
+ ] });
46
+ }
47
+ export {
48
+ Artifact
49
+ };
50
+ //# sourceMappingURL=Artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Artifact.js","sources":["../../../src/components/code/Artifact.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_ARTIFACT_CSS = `\n.ax-artifact { border: 1px solid var(--border-strong); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); }\n.ax-artifact__head { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--border-default); }\n.ax-artifact__icon { width: 16px; height: 16px; flex: none; color: var(--text-faint); }\n.ax-artifact__meta { flex: 1; min-width: 0; }\n.ax-artifact__title { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ax-artifact__sub { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); margin-top: 1px; }\n.ax-artifact__tabs { display: flex; gap: 2px; padding: 2px; background: var(--surface-raised); border-radius: var(--radius-2); }\n.ax-artifact__tab { appearance: none; background: none; border: none; cursor: pointer; padding: 4px 10px; border-radius: var(--radius-1); font-family: var(--font-mono); font-size: 11px; color: var(--text-faint); }\n.ax-artifact__tab--active { background: var(--surface-card); color: var(--text-body); }\n.ax-artifact__actions { display: flex; gap: 2px; }\n.ax-artifact__body { max-height: 280px; overflow: auto; }\n.ax-artifact__preview { padding: 20px; background: var(--bg-0); min-height: 120px; }\n[data-theme=\"light\"] .ax-artifact__preview { background: var(--bg-1); }\n.ax-artifact__pre { margin: 0; padding: 14px 16px; font-family: var(--font-mono); font-size: var(--text-sm); line-height: 1.6; color: var(--text-body); white-space: pre; overflow-x: auto; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-artifact-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-artifact-css\";\n s.textContent = AX_ARTIFACT_CSS;\n document.head.appendChild(s);\n}\n\nconst Box = <svg className=\"ax-artifact__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><path d=\"m3.3 7 8.7 5 8.7-5M12 22V12\"></path></svg>;\n\nexport function Artifact({ title = \"Artifact\", subtitle, code, preview, defaultTab = \"preview\", actions, className = \"\", ...rest }) {\n const [tab, setTab] = useState(preview ? defaultTab : \"code\");\n return (\n <div className={[\"ax-artifact\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-artifact__head\">\n {Box}\n <div className=\"ax-artifact__meta\">\n <p className=\"ax-artifact__title\">{title}</p>\n {subtitle ? <p className=\"ax-artifact__sub\">{subtitle}</p> : null}\n </div>\n {preview && code ? (\n <div className=\"ax-artifact__tabs\">\n <button className={\"ax-artifact__tab\" + (tab === \"preview\" ? \" ax-artifact__tab--active\" : \"\")} onClick={() => setTab(\"preview\")}>Preview</button>\n <button className={\"ax-artifact__tab\" + (tab === \"code\" ? \" ax-artifact__tab--active\" : \"\")} onClick={() => setTab(\"code\")}>Code</button>\n </div>\n ) : null}\n {actions ? <div className=\"ax-artifact__actions\">{actions}</div> : null}\n </div>\n <div className=\"ax-artifact__body\">\n {tab === \"preview\" && preview ? <div className=\"ax-artifact__preview\">{preview}</div> : <pre className=\"ax-artifact__pre\">{code}</pre>}\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;AAiBxB,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,MAAM,qBAAC,OAAA,EAAI,WAAU,qBAAoB,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,4HAAA,CAA4H;AAAA,EAAO,oBAAC,QAAA,EAAK,GAAE,8BAAA,CAA8B;AAAA,GAAO;AAEnV,SAAS,SAAS,EAAE,QAAQ,YAAY,UAAU,MAAM,SAAS,aAAa,WAAW,SAAS,YAAY,IAAI,GAAG,QAAQ;AAClI,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,UAAU,aAAa,MAAM;AAC5D,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACxE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,qBACZ,UAAA;AAAA,MAAA;AAAA,MACD,qBAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,QAAA,oBAAC,KAAA,EAAE,WAAU,sBAAsB,UAAA,OAAM;AAAA,QACxC,WAAW,oBAAC,KAAA,EAAE,WAAU,oBAAoB,oBAAS,IAAO;AAAA,MAAA,GAC/D;AAAA,MACC,WAAW,OACV,qBAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAO,WAAW,sBAAsB,QAAQ,YAAY,8BAA8B,KAAK,SAAS,MAAM,OAAO,SAAS,GAAG,UAAA,WAAO;AAAA,QACzI,oBAAC,UAAA,EAAO,WAAW,sBAAsB,QAAQ,SAAS,8BAA8B,KAAK,SAAS,MAAM,OAAO,MAAM,GAAG,UAAA,OAAA,CAAI;AAAA,MAAA,EAAA,CAClI,IACE;AAAA,MACH,UAAU,oBAAC,OAAA,EAAI,WAAU,wBAAwB,mBAAQ,IAAS;AAAA,IAAA,GACrE;AAAA,wBACC,OAAA,EAAI,WAAU,qBACZ,UAAA,QAAQ,aAAa,UAAU,oBAAC,OAAA,EAAI,WAAU,wBAAwB,mBAAQ,IAAS,oBAAC,SAAI,WAAU,oBAAoB,gBAAK,EAAA,CAClI;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ /** Git commit row: graph node, message, hash, author, +/- stat. */
2
+ export interface CommitProps { message: React.ReactNode; hash?: string; author?: string; time?: string; additions?: number; deletions?: number; connected?: boolean; }
3
+ export declare function Commit(props: CommitProps): JSX.Element;
@@ -0,0 +1,55 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_COMMIT_CSS = `
4
+ .ax-commit { display: flex; gap: 12px; padding: 10px 12px; border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); font-family: var(--font-mono); }
5
+ .ax-commit__graph { display: flex; flex-direction: column; align-items: center; flex: none; padding-top: 2px; }
6
+ .ax-commit__node { width: 10px; height: 10px; border-radius: var(--radius-1); border: 2px solid var(--text-muted); background: var(--surface-card); }
7
+ .ax-commit__line { width: 2px; flex: 1; background: var(--border-strong); margin-top: 2px; min-height: 8px; }
8
+ .ax-commit__body { flex: 1; min-width: 0; }
9
+ .ax-commit__msg { font-family: var(--font-body); font-size: var(--text-sm); color: var(--text-body); margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
10
+ .ax-commit__meta { display: flex; align-items: center; gap: 8px; margin-top: 4px; font-size: 11px; color: var(--text-faint); }
11
+ .ax-commit__hash { color: var(--text-muted); background: var(--surface-raised); padding: 0 5px; border-radius: var(--radius-1); }
12
+ .ax-commit__author { color: var(--text-faint); }
13
+ .ax-commit__stat { display: inline-flex; gap: 6px; margin-left: auto; }
14
+ .ax-commit__add { color: var(--ok); }
15
+ .ax-commit__del { color: var(--danger); }
16
+ `;
17
+ if (typeof document !== "undefined" && !document.getElementById("ax-commit-css")) {
18
+ const s = document.createElement("style");
19
+ s.id = "ax-commit-css";
20
+ s.textContent = AX_COMMIT_CSS;
21
+ document.head.appendChild(s);
22
+ }
23
+ function Commit({ message, hash, author, time, additions, deletions, connected = false, className = "", ...rest }) {
24
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-commit", className].filter(Boolean).join(" "), ...rest, children: [
25
+ /* @__PURE__ */ jsxs("div", { className: "ax-commit__graph", children: [
26
+ /* @__PURE__ */ jsx("span", { className: "ax-commit__node" }),
27
+ connected ? /* @__PURE__ */ jsx("span", { className: "ax-commit__line" }) : null
28
+ ] }),
29
+ /* @__PURE__ */ jsxs("div", { className: "ax-commit__body", children: [
30
+ /* @__PURE__ */ jsx("p", { className: "ax-commit__msg", children: message }),
31
+ /* @__PURE__ */ jsxs("div", { className: "ax-commit__meta", children: [
32
+ hash ? /* @__PURE__ */ jsx("span", { className: "ax-commit__hash", children: hash }) : null,
33
+ author ? /* @__PURE__ */ jsx("span", { className: "ax-commit__author", children: author }) : null,
34
+ time ? /* @__PURE__ */ jsxs("span", { className: "ax-commit__author", children: [
35
+ "· ",
36
+ time
37
+ ] }) : null,
38
+ additions != null || deletions != null ? /* @__PURE__ */ jsxs("span", { className: "ax-commit__stat", children: [
39
+ additions != null ? /* @__PURE__ */ jsxs("span", { className: "ax-commit__add", children: [
40
+ "+",
41
+ additions
42
+ ] }) : null,
43
+ deletions != null ? /* @__PURE__ */ jsxs("span", { className: "ax-commit__del", children: [
44
+ "−",
45
+ deletions
46
+ ] }) : null
47
+ ] }) : null
48
+ ] })
49
+ ] })
50
+ ] });
51
+ }
52
+ export {
53
+ Commit
54
+ };
55
+ //# sourceMappingURL=Commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Commit.js","sources":["../../../src/components/code/Commit.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_COMMIT_CSS = `\n.ax-commit { display: flex; gap: 12px; padding: 10px 12px; border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); font-family: var(--font-mono); }\n.ax-commit__graph { display: flex; flex-direction: column; align-items: center; flex: none; padding-top: 2px; }\n.ax-commit__node { width: 10px; height: 10px; border-radius: var(--radius-1); border: 2px solid var(--text-muted); background: var(--surface-card); }\n.ax-commit__line { width: 2px; flex: 1; background: var(--border-strong); margin-top: 2px; min-height: 8px; }\n.ax-commit__body { flex: 1; min-width: 0; }\n.ax-commit__msg { font-family: var(--font-body); font-size: var(--text-sm); color: var(--text-body); margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ax-commit__meta { display: flex; align-items: center; gap: 8px; margin-top: 4px; font-size: 11px; color: var(--text-faint); }\n.ax-commit__hash { color: var(--text-muted); background: var(--surface-raised); padding: 0 5px; border-radius: var(--radius-1); }\n.ax-commit__author { color: var(--text-faint); }\n.ax-commit__stat { display: inline-flex; gap: 6px; margin-left: auto; }\n.ax-commit__add { color: var(--ok); }\n.ax-commit__del { color: var(--danger); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-commit-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-commit-css\";\n s.textContent = AX_COMMIT_CSS;\n document.head.appendChild(s);\n}\n\nexport function Commit({ message, hash, author, time, additions, deletions, connected = false, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-commit\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-commit__graph\">\n <span className=\"ax-commit__node\"></span>\n {connected ? <span className=\"ax-commit__line\"></span> : null}\n </div>\n <div className=\"ax-commit__body\">\n <p className=\"ax-commit__msg\">{message}</p>\n <div className=\"ax-commit__meta\">\n {hash ? <span className=\"ax-commit__hash\">{hash}</span> : null}\n {author ? <span className=\"ax-commit__author\">{author}</span> : null}\n {time ? <span className=\"ax-commit__author\">· {time}</span> : null}\n {(additions != null || deletions != null) ? (\n <span className=\"ax-commit__stat\">\n {additions != null ? <span className=\"ax-commit__add\">+{additions}</span> : null}\n {deletions != null ? <span className=\"ax-commit__del\">−{deletions}</span> : null}\n </span>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAetB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,eAAe,GAAG;AAChF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,OAAO,EAAE,SAAS,MAAM,QAAQ,MAAM,WAAW,WAAW,YAAY,OAAO,YAAY,IAAI,GAAG,QAAQ;AACxH,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,aAAa,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACtE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,kBAAA,CAAkB;AAAA,MACjC,YAAY,oBAAC,QAAA,EAAK,WAAU,mBAAkB,IAAU;AAAA,IAAA,GAC3D;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAE,WAAU,kBAAkB,UAAA,SAAQ;AAAA,MACvC,qBAAC,OAAA,EAAI,WAAU,mBACZ,UAAA;AAAA,QAAA,OAAO,oBAAC,QAAA,EAAK,WAAU,mBAAmB,gBAAK,IAAU;AAAA,QACzD,SAAS,oBAAC,QAAA,EAAK,WAAU,qBAAqB,kBAAO,IAAU;AAAA,QAC/D,OAAO,qBAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA;AAAA,UAAA;AAAA,UAAG;AAAA,QAAA,EAAA,CAAK,IAAU;AAAA,QAC5D,aAAa,QAAQ,aAAa,OAClC,qBAAC,QAAA,EAAK,WAAU,mBACb,UAAA;AAAA,UAAA,aAAa,OAAO,qBAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA;AAAA,YAAA;AAAA,YAAE;AAAA,UAAA,EAAA,CAAU,IAAU;AAAA,UAC3E,aAAa,OAAO,qBAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA;AAAA,YAAA;AAAA,YAAE;AAAA,UAAA,EAAA,CAAU,IAAU;AAAA,QAAA,EAAA,CAC9E,IACE;AAAA,MAAA,EAAA,CACN;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,4 @@
1
+ /** Env var table with masked secret values and a reveal toggle. */
2
+ export interface EnvVar { key: string; value: string; secret?: boolean; }
3
+ export interface EnvironmentVariablesProps { title?: string; vars: Array<EnvVar | [string, string]>; }
4
+ export declare function EnvironmentVariables(props: EnvironmentVariablesProps): JSX.Element;
@@ -0,0 +1,49 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ const AX_ENVVARS_CSS = `
4
+ .ax-envvars { border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); font-family: var(--font-mono); }
5
+ .ax-envvars__head { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--border-default); }
6
+ .ax-envvars__title { font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); flex: 1; }
7
+ .ax-envvars__reveal { appearance: none; background: none; border: 1px solid var(--border-default); cursor: pointer; color: var(--text-faint); font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; padding: 3px 7px; border-radius: var(--radius-1); }
8
+ .ax-envvars__reveal:hover { color: var(--text-body); border-color: var(--border-strong); }
9
+ .ax-envvars__row { display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-bottom: 1px solid var(--border-default); }
10
+ .ax-envvars__row:last-child { border-bottom: none; }
11
+ .ax-envvars__key { color: var(--text-body); font-size: var(--text-sm); flex: none; min-width: 140px; }
12
+ .ax-envvars__val { color: var(--text-muted); font-size: var(--text-sm); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
13
+ .ax-envvars__val--hidden { letter-spacing: 1px; }
14
+ .ax-envvars__copy { appearance: none; background: none; border: none; cursor: pointer; color: var(--text-faint); font-size: 11px; padding: 2px 5px; border-radius: var(--radius-1); flex: none; }
15
+ .ax-envvars__copy:hover { color: var(--text-body); }
16
+ `;
17
+ if (typeof document !== "undefined" && !document.getElementById("ax-envvars-css")) {
18
+ const s = document.createElement("style");
19
+ s.id = "ax-envvars-css";
20
+ s.textContent = AX_ENVVARS_CSS;
21
+ document.head.appendChild(s);
22
+ }
23
+ function EnvironmentVariables({ title = "Environment", vars = [], className = "", ...rest }) {
24
+ const [reveal, setReveal] = useState(false);
25
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-envvars", className].filter(Boolean).join(" "), ...rest, children: [
26
+ /* @__PURE__ */ jsxs("div", { className: "ax-envvars__head", children: [
27
+ /* @__PURE__ */ jsx("span", { className: "ax-envvars__title", children: title }),
28
+ /* @__PURE__ */ jsx("button", { className: "ax-envvars__reveal", onClick: () => setReveal((r) => !r), children: reveal ? "Hide" : "Reveal" })
29
+ ] }),
30
+ vars.map((v, i) => {
31
+ const item = Array.isArray(v) ? { key: v[0], value: v[1] } : v;
32
+ const secret = item.secret !== false;
33
+ return /* @__PURE__ */ jsxs("div", { className: "ax-envvars__row", children: [
34
+ /* @__PURE__ */ jsx("span", { className: "ax-envvars__key", children: item.key }),
35
+ /* @__PURE__ */ jsx("span", { className: "ax-envvars__val" + (secret && !reveal ? " ax-envvars__val--hidden" : ""), children: secret && !reveal ? "••••••••••••" : item.value }),
36
+ /* @__PURE__ */ jsx("button", { className: "ax-envvars__copy", onClick: () => {
37
+ try {
38
+ navigator.clipboard && navigator.clipboard.writeText(item.value);
39
+ } catch (e) {
40
+ }
41
+ }, children: "copy" })
42
+ ] }, i);
43
+ })
44
+ ] });
45
+ }
46
+ export {
47
+ EnvironmentVariables
48
+ };
49
+ //# sourceMappingURL=EnvironmentVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentVariables.js","sources":["../../../src/components/code/EnvironmentVariables.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_ENVVARS_CSS = `\n.ax-envvars { border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); font-family: var(--font-mono); }\n.ax-envvars__head { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--border-default); }\n.ax-envvars__title { font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); flex: 1; }\n.ax-envvars__reveal { appearance: none; background: none; border: 1px solid var(--border-default); cursor: pointer; color: var(--text-faint); font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase; padding: 3px 7px; border-radius: var(--radius-1); }\n.ax-envvars__reveal:hover { color: var(--text-body); border-color: var(--border-strong); }\n.ax-envvars__row { display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-bottom: 1px solid var(--border-default); }\n.ax-envvars__row:last-child { border-bottom: none; }\n.ax-envvars__key { color: var(--text-body); font-size: var(--text-sm); flex: none; min-width: 140px; }\n.ax-envvars__val { color: var(--text-muted); font-size: var(--text-sm); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ax-envvars__val--hidden { letter-spacing: 1px; }\n.ax-envvars__copy { appearance: none; background: none; border: none; cursor: pointer; color: var(--text-faint); font-size: 11px; padding: 2px 5px; border-radius: var(--radius-1); flex: none; }\n.ax-envvars__copy:hover { color: var(--text-body); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-envvars-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-envvars-css\";\n s.textContent = AX_ENVVARS_CSS;\n document.head.appendChild(s);\n}\n\nexport function EnvironmentVariables({ title = \"Environment\", vars = [], className = \"\", ...rest }) {\n const [reveal, setReveal] = useState(false);\n return (\n <div className={[\"ax-envvars\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-envvars__head\">\n <span className=\"ax-envvars__title\">{title}</span>\n <button className=\"ax-envvars__reveal\" onClick={() => setReveal((r) => !r)}>{reveal ? \"Hide\" : \"Reveal\"}</button>\n </div>\n {vars.map((v, i) => {\n const item = Array.isArray(v) ? { key: v[0], value: v[1] } : v;\n const secret = item.secret !== false;\n return (\n <div className=\"ax-envvars__row\" key={i}>\n <span className=\"ax-envvars__key\">{item.key}</span>\n <span className={\"ax-envvars__val\" + (secret && !reveal ? \" ax-envvars__val--hidden\" : \"\")}>\n {secret && !reveal ? \"••••••••••••\" : item.value}\n </span>\n <button className=\"ax-envvars__copy\" onClick={() => { try { navigator.clipboard && navigator.clipboard.writeText(item.value); } catch (e) {} }}>copy</button>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAevB,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,qBAAqB,EAAE,QAAQ,eAAe,OAAO,CAAA,GAAI,YAAY,IAAI,GAAG,QAAQ;AAClG,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,cAAc,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACvE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,qBAAqB,UAAA,OAAM;AAAA,MAC3C,oBAAC,UAAA,EAAO,WAAU,sBAAqB,SAAS,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,GAAI,UAAA,SAAS,SAAS,SAAA,CAAS;AAAA,IAAA,GAC1G;AAAA,IACC,KAAK,IAAI,CAAC,GAAG,MAAM;AAClB,YAAM,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM;AAC7D,YAAM,SAAS,KAAK,WAAW;AAC/B,aACE,qBAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,mBAAmB,UAAA,KAAK,KAAI;AAAA,QAC5C,oBAAC,QAAA,EAAK,WAAW,qBAAqB,UAAU,CAAC,SAAS,6BAA6B,KACpF,UAAA,UAAU,CAAC,SAAS,iBAAiB,KAAK,OAC7C;AAAA,QACA,oBAAC,UAAA,EAAO,WAAU,oBAAmB,SAAS,MAAM;AAAE,cAAI;AAAE,sBAAU,aAAa,UAAU,UAAU,UAAU,KAAK,KAAK;AAAA,UAAG,SAAS,GAAG;AAAA,UAAC;AAAA,QAAE,GAAG,UAAA,OAAA,CAAI;AAAA,MAAA,EAAA,GALhH,CAMtC;AAAA,IAEJ,CAAC;AAAA,EAAA,GACH;AAEJ;"}
@@ -0,0 +1,4 @@
1
+ /** Collapsible file tree with folder/file icons and git status badges (add/mod/del). */
2
+ export interface FileNode { name: string; type?: "dir" | "file"; path?: string; status?: "add" | "mod" | "del"; defaultOpen?: boolean; children?: FileNode[]; }
3
+ export interface FileTreeProps { tree: FileNode[]; activePath?: string; onSelect?: (path: string) => void; }
4
+ export declare function FileTree(props: FileTreeProps): JSX.Element;
@@ -0,0 +1,59 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import React, { useState } from "react";
3
+ const AX_FILETREE_CSS = `
4
+ .ax-filetree { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 8px; font-family: var(--font-mono); font-size: var(--text-sm); }
5
+ .ax-filetree__row { display: flex; align-items: center; gap: 7px; padding: 4px 6px; border-radius: var(--radius-1); cursor: pointer; color: var(--text-muted); user-select: none; transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }
6
+ .ax-filetree__row:hover { background: var(--surface-raised); color: var(--text-body); }
7
+ .ax-filetree__row--active { background: var(--surface-raised); color: var(--text-body); }
8
+ .ax-filetree__row--active::before { content: ""; position: absolute; }
9
+ .ax-filetree__chev { width: 12px; height: 12px; flex: none; color: var(--text-faint); transition: transform var(--dur-1) var(--ease-out); }
10
+ .ax-filetree__chev--open { transform: rotate(90deg); }
11
+ .ax-filetree__chev--spacer { visibility: hidden; }
12
+ .ax-filetree__icon { width: 14px; height: 14px; flex: none; color: var(--text-faint); }
13
+ .ax-filetree__name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
14
+ .ax-filetree__badge { font-size: 9px; letter-spacing: 0.06em; text-transform: uppercase; padding: 1px 4px; border-radius: var(--radius-1); }
15
+ .ax-filetree__badge--add { color: var(--ok); background: var(--ok-dim); }
16
+ .ax-filetree__badge--mod { color: var(--warn); background: var(--warn-dim); }
17
+ .ax-filetree__badge--del { color: var(--danger); background: var(--danger-dim); }
18
+ `;
19
+ if (typeof document !== "undefined" && !document.getElementById("ax-filetree-css")) {
20
+ const s = document.createElement("style");
21
+ s.id = "ax-filetree-css";
22
+ s.textContent = AX_FILETREE_CSS;
23
+ document.head.appendChild(s);
24
+ }
25
+ const Folder = /* @__PURE__ */ jsx("svg", { className: "ax-filetree__icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }) });
26
+ const FileIcon = /* @__PURE__ */ jsxs("svg", { className: "ax-filetree__icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
27
+ /* @__PURE__ */ jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z" }),
28
+ /* @__PURE__ */ jsx("path", { d: "M14 2v6h6" })
29
+ ] });
30
+ const Chev = /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" }) });
31
+ function Node({ node, depth, activePath, onSelect }) {
32
+ const [open, setOpen] = useState(node.defaultOpen !== false);
33
+ const isDir = node.type === "dir" || node.children;
34
+ const pad = { paddingLeft: 6 + depth * 14 };
35
+ return /* @__PURE__ */ jsxs(React.Fragment, { children: [
36
+ /* @__PURE__ */ jsxs(
37
+ "div",
38
+ {
39
+ className: "ax-filetree__row" + (activePath === node.path ? " ax-filetree__row--active" : ""),
40
+ style: pad,
41
+ onClick: () => isDir ? setOpen((o) => !o) : onSelect && onSelect(node.path || node.name),
42
+ children: [
43
+ isDir ? /* @__PURE__ */ jsx("span", { className: "ax-filetree__chev" + (open ? " ax-filetree__chev--open" : ""), children: Chev }) : /* @__PURE__ */ jsx("span", { className: "ax-filetree__chev ax-filetree__chev--spacer", children: Chev }),
44
+ isDir ? Folder : FileIcon,
45
+ /* @__PURE__ */ jsx("span", { className: "ax-filetree__name", children: node.name }),
46
+ node.status ? /* @__PURE__ */ jsx("span", { className: "ax-filetree__badge ax-filetree__badge--" + node.status, children: node.status === "add" ? "A" : node.status === "mod" ? "M" : "D" }) : null
47
+ ]
48
+ }
49
+ ),
50
+ isDir && open && node.children ? node.children.map((c, i) => /* @__PURE__ */ jsx(Node, { node: c, depth: depth + 1, activePath, onSelect }, i)) : null
51
+ ] });
52
+ }
53
+ function FileTree({ tree = [], activePath, onSelect, className = "", ...rest }) {
54
+ return /* @__PURE__ */ jsx("div", { className: ["ax-filetree", className].filter(Boolean).join(" "), ...rest, children: tree.map((n, i) => /* @__PURE__ */ jsx(Node, { node: n, depth: 0, activePath, onSelect }, i)) });
55
+ }
56
+ export {
57
+ FileTree
58
+ };
59
+ //# sourceMappingURL=FileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileTree.js","sources":["../../../src/components/code/FileTree.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_FILETREE_CSS = `\n.ax-filetree { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 8px; font-family: var(--font-mono); font-size: var(--text-sm); }\n.ax-filetree__row { display: flex; align-items: center; gap: 7px; padding: 4px 6px; border-radius: var(--radius-1); cursor: pointer; color: var(--text-muted); user-select: none; transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }\n.ax-filetree__row:hover { background: var(--surface-raised); color: var(--text-body); }\n.ax-filetree__row--active { background: var(--surface-raised); color: var(--text-body); }\n.ax-filetree__row--active::before { content: \"\"; position: absolute; }\n.ax-filetree__chev { width: 12px; height: 12px; flex: none; color: var(--text-faint); transition: transform var(--dur-1) var(--ease-out); }\n.ax-filetree__chev--open { transform: rotate(90deg); }\n.ax-filetree__chev--spacer { visibility: hidden; }\n.ax-filetree__icon { width: 14px; height: 14px; flex: none; color: var(--text-faint); }\n.ax-filetree__name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ax-filetree__badge { font-size: 9px; letter-spacing: 0.06em; text-transform: uppercase; padding: 1px 4px; border-radius: var(--radius-1); }\n.ax-filetree__badge--add { color: var(--ok); background: var(--ok-dim); }\n.ax-filetree__badge--mod { color: var(--warn); background: var(--warn-dim); }\n.ax-filetree__badge--del { color: var(--danger); background: var(--danger-dim); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-filetree-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-filetree-css\";\n s.textContent = AX_FILETREE_CSS;\n document.head.appendChild(s);\n}\n\nconst Folder = <svg className=\"ax-filetree__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"></path></svg>;\nconst FileIcon = <svg className=\"ax-filetree__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\"></path><path d=\"M14 2v6h6\"></path></svg>;\nconst Chev = <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"m9 18 6-6-6-6\"></path></svg>;\n\nfunction Node({ node, depth, activePath, onSelect }) {\n const [open, setOpen] = useState(node.defaultOpen !== false);\n const isDir = node.type === \"dir\" || node.children;\n const pad = { paddingLeft: 6 + depth * 14 };\n return (\n <React.Fragment>\n <div\n className={\"ax-filetree__row\" + (activePath === node.path ? \" ax-filetree__row--active\" : \"\")}\n style={pad}\n onClick={() => isDir ? setOpen((o) => !o) : onSelect && onSelect(node.path || node.name)}\n >\n {isDir\n ? <span className={\"ax-filetree__chev\" + (open ? \" ax-filetree__chev--open\" : \"\")}>{Chev}</span>\n : <span className=\"ax-filetree__chev ax-filetree__chev--spacer\">{Chev}</span>}\n {isDir ? Folder : FileIcon}\n <span className=\"ax-filetree__name\">{node.name}</span>\n {node.status ? <span className={\"ax-filetree__badge ax-filetree__badge--\" + node.status}>{node.status === \"add\" ? \"A\" : node.status === \"mod\" ? \"M\" : \"D\"}</span> : null}\n </div>\n {isDir && open && node.children ? node.children.map((c, i) => (\n <Node key={i} node={c} depth={depth + 1} activePath={activePath} onSelect={onSelect} />\n )) : null}\n </React.Fragment>\n );\n}\n\nexport function FileTree({ tree = [], activePath, onSelect, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-filetree\", className].filter(Boolean).join(\" \")} {...rest}>\n {tree.map((n, i) => <Node key={i} node={n} depth={0} activePath={activePath} onSelect={onSelect} />)}\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;AAiBxB,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,qBAAoB,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA,oBAAC,QAAA,EAAK,GAAE,yHAAA,CAAyH,EAAA,CAAO;AAC7S,MAAM,WAAW,qBAAC,OAAA,EAAI,WAAU,qBAAoB,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,6DAAA,CAA6D;AAAA,EAAO,oBAAC,QAAA,EAAK,GAAE,YAAA,CAAY;AAAA,GAAO;AAC9Q,MAAM,OAAO,oBAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,8BAAC,QAAA,EAAK,GAAE,iBAAgB,GAAO;AAEtK,SAAS,KAAK,EAAE,MAAM,OAAO,YAAY,YAAY;AACnD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK,gBAAgB,KAAK;AAC3D,QAAM,QAAQ,KAAK,SAAS,SAAS,KAAK;AAC1C,QAAM,MAAM,EAAE,aAAa,IAAI,QAAQ,GAAA;AACvC,SACE,qBAAC,MAAM,UAAN,EACC,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,sBAAsB,eAAe,KAAK,OAAO,8BAA8B;AAAA,QAC1F,OAAO;AAAA,QACP,SAAS,MAAM,QAAQ,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,YAAY,SAAS,KAAK,QAAQ,KAAK,IAAI;AAAA,QAEtF,UAAA;AAAA,UAAA,QACG,oBAAC,QAAA,EAAK,WAAW,uBAAuB,OAAO,6BAA6B,KAAM,UAAA,KAAA,CAAK,IACvF,oBAAC,QAAA,EAAK,WAAU,+CAA+C,UAAA,MAAK;AAAA,UACvE,QAAQ,SAAS;AAAA,UAClB,oBAAC,QAAA,EAAK,WAAU,qBAAqB,eAAK,MAAK;AAAA,UAC9C,KAAK,SAAS,oBAAC,QAAA,EAAK,WAAW,4CAA4C,KAAK,QAAS,UAAA,KAAK,WAAW,QAAQ,MAAM,KAAK,WAAW,QAAQ,MAAM,KAAI,IAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAErK,SAAS,QAAQ,KAAK,WAAW,KAAK,SAAS,IAAI,CAAC,GAAG,0BACrD,MAAA,EAAa,MAAM,GAAG,OAAO,QAAQ,GAAG,YAAwB,SAAA,GAAtD,CAA0E,CACtF,IAAI;AAAA,EAAA,GACP;AAEJ;AAEO,SAAS,SAAS,EAAE,OAAO,CAAA,GAAI,YAAY,UAAU,YAAY,IAAI,GAAG,QAAQ;AACrF,SACE,oBAAC,OAAA,EAAI,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACvE,UAAA,KAAK,IAAI,CAAC,GAAG,MAAM,oBAAC,MAAA,EAAa,MAAM,GAAG,OAAO,GAAG,YAAwB,SAAA,GAA9C,CAAkE,CAAE,EAAA,CACrG;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ /** Side-by-side (or stacked) JSX source + live render panes. */
2
+ export interface JSXPreviewProps { code: string; children?: React.ReactNode; stacked?: boolean; }
3
+ export declare function JSXPreview(props: JSXPreviewProps): JSX.Element;