@axis-ds/agentic-ui 1.4.0 → 1.5.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/README.md +42 -1
- package/dist/agent-avatar/index.js +6 -16
- package/dist/agent-avatar/index.mjs +75 -4
- package/dist/approval-card/index.js +6 -16
- package/dist/approval-card/index.mjs +86 -4
- package/dist/attachment-card/index.js +5 -17
- package/dist/attachment-card/index.mjs +101 -4
- package/dist/code-block/index.js +2 -3
- package/dist/code-block/index.mjs +76 -3
- package/dist/constants/a11y-labels.d.mts +86 -0
- package/dist/constants/a11y-labels.d.ts +86 -0
- package/dist/constants/a11y-labels.js +105 -0
- package/dist/{chunk-SCZ4BQ2G.mjs → constants/a11y-labels.mjs} +21 -17
- package/dist/context-panel/index.js +2 -3
- package/dist/context-panel/index.mjs +99 -3
- package/dist/diff-viewer/index.js +8 -17
- package/dist/diff-viewer/index.mjs +155 -4
- package/dist/feedback-buttons/index.js +7 -16
- package/dist/feedback-buttons/index.mjs +65 -4
- package/dist/index.js +36 -1732
- package/dist/index.mjs +18 -55
- package/dist/message-bubble/index.js +5 -15
- package/dist/message-bubble/index.mjs +98 -4
- package/dist/plan-card/index.js +6 -28
- package/dist/plan-card/index.mjs +143 -4
- package/dist/recovery-banner/index.js +1 -3
- package/dist/recovery-banner/index.mjs +70 -3
- package/dist/run-progress/index.js +5 -19
- package/dist/run-progress/index.mjs +128 -4
- package/dist/source-panel/index.js +5 -15
- package/dist/source-panel/index.mjs +88 -4
- package/dist/step-timeline/index.js +3 -17
- package/dist/step-timeline/index.mjs +69 -4
- package/dist/streaming-text/index.js +2 -3
- package/dist/streaming-text/index.mjs +59 -3
- package/dist/surface-renderer/index.js +1 -3
- package/dist/surface-renderer/index.mjs +79 -3
- package/dist/thinking-indicator/index.js +3 -5
- package/dist/thinking-indicator/index.mjs +45 -3
- package/dist/token-usage-indicator/index.js +1 -3
- package/dist/token-usage-indicator/index.mjs +81 -3
- package/dist/tool-call-card/index.js +5 -18
- package/dist/tool-call-card/index.mjs +108 -4
- package/package.json +35 -5
- package/dist/chunk-42KEAZ2Y.mjs +0 -109
- package/dist/chunk-4CMUEGLK.mjs +0 -80
- package/dist/chunk-4V4BWBRC.mjs +0 -77
- package/dist/chunk-7HTVJ6MK.mjs +0 -94
- package/dist/chunk-DPLGRVNQ.mjs +0 -95
- package/dist/chunk-FYAMA32G.mjs +0 -50
- package/dist/chunk-GQYOOLDL.mjs +0 -63
- package/dist/chunk-IOF4OET6.mjs +0 -162
- package/dist/chunk-J4FIMXXG.mjs +0 -106
- package/dist/chunk-JY7MTMMB.mjs +0 -83
- package/dist/chunk-KJVPVBET.mjs +0 -103
- package/dist/chunk-OYQX3SL4.mjs +0 -152
- package/dist/chunk-QS6GQNSE.mjs +0 -86
- package/dist/chunk-R4CMHIRO.mjs +0 -72
- package/dist/chunk-SCXUEQLI.mjs +0 -136
- package/dist/chunk-UDL4M5RP.mjs +0 -75
- package/dist/chunk-WFYQINWD.mjs +0 -115
- package/dist/chunk-ZW4Z27AB.mjs +0 -84
package/dist/index.mjs
CHANGED
|
@@ -1,58 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from "./
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
} from "./
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
} from "./
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
} from "./
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
} from "./
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
} from "./
|
|
19
|
-
import {
|
|
20
|
-
RunProgress
|
|
21
|
-
} from "./chunk-SCXUEQLI.mjs";
|
|
22
|
-
import {
|
|
23
|
-
SourcePanel
|
|
24
|
-
} from "./chunk-DPLGRVNQ.mjs";
|
|
25
|
-
import {
|
|
26
|
-
StepTimeline
|
|
27
|
-
} from "./chunk-4V4BWBRC.mjs";
|
|
28
|
-
import {
|
|
29
|
-
StreamingText
|
|
30
|
-
} from "./chunk-GQYOOLDL.mjs";
|
|
31
|
-
import {
|
|
32
|
-
SurfaceRenderer
|
|
33
|
-
} from "./chunk-ZW4Z27AB.mjs";
|
|
34
|
-
import {
|
|
35
|
-
AgentAvatar
|
|
36
|
-
} from "./chunk-JY7MTMMB.mjs";
|
|
37
|
-
import {
|
|
38
|
-
ApprovalCard
|
|
39
|
-
} from "./chunk-7HTVJ6MK.mjs";
|
|
40
|
-
import {
|
|
41
|
-
AttachmentCard
|
|
42
|
-
} from "./chunk-42KEAZ2Y.mjs";
|
|
43
|
-
import {
|
|
44
|
-
CodeBlock
|
|
45
|
-
} from "./chunk-4CMUEGLK.mjs";
|
|
46
|
-
import {
|
|
47
|
-
ContextPanel
|
|
48
|
-
} from "./chunk-KJVPVBET.mjs";
|
|
49
|
-
import {
|
|
50
|
-
DiffViewer
|
|
51
|
-
} from "./chunk-IOF4OET6.mjs";
|
|
52
|
-
import {
|
|
53
|
-
FeedbackButtons
|
|
54
|
-
} from "./chunk-R4CMHIRO.mjs";
|
|
55
|
-
import "./chunk-SCZ4BQ2G.mjs";
|
|
1
|
+
import { RunProgress } from "./run-progress/index.mjs";
|
|
2
|
+
import { StepTimeline } from "./step-timeline/index.mjs";
|
|
3
|
+
import { ThinkingIndicator } from "./thinking-indicator/index.mjs";
|
|
4
|
+
import { ApprovalCard } from "./approval-card/index.mjs";
|
|
5
|
+
import { SourcePanel } from "./source-panel/index.mjs";
|
|
6
|
+
import { StreamingText } from "./streaming-text/index.mjs";
|
|
7
|
+
import { ToolCallCard } from "./tool-call-card/index.mjs";
|
|
8
|
+
import { SurfaceRenderer } from "./surface-renderer/index.mjs";
|
|
9
|
+
import { RecoveryBanner } from "./recovery-banner/index.mjs";
|
|
10
|
+
import { AgentAvatar } from "./agent-avatar/index.mjs";
|
|
11
|
+
import { MessageBubble } from "./message-bubble/index.mjs";
|
|
12
|
+
import { FeedbackButtons } from "./feedback-buttons/index.mjs";
|
|
13
|
+
import { CodeBlock } from "./code-block/index.mjs";
|
|
14
|
+
import { DiffViewer } from "./diff-viewer/index.mjs";
|
|
15
|
+
import { PlanCard } from "./plan-card/index.mjs";
|
|
16
|
+
import { ContextPanel } from "./context-panel/index.mjs";
|
|
17
|
+
import { TokenUsageIndicator } from "./token-usage-indicator/index.mjs";
|
|
18
|
+
import { AttachmentCard } from "./attachment-card/index.mjs";
|
|
56
19
|
export {
|
|
57
20
|
AgentAvatar,
|
|
58
21
|
ApprovalCard,
|
|
@@ -16,25 +16,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/message-bubble/index.tsx
|
|
21
19
|
var message_bubble_exports = {};
|
|
22
20
|
__export(message_bubble_exports, {
|
|
23
21
|
MessageBubble: () => MessageBubble
|
|
24
22
|
});
|
|
25
23
|
module.exports = __toCommonJS(message_bubble_exports);
|
|
26
|
-
var import_ui_react = require("@axis-ds/ui-react");
|
|
27
|
-
|
|
28
|
-
// src/constants/a11y-labels.ts
|
|
29
|
-
var MESSAGE_ROLE_LABELS = {
|
|
30
|
-
user: "\uC0AC\uC6A9\uC790",
|
|
31
|
-
assistant: "\uC5B4\uC2DC\uC2A4\uD134\uD2B8",
|
|
32
|
-
system: "\uC2DC\uC2A4\uD15C"
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
// src/message-bubble/index.tsx
|
|
36
24
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
37
|
-
var
|
|
25
|
+
var import_ui_react = require("@axis-ds/ui-react");
|
|
26
|
+
var import_a11y_labels = require("../constants/a11y-labels.js");
|
|
27
|
+
const roleStyles = {
|
|
38
28
|
user: {
|
|
39
29
|
container: "flex-row-reverse",
|
|
40
30
|
bubble: "bg-[var(--axis-agent-message-user-bg)] text-[var(--axis-agent-message-user-text)] rounded-br-sm"
|
|
@@ -48,7 +38,7 @@ var roleStyles = {
|
|
|
48
38
|
bubble: "bg-[var(--axis-surface-tertiary)] text-[var(--axis-text-secondary)] text-xs italic"
|
|
49
39
|
}
|
|
50
40
|
};
|
|
51
|
-
|
|
41
|
+
const statusIcons = {
|
|
52
42
|
sending: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { className: "w-3 h-3 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [
|
|
53
43
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
54
44
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })
|
|
@@ -66,7 +56,7 @@ function MessageBubble({
|
|
|
66
56
|
metadata,
|
|
67
57
|
className
|
|
68
58
|
}) {
|
|
69
|
-
const roleLabel = MESSAGE_ROLE_LABELS[role];
|
|
59
|
+
const roleLabel = import_a11y_labels.MESSAGE_ROLE_LABELS[role];
|
|
70
60
|
const renderAvatar = () => {
|
|
71
61
|
if (!avatar) return null;
|
|
72
62
|
if (typeof avatar === "string") {
|
|
@@ -1,7 +1,101 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from "../
|
|
4
|
-
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@axis-ds/ui-react";
|
|
3
|
+
import { MESSAGE_ROLE_LABELS } from "../constants/a11y-labels.mjs";
|
|
4
|
+
const roleStyles = {
|
|
5
|
+
user: {
|
|
6
|
+
container: "flex-row-reverse",
|
|
7
|
+
bubble: "bg-[var(--axis-agent-message-user-bg)] text-[var(--axis-agent-message-user-text)] rounded-br-sm"
|
|
8
|
+
},
|
|
9
|
+
assistant: {
|
|
10
|
+
container: "flex-row",
|
|
11
|
+
bubble: "bg-[var(--axis-surface-secondary)] text-[var(--axis-text-primary)] rounded-bl-sm"
|
|
12
|
+
},
|
|
13
|
+
system: {
|
|
14
|
+
container: "justify-center",
|
|
15
|
+
bubble: "bg-[var(--axis-surface-tertiary)] text-[var(--axis-text-secondary)] text-xs italic"
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const statusIcons = {
|
|
19
|
+
sending: /* @__PURE__ */ jsxs("svg", { className: "w-3 h-3 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [
|
|
20
|
+
/* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
21
|
+
/* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })
|
|
22
|
+
] }),
|
|
23
|
+
sent: /* @__PURE__ */ jsx("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }),
|
|
24
|
+
error: /* @__PURE__ */ jsx("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01" }) })
|
|
25
|
+
};
|
|
26
|
+
function MessageBubble({
|
|
27
|
+
role,
|
|
28
|
+
content,
|
|
29
|
+
timestamp,
|
|
30
|
+
avatar,
|
|
31
|
+
status,
|
|
32
|
+
actions,
|
|
33
|
+
metadata,
|
|
34
|
+
className
|
|
35
|
+
}) {
|
|
36
|
+
const roleLabel = MESSAGE_ROLE_LABELS[role];
|
|
37
|
+
const renderAvatar = () => {
|
|
38
|
+
if (!avatar) return null;
|
|
39
|
+
if (typeof avatar === "string") {
|
|
40
|
+
return /* @__PURE__ */ jsx(
|
|
41
|
+
"img",
|
|
42
|
+
{
|
|
43
|
+
src: avatar,
|
|
44
|
+
alt: "",
|
|
45
|
+
"aria-hidden": "true",
|
|
46
|
+
className: "w-8 h-8 rounded-full object-cover flex-shrink-0"
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return /* @__PURE__ */ jsx("div", { className: "flex-shrink-0", children: avatar });
|
|
51
|
+
};
|
|
52
|
+
return /* @__PURE__ */ jsxs(
|
|
53
|
+
"div",
|
|
54
|
+
{
|
|
55
|
+
role: "article",
|
|
56
|
+
"aria-label": `${roleLabel} \uBA54\uC2DC\uC9C0`,
|
|
57
|
+
className: cn("flex items-start gap-2", roleStyles[role].container, className),
|
|
58
|
+
children: [
|
|
59
|
+
role !== "system" && renderAvatar(),
|
|
60
|
+
/* @__PURE__ */ jsxs("div", { className: cn("max-w-[80%]", role === "system" && "max-w-full"), children: [
|
|
61
|
+
/* @__PURE__ */ jsx(
|
|
62
|
+
"div",
|
|
63
|
+
{
|
|
64
|
+
className: cn(
|
|
65
|
+
"rounded-lg px-3 py-2",
|
|
66
|
+
roleStyles[role].bubble
|
|
67
|
+
),
|
|
68
|
+
children: /* @__PURE__ */ jsx("div", { className: "text-sm whitespace-pre-wrap", children: content })
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-1 px-1", children: [
|
|
72
|
+
timestamp && /* @__PURE__ */ jsx(
|
|
73
|
+
"time",
|
|
74
|
+
{
|
|
75
|
+
dateTime: timestamp.toISOString(),
|
|
76
|
+
className: "text-xs text-[var(--axis-text-tertiary)]",
|
|
77
|
+
children: timestamp.toLocaleTimeString("ko-KR", { hour: "2-digit", minute: "2-digit" })
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
metadata && /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--axis-text-tertiary)]", children: metadata }),
|
|
81
|
+
status && /* @__PURE__ */ jsx(
|
|
82
|
+
"span",
|
|
83
|
+
{
|
|
84
|
+
className: cn(
|
|
85
|
+
"text-[var(--axis-text-tertiary)]",
|
|
86
|
+
status === "error" && "text-[var(--axis-text-error)]"
|
|
87
|
+
),
|
|
88
|
+
"aria-label": status === "sending" ? "\uC804\uC1A1 \uC911" : status === "sent" ? "\uC804\uC1A1\uB428" : "\uC804\uC1A1 \uC2E4\uD328",
|
|
89
|
+
children: statusIcons[status]
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
] }),
|
|
93
|
+
actions && /* @__PURE__ */ jsx("div", { className: "mt-1", children: actions })
|
|
94
|
+
] })
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
}
|
|
5
99
|
export {
|
|
6
100
|
MessageBubble
|
|
7
101
|
};
|
package/dist/plan-card/index.js
CHANGED
|
@@ -26,38 +26,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// src/plan-card/index.tsx
|
|
31
29
|
var plan_card_exports = {};
|
|
32
30
|
__export(plan_card_exports, {
|
|
33
31
|
PlanCard: () => PlanCard
|
|
34
32
|
});
|
|
35
33
|
module.exports = __toCommonJS(plan_card_exports);
|
|
34
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
35
|
var React = __toESM(require("react"));
|
|
37
36
|
var import_ui_react = require("@axis-ds/ui-react");
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var STATUS_LABELS = {
|
|
41
|
-
pending: "\uB300\uAE30 \uC911",
|
|
42
|
-
running: "\uC2E4\uD589 \uC911",
|
|
43
|
-
complete: "\uC644\uB8CC",
|
|
44
|
-
success: "\uC131\uACF5",
|
|
45
|
-
error: "\uC624\uB958",
|
|
46
|
-
skipped: "\uAC74\uB108\uB700",
|
|
47
|
-
idle: "\uB300\uAE30 \uC911"
|
|
48
|
-
};
|
|
49
|
-
var PLAN_STATUS_LABELS = {
|
|
50
|
-
draft: "\uCD08\uC548",
|
|
51
|
-
pending: "\uC2B9\uC778 \uB300\uAE30",
|
|
52
|
-
approved: "\uC2B9\uC778\uB428",
|
|
53
|
-
rejected: "\uAC70\uC808\uB428",
|
|
54
|
-
executing: "\uC2E4\uD589 \uC911",
|
|
55
|
-
completed: "\uC644\uB8CC"
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
// src/plan-card/index.tsx
|
|
59
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
60
|
-
var planStatusStyles = {
|
|
37
|
+
var import_a11y_labels = require("../constants/a11y-labels.js");
|
|
38
|
+
const planStatusStyles = {
|
|
61
39
|
draft: {
|
|
62
40
|
border: "border-l-[var(--axis-status-neutral)]",
|
|
63
41
|
badge: "bg-[var(--axis-status-neutral-bg)] text-[var(--axis-status-neutral-strong)]"
|
|
@@ -83,7 +61,7 @@ var planStatusStyles = {
|
|
|
83
61
|
badge: "bg-[var(--axis-badge-success-bg)] text-[var(--axis-badge-success-text)]"
|
|
84
62
|
}
|
|
85
63
|
};
|
|
86
|
-
|
|
64
|
+
const stepStatusIcons = {
|
|
87
65
|
pending: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-[var(--axis-status-neutral)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10", strokeWidth: 2 }) }),
|
|
88
66
|
running: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-[var(--axis-status-running)] animate-spin", viewBox: "0 0 24 24", fill: "none", children: [
|
|
89
67
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
@@ -104,7 +82,7 @@ function PlanCard({
|
|
|
104
82
|
}) {
|
|
105
83
|
const styles = planStatusStyles[status];
|
|
106
84
|
const titleId = React.useId();
|
|
107
|
-
const statusLabel = PLAN_STATUS_LABELS[status];
|
|
85
|
+
const statusLabel = import_a11y_labels.PLAN_STATUS_LABELS[status];
|
|
108
86
|
const completedCount = steps.filter((s) => s.status === "complete").length;
|
|
109
87
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
110
88
|
"div",
|
|
@@ -144,7 +122,7 @@ function PlanCard({
|
|
|
144
122
|
] })
|
|
145
123
|
] }),
|
|
146
124
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { role: "list", "aria-label": "\uC2E4\uD589 \uB2E8\uACC4", className: "border-t border-[var(--axis-border-default)] divide-y divide-[var(--axis-border-default)]", children: steps.map((step) => {
|
|
147
|
-
const stepStatusLabel = STATUS_LABELS[step.status] || step.status;
|
|
125
|
+
const stepStatusLabel = import_a11y_labels.STATUS_LABELS[step.status] || step.status;
|
|
148
126
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
149
127
|
"div",
|
|
150
128
|
{
|
package/dist/plan-card/index.mjs
CHANGED
|
@@ -1,7 +1,146 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from "
|
|
4
|
-
import "../
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "@axis-ds/ui-react";
|
|
4
|
+
import { PLAN_STATUS_LABELS, STATUS_LABELS } from "../constants/a11y-labels.mjs";
|
|
5
|
+
const planStatusStyles = {
|
|
6
|
+
draft: {
|
|
7
|
+
border: "border-l-[var(--axis-status-neutral)]",
|
|
8
|
+
badge: "bg-[var(--axis-status-neutral-bg)] text-[var(--axis-status-neutral-strong)]"
|
|
9
|
+
},
|
|
10
|
+
pending: {
|
|
11
|
+
border: "border-l-[var(--axis-status-warning)]",
|
|
12
|
+
badge: "bg-[var(--axis-badge-warning-bg)] text-[var(--axis-badge-warning-text)]"
|
|
13
|
+
},
|
|
14
|
+
approved: {
|
|
15
|
+
border: "border-l-[var(--axis-status-success)]",
|
|
16
|
+
badge: "bg-[var(--axis-badge-success-bg)] text-[var(--axis-badge-success-text)]"
|
|
17
|
+
},
|
|
18
|
+
rejected: {
|
|
19
|
+
border: "border-l-[var(--axis-status-error)]",
|
|
20
|
+
badge: "bg-[var(--axis-badge-error-bg)] text-[var(--axis-badge-error-text)]"
|
|
21
|
+
},
|
|
22
|
+
executing: {
|
|
23
|
+
border: "border-l-[var(--axis-status-running)]",
|
|
24
|
+
badge: "bg-[var(--axis-badge-info-bg)] text-[var(--axis-badge-info-text)]"
|
|
25
|
+
},
|
|
26
|
+
completed: {
|
|
27
|
+
border: "border-l-[var(--axis-status-success)]",
|
|
28
|
+
badge: "bg-[var(--axis-badge-success-bg)] text-[var(--axis-badge-success-text)]"
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const stepStatusIcons = {
|
|
32
|
+
pending: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-[var(--axis-status-neutral)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", strokeWidth: 2 }) }),
|
|
33
|
+
running: /* @__PURE__ */ jsxs("svg", { className: "w-4 h-4 text-[var(--axis-status-running)] animate-spin", viewBox: "0 0 24 24", fill: "none", children: [
|
|
34
|
+
/* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
35
|
+
/* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })
|
|
36
|
+
] }),
|
|
37
|
+
complete: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-[var(--axis-status-success)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }),
|
|
38
|
+
error: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-[var(--axis-status-error)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }),
|
|
39
|
+
skipped: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-[var(--axis-status-neutral)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 5l7 7-7 7M5 5l7 7-7 7" }) })
|
|
40
|
+
};
|
|
41
|
+
function PlanCard({
|
|
42
|
+
title,
|
|
43
|
+
steps,
|
|
44
|
+
status = "pending",
|
|
45
|
+
onApprove,
|
|
46
|
+
onEdit,
|
|
47
|
+
onReject,
|
|
48
|
+
className
|
|
49
|
+
}) {
|
|
50
|
+
const styles = planStatusStyles[status];
|
|
51
|
+
const titleId = React.useId();
|
|
52
|
+
const statusLabel = PLAN_STATUS_LABELS[status];
|
|
53
|
+
const completedCount = steps.filter((s) => s.status === "complete").length;
|
|
54
|
+
return /* @__PURE__ */ jsxs(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
role: "region",
|
|
58
|
+
"aria-labelledby": titleId,
|
|
59
|
+
className: cn(
|
|
60
|
+
"rounded-lg border border-l-[length:var(--axis-plan-card-accent-width)] overflow-hidden",
|
|
61
|
+
"bg-[var(--axis-surface-default)] border-[var(--axis-border-default)]",
|
|
62
|
+
styles.border,
|
|
63
|
+
className
|
|
64
|
+
),
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
67
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2", children: [
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
69
|
+
/* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-[var(--axis-icon-secondary)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }),
|
|
70
|
+
/* @__PURE__ */ jsx("h4", { id: titleId, className: "text-sm font-semibold text-[var(--axis-text-primary)]", children: title })
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ jsx("span", { className: cn("text-xs px-2 py-0.5 rounded-full font-medium", styles.badge), children: statusLabel })
|
|
73
|
+
] }),
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-[var(--axis-text-tertiary)]", children: [
|
|
75
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
76
|
+
completedCount,
|
|
77
|
+
"/",
|
|
78
|
+
steps.length,
|
|
79
|
+
" \uB2E8\uACC4"
|
|
80
|
+
] }),
|
|
81
|
+
steps.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex-1 h-1 rounded-full bg-[var(--axis-surface-secondary)] overflow-hidden", children: /* @__PURE__ */ jsx(
|
|
82
|
+
"div",
|
|
83
|
+
{
|
|
84
|
+
className: "h-full rounded-full bg-[var(--axis-status-success)] transition-all",
|
|
85
|
+
style: { width: `${completedCount / steps.length * 100}%` },
|
|
86
|
+
"aria-hidden": "true"
|
|
87
|
+
}
|
|
88
|
+
) })
|
|
89
|
+
] })
|
|
90
|
+
] }),
|
|
91
|
+
/* @__PURE__ */ jsx("div", { role: "list", "aria-label": "\uC2E4\uD589 \uB2E8\uACC4", className: "border-t border-[var(--axis-border-default)] divide-y divide-[var(--axis-border-default)]", children: steps.map((step) => {
|
|
92
|
+
const stepStatusLabel = STATUS_LABELS[step.status] || step.status;
|
|
93
|
+
return /* @__PURE__ */ jsxs(
|
|
94
|
+
"div",
|
|
95
|
+
{
|
|
96
|
+
role: "listitem",
|
|
97
|
+
"aria-current": step.status === "running" ? "step" : void 0,
|
|
98
|
+
className: "flex items-start gap-3 px-4 py-2.5",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "mt-0.5 flex-shrink-0", children: stepStatusIcons[step.status] }),
|
|
101
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
102
|
+
/* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
103
|
+
stepStatusLabel,
|
|
104
|
+
":"
|
|
105
|
+
] }),
|
|
106
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--axis-text-primary)]", children: step.label }),
|
|
107
|
+
step.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--axis-text-secondary)] mt-0.5", children: step.description })
|
|
108
|
+
] })
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
step.id
|
|
112
|
+
);
|
|
113
|
+
}) }),
|
|
114
|
+
(status === "pending" || status === "draft") && (onApprove || onEdit || onReject) && /* @__PURE__ */ jsxs("div", { className: "flex gap-2 p-3 border-t border-[var(--axis-border-default)] bg-[var(--axis-surface-secondary)]", children: [
|
|
115
|
+
onApprove && /* @__PURE__ */ jsx(
|
|
116
|
+
"button",
|
|
117
|
+
{
|
|
118
|
+
onClick: onApprove,
|
|
119
|
+
className: "px-3 py-1.5 text-xs font-medium rounded-md bg-[var(--axis-status-success)] text-[var(--axis-status-success-contrast)] hover:bg-[var(--axis-status-success-strong)] transition-colors",
|
|
120
|
+
children: "\uC2B9\uC778"
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
onEdit && /* @__PURE__ */ jsx(
|
|
124
|
+
"button",
|
|
125
|
+
{
|
|
126
|
+
onClick: onEdit,
|
|
127
|
+
className: "px-3 py-1.5 text-xs font-medium rounded-md bg-[var(--axis-button-secondary-bg-default)] text-[var(--axis-text-primary)] hover:bg-[var(--axis-button-secondary-bg-hover)] transition-colors",
|
|
128
|
+
children: "\uC218\uC815"
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
onReject && /* @__PURE__ */ jsx(
|
|
132
|
+
"button",
|
|
133
|
+
{
|
|
134
|
+
onClick: onReject,
|
|
135
|
+
className: "px-3 py-1.5 text-xs font-medium rounded-md text-[var(--axis-status-error)] hover:text-[var(--axis-plan-card-reject-hover-text)] hover:bg-[color:color-mix(in_srgb,var(--axis-status-error)_10%,transparent)] transition-colors",
|
|
136
|
+
children: "\uAC70\uC808"
|
|
137
|
+
}
|
|
138
|
+
)
|
|
139
|
+
] })
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
5
144
|
export {
|
|
6
145
|
PlanCard
|
|
7
146
|
};
|
|
@@ -26,16 +26,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// src/recovery-banner/index.tsx
|
|
31
29
|
var recovery_banner_exports = {};
|
|
32
30
|
__export(recovery_banner_exports, {
|
|
33
31
|
RecoveryBanner: () => RecoveryBanner
|
|
34
32
|
});
|
|
35
33
|
module.exports = __toCommonJS(recovery_banner_exports);
|
|
34
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
35
|
var React = __toESM(require("react"));
|
|
37
36
|
var import_ui_react = require("@axis-ds/ui-react");
|
|
38
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
39
37
|
function RecoveryBanner({
|
|
40
38
|
message,
|
|
41
39
|
description,
|
|
@@ -1,6 +1,73 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from "
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "@axis-ds/ui-react";
|
|
4
|
+
function RecoveryBanner({
|
|
5
|
+
message,
|
|
6
|
+
description,
|
|
7
|
+
onRetry,
|
|
8
|
+
onDismiss,
|
|
9
|
+
className
|
|
10
|
+
}) {
|
|
11
|
+
const titleId = React.useId();
|
|
12
|
+
const descId = React.useId();
|
|
13
|
+
return /* @__PURE__ */ jsxs(
|
|
14
|
+
"div",
|
|
15
|
+
{
|
|
16
|
+
className: cn(
|
|
17
|
+
"flex items-start gap-3 p-4 rounded-lg border",
|
|
18
|
+
"bg-[var(--axis-surface-error)] border-[var(--axis-status-error-border)]",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
role: "alert",
|
|
22
|
+
"aria-labelledby": titleId,
|
|
23
|
+
"aria-describedby": description ? descId : void 0,
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx(
|
|
26
|
+
"svg",
|
|
27
|
+
{
|
|
28
|
+
className: "w-5 h-5 text-[var(--axis-status-error)] flex-shrink-0 mt-0.5",
|
|
29
|
+
fill: "none",
|
|
30
|
+
stroke: "currentColor",
|
|
31
|
+
viewBox: "0 0 24 24",
|
|
32
|
+
"aria-hidden": "true",
|
|
33
|
+
children: /* @__PURE__ */ jsx(
|
|
34
|
+
"path",
|
|
35
|
+
{
|
|
36
|
+
strokeLinecap: "round",
|
|
37
|
+
strokeLinejoin: "round",
|
|
38
|
+
strokeWidth: 2,
|
|
39
|
+
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
45
|
+
/* @__PURE__ */ jsx("p", { id: titleId, className: "text-sm font-medium text-[var(--axis-text-error)]", children: message }),
|
|
46
|
+
description && /* @__PURE__ */ jsx("p", { id: descId, className: "mt-1 text-sm text-[var(--axis-text-secondary)]", children: description }),
|
|
47
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2 mt-3", children: [
|
|
48
|
+
onRetry && /* @__PURE__ */ jsx(
|
|
49
|
+
"button",
|
|
50
|
+
{
|
|
51
|
+
onClick: onRetry,
|
|
52
|
+
"aria-describedby": descId,
|
|
53
|
+
className: "px-3 py-1.5 text-sm font-medium rounded-md bg-[var(--axis-button-destructive-bg-default)] text-[var(--axis-button-destructive-text-default)] hover:bg-[var(--axis-button-destructive-bg-hover)] transition-colors",
|
|
54
|
+
children: "\uC7AC\uC2DC\uB3C4"
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
onDismiss && /* @__PURE__ */ jsx(
|
|
58
|
+
"button",
|
|
59
|
+
{
|
|
60
|
+
onClick: onDismiss,
|
|
61
|
+
className: "px-3 py-1.5 text-sm font-medium rounded-md bg-transparent text-[var(--axis-text-primary)] hover:bg-[var(--axis-surface-secondary)] transition-colors",
|
|
62
|
+
children: "\uBB34\uC2DC"
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
] })
|
|
66
|
+
] })
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
4
71
|
export {
|
|
5
72
|
RecoveryBanner
|
|
6
73
|
};
|
|
@@ -26,36 +26,22 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// src/run-progress/index.tsx
|
|
31
29
|
var run_progress_exports = {};
|
|
32
30
|
__export(run_progress_exports, {
|
|
33
31
|
RunProgress: () => RunProgress
|
|
34
32
|
});
|
|
35
33
|
module.exports = __toCommonJS(run_progress_exports);
|
|
34
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
35
|
var React = __toESM(require("react"));
|
|
37
36
|
var import_ui_react = require("@axis-ds/ui-react");
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var STATUS_LABELS = {
|
|
41
|
-
pending: "\uB300\uAE30 \uC911",
|
|
42
|
-
running: "\uC2E4\uD589 \uC911",
|
|
43
|
-
complete: "\uC644\uB8CC",
|
|
44
|
-
success: "\uC131\uACF5",
|
|
45
|
-
error: "\uC624\uB958",
|
|
46
|
-
skipped: "\uAC74\uB108\uB700",
|
|
47
|
-
idle: "\uB300\uAE30 \uC911"
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
// src/run-progress/index.tsx
|
|
51
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
52
|
-
var statusColors = {
|
|
37
|
+
var import_a11y_labels = require("../constants/a11y-labels.js");
|
|
38
|
+
const statusColors = {
|
|
53
39
|
pending: "bg-[var(--axis-status-neutral-muted)] text-[var(--axis-status-neutral-muted-contrast)]",
|
|
54
40
|
running: "bg-[var(--axis-status-running)] text-[var(--axis-status-running-contrast)] animate-pulse",
|
|
55
41
|
complete: "bg-[var(--axis-status-success)] text-[var(--axis-status-success-contrast)]",
|
|
56
42
|
error: "bg-[var(--axis-status-error)] text-[var(--axis-status-error-contrast)]"
|
|
57
43
|
};
|
|
58
|
-
|
|
44
|
+
const statusIcons = {
|
|
59
45
|
pending: null,
|
|
60
46
|
running: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { className: "w-3 h-3 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [
|
|
61
47
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
@@ -141,7 +127,7 @@ function RunProgress({
|
|
|
141
127
|
),
|
|
142
128
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
143
129
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "sr-only", children: [
|
|
144
|
-
STATUS_LABELS[step.status],
|
|
130
|
+
import_a11y_labels.STATUS_LABELS[step.status],
|
|
145
131
|
":"
|
|
146
132
|
] }),
|
|
147
133
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-[var(--axis-text-primary)] truncate", children: step.label }),
|