@axis-ds/agentic-ui 1.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/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/agent-avatar/index.d.mts +22 -0
- package/dist/agent-avatar/index.d.ts +22 -0
- package/dist/agent-avatar/index.js +112 -0
- package/dist/agent-avatar/index.mjs +7 -0
- package/dist/approval-card/index.d.mts +31 -0
- package/dist/approval-card/index.d.ts +31 -0
- package/dist/approval-card/index.js +133 -0
- package/dist/approval-card/index.mjs +7 -0
- package/dist/attachment-card/index.d.mts +30 -0
- package/dist/attachment-card/index.d.ts +30 -0
- package/dist/attachment-card/index.js +140 -0
- package/dist/attachment-card/index.mjs +7 -0
- package/dist/chunk-2BWCQQLU.mjs +136 -0
- package/dist/chunk-3TH7GFBD.mjs +83 -0
- package/dist/chunk-4PCJFQHQ.mjs +66 -0
- package/dist/chunk-657RY6MM.mjs +106 -0
- package/dist/chunk-7UGSLEYG.mjs +75 -0
- package/dist/chunk-D6GHMPBC.mjs +76 -0
- package/dist/chunk-DPENLPBM.mjs +105 -0
- package/dist/chunk-DPLGRVNQ.mjs +95 -0
- package/dist/chunk-EF4MECAI.mjs +81 -0
- package/dist/chunk-ENIWC4WX.mjs +94 -0
- package/dist/chunk-ETFET3LT.mjs +72 -0
- package/dist/chunk-FAJF5RCY.mjs +115 -0
- package/dist/chunk-FPOHPDZ2.mjs +109 -0
- package/dist/chunk-FYAMA32G.mjs +50 -0
- package/dist/chunk-GQYOOLDL.mjs +63 -0
- package/dist/chunk-H6VXOP7U.mjs +86 -0
- package/dist/chunk-HLW7VEFF.mjs +47 -0
- package/dist/chunk-HWISMHCP.mjs +33 -0
- package/dist/chunk-KH4OXDEV.mjs +83 -0
- package/dist/chunk-KJVPVBET.mjs +103 -0
- package/dist/chunk-LZKOCELQ.mjs +136 -0
- package/dist/chunk-MGQ7AEYE.mjs +94 -0
- package/dist/chunk-MVBXXDZB.mjs +83 -0
- package/dist/chunk-NRBIHROX.mjs +162 -0
- package/dist/chunk-O5VXD6C3.mjs +114 -0
- package/dist/chunk-O5WFJCWK.mjs +63 -0
- package/dist/chunk-OOFM7NNH.mjs +68 -0
- package/dist/chunk-PAKLXPHD.mjs +115 -0
- package/dist/chunk-PWKN5UHT.mjs +152 -0
- package/dist/chunk-RGBY6EEU.mjs +80 -0
- package/dist/chunk-RGPKTWK4.mjs +77 -0
- package/dist/chunk-S3HVRSN2.mjs +95 -0
- package/dist/chunk-SCZ4BQ2G.mjs +68 -0
- package/dist/chunk-TCCZL2D5.mjs +51 -0
- package/dist/chunk-TKUAT5WE.mjs +105 -0
- package/dist/chunk-UG4H7RIP.mjs +77 -0
- package/dist/chunk-VKLPWFAI.mjs +79 -0
- package/dist/code-block/index.d.mts +24 -0
- package/dist/code-block/index.d.ts +24 -0
- package/dist/code-block/index.js +114 -0
- package/dist/code-block/index.mjs +6 -0
- package/dist/context-panel/index.d.mts +32 -0
- package/dist/context-panel/index.d.ts +32 -0
- package/dist/context-panel/index.js +137 -0
- package/dist/context-panel/index.mjs +6 -0
- package/dist/diff-viewer/index.d.mts +21 -0
- package/dist/diff-viewer/index.d.ts +21 -0
- package/dist/diff-viewer/index.js +201 -0
- package/dist/diff-viewer/index.mjs +7 -0
- package/dist/feedback-buttons/index.d.mts +21 -0
- package/dist/feedback-buttons/index.d.ts +21 -0
- package/dist/feedback-buttons/index.js +111 -0
- package/dist/feedback-buttons/index.mjs +7 -0
- package/dist/index.d.mts +20 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +1774 -0
- package/dist/index.mjs +75 -0
- package/dist/message-bubble/index.d.mts +29 -0
- package/dist/message-bubble/index.d.ts +29 -0
- package/dist/message-bubble/index.js +135 -0
- package/dist/message-bubble/index.mjs +7 -0
- package/dist/plan-card/index.d.mts +32 -0
- package/dist/plan-card/index.d.ts +32 -0
- package/dist/plan-card/index.js +202 -0
- package/dist/plan-card/index.mjs +7 -0
- package/dist/recovery-banner/index.d.mts +20 -0
- package/dist/recovery-banner/index.d.ts +20 -0
- package/dist/recovery-banner/index.js +109 -0
- package/dist/recovery-banner/index.mjs +6 -0
- package/dist/run-progress/index.d.mts +29 -0
- package/dist/run-progress/index.d.ts +29 -0
- package/dist/run-progress/index.js +179 -0
- package/dist/run-progress/index.mjs +7 -0
- package/dist/source-panel/index.d.mts +25 -0
- package/dist/source-panel/index.d.ts +25 -0
- package/dist/source-panel/index.js +135 -0
- package/dist/source-panel/index.mjs +7 -0
- package/dist/step-timeline/index.d.mts +21 -0
- package/dist/step-timeline/index.d.ts +21 -0
- package/dist/step-timeline/index.js +110 -0
- package/dist/step-timeline/index.mjs +7 -0
- package/dist/streaming-text/index.d.mts +27 -0
- package/dist/streaming-text/index.d.ts +27 -0
- package/dist/streaming-text/index.js +97 -0
- package/dist/streaming-text/index.mjs +6 -0
- package/dist/surface-renderer/index.d.mts +22 -0
- package/dist/surface-renderer/index.d.ts +22 -0
- package/dist/surface-renderer/index.js +107 -0
- package/dist/surface-renderer/index.mjs +6 -0
- package/dist/thinking-indicator/index.d.mts +16 -0
- package/dist/thinking-indicator/index.d.ts +16 -0
- package/dist/thinking-indicator/index.js +74 -0
- package/dist/thinking-indicator/index.mjs +6 -0
- package/dist/token-usage-indicator/index.d.mts +22 -0
- package/dist/token-usage-indicator/index.d.ts +22 -0
- package/dist/token-usage-indicator/index.js +110 -0
- package/dist/token-usage-indicator/index.mjs +6 -0
- package/dist/tool-call-card/index.d.mts +31 -0
- package/dist/tool-call-card/index.d.ts +31 -0
- package/dist/tool-call-card/index.js +158 -0
- package/dist/tool-call-card/index.mjs +7 -0
- package/package.json +130 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/recovery-banner/index.tsx
|
|
31
|
+
var recovery_banner_exports = {};
|
|
32
|
+
__export(recovery_banner_exports, {
|
|
33
|
+
RecoveryBanner: () => RecoveryBanner
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(recovery_banner_exports);
|
|
36
|
+
var React = __toESM(require("react"));
|
|
37
|
+
var import_ui_react = require("@axis-ds/ui-react");
|
|
38
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
39
|
+
function RecoveryBanner({
|
|
40
|
+
message,
|
|
41
|
+
description,
|
|
42
|
+
onRetry,
|
|
43
|
+
onDismiss,
|
|
44
|
+
className
|
|
45
|
+
}) {
|
|
46
|
+
const titleId = React.useId();
|
|
47
|
+
const descId = React.useId();
|
|
48
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
49
|
+
"div",
|
|
50
|
+
{
|
|
51
|
+
className: (0, import_ui_react.cn)(
|
|
52
|
+
"flex items-start gap-3 p-4 rounded-lg border",
|
|
53
|
+
"bg-[var(--axis-surface-error)] border-[var(--axis-color-red-200)]",
|
|
54
|
+
className
|
|
55
|
+
),
|
|
56
|
+
role: "alert",
|
|
57
|
+
"aria-labelledby": titleId,
|
|
58
|
+
"aria-describedby": description ? descId : void 0,
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
61
|
+
"svg",
|
|
62
|
+
{
|
|
63
|
+
className: "w-5 h-5 text-[var(--axis-color-red-500)] flex-shrink-0 mt-0.5",
|
|
64
|
+
fill: "none",
|
|
65
|
+
stroke: "currentColor",
|
|
66
|
+
viewBox: "0 0 24 24",
|
|
67
|
+
"aria-hidden": "true",
|
|
68
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
69
|
+
"path",
|
|
70
|
+
{
|
|
71
|
+
strokeLinecap: "round",
|
|
72
|
+
strokeLinejoin: "round",
|
|
73
|
+
strokeWidth: 2,
|
|
74
|
+
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"
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
80
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { id: titleId, className: "text-sm font-medium text-[var(--axis-text-error)]", children: message }),
|
|
81
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { id: descId, className: "mt-1 text-sm text-[var(--axis-text-secondary)]", children: description }),
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex gap-2 mt-3", children: [
|
|
83
|
+
onRetry && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
84
|
+
"button",
|
|
85
|
+
{
|
|
86
|
+
onClick: onRetry,
|
|
87
|
+
"aria-describedby": descId,
|
|
88
|
+
className: "px-3 py-1.5 text-sm font-medium rounded-md bg-[var(--axis-color-red-500)] text-white hover:bg-[var(--axis-color-red-600)] transition-colors",
|
|
89
|
+
children: "\uC7AC\uC2DC\uB3C4"
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
onDismiss && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
onClick: onDismiss,
|
|
96
|
+
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",
|
|
97
|
+
children: "\uBB34\uC2DC"
|
|
98
|
+
}
|
|
99
|
+
)
|
|
100
|
+
] })
|
|
101
|
+
] })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
107
|
+
0 && (module.exports = {
|
|
108
|
+
RecoveryBanner
|
|
109
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type StepStatus = "pending" | "running" | "complete" | "error";
|
|
4
|
+
interface Step {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
status: StepStatus;
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
interface RunProgressProps {
|
|
11
|
+
/** 전체 실행 상태 */
|
|
12
|
+
status: "idle" | "running" | "complete" | "error";
|
|
13
|
+
/** 단계 목록 */
|
|
14
|
+
steps: Step[];
|
|
15
|
+
/** 현재 진행 중인 단계 인덱스 */
|
|
16
|
+
currentStep?: number;
|
|
17
|
+
/** 취소 콜백 */
|
|
18
|
+
onCancel?: () => void;
|
|
19
|
+
/** 재시도 콜백 */
|
|
20
|
+
onRetry?: () => void;
|
|
21
|
+
/** 추가 클래스 */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 에이전트 실행 진행 상태를 표시하는 컴포넌트
|
|
26
|
+
*/
|
|
27
|
+
declare function RunProgress({ status, steps, currentStep, onCancel, onRetry, className, }: RunProgressProps): react_jsx_runtime.JSX.Element;
|
|
28
|
+
|
|
29
|
+
export { RunProgress, type RunProgressProps, type Step, type StepStatus };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type StepStatus = "pending" | "running" | "complete" | "error";
|
|
4
|
+
interface Step {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
status: StepStatus;
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
interface RunProgressProps {
|
|
11
|
+
/** 전체 실행 상태 */
|
|
12
|
+
status: "idle" | "running" | "complete" | "error";
|
|
13
|
+
/** 단계 목록 */
|
|
14
|
+
steps: Step[];
|
|
15
|
+
/** 현재 진행 중인 단계 인덱스 */
|
|
16
|
+
currentStep?: number;
|
|
17
|
+
/** 취소 콜백 */
|
|
18
|
+
onCancel?: () => void;
|
|
19
|
+
/** 재시도 콜백 */
|
|
20
|
+
onRetry?: () => void;
|
|
21
|
+
/** 추가 클래스 */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 에이전트 실행 진행 상태를 표시하는 컴포넌트
|
|
26
|
+
*/
|
|
27
|
+
declare function RunProgress({ status, steps, currentStep, onCancel, onRetry, className, }: RunProgressProps): react_jsx_runtime.JSX.Element;
|
|
28
|
+
|
|
29
|
+
export { RunProgress, type RunProgressProps, type Step, type StepStatus };
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/run-progress/index.tsx
|
|
31
|
+
var run_progress_exports = {};
|
|
32
|
+
__export(run_progress_exports, {
|
|
33
|
+
RunProgress: () => RunProgress
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(run_progress_exports);
|
|
36
|
+
var React = __toESM(require("react"));
|
|
37
|
+
var import_ui_react = require("@axis-ds/ui-react");
|
|
38
|
+
|
|
39
|
+
// src/constants/a11y-labels.ts
|
|
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 = {
|
|
53
|
+
pending: "bg-[var(--axis-color-gray-300)]",
|
|
54
|
+
running: "bg-[var(--axis-color-blue-500)] animate-pulse",
|
|
55
|
+
complete: "bg-[var(--axis-color-green-500)]",
|
|
56
|
+
error: "bg-[var(--axis-color-red-500)]"
|
|
57
|
+
};
|
|
58
|
+
var statusIcons = {
|
|
59
|
+
pending: null,
|
|
60
|
+
running: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { className: "w-3 h-3 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
62
|
+
/* @__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" })
|
|
63
|
+
] }),
|
|
64
|
+
complete: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }),
|
|
65
|
+
error: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
66
|
+
};
|
|
67
|
+
function RunProgress({
|
|
68
|
+
status,
|
|
69
|
+
steps,
|
|
70
|
+
currentStep,
|
|
71
|
+
onCancel,
|
|
72
|
+
onRetry,
|
|
73
|
+
className
|
|
74
|
+
}) {
|
|
75
|
+
const progressPercent = React.useMemo(() => {
|
|
76
|
+
const completed = steps.filter((s) => s.status === "complete").length;
|
|
77
|
+
return Math.round(completed / steps.length * 100);
|
|
78
|
+
}, [steps]);
|
|
79
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
className: (0, import_ui_react.cn)(
|
|
83
|
+
"rounded-lg border p-4",
|
|
84
|
+
"bg-[var(--axis-surface-default)] border-[var(--axis-border-default)]",
|
|
85
|
+
className
|
|
86
|
+
),
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
|
|
89
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
90
|
+
status === "running" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-2 h-2 rounded-full bg-[var(--axis-color-blue-500)] animate-pulse" }),
|
|
91
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "text-sm font-medium text-[var(--axis-text-primary)]", children: [
|
|
92
|
+
status === "idle" && "\uB300\uAE30 \uC911",
|
|
93
|
+
status === "running" && "\uC2E4\uD589 \uC911",
|
|
94
|
+
status === "complete" && "\uC644\uB8CC",
|
|
95
|
+
status === "error" && "\uC624\uB958 \uBC1C\uC0DD"
|
|
96
|
+
] })
|
|
97
|
+
] }),
|
|
98
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "text-xs text-[var(--axis-text-secondary)]", children: [
|
|
99
|
+
progressPercent,
|
|
100
|
+
"%"
|
|
101
|
+
] })
|
|
102
|
+
] }),
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
role: "progressbar",
|
|
107
|
+
"aria-valuenow": progressPercent,
|
|
108
|
+
"aria-valuemin": 0,
|
|
109
|
+
"aria-valuemax": 100,
|
|
110
|
+
"aria-label": `\uC2E4\uD589 \uC9C4\uD589\uB960 ${progressPercent}%`,
|
|
111
|
+
className: "w-full h-1.5 rounded-full bg-[var(--axis-surface-secondary)] mb-4",
|
|
112
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
113
|
+
"div",
|
|
114
|
+
{
|
|
115
|
+
className: "h-full rounded-full bg-[var(--axis-color-blue-500)] transition-all duration-300",
|
|
116
|
+
style: { width: `${progressPercent}%` }
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
),
|
|
121
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { role: "list", "aria-label": "\uC2E4\uD589 \uB2E8\uACC4", className: "space-y-2", children: steps.map((step, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
122
|
+
"div",
|
|
123
|
+
{
|
|
124
|
+
role: "listitem",
|
|
125
|
+
"aria-current": currentStep === index ? "step" : void 0,
|
|
126
|
+
className: (0, import_ui_react.cn)(
|
|
127
|
+
"flex items-center gap-3 p-2 rounded-md transition-colors",
|
|
128
|
+
currentStep === index && "bg-[var(--axis-surface-secondary)]"
|
|
129
|
+
),
|
|
130
|
+
children: [
|
|
131
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
132
|
+
"div",
|
|
133
|
+
{
|
|
134
|
+
className: (0, import_ui_react.cn)(
|
|
135
|
+
"w-5 h-5 rounded-full flex items-center justify-center text-white text-xs",
|
|
136
|
+
statusColors[step.status]
|
|
137
|
+
),
|
|
138
|
+
"aria-hidden": "true",
|
|
139
|
+
children: statusIcons[step.status] || index + 1
|
|
140
|
+
}
|
|
141
|
+
),
|
|
142
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
143
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "sr-only", children: [
|
|
144
|
+
STATUS_LABELS[step.status],
|
|
145
|
+
":"
|
|
146
|
+
] }),
|
|
147
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-[var(--axis-text-primary)] truncate", children: step.label }),
|
|
148
|
+
step.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-[var(--axis-text-secondary)] truncate", children: step.description })
|
|
149
|
+
] })
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
step.id
|
|
153
|
+
)) }),
|
|
154
|
+
(onCancel || onRetry) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex justify-end gap-2 mt-4 pt-4 border-t border-[var(--axis-border-default)]", children: [
|
|
155
|
+
status === "running" && onCancel && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
156
|
+
"button",
|
|
157
|
+
{
|
|
158
|
+
onClick: onCancel,
|
|
159
|
+
className: "px-3 py-1.5 text-sm rounded-md bg-[var(--axis-surface-secondary)] text-[var(--axis-text-primary)] hover:bg-[var(--axis-surface-tertiary)]",
|
|
160
|
+
children: "\uCDE8\uC18C"
|
|
161
|
+
}
|
|
162
|
+
),
|
|
163
|
+
status === "error" && onRetry && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
164
|
+
"button",
|
|
165
|
+
{
|
|
166
|
+
onClick: onRetry,
|
|
167
|
+
className: "px-3 py-1.5 text-sm rounded-md bg-[var(--axis-color-blue-500)] text-white hover:bg-[var(--axis-color-blue-600)]",
|
|
168
|
+
children: "\uC7AC\uC2DC\uB3C4"
|
|
169
|
+
}
|
|
170
|
+
)
|
|
171
|
+
] })
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
177
|
+
0 && (module.exports = {
|
|
178
|
+
RunProgress
|
|
179
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type SourceType = "web" | "file" | "database" | "api";
|
|
4
|
+
interface Source {
|
|
5
|
+
id: string;
|
|
6
|
+
type: SourceType;
|
|
7
|
+
title: string;
|
|
8
|
+
url?: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
snippet?: string;
|
|
11
|
+
relevance?: number;
|
|
12
|
+
}
|
|
13
|
+
interface SourcePanelProps {
|
|
14
|
+
sources: Source[];
|
|
15
|
+
expandable?: boolean;
|
|
16
|
+
defaultExpanded?: boolean;
|
|
17
|
+
maxItems?: number;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* AI 응답의 출처/근거를 표시하는 패널
|
|
22
|
+
*/
|
|
23
|
+
declare function SourcePanel({ sources, expandable, defaultExpanded, maxItems, className, }: SourcePanelProps): react_jsx_runtime.JSX.Element | null;
|
|
24
|
+
|
|
25
|
+
export { type Source, SourcePanel, type SourcePanelProps, type SourceType };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type SourceType = "web" | "file" | "database" | "api";
|
|
4
|
+
interface Source {
|
|
5
|
+
id: string;
|
|
6
|
+
type: SourceType;
|
|
7
|
+
title: string;
|
|
8
|
+
url?: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
snippet?: string;
|
|
11
|
+
relevance?: number;
|
|
12
|
+
}
|
|
13
|
+
interface SourcePanelProps {
|
|
14
|
+
sources: Source[];
|
|
15
|
+
expandable?: boolean;
|
|
16
|
+
defaultExpanded?: boolean;
|
|
17
|
+
maxItems?: number;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* AI 응답의 출처/근거를 표시하는 패널
|
|
22
|
+
*/
|
|
23
|
+
declare function SourcePanel({ sources, expandable, defaultExpanded, maxItems, className, }: SourcePanelProps): react_jsx_runtime.JSX.Element | null;
|
|
24
|
+
|
|
25
|
+
export { type Source, SourcePanel, type SourcePanelProps, type SourceType };
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/source-panel/index.tsx
|
|
31
|
+
var source_panel_exports = {};
|
|
32
|
+
__export(source_panel_exports, {
|
|
33
|
+
SourcePanel: () => SourcePanel
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(source_panel_exports);
|
|
36
|
+
var React = __toESM(require("react"));
|
|
37
|
+
var import_ui_react = require("@axis-ds/ui-react");
|
|
38
|
+
|
|
39
|
+
// src/constants/a11y-labels.ts
|
|
40
|
+
var SOURCE_TYPE_LABELS = {
|
|
41
|
+
web: "\uC6F9 \uD398\uC774\uC9C0",
|
|
42
|
+
file: "\uD30C\uC77C",
|
|
43
|
+
database: "\uB370\uC774\uD130\uBCA0\uC774\uC2A4",
|
|
44
|
+
api: "API"
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// src/source-panel/index.tsx
|
|
48
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
49
|
+
var sourceIcons = {
|
|
50
|
+
web: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" }) }),
|
|
51
|
+
file: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) }),
|
|
52
|
+
database: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4" }) }),
|
|
53
|
+
api: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) })
|
|
54
|
+
};
|
|
55
|
+
function SourcePanel({
|
|
56
|
+
sources,
|
|
57
|
+
expandable = true,
|
|
58
|
+
defaultExpanded = false,
|
|
59
|
+
maxItems = 5,
|
|
60
|
+
className
|
|
61
|
+
}) {
|
|
62
|
+
const [isExpanded, setIsExpanded] = React.useState(defaultExpanded);
|
|
63
|
+
const displayedSources = isExpanded ? sources : sources.slice(0, maxItems);
|
|
64
|
+
const hasMore = sources.length > maxItems;
|
|
65
|
+
const listId = React.useId();
|
|
66
|
+
if (sources.length === 0) return null;
|
|
67
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
className: (0, import_ui_react.cn)(
|
|
71
|
+
"rounded-lg border p-3",
|
|
72
|
+
"bg-[var(--axis-surface-secondary)] border-[var(--axis-border-default)]",
|
|
73
|
+
className
|
|
74
|
+
),
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h4", { className: "text-xs font-medium text-[var(--axis-text-secondary)] mb-2", children: [
|
|
77
|
+
"\uCD9C\uCC98 (",
|
|
78
|
+
sources.length,
|
|
79
|
+
"\uAC1C)"
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: listId, role: "list", "aria-label": "\uCD9C\uCC98 \uBAA9\uB85D", className: "space-y-2", children: displayedSources.map((source) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
82
|
+
"div",
|
|
83
|
+
{
|
|
84
|
+
role: "listitem",
|
|
85
|
+
className: "flex items-start gap-2 p-2 rounded-md bg-[var(--axis-surface-default)]",
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-[var(--axis-icon-secondary)] mt-0.5", "aria-hidden": "true", children: sourceIcons[source.type] }),
|
|
88
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
89
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "sr-only", children: [
|
|
90
|
+
SOURCE_TYPE_LABELS[source.type],
|
|
91
|
+
":"
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-[var(--axis-text-primary)] truncate", children: source.url ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
94
|
+
"a",
|
|
95
|
+
{
|
|
96
|
+
href: source.url,
|
|
97
|
+
target: "_blank",
|
|
98
|
+
rel: "noopener noreferrer",
|
|
99
|
+
className: "hover:underline",
|
|
100
|
+
"aria-label": `${source.title} (\uC0C8 \uCC3D\uC5D0\uC11C \uC5F4\uB9BC)`,
|
|
101
|
+
children: [
|
|
102
|
+
source.title,
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sr-only", children: ", \uC0C8 \uCC3D\uC5D0\uC11C \uC5F4\uB9BC" })
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
) : source.title }),
|
|
107
|
+
source.snippet && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-[var(--axis-text-secondary)] line-clamp-2 mt-0.5", children: source.snippet }),
|
|
108
|
+
source.path && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { className: "text-xs text-[var(--axis-text-tertiary)]", children: source.path })
|
|
109
|
+
] }),
|
|
110
|
+
source.relevance !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "text-xs text-[var(--axis-text-tertiary)]", children: [
|
|
111
|
+
Math.round(source.relevance * 100),
|
|
112
|
+
"%"
|
|
113
|
+
] })
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
source.id
|
|
117
|
+
)) }),
|
|
118
|
+
expandable && hasMore && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
119
|
+
"button",
|
|
120
|
+
{
|
|
121
|
+
onClick: () => setIsExpanded(!isExpanded),
|
|
122
|
+
"aria-expanded": isExpanded,
|
|
123
|
+
"aria-controls": listId,
|
|
124
|
+
className: "mt-2 text-xs text-[var(--axis-text-brand)] hover:underline",
|
|
125
|
+
children: isExpanded ? "\uC811\uAE30" : `${sources.length - maxItems}\uAC1C \uB354 \uBCF4\uAE30`
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
133
|
+
0 && (module.exports = {
|
|
134
|
+
SourcePanel
|
|
135
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type TimelineStepStatus = "pending" | "running" | "complete" | "error" | "skipped";
|
|
4
|
+
interface TimelineStep {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
status: TimelineStepStatus;
|
|
8
|
+
timestamp?: Date;
|
|
9
|
+
description?: string;
|
|
10
|
+
}
|
|
11
|
+
interface StepTimelineProps {
|
|
12
|
+
steps: TimelineStep[];
|
|
13
|
+
orientation?: "vertical" | "horizontal";
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 단계별 타임라인 컴포넌트
|
|
18
|
+
*/
|
|
19
|
+
declare function StepTimeline({ steps, orientation, className, }: StepTimelineProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
|
|
21
|
+
export { StepTimeline, type StepTimelineProps, type TimelineStep, type TimelineStepStatus };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type TimelineStepStatus = "pending" | "running" | "complete" | "error" | "skipped";
|
|
4
|
+
interface TimelineStep {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
status: TimelineStepStatus;
|
|
8
|
+
timestamp?: Date;
|
|
9
|
+
description?: string;
|
|
10
|
+
}
|
|
11
|
+
interface StepTimelineProps {
|
|
12
|
+
steps: TimelineStep[];
|
|
13
|
+
orientation?: "vertical" | "horizontal";
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 단계별 타임라인 컴포넌트
|
|
18
|
+
*/
|
|
19
|
+
declare function StepTimeline({ steps, orientation, className, }: StepTimelineProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
|
|
21
|
+
export { StepTimeline, type StepTimelineProps, type TimelineStep, type TimelineStepStatus };
|