@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,35 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_JSXPREVIEW_CSS = `
|
|
4
|
+
.ax-jsxpreview { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; }
|
|
5
|
+
.ax-jsxpreview--stacked { grid-template-columns: 1fr; }
|
|
6
|
+
.ax-jsxpreview__pane { min-width: 0; }
|
|
7
|
+
.ax-jsxpreview__pane--code { border-right: 1px solid var(--border-default); background: var(--bg-0); }
|
|
8
|
+
[data-theme="light"] .ax-jsxpreview__pane--code { background: var(--bg-1); }
|
|
9
|
+
.ax-jsxpreview--stacked .ax-jsxpreview__pane--code { border-right: none; border-bottom: 1px solid var(--border-default); }
|
|
10
|
+
.ax-jsxpreview__label { font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); padding: 8px 12px; border-bottom: 1px solid var(--border-default); }
|
|
11
|
+
.ax-jsxpreview__pre { margin: 0; padding: 12px; font-family: var(--font-mono); font-size: var(--text-xs); line-height: 1.6; color: var(--text-body); white-space: pre; overflow-x: auto; }
|
|
12
|
+
.ax-jsxpreview__render { padding: 20px; display: flex; align-items: center; justify-content: center; min-height: 100px; background: var(--surface-card); }
|
|
13
|
+
`;
|
|
14
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-jsxpreview-css")) {
|
|
15
|
+
const s = document.createElement("style");
|
|
16
|
+
s.id = "ax-jsxpreview-css";
|
|
17
|
+
s.textContent = AX_JSXPREVIEW_CSS;
|
|
18
|
+
document.head.appendChild(s);
|
|
19
|
+
}
|
|
20
|
+
function JSXPreview({ code, children, stacked = false, className = "", ...rest }) {
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-jsxpreview", stacked ? "ax-jsxpreview--stacked" : "", className].filter(Boolean).join(" "), ...rest, children: [
|
|
22
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-jsxpreview__pane ax-jsxpreview__pane--code", children: [
|
|
23
|
+
/* @__PURE__ */ jsx("div", { className: "ax-jsxpreview__label", children: "JSX" }),
|
|
24
|
+
/* @__PURE__ */ jsx("pre", { className: "ax-jsxpreview__pre", children: code })
|
|
25
|
+
] }),
|
|
26
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-jsxpreview__pane", children: [
|
|
27
|
+
/* @__PURE__ */ jsx("div", { className: "ax-jsxpreview__label", children: "Preview" }),
|
|
28
|
+
/* @__PURE__ */ jsx("div", { className: "ax-jsxpreview__render", children })
|
|
29
|
+
] })
|
|
30
|
+
] });
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
JSXPreview
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=JSXPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSXPreview.js","sources":["../../../src/components/code/JSXPreview.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_JSXPREVIEW_CSS = `\n.ax-jsxpreview { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; }\n.ax-jsxpreview--stacked { grid-template-columns: 1fr; }\n.ax-jsxpreview__pane { min-width: 0; }\n.ax-jsxpreview__pane--code { border-right: 1px solid var(--border-default); background: var(--bg-0); }\n[data-theme=\"light\"] .ax-jsxpreview__pane--code { background: var(--bg-1); }\n.ax-jsxpreview--stacked .ax-jsxpreview__pane--code { border-right: none; border-bottom: 1px solid var(--border-default); }\n.ax-jsxpreview__label { font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); padding: 8px 12px; border-bottom: 1px solid var(--border-default); }\n.ax-jsxpreview__pre { margin: 0; padding: 12px; font-family: var(--font-mono); font-size: var(--text-xs); line-height: 1.6; color: var(--text-body); white-space: pre; overflow-x: auto; }\n.ax-jsxpreview__render { padding: 20px; display: flex; align-items: center; justify-content: center; min-height: 100px; background: var(--surface-card); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-jsxpreview-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-jsxpreview-css\";\n s.textContent = AX_JSXPREVIEW_CSS;\n document.head.appendChild(s);\n}\n\nexport function JSXPreview({ code, children, stacked = false, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-jsxpreview\", stacked ? \"ax-jsxpreview--stacked\" : \"\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-jsxpreview__pane ax-jsxpreview__pane--code\">\n <div className=\"ax-jsxpreview__label\">JSX</div>\n <pre className=\"ax-jsxpreview__pre\">{code}</pre>\n </div>\n <div className=\"ax-jsxpreview__pane\">\n <div className=\"ax-jsxpreview__label\">Preview</div>\n <div className=\"ax-jsxpreview__render\">{children}</div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY1B,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,MAAM,UAAU,UAAU,OAAO,YAAY,IAAI,GAAG,QAAQ;AACvF,8BACG,OAAA,EAAI,WAAW,CAAC,iBAAiB,UAAU,2BAA2B,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACnH,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,iDACb,UAAA;AAAA,MAAA,oBAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA,OAAG;AAAA,MACzC,oBAAC,OAAA,EAAI,WAAU,sBAAsB,UAAA,KAAA,CAAK;AAAA,IAAA,GAC5C;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,MAAA,oBAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA,WAAO;AAAA,MAC7C,oBAAC,OAAA,EAAI,WAAU,yBAAyB,SAAA,CAAS;AAAA,IAAA,EAAA,CACnD;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** npm-style package card: name, version, description, stat grid. */
|
|
2
|
+
export interface PackageInfoProps { name: string; version?: string; description?: React.ReactNode; stats?: Array<{ value: React.ReactNode; label: string }>; }
|
|
3
|
+
export declare function PackageInfo(props: PackageInfoProps): JSX.Element;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_PKGINFO_CSS = `
|
|
4
|
+
.ax-pkginfo { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 14px; font-family: var(--font-mono); }
|
|
5
|
+
.ax-pkginfo__top { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
|
|
6
|
+
.ax-pkginfo__icon { width: 28px; height: 28px; flex: none; border-radius: var(--radius-2); border: 1px solid var(--border-default); display: flex; align-items: center; justify-content: center; color: var(--text-faint); }
|
|
7
|
+
.ax-pkginfo__name { font-size: var(--text-md); color: var(--text-body); }
|
|
8
|
+
.ax-pkginfo__version { font-size: var(--text-xs); color: var(--text-faint); margin-top: 1px; }
|
|
9
|
+
.ax-pkginfo__desc { font-family: var(--font-body); font-size: var(--text-sm); color: var(--text-muted); line-height: var(--leading-snug); margin: 0 0 12px; }
|
|
10
|
+
.ax-pkginfo__stats { display: flex; gap: 18px; padding-top: 12px; border-top: 1px solid var(--border-default); }
|
|
11
|
+
.ax-pkginfo__stat { display: flex; flex-direction: column; gap: 2px; }
|
|
12
|
+
.ax-pkginfo__stat-val { font-size: var(--text-sm); color: var(--text-body); }
|
|
13
|
+
.ax-pkginfo__stat-label { font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }
|
|
14
|
+
`;
|
|
15
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-pkginfo-css")) {
|
|
16
|
+
const s = document.createElement("style");
|
|
17
|
+
s.id = "ax-pkginfo-css";
|
|
18
|
+
s.textContent = AX_PKGINFO_CSS;
|
|
19
|
+
document.head.appendChild(s);
|
|
20
|
+
}
|
|
21
|
+
const Cube = /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
22
|
+
/* @__PURE__ */ jsx("path", { d: "M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" }),
|
|
23
|
+
/* @__PURE__ */ jsx("path", { d: "m3.3 7 8.7 5 8.7-5M12 22V12" })
|
|
24
|
+
] });
|
|
25
|
+
function PackageInfo({ name, version, description, stats = [], className = "", ...rest }) {
|
|
26
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-pkginfo", className].filter(Boolean).join(" "), ...rest, children: [
|
|
27
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-pkginfo__top", children: [
|
|
28
|
+
/* @__PURE__ */ jsx("span", { className: "ax-pkginfo__icon", children: Cube }),
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
30
|
+
/* @__PURE__ */ jsx("div", { className: "ax-pkginfo__name", children: name }),
|
|
31
|
+
version ? /* @__PURE__ */ jsxs("div", { className: "ax-pkginfo__version", children: [
|
|
32
|
+
"v",
|
|
33
|
+
version
|
|
34
|
+
] }) : null
|
|
35
|
+
] })
|
|
36
|
+
] }),
|
|
37
|
+
description ? /* @__PURE__ */ jsx("p", { className: "ax-pkginfo__desc", children: description }) : null,
|
|
38
|
+
stats.length ? /* @__PURE__ */ jsx("div", { className: "ax-pkginfo__stats", children: stats.map((s, i) => /* @__PURE__ */ jsxs("div", { className: "ax-pkginfo__stat", children: [
|
|
39
|
+
/* @__PURE__ */ jsx("span", { className: "ax-pkginfo__stat-val", children: s.value }),
|
|
40
|
+
/* @__PURE__ */ jsx("span", { className: "ax-pkginfo__stat-label", children: s.label })
|
|
41
|
+
] }, i)) }) : null
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
PackageInfo
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=PackageInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageInfo.js","sources":["../../../src/components/code/PackageInfo.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_PKGINFO_CSS = `\n.ax-pkginfo { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 14px; font-family: var(--font-mono); }\n.ax-pkginfo__top { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }\n.ax-pkginfo__icon { width: 28px; height: 28px; flex: none; border-radius: var(--radius-2); border: 1px solid var(--border-default); display: flex; align-items: center; justify-content: center; color: var(--text-faint); }\n.ax-pkginfo__name { font-size: var(--text-md); color: var(--text-body); }\n.ax-pkginfo__version { font-size: var(--text-xs); color: var(--text-faint); margin-top: 1px; }\n.ax-pkginfo__desc { font-family: var(--font-body); font-size: var(--text-sm); color: var(--text-muted); line-height: var(--leading-snug); margin: 0 0 12px; }\n.ax-pkginfo__stats { display: flex; gap: 18px; padding-top: 12px; border-top: 1px solid var(--border-default); }\n.ax-pkginfo__stat { display: flex; flex-direction: column; gap: 2px; }\n.ax-pkginfo__stat-val { font-size: var(--text-sm); color: var(--text-body); }\n.ax-pkginfo__stat-label { font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-pkginfo-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-pkginfo-css\";\n s.textContent = AX_PKGINFO_CSS;\n document.head.appendChild(s);\n}\n\nconst Cube = <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"></path><path d=\"m3.3 7 8.7 5 8.7-5M12 22V12\"></path></svg>;\n\nexport function PackageInfo({ name, version, description, stats = [], className = \"\", ...rest }) {\n return (\n <div className={[\"ax-pkginfo\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-pkginfo__top\">\n <span className=\"ax-pkginfo__icon\">{Cube}</span>\n <div>\n <div className=\"ax-pkginfo__name\">{name}</div>\n {version ? <div className=\"ax-pkginfo__version\">v{version}</div> : null}\n </div>\n </div>\n {description ? <p className=\"ax-pkginfo__desc\">{description}</p> : null}\n {stats.length ? (\n <div className=\"ax-pkginfo__stats\">\n {stats.map((s, i) => (\n <div className=\"ax-pkginfo__stat\" key={i}>\n <span className=\"ax-pkginfo__stat-val\">{s.value}</span>\n <span className=\"ax-pkginfo__stat-label\">{s.label}</span>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAavB,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;AAEA,MAAM,OAAO,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,4HAAA,CAA4H;AAAA,EAAO,oBAAC,QAAA,EAAK,GAAE,8BAAA,CAA8B;AAAA,GAAO;AAE7U,SAAS,YAAY,EAAE,MAAM,SAAS,aAAa,QAAQ,CAAA,GAAI,YAAY,IAAI,GAAG,QAAQ;AAC/F,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,cAAc,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACvE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,oBAAoB,UAAA,MAAK;AAAA,2BACxC,OAAA,EACC,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,oBAAoB,UAAA,MAAK;AAAA,QACvC,UAAU,qBAAC,OAAA,EAAI,WAAU,uBAAsB,UAAA;AAAA,UAAA;AAAA,UAAE;AAAA,QAAA,EAAA,CAAQ,IAAS;AAAA,MAAA,EAAA,CACrE;AAAA,IAAA,GACF;AAAA,IACC,cAAc,oBAAC,KAAA,EAAE,WAAU,oBAAoB,uBAAY,IAAO;AAAA,IAClE,MAAM,SACL,oBAAC,OAAA,EAAI,WAAU,qBACZ,UAAA,MAAM,IAAI,CAAC,GAAG,MACb,qBAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,wBAAwB,UAAA,EAAE,OAAM;AAAA,MAChD,oBAAC,QAAA,EAAK,WAAU,0BAA0B,YAAE,MAAA,CAAM;AAAA,IAAA,KAFb,CAGvC,CACD,EAAA,CACH,IACE;AAAA,EAAA,GACN;AAEJ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Execution sandbox frame with running/booting/stopped status and optional body. */
|
|
2
|
+
export interface SandboxProps { id?: string; status?: "running" | "booting" | "stopped"; region?: string; children?: React.ReactNode; }
|
|
3
|
+
export declare function Sandbox(props: SandboxProps): JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_SANDBOX_CSS = `
|
|
4
|
+
.ax-sandbox { border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); }
|
|
5
|
+
.ax-sandbox__head { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--border-default); font-family: var(--font-mono); }
|
|
6
|
+
.ax-sandbox__status { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; }
|
|
7
|
+
.ax-sandbox__dot { width: 7px; height: 7px; border-radius: 1px; }
|
|
8
|
+
.ax-sandbox--running .ax-sandbox__status { color: var(--ok); }
|
|
9
|
+
.ax-sandbox--running .ax-sandbox__dot { background: var(--ok); animation: ax-sb-pulse 1.2s var(--ease-out) infinite; }
|
|
10
|
+
.ax-sandbox--booting .ax-sandbox__status { color: var(--warn); }
|
|
11
|
+
.ax-sandbox--booting .ax-sandbox__dot { background: var(--warn); animation: ax-sb-pulse 0.8s var(--ease-out) infinite; }
|
|
12
|
+
.ax-sandbox--stopped .ax-sandbox__status { color: var(--text-faint); }
|
|
13
|
+
.ax-sandbox--stopped .ax-sandbox__dot { background: var(--text-faint); }
|
|
14
|
+
.ax-sandbox__id { flex: 1; font-size: 11px; color: var(--text-faint); }
|
|
15
|
+
.ax-sandbox__region { font-size: 10px; color: var(--text-faint); border: 1px solid var(--border-default); border-radius: var(--radius-1); padding: 1px 5px; }
|
|
16
|
+
.ax-sandbox__body { padding: 12px; }
|
|
17
|
+
@keyframes ax-sb-pulse { 50% { opacity: 0.3; } }
|
|
18
|
+
@media (prefers-reduced-motion: reduce) { .ax-sandbox__dot { animation: none !important; } }
|
|
19
|
+
`;
|
|
20
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-sandbox-css")) {
|
|
21
|
+
const s = document.createElement("style");
|
|
22
|
+
s.id = "ax-sandbox-css";
|
|
23
|
+
s.textContent = AX_SANDBOX_CSS;
|
|
24
|
+
document.head.appendChild(s);
|
|
25
|
+
}
|
|
26
|
+
const STATUS = { running: "Running", booting: "Booting", stopped: "Stopped" };
|
|
27
|
+
function Sandbox({ id = "sandbox-7f29c4", status = "running", region, children, className = "", ...rest }) {
|
|
28
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-sandbox", "ax-sandbox--" + status, className].filter(Boolean).join(" "), ...rest, children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-sandbox__head", children: [
|
|
30
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-sandbox__status", children: [
|
|
31
|
+
/* @__PURE__ */ jsx("span", { className: "ax-sandbox__dot" }),
|
|
32
|
+
STATUS[status]
|
|
33
|
+
] }),
|
|
34
|
+
/* @__PURE__ */ jsx("span", { className: "ax-sandbox__id", children: id }),
|
|
35
|
+
region ? /* @__PURE__ */ jsx("span", { className: "ax-sandbox__region", children: region }) : null
|
|
36
|
+
] }),
|
|
37
|
+
children ? /* @__PURE__ */ jsx("div", { className: "ax-sandbox__body", children }) : null
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
Sandbox
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=Sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sandbox.js","sources":["../../../src/components/code/Sandbox.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_SANDBOX_CSS = `\n.ax-sandbox { border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); }\n.ax-sandbox__head { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--border-default); font-family: var(--font-mono); }\n.ax-sandbox__status { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; }\n.ax-sandbox__dot { width: 7px; height: 7px; border-radius: 1px; }\n.ax-sandbox--running .ax-sandbox__status { color: var(--ok); }\n.ax-sandbox--running .ax-sandbox__dot { background: var(--ok); animation: ax-sb-pulse 1.2s var(--ease-out) infinite; }\n.ax-sandbox--booting .ax-sandbox__status { color: var(--warn); }\n.ax-sandbox--booting .ax-sandbox__dot { background: var(--warn); animation: ax-sb-pulse 0.8s var(--ease-out) infinite; }\n.ax-sandbox--stopped .ax-sandbox__status { color: var(--text-faint); }\n.ax-sandbox--stopped .ax-sandbox__dot { background: var(--text-faint); }\n.ax-sandbox__id { flex: 1; font-size: 11px; color: var(--text-faint); }\n.ax-sandbox__region { font-size: 10px; color: var(--text-faint); border: 1px solid var(--border-default); border-radius: var(--radius-1); padding: 1px 5px; }\n.ax-sandbox__body { padding: 12px; }\n@keyframes ax-sb-pulse { 50% { opacity: 0.3; } }\n@media (prefers-reduced-motion: reduce) { .ax-sandbox__dot { animation: none !important; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-sandbox-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-sandbox-css\";\n s.textContent = AX_SANDBOX_CSS;\n document.head.appendChild(s);\n}\n\nconst STATUS = { running: \"Running\", booting: \"Booting\", stopped: \"Stopped\" };\n\nexport function Sandbox({ id = \"sandbox-7f29c4\", status = \"running\", region, children, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-sandbox\", \"ax-sandbox--\" + status, className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-sandbox__head\">\n <span className=\"ax-sandbox__status\"><span className=\"ax-sandbox__dot\"></span>{STATUS[status]}</span>\n <span className=\"ax-sandbox__id\">{id}</span>\n {region ? <span className=\"ax-sandbox__region\">{region}</span> : null}\n </div>\n {children ? <div className=\"ax-sandbox__body\">{children}</div> : null}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBvB,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;AAEA,MAAM,SAAS,EAAE,SAAS,WAAW,SAAS,WAAW,SAAS,UAAA;AAE3D,SAAS,QAAQ,EAAE,KAAK,kBAAkB,SAAS,WAAW,QAAQ,UAAU,YAAY,IAAI,GAAG,KAAA,GAAQ;AAChH,8BACG,OAAA,EAAI,WAAW,CAAC,cAAc,iBAAiB,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAChG,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,sBAAqB,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,kBAAA,CAAkB;AAAA,QAAQ,OAAO,MAAM;AAAA,MAAA,GAAE;AAAA,MAC9F,oBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA,IAAG;AAAA,MACpC,SAAS,oBAAC,QAAA,EAAK,WAAU,sBAAsB,kBAAO,IAAU;AAAA,IAAA,GACnE;AAAA,IACC,WAAW,oBAAC,OAAA,EAAI,WAAU,oBAAoB,UAAS,IAAS;AAAA,EAAA,GACnE;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** JSON-schema / type tree with colored type tags and nested fields. */
|
|
2
|
+
export interface SchemaField { type?: string; required?: boolean; description?: string; fields?: Record<string, SchemaField | string>; }
|
|
3
|
+
export interface SchemaDisplayProps { schema: Record<string, SchemaField | string>; }
|
|
4
|
+
export declare function SchemaDisplay(props: SchemaDisplayProps): JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
const AX_SCHEMA_CSS = `
|
|
4
|
+
.ax-schema { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 8px; font-family: var(--font-mono); font-size: var(--text-sm); }
|
|
5
|
+
.ax-schema__row { display: flex; align-items: baseline; gap: 8px; padding: 5px 8px; }
|
|
6
|
+
.ax-schema__key { color: var(--text-body); }
|
|
7
|
+
.ax-schema__req { color: var(--danger); margin-left: 1px; }
|
|
8
|
+
.ax-schema__type { color: var(--text-faint); font-size: var(--text-xs); border: 1px solid var(--border-default); border-radius: var(--radius-1); padding: 0 5px; }
|
|
9
|
+
.ax-schema__type--string { color: var(--ok); }
|
|
10
|
+
.ax-schema__type--number { color: var(--warn); }
|
|
11
|
+
.ax-schema__type--boolean { color: var(--text-muted); }
|
|
12
|
+
.ax-schema__type--object, .ax-schema__type--array { color: var(--text-body); }
|
|
13
|
+
.ax-schema__desc { color: var(--text-faint); font-family: var(--font-body); font-size: var(--text-xs); margin-left: auto; }
|
|
14
|
+
.ax-schema__children { margin-left: 14px; border-left: 1px solid var(--border-default); padding-left: 4px; }
|
|
15
|
+
`;
|
|
16
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-schema-css")) {
|
|
17
|
+
const s = document.createElement("style");
|
|
18
|
+
s.id = "ax-schema-css";
|
|
19
|
+
s.textContent = AX_SCHEMA_CSS;
|
|
20
|
+
document.head.appendChild(s);
|
|
21
|
+
}
|
|
22
|
+
function Field({ name, field, depth }) {
|
|
23
|
+
const f = typeof field === "string" ? { type: field } : field;
|
|
24
|
+
const baseType = (f.type || "any").replace(/\[\]$/, "");
|
|
25
|
+
return /* @__PURE__ */ jsxs(React.Fragment, { children: [
|
|
26
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-schema__row", children: [
|
|
27
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-schema__key", children: [
|
|
28
|
+
name,
|
|
29
|
+
f.required ? /* @__PURE__ */ jsx("span", { className: "ax-schema__req", children: "*" }) : null
|
|
30
|
+
] }),
|
|
31
|
+
/* @__PURE__ */ jsx("span", { className: "ax-schema__type ax-schema__type--" + baseType, children: f.type || "any" }),
|
|
32
|
+
f.description ? /* @__PURE__ */ jsx("span", { className: "ax-schema__desc", children: f.description }) : null
|
|
33
|
+
] }),
|
|
34
|
+
f.fields ? /* @__PURE__ */ jsx("div", { className: "ax-schema__children", children: Object.entries(f.fields).map(([k, v]) => /* @__PURE__ */ jsx(Field, { name: k, field: v, depth: depth + 1 }, k)) }) : null
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
function SchemaDisplay({ schema = {}, className = "", ...rest }) {
|
|
38
|
+
return /* @__PURE__ */ jsx("div", { className: ["ax-schema", className].filter(Boolean).join(" "), ...rest, children: Object.entries(schema).map(([k, v]) => /* @__PURE__ */ jsx(Field, { name: k, field: v, depth: 0 }, k)) });
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
SchemaDisplay
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=SchemaDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaDisplay.js","sources":["../../../src/components/code/SchemaDisplay.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_SCHEMA_CSS = `\n.ax-schema { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); padding: 8px; font-family: var(--font-mono); font-size: var(--text-sm); }\n.ax-schema__row { display: flex; align-items: baseline; gap: 8px; padding: 5px 8px; }\n.ax-schema__key { color: var(--text-body); }\n.ax-schema__req { color: var(--danger); margin-left: 1px; }\n.ax-schema__type { color: var(--text-faint); font-size: var(--text-xs); border: 1px solid var(--border-default); border-radius: var(--radius-1); padding: 0 5px; }\n.ax-schema__type--string { color: var(--ok); }\n.ax-schema__type--number { color: var(--warn); }\n.ax-schema__type--boolean { color: var(--text-muted); }\n.ax-schema__type--object, .ax-schema__type--array { color: var(--text-body); }\n.ax-schema__desc { color: var(--text-faint); font-family: var(--font-body); font-size: var(--text-xs); margin-left: auto; }\n.ax-schema__children { margin-left: 14px; border-left: 1px solid var(--border-default); padding-left: 4px; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-schema-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-schema-css\";\n s.textContent = AX_SCHEMA_CSS;\n document.head.appendChild(s);\n}\n\nfunction Field({ name, field, depth }) {\n const f = typeof field === \"string\" ? { type: field } : field;\n const baseType = (f.type || \"any\").replace(/\\[\\]$/, \"\");\n return (\n <React.Fragment>\n <div className=\"ax-schema__row\">\n <span className=\"ax-schema__key\">{name}{f.required ? <span className=\"ax-schema__req\">*</span> : null}</span>\n <span className={\"ax-schema__type ax-schema__type--\" + baseType}>{f.type || \"any\"}</span>\n {f.description ? <span className=\"ax-schema__desc\">{f.description}</span> : null}\n </div>\n {f.fields ? (\n <div className=\"ax-schema__children\">\n {Object.entries(f.fields).map(([k, v]) => <Field key={k} name={k} field={v} depth={depth + 1} />)}\n </div>\n ) : null}\n </React.Fragment>\n );\n}\n\nexport function SchemaDisplay({ schema = {}, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-schema\", className].filter(Boolean).join(\" \")} {...rest}>\n {Object.entries(schema).map(([k, v]) => <Field key={k} name={k} field={v} depth={0} />)}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AActB,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,SAAS,MAAM,EAAE,MAAM,OAAO,SAAS;AACrC,QAAM,IAAI,OAAO,UAAU,WAAW,EAAE,MAAM,UAAU;AACxD,QAAM,YAAY,EAAE,QAAQ,OAAO,QAAQ,SAAS,EAAE;AACtD,SACE,qBAAC,MAAM,UAAN,EACC,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA;AAAA,QAAA;AAAA,QAAM,EAAE,WAAW,oBAAC,UAAK,WAAU,kBAAiB,eAAC,IAAU;AAAA,MAAA,GAAK;AAAA,0BACrG,QAAA,EAAK,WAAW,sCAAsC,UAAW,UAAA,EAAE,QAAQ,OAAM;AAAA,MACjF,EAAE,cAAc,oBAAC,QAAA,EAAK,WAAU,mBAAmB,UAAA,EAAE,aAAY,IAAU;AAAA,IAAA,GAC9E;AAAA,IACC,EAAE,SACD,oBAAC,OAAA,EAAI,WAAU,uBACZ,UAAA,OAAO,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,oBAAC,OAAA,EAAc,MAAM,GAAG,OAAO,GAAG,OAAO,QAAQ,EAAA,GAArC,CAAwC,CAAE,GAClG,IACE;AAAA,EAAA,GACN;AAEJ;AAEO,SAAS,cAAc,EAAE,SAAS,CAAA,GAAI,YAAY,IAAI,GAAG,QAAQ;AACtE,SACE,oBAAC,OAAA,EAAI,WAAW,CAAC,aAAa,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACrE,UAAA,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,oBAAC,OAAA,EAAc,MAAM,GAAG,OAAO,GAAG,OAAO,EAAA,GAA7B,CAAgC,CAAE,GACxF;AAEJ;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
const AX_SNIPPET_CSS = `
|
|
4
|
+
.ax-snippet { display: flex; align-items: center; gap: 8px; background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-2); padding: 6px 6px 6px 12px; font-family: var(--font-mono); }
|
|
5
|
+
[data-theme="light"] .ax-snippet { background: var(--bg-1); }
|
|
6
|
+
.ax-snippet__prompt { color: var(--text-faint); user-select: none; }
|
|
7
|
+
.ax-snippet__code { flex: 1; min-width: 0; overflow-x: auto; white-space: nowrap; font-size: var(--text-sm); color: var(--text-body); }
|
|
8
|
+
.ax-snippet__copy { appearance: none; background: none; border: 1px solid var(--border-default); cursor: pointer; color: var(--text-faint); font-family: var(--font-mono); font-size: 11px; padding: 4px 8px; border-radius: var(--radius-1); flex: none; transition: color var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out); }
|
|
9
|
+
.ax-snippet__copy:hover { color: var(--text-body); border-color: var(--border-strong); }
|
|
10
|
+
`;
|
|
11
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-snippet-css")) {
|
|
12
|
+
const s = document.createElement("style");
|
|
13
|
+
s.id = "ax-snippet-css";
|
|
14
|
+
s.textContent = AX_SNIPPET_CSS;
|
|
15
|
+
document.head.appendChild(s);
|
|
16
|
+
}
|
|
17
|
+
function Snippet({ code = "", prompt = "$", className = "", ...rest }) {
|
|
18
|
+
const [copied, setCopied] = useState(false);
|
|
19
|
+
const copy = () => {
|
|
20
|
+
try {
|
|
21
|
+
navigator.clipboard && navigator.clipboard.writeText(code);
|
|
22
|
+
} catch (e) {
|
|
23
|
+
}
|
|
24
|
+
setCopied(true);
|
|
25
|
+
setTimeout(() => setCopied(false), 1500);
|
|
26
|
+
};
|
|
27
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-snippet", className].filter(Boolean).join(" "), ...rest, children: [
|
|
28
|
+
prompt ? /* @__PURE__ */ jsx("span", { className: "ax-snippet__prompt", children: prompt }) : null,
|
|
29
|
+
/* @__PURE__ */ jsx("code", { className: "ax-snippet__code", children: code }),
|
|
30
|
+
/* @__PURE__ */ jsx("button", { className: "ax-snippet__copy", onClick: copy, children: copied ? "✓" : "copy" })
|
|
31
|
+
] });
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
Snippet
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=Snippet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Snippet.js","sources":["../../../src/components/code/Snippet.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_SNIPPET_CSS = `\n.ax-snippet { display: flex; align-items: center; gap: 8px; background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-2); padding: 6px 6px 6px 12px; font-family: var(--font-mono); }\n[data-theme=\"light\"] .ax-snippet { background: var(--bg-1); }\n.ax-snippet__prompt { color: var(--text-faint); user-select: none; }\n.ax-snippet__code { flex: 1; min-width: 0; overflow-x: auto; white-space: nowrap; font-size: var(--text-sm); color: var(--text-body); }\n.ax-snippet__copy { appearance: none; background: none; border: 1px solid var(--border-default); cursor: pointer; color: var(--text-faint); font-family: var(--font-mono); font-size: 11px; padding: 4px 8px; border-radius: var(--radius-1); flex: none; transition: color var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out); }\n.ax-snippet__copy:hover { color: var(--text-body); border-color: var(--border-strong); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-snippet-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-snippet-css\";\n s.textContent = AX_SNIPPET_CSS;\n document.head.appendChild(s);\n}\n\nexport function Snippet({ code = \"\", prompt = \"$\", className = \"\", ...rest }) {\n const [copied, setCopied] = useState(false);\n const copy = () => {\n try { navigator.clipboard && navigator.clipboard.writeText(code); } catch (e) {}\n setCopied(true); setTimeout(() => setCopied(false), 1500);\n };\n return (\n <div className={[\"ax-snippet\", className].filter(Boolean).join(\" \")} {...rest}>\n {prompt ? <span className=\"ax-snippet__prompt\">{prompt}</span> : null}\n <code className=\"ax-snippet__code\">{code}</code>\n <button className=\"ax-snippet__copy\" onClick={copy}>{copied ? \"✓\" : \"copy\"}</button>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASvB,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,QAAQ,EAAE,OAAO,IAAI,SAAS,KAAK,YAAY,IAAI,GAAG,QAAQ;AAC5E,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,OAAO,MAAM;AACjB,QAAI;AAAE,gBAAU,aAAa,UAAU,UAAU,UAAU,IAAI;AAAA,IAAG,SAAS,GAAG;AAAA,IAAC;AAC/E,cAAU,IAAI;AAAG,eAAW,MAAM,UAAU,KAAK,GAAG,IAAI;AAAA,EAC1D;AACA,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,cAAc,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACtE,UAAA;AAAA,IAAA,SAAS,oBAAC,QAAA,EAAK,WAAU,sBAAsB,kBAAO,IAAU;AAAA,IACjE,oBAAC,QAAA,EAAK,WAAU,oBAAoB,UAAA,MAAK;AAAA,IACzC,oBAAC,YAAO,WAAU,oBAAmB,SAAS,MAAO,UAAA,SAAS,MAAM,OAAA,CAAO;AAAA,EAAA,GAC7E;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Error stack trace; app frames highlighted, vendor frames muted. */
|
|
2
|
+
export interface StackFrame { fn: string; location?: string; app?: boolean; }
|
|
3
|
+
export interface StackTraceProps { type?: string; message?: React.ReactNode; frames: Array<string | StackFrame>; }
|
|
4
|
+
export declare function StackTrace(props: StackTraceProps): JSX.Element;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_STACKTRACE_CSS = `
|
|
4
|
+
.ax-stacktrace { border: 1px solid var(--danger); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); font-family: var(--font-mono); }
|
|
5
|
+
.ax-stacktrace__head { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; background: var(--danger-dim); border-bottom: 1px solid var(--border-default); }
|
|
6
|
+
.ax-stacktrace__icon { width: 16px; height: 16px; flex: none; color: var(--danger); margin-top: 1px; }
|
|
7
|
+
.ax-stacktrace__type { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--danger); }
|
|
8
|
+
.ax-stacktrace__msg { font-size: var(--text-sm); color: var(--text-body); margin-top: 2px; font-family: var(--font-body); }
|
|
9
|
+
.ax-stacktrace__frames { padding: 6px; }
|
|
10
|
+
.ax-stacktrace__frame { display: flex; gap: 10px; padding: 6px 8px; border-radius: var(--radius-1); font-size: var(--text-xs); }
|
|
11
|
+
.ax-stacktrace__frame--app { background: var(--surface-raised); }
|
|
12
|
+
.ax-stacktrace__fn { color: var(--text-body); flex: none; }
|
|
13
|
+
.ax-stacktrace__loc { color: var(--text-faint); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: right; }
|
|
14
|
+
`;
|
|
15
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-stacktrace-css")) {
|
|
16
|
+
const s = document.createElement("style");
|
|
17
|
+
s.id = "ax-stacktrace-css";
|
|
18
|
+
s.textContent = AX_STACKTRACE_CSS;
|
|
19
|
+
document.head.appendChild(s);
|
|
20
|
+
}
|
|
21
|
+
const Bug = /* @__PURE__ */ jsxs("svg", { className: "ax-stacktrace__icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
22
|
+
/* @__PURE__ */ jsx("path", { d: "m8 2 1.88 1.88M14.12 3.88 16 2M9 7.13v-1a3.003 3.003 0 1 1 6 0v1" }),
|
|
23
|
+
/* @__PURE__ */ jsx("path", { d: "M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6M3 13h3M18 13h3M3 18l3-2M18 16l3 2M3 8l3 2M18 10l3-2" })
|
|
24
|
+
] });
|
|
25
|
+
function StackTrace({ type = "Error", message, frames = [], className = "", ...rest }) {
|
|
26
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-stacktrace", className].filter(Boolean).join(" "), ...rest, children: [
|
|
27
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-stacktrace__head", children: [
|
|
28
|
+
Bug,
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
30
|
+
/* @__PURE__ */ jsx("div", { className: "ax-stacktrace__type", children: type }),
|
|
31
|
+
message ? /* @__PURE__ */ jsx("div", { className: "ax-stacktrace__msg", children: message }) : null
|
|
32
|
+
] })
|
|
33
|
+
] }),
|
|
34
|
+
/* @__PURE__ */ jsx("div", { className: "ax-stacktrace__frames", children: frames.map((f, i) => {
|
|
35
|
+
const frame = typeof f === "string" ? { fn: f } : f;
|
|
36
|
+
return /* @__PURE__ */ jsxs("div", { className: "ax-stacktrace__frame" + (frame.app ? " ax-stacktrace__frame--app" : ""), children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "ax-stacktrace__fn", children: frame.fn }),
|
|
38
|
+
frame.location ? /* @__PURE__ */ jsx("span", { className: "ax-stacktrace__loc", children: frame.location }) : null
|
|
39
|
+
] }, i);
|
|
40
|
+
}) })
|
|
41
|
+
] });
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
StackTrace
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=StackTrace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackTrace.js","sources":["../../../src/components/code/StackTrace.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_STACKTRACE_CSS = `\n.ax-stacktrace { border: 1px solid var(--danger); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); font-family: var(--font-mono); }\n.ax-stacktrace__head { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; background: var(--danger-dim); border-bottom: 1px solid var(--border-default); }\n.ax-stacktrace__icon { width: 16px; height: 16px; flex: none; color: var(--danger); margin-top: 1px; }\n.ax-stacktrace__type { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--danger); }\n.ax-stacktrace__msg { font-size: var(--text-sm); color: var(--text-body); margin-top: 2px; font-family: var(--font-body); }\n.ax-stacktrace__frames { padding: 6px; }\n.ax-stacktrace__frame { display: flex; gap: 10px; padding: 6px 8px; border-radius: var(--radius-1); font-size: var(--text-xs); }\n.ax-stacktrace__frame--app { background: var(--surface-raised); }\n.ax-stacktrace__fn { color: var(--text-body); flex: none; }\n.ax-stacktrace__loc { color: var(--text-faint); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: right; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-stacktrace-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-stacktrace-css\";\n s.textContent = AX_STACKTRACE_CSS;\n document.head.appendChild(s);\n}\n\nconst Bug = <svg className=\"ax-stacktrace__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"m8 2 1.88 1.88M14.12 3.88 16 2M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\"></path><path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6M3 13h3M18 13h3M3 18l3-2M18 16l3 2M3 8l3 2M18 10l3-2\"></path></svg>;\n\nexport function StackTrace({ type = \"Error\", message, frames = [], className = \"\", ...rest }) {\n return (\n <div className={[\"ax-stacktrace\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-stacktrace__head\">\n {Bug}\n <div>\n <div className=\"ax-stacktrace__type\">{type}</div>\n {message ? <div className=\"ax-stacktrace__msg\">{message}</div> : null}\n </div>\n </div>\n <div className=\"ax-stacktrace__frames\">\n {frames.map((f, i) => {\n const frame = typeof f === \"string\" ? { fn: f } : f;\n return (\n <div key={i} className={\"ax-stacktrace__frame\" + (frame.app ? \" ax-stacktrace__frame--app\" : \"\")}>\n <span className=\"ax-stacktrace__fn\">{frame.fn}</span>\n {frame.location ? <span className=\"ax-stacktrace__loc\">{frame.location}</span> : null}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAa1B,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;AAEA,MAAM,MAAM,qBAAC,OAAA,EAAI,WAAU,uBAAsB,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,mEAAA,CAAmE;AAAA,EAAO,oBAAC,QAAA,EAAK,GAAE,iIAAA,CAAiI;AAAA,GAAO;AAE/X,SAAS,WAAW,EAAE,OAAO,SAAS,SAAS,SAAS,CAAA,GAAI,YAAY,IAAI,GAAG,QAAQ;AAC5F,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAC1E,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,MAAA;AAAA,2BACA,OAAA,EACC,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,uBAAuB,UAAA,MAAK;AAAA,QAC1C,UAAU,oBAAC,OAAA,EAAI,WAAU,sBAAsB,mBAAQ,IAAS;AAAA,MAAA,EAAA,CACnE;AAAA,IAAA,GACF;AAAA,IACA,oBAAC,SAAI,WAAU,yBACZ,iBAAO,IAAI,CAAC,GAAG,MAAM;AACpB,YAAM,QAAQ,OAAO,MAAM,WAAW,EAAE,IAAI,MAAM;AAClD,kCACG,OAAA,EAAY,WAAW,0BAA0B,MAAM,MAAM,+BAA+B,KAC3F,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,qBAAqB,UAAA,MAAM,IAAG;AAAA,QAC7C,MAAM,WAAW,oBAAC,QAAA,EAAK,WAAU,sBAAsB,UAAA,MAAM,UAAS,IAAU;AAAA,MAAA,EAAA,GAFzE,CAGV;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Terminal window with traffic-light bar, green prompt, command/output/error lines, copy + optional cursor. */
|
|
2
|
+
export interface TerminalLine { type?: "command" | "output" | "error"; text: string; }
|
|
3
|
+
export interface TerminalProps { title?: string; lines: Array<string | TerminalLine>; prompt?: string; cursor?: boolean; }
|
|
4
|
+
export declare function Terminal(props: TerminalProps): JSX.Element;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
const AX_TERMINAL_CSS = `
|
|
4
|
+
.ax-terminal { border: 1px solid var(--border-strong); border-radius: var(--radius-3); overflow: hidden; background: var(--bg-0); font-family: var(--font-mono); }
|
|
5
|
+
[data-theme="light"] .ax-terminal { background: #0A0A0B; }
|
|
6
|
+
.ax-terminal__bar { display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: var(--bg-1); border-bottom: 1px solid var(--border-default); }
|
|
7
|
+
[data-theme="light"] .ax-terminal__bar { background: #18181B; border-color: rgba(255,255,255,0.1); }
|
|
8
|
+
.ax-terminal__dots { display: flex; gap: 6px; }
|
|
9
|
+
.ax-terminal__dot { width: 9px; height: 9px; border-radius: var(--radius-1); background: rgba(255,255,255,0.18); }
|
|
10
|
+
.ax-terminal__title { font-size: 11px; color: #A1A1AA; letter-spacing: 0.04em; flex: 1; text-align: center; }
|
|
11
|
+
.ax-terminal__copy { appearance: none; background: none; border: none; cursor: pointer; color: #63636B; font-size: 11px; padding: 2px 6px; border-radius: var(--radius-1); }
|
|
12
|
+
.ax-terminal__copy:hover { color: #F4F4F5; }
|
|
13
|
+
.ax-terminal__body { padding: 14px 16px; overflow-x: auto; font-size: var(--text-sm); line-height: 1.7; }
|
|
14
|
+
.ax-terminal__line { white-space: pre; color: #E4E4E7; }
|
|
15
|
+
.ax-terminal__prompt { color: #3ECF8E; user-select: none; }
|
|
16
|
+
.ax-terminal__cmd { color: #F4F4F5; }
|
|
17
|
+
.ax-terminal__out { color: #A1A1AA; }
|
|
18
|
+
.ax-terminal__err { color: #E5484D; }
|
|
19
|
+
.ax-terminal__cursor { display: inline-block; width: 0.5em; height: 1em; background: #3ECF8E; vertical-align: text-bottom; animation: ax-term-blink 1.1s steps(1) infinite; }
|
|
20
|
+
@keyframes ax-term-blink { 50% { opacity: 0; } }
|
|
21
|
+
@media (prefers-reduced-motion: reduce) { .ax-terminal__cursor { animation: none; } }
|
|
22
|
+
`;
|
|
23
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-terminal-css")) {
|
|
24
|
+
const s = document.createElement("style");
|
|
25
|
+
s.id = "ax-terminal-css";
|
|
26
|
+
s.textContent = AX_TERMINAL_CSS;
|
|
27
|
+
document.head.appendChild(s);
|
|
28
|
+
}
|
|
29
|
+
function Terminal({ title = "bash", lines = [], prompt = "$", cursor = false, className = "", ...rest }) {
|
|
30
|
+
const [copied, setCopied] = useState(false);
|
|
31
|
+
const copy = () => {
|
|
32
|
+
const text = lines.map((l) => typeof l === "string" ? l : l.type === "command" ? prompt + " " + l.text : l.text).join("\n");
|
|
33
|
+
try {
|
|
34
|
+
navigator.clipboard && navigator.clipboard.writeText(text);
|
|
35
|
+
} catch (e) {
|
|
36
|
+
}
|
|
37
|
+
setCopied(true);
|
|
38
|
+
setTimeout(() => setCopied(false), 1500);
|
|
39
|
+
};
|
|
40
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-terminal", className].filter(Boolean).join(" "), ...rest, children: [
|
|
41
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-terminal__bar", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-terminal__dots", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "ax-terminal__dot" }),
|
|
44
|
+
/* @__PURE__ */ jsx("span", { className: "ax-terminal__dot" }),
|
|
45
|
+
/* @__PURE__ */ jsx("span", { className: "ax-terminal__dot" })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "ax-terminal__title", children: title }),
|
|
48
|
+
/* @__PURE__ */ jsx("button", { className: "ax-terminal__copy", onClick: copy, children: copied ? "copied ✓" : "copy" })
|
|
49
|
+
] }),
|
|
50
|
+
/* @__PURE__ */ jsx("div", { className: "ax-terminal__body", children: lines.map((l, i) => {
|
|
51
|
+
const line = typeof l === "string" ? { type: "command", text: l } : l;
|
|
52
|
+
const isLast = i === lines.length - 1;
|
|
53
|
+
if (line.type === "command") {
|
|
54
|
+
return /* @__PURE__ */ jsxs("div", { className: "ax-terminal__line", children: [
|
|
55
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-terminal__prompt", children: [
|
|
56
|
+
prompt,
|
|
57
|
+
" "
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ jsx("span", { className: "ax-terminal__cmd", children: line.text }),
|
|
60
|
+
cursor && isLast ? /* @__PURE__ */ jsx("span", { className: "ax-terminal__cursor" }) : null
|
|
61
|
+
] }, i);
|
|
62
|
+
}
|
|
63
|
+
return /* @__PURE__ */ jsxs("div", { className: "ax-terminal__line ax-terminal__" + (line.type === "error" ? "err" : "out"), children: [
|
|
64
|
+
line.text,
|
|
65
|
+
cursor && isLast ? /* @__PURE__ */ jsx("span", { className: "ax-terminal__cursor" }) : null
|
|
66
|
+
] }, i);
|
|
67
|
+
}) })
|
|
68
|
+
] });
|
|
69
|
+
}
|
|
70
|
+
export {
|
|
71
|
+
Terminal
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=Terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Terminal.js","sources":["../../../src/components/code/Terminal.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_TERMINAL_CSS = `\n.ax-terminal { border: 1px solid var(--border-strong); border-radius: var(--radius-3); overflow: hidden; background: var(--bg-0); font-family: var(--font-mono); }\n[data-theme=\"light\"] .ax-terminal { background: #0A0A0B; }\n.ax-terminal__bar { display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: var(--bg-1); border-bottom: 1px solid var(--border-default); }\n[data-theme=\"light\"] .ax-terminal__bar { background: #18181B; border-color: rgba(255,255,255,0.1); }\n.ax-terminal__dots { display: flex; gap: 6px; }\n.ax-terminal__dot { width: 9px; height: 9px; border-radius: var(--radius-1); background: rgba(255,255,255,0.18); }\n.ax-terminal__title { font-size: 11px; color: #A1A1AA; letter-spacing: 0.04em; flex: 1; text-align: center; }\n.ax-terminal__copy { appearance: none; background: none; border: none; cursor: pointer; color: #63636B; font-size: 11px; padding: 2px 6px; border-radius: var(--radius-1); }\n.ax-terminal__copy:hover { color: #F4F4F5; }\n.ax-terminal__body { padding: 14px 16px; overflow-x: auto; font-size: var(--text-sm); line-height: 1.7; }\n.ax-terminal__line { white-space: pre; color: #E4E4E7; }\n.ax-terminal__prompt { color: #3ECF8E; user-select: none; }\n.ax-terminal__cmd { color: #F4F4F5; }\n.ax-terminal__out { color: #A1A1AA; }\n.ax-terminal__err { color: #E5484D; }\n.ax-terminal__cursor { display: inline-block; width: 0.5em; height: 1em; background: #3ECF8E; vertical-align: text-bottom; animation: ax-term-blink 1.1s steps(1) infinite; }\n@keyframes ax-term-blink { 50% { opacity: 0; } }\n@media (prefers-reduced-motion: reduce) { .ax-terminal__cursor { animation: none; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-terminal-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-terminal-css\";\n s.textContent = AX_TERMINAL_CSS;\n document.head.appendChild(s);\n}\n\nexport function Terminal({ title = \"bash\", lines = [], prompt = \"$\", cursor = false, className = \"\", ...rest }) {\n const [copied, setCopied] = useState(false);\n const copy = () => {\n const text = lines.map((l) => (typeof l === \"string\" ? l : (l.type === \"command\" ? prompt + \" \" + l.text : l.text))).join(\"\\n\");\n try { navigator.clipboard && navigator.clipboard.writeText(text); } catch (e) {}\n setCopied(true); setTimeout(() => setCopied(false), 1500);\n };\n return (\n <div className={[\"ax-terminal\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-terminal__bar\">\n <span className=\"ax-terminal__dots\"><span className=\"ax-terminal__dot\"></span><span className=\"ax-terminal__dot\"></span><span className=\"ax-terminal__dot\"></span></span>\n <span className=\"ax-terminal__title\">{title}</span>\n <button className=\"ax-terminal__copy\" onClick={copy}>{copied ? \"copied ✓\" : \"copy\"}</button>\n </div>\n <div className=\"ax-terminal__body\">\n {lines.map((l, i) => {\n const line = typeof l === \"string\" ? { type: \"command\", text: l } : l;\n const isLast = i === lines.length - 1;\n if (line.type === \"command\") {\n return <div className=\"ax-terminal__line\" key={i}><span className=\"ax-terminal__prompt\">{prompt} </span><span className=\"ax-terminal__cmd\">{line.text}</span>{cursor && isLast ? <span className=\"ax-terminal__cursor\"></span> : null}</div>;\n }\n return <div className={\"ax-terminal__line ax-terminal__\" + (line.type === \"error\" ? \"err\" : \"out\")} key={i}>{line.text}{cursor && isLast ? <span className=\"ax-terminal__cursor\"></span> : null}</div>;\n })}\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;AAqBxB,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,SAAS,EAAE,QAAQ,QAAQ,QAAQ,CAAA,GAAI,SAAS,KAAK,SAAS,OAAO,YAAY,IAAI,GAAG,QAAQ;AAC9G,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,OAAO,MAAM;AACjB,UAAM,OAAO,MAAM,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,IAAK,EAAE,SAAS,YAAY,SAAS,MAAM,EAAE,OAAO,EAAE,IAAM,EAAE,KAAK,IAAI;AAC9H,QAAI;AAAE,gBAAU,aAAa,UAAU,UAAU,UAAU,IAAI;AAAA,IAAG,SAAS,GAAG;AAAA,IAAC;AAC/E,cAAU,IAAI;AAAG,eAAW,MAAM,UAAU,KAAK,GAAG,IAAI;AAAA,EAC1D;AACA,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACxE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,QAAO,oBAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,QAAO,oBAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,MAAA,GAAO;AAAA,MAClK,oBAAC,QAAA,EAAK,WAAU,sBAAsB,UAAA,OAAM;AAAA,MAC5C,oBAAC,YAAO,WAAU,qBAAoB,SAAS,MAAO,UAAA,SAAS,aAAa,OAAA,CAAO;AAAA,IAAA,GACrF;AAAA,IACA,oBAAC,SAAI,WAAU,qBACZ,gBAAM,IAAI,CAAC,GAAG,MAAM;AACnB,YAAM,OAAO,OAAO,MAAM,WAAW,EAAE,MAAM,WAAW,MAAM,EAAA,IAAM;AACpE,YAAM,SAAS,MAAM,MAAM,SAAS;AACpC,UAAI,KAAK,SAAS,WAAW;AAC3B,eAAO,qBAAC,OAAA,EAAI,WAAU,qBAA4B,UAAA;AAAA,UAAA,qBAAC,QAAA,EAAK,WAAU,uBAAuB,UAAA;AAAA,YAAA;AAAA,YAAO;AAAA,UAAA,GAAC;AAAA,UAAO,oBAAC,QAAA,EAAK,WAAU,oBAAoB,eAAK,MAAK;AAAA,UAAQ,UAAU,SAAS,oBAAC,QAAA,EAAK,WAAU,uBAAsB,IAAU;AAAA,QAAA,EAAA,GAAlL,CAAuL;AAAA,MACxO;AACA,aAAO,qBAAC,SAAI,WAAW,qCAAqC,KAAK,SAAS,UAAU,QAAQ,QAAiB,UAAA;AAAA,QAAA,KAAK;AAAA,QAAM,UAAU,SAAS,oBAAC,QAAA,EAAK,WAAU,uBAAsB,IAAU;AAAA,MAAA,EAAA,GAAlF,CAAuF;AAAA,IAClM,CAAC,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Test run summary + per-test pass/fail/skip list. */
|
|
2
|
+
export interface TestItem { name: string; status: "pass" | "fail" | "skip"; time?: string; }
|
|
3
|
+
export interface TestResultsProps { tests: TestItem[]; duration?: string; }
|
|
4
|
+
export declare function TestResults(props: TestResultsProps): JSX.Element;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_TESTRESULTS_CSS = `
|
|
4
|
+
.ax-testresults { border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); font-family: var(--font-mono); }
|
|
5
|
+
.ax-testresults__head { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-bottom: 1px solid var(--border-default); }
|
|
6
|
+
.ax-testresults__summary { display: flex; gap: 12px; flex: 1; }
|
|
7
|
+
.ax-testresults__stat { font-size: var(--text-xs); letter-spacing: 0.04em; }
|
|
8
|
+
.ax-testresults__stat--pass { color: var(--ok); }
|
|
9
|
+
.ax-testresults__stat--fail { color: var(--danger); }
|
|
10
|
+
.ax-testresults__stat--skip { color: var(--text-faint); }
|
|
11
|
+
.ax-testresults__dur { font-size: 10px; color: var(--text-faint); }
|
|
12
|
+
.ax-testresults__list { padding: 4px; }
|
|
13
|
+
.ax-testresults__row { display: flex; align-items: center; gap: 10px; padding: 6px 8px; font-size: var(--text-xs); }
|
|
14
|
+
.ax-testresults__mark { width: 14px; flex: none; text-align: center; }
|
|
15
|
+
.ax-testresults__row--pass .ax-testresults__mark { color: var(--ok); }
|
|
16
|
+
.ax-testresults__row--fail .ax-testresults__mark { color: var(--danger); }
|
|
17
|
+
.ax-testresults__row--skip .ax-testresults__mark { color: var(--text-faint); }
|
|
18
|
+
.ax-testresults__name { flex: 1; color: var(--text-body); }
|
|
19
|
+
.ax-testresults__row--skip .ax-testresults__name { color: var(--text-faint); }
|
|
20
|
+
.ax-testresults__t { color: var(--text-faint); font-size: 10px; }
|
|
21
|
+
`;
|
|
22
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-testresults-css")) {
|
|
23
|
+
const s = document.createElement("style");
|
|
24
|
+
s.id = "ax-testresults-css";
|
|
25
|
+
s.textContent = AX_TESTRESULTS_CSS;
|
|
26
|
+
document.head.appendChild(s);
|
|
27
|
+
}
|
|
28
|
+
const MARK = { pass: "✓", fail: "✕", skip: "○" };
|
|
29
|
+
function TestResults({ tests = [], duration, className = "", ...rest }) {
|
|
30
|
+
const pass = tests.filter((t) => t.status === "pass").length;
|
|
31
|
+
const fail = tests.filter((t) => t.status === "fail").length;
|
|
32
|
+
const skip = tests.filter((t) => t.status === "skip").length;
|
|
33
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-testresults", className].filter(Boolean).join(" "), ...rest, children: [
|
|
34
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-testresults__head", children: [
|
|
35
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-testresults__summary", children: [
|
|
36
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-testresults__stat ax-testresults__stat--pass", children: [
|
|
37
|
+
pass,
|
|
38
|
+
" passed"
|
|
39
|
+
] }),
|
|
40
|
+
fail > 0 ? /* @__PURE__ */ jsxs("span", { className: "ax-testresults__stat ax-testresults__stat--fail", children: [
|
|
41
|
+
fail,
|
|
42
|
+
" failed"
|
|
43
|
+
] }) : null,
|
|
44
|
+
skip > 0 ? /* @__PURE__ */ jsxs("span", { className: "ax-testresults__stat ax-testresults__stat--skip", children: [
|
|
45
|
+
skip,
|
|
46
|
+
" skipped"
|
|
47
|
+
] }) : null
|
|
48
|
+
] }),
|
|
49
|
+
duration ? /* @__PURE__ */ jsx("span", { className: "ax-testresults__dur", children: duration }) : null
|
|
50
|
+
] }),
|
|
51
|
+
/* @__PURE__ */ jsx("div", { className: "ax-testresults__list", children: tests.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "ax-testresults__row ax-testresults__row--" + t.status, children: [
|
|
52
|
+
/* @__PURE__ */ jsx("span", { className: "ax-testresults__mark", children: MARK[t.status] }),
|
|
53
|
+
/* @__PURE__ */ jsx("span", { className: "ax-testresults__name", children: t.name }),
|
|
54
|
+
t.time ? /* @__PURE__ */ jsx("span", { className: "ax-testresults__t", children: t.time }) : null
|
|
55
|
+
] }, i)) })
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
TestResults
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=TestResults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestResults.js","sources":["../../../src/components/code/TestResults.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TESTRESULTS_CSS = `\n.ax-testresults { border: 1px solid var(--border-default); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); font-family: var(--font-mono); }\n.ax-testresults__head { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-bottom: 1px solid var(--border-default); }\n.ax-testresults__summary { display: flex; gap: 12px; flex: 1; }\n.ax-testresults__stat { font-size: var(--text-xs); letter-spacing: 0.04em; }\n.ax-testresults__stat--pass { color: var(--ok); }\n.ax-testresults__stat--fail { color: var(--danger); }\n.ax-testresults__stat--skip { color: var(--text-faint); }\n.ax-testresults__dur { font-size: 10px; color: var(--text-faint); }\n.ax-testresults__list { padding: 4px; }\n.ax-testresults__row { display: flex; align-items: center; gap: 10px; padding: 6px 8px; font-size: var(--text-xs); }\n.ax-testresults__mark { width: 14px; flex: none; text-align: center; }\n.ax-testresults__row--pass .ax-testresults__mark { color: var(--ok); }\n.ax-testresults__row--fail .ax-testresults__mark { color: var(--danger); }\n.ax-testresults__row--skip .ax-testresults__mark { color: var(--text-faint); }\n.ax-testresults__name { flex: 1; color: var(--text-body); }\n.ax-testresults__row--skip .ax-testresults__name { color: var(--text-faint); }\n.ax-testresults__t { color: var(--text-faint); font-size: 10px; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-testresults-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-testresults-css\";\n s.textContent = AX_TESTRESULTS_CSS;\n document.head.appendChild(s);\n}\n\nconst MARK = { pass: \"✓\", fail: \"✕\", skip: \"○\" };\n\nexport function TestResults({ tests = [], duration, className = \"\", ...rest }) {\n const pass = tests.filter((t) => t.status === \"pass\").length;\n const fail = tests.filter((t) => t.status === \"fail\").length;\n const skip = tests.filter((t) => t.status === \"skip\").length;\n return (\n <div className={[\"ax-testresults\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-testresults__head\">\n <div className=\"ax-testresults__summary\">\n <span className=\"ax-testresults__stat ax-testresults__stat--pass\">{pass} passed</span>\n {fail > 0 ? <span className=\"ax-testresults__stat ax-testresults__stat--fail\">{fail} failed</span> : null}\n {skip > 0 ? <span className=\"ax-testresults__stat ax-testresults__stat--skip\">{skip} skipped</span> : null}\n </div>\n {duration ? <span className=\"ax-testresults__dur\">{duration}</span> : null}\n </div>\n <div className=\"ax-testresults__list\">\n {tests.map((t, i) => (\n <div key={i} className={\"ax-testresults__row ax-testresults__row--\" + t.status}>\n <span className=\"ax-testresults__mark\">{MARK[t.status]}</span>\n <span className=\"ax-testresults__name\">{t.name}</span>\n {t.time ? <span className=\"ax-testresults__t\">{t.time}</span> : null}\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoB3B,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,oBAAoB,GAAG;AACrF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEA,MAAM,OAAO,EAAE,MAAM,KAAK,MAAM,KAAK,MAAM,IAAA;AAEpC,SAAS,YAAY,EAAE,QAAQ,IAAI,UAAU,YAAY,IAAI,GAAG,QAAQ;AAC7E,QAAM,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AACtD,QAAM,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AACtD,QAAM,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AACtD,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,kBAAkB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAC3E,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA,qBAAC,QAAA,EAAK,WAAU,mDAAmD,UAAA;AAAA,UAAA;AAAA,UAAK;AAAA,QAAA,GAAO;AAAA,QAC9E,OAAO,IAAI,qBAAC,QAAA,EAAK,WAAU,mDAAmD,UAAA;AAAA,UAAA;AAAA,UAAK;AAAA,QAAA,EAAA,CAAO,IAAU;AAAA,QACpG,OAAO,IAAI,qBAAC,QAAA,EAAK,WAAU,mDAAmD,UAAA;AAAA,UAAA;AAAA,UAAK;AAAA,QAAA,EAAA,CAAQ,IAAU;AAAA,MAAA,GACxG;AAAA,MACC,WAAW,oBAAC,QAAA,EAAK,WAAU,uBAAuB,oBAAS,IAAU;AAAA,IAAA,GACxE;AAAA,IACA,oBAAC,OAAA,EAAI,WAAU,wBACZ,gBAAM,IAAI,CAAC,GAAG,MACb,qBAAC,OAAA,EAAY,WAAW,8CAA8C,EAAE,QACtE,UAAA;AAAA,MAAA,oBAAC,UAAK,WAAU,wBAAwB,UAAA,KAAK,EAAE,MAAM,GAAE;AAAA,MACvD,oBAAC,QAAA,EAAK,WAAU,wBAAwB,YAAE,MAAK;AAAA,MAC9C,EAAE,OAAO,oBAAC,QAAA,EAAK,WAAU,qBAAqB,UAAA,EAAE,MAAK,IAAU;AAAA,IAAA,EAAA,GAHxD,CAIV,CACD,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Browser-chrome wrapper (URL bar + lock + refresh) around an iframe or custom content. */
|
|
2
|
+
export interface WebPreviewProps { url?: string; height?: number; src?: string; srcDoc?: string; children?: React.ReactNode; }
|
|
3
|
+
export declare function WebPreview(props: WebPreviewProps): JSX.Element;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_WEBPREVIEW_CSS = `
|
|
4
|
+
.ax-webpreview { border: 1px solid var(--border-strong); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); }
|
|
5
|
+
.ax-webpreview__bar { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border-default); }
|
|
6
|
+
.ax-webpreview__nav { display: flex; gap: 4px; }
|
|
7
|
+
.ax-webpreview__navbtn { width: 22px; height: 22px; display: inline-flex; align-items: center; justify-content: center; color: var(--text-faint); border-radius: var(--radius-1); }
|
|
8
|
+
.ax-webpreview__url { flex: 1; display: flex; align-items: center; gap: 6px; height: 26px; padding: 0 10px; background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-1); font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-muted); overflow: hidden; }
|
|
9
|
+
[data-theme="light"] .ax-webpreview__url { background: var(--bg-1); }
|
|
10
|
+
.ax-webpreview__lock { color: var(--ok); flex: none; }
|
|
11
|
+
.ax-webpreview__urltext { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
12
|
+
.ax-webpreview__refresh { appearance: none; background: none; border: none; cursor: pointer; color: var(--text-faint); padding: 4px; border-radius: var(--radius-1); flex: none; }
|
|
13
|
+
.ax-webpreview__refresh:hover { color: var(--text-body); }
|
|
14
|
+
.ax-webpreview__viewport { background: var(--bg-0); min-height: 160px; }
|
|
15
|
+
[data-theme="light"] .ax-webpreview__viewport { background: #fff; }
|
|
16
|
+
.ax-webpreview__viewport iframe { width: 100%; height: 100%; min-height: 160px; border: none; display: block; }
|
|
17
|
+
`;
|
|
18
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-webpreview-css")) {
|
|
19
|
+
const s = document.createElement("style");
|
|
20
|
+
s.id = "ax-webpreview-css";
|
|
21
|
+
s.textContent = AX_WEBPREVIEW_CSS;
|
|
22
|
+
document.head.appendChild(s);
|
|
23
|
+
}
|
|
24
|
+
const Lock = /* @__PURE__ */ jsxs("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
25
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }),
|
|
26
|
+
/* @__PURE__ */ jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
|
|
27
|
+
] });
|
|
28
|
+
const Refresh = /* @__PURE__ */ jsx("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8M21 3v5h-5" }) });
|
|
29
|
+
function WebPreview({ url = "localhost:3000", height = 200, src, srcDoc, children, className = "", ...rest }) {
|
|
30
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-webpreview", className].filter(Boolean).join(" "), ...rest, children: [
|
|
31
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-webpreview__bar", children: [
|
|
32
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-webpreview__nav", children: [
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: "ax-webpreview__navbtn", children: "‹" }),
|
|
34
|
+
/* @__PURE__ */ jsx("span", { className: "ax-webpreview__navbtn", children: "›" })
|
|
35
|
+
] }),
|
|
36
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-webpreview__url", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "ax-webpreview__lock", children: Lock }),
|
|
38
|
+
/* @__PURE__ */ jsx("span", { className: "ax-webpreview__urltext", children: url })
|
|
39
|
+
] }),
|
|
40
|
+
/* @__PURE__ */ jsx("button", { className: "ax-webpreview__refresh", children: Refresh })
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsx("div", { className: "ax-webpreview__viewport", style: { height }, children: children ? children : /* @__PURE__ */ jsx("iframe", { src, srcDoc, title: url, sandbox: "allow-scripts" }) })
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
WebPreview
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=WebPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebPreview.js","sources":["../../../src/components/code/WebPreview.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_WEBPREVIEW_CSS = `\n.ax-webpreview { border: 1px solid var(--border-strong); border-radius: var(--radius-3); overflow: hidden; background: var(--surface-card); }\n.ax-webpreview__bar { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border-default); }\n.ax-webpreview__nav { display: flex; gap: 4px; }\n.ax-webpreview__navbtn { width: 22px; height: 22px; display: inline-flex; align-items: center; justify-content: center; color: var(--text-faint); border-radius: var(--radius-1); }\n.ax-webpreview__url { flex: 1; display: flex; align-items: center; gap: 6px; height: 26px; padding: 0 10px; background: var(--bg-0); border: 1px solid var(--border-default); border-radius: var(--radius-1); font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-muted); overflow: hidden; }\n[data-theme=\"light\"] .ax-webpreview__url { background: var(--bg-1); }\n.ax-webpreview__lock { color: var(--ok); flex: none; }\n.ax-webpreview__urltext { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ax-webpreview__refresh { appearance: none; background: none; border: none; cursor: pointer; color: var(--text-faint); padding: 4px; border-radius: var(--radius-1); flex: none; }\n.ax-webpreview__refresh:hover { color: var(--text-body); }\n.ax-webpreview__viewport { background: var(--bg-0); min-height: 160px; }\n[data-theme=\"light\"] .ax-webpreview__viewport { background: #fff; }\n.ax-webpreview__viewport iframe { width: 100%; height: 100%; min-height: 160px; border: none; display: block; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-webpreview-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-webpreview-css\";\n s.textContent = AX_WEBPREVIEW_CSS;\n document.head.appendChild(s);\n}\n\nconst Lock = <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"></rect><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path></svg>;\nconst Refresh = <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8M21 3v5h-5\"></path></svg>;\n\nexport function WebPreview({ url = \"localhost:3000\", height = 200, src, srcDoc, children, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-webpreview\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-webpreview__bar\">\n <span className=\"ax-webpreview__nav\">\n <span className=\"ax-webpreview__navbtn\">‹</span>\n <span className=\"ax-webpreview__navbtn\">›</span>\n </span>\n <span className=\"ax-webpreview__url\">\n <span className=\"ax-webpreview__lock\">{Lock}</span>\n <span className=\"ax-webpreview__urltext\">{url}</span>\n </span>\n <button className=\"ax-webpreview__refresh\">{Refresh}</button>\n </div>\n <div className=\"ax-webpreview__viewport\" style={{ height }}>\n {children ? children : <iframe src={src} srcDoc={srcDoc} title={url} sandbox=\"allow-scripts\"></iframe>}\n </div>\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;AAEA,MAAM,OAAO,qBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,UAAA;AAAA,EAAA,oBAAC,QAAA,EAAK,GAAE,KAAI,GAAE,MAAK,OAAM,MAAK,QAAO,MAAK,IAAG,IAAA,CAAI;AAAA,EAAO,oBAAC,QAAA,EAAK,GAAE,2BAAA,CAA2B;AAAA,GAAO;AAChQ,MAAM,8BAAW,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA,oBAAC,QAAA,EAAK,GAAE,+DAAA,CAA+D,EAAA,CAAO;AAEtO,SAAS,WAAW,EAAE,MAAM,kBAAkB,SAAS,KAAK,KAAK,QAAQ,UAAU,YAAY,IAAI,GAAG,QAAQ;AACnH,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAC1E,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,sBACd,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,KAAC;AAAA,QACzC,oBAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,IAAA,CAAC;AAAA,MAAA,GAC3C;AAAA,MACA,qBAAC,QAAA,EAAK,WAAU,sBACd,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,uBAAuB,UAAA,MAAK;AAAA,QAC5C,oBAAC,QAAA,EAAK,WAAU,0BAA0B,UAAA,IAAA,CAAI;AAAA,MAAA,GAChD;AAAA,MACA,oBAAC,UAAA,EAAO,WAAU,0BAA0B,UAAA,QAAA,CAAQ;AAAA,IAAA,GACtD;AAAA,wBACC,OAAA,EAAI,WAAU,2BAA0B,OAAO,EAAE,UAC/C,UAAA,WAAW,WAAW,oBAAC,YAAO,KAAU,QAAgB,OAAO,KAAK,SAAQ,iBAAgB,EAAA,CAC/F;AAAA,EAAA,GACF;AAEJ;"}
|