@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,42 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_SPEECH_CSS = `
|
|
4
|
+
.ax-speech { display: inline-flex; align-items: center; gap: 14px; padding: 12px 18px; border: 1px solid var(--border-default); border-radius: var(--radius-full); background: var(--surface-card); }
|
|
5
|
+
.ax-speech__btn { width: 44px; height: 44px; flex: none; display: flex; align-items: center; justify-content: center; cursor: pointer; border: none; border-radius: var(--radius-full); transition: background var(--dur-1) var(--ease-out); }
|
|
6
|
+
.ax-speech__btn--idle { background: var(--accent); color: var(--accent-fg); }
|
|
7
|
+
.ax-speech__btn--idle:hover { background: var(--accent-hover); }
|
|
8
|
+
.ax-speech__btn--recording { background: var(--danger); color: #fff; }
|
|
9
|
+
.ax-speech__viz { display: flex; align-items: center; gap: 3px; height: 28px; min-width: 80px; }
|
|
10
|
+
.ax-speech__bar { width: 3px; border-radius: 1px; background: var(--border-strong); }
|
|
11
|
+
.ax-speech--recording .ax-speech__bar { background: var(--danger); animation: ax-speech-bounce 0.8s var(--ease-out) infinite; }
|
|
12
|
+
.ax-speech--recording .ax-speech__bar:nth-child(2n) { animation-delay: 0.15s; }
|
|
13
|
+
.ax-speech--recording .ax-speech__bar:nth-child(3n) { animation-delay: 0.3s; }
|
|
14
|
+
.ax-speech--recording .ax-speech__bar:nth-child(4n) { animation-delay: 0.45s; }
|
|
15
|
+
.ax-speech__status { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }
|
|
16
|
+
.ax-speech--recording .ax-speech__status { color: var(--danger); }
|
|
17
|
+
.ax-speech__time { font-family: var(--font-mono); font-size: var(--text-sm); color: var(--text-muted); }
|
|
18
|
+
@keyframes ax-speech-bounce { 0%, 100% { height: 6px; } 50% { height: 24px; } }
|
|
19
|
+
@media (prefers-reduced-motion: reduce) { .ax-speech--recording .ax-speech__bar { animation: none; height: 14px; } }
|
|
20
|
+
`;
|
|
21
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-speech-css")) {
|
|
22
|
+
const s = document.createElement("style");
|
|
23
|
+
s.id = "ax-speech-css";
|
|
24
|
+
s.textContent = AX_SPEECH_CSS;
|
|
25
|
+
document.head.appendChild(s);
|
|
26
|
+
}
|
|
27
|
+
const Mic = /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
28
|
+
/* @__PURE__ */ jsx("rect", { x: "9", y: "2", width: "6", height: "12", rx: "3" }),
|
|
29
|
+
/* @__PURE__ */ jsx("path", { d: "M5 10a7 7 0 0 0 14 0M12 17v4" })
|
|
30
|
+
] });
|
|
31
|
+
const Stop = /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2" }) });
|
|
32
|
+
function SpeechInput({ recording = false, time = "0:00", onToggle, className = "", ...rest }) {
|
|
33
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-speech", recording ? "ax-speech--recording" : "", className].filter(Boolean).join(" "), ...rest, children: [
|
|
34
|
+
/* @__PURE__ */ jsx("button", { className: "ax-speech__btn ax-speech__btn--" + (recording ? "recording" : "idle"), onClick: onToggle, "aria-label": recording ? "Stop" : "Record", children: recording ? Stop : Mic }),
|
|
35
|
+
/* @__PURE__ */ jsx("div", { className: "ax-speech__viz", children: Array.from({ length: 16 }).map((_, i) => /* @__PURE__ */ jsx("span", { className: "ax-speech__bar", style: { height: recording ? void 0 : 6 + i % 4 * 4 } }, i)) }),
|
|
36
|
+
recording ? /* @__PURE__ */ jsx("span", { className: "ax-speech__time", children: time }) : /* @__PURE__ */ jsx("span", { className: "ax-speech__status", children: "Tap to speak" })
|
|
37
|
+
] });
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
SpeechInput
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=SpeechInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpeechInput.js","sources":["../../../src/components/voice/SpeechInput.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_SPEECH_CSS = `\n.ax-speech { display: inline-flex; align-items: center; gap: 14px; padding: 12px 18px; border: 1px solid var(--border-default); border-radius: var(--radius-full); background: var(--surface-card); }\n.ax-speech__btn { width: 44px; height: 44px; flex: none; display: flex; align-items: center; justify-content: center; cursor: pointer; border: none; border-radius: var(--radius-full); transition: background var(--dur-1) var(--ease-out); }\n.ax-speech__btn--idle { background: var(--accent); color: var(--accent-fg); }\n.ax-speech__btn--idle:hover { background: var(--accent-hover); }\n.ax-speech__btn--recording { background: var(--danger); color: #fff; }\n.ax-speech__viz { display: flex; align-items: center; gap: 3px; height: 28px; min-width: 80px; }\n.ax-speech__bar { width: 3px; border-radius: 1px; background: var(--border-strong); }\n.ax-speech--recording .ax-speech__bar { background: var(--danger); animation: ax-speech-bounce 0.8s var(--ease-out) infinite; }\n.ax-speech--recording .ax-speech__bar:nth-child(2n) { animation-delay: 0.15s; }\n.ax-speech--recording .ax-speech__bar:nth-child(3n) { animation-delay: 0.3s; }\n.ax-speech--recording .ax-speech__bar:nth-child(4n) { animation-delay: 0.45s; }\n.ax-speech__status { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }\n.ax-speech--recording .ax-speech__status { color: var(--danger); }\n.ax-speech__time { font-family: var(--font-mono); font-size: var(--text-sm); color: var(--text-muted); }\n@keyframes ax-speech-bounce { 0%, 100% { height: 6px; } 50% { height: 24px; } }\n@media (prefers-reduced-motion: reduce) { .ax-speech--recording .ax-speech__bar { animation: none; height: 14px; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-speech-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-speech-css\";\n s.textContent = AX_SPEECH_CSS;\n document.head.appendChild(s);\n}\n\nconst Mic = <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"9\" y=\"2\" width=\"6\" height=\"12\" rx=\"3\"></rect><path d=\"M5 10a7 7 0 0 0 14 0M12 17v4\"></path></svg>;\nconst Stop = <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"></rect></svg>;\n\nexport function SpeechInput({ recording = false, time = \"0:00\", onToggle, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-speech\", recording ? \"ax-speech--recording\" : \"\", className].filter(Boolean).join(\" \")} {...rest}>\n <button className={\"ax-speech__btn ax-speech__btn--\" + (recording ? \"recording\" : \"idle\")} onClick={onToggle} aria-label={recording ? \"Stop\" : \"Record\"}>\n {recording ? Stop : Mic}\n </button>\n <div className=\"ax-speech__viz\">\n {Array.from({ length: 16 }).map((_, i) => <span key={i} className=\"ax-speech__bar\" style={{ height: recording ? undefined : (6 + (i % 4) * 4) }}></span>)}\n </div>\n {recording ? <span className=\"ax-speech__time\">{time}</span> : <span className=\"ax-speech__status\">Tap to speak</span>}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBtB,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;AAEA,MAAM,MAAM,qBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,MAAK,IAAG,IAAA,CAAI;AAAA,EAAO,oBAAC,QAAA,EAAK,GAAE,+BAAA,CAA+B;AAAA,GAAO;AAC/P,MAAM,2BAAQ,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,gBAAe,8BAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,IAAA,CAAI,EAAA,CAAO;AAEjI,SAAS,YAAY,EAAE,YAAY,OAAO,OAAO,QAAQ,UAAU,YAAY,IAAI,GAAG,QAAQ;AACnG,8BACG,OAAA,EAAI,WAAW,CAAC,aAAa,YAAY,yBAAyB,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAC/G,UAAA;AAAA,IAAA,oBAAC,UAAA,EAAO,WAAW,qCAAqC,YAAY,cAAc,SAAS,SAAS,UAAU,cAAY,YAAY,SAAS,UAC5I,UAAA,YAAY,OAAO,KACtB;AAAA,IACA,oBAAC,OAAA,EAAI,WAAU,kBACZ,UAAA,MAAM,KAAK,EAAE,QAAQ,GAAA,CAAI,EAAE,IAAI,CAAC,GAAG,MAAM,oBAAC,QAAA,EAAa,WAAU,kBAAiB,OAAO,EAAE,QAAQ,YAAY,SAAa,IAAK,IAAI,IAAK,EAAA,EAAG,GAAzF,CAA4F,CAAO,GAC1J;AAAA,IACC,YAAY,oBAAC,QAAA,EAAK,WAAU,mBAAmB,UAAA,KAAA,CAAK,IAAU,oBAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA,eAAA,CAAY;AAAA,EAAA,GACjH;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Live or final speech transcript; supports speaker labels and an interim (greyed) tail. */
|
|
2
|
+
export interface TranscriptSegment { text: string; speaker?: string; }
|
|
3
|
+
export interface TranscriptionProps { live?: boolean; segments?: Array<string | TranscriptSegment>; text?: string; interim?: string; }
|
|
4
|
+
export declare function Transcription(props: TranscriptionProps): JSX.Element;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_TRANSCRIPTION_CSS = `
|
|
4
|
+
.ax-transcription { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 14px 16px; }
|
|
5
|
+
.ax-transcription__head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
|
|
6
|
+
.ax-transcription__live { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--danger); }
|
|
7
|
+
.ax-transcription__livedot { width: 7px; height: 7px; border-radius: 1px; background: var(--danger); animation: ax-trans-pulse 1s var(--ease-out) infinite; }
|
|
8
|
+
.ax-transcription__text { font-size: var(--text-md); line-height: var(--leading-body); color: var(--text-body); }
|
|
9
|
+
.ax-transcription__seg { color: var(--text-body); }
|
|
10
|
+
.ax-transcription__interim { color: var(--text-faint); }
|
|
11
|
+
.ax-transcription__cursor { display: inline-block; width: 0.5em; height: 1em; background: var(--text-body); vertical-align: text-bottom; margin-left: 2px; animation: ax-trans-blink 1.1s steps(1) infinite; }
|
|
12
|
+
.ax-transcription__speaker { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); margin-right: 8px; }
|
|
13
|
+
@keyframes ax-trans-pulse { 50% { opacity: 0.3; } }
|
|
14
|
+
@keyframes ax-trans-blink { 50% { opacity: 0; } }
|
|
15
|
+
@media (prefers-reduced-motion: reduce) { .ax-transcription__livedot, .ax-transcription__cursor { animation: none; } }
|
|
16
|
+
`;
|
|
17
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-transcription-css")) {
|
|
18
|
+
const s = document.createElement("style");
|
|
19
|
+
s.id = "ax-transcription-css";
|
|
20
|
+
s.textContent = AX_TRANSCRIPTION_CSS;
|
|
21
|
+
document.head.appendChild(s);
|
|
22
|
+
}
|
|
23
|
+
function Transcription({ live = false, segments = [], text, interim, className = "", ...rest }) {
|
|
24
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-transcription", className].filter(Boolean).join(" "), ...rest, children: [
|
|
25
|
+
live ? /* @__PURE__ */ jsx("div", { className: "ax-transcription__head", children: /* @__PURE__ */ jsxs("span", { className: "ax-transcription__live", children: [
|
|
26
|
+
/* @__PURE__ */ jsx("span", { className: "ax-transcription__livedot" }),
|
|
27
|
+
"Transcribing"
|
|
28
|
+
] }) }) : null,
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-transcription__text", children: [
|
|
30
|
+
segments.length ? segments.map((seg, i) => {
|
|
31
|
+
const s = typeof seg === "string" ? { text: seg } : seg;
|
|
32
|
+
return /* @__PURE__ */ jsxs("span", { children: [
|
|
33
|
+
s.speaker ? /* @__PURE__ */ jsx("span", { className: "ax-transcription__speaker", children: s.speaker }) : null,
|
|
34
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-transcription__seg", children: [
|
|
35
|
+
s.text,
|
|
36
|
+
" "
|
|
37
|
+
] })
|
|
38
|
+
] }, i);
|
|
39
|
+
}) : /* @__PURE__ */ jsx("span", { className: "ax-transcription__seg", children: text }),
|
|
40
|
+
interim ? /* @__PURE__ */ jsx("span", { className: "ax-transcription__interim", children: interim }) : null,
|
|
41
|
+
live ? /* @__PURE__ */ jsx("span", { className: "ax-transcription__cursor" }) : null
|
|
42
|
+
] })
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
Transcription
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=Transcription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transcription.js","sources":["../../../src/components/voice/Transcription.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TRANSCRIPTION_CSS = `\n.ax-transcription { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 14px 16px; }\n.ax-transcription__head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }\n.ax-transcription__live { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--danger); }\n.ax-transcription__livedot { width: 7px; height: 7px; border-radius: 1px; background: var(--danger); animation: ax-trans-pulse 1s var(--ease-out) infinite; }\n.ax-transcription__text { font-size: var(--text-md); line-height: var(--leading-body); color: var(--text-body); }\n.ax-transcription__seg { color: var(--text-body); }\n.ax-transcription__interim { color: var(--text-faint); }\n.ax-transcription__cursor { display: inline-block; width: 0.5em; height: 1em; background: var(--text-body); vertical-align: text-bottom; margin-left: 2px; animation: ax-trans-blink 1.1s steps(1) infinite; }\n.ax-transcription__speaker { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); margin-right: 8px; }\n@keyframes ax-trans-pulse { 50% { opacity: 0.3; } }\n@keyframes ax-trans-blink { 50% { opacity: 0; } }\n@media (prefers-reduced-motion: reduce) { .ax-transcription__livedot, .ax-transcription__cursor { animation: none; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-transcription-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-transcription-css\";\n s.textContent = AX_TRANSCRIPTION_CSS;\n document.head.appendChild(s);\n}\n\nexport function Transcription({ live = false, segments = [], text, interim, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-transcription\", className].filter(Boolean).join(\" \")} {...rest}>\n {live ? (\n <div className=\"ax-transcription__head\">\n <span className=\"ax-transcription__live\"><span className=\"ax-transcription__livedot\"></span>Transcribing</span>\n </div>\n ) : null}\n <div className=\"ax-transcription__text\">\n {segments.length ? segments.map((seg, i) => {\n const s = typeof seg === \"string\" ? { text: seg } : seg;\n return (\n <span key={i}>\n {s.speaker ? <span className=\"ax-transcription__speaker\">{s.speaker}</span> : null}\n <span className=\"ax-transcription__seg\">{s.text} </span>\n </span>\n );\n }) : <span className=\"ax-transcription__seg\">{text}</span>}\n {interim ? <span className=\"ax-transcription__interim\">{interim}</span> : null}\n {live ? <span className=\"ax-transcription__cursor\"></span> : null}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe7B,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,sBAAsB,GAAG;AACvF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,cAAc,EAAE,OAAO,OAAO,WAAW,CAAA,GAAI,MAAM,SAAS,YAAY,IAAI,GAAG,QAAQ;AACrG,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAC5E,UAAA;AAAA,IAAA,2BACE,OAAA,EAAI,WAAU,0BACb,UAAA,qBAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,MAAO;AAAA,IAAA,EAAA,CAAY,GAC1G,IACE;AAAA,IACJ,qBAAC,OAAA,EAAI,WAAU,0BACZ,UAAA;AAAA,MAAA,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,MAAM;AAC1C,cAAM,IAAI,OAAO,QAAQ,WAAW,EAAE,MAAM,QAAQ;AACpD,oCACG,QAAA,EACE,UAAA;AAAA,UAAA,EAAE,UAAU,oBAAC,QAAA,EAAK,WAAU,6BAA6B,UAAA,EAAE,SAAQ,IAAU;AAAA,UAC9E,qBAAC,QAAA,EAAK,WAAU,yBAAyB,UAAA;AAAA,YAAA,EAAE;AAAA,YAAK;AAAA,UAAA,EAAA,CAAC;AAAA,QAAA,EAAA,GAFxC,CAGX;AAAA,MAEJ,CAAC,IAAI,oBAAC,QAAA,EAAK,WAAU,yBAAyB,UAAA,MAAK;AAAA,MAClD,UAAU,oBAAC,QAAA,EAAK,WAAU,6BAA6B,mBAAQ,IAAU;AAAA,MACzE,OAAO,oBAAC,QAAA,EAAK,WAAU,4BAA2B,IAAU;AAAA,IAAA,EAAA,CAC/D;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** TTS voice picker dropdown with swatch initials and preview affordance. */
|
|
2
|
+
export interface VoiceSelectorProps { voices: Array<string | { value: string; label: string; tag?: string }>; value?: string; onChange?: (value: string) => void; }
|
|
3
|
+
export declare function VoiceSelector(props: VoiceSelectorProps): JSX.Element;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useCallback, useEffect } from "react";
|
|
3
|
+
const AX_VOICESEL_CSS = `
|
|
4
|
+
.ax-voicesel { position: relative; display: inline-flex; }
|
|
5
|
+
.ax-voicesel__trigger { display: inline-flex; align-items: center; gap: 10px; height: 36px; padding: 0 12px; cursor: pointer; background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-2); color: var(--text-body); font-family: var(--font-body); font-size: var(--text-sm); transition: border-color var(--dur-1) var(--ease-out); }
|
|
6
|
+
.ax-voicesel__trigger:hover { border-color: var(--border-strong); }
|
|
7
|
+
.ax-voicesel__swatch { width: 18px; height: 18px; flex: none; border-radius: var(--radius-1); display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 10px; background: var(--accent); color: var(--accent-fg); }
|
|
8
|
+
.ax-voicesel__panel { position: absolute; z-index: 60; top: calc(100% + 6px); left: 0; min-width: 240px; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-3); box-shadow: var(--shadow-2); padding: var(--space-1); }
|
|
9
|
+
.ax-voicesel__opt { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; background: none; border: none; text-align: left; cursor: pointer; padding: 8px 10px; border-radius: var(--radius-2); }
|
|
10
|
+
.ax-voicesel__opt:hover { background: var(--surface-raised); }
|
|
11
|
+
.ax-voicesel__name { font-size: var(--text-sm); color: var(--text-body); flex: 1; }
|
|
12
|
+
.ax-voicesel__tag { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); }
|
|
13
|
+
.ax-voicesel__play { color: var(--text-faint); cursor: pointer; }
|
|
14
|
+
.ax-voicesel__play:hover { color: var(--text-body); }
|
|
15
|
+
`;
|
|
16
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-voicesel-css")) {
|
|
17
|
+
const s = document.createElement("style");
|
|
18
|
+
s.id = "ax-voicesel-css";
|
|
19
|
+
s.textContent = AX_VOICESEL_CSS;
|
|
20
|
+
document.head.appendChild(s);
|
|
21
|
+
}
|
|
22
|
+
function VoiceSelector({ voices = [], value, onChange, className = "", ...rest }) {
|
|
23
|
+
const [open, setOpen] = useState(false);
|
|
24
|
+
const ref = useRef(null);
|
|
25
|
+
const norm = (v) => typeof v === "string" ? { value: v, label: v } : v;
|
|
26
|
+
const current = voices.map(norm).find((v) => v.value === value) || norm(voices[0] || "Voice");
|
|
27
|
+
const onDoc = useCallback((e) => {
|
|
28
|
+
if (ref.current && !ref.current.contains(e.target)) setOpen(false);
|
|
29
|
+
}, []);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (open) {
|
|
32
|
+
document.addEventListener("mousedown", onDoc);
|
|
33
|
+
return () => document.removeEventListener("mousedown", onDoc);
|
|
34
|
+
}
|
|
35
|
+
}, [open, onDoc]);
|
|
36
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-voicesel", className].filter(Boolean).join(" "), ref, ...rest, children: [
|
|
37
|
+
/* @__PURE__ */ jsxs("button", { className: "ax-voicesel__trigger", onClick: () => setOpen((o) => !o), children: [
|
|
38
|
+
/* @__PURE__ */ jsx("span", { className: "ax-voicesel__swatch", children: (current.label || "V")[0] }),
|
|
39
|
+
current.label
|
|
40
|
+
] }),
|
|
41
|
+
open ? /* @__PURE__ */ jsx("div", { className: "ax-voicesel__panel", children: voices.map((v) => {
|
|
42
|
+
const voice = norm(v);
|
|
43
|
+
return /* @__PURE__ */ jsxs("button", { className: "ax-voicesel__opt", onClick: () => {
|
|
44
|
+
onChange && onChange(voice.value);
|
|
45
|
+
setOpen(false);
|
|
46
|
+
}, children: [
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "ax-voicesel__swatch", children: (voice.label || "V")[0] }),
|
|
48
|
+
/* @__PURE__ */ jsx("span", { className: "ax-voicesel__name", children: voice.label }),
|
|
49
|
+
voice.tag ? /* @__PURE__ */ jsx("span", { className: "ax-voicesel__tag", children: voice.tag }) : null,
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "ax-voicesel__play", children: "▶" })
|
|
51
|
+
] }, voice.value);
|
|
52
|
+
}) }) : null
|
|
53
|
+
] });
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
VoiceSelector
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=VoiceSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoiceSelector.js","sources":["../../../src/components/voice/VoiceSelector.jsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from \"react\";\n\nconst AX_VOICESEL_CSS = `\n.ax-voicesel { position: relative; display: inline-flex; }\n.ax-voicesel__trigger { display: inline-flex; align-items: center; gap: 10px; height: 36px; padding: 0 12px; cursor: pointer; background: var(--surface-card); border: 1px solid var(--border-default); border-radius: var(--radius-2); color: var(--text-body); font-family: var(--font-body); font-size: var(--text-sm); transition: border-color var(--dur-1) var(--ease-out); }\n.ax-voicesel__trigger:hover { border-color: var(--border-strong); }\n.ax-voicesel__swatch { width: 18px; height: 18px; flex: none; border-radius: var(--radius-1); display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 10px; background: var(--accent); color: var(--accent-fg); }\n.ax-voicesel__panel { position: absolute; z-index: 60; top: calc(100% + 6px); left: 0; min-width: 240px; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-3); box-shadow: var(--shadow-2); padding: var(--space-1); }\n.ax-voicesel__opt { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; background: none; border: none; text-align: left; cursor: pointer; padding: 8px 10px; border-radius: var(--radius-2); }\n.ax-voicesel__opt:hover { background: var(--surface-raised); }\n.ax-voicesel__name { font-size: var(--text-sm); color: var(--text-body); flex: 1; }\n.ax-voicesel__tag { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); }\n.ax-voicesel__play { color: var(--text-faint); cursor: pointer; }\n.ax-voicesel__play:hover { color: var(--text-body); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-voicesel-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-voicesel-css\";\n s.textContent = AX_VOICESEL_CSS;\n document.head.appendChild(s);\n}\n\nexport function VoiceSelector({ voices = [], value, onChange, className = \"\", ...rest }) {\n const [open, setOpen] = useState(false);\n const ref = useRef(null);\n const norm = (v) => (typeof v === \"string\" ? { value: v, label: v } : v);\n const current = voices.map(norm).find((v) => v.value === value) || norm(voices[0] || \"Voice\");\n const onDoc = useCallback((e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); }, []);\n useEffect(() => {\n if (open) { document.addEventListener(\"mousedown\", onDoc); return () => document.removeEventListener(\"mousedown\", onDoc); }\n }, [open, onDoc]);\n return (\n <div className={[\"ax-voicesel\", className].filter(Boolean).join(\" \")} ref={ref} {...rest}>\n <button className=\"ax-voicesel__trigger\" onClick={() => setOpen((o) => !o)}>\n <span className=\"ax-voicesel__swatch\">{(current.label || \"V\")[0]}</span>\n {current.label}\n </button>\n {open ? (\n <div className=\"ax-voicesel__panel\">\n {voices.map((v) => {\n const voice = norm(v);\n return (\n <button key={voice.value} className=\"ax-voicesel__opt\" onClick={() => { onChange && onChange(voice.value); setOpen(false); }}>\n <span className=\"ax-voicesel__swatch\">{(voice.label || \"V\")[0]}</span>\n <span className=\"ax-voicesel__name\">{voice.label}</span>\n {voice.tag ? <span className=\"ax-voicesel__tag\">{voice.tag}</span> : null}\n <span className=\"ax-voicesel__play\">▶</span>\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcxB,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,cAAc,EAAE,SAAS,CAAA,GAAI,OAAO,UAAU,YAAY,IAAI,GAAG,QAAQ;AACvF,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,OAAO,CAAC,MAAO,OAAO,MAAM,WAAW,EAAE,OAAO,GAAG,OAAO,EAAA,IAAM;AACtE,QAAM,UAAU,OAAO,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK,KAAK,OAAO,CAAC,KAAK,OAAO;AAC5F,QAAM,QAAQ,YAAY,CAAC,MAAM;AAAE,QAAI,IAAI,WAAW,CAAC,IAAI,QAAQ,SAAS,EAAE,MAAM,EAAG,SAAQ,KAAK;AAAA,EAAG,GAAG,CAAA,CAAE;AAC5G,YAAU,MAAM;AACd,QAAI,MAAM;AAAE,eAAS,iBAAiB,aAAa,KAAK;AAAG,aAAO,MAAM,SAAS,oBAAoB,aAAa,KAAK;AAAA,IAAG;AAAA,EAC5H,GAAG,CAAC,MAAM,KAAK,CAAC;AAChB,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,KAAW,GAAG,MAClF,UAAA;AAAA,IAAA,qBAAC,UAAA,EAAO,WAAU,wBAAuB,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GACvE,UAAA;AAAA,MAAA,oBAAC,UAAK,WAAU,uBAAwB,mBAAQ,SAAS,KAAK,CAAC,EAAA,CAAE;AAAA,MAChE,QAAQ;AAAA,IAAA,GACX;AAAA,IACC,2BACE,OAAA,EAAI,WAAU,sBACZ,UAAA,OAAO,IAAI,CAAC,MAAM;AACjB,YAAM,QAAQ,KAAK,CAAC;AACpB,aACE,qBAAC,UAAA,EAAyB,WAAU,oBAAmB,SAAS,MAAM;AAAE,oBAAY,SAAS,MAAM,KAAK;AAAG,gBAAQ,KAAK;AAAA,MAAG,GACzH,UAAA;AAAA,QAAA,oBAAC,UAAK,WAAU,uBAAwB,iBAAM,SAAS,KAAK,CAAC,EAAA,CAAE;AAAA,QAC/D,oBAAC,QAAA,EAAK,WAAU,qBAAqB,gBAAM,OAAM;AAAA,QAChD,MAAM,MAAM,oBAAC,QAAA,EAAK,WAAU,oBAAoB,UAAA,MAAM,KAAI,IAAU;AAAA,QACrE,oBAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA,IAAA,CAAC;AAAA,MAAA,EAAA,GAJ1B,MAAM,KAKnB;AAAA,IAEJ,CAAC,GACH,IACE;AAAA,EAAA,GACN;AAEJ;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node-graph workflow primitives. Canvas holds Nodes (absolute x/y) and an SVG
|
|
3
|
+
* edge layer; Edge/Connection draw bezier links; Controls/Panel/Toolbar are canvas chrome.
|
|
4
|
+
*/
|
|
5
|
+
export interface CanvasProps { edges?: React.ReactNode; children?: React.ReactNode; }
|
|
6
|
+
export declare function Canvas(props: CanvasProps): JSX.Element;
|
|
7
|
+
export interface NodeProps { x?: number; y?: number; title?: React.ReactNode; status?: "ok" | "warn"; ports?: boolean; selected?: boolean; children?: React.ReactNode; }
|
|
8
|
+
export declare function Node(props: NodeProps): JSX.Element;
|
|
9
|
+
export interface Point { x: number; y: number; }
|
|
10
|
+
export interface EdgeProps { from: Point; to: Point; animated?: boolean; label?: string; }
|
|
11
|
+
/** Static bezier edge (render inside Canvas's edges slot). */
|
|
12
|
+
export declare function Edge(props: EdgeProps): JSX.Element;
|
|
13
|
+
/** Animated (flowing dashes) edge — for in-progress links. */
|
|
14
|
+
export declare function Connection(props: { from: Point; to: Point; label?: string }): JSX.Element;
|
|
15
|
+
export interface ControlsProps { orientation?: "vertical" | "horizontal"; onZoomIn?: () => void; onZoomOut?: () => void; onFit?: () => void; }
|
|
16
|
+
export declare function Controls(props: ControlsProps): JSX.Element;
|
|
17
|
+
export interface PanelProps { position?: "top-right" | "top-left" | "bottom-right"; children?: React.ReactNode; }
|
|
18
|
+
export declare function Panel(props: PanelProps): JSX.Element;
|
|
19
|
+
export interface ToolbarProps { children?: React.ReactNode; }
|
|
20
|
+
export declare function Toolbar(props: ToolbarProps): JSX.Element;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_FLOW_CSS = `
|
|
4
|
+
.ax-canvas { position: relative; width: 100%; height: 320px; overflow: hidden; border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-page); background-image: var(--dot-grid); background-size: 20px 20px; }
|
|
5
|
+
.ax-canvas__inner { position: absolute; inset: 0; }
|
|
6
|
+
.ax-canvas__edges { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; }
|
|
7
|
+
|
|
8
|
+
.ax-node { position: absolute; min-width: 130px; background: var(--surface-card); border: 1px solid var(--border-strong); border-radius: var(--radius-2); box-shadow: var(--shadow-1); user-select: none; }
|
|
9
|
+
.ax-node--selected { border-color: var(--text-body); box-shadow: var(--ring); }
|
|
10
|
+
.ax-node__head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border-default); }
|
|
11
|
+
.ax-node__dot { width: 7px; height: 7px; border-radius: 1px; flex: none; background: var(--text-faint); }
|
|
12
|
+
.ax-node__dot--ok { background: var(--ok); }
|
|
13
|
+
.ax-node__dot--warn { background: var(--warn); }
|
|
14
|
+
.ax-node__title { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-body); letter-spacing: 0.02em; flex: 1; }
|
|
15
|
+
.ax-node__body { padding: 8px 10px; font-size: var(--text-xs); color: var(--text-muted); line-height: var(--leading-snug); }
|
|
16
|
+
.ax-node__port { position: absolute; width: 9px; height: 9px; border-radius: var(--radius-1); background: var(--surface-page); border: 1px solid var(--border-strong); top: 50%; transform: translateY(-50%); }
|
|
17
|
+
.ax-node__port--in { left: -5px; }
|
|
18
|
+
.ax-node__port--out { right: -5px; }
|
|
19
|
+
|
|
20
|
+
.ax-flow-controls { position: absolute; bottom: 12px; left: 12px; z-index: 5; display: flex; flex-direction: column; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-2); overflow: hidden; box-shadow: var(--shadow-1); }
|
|
21
|
+
.ax-flow-controls--horizontal { flex-direction: row; }
|
|
22
|
+
.ax-flow-controls__btn { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; cursor: pointer; background: none; border: none; color: var(--text-muted); border-bottom: 1px solid var(--border-default); transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }
|
|
23
|
+
.ax-flow-controls--horizontal .ax-flow-controls__btn { border-bottom: none; border-right: 1px solid var(--border-default); }
|
|
24
|
+
.ax-flow-controls__btn:last-child { border: none; }
|
|
25
|
+
.ax-flow-controls__btn:hover { background: var(--surface-raised); color: var(--text-body); }
|
|
26
|
+
|
|
27
|
+
.ax-flow-panel { position: absolute; z-index: 5; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-2); box-shadow: var(--shadow-1); padding: var(--space-3); }
|
|
28
|
+
.ax-flow-panel--top-right { top: 12px; right: 12px; }
|
|
29
|
+
.ax-flow-panel--top-left { top: 12px; left: 12px; }
|
|
30
|
+
.ax-flow-panel--bottom-right { bottom: 12px; right: 12px; }
|
|
31
|
+
|
|
32
|
+
.ax-flow-toolbar { display: inline-flex; gap: 2px; padding: 3px; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-2); box-shadow: var(--shadow-1); }
|
|
33
|
+
.ax-flow-toolbar__btn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; background: none; border: none; border-radius: var(--radius-1); color: var(--text-muted); transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }
|
|
34
|
+
.ax-flow-toolbar__btn:hover, .ax-flow-toolbar__btn--active { background: var(--surface-raised); color: var(--text-body); }
|
|
35
|
+
.ax-flow-toolbar__sep { width: 1px; align-self: stretch; background: var(--border-default); margin: 2px 2px; }
|
|
36
|
+
`;
|
|
37
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-flow-css")) {
|
|
38
|
+
const s = document.createElement("style");
|
|
39
|
+
s.id = "ax-flow-css";
|
|
40
|
+
s.textContent = AX_FLOW_CSS;
|
|
41
|
+
document.head.appendChild(s);
|
|
42
|
+
}
|
|
43
|
+
function Canvas({ children, edges, className = "", ...rest }) {
|
|
44
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-canvas", className].filter(Boolean).join(" "), ...rest, children: [
|
|
45
|
+
/* @__PURE__ */ jsx("svg", { className: "ax-canvas__edges", children: edges }),
|
|
46
|
+
/* @__PURE__ */ jsx("div", { className: "ax-canvas__inner", children })
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
function Node({ x = 0, y = 0, title, status, ports = true, selected = false, children, className = "", style = {}, ...rest }) {
|
|
50
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-node", selected ? "ax-node--selected" : "", className].filter(Boolean).join(" "), style: { left: x, top: y, ...style }, ...rest, children: [
|
|
51
|
+
ports ? /* @__PURE__ */ jsx("span", { className: "ax-node__port ax-node__port--in" }) : null,
|
|
52
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-node__head", children: [
|
|
53
|
+
/* @__PURE__ */ jsx("span", { className: "ax-node__dot" + (status ? " ax-node__dot--" + status : "") }),
|
|
54
|
+
/* @__PURE__ */ jsx("span", { className: "ax-node__title", children: title })
|
|
55
|
+
] }),
|
|
56
|
+
children ? /* @__PURE__ */ jsx("div", { className: "ax-node__body", children }) : null,
|
|
57
|
+
ports ? /* @__PURE__ */ jsx("span", { className: "ax-node__port ax-node__port--out" }) : null
|
|
58
|
+
] });
|
|
59
|
+
}
|
|
60
|
+
function Edge({ from, to, animated = false, label, ...rest }) {
|
|
61
|
+
const dx = Math.abs(to.x - from.x) * 0.5;
|
|
62
|
+
const d = `M ${from.x} ${from.y} C ${from.x + dx} ${from.y}, ${to.x - dx} ${to.y}, ${to.x} ${to.y}`;
|
|
63
|
+
const mx = (from.x + to.x) / 2, my = (from.y + to.y) / 2;
|
|
64
|
+
return /* @__PURE__ */ jsxs("g", { ...rest, children: [
|
|
65
|
+
/* @__PURE__ */ jsx("path", { d, fill: "none", stroke: "var(--border-strong)", strokeWidth: "1.5", strokeDasharray: animated ? "4 4" : void 0, children: animated ? /* @__PURE__ */ jsx("animate", { attributeName: "stroke-dashoffset", from: "8", to: "0", dur: "0.5s", repeatCount: "indefinite" }) : null }),
|
|
66
|
+
label ? /* @__PURE__ */ jsx("text", { x: mx, y: my - 4, fill: "var(--text-faint)", fontSize: "9", fontFamily: "var(--font-mono)", textAnchor: "middle", children: label }) : null
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
function Connection({ from, to, ...rest }) {
|
|
70
|
+
return /* @__PURE__ */ jsx(Edge, { from, to, animated: true, ...rest });
|
|
71
|
+
}
|
|
72
|
+
function Controls({ orientation = "vertical", onZoomIn, onZoomOut, onFit, className = "", ...rest }) {
|
|
73
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-flow-controls", orientation === "horizontal" ? "ax-flow-controls--horizontal" : "", className].filter(Boolean).join(" "), ...rest, children: [
|
|
74
|
+
/* @__PURE__ */ jsx("button", { className: "ax-flow-controls__btn", onClick: onZoomIn, "aria-label": "Zoom in", children: "+" }),
|
|
75
|
+
/* @__PURE__ */ jsx("button", { className: "ax-flow-controls__btn", onClick: onZoomOut, "aria-label": "Zoom out", children: "−" }),
|
|
76
|
+
/* @__PURE__ */ jsx("button", { className: "ax-flow-controls__btn", onClick: onFit, "aria-label": "Fit view", children: "⊡" })
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
function Panel({ position = "top-right", children, className = "", ...rest }) {
|
|
80
|
+
return /* @__PURE__ */ jsx("div", { className: ["ax-flow-panel", "ax-flow-panel--" + position, className].filter(Boolean).join(" "), ...rest, children });
|
|
81
|
+
}
|
|
82
|
+
function Toolbar({ children, className = "", ...rest }) {
|
|
83
|
+
return /* @__PURE__ */ jsx("div", { className: ["ax-flow-toolbar", className].filter(Boolean).join(" "), ...rest, children });
|
|
84
|
+
}
|
|
85
|
+
const Flow = Canvas;
|
|
86
|
+
export {
|
|
87
|
+
Canvas,
|
|
88
|
+
Connection,
|
|
89
|
+
Controls,
|
|
90
|
+
Edge,
|
|
91
|
+
Flow,
|
|
92
|
+
Node,
|
|
93
|
+
Panel,
|
|
94
|
+
Toolbar
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=Flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Flow.js","sources":["../../../src/components/workflow/Flow.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_FLOW_CSS = `\n.ax-canvas { position: relative; width: 100%; height: 320px; overflow: hidden; border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-page); background-image: var(--dot-grid); background-size: 20px 20px; }\n.ax-canvas__inner { position: absolute; inset: 0; }\n.ax-canvas__edges { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; }\n\n.ax-node { position: absolute; min-width: 130px; background: var(--surface-card); border: 1px solid var(--border-strong); border-radius: var(--radius-2); box-shadow: var(--shadow-1); user-select: none; }\n.ax-node--selected { border-color: var(--text-body); box-shadow: var(--ring); }\n.ax-node__head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border-default); }\n.ax-node__dot { width: 7px; height: 7px; border-radius: 1px; flex: none; background: var(--text-faint); }\n.ax-node__dot--ok { background: var(--ok); }\n.ax-node__dot--warn { background: var(--warn); }\n.ax-node__title { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-body); letter-spacing: 0.02em; flex: 1; }\n.ax-node__body { padding: 8px 10px; font-size: var(--text-xs); color: var(--text-muted); line-height: var(--leading-snug); }\n.ax-node__port { position: absolute; width: 9px; height: 9px; border-radius: var(--radius-1); background: var(--surface-page); border: 1px solid var(--border-strong); top: 50%; transform: translateY(-50%); }\n.ax-node__port--in { left: -5px; }\n.ax-node__port--out { right: -5px; }\n\n.ax-flow-controls { position: absolute; bottom: 12px; left: 12px; z-index: 5; display: flex; flex-direction: column; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-2); overflow: hidden; box-shadow: var(--shadow-1); }\n.ax-flow-controls--horizontal { flex-direction: row; }\n.ax-flow-controls__btn { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; cursor: pointer; background: none; border: none; color: var(--text-muted); border-bottom: 1px solid var(--border-default); transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }\n.ax-flow-controls--horizontal .ax-flow-controls__btn { border-bottom: none; border-right: 1px solid var(--border-default); }\n.ax-flow-controls__btn:last-child { border: none; }\n.ax-flow-controls__btn:hover { background: var(--surface-raised); color: var(--text-body); }\n\n.ax-flow-panel { position: absolute; z-index: 5; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-2); box-shadow: var(--shadow-1); padding: var(--space-3); }\n.ax-flow-panel--top-right { top: 12px; right: 12px; }\n.ax-flow-panel--top-left { top: 12px; left: 12px; }\n.ax-flow-panel--bottom-right { bottom: 12px; right: 12px; }\n\n.ax-flow-toolbar { display: inline-flex; gap: 2px; padding: 3px; background: var(--surface-panel); border: 1px solid var(--border-strong); border-radius: var(--radius-2); box-shadow: var(--shadow-1); }\n.ax-flow-toolbar__btn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; background: none; border: none; border-radius: var(--radius-1); color: var(--text-muted); transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }\n.ax-flow-toolbar__btn:hover, .ax-flow-toolbar__btn--active { background: var(--surface-raised); color: var(--text-body); }\n.ax-flow-toolbar__sep { width: 1px; align-self: stretch; background: var(--border-default); margin: 2px 2px; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-flow-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-flow-css\";\n s.textContent = AX_FLOW_CSS;\n document.head.appendChild(s);\n}\n\nexport function Canvas({ children, edges, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-canvas\", className].filter(Boolean).join(\" \")} {...rest}>\n <svg className=\"ax-canvas__edges\">{edges}</svg>\n <div className=\"ax-canvas__inner\">{children}</div>\n </div>\n );\n}\n\nexport function Node({ x = 0, y = 0, title, status, ports = true, selected = false, children, className = \"\", style = {}, ...rest }) {\n return (\n <div className={[\"ax-node\", selected ? \"ax-node--selected\" : \"\", className].filter(Boolean).join(\" \")} style={{ left: x, top: y, ...style }} {...rest}>\n {ports ? <span className=\"ax-node__port ax-node__port--in\"></span> : null}\n <div className=\"ax-node__head\">\n <span className={\"ax-node__dot\" + (status ? \" ax-node__dot--\" + status : \"\")}></span>\n <span className=\"ax-node__title\">{title}</span>\n </div>\n {children ? <div className=\"ax-node__body\">{children}</div> : null}\n {ports ? <span className=\"ax-node__port ax-node__port--out\"></span> : null}\n </div>\n );\n}\n\nexport function Edge({ from, to, animated = false, label, ...rest }) {\n const dx = Math.abs(to.x - from.x) * 0.5;\n const d = `M ${from.x} ${from.y} C ${from.x + dx} ${from.y}, ${to.x - dx} ${to.y}, ${to.x} ${to.y}`;\n const mx = (from.x + to.x) / 2, my = (from.y + to.y) / 2;\n return (\n <g {...rest}>\n <path d={d} fill=\"none\" stroke=\"var(--border-strong)\" strokeWidth=\"1.5\" strokeDasharray={animated ? \"4 4\" : undefined}>\n {animated ? <animate attributeName=\"stroke-dashoffset\" from=\"8\" to=\"0\" dur=\"0.5s\" repeatCount=\"indefinite\"></animate> : null}\n </path>\n {label ? <text x={mx} y={my - 4} fill=\"var(--text-faint)\" fontSize=\"9\" fontFamily=\"var(--font-mono)\" textAnchor=\"middle\">{label}</text> : null}\n </g>\n );\n}\n\nexport function Connection({ from, to, ...rest }) {\n return <Edge from={from} to={to} animated {...rest} />;\n}\n\nexport function Controls({ orientation = \"vertical\", onZoomIn, onZoomOut, onFit, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-flow-controls\", orientation === \"horizontal\" ? \"ax-flow-controls--horizontal\" : \"\", className].filter(Boolean).join(\" \")} {...rest}>\n <button className=\"ax-flow-controls__btn\" onClick={onZoomIn} aria-label=\"Zoom in\">+</button>\n <button className=\"ax-flow-controls__btn\" onClick={onZoomOut} aria-label=\"Zoom out\">−</button>\n <button className=\"ax-flow-controls__btn\" onClick={onFit} aria-label=\"Fit view\">⊡</button>\n </div>\n );\n}\n\nexport function Panel({ position = \"top-right\", children, className = \"\", ...rest }) {\n return <div className={[\"ax-flow-panel\", \"ax-flow-panel--\" + position, className].filter(Boolean).join(\" \")} {...rest}>{children}</div>;\n}\n\nexport function Toolbar({ children, className = \"\", ...rest }) {\n return <div className={[\"ax-flow-toolbar\", className].filter(Boolean).join(\" \")} {...rest}>{children}</div>;\n}\n\n/** Namesake export — Flow aliases Canvas (the graph root). Canvas/Node/Edge/… are the primary exports. */\nexport const Flow = Canvas;\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;AAAA;AAAA;AAmCpB,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,OAAO,EAAE,UAAU,OAAO,YAAY,IAAI,GAAG,QAAQ;AACnE,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,aAAa,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACtE,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,oBAAoB,UAAA,OAAM;AAAA,IACzC,oBAAC,OAAA,EAAI,WAAU,oBAAoB,SAAA,CAAS;AAAA,EAAA,GAC9C;AAEJ;AAEO,SAAS,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,QAAQ,QAAQ,MAAM,WAAW,OAAO,UAAU,YAAY,IAAI,QAAQ,CAAA,GAAI,GAAG,QAAQ;AACnI,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,WAAW,WAAW,sBAAsB,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,GAAG,MAAA,GAAU,GAAG,MAC9I,UAAA;AAAA,IAAA,QAAQ,oBAAC,QAAA,EAAK,WAAU,kCAAA,CAAkC,IAAU;AAAA,IACrE,qBAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,MAAA,oBAAC,UAAK,WAAW,kBAAkB,SAAS,oBAAoB,SAAS,KAAK;AAAA,MAC9E,oBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA,MAAA,CAAM;AAAA,IAAA,GAC1C;AAAA,IACC,WAAW,oBAAC,OAAA,EAAI,WAAU,iBAAiB,UAAS,IAAS;AAAA,IAC7D,QAAQ,oBAAC,QAAA,EAAK,WAAU,oCAAmC,IAAU;AAAA,EAAA,GACxE;AAEJ;AAEO,SAAS,KAAK,EAAE,MAAM,IAAI,WAAW,OAAO,OAAO,GAAG,QAAQ;AACnE,QAAM,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI;AACrC,QAAM,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC;AACjG,QAAM,MAAM,KAAK,IAAI,GAAG,KAAK,GAAG,MAAM,KAAK,IAAI,GAAG,KAAK;AACvD,SACE,qBAAC,KAAA,EAAG,GAAG,MACL,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,GAAM,MAAK,QAAO,QAAO,wBAAuB,aAAY,OAAM,iBAAiB,WAAW,QAAQ,QACzG,UAAA,+BAAY,WAAA,EAAQ,eAAc,qBAAoB,MAAK,KAAI,IAAG,KAAI,KAAI,QAAO,aAAY,aAAA,CAAa,IAAa,KAAA,CAC1H;AAAA,IACC,QAAQ,oBAAC,QAAA,EAAK,GAAG,IAAI,GAAG,KAAK,GAAG,MAAK,qBAAoB,UAAS,KAAI,YAAW,oBAAmB,YAAW,UAAU,iBAAM,IAAU;AAAA,EAAA,GAC5I;AAEJ;AAEO,SAAS,WAAW,EAAE,MAAM,IAAI,GAAG,QAAQ;AAChD,6BAAQ,MAAA,EAAK,MAAY,IAAQ,UAAQ,MAAE,GAAG,MAAM;AACtD;AAEO,SAAS,SAAS,EAAE,cAAc,YAAY,UAAU,WAAW,OAAO,YAAY,IAAI,GAAG,QAAQ;AAC1G,8BACG,OAAA,EAAI,WAAW,CAAC,oBAAoB,gBAAgB,eAAe,iCAAiC,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACjJ,UAAA;AAAA,IAAA,oBAAC,YAAO,WAAU,yBAAwB,SAAS,UAAU,cAAW,WAAU,UAAA,IAAA,CAAC;AAAA,IACnF,oBAAC,YAAO,WAAU,yBAAwB,SAAS,WAAW,cAAW,YAAW,UAAA,IAAA,CAAC;AAAA,IACrF,oBAAC,YAAO,WAAU,yBAAwB,SAAS,OAAO,cAAW,YAAW,UAAA,IAAA,CAAC;AAAA,EAAA,GACnF;AAEJ;AAEO,SAAS,MAAM,EAAE,WAAW,aAAa,UAAU,YAAY,IAAI,GAAG,QAAQ;AACnF,6BAAQ,OAAA,EAAI,WAAW,CAAC,iBAAiB,oBAAoB,UAAU,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAAO,UAAS;AACnI;AAEO,SAAS,QAAQ,EAAE,UAAU,YAAY,IAAI,GAAG,QAAQ;AAC7D,SAAO,oBAAC,OAAA,EAAI,WAAW,CAAC,mBAAmB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAAO,UAAS;AACvG;AAGO,MAAM,OAAO;"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// AUTO-GENERATED — type barrel for the Agentaily design system.
|
|
2
|
+
|
|
3
|
+
// ai
|
|
4
|
+
export * from "./components/ai/Attachments";
|
|
5
|
+
export * from "./components/ai/Checkpoint";
|
|
6
|
+
export * from "./components/ai/Confirmation";
|
|
7
|
+
export * from "./components/ai/Context";
|
|
8
|
+
export * from "./components/ai/Conversation";
|
|
9
|
+
export * from "./components/ai/ModelSelector";
|
|
10
|
+
export * from "./components/ai/Plan";
|
|
11
|
+
export * from "./components/ai/Queue";
|
|
12
|
+
export * from "./components/ai/Reasoning";
|
|
13
|
+
export * from "./components/ai/Shimmer";
|
|
14
|
+
export * from "./components/ai/Sources";
|
|
15
|
+
export * from "./components/ai/Suggestion";
|
|
16
|
+
export * from "./components/ai/Task";
|
|
17
|
+
export * from "./components/ai/ToolCall";
|
|
18
|
+
|
|
19
|
+
// buttons
|
|
20
|
+
export * from "./components/buttons/Button";
|
|
21
|
+
export * from "./components/buttons/ButtonGroup";
|
|
22
|
+
export * from "./components/buttons/IconButton";
|
|
23
|
+
|
|
24
|
+
// chat
|
|
25
|
+
export * from "./components/chat/CodeBlock";
|
|
26
|
+
export * from "./components/chat/Composer";
|
|
27
|
+
export * from "./components/chat/Message";
|
|
28
|
+
|
|
29
|
+
// code
|
|
30
|
+
export * from "./components/code/Agent";
|
|
31
|
+
export * from "./components/code/Artifact";
|
|
32
|
+
export * from "./components/code/Commit";
|
|
33
|
+
export * from "./components/code/EnvironmentVariables";
|
|
34
|
+
export * from "./components/code/FileTree";
|
|
35
|
+
export * from "./components/code/JSXPreview";
|
|
36
|
+
export * from "./components/code/PackageInfo";
|
|
37
|
+
export * from "./components/code/Sandbox";
|
|
38
|
+
export * from "./components/code/SchemaDisplay";
|
|
39
|
+
export * from "./components/code/Snippet";
|
|
40
|
+
export * from "./components/code/StackTrace";
|
|
41
|
+
export * from "./components/code/Terminal";
|
|
42
|
+
export * from "./components/code/TestResults";
|
|
43
|
+
export * from "./components/code/WebPreview";
|
|
44
|
+
|
|
45
|
+
// display
|
|
46
|
+
export * from "./components/display/Accordion";
|
|
47
|
+
export * from "./components/display/Avatar";
|
|
48
|
+
export * from "./components/display/Badge";
|
|
49
|
+
export * from "./components/display/Breadcrumb";
|
|
50
|
+
export * from "./components/display/Card";
|
|
51
|
+
export * from "./components/display/Carousel";
|
|
52
|
+
export * from "./components/display/Chart";
|
|
53
|
+
export * from "./components/display/Collapsible";
|
|
54
|
+
export * from "./components/display/DataTable";
|
|
55
|
+
export * from "./components/display/Empty";
|
|
56
|
+
export * from "./components/display/Item";
|
|
57
|
+
export * from "./components/display/Kbd";
|
|
58
|
+
export * from "./components/display/Pagination";
|
|
59
|
+
export * from "./components/display/Progress";
|
|
60
|
+
export * from "./components/display/Separator";
|
|
61
|
+
export * from "./components/display/Skeleton";
|
|
62
|
+
export * from "./components/display/Table";
|
|
63
|
+
export * from "./components/display/Tabs";
|
|
64
|
+
export * from "./components/display/Typography";
|
|
65
|
+
|
|
66
|
+
// feedback
|
|
67
|
+
export * from "./components/feedback/Alert";
|
|
68
|
+
export * from "./components/feedback/Dialog";
|
|
69
|
+
export * from "./components/feedback/Spinner";
|
|
70
|
+
export * from "./components/feedback/Toast";
|
|
71
|
+
export * from "./components/feedback/Tooltip";
|
|
72
|
+
|
|
73
|
+
// inputs
|
|
74
|
+
export * from "./components/inputs/Calendar";
|
|
75
|
+
export * from "./components/inputs/Checkbox";
|
|
76
|
+
export * from "./components/inputs/Combobox";
|
|
77
|
+
export * from "./components/inputs/DatePicker";
|
|
78
|
+
export * from "./components/inputs/Field";
|
|
79
|
+
export * from "./components/inputs/Input";
|
|
80
|
+
export * from "./components/inputs/InputGroup";
|
|
81
|
+
export * from "./components/inputs/InputOTP";
|
|
82
|
+
export * from "./components/inputs/Label";
|
|
83
|
+
export * from "./components/inputs/RadioGroup";
|
|
84
|
+
export * from "./components/inputs/Select";
|
|
85
|
+
export * from "./components/inputs/Slider";
|
|
86
|
+
export * from "./components/inputs/Switch";
|
|
87
|
+
export * from "./components/inputs/Textarea";
|
|
88
|
+
export * from "./components/inputs/Toggle";
|
|
89
|
+
|
|
90
|
+
// layout
|
|
91
|
+
export * from "./components/layout/AspectRatio";
|
|
92
|
+
export * from "./components/layout/Resizable";
|
|
93
|
+
export * from "./components/layout/ScrollArea";
|
|
94
|
+
export * from "./components/layout/Sidebar";
|
|
95
|
+
|
|
96
|
+
// overlay
|
|
97
|
+
export * from "./components/overlay/AlertDialog";
|
|
98
|
+
export * from "./components/overlay/Command";
|
|
99
|
+
export * from "./components/overlay/ContextMenu";
|
|
100
|
+
export * from "./components/overlay/DropdownMenu";
|
|
101
|
+
export * from "./components/overlay/HoverCard";
|
|
102
|
+
export * from "./components/overlay/Menubar";
|
|
103
|
+
export * from "./components/overlay/NavigationMenu";
|
|
104
|
+
export * from "./components/overlay/Popover";
|
|
105
|
+
export * from "./components/overlay/Sheet";
|
|
106
|
+
|
|
107
|
+
// utilities
|
|
108
|
+
export * from "./components/utilities/Image";
|
|
109
|
+
export * from "./components/utilities/OpenInChat";
|
|
110
|
+
|
|
111
|
+
// voice
|
|
112
|
+
export * from "./components/voice/AudioPlayer";
|
|
113
|
+
export * from "./components/voice/MicSelector";
|
|
114
|
+
export * from "./components/voice/Persona";
|
|
115
|
+
export * from "./components/voice/SpeechInput";
|
|
116
|
+
export * from "./components/voice/Transcription";
|
|
117
|
+
export * from "./components/voice/VoiceSelector";
|
|
118
|
+
|
|
119
|
+
// workflow
|
|
120
|
+
export * from "./components/workflow/Flow";
|