@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.
- package/DESIGN.md +112 -0
- package/README.md +81 -0
- package/dist/assets/logo/agentaily-mark-black.svg +5 -0
- package/dist/assets/logo/agentaily-mark-white.svg +5 -0
- package/dist/components/ai/Attachments.d.ts +23 -0
- package/dist/components/ai/Attachments.js +96 -0
- package/dist/components/ai/Attachments.js.map +1 -0
- package/dist/components/ai/Checkpoint.d.ts +3 -0
- package/dist/components/ai/Checkpoint.js +38 -0
- package/dist/components/ai/Checkpoint.js.map +1 -0
- package/dist/components/ai/Confirmation.d.ts +3 -0
- package/dist/components/ai/Confirmation.js +54 -0
- package/dist/components/ai/Confirmation.js.map +1 -0
- package/dist/components/ai/Context.d.ts +3 -0
- package/dist/components/ai/Context.js +63 -0
- package/dist/components/ai/Context.js.map +1 -0
- package/dist/components/ai/Conversation.d.ts +3 -0
- package/dist/components/ai/Conversation.js +53 -0
- package/dist/components/ai/Conversation.js.map +1 -0
- package/dist/components/ai/ModelSelector.d.ts +19 -0
- package/dist/components/ai/ModelSelector.js +92 -0
- package/dist/components/ai/ModelSelector.js.map +1 -0
- package/dist/components/ai/Plan.d.ts +4 -0
- package/dist/components/ai/Plan.js +49 -0
- package/dist/components/ai/Plan.js.map +1 -0
- package/dist/components/ai/Queue.d.ts +4 -0
- package/dist/components/ai/Queue.js +45 -0
- package/dist/components/ai/Queue.js.map +1 -0
- package/dist/components/ai/Reasoning.d.ts +17 -0
- package/dist/components/ai/Reasoning.js +60 -0
- package/dist/components/ai/Reasoning.js.map +1 -0
- package/dist/components/ai/Shimmer.d.ts +10 -0
- package/dist/components/ai/Shimmer.js +28 -0
- package/dist/components/ai/Shimmer.js.map +1 -0
- package/dist/components/ai/Sources.d.ts +23 -0
- package/dist/components/ai/Sources.js +65 -0
- package/dist/components/ai/Sources.js.map +1 -0
- package/dist/components/ai/Suggestion.d.ts +19 -0
- package/dist/components/ai/Suggestion.js +40 -0
- package/dist/components/ai/Suggestion.js.map +1 -0
- package/dist/components/ai/Task.d.ts +4 -0
- package/dist/components/ai/Task.js +48 -0
- package/dist/components/ai/Task.js.map +1 -0
- package/dist/components/ai/ToolCall.d.ts +16 -0
- package/dist/components/ai/ToolCall.js +70 -0
- package/dist/components/ai/ToolCall.js.map +1 -0
- package/dist/components/buttons/Button.d.ts +17 -0
- package/dist/components/buttons/Button.js +60 -0
- package/dist/components/buttons/Button.js.map +1 -0
- package/dist/components/buttons/ButtonGroup.d.ts +3 -0
- package/dist/components/buttons/ButtonGroup.js +27 -0
- package/dist/components/buttons/ButtonGroup.js.map +1 -0
- package/dist/components/buttons/IconButton.d.ts +16 -0
- package/dist/components/buttons/IconButton.js +49 -0
- package/dist/components/buttons/IconButton.js.map +1 -0
- package/dist/components/chat/CodeBlock.d.ts +9 -0
- package/dist/components/chat/CodeBlock.js +62 -0
- package/dist/components/chat/CodeBlock.js.map +1 -0
- package/dist/components/chat/Composer.d.ts +17 -0
- package/dist/components/chat/Composer.js +123 -0
- package/dist/components/chat/Composer.js.map +1 -0
- package/dist/components/chat/Message.d.ts +16 -0
- package/dist/components/chat/Message.js +63 -0
- package/dist/components/chat/Message.js.map +1 -0
- package/dist/components/code/Agent.d.ts +3 -0
- package/dist/components/code/Agent.js +44 -0
- package/dist/components/code/Agent.js.map +1 -0
- package/dist/components/code/Artifact.d.ts +3 -0
- package/dist/components/code/Artifact.js +50 -0
- package/dist/components/code/Artifact.js.map +1 -0
- package/dist/components/code/Commit.d.ts +3 -0
- package/dist/components/code/Commit.js +55 -0
- package/dist/components/code/Commit.js.map +1 -0
- package/dist/components/code/EnvironmentVariables.d.ts +4 -0
- package/dist/components/code/EnvironmentVariables.js +49 -0
- package/dist/components/code/EnvironmentVariables.js.map +1 -0
- package/dist/components/code/FileTree.d.ts +4 -0
- package/dist/components/code/FileTree.js +59 -0
- package/dist/components/code/FileTree.js.map +1 -0
- package/dist/components/code/JSXPreview.d.ts +3 -0
- package/dist/components/code/JSXPreview.js +35 -0
- package/dist/components/code/JSXPreview.js.map +1 -0
- package/dist/components/code/PackageInfo.d.ts +3 -0
- package/dist/components/code/PackageInfo.js +47 -0
- package/dist/components/code/PackageInfo.js.map +1 -0
- package/dist/components/code/Sandbox.d.ts +3 -0
- package/dist/components/code/Sandbox.js +43 -0
- package/dist/components/code/Sandbox.js.map +1 -0
- package/dist/components/code/SchemaDisplay.d.ts +4 -0
- package/dist/components/code/SchemaDisplay.js +43 -0
- package/dist/components/code/SchemaDisplay.js.map +1 -0
- package/dist/components/code/Snippet.d.ts +3 -0
- package/dist/components/code/Snippet.js +36 -0
- package/dist/components/code/Snippet.js.map +1 -0
- package/dist/components/code/StackTrace.d.ts +4 -0
- package/dist/components/code/StackTrace.js +46 -0
- package/dist/components/code/StackTrace.js.map +1 -0
- package/dist/components/code/Terminal.d.ts +4 -0
- package/dist/components/code/Terminal.js +73 -0
- package/dist/components/code/Terminal.js.map +1 -0
- package/dist/components/code/TestResults.d.ts +4 -0
- package/dist/components/code/TestResults.js +61 -0
- package/dist/components/code/TestResults.js.map +1 -0
- package/dist/components/code/WebPreview.d.ts +3 -0
- package/dist/components/code/WebPreview.js +48 -0
- package/dist/components/code/WebPreview.js.map +1 -0
- package/dist/components/display/Accordion.d.ts +12 -0
- package/dist/components/display/Accordion.js +60 -0
- package/dist/components/display/Accordion.js.map +1 -0
- package/dist/components/display/Avatar.d.ts +14 -0
- package/dist/components/display/Avatar.js +41 -0
- package/dist/components/display/Avatar.js.map +1 -0
- package/dist/components/display/Badge.d.ts +11 -0
- package/dist/components/display/Badge.js +40 -0
- package/dist/components/display/Badge.js.map +1 -0
- package/dist/components/display/Breadcrumb.d.ts +11 -0
- package/dist/components/display/Breadcrumb.js +32 -0
- package/dist/components/display/Breadcrumb.js.map +1 -0
- package/dist/components/display/Card.d.ts +14 -0
- package/dist/components/display/Card.js +61 -0
- package/dist/components/display/Card.js.map +1 -0
- package/dist/components/display/Carousel.d.ts +3 -0
- package/dist/components/display/Carousel.js +40 -0
- package/dist/components/display/Carousel.js.map +1 -0
- package/dist/components/display/Chart.d.ts +7 -0
- package/dist/components/display/Chart.js +68 -0
- package/dist/components/display/Chart.js.map +1 -0
- package/dist/components/display/Collapsible.d.ts +3 -0
- package/dist/components/display/Collapsible.js +36 -0
- package/dist/components/display/Collapsible.js.map +1 -0
- package/dist/components/display/DataTable.d.ts +4 -0
- package/dist/components/display/DataTable.js +72 -0
- package/dist/components/display/DataTable.js.map +1 -0
- package/dist/components/display/Empty.d.ts +14 -0
- package/dist/components/display/Empty.js +36 -0
- package/dist/components/display/Empty.js.map +1 -0
- package/dist/components/display/Item.d.ts +3 -0
- package/dist/components/display/Item.js +36 -0
- package/dist/components/display/Item.js.map +1 -0
- package/dist/components/display/Kbd.d.ts +7 -0
- package/dist/components/display/Kbd.js +27 -0
- package/dist/components/display/Kbd.js.map +1 -0
- package/dist/components/display/Pagination.d.ts +11 -0
- package/dist/components/display/Pagination.js +55 -0
- package/dist/components/display/Pagination.js.map +1 -0
- package/dist/components/display/Progress.d.ts +14 -0
- package/dist/components/display/Progress.js +43 -0
- package/dist/components/display/Progress.js.map +1 -0
- package/dist/components/display/Separator.d.ts +10 -0
- package/dist/components/display/Separator.js +33 -0
- package/dist/components/display/Separator.js.map +1 -0
- package/dist/components/display/Skeleton.d.ts +12 -0
- package/dist/components/display/Skeleton.js +43 -0
- package/dist/components/display/Skeleton.js.map +1 -0
- package/dist/components/display/Table.d.ts +20 -0
- package/dist/components/display/Table.js +42 -0
- package/dist/components/display/Table.js.map +1 -0
- package/dist/components/display/Tabs.d.ts +11 -0
- package/dist/components/display/Tabs.js +47 -0
- package/dist/components/display/Tabs.js.map +1 -0
- package/dist/components/display/Typography.d.ts +5 -0
- package/dist/components/display/Typography.js +45 -0
- package/dist/components/display/Typography.js.map +1 -0
- package/dist/components/feedback/Alert.d.ts +12 -0
- package/dist/components/feedback/Alert.js +41 -0
- package/dist/components/feedback/Alert.js.map +1 -0
- package/dist/components/feedback/Dialog.d.ts +17 -0
- package/dist/components/feedback/Dialog.js +90 -0
- package/dist/components/feedback/Dialog.js.map +1 -0
- package/dist/components/feedback/Spinner.d.ts +8 -0
- package/dist/components/feedback/Spinner.js +39 -0
- package/dist/components/feedback/Spinner.js.map +1 -0
- package/dist/components/feedback/Toast.d.ts +12 -0
- package/dist/components/feedback/Toast.js +50 -0
- package/dist/components/feedback/Toast.js.map +1 -0
- package/dist/components/feedback/Tooltip.d.ts +11 -0
- package/dist/components/feedback/Tooltip.js +34 -0
- package/dist/components/feedback/Tooltip.js.map +1 -0
- package/dist/components/inputs/Calendar.d.ts +3 -0
- package/dist/components/inputs/Calendar.js +81 -0
- package/dist/components/inputs/Calendar.js.map +1 -0
- package/dist/components/inputs/Checkbox.d.ts +10 -0
- package/dist/components/inputs/Checkbox.js +42 -0
- package/dist/components/inputs/Checkbox.js.map +1 -0
- package/dist/components/inputs/Combobox.d.ts +3 -0
- package/dist/components/inputs/Combobox.js +94 -0
- package/dist/components/inputs/Combobox.js.map +1 -0
- package/dist/components/inputs/DatePicker.d.ts +3 -0
- package/dist/components/inputs/DatePicker.js +56 -0
- package/dist/components/inputs/DatePicker.js.map +1 -0
- package/dist/components/inputs/Field.d.ts +5 -0
- package/dist/components/inputs/Field.js +44 -0
- package/dist/components/inputs/Field.js.map +1 -0
- package/dist/components/inputs/Input.d.ts +19 -0
- package/dist/components/inputs/Input.js +72 -0
- package/dist/components/inputs/Input.js.map +1 -0
- package/dist/components/inputs/InputGroup.d.ts +3 -0
- package/dist/components/inputs/InputGroup.js +32 -0
- package/dist/components/inputs/InputGroup.js.map +1 -0
- package/dist/components/inputs/InputOTP.d.ts +3 -0
- package/dist/components/inputs/InputOTP.js +49 -0
- package/dist/components/inputs/InputOTP.js.map +1 -0
- package/dist/components/inputs/Label.d.ts +13 -0
- package/dist/components/inputs/Label.js +33 -0
- package/dist/components/inputs/Label.js.map +1 -0
- package/dist/components/inputs/RadioGroup.d.ts +15 -0
- package/dist/components/inputs/RadioGroup.js +58 -0
- package/dist/components/inputs/RadioGroup.js.map +1 -0
- package/dist/components/inputs/Select.d.ts +12 -0
- package/dist/components/inputs/Select.js +49 -0
- package/dist/components/inputs/Select.js.map +1 -0
- package/dist/components/inputs/Slider.d.ts +16 -0
- package/dist/components/inputs/Slider.js +62 -0
- package/dist/components/inputs/Slider.js.map +1 -0
- package/dist/components/inputs/Switch.d.ts +11 -0
- package/dist/components/inputs/Switch.js +39 -0
- package/dist/components/inputs/Switch.js.map +1 -0
- package/dist/components/inputs/Textarea.d.ts +13 -0
- package/dist/components/inputs/Textarea.js +41 -0
- package/dist/components/inputs/Textarea.js.map +1 -0
- package/dist/components/inputs/Toggle.d.ts +19 -0
- package/dist/components/inputs/Toggle.js +57 -0
- package/dist/components/inputs/Toggle.js.map +1 -0
- package/dist/components/layout/AspectRatio.d.ts +3 -0
- package/dist/components/layout/AspectRatio.js +20 -0
- package/dist/components/layout/AspectRatio.js.map +1 -0
- package/dist/components/layout/Resizable.d.ts +3 -0
- package/dist/components/layout/Resizable.js +58 -0
- package/dist/components/layout/Resizable.js.map +1 -0
- package/dist/components/layout/ScrollArea.d.ts +3 -0
- package/dist/components/layout/ScrollArea.js +24 -0
- package/dist/components/layout/ScrollArea.js.map +1 -0
- package/dist/components/layout/Sidebar.d.ts +5 -0
- package/dist/components/layout/Sidebar.js +55 -0
- package/dist/components/layout/Sidebar.js.map +1 -0
- package/dist/components/overlay/AlertDialog.d.ts +3 -0
- package/dist/components/overlay/AlertDialog.js +51 -0
- package/dist/components/overlay/AlertDialog.js.map +1 -0
- package/dist/components/overlay/Command.d.ts +22 -0
- package/dist/components/overlay/Command.js +123 -0
- package/dist/components/overlay/Command.js.map +1 -0
- package/dist/components/overlay/ContextMenu.d.ts +4 -0
- package/dist/components/overlay/ContextMenu.js +66 -0
- package/dist/components/overlay/ContextMenu.js.map +1 -0
- package/dist/components/overlay/DropdownMenu.d.ts +20 -0
- package/dist/components/overlay/DropdownMenu.js +86 -0
- package/dist/components/overlay/DropdownMenu.js.map +1 -0
- package/dist/components/overlay/HoverCard.d.ts +3 -0
- package/dist/components/overlay/HoverCard.js +53 -0
- package/dist/components/overlay/HoverCard.js.map +1 -0
- package/dist/components/overlay/Menubar.d.ts +4 -0
- package/dist/components/overlay/Menubar.js +55 -0
- package/dist/components/overlay/Menubar.js.map +1 -0
- package/dist/components/overlay/NavigationMenu.d.ts +5 -0
- package/dist/components/overlay/NavigationMenu.js +42 -0
- package/dist/components/overlay/NavigationMenu.js.map +1 -0
- package/dist/components/overlay/Popover.d.ts +16 -0
- package/dist/components/overlay/Popover.js +53 -0
- package/dist/components/overlay/Popover.js.map +1 -0
- package/dist/components/overlay/Sheet.d.ts +13 -0
- package/dist/components/overlay/Sheet.js +49 -0
- package/dist/components/overlay/Sheet.js.map +1 -0
- package/dist/components/utilities/Image.d.ts +3 -0
- package/dist/components/utilities/Image.js +32 -0
- package/dist/components/utilities/Image.js.map +1 -0
- package/dist/components/utilities/OpenInChat.d.ts +3 -0
- package/dist/components/utilities/OpenInChat.js +26 -0
- package/dist/components/utilities/OpenInChat.js.map +1 -0
- package/dist/components/voice/AudioPlayer.d.ts +3 -0
- package/dist/components/voice/AudioPlayer.js +42 -0
- package/dist/components/voice/AudioPlayer.js.map +1 -0
- package/dist/components/voice/MicSelector.d.ts +3 -0
- package/dist/components/voice/MicSelector.js +36 -0
- package/dist/components/voice/MicSelector.js.map +1 -0
- package/dist/components/voice/Persona.d.ts +3 -0
- package/dist/components/voice/Persona.js +41 -0
- package/dist/components/voice/Persona.js.map +1 -0
- package/dist/components/voice/SpeechInput.d.ts +3 -0
- package/dist/components/voice/SpeechInput.js +42 -0
- package/dist/components/voice/SpeechInput.js.map +1 -0
- package/dist/components/voice/Transcription.d.ts +4 -0
- package/dist/components/voice/Transcription.js +48 -0
- package/dist/components/voice/Transcription.js.map +1 -0
- package/dist/components/voice/VoiceSelector.d.ts +3 -0
- package/dist/components/voice/VoiceSelector.js +58 -0
- package/dist/components/voice/VoiceSelector.js.map +1 -0
- package/dist/components/workflow/Flow.d.ts +20 -0
- package/dist/components/workflow/Flow.js +96 -0
- package/dist/components/workflow/Flow.js.map +1 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +208 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +217 -0
- 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,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,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;
|