@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,47 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_TABS_CSS = `
|
|
4
|
+
.ax-tabs { display: flex; gap: var(--space-5); border-bottom: 1px solid var(--border-default); }
|
|
5
|
+
.ax-tabs__tab {
|
|
6
|
+
appearance: none; background: none; border: none; cursor: pointer;
|
|
7
|
+
padding: 0 2px 10px; margin-bottom: -1px; position: relative;
|
|
8
|
+
font-family: var(--font-body); font-size: var(--text-sm);
|
|
9
|
+
font-weight: var(--weight-medium); color: var(--text-faint);
|
|
10
|
+
border-bottom: 1px solid transparent;
|
|
11
|
+
transition: color var(--dur-1) var(--ease-out);
|
|
12
|
+
}
|
|
13
|
+
.ax-tabs__tab:hover { color: var(--text-muted); }
|
|
14
|
+
.ax-tabs__tab:focus-visible { outline: none; box-shadow: var(--ring); border-radius: var(--radius-1); }
|
|
15
|
+
.ax-tabs__tab--active { color: var(--text-body); border-bottom-color: var(--text-body); }
|
|
16
|
+
.ax-tabs__count { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint); margin-left: 6px; }
|
|
17
|
+
`;
|
|
18
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-tabs-css")) {
|
|
19
|
+
const s = document.createElement("style");
|
|
20
|
+
s.id = "ax-tabs-css";
|
|
21
|
+
s.textContent = AX_TABS_CSS;
|
|
22
|
+
document.head.appendChild(s);
|
|
23
|
+
}
|
|
24
|
+
function Tabs({ items = [], active, onChange, className = "", ...rest }) {
|
|
25
|
+
return /* @__PURE__ */ jsx("div", { role: "tablist", className: ["ax-tabs", className].filter(Boolean).join(" "), ...rest, children: items.map((item) => {
|
|
26
|
+
const it = typeof item === "string" ? { id: item, label: item } : item;
|
|
27
|
+
const isActive = it.id === active;
|
|
28
|
+
return /* @__PURE__ */ jsxs(
|
|
29
|
+
"button",
|
|
30
|
+
{
|
|
31
|
+
role: "tab",
|
|
32
|
+
"aria-selected": isActive,
|
|
33
|
+
className: "ax-tabs__tab" + (isActive ? " ax-tabs__tab--active" : ""),
|
|
34
|
+
onClick: () => onChange && onChange(it.id),
|
|
35
|
+
children: [
|
|
36
|
+
it.label,
|
|
37
|
+
it.count != null ? /* @__PURE__ */ jsx("span", { className: "ax-tabs__count", children: it.count }) : null
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
it.id
|
|
41
|
+
);
|
|
42
|
+
}) });
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
Tabs
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../src/components/display/Tabs.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TABS_CSS = `\n.ax-tabs { display: flex; gap: var(--space-5); border-bottom: 1px solid var(--border-default); }\n.ax-tabs__tab {\n appearance: none; background: none; border: none; cursor: pointer;\n padding: 0 2px 10px; margin-bottom: -1px; position: relative;\n font-family: var(--font-body); font-size: var(--text-sm);\n font-weight: var(--weight-medium); color: var(--text-faint);\n border-bottom: 1px solid transparent;\n transition: color var(--dur-1) var(--ease-out);\n}\n.ax-tabs__tab:hover { color: var(--text-muted); }\n.ax-tabs__tab:focus-visible { outline: none; box-shadow: var(--ring); border-radius: var(--radius-1); }\n.ax-tabs__tab--active { color: var(--text-body); border-bottom-color: var(--text-body); }\n.ax-tabs__count { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-faint); margin-left: 6px; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-tabs-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-tabs-css\";\n s.textContent = AX_TABS_CSS;\n document.head.appendChild(s);\n}\n\nexport function Tabs({ items = [], active, onChange, className = \"\", ...rest }) {\n return (\n <div role=\"tablist\" className={[\"ax-tabs\", className].filter(Boolean).join(\" \")} {...rest}>\n {items.map((item) => {\n const it = typeof item === \"string\" ? { id: item, label: item } : item;\n const isActive = it.id === active;\n return (\n <button\n key={it.id}\n role=\"tab\"\n aria-selected={isActive}\n className={\"ax-tabs__tab\" + (isActive ? \" ax-tabs__tab--active\" : \"\")}\n onClick={() => onChange && onChange(it.id)}\n >\n {it.label}\n {it.count != null ? <span className=\"ax-tabs__count\">{it.count}</span> : null}\n </button>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBpB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,aAAa,GAAG;AAC9E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,KAAK,EAAE,QAAQ,CAAA,GAAI,QAAQ,UAAU,YAAY,IAAI,GAAG,QAAQ;AAC9E,SACE,oBAAC,SAAI,MAAK,WAAU,WAAW,CAAC,WAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAClF,UAAA,MAAM,IAAI,CAAC,SAAS;AACnB,UAAM,KAAK,OAAO,SAAS,WAAW,EAAE,IAAI,MAAM,OAAO,KAAA,IAAS;AAClE,UAAM,WAAW,GAAG,OAAO;AAC3B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,WAAW,kBAAkB,WAAW,0BAA0B;AAAA,QAClE,SAAS,MAAM,YAAY,SAAS,GAAG,EAAE;AAAA,QAExC,UAAA;AAAA,UAAA,GAAG;AAAA,UACH,GAAG,SAAS,OAAO,oBAAC,UAAK,WAAU,kBAAkB,UAAA,GAAG,MAAA,CAAM,IAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAPpE,GAAG;AAAA,IAAA;AAAA,EAUd,CAAC,EAAA,CACH;AAEJ;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Prose wrapper (styles raw HTML headings/lists/code) + Text helper with variants. */
|
|
2
|
+
export interface ProseProps { children?: React.ReactNode; }
|
|
3
|
+
export declare function Prose(props: ProseProps): JSX.Element;
|
|
4
|
+
export interface TextProps { as?: string; variant?: "mono" | "muted" | "faint" | "label" | "display"; children?: React.ReactNode; }
|
|
5
|
+
export declare function Text(props: TextProps): JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_TYPOGRAPHY_CSS = `
|
|
4
|
+
.ax-prose { color: var(--text-body); font-size: var(--text-md); line-height: var(--leading-body); max-width: 68ch; }
|
|
5
|
+
.ax-prose > * { margin: 0 0 1em; }
|
|
6
|
+
.ax-prose > *:last-child { margin-bottom: 0; }
|
|
7
|
+
.ax-prose h1 { font-family: var(--font-display); font-size: var(--text-2xl); font-weight: var(--weight-medium); letter-spacing: var(--tracking-tight); line-height: var(--leading-tight); margin: 0 0 0.5em; }
|
|
8
|
+
.ax-prose h2 { font-family: var(--font-display); font-size: var(--text-xl); font-weight: var(--weight-medium); letter-spacing: var(--tracking-tight); margin: 1.5em 0 0.5em; }
|
|
9
|
+
.ax-prose h3 { font-family: var(--font-display); font-size: var(--text-lg); font-weight: var(--weight-medium); margin: 1.4em 0 0.4em; }
|
|
10
|
+
.ax-prose a { color: var(--text-body); text-decoration: underline; text-decoration-color: var(--border-strong); text-underline-offset: 2px; }
|
|
11
|
+
.ax-prose a:hover { text-decoration-color: var(--text-body); }
|
|
12
|
+
.ax-prose strong { font-weight: var(--weight-medium); color: var(--text-body); }
|
|
13
|
+
.ax-prose code { font-family: var(--font-mono); font-size: 0.88em; padding: 1px 5px; background: var(--surface-raised); border: 1px solid var(--border-default); border-radius: var(--radius-1); }
|
|
14
|
+
.ax-prose blockquote { border-left: 2px solid var(--border-strong); padding-left: 16px; color: var(--text-muted); font-style: normal; }
|
|
15
|
+
.ax-prose ul, .ax-prose ol { padding-left: 20px; }
|
|
16
|
+
.ax-prose li { margin-bottom: 0.4em; }
|
|
17
|
+
.ax-prose hr { border: none; border-top: 1px solid var(--border-default); margin: 2em 0; }
|
|
18
|
+
|
|
19
|
+
.ax-text--mono { font-family: var(--font-mono); }
|
|
20
|
+
.ax-text--muted { color: var(--text-muted); }
|
|
21
|
+
.ax-text--faint { color: var(--text-faint); }
|
|
22
|
+
.ax-text--label { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }
|
|
23
|
+
.ax-text--display { font-family: var(--font-display); letter-spacing: var(--tracking-tight); }
|
|
24
|
+
`;
|
|
25
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-typography-css")) {
|
|
26
|
+
const s = document.createElement("style");
|
|
27
|
+
s.id = "ax-typography-css";
|
|
28
|
+
s.textContent = AX_TYPOGRAPHY_CSS;
|
|
29
|
+
document.head.appendChild(s);
|
|
30
|
+
}
|
|
31
|
+
function Prose({ children, className = "", ...rest }) {
|
|
32
|
+
return /* @__PURE__ */ jsx("div", { className: ["ax-prose", className].filter(Boolean).join(" "), ...rest, children });
|
|
33
|
+
}
|
|
34
|
+
function Text({ as = "span", variant, className = "", children, ...rest }) {
|
|
35
|
+
const Tag = as;
|
|
36
|
+
const cls = ["ax-text", variant ? "ax-text--" + variant : "", className].filter(Boolean).join(" ");
|
|
37
|
+
return /* @__PURE__ */ jsx(Tag, { className: cls, ...rest, children });
|
|
38
|
+
}
|
|
39
|
+
const Typography = Prose;
|
|
40
|
+
export {
|
|
41
|
+
Prose,
|
|
42
|
+
Text,
|
|
43
|
+
Typography
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=Typography.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Typography.js","sources":["../../../src/components/display/Typography.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TYPOGRAPHY_CSS = `\n.ax-prose { color: var(--text-body); font-size: var(--text-md); line-height: var(--leading-body); max-width: 68ch; }\n.ax-prose > * { margin: 0 0 1em; }\n.ax-prose > *:last-child { margin-bottom: 0; }\n.ax-prose h1 { font-family: var(--font-display); font-size: var(--text-2xl); font-weight: var(--weight-medium); letter-spacing: var(--tracking-tight); line-height: var(--leading-tight); margin: 0 0 0.5em; }\n.ax-prose h2 { font-family: var(--font-display); font-size: var(--text-xl); font-weight: var(--weight-medium); letter-spacing: var(--tracking-tight); margin: 1.5em 0 0.5em; }\n.ax-prose h3 { font-family: var(--font-display); font-size: var(--text-lg); font-weight: var(--weight-medium); margin: 1.4em 0 0.4em; }\n.ax-prose a { color: var(--text-body); text-decoration: underline; text-decoration-color: var(--border-strong); text-underline-offset: 2px; }\n.ax-prose a:hover { text-decoration-color: var(--text-body); }\n.ax-prose strong { font-weight: var(--weight-medium); color: var(--text-body); }\n.ax-prose code { font-family: var(--font-mono); font-size: 0.88em; padding: 1px 5px; background: var(--surface-raised); border: 1px solid var(--border-default); border-radius: var(--radius-1); }\n.ax-prose blockquote { border-left: 2px solid var(--border-strong); padding-left: 16px; color: var(--text-muted); font-style: normal; }\n.ax-prose ul, .ax-prose ol { padding-left: 20px; }\n.ax-prose li { margin-bottom: 0.4em; }\n.ax-prose hr { border: none; border-top: 1px solid var(--border-default); margin: 2em 0; }\n\n.ax-text--mono { font-family: var(--font-mono); }\n.ax-text--muted { color: var(--text-muted); }\n.ax-text--faint { color: var(--text-faint); }\n.ax-text--label { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }\n.ax-text--display { font-family: var(--font-display); letter-spacing: var(--tracking-tight); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-typography-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-typography-css\";\n s.textContent = AX_TYPOGRAPHY_CSS;\n document.head.appendChild(s);\n}\n\nexport function Prose({ children, className = \"\", ...rest }) {\n return <div className={[\"ax-prose\", className].filter(Boolean).join(\" \")} {...rest}>{children}</div>;\n}\n\nexport function Text({ as = \"span\", variant, className = \"\", children, ...rest }) {\n const Tag = as;\n const cls = [\"ax-text\", variant ? \"ax-text--\" + variant : \"\", className].filter(Boolean).join(\" \");\n return <Tag className={cls} {...rest}>{children}</Tag>;\n}\n\n/** Namesake export — Typography is the Prose wrapper. Prose / Text are the primary exports. */\nexport const Typography = Prose;\n"],"names":[],"mappings":";;AAEA,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuB1B,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,MAAM,EAAE,UAAU,YAAY,IAAI,GAAG,QAAQ;AAC3D,SAAO,oBAAC,OAAA,EAAI,WAAW,CAAC,YAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAAO,UAAS;AAChG;AAEO,SAAS,KAAK,EAAE,KAAK,QAAQ,SAAS,YAAY,IAAI,UAAU,GAAG,QAAQ;AAChF,QAAM,MAAM;AACZ,QAAM,MAAM,CAAC,WAAW,UAAU,cAAc,UAAU,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACjG,6BAAQ,KAAA,EAAI,WAAW,KAAM,GAAG,MAAO,UAAS;AAClD;AAGO,MAAM,aAAa;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline alert with a status bar (or icon) and optional title.
|
|
3
|
+
*/
|
|
4
|
+
export interface AlertProps {
|
|
5
|
+
/** @default "neutral" */
|
|
6
|
+
variant?: "neutral" | "ok" | "warn" | "danger";
|
|
7
|
+
/** Optional leading icon (replaces the status bar). */
|
|
8
|
+
icon?: React.ReactNode;
|
|
9
|
+
title?: React.ReactNode;
|
|
10
|
+
children?: React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export declare function Alert(props: AlertProps): JSX.Element;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_ALERT_CSS = `
|
|
4
|
+
.ax-alert {
|
|
5
|
+
display: flex; gap: 12px; padding: 14px 16px;
|
|
6
|
+
border: 1px solid var(--border-default); border-radius: var(--radius-3);
|
|
7
|
+
background: var(--surface-card);
|
|
8
|
+
}
|
|
9
|
+
.ax-alert__bar { width: 2px; flex: none; align-self: stretch; border-radius: 1px; background: var(--text-faint); }
|
|
10
|
+
.ax-alert--ok .ax-alert__bar { background: var(--ok); }
|
|
11
|
+
.ax-alert--warn .ax-alert__bar { background: var(--warn); }
|
|
12
|
+
.ax-alert--danger .ax-alert__bar { background: var(--danger); }
|
|
13
|
+
.ax-alert__icon { flex: none; color: var(--text-muted); margin-top: 1px; }
|
|
14
|
+
.ax-alert--ok .ax-alert__icon { color: var(--ok); }
|
|
15
|
+
.ax-alert--warn .ax-alert__icon { color: var(--warn); }
|
|
16
|
+
.ax-alert--danger .ax-alert__icon { color: var(--danger); }
|
|
17
|
+
.ax-alert__icon svg { width: 16px; height: 16px; display: block; }
|
|
18
|
+
.ax-alert__body { flex: 1; min-width: 0; }
|
|
19
|
+
.ax-alert__title { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); margin: 0; }
|
|
20
|
+
.ax-alert__desc { font-size: var(--text-sm); color: var(--text-muted); margin: 3px 0 0; line-height: var(--leading-body); }
|
|
21
|
+
`;
|
|
22
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-alert-css")) {
|
|
23
|
+
const s = document.createElement("style");
|
|
24
|
+
s.id = "ax-alert-css";
|
|
25
|
+
s.textContent = AX_ALERT_CSS;
|
|
26
|
+
document.head.appendChild(s);
|
|
27
|
+
}
|
|
28
|
+
function Alert({ variant = "neutral", icon, title, children, className = "", ...rest }) {
|
|
29
|
+
const cls = ["ax-alert", variant !== "neutral" ? "ax-alert--" + variant : "", className].filter(Boolean).join(" ");
|
|
30
|
+
return /* @__PURE__ */ jsxs("div", { role: "alert", className: cls, ...rest, children: [
|
|
31
|
+
icon ? /* @__PURE__ */ jsx("span", { className: "ax-alert__icon", children: icon }) : /* @__PURE__ */ jsx("span", { className: "ax-alert__bar" }),
|
|
32
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-alert__body", children: [
|
|
33
|
+
title ? /* @__PURE__ */ jsx("p", { className: "ax-alert__title", children: title }) : null,
|
|
34
|
+
children ? /* @__PURE__ */ jsx("p", { className: "ax-alert__desc", children }) : null
|
|
35
|
+
] })
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
Alert
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=Alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Alert.js","sources":["../../../src/components/feedback/Alert.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_ALERT_CSS = `\n.ax-alert {\n display: flex; gap: 12px; padding: 14px 16px;\n border: 1px solid var(--border-default); border-radius: var(--radius-3);\n background: var(--surface-card);\n}\n.ax-alert__bar { width: 2px; flex: none; align-self: stretch; border-radius: 1px; background: var(--text-faint); }\n.ax-alert--ok .ax-alert__bar { background: var(--ok); }\n.ax-alert--warn .ax-alert__bar { background: var(--warn); }\n.ax-alert--danger .ax-alert__bar { background: var(--danger); }\n.ax-alert__icon { flex: none; color: var(--text-muted); margin-top: 1px; }\n.ax-alert--ok .ax-alert__icon { color: var(--ok); }\n.ax-alert--warn .ax-alert__icon { color: var(--warn); }\n.ax-alert--danger .ax-alert__icon { color: var(--danger); }\n.ax-alert__icon svg { width: 16px; height: 16px; display: block; }\n.ax-alert__body { flex: 1; min-width: 0; }\n.ax-alert__title { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); margin: 0; }\n.ax-alert__desc { font-size: var(--text-sm); color: var(--text-muted); margin: 3px 0 0; line-height: var(--leading-body); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-alert-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-alert-css\";\n s.textContent = AX_ALERT_CSS;\n document.head.appendChild(s);\n}\n\nexport function Alert({ variant = \"neutral\", icon, title, children, className = \"\", ...rest }) {\n const cls = [\"ax-alert\", variant !== \"neutral\" ? \"ax-alert--\" + variant : \"\", className].filter(Boolean).join(\" \");\n return (\n <div role=\"alert\" className={cls} {...rest}>\n {icon ? <span className=\"ax-alert__icon\">{icon}</span> : <span className=\"ax-alert__bar\"></span>}\n <div className=\"ax-alert__body\">\n {title ? <p className=\"ax-alert__title\">{title}</p> : null}\n {children ? <p className=\"ax-alert__desc\">{children}</p> : null}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBrB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,cAAc,GAAG;AAC/E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,MAAM,EAAE,UAAU,WAAW,MAAM,OAAO,UAAU,YAAY,IAAI,GAAG,QAAQ;AAC7F,QAAM,MAAM,CAAC,YAAY,YAAY,YAAY,eAAe,UAAU,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACjH,8BACG,OAAA,EAAI,MAAK,SAAQ,WAAW,KAAM,GAAG,MACnC,UAAA;AAAA,IAAA,OAAO,oBAAC,UAAK,WAAU,kBAAkB,gBAAK,IAAU,oBAAC,QAAA,EAAK,WAAU,gBAAA,CAAgB;AAAA,IACzF,qBAAC,OAAA,EAAI,WAAU,kBACZ,UAAA;AAAA,MAAA,QAAQ,oBAAC,KAAA,EAAE,WAAU,mBAAmB,iBAAM,IAAO;AAAA,MACrD,WAAW,oBAAC,KAAA,EAAE,WAAU,kBAAkB,UAAS,IAAO;AAAA,IAAA,EAAA,CAC7D;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modal dialog on a blurred overlay. inline renders without the overlay (for docs).
|
|
3
|
+
*/
|
|
4
|
+
export interface DialogProps {
|
|
5
|
+
/** @default true */
|
|
6
|
+
open?: boolean;
|
|
7
|
+
/** Render without fixed overlay. @default false */
|
|
8
|
+
inline?: boolean;
|
|
9
|
+
/** Mono uppercase header label. */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Footer actions (right-aligned). */
|
|
12
|
+
footer?: React.ReactNode;
|
|
13
|
+
/** Called on overlay click / close button. */
|
|
14
|
+
onClose?: () => void;
|
|
15
|
+
children?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function Dialog(props: DialogProps): JSX.Element;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_DIALOG_CSS = `
|
|
4
|
+
.ax-dialog-overlay {
|
|
5
|
+
position: fixed; inset: 0; z-index: 100;
|
|
6
|
+
display: flex; align-items: center; justify-content: center;
|
|
7
|
+
background: var(--bg-overlay);
|
|
8
|
+
backdrop-filter: blur(var(--blur-overlay));
|
|
9
|
+
-webkit-backdrop-filter: blur(var(--blur-overlay));
|
|
10
|
+
animation: ax-dialog-fade var(--dur-2) var(--ease-out);
|
|
11
|
+
}
|
|
12
|
+
.ax-dialog {
|
|
13
|
+
width: min(480px, calc(100vw - 48px));
|
|
14
|
+
background: var(--surface-panel);
|
|
15
|
+
border: 1px solid var(--border-strong);
|
|
16
|
+
border-radius: var(--radius-3);
|
|
17
|
+
box-shadow: var(--shadow-3);
|
|
18
|
+
animation: ax-dialog-rise var(--dur-3) var(--ease-out);
|
|
19
|
+
}
|
|
20
|
+
.ax-dialog--inline { position: relative; animation: none; }
|
|
21
|
+
.ax-dialog__head {
|
|
22
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
23
|
+
padding: var(--space-4) var(--space-5);
|
|
24
|
+
border-bottom: 1px solid var(--border-default);
|
|
25
|
+
}
|
|
26
|
+
.ax-dialog__title {
|
|
27
|
+
margin: 0; font-family: var(--font-mono); font-size: var(--text-xs);
|
|
28
|
+
font-weight: var(--weight-medium); letter-spacing: var(--tracking-label);
|
|
29
|
+
text-transform: uppercase; color: var(--text-muted);
|
|
30
|
+
}
|
|
31
|
+
.ax-dialog__close {
|
|
32
|
+
appearance: none; background: none; border: none; cursor: pointer;
|
|
33
|
+
color: var(--text-faint); font-family: var(--font-mono); font-size: 13px;
|
|
34
|
+
padding: 2px 4px; border-radius: var(--radius-1);
|
|
35
|
+
}
|
|
36
|
+
.ax-dialog__close:hover { color: var(--text-body); background: var(--surface-raised); }
|
|
37
|
+
.ax-dialog__body { padding: var(--space-5); }
|
|
38
|
+
.ax-dialog__foot {
|
|
39
|
+
display: flex; justify-content: flex-end; gap: var(--space-2);
|
|
40
|
+
padding: var(--space-4) var(--space-5);
|
|
41
|
+
border-top: 1px solid var(--border-default);
|
|
42
|
+
}
|
|
43
|
+
@keyframes ax-dialog-fade { from { opacity: 0; } }
|
|
44
|
+
@keyframes ax-dialog-rise { from { opacity: 0; transform: translateY(8px); } }
|
|
45
|
+
@media (prefers-reduced-motion: reduce) {
|
|
46
|
+
.ax-dialog-overlay, .ax-dialog { animation: none; }
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-dialog-css")) {
|
|
50
|
+
const s = document.createElement("style");
|
|
51
|
+
s.id = "ax-dialog-css";
|
|
52
|
+
s.textContent = AX_DIALOG_CSS;
|
|
53
|
+
document.head.appendChild(s);
|
|
54
|
+
}
|
|
55
|
+
function Dialog({
|
|
56
|
+
open = true,
|
|
57
|
+
inline = false,
|
|
58
|
+
title,
|
|
59
|
+
footer,
|
|
60
|
+
onClose,
|
|
61
|
+
children,
|
|
62
|
+
className = "",
|
|
63
|
+
...rest
|
|
64
|
+
}) {
|
|
65
|
+
if (!open) return null;
|
|
66
|
+
const panel = /* @__PURE__ */ jsxs(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
role: "dialog",
|
|
70
|
+
"aria-modal": !inline,
|
|
71
|
+
className: ["ax-dialog", inline ? "ax-dialog--inline" : "", className].filter(Boolean).join(" "),
|
|
72
|
+
onClick: (e) => e.stopPropagation(),
|
|
73
|
+
...rest,
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-dialog__head", children: [
|
|
76
|
+
/* @__PURE__ */ jsx("h2", { className: "ax-dialog__title", children: title }),
|
|
77
|
+
onClose ? /* @__PURE__ */ jsx("button", { className: "ax-dialog__close", "aria-label": "Close", onClick: onClose, children: "ESC ✕" }) : null
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsx("div", { className: "ax-dialog__body", children }),
|
|
80
|
+
footer ? /* @__PURE__ */ jsx("div", { className: "ax-dialog__foot", children: footer }) : null
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
if (inline) return panel;
|
|
85
|
+
return /* @__PURE__ */ jsx("div", { className: "ax-dialog-overlay", onClick: onClose, children: panel });
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
Dialog
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=Dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["../../../src/components/feedback/Dialog.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_DIALOG_CSS = `\n.ax-dialog-overlay {\n position: fixed; inset: 0; z-index: 100;\n display: flex; align-items: center; justify-content: center;\n background: var(--bg-overlay);\n backdrop-filter: blur(var(--blur-overlay));\n -webkit-backdrop-filter: blur(var(--blur-overlay));\n animation: ax-dialog-fade var(--dur-2) var(--ease-out);\n}\n.ax-dialog {\n width: min(480px, calc(100vw - 48px));\n background: var(--surface-panel);\n border: 1px solid var(--border-strong);\n border-radius: var(--radius-3);\n box-shadow: var(--shadow-3);\n animation: ax-dialog-rise var(--dur-3) var(--ease-out);\n}\n.ax-dialog--inline { position: relative; animation: none; }\n.ax-dialog__head {\n display: flex; align-items: center; justify-content: space-between;\n padding: var(--space-4) var(--space-5);\n border-bottom: 1px solid var(--border-default);\n}\n.ax-dialog__title {\n margin: 0; font-family: var(--font-mono); font-size: var(--text-xs);\n font-weight: var(--weight-medium); letter-spacing: var(--tracking-label);\n text-transform: uppercase; color: var(--text-muted);\n}\n.ax-dialog__close {\n appearance: none; background: none; border: none; cursor: pointer;\n color: var(--text-faint); font-family: var(--font-mono); font-size: 13px;\n padding: 2px 4px; border-radius: var(--radius-1);\n}\n.ax-dialog__close:hover { color: var(--text-body); background: var(--surface-raised); }\n.ax-dialog__body { padding: var(--space-5); }\n.ax-dialog__foot {\n display: flex; justify-content: flex-end; gap: var(--space-2);\n padding: var(--space-4) var(--space-5);\n border-top: 1px solid var(--border-default);\n}\n@keyframes ax-dialog-fade { from { opacity: 0; } }\n@keyframes ax-dialog-rise { from { opacity: 0; transform: translateY(8px); } }\n@media (prefers-reduced-motion: reduce) {\n .ax-dialog-overlay, .ax-dialog { animation: none; }\n}\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-dialog-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-dialog-css\";\n s.textContent = AX_DIALOG_CSS;\n document.head.appendChild(s);\n}\n\nexport function Dialog({\n open = true,\n inline = false,\n title,\n footer,\n onClose,\n children,\n className = \"\",\n ...rest\n}) {\n if (!open) return null;\n const panel = (\n <div\n role=\"dialog\"\n aria-modal={!inline}\n className={[\"ax-dialog\", inline ? \"ax-dialog--inline\" : \"\", className].filter(Boolean).join(\" \")}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n <div className=\"ax-dialog__head\">\n <h2 className=\"ax-dialog__title\">{title}</h2>\n {onClose ? <button className=\"ax-dialog__close\" aria-label=\"Close\" onClick={onClose}>ESC ✕</button> : null}\n </div>\n <div className=\"ax-dialog__body\">{children}</div>\n {footer ? <div className=\"ax-dialog__foot\">{footer}</div> : null}\n </div>\n );\n if (inline) return panel;\n return (\n <div className=\"ax-dialog-overlay\" onClick={onClose}>\n {panel}\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;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;AA+CtB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,eAAe,GAAG;AAChF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,OAAO;AAAA,EACrB,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,GAAG;AACD,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY,CAAC;AAAA,MACb,WAAW,CAAC,aAAa,SAAS,sBAAsB,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC/F,SAAS,CAAC,MAAM,EAAE,gBAAA;AAAA,MACjB,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,UAAA,oBAAC,MAAA,EAAG,WAAU,oBAAoB,UAAA,OAAM;AAAA,UACvC,UAAU,oBAAC,UAAA,EAAO,WAAU,oBAAmB,cAAW,SAAQ,SAAS,SAAS,UAAA,QAAA,CAAK,IAAY;AAAA,QAAA,GACxG;AAAA,QACA,oBAAC,OAAA,EAAI,WAAU,mBAAmB,SAAA,CAAS;AAAA,QAC1C,SAAS,oBAAC,OAAA,EAAI,WAAU,mBAAmB,kBAAO,IAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhE,MAAI,OAAQ,QAAO;AACnB,6BACG,OAAA,EAAI,WAAU,qBAAoB,SAAS,SACzC,UAAA,OACH;AAEJ;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_SPINNER_CSS = `
|
|
4
|
+
.ax-spinner {
|
|
5
|
+
display: inline-block; flex: none;
|
|
6
|
+
border: 2px solid var(--border-strong);
|
|
7
|
+
border-top-color: var(--text-body);
|
|
8
|
+
border-radius: var(--radius-1);
|
|
9
|
+
animation: ax-spin 0.9s steps(8) infinite;
|
|
10
|
+
}
|
|
11
|
+
.ax-spinner--sm { width: 14px; height: 14px; }
|
|
12
|
+
.ax-spinner--md { width: 20px; height: 20px; }
|
|
13
|
+
.ax-spinner--lg { width: 28px; height: 28px; }
|
|
14
|
+
@keyframes ax-spin { to { transform: rotate(360deg); } }
|
|
15
|
+
@media (prefers-reduced-motion: reduce) {
|
|
16
|
+
.ax-spinner { animation-duration: 2s; }
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-spinner-css")) {
|
|
20
|
+
const s = document.createElement("style");
|
|
21
|
+
s.id = "ax-spinner-css";
|
|
22
|
+
s.textContent = AX_SPINNER_CSS;
|
|
23
|
+
document.head.appendChild(s);
|
|
24
|
+
}
|
|
25
|
+
function Spinner({ size = "md", className = "", ...rest }) {
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
27
|
+
"span",
|
|
28
|
+
{
|
|
29
|
+
role: "status",
|
|
30
|
+
"aria-label": "Loading",
|
|
31
|
+
className: ["ax-spinner", `ax-spinner--${size}`, className].filter(Boolean).join(" "),
|
|
32
|
+
...rest
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
Spinner
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sources":["../../../src/components/feedback/Spinner.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_SPINNER_CSS = `\n.ax-spinner {\n display: inline-block; flex: none;\n border: 2px solid var(--border-strong);\n border-top-color: var(--text-body);\n border-radius: var(--radius-1);\n animation: ax-spin 0.9s steps(8) infinite;\n}\n.ax-spinner--sm { width: 14px; height: 14px; }\n.ax-spinner--md { width: 20px; height: 20px; }\n.ax-spinner--lg { width: 28px; height: 28px; }\n@keyframes ax-spin { to { transform: rotate(360deg); } }\n@media (prefers-reduced-motion: reduce) {\n .ax-spinner { animation-duration: 2s; }\n}\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-spinner-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-spinner-css\";\n s.textContent = AX_SPINNER_CSS;\n document.head.appendChild(s);\n}\n\nexport function Spinner({ size = \"md\", className = \"\", ...rest }) {\n return (\n <span\n role=\"status\"\n aria-label=\"Loading\"\n className={[\"ax-spinner\", `ax-spinner--${size}`, className].filter(Boolean).join(\" \")}\n {...rest}\n ></span>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBvB,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,MAAM,YAAY,IAAI,GAAG,QAAQ;AAChE,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW,CAAC,cAAc,eAAe,IAAI,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MACnF,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification card with a thin status bar. Presentational — position it yourself.
|
|
3
|
+
*/
|
|
4
|
+
export interface ToastProps {
|
|
5
|
+
/** @default "neutral" */
|
|
6
|
+
variant?: "neutral" | "ok" | "warn" | "danger";
|
|
7
|
+
title: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
/** Renders a ✕ button when provided. */
|
|
10
|
+
onClose?: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function Toast(props: ToastProps): JSX.Element;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_TOAST_CSS = `
|
|
4
|
+
.ax-toast {
|
|
5
|
+
display: flex; align-items: flex-start; gap: 10px;
|
|
6
|
+
width: 340px; padding: 12px 14px;
|
|
7
|
+
background: var(--surface-card);
|
|
8
|
+
border: 1px solid var(--border-default);
|
|
9
|
+
border-radius: var(--radius-3);
|
|
10
|
+
box-shadow: var(--shadow-2);
|
|
11
|
+
}
|
|
12
|
+
.ax-toast__bar { width: 3px; align-self: stretch; flex: none; border-radius: 1px; background: var(--text-faint); }
|
|
13
|
+
.ax-toast--ok .ax-toast__bar { background: var(--ok); }
|
|
14
|
+
.ax-toast--warn .ax-toast__bar { background: var(--warn); }
|
|
15
|
+
.ax-toast--danger .ax-toast__bar { background: var(--danger); }
|
|
16
|
+
.ax-toast__body { flex: 1; min-width: 0; }
|
|
17
|
+
.ax-toast__title { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); margin: 0; }
|
|
18
|
+
.ax-toast__desc { font-size: var(--text-sm); color: var(--text-muted); margin: 2px 0 0; line-height: var(--leading-snug); }
|
|
19
|
+
.ax-toast__close {
|
|
20
|
+
appearance: none; background: none; border: none; cursor: pointer;
|
|
21
|
+
color: var(--text-faint); font-size: 14px; line-height: 1; padding: 2px;
|
|
22
|
+
font-family: var(--font-mono);
|
|
23
|
+
}
|
|
24
|
+
.ax-toast__close:hover { color: var(--text-body); }
|
|
25
|
+
`;
|
|
26
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-toast-css")) {
|
|
27
|
+
const s = document.createElement("style");
|
|
28
|
+
s.id = "ax-toast-css";
|
|
29
|
+
s.textContent = AX_TOAST_CSS;
|
|
30
|
+
document.head.appendChild(s);
|
|
31
|
+
}
|
|
32
|
+
function Toast({ variant = "neutral", title, description, onClose, className = "", ...rest }) {
|
|
33
|
+
const cls = [
|
|
34
|
+
"ax-toast",
|
|
35
|
+
variant !== "neutral" ? `ax-toast--${variant}` : "",
|
|
36
|
+
className
|
|
37
|
+
].filter(Boolean).join(" ");
|
|
38
|
+
return /* @__PURE__ */ jsxs("div", { role: "status", className: cls, ...rest, children: [
|
|
39
|
+
/* @__PURE__ */ jsx("span", { className: "ax-toast__bar" }),
|
|
40
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-toast__body", children: [
|
|
41
|
+
/* @__PURE__ */ jsx("p", { className: "ax-toast__title", children: title }),
|
|
42
|
+
description ? /* @__PURE__ */ jsx("p", { className: "ax-toast__desc", children: description }) : null
|
|
43
|
+
] }),
|
|
44
|
+
onClose ? /* @__PURE__ */ jsx("button", { className: "ax-toast__close", "aria-label": "Dismiss", onClick: onClose, children: "✕" }) : null
|
|
45
|
+
] });
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
Toast
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sources":["../../../src/components/feedback/Toast.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TOAST_CSS = `\n.ax-toast {\n display: flex; align-items: flex-start; gap: 10px;\n width: 340px; padding: 12px 14px;\n background: var(--surface-card);\n border: 1px solid var(--border-default);\n border-radius: var(--radius-3);\n box-shadow: var(--shadow-2);\n}\n.ax-toast__bar { width: 3px; align-self: stretch; flex: none; border-radius: 1px; background: var(--text-faint); }\n.ax-toast--ok .ax-toast__bar { background: var(--ok); }\n.ax-toast--warn .ax-toast__bar { background: var(--warn); }\n.ax-toast--danger .ax-toast__bar { background: var(--danger); }\n.ax-toast__body { flex: 1; min-width: 0; }\n.ax-toast__title { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); margin: 0; }\n.ax-toast__desc { font-size: var(--text-sm); color: var(--text-muted); margin: 2px 0 0; line-height: var(--leading-snug); }\n.ax-toast__close {\n appearance: none; background: none; border: none; cursor: pointer;\n color: var(--text-faint); font-size: 14px; line-height: 1; padding: 2px;\n font-family: var(--font-mono);\n}\n.ax-toast__close:hover { color: var(--text-body); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-toast-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-toast-css\";\n s.textContent = AX_TOAST_CSS;\n document.head.appendChild(s);\n}\n\nexport function Toast({ variant = \"neutral\", title, description, onClose, className = \"\", ...rest }) {\n const cls = [\n \"ax-toast\",\n variant !== \"neutral\" ? `ax-toast--${variant}` : \"\",\n className,\n ].filter(Boolean).join(\" \");\n return (\n <div role=\"status\" className={cls} {...rest}>\n <span className=\"ax-toast__bar\"></span>\n <div className=\"ax-toast__body\">\n <p className=\"ax-toast__title\">{title}</p>\n {description ? <p className=\"ax-toast__desc\">{description}</p> : null}\n </div>\n {onClose ? <button className=\"ax-toast__close\" aria-label=\"Dismiss\" onClick={onClose}>✕</button> : null}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBrB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,cAAc,GAAG;AAC/E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,MAAM,EAAE,UAAU,WAAW,OAAO,aAAa,SAAS,YAAY,IAAI,GAAG,QAAQ;AACnG,QAAM,MAAM;AAAA,IACV;AAAA,IACA,YAAY,YAAY,aAAa,OAAO,KAAK;AAAA,IACjD;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,8BACG,OAAA,EAAI,MAAK,UAAS,WAAW,KAAM,GAAG,MACrC,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,gBAAA,CAAgB;AAAA,IAChC,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAE,WAAU,mBAAmB,UAAA,OAAM;AAAA,MACrC,cAAc,oBAAC,KAAA,EAAE,WAAU,kBAAkB,uBAAY,IAAO;AAAA,IAAA,GACnE;AAAA,IACC,UAAU,oBAAC,UAAA,EAAO,WAAU,mBAAkB,cAAW,WAAU,SAAS,SAAS,UAAA,IAAA,CAAC,IAAY;AAAA,EAAA,GACrG;AAEJ;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hover/focus tooltip — inverted mono bubble, CSS only.
|
|
3
|
+
*/
|
|
4
|
+
export interface TooltipProps {
|
|
5
|
+
label: string;
|
|
6
|
+
/** @default "top" */
|
|
7
|
+
side?: "top" | "bottom";
|
|
8
|
+
/** The trigger element. */
|
|
9
|
+
children?: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare function Tooltip(props: TooltipProps): JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
const AX_TOOLTIP_CSS = `
|
|
4
|
+
.ax-tip { position: relative; display: inline-flex; }
|
|
5
|
+
.ax-tip__bubble {
|
|
6
|
+
position: absolute; left: 50%; transform: translateX(-50%) translateY(2px);
|
|
7
|
+
bottom: calc(100% + 8px); z-index: 50;
|
|
8
|
+
padding: 4px 8px; white-space: nowrap; pointer-events: none;
|
|
9
|
+
background: var(--accent); color: var(--accent-fg);
|
|
10
|
+
border-radius: var(--radius-1);
|
|
11
|
+
font-family: var(--font-mono); font-size: var(--text-xs);
|
|
12
|
+
opacity: 0;
|
|
13
|
+
transition: opacity var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);
|
|
14
|
+
}
|
|
15
|
+
.ax-tip--bottom .ax-tip__bubble { bottom: auto; top: calc(100% + 8px); transform: translateX(-50%) translateY(-2px); }
|
|
16
|
+
.ax-tip:hover .ax-tip__bubble, .ax-tip:focus-within .ax-tip__bubble { opacity: 1; transform: translateX(-50%) translateY(0); }
|
|
17
|
+
`;
|
|
18
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-tooltip-css")) {
|
|
19
|
+
const s = document.createElement("style");
|
|
20
|
+
s.id = "ax-tooltip-css";
|
|
21
|
+
s.textContent = AX_TOOLTIP_CSS;
|
|
22
|
+
document.head.appendChild(s);
|
|
23
|
+
}
|
|
24
|
+
function Tooltip({ label, side = "top", children, className = "", ...rest }) {
|
|
25
|
+
const cls = ["ax-tip", side === "bottom" ? "ax-tip--bottom" : "", className].filter(Boolean).join(" ");
|
|
26
|
+
return /* @__PURE__ */ jsxs("span", { className: cls, ...rest, children: [
|
|
27
|
+
children,
|
|
28
|
+
/* @__PURE__ */ jsx("span", { className: "ax-tip__bubble", role: "tooltip", children: label })
|
|
29
|
+
] });
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
Tooltip
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["../../../src/components/feedback/Tooltip.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TOOLTIP_CSS = `\n.ax-tip { position: relative; display: inline-flex; }\n.ax-tip__bubble {\n position: absolute; left: 50%; transform: translateX(-50%) translateY(2px);\n bottom: calc(100% + 8px); z-index: 50;\n padding: 4px 8px; white-space: nowrap; pointer-events: none;\n background: var(--accent); color: var(--accent-fg);\n border-radius: var(--radius-1);\n font-family: var(--font-mono); font-size: var(--text-xs);\n opacity: 0;\n transition: opacity var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);\n}\n.ax-tip--bottom .ax-tip__bubble { bottom: auto; top: calc(100% + 8px); transform: translateX(-50%) translateY(-2px); }\n.ax-tip:hover .ax-tip__bubble, .ax-tip:focus-within .ax-tip__bubble { opacity: 1; transform: translateX(-50%) translateY(0); }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-tooltip-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-tooltip-css\";\n s.textContent = AX_TOOLTIP_CSS;\n document.head.appendChild(s);\n}\n\nexport function Tooltip({ label, side = \"top\", children, className = \"\", ...rest }) {\n const cls = [\"ax-tip\", side === \"bottom\" ? \"ax-tip--bottom\" : \"\", className].filter(Boolean).join(\" \");\n return (\n <span className={cls} {...rest}>\n {children}\n <span className=\"ax-tip__bubble\" role=\"tooltip\">{label}</span>\n </span>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBvB,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,OAAO,OAAO,UAAU,YAAY,IAAI,GAAG,QAAQ;AAClF,QAAM,MAAM,CAAC,UAAU,SAAS,WAAW,mBAAmB,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACrG,SACE,qBAAC,QAAA,EAAK,WAAW,KAAM,GAAG,MACvB,UAAA;AAAA,IAAA;AAAA,wBACA,QAAA,EAAK,WAAU,kBAAiB,MAAK,WAAW,UAAA,MAAA,CAAM;AAAA,EAAA,GACzD;AAEJ;"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
const AX_CALENDAR_CSS = `
|
|
4
|
+
.ax-calendar { display: inline-block; padding: 14px; background: var(--surface-panel); border: 1px solid var(--border-default); border-radius: var(--radius-3); font-family: var(--font-body); user-select: none; }
|
|
5
|
+
.ax-calendar__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
|
|
6
|
+
.ax-calendar__month { font-family: var(--font-mono); font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); letter-spacing: 0.02em; }
|
|
7
|
+
.ax-calendar__nav { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; cursor: pointer; background: none; border: 1px solid var(--border-default); border-radius: var(--radius-2); color: var(--text-muted); transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }
|
|
8
|
+
.ax-calendar__nav:hover { background: var(--surface-raised); color: var(--text-body); }
|
|
9
|
+
.ax-calendar__grid { display: grid; grid-template-columns: repeat(7, 32px); gap: 2px; }
|
|
10
|
+
.ax-calendar__dow { height: 28px; display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }
|
|
11
|
+
.ax-calendar__day { height: 32px; display: flex; align-items: center; justify-content: center; cursor: pointer; background: none; border: none; border-radius: var(--radius-2); color: var(--text-body); font-family: var(--font-mono); font-size: var(--text-sm); transition: background var(--dur-1) var(--ease-out); }
|
|
12
|
+
.ax-calendar__day:hover:not(:disabled) { background: var(--surface-raised); }
|
|
13
|
+
.ax-calendar__day--muted { color: var(--text-faint); opacity: 0.5; }
|
|
14
|
+
.ax-calendar__day--today { box-shadow: inset 0 0 0 1px var(--border-strong); }
|
|
15
|
+
.ax-calendar__day--selected { background: var(--accent) !important; color: var(--accent-fg); }
|
|
16
|
+
.ax-calendar__day:disabled { color: var(--text-faint); opacity: 0.3; cursor: not-allowed; }
|
|
17
|
+
`;
|
|
18
|
+
if (typeof document !== "undefined" && !document.getElementById("ax-calendar-css")) {
|
|
19
|
+
const s = document.createElement("style");
|
|
20
|
+
s.id = "ax-calendar-css";
|
|
21
|
+
s.textContent = AX_CALENDAR_CSS;
|
|
22
|
+
document.head.appendChild(s);
|
|
23
|
+
}
|
|
24
|
+
const MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
25
|
+
const DOW = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
|
|
26
|
+
function sameDay(a, b) {
|
|
27
|
+
return a && b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
|
|
28
|
+
}
|
|
29
|
+
function Calendar({ value, onChange, month: monthProp, className = "", ...rest }) {
|
|
30
|
+
const init = value || /* @__PURE__ */ new Date();
|
|
31
|
+
const [view, setView] = useState({ y: (monthProp || init).getFullYear(), m: (monthProp || init).getMonth() });
|
|
32
|
+
const today = /* @__PURE__ */ new Date();
|
|
33
|
+
const first = new Date(view.y, view.m, 1);
|
|
34
|
+
const startOffset = (first.getDay() + 6) % 7;
|
|
35
|
+
const daysInMonth = new Date(view.y, view.m + 1, 0).getDate();
|
|
36
|
+
const prevDays = new Date(view.y, view.m, 0).getDate();
|
|
37
|
+
const cells = [];
|
|
38
|
+
for (let i = 0; i < startOffset; i++) cells.push({ day: prevDays - startOffset + i + 1, muted: true });
|
|
39
|
+
for (let d = 1; d <= daysInMonth; d++) cells.push({ day: d, muted: false, date: new Date(view.y, view.m, d) });
|
|
40
|
+
while (cells.length % 7 !== 0) cells.push({ day: cells.length - startOffset - daysInMonth + 1, muted: true });
|
|
41
|
+
const shift = (delta) => {
|
|
42
|
+
let m = view.m + delta, y = view.y;
|
|
43
|
+
if (m < 0) {
|
|
44
|
+
m = 11;
|
|
45
|
+
y--;
|
|
46
|
+
}
|
|
47
|
+
if (m > 11) {
|
|
48
|
+
m = 0;
|
|
49
|
+
y++;
|
|
50
|
+
}
|
|
51
|
+
setView({ y, m });
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsxs("div", { className: ["ax-calendar", className].filter(Boolean).join(" "), ...rest, children: [
|
|
54
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-calendar__head", children: [
|
|
55
|
+
/* @__PURE__ */ jsx("button", { className: "ax-calendar__nav", onClick: () => shift(-1), "aria-label": "Previous month", children: "‹" }),
|
|
56
|
+
/* @__PURE__ */ jsxs("span", { className: "ax-calendar__month", children: [
|
|
57
|
+
MONTHS[view.m],
|
|
58
|
+
" ",
|
|
59
|
+
view.y
|
|
60
|
+
] }),
|
|
61
|
+
/* @__PURE__ */ jsx("button", { className: "ax-calendar__nav", onClick: () => shift(1), "aria-label": "Next month", children: "›" })
|
|
62
|
+
] }),
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: "ax-calendar__grid", children: [
|
|
64
|
+
DOW.map((d) => /* @__PURE__ */ jsx("span", { className: "ax-calendar__dow", children: d }, d)),
|
|
65
|
+
cells.map((c, i) => /* @__PURE__ */ jsx(
|
|
66
|
+
"button",
|
|
67
|
+
{
|
|
68
|
+
className: ["ax-calendar__day", c.muted ? "ax-calendar__day--muted" : "", c.date && sameDay(c.date, today) ? "ax-calendar__day--today" : "", c.date && sameDay(c.date, value) ? "ax-calendar__day--selected" : ""].filter(Boolean).join(" "),
|
|
69
|
+
disabled: c.muted,
|
|
70
|
+
onClick: () => c.date && onChange && onChange(c.date),
|
|
71
|
+
children: c.day
|
|
72
|
+
},
|
|
73
|
+
i
|
|
74
|
+
))
|
|
75
|
+
] })
|
|
76
|
+
] });
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
Calendar
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=Calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../../../src/components/inputs/Calendar.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_CALENDAR_CSS = `\n.ax-calendar { display: inline-block; padding: 14px; background: var(--surface-panel); border: 1px solid var(--border-default); border-radius: var(--radius-3); font-family: var(--font-body); user-select: none; }\n.ax-calendar__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }\n.ax-calendar__month { font-family: var(--font-mono); font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-body); letter-spacing: 0.02em; }\n.ax-calendar__nav { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; cursor: pointer; background: none; border: 1px solid var(--border-default); border-radius: var(--radius-2); color: var(--text-muted); transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out); }\n.ax-calendar__nav:hover { background: var(--surface-raised); color: var(--text-body); }\n.ax-calendar__grid { display: grid; grid-template-columns: repeat(7, 32px); gap: 2px; }\n.ax-calendar__dow { height: 28px; display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); }\n.ax-calendar__day { height: 32px; display: flex; align-items: center; justify-content: center; cursor: pointer; background: none; border: none; border-radius: var(--radius-2); color: var(--text-body); font-family: var(--font-mono); font-size: var(--text-sm); transition: background var(--dur-1) var(--ease-out); }\n.ax-calendar__day:hover:not(:disabled) { background: var(--surface-raised); }\n.ax-calendar__day--muted { color: var(--text-faint); opacity: 0.5; }\n.ax-calendar__day--today { box-shadow: inset 0 0 0 1px var(--border-strong); }\n.ax-calendar__day--selected { background: var(--accent) !important; color: var(--accent-fg); }\n.ax-calendar__day:disabled { color: var(--text-faint); opacity: 0.3; cursor: not-allowed; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-calendar-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-calendar-css\";\n s.textContent = AX_CALENDAR_CSS;\n document.head.appendChild(s);\n}\n\nconst MONTHS = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\nconst DOW = [\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\",\"Su\"];\n\nfunction sameDay(a, b) { return a && b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate(); }\n\nexport function Calendar({ value, onChange, month: monthProp, className = \"\", ...rest }) {\n const init = value || new Date();\n const [view, setView] = useState({ y: (monthProp || init).getFullYear(), m: (monthProp || init).getMonth() });\n const today = new Date();\n\n const first = new Date(view.y, view.m, 1);\n const startOffset = (first.getDay() + 6) % 7; // Monday-first\n const daysInMonth = new Date(view.y, view.m + 1, 0).getDate();\n const prevDays = new Date(view.y, view.m, 0).getDate();\n\n const cells = [];\n for (let i = 0; i < startOffset; i++) cells.push({ day: prevDays - startOffset + i + 1, muted: true });\n for (let d = 1; d <= daysInMonth; d++) cells.push({ day: d, muted: false, date: new Date(view.y, view.m, d) });\n while (cells.length % 7 !== 0) cells.push({ day: cells.length - startOffset - daysInMonth + 1, muted: true });\n\n const shift = (delta) => {\n let m = view.m + delta, y = view.y;\n if (m < 0) { m = 11; y--; } if (m > 11) { m = 0; y++; }\n setView({ y, m });\n };\n\n return (\n <div className={[\"ax-calendar\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-calendar__head\">\n <button className=\"ax-calendar__nav\" onClick={() => shift(-1)} aria-label=\"Previous month\">‹</button>\n <span className=\"ax-calendar__month\">{MONTHS[view.m]} {view.y}</span>\n <button className=\"ax-calendar__nav\" onClick={() => shift(1)} aria-label=\"Next month\">›</button>\n </div>\n <div className=\"ax-calendar__grid\">\n {DOW.map((d) => <span key={d} className=\"ax-calendar__dow\">{d}</span>)}\n {cells.map((c, i) => (\n <button\n key={i}\n className={[\"ax-calendar__day\", c.muted ? \"ax-calendar__day--muted\" : \"\", c.date && sameDay(c.date, today) ? \"ax-calendar__day--today\" : \"\", c.date && sameDay(c.date, value) ? \"ax-calendar__day--selected\" : \"\"].filter(Boolean).join(\" \")}\n disabled={c.muted}\n onClick={() => c.date && onChange && onChange(c.date)}\n >{c.day}</button>\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;AAgBxB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,iBAAiB,GAAG;AAClF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEA,MAAM,SAAS,CAAC,WAAU,YAAW,SAAQ,SAAQ,OAAM,QAAO,QAAO,UAAS,aAAY,WAAU,YAAW,UAAU;AAC7H,MAAM,MAAM,CAAC,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI;AAE/C,SAAS,QAAQ,GAAG,GAAG;AAAE,SAAO,KAAK,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAA,MAAe,EAAE,SAAA,KAAc,EAAE,QAAA,MAAc,EAAE,QAAA;AAAW;AAExI,SAAS,SAAS,EAAE,OAAO,UAAU,OAAO,WAAW,YAAY,IAAI,GAAG,QAAQ;AACvF,QAAM,OAAO,SAAS,oBAAI,KAAA;AAC1B,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE,IAAI,aAAa,MAAM,YAAA,GAAe,IAAI,aAAa,MAAM,SAAA,GAAY;AAC5G,QAAM,4BAAY,KAAA;AAElB,QAAM,QAAQ,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC;AACxC,QAAM,eAAe,MAAM,OAAA,IAAW,KAAK;AAC3C,QAAM,cAAc,IAAI,KAAK,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,EAAE,QAAA;AACpD,QAAM,WAAW,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,QAAA;AAE7C,QAAM,QAAQ,CAAA;AACd,WAAS,IAAI,GAAG,IAAI,aAAa,IAAK,OAAM,KAAK,EAAE,KAAK,WAAW,cAAc,IAAI,GAAG,OAAO,MAAM;AACrG,WAAS,IAAI,GAAG,KAAK,aAAa,IAAK,OAAM,KAAK,EAAE,KAAK,GAAG,OAAO,OAAO,MAAM,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG;AAC7G,SAAO,MAAM,SAAS,MAAM,SAAS,KAAK,EAAE,KAAK,MAAM,SAAS,cAAc,cAAc,GAAG,OAAO,MAAM;AAE5G,QAAM,QAAQ,CAAC,UAAU;AACvB,QAAI,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK;AACjC,QAAI,IAAI,GAAG;AAAE,UAAI;AAAI;AAAA,IAAK;AAAE,QAAI,IAAI,IAAI;AAAE,UAAI;AAAG;AAAA,IAAK;AACtD,YAAQ,EAAE,GAAG,GAAG;AAAA,EAClB;AAEA,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACxE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAA,oBAAC,UAAA,EAAO,WAAU,oBAAmB,SAAS,MAAM,MAAM,EAAE,GAAG,cAAW,kBAAiB,UAAA,IAAA,CAAC;AAAA,MAC5F,qBAAC,QAAA,EAAK,WAAU,sBAAsB,UAAA;AAAA,QAAA,OAAO,KAAK,CAAC;AAAA,QAAE;AAAA,QAAE,KAAK;AAAA,MAAA,GAAE;AAAA,MAC9D,oBAAC,UAAA,EAAO,WAAU,oBAAmB,SAAS,MAAM,MAAM,CAAC,GAAG,cAAW,cAAa,UAAA,IAAA,CAAC;AAAA,IAAA,GACzF;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,qBACZ,UAAA;AAAA,MAAA,IAAI,IAAI,CAAC,MAAM,oBAAC,UAAa,WAAU,oBAAoB,UAAA,EAAA,GAAjC,CAAmC,CAAO;AAAA,MACpE,MAAM,IAAI,CAAC,GAAG,MACb;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAW,CAAC,oBAAoB,EAAE,QAAQ,4BAA4B,IAAI,EAAE,QAAQ,QAAQ,EAAE,MAAM,KAAK,IAAI,4BAA4B,IAAI,EAAE,QAAQ,QAAQ,EAAE,MAAM,KAAK,IAAI,+BAA+B,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,UAC3O,UAAU,EAAE;AAAA,UACZ,SAAS,MAAM,EAAE,QAAQ,YAAY,SAAS,EAAE,IAAI;AAAA,UACpD,UAAA,EAAE;AAAA,QAAA;AAAA,QAJG;AAAA,MAAA,CAKR;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 16px square checkbox with mono-inverted checked state.
|
|
3
|
+
*/
|
|
4
|
+
export interface CheckboxProps {
|
|
5
|
+
label?: string;
|
|
6
|
+
checked?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
onChange?: (e: any) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function Checkbox(props: CheckboxProps): JSX.Element;
|