@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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/dist/agent-avatar/index.d.mts +22 -0
  4. package/dist/agent-avatar/index.d.ts +22 -0
  5. package/dist/agent-avatar/index.js +112 -0
  6. package/dist/agent-avatar/index.mjs +7 -0
  7. package/dist/approval-card/index.d.mts +31 -0
  8. package/dist/approval-card/index.d.ts +31 -0
  9. package/dist/approval-card/index.js +133 -0
  10. package/dist/approval-card/index.mjs +7 -0
  11. package/dist/attachment-card/index.d.mts +30 -0
  12. package/dist/attachment-card/index.d.ts +30 -0
  13. package/dist/attachment-card/index.js +140 -0
  14. package/dist/attachment-card/index.mjs +7 -0
  15. package/dist/chunk-2BWCQQLU.mjs +136 -0
  16. package/dist/chunk-3TH7GFBD.mjs +83 -0
  17. package/dist/chunk-4PCJFQHQ.mjs +66 -0
  18. package/dist/chunk-657RY6MM.mjs +106 -0
  19. package/dist/chunk-7UGSLEYG.mjs +75 -0
  20. package/dist/chunk-D6GHMPBC.mjs +76 -0
  21. package/dist/chunk-DPENLPBM.mjs +105 -0
  22. package/dist/chunk-DPLGRVNQ.mjs +95 -0
  23. package/dist/chunk-EF4MECAI.mjs +81 -0
  24. package/dist/chunk-ENIWC4WX.mjs +94 -0
  25. package/dist/chunk-ETFET3LT.mjs +72 -0
  26. package/dist/chunk-FAJF5RCY.mjs +115 -0
  27. package/dist/chunk-FPOHPDZ2.mjs +109 -0
  28. package/dist/chunk-FYAMA32G.mjs +50 -0
  29. package/dist/chunk-GQYOOLDL.mjs +63 -0
  30. package/dist/chunk-H6VXOP7U.mjs +86 -0
  31. package/dist/chunk-HLW7VEFF.mjs +47 -0
  32. package/dist/chunk-HWISMHCP.mjs +33 -0
  33. package/dist/chunk-KH4OXDEV.mjs +83 -0
  34. package/dist/chunk-KJVPVBET.mjs +103 -0
  35. package/dist/chunk-LZKOCELQ.mjs +136 -0
  36. package/dist/chunk-MGQ7AEYE.mjs +94 -0
  37. package/dist/chunk-MVBXXDZB.mjs +83 -0
  38. package/dist/chunk-NRBIHROX.mjs +162 -0
  39. package/dist/chunk-O5VXD6C3.mjs +114 -0
  40. package/dist/chunk-O5WFJCWK.mjs +63 -0
  41. package/dist/chunk-OOFM7NNH.mjs +68 -0
  42. package/dist/chunk-PAKLXPHD.mjs +115 -0
  43. package/dist/chunk-PWKN5UHT.mjs +152 -0
  44. package/dist/chunk-RGBY6EEU.mjs +80 -0
  45. package/dist/chunk-RGPKTWK4.mjs +77 -0
  46. package/dist/chunk-S3HVRSN2.mjs +95 -0
  47. package/dist/chunk-SCZ4BQ2G.mjs +68 -0
  48. package/dist/chunk-TCCZL2D5.mjs +51 -0
  49. package/dist/chunk-TKUAT5WE.mjs +105 -0
  50. package/dist/chunk-UG4H7RIP.mjs +77 -0
  51. package/dist/chunk-VKLPWFAI.mjs +79 -0
  52. package/dist/code-block/index.d.mts +24 -0
  53. package/dist/code-block/index.d.ts +24 -0
  54. package/dist/code-block/index.js +114 -0
  55. package/dist/code-block/index.mjs +6 -0
  56. package/dist/context-panel/index.d.mts +32 -0
  57. package/dist/context-panel/index.d.ts +32 -0
  58. package/dist/context-panel/index.js +137 -0
  59. package/dist/context-panel/index.mjs +6 -0
  60. package/dist/diff-viewer/index.d.mts +21 -0
  61. package/dist/diff-viewer/index.d.ts +21 -0
  62. package/dist/diff-viewer/index.js +201 -0
  63. package/dist/diff-viewer/index.mjs +7 -0
  64. package/dist/feedback-buttons/index.d.mts +21 -0
  65. package/dist/feedback-buttons/index.d.ts +21 -0
  66. package/dist/feedback-buttons/index.js +111 -0
  67. package/dist/feedback-buttons/index.mjs +7 -0
  68. package/dist/index.d.mts +20 -0
  69. package/dist/index.d.ts +20 -0
  70. package/dist/index.js +1774 -0
  71. package/dist/index.mjs +75 -0
  72. package/dist/message-bubble/index.d.mts +29 -0
  73. package/dist/message-bubble/index.d.ts +29 -0
  74. package/dist/message-bubble/index.js +135 -0
  75. package/dist/message-bubble/index.mjs +7 -0
  76. package/dist/plan-card/index.d.mts +32 -0
  77. package/dist/plan-card/index.d.ts +32 -0
  78. package/dist/plan-card/index.js +202 -0
  79. package/dist/plan-card/index.mjs +7 -0
  80. package/dist/recovery-banner/index.d.mts +20 -0
  81. package/dist/recovery-banner/index.d.ts +20 -0
  82. package/dist/recovery-banner/index.js +109 -0
  83. package/dist/recovery-banner/index.mjs +6 -0
  84. package/dist/run-progress/index.d.mts +29 -0
  85. package/dist/run-progress/index.d.ts +29 -0
  86. package/dist/run-progress/index.js +179 -0
  87. package/dist/run-progress/index.mjs +7 -0
  88. package/dist/source-panel/index.d.mts +25 -0
  89. package/dist/source-panel/index.d.ts +25 -0
  90. package/dist/source-panel/index.js +135 -0
  91. package/dist/source-panel/index.mjs +7 -0
  92. package/dist/step-timeline/index.d.mts +21 -0
  93. package/dist/step-timeline/index.d.ts +21 -0
  94. package/dist/step-timeline/index.js +110 -0
  95. package/dist/step-timeline/index.mjs +7 -0
  96. package/dist/streaming-text/index.d.mts +27 -0
  97. package/dist/streaming-text/index.d.ts +27 -0
  98. package/dist/streaming-text/index.js +97 -0
  99. package/dist/streaming-text/index.mjs +6 -0
  100. package/dist/surface-renderer/index.d.mts +22 -0
  101. package/dist/surface-renderer/index.d.ts +22 -0
  102. package/dist/surface-renderer/index.js +107 -0
  103. package/dist/surface-renderer/index.mjs +6 -0
  104. package/dist/thinking-indicator/index.d.mts +16 -0
  105. package/dist/thinking-indicator/index.d.ts +16 -0
  106. package/dist/thinking-indicator/index.js +74 -0
  107. package/dist/thinking-indicator/index.mjs +6 -0
  108. package/dist/token-usage-indicator/index.d.mts +22 -0
  109. package/dist/token-usage-indicator/index.d.ts +22 -0
  110. package/dist/token-usage-indicator/index.js +110 -0
  111. package/dist/token-usage-indicator/index.mjs +6 -0
  112. package/dist/tool-call-card/index.d.mts +31 -0
  113. package/dist/tool-call-card/index.d.ts +31 -0
  114. package/dist/tool-call-card/index.js +158 -0
  115. package/dist/tool-call-card/index.mjs +7 -0
  116. package/package.json +130 -0
@@ -0,0 +1,77 @@
1
+ import {
2
+ STATUS_LABELS
3
+ } from "./chunk-HWISMHCP.mjs";
4
+
5
+ // src/step-timeline/index.tsx
6
+ import { cn } from "@axis-ds/ui-react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function StepTimeline({
9
+ steps,
10
+ orientation = "vertical",
11
+ className
12
+ }) {
13
+ const isVertical = orientation === "vertical";
14
+ return /* @__PURE__ */ jsx(
15
+ "div",
16
+ {
17
+ role: "list",
18
+ "aria-label": "\uC791\uC5C5 \uD0C0\uC784\uB77C\uC778",
19
+ className: cn(
20
+ isVertical ? "flex flex-col gap-4" : "flex items-center gap-2",
21
+ className
22
+ ),
23
+ children: steps.map((step, index) => /* @__PURE__ */ jsxs(
24
+ "div",
25
+ {
26
+ role: "listitem",
27
+ "aria-current": step.status === "running" ? "step" : void 0,
28
+ className: cn(
29
+ "relative flex",
30
+ isVertical ? "items-start gap-3" : "flex-col items-center"
31
+ ),
32
+ children: [
33
+ index < steps.length - 1 && /* @__PURE__ */ jsx(
34
+ "div",
35
+ {
36
+ "aria-hidden": "true",
37
+ className: cn(
38
+ "absolute bg-[var(--axis-border-default)]",
39
+ isVertical ? "left-2.5 top-6 w-0.5 h-full -translate-x-1/2" : "top-2.5 left-6 h-0.5 w-full"
40
+ )
41
+ }
42
+ ),
43
+ /* @__PURE__ */ jsx(
44
+ "div",
45
+ {
46
+ "aria-hidden": "true",
47
+ className: cn(
48
+ "relative z-10 w-5 h-5 rounded-full flex items-center justify-center",
49
+ step.status === "complete" && "bg-[var(--axis-color-green-500)]",
50
+ step.status === "running" && "bg-[var(--axis-color-blue-500)] animate-pulse",
51
+ step.status === "error" && "bg-[var(--axis-color-red-500)]",
52
+ step.status === "skipped" && "bg-[var(--axis-color-gray-300)]",
53
+ step.status === "pending" && "bg-[var(--axis-color-gray-300)]"
54
+ ),
55
+ children: step.status === "complete" && /* @__PURE__ */ jsx("svg", { className: "w-3 h-3 text-white", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) })
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsxs("div", { className: cn(isVertical ? "flex-1" : "text-center mt-2"), children: [
59
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
60
+ STATUS_LABELS[step.status],
61
+ ":"
62
+ ] }),
63
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[var(--axis-text-primary)]", children: step.label }),
64
+ step.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--axis-text-secondary)]", children: step.description }),
65
+ step.timestamp && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--axis-text-tertiary)]", children: step.timestamp.toLocaleTimeString() })
66
+ ] })
67
+ ]
68
+ },
69
+ step.id
70
+ ))
71
+ }
72
+ );
73
+ }
74
+
75
+ export {
76
+ StepTimeline
77
+ };
@@ -0,0 +1,79 @@
1
+ // src/source-panel/index.tsx
2
+ import * as React from "react";
3
+ import { cn } from "@axis-ds/ui-react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ var sourceIcons = {
6
+ web: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ 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" }) }),
7
+ file: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ 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" }) }),
8
+ database: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ 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" }) }),
9
+ api: /* @__PURE__ */ jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ 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" }) })
10
+ };
11
+ function SourcePanel({
12
+ sources,
13
+ expandable = true,
14
+ defaultExpanded = false,
15
+ maxItems = 5,
16
+ className
17
+ }) {
18
+ const [isExpanded, setIsExpanded] = React.useState(defaultExpanded);
19
+ const displayedSources = isExpanded ? sources : sources.slice(0, maxItems);
20
+ const hasMore = sources.length > maxItems;
21
+ if (sources.length === 0) return null;
22
+ return /* @__PURE__ */ jsxs(
23
+ "div",
24
+ {
25
+ className: cn(
26
+ "rounded-lg border p-3",
27
+ "bg-[var(--axis-surface-secondary)] border-[var(--axis-border-default)]",
28
+ className
29
+ ),
30
+ children: [
31
+ /* @__PURE__ */ jsxs("h4", { className: "text-xs font-medium text-[var(--axis-text-secondary)] mb-2", children: [
32
+ "\uCD9C\uCC98 (",
33
+ sources.length,
34
+ "\uAC1C)"
35
+ ] }),
36
+ /* @__PURE__ */ jsx("div", { className: "space-y-2", children: displayedSources.map((source) => /* @__PURE__ */ jsxs(
37
+ "div",
38
+ {
39
+ className: "flex items-start gap-2 p-2 rounded-md bg-[var(--axis-surface-default)]",
40
+ children: [
41
+ /* @__PURE__ */ jsx("span", { className: "text-[var(--axis-icon-secondary)] mt-0.5", children: sourceIcons[source.type] }),
42
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
43
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[var(--axis-text-primary)] truncate", children: source.url ? /* @__PURE__ */ jsx(
44
+ "a",
45
+ {
46
+ href: source.url,
47
+ target: "_blank",
48
+ rel: "noopener noreferrer",
49
+ className: "hover:underline",
50
+ children: source.title
51
+ }
52
+ ) : source.title }),
53
+ source.snippet && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--axis-text-secondary)] line-clamp-2 mt-0.5", children: source.snippet }),
54
+ source.path && /* @__PURE__ */ jsx("code", { className: "text-xs text-[var(--axis-text-tertiary)]", children: source.path })
55
+ ] }),
56
+ source.relevance !== void 0 && /* @__PURE__ */ jsxs("span", { className: "text-xs text-[var(--axis-text-tertiary)]", children: [
57
+ Math.round(source.relevance * 100),
58
+ "%"
59
+ ] })
60
+ ]
61
+ },
62
+ source.id
63
+ )) }),
64
+ expandable && hasMore && /* @__PURE__ */ jsx(
65
+ "button",
66
+ {
67
+ onClick: () => setIsExpanded(!isExpanded),
68
+ className: "mt-2 text-xs text-[var(--axis-text-brand)] hover:underline",
69
+ children: isExpanded ? "\uC811\uAE30" : `${sources.length - maxItems}\uAC1C \uB354 \uBCF4\uAE30`
70
+ }
71
+ )
72
+ ]
73
+ }
74
+ );
75
+ }
76
+
77
+ export {
78
+ SourcePanel
79
+ };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface CodeBlockProps {
4
+ /** 코드 문자열 */
5
+ code: string;
6
+ /** 언어 (구문 강조용 힌트) */
7
+ language?: string;
8
+ /** 파일명 */
9
+ filename?: string;
10
+ /** 줄 번호 표시 */
11
+ showLineNumbers?: boolean;
12
+ /** 복사 완료 콜백 */
13
+ onCopy?: (code: string) => void;
14
+ /** 최대 높이 (스크롤) */
15
+ maxHeight?: string;
16
+ /** 추가 클래스 */
17
+ className?: string;
18
+ }
19
+ /**
20
+ * 코드 표시 + 복사 버튼 컴포넌트
21
+ */
22
+ declare function CodeBlock({ code, language, filename, showLineNumbers, onCopy, maxHeight, className, }: CodeBlockProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { CodeBlock, type CodeBlockProps };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface CodeBlockProps {
4
+ /** 코드 문자열 */
5
+ code: string;
6
+ /** 언어 (구문 강조용 힌트) */
7
+ language?: string;
8
+ /** 파일명 */
9
+ filename?: string;
10
+ /** 줄 번호 표시 */
11
+ showLineNumbers?: boolean;
12
+ /** 복사 완료 콜백 */
13
+ onCopy?: (code: string) => void;
14
+ /** 최대 높이 (스크롤) */
15
+ maxHeight?: string;
16
+ /** 추가 클래스 */
17
+ className?: string;
18
+ }
19
+ /**
20
+ * 코드 표시 + 복사 버튼 컴포넌트
21
+ */
22
+ declare function CodeBlock({ code, language, filename, showLineNumbers, onCopy, maxHeight, className, }: CodeBlockProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { CodeBlock, type CodeBlockProps };
@@ -0,0 +1,114 @@
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/code-block/index.tsx
31
+ var code_block_exports = {};
32
+ __export(code_block_exports, {
33
+ CodeBlock: () => CodeBlock
34
+ });
35
+ module.exports = __toCommonJS(code_block_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 CodeBlock({
40
+ code,
41
+ language,
42
+ filename,
43
+ showLineNumbers = false,
44
+ onCopy,
45
+ maxHeight,
46
+ className
47
+ }) {
48
+ const [copied, setCopied] = React.useState(false);
49
+ const handleCopy = async () => {
50
+ try {
51
+ await navigator.clipboard.writeText(code);
52
+ setCopied(true);
53
+ onCopy?.(code);
54
+ setTimeout(() => setCopied(false), 2e3);
55
+ } catch {
56
+ }
57
+ };
58
+ const lines = code.split("\n");
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
60
+ "div",
61
+ {
62
+ className: (0, import_ui_react.cn)(
63
+ "rounded-lg border overflow-hidden",
64
+ "bg-[var(--axis-surface-default)] border-[var(--axis-border-default)]",
65
+ className
66
+ ),
67
+ children: [
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between px-3 py-2 border-b border-[var(--axis-border-default)] bg-[var(--axis-surface-secondary)]", children: [
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 min-w-0", children: [
70
+ filename && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { className: "text-xs font-mono text-[var(--axis-text-primary)] truncate", children: filename }),
71
+ language && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs px-1.5 py-0.5 rounded bg-[var(--axis-surface-tertiary)] text-[var(--axis-text-tertiary)]", children: language })
72
+ ] }),
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
74
+ "button",
75
+ {
76
+ onClick: handleCopy,
77
+ "aria-label": copied ? "\uBCF5\uC0AC\uB428" : "\uCF54\uB4DC \uBCF5\uC0AC",
78
+ className: "flex items-center gap-1 px-2 py-1 text-xs rounded-md text-[var(--axis-text-secondary)] hover:bg-[var(--axis-surface-tertiary)] transition-colors",
79
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 text-[var(--axis-color-green-500)]", 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" }) }),
81
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\uBCF5\uC0AC\uB428" })
82
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5", 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 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" }) }),
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\uBCF5\uC0AC" })
85
+ ] })
86
+ }
87
+ )
88
+ ] }),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
90
+ "div",
91
+ {
92
+ className: "overflow-auto",
93
+ style: maxHeight ? { maxHeight } : void 0,
94
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", { className: "p-3 text-sm leading-relaxed", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { className: "text-[var(--axis-text-primary)] font-mono", children: showLineNumbers ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("table", { className: "border-collapse w-full", role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", { children: lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("tr", { children: [
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
96
+ "td",
97
+ {
98
+ className: "select-none text-right pr-4 text-[var(--axis-text-tertiary)] w-8",
99
+ "aria-hidden": "true",
100
+ children: i + 1
101
+ }
102
+ ),
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { className: "whitespace-pre", children: line })
104
+ ] }, i)) }) }) : code }) })
105
+ }
106
+ )
107
+ ]
108
+ }
109
+ );
110
+ }
111
+ // Annotate the CommonJS export names for ESM import in node:
112
+ 0 && (module.exports = {
113
+ CodeBlock
114
+ });
@@ -0,0 +1,6 @@
1
+ import {
2
+ CodeBlock
3
+ } from "../chunk-RGBY6EEU.mjs";
4
+ export {
5
+ CodeBlock
6
+ };
@@ -0,0 +1,32 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ModelInfo {
4
+ /** 모델 이름 */
5
+ name: string;
6
+ /** 모델 제공자 */
7
+ provider?: string;
8
+ /** 모델 버전 */
9
+ version?: string;
10
+ }
11
+ interface ContextPanelProps {
12
+ /** 모델 정보 */
13
+ modelInfo?: ModelInfo;
14
+ /** 시스템 프롬프트 */
15
+ systemPrompt?: string;
16
+ /** 첨부 파일 목록 */
17
+ attachedFiles?: string[];
18
+ /** 추가 설정 키-값 */
19
+ settings?: Record<string, string>;
20
+ /** 접힘 가능 여부 */
21
+ collapsible?: boolean;
22
+ /** 기본 펼침 상태 */
23
+ defaultExpanded?: boolean;
24
+ /** 추가 클래스 */
25
+ className?: string;
26
+ }
27
+ /**
28
+ * 모델/설정 메타 정보를 표시하는 패널 컴포넌트
29
+ */
30
+ declare function ContextPanel({ modelInfo, systemPrompt, attachedFiles, settings, collapsible, defaultExpanded, className, }: ContextPanelProps): react_jsx_runtime.JSX.Element | null;
31
+
32
+ export { ContextPanel, type ContextPanelProps, type ModelInfo };
@@ -0,0 +1,32 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ModelInfo {
4
+ /** 모델 이름 */
5
+ name: string;
6
+ /** 모델 제공자 */
7
+ provider?: string;
8
+ /** 모델 버전 */
9
+ version?: string;
10
+ }
11
+ interface ContextPanelProps {
12
+ /** 모델 정보 */
13
+ modelInfo?: ModelInfo;
14
+ /** 시스템 프롬프트 */
15
+ systemPrompt?: string;
16
+ /** 첨부 파일 목록 */
17
+ attachedFiles?: string[];
18
+ /** 추가 설정 키-값 */
19
+ settings?: Record<string, string>;
20
+ /** 접힘 가능 여부 */
21
+ collapsible?: boolean;
22
+ /** 기본 펼침 상태 */
23
+ defaultExpanded?: boolean;
24
+ /** 추가 클래스 */
25
+ className?: string;
26
+ }
27
+ /**
28
+ * 모델/설정 메타 정보를 표시하는 패널 컴포넌트
29
+ */
30
+ declare function ContextPanel({ modelInfo, systemPrompt, attachedFiles, settings, collapsible, defaultExpanded, className, }: ContextPanelProps): react_jsx_runtime.JSX.Element | null;
31
+
32
+ export { ContextPanel, type ContextPanelProps, type ModelInfo };
@@ -0,0 +1,137 @@
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/context-panel/index.tsx
31
+ var context_panel_exports = {};
32
+ __export(context_panel_exports, {
33
+ ContextPanel: () => ContextPanel
34
+ });
35
+ module.exports = __toCommonJS(context_panel_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 ContextPanel({
40
+ modelInfo,
41
+ systemPrompt,
42
+ attachedFiles,
43
+ settings,
44
+ collapsible = true,
45
+ defaultExpanded = false,
46
+ className
47
+ }) {
48
+ const [isExpanded, setIsExpanded] = React.useState(defaultExpanded);
49
+ const contentId = React.useId();
50
+ const hasContent = modelInfo || systemPrompt || attachedFiles && attachedFiles.length > 0 || settings && Object.keys(settings).length > 0;
51
+ if (!hasContent) return null;
52
+ const header = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
53
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-[var(--axis-icon-secondary)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
54
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }),
55
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })
56
+ ] }),
57
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs font-medium text-[var(--axis-text-secondary)]", children: "\uCEE8\uD14D\uC2A4\uD2B8" })
58
+ ] });
59
+ const content = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { id: contentId, className: "space-y-3 mt-2", children: [
60
+ modelInfo && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h5", { className: "text-xs font-medium text-[var(--axis-text-secondary)] mb-1", children: "\uBAA8\uB378" }),
62
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { className: "text-sm font-mono text-[var(--axis-text-primary)]", children: modelInfo.name }),
64
+ modelInfo.provider && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs text-[var(--axis-text-tertiary)]", children: modelInfo.provider }),
65
+ modelInfo.version && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs px-1.5 py-0.5 rounded bg-[var(--axis-surface-tertiary)] text-[var(--axis-text-tertiary)]", children: modelInfo.version })
66
+ ] })
67
+ ] }),
68
+ systemPrompt && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h5", { className: "text-xs font-medium text-[var(--axis-text-secondary)] mb-1", children: "\uC2DC\uC2A4\uD15C \uD504\uB86C\uD504\uD2B8" }),
70
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-[var(--axis-text-primary)] p-2 rounded bg-[var(--axis-surface-secondary)] line-clamp-3 whitespace-pre-wrap", children: systemPrompt })
71
+ ] }),
72
+ attachedFiles && attachedFiles.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h5", { className: "text-xs font-medium text-[var(--axis-text-secondary)] mb-1", children: [
74
+ "\uCCA8\uBD80 \uD30C\uC77C (",
75
+ attachedFiles.length,
76
+ ")"
77
+ ] }),
78
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-1", children: attachedFiles.map((file, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-1.5 text-xs text-[var(--axis-text-primary)]", children: [
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { className: "w-3 h-3 text-[var(--axis-icon-secondary)]", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13" }) }),
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "truncate", children: file })
81
+ ] }, i)) })
82
+ ] }),
83
+ settings && Object.keys(settings).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h5", { className: "text-xs font-medium text-[var(--axis-text-secondary)] mb-1", children: "\uC124\uC815" }),
85
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-1", children: Object.entries(settings).map(([key, value]) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between text-xs", children: [
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-[var(--axis-text-secondary)]", children: key }),
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { className: "font-mono text-[var(--axis-text-primary)]", children: value })
88
+ ] }, key)) })
89
+ ] })
90
+ ] });
91
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
92
+ "div",
93
+ {
94
+ className: (0, import_ui_react.cn)(
95
+ "rounded-lg border p-3",
96
+ "bg-[var(--axis-surface-secondary)] border-[var(--axis-border-default)]",
97
+ className
98
+ ),
99
+ children: collapsible ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
100
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
101
+ "button",
102
+ {
103
+ onClick: () => setIsExpanded(!isExpanded),
104
+ "aria-expanded": isExpanded,
105
+ "aria-controls": contentId,
106
+ className: "w-full flex items-center justify-between hover:opacity-80 transition-opacity",
107
+ children: [
108
+ header,
109
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
110
+ "svg",
111
+ {
112
+ className: (0, import_ui_react.cn)(
113
+ "w-4 h-4 text-[var(--axis-text-secondary)] transition-transform",
114
+ isExpanded && "rotate-180"
115
+ ),
116
+ fill: "none",
117
+ stroke: "currentColor",
118
+ viewBox: "0 0 24 24",
119
+ "aria-hidden": "true",
120
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" })
121
+ }
122
+ )
123
+ ]
124
+ }
125
+ ),
126
+ isExpanded && content
127
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
128
+ header,
129
+ content
130
+ ] })
131
+ }
132
+ );
133
+ }
134
+ // Annotate the CommonJS export names for ESM import in node:
135
+ 0 && (module.exports = {
136
+ ContextPanel
137
+ });
@@ -0,0 +1,6 @@
1
+ import {
2
+ ContextPanel
3
+ } from "../chunk-KJVPVBET.mjs";
4
+ export {
5
+ ContextPanel
6
+ };
@@ -0,0 +1,21 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type DiffViewMode = "unified" | "split";
4
+ interface DiffViewerProps {
5
+ /** 변경 전 코드 */
6
+ before: string;
7
+ /** 변경 후 코드 */
8
+ after: string;
9
+ /** 파일명 */
10
+ filename?: string;
11
+ /** 표시 모드 */
12
+ viewMode?: DiffViewMode;
13
+ /** 추가 클래스 */
14
+ className?: string;
15
+ }
16
+ /**
17
+ * 코드 변경사항 비교 표시 컴포넌트
18
+ */
19
+ declare function DiffViewer({ before, after, filename, viewMode, className, }: DiffViewerProps): react_jsx_runtime.JSX.Element;
20
+
21
+ export { type DiffViewMode, DiffViewer, type DiffViewerProps };
@@ -0,0 +1,21 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type DiffViewMode = "unified" | "split";
4
+ interface DiffViewerProps {
5
+ /** 변경 전 코드 */
6
+ before: string;
7
+ /** 변경 후 코드 */
8
+ after: string;
9
+ /** 파일명 */
10
+ filename?: string;
11
+ /** 표시 모드 */
12
+ viewMode?: DiffViewMode;
13
+ /** 추가 클래스 */
14
+ className?: string;
15
+ }
16
+ /**
17
+ * 코드 변경사항 비교 표시 컴포넌트
18
+ */
19
+ declare function DiffViewer({ before, after, filename, viewMode, className, }: DiffViewerProps): react_jsx_runtime.JSX.Element;
20
+
21
+ export { type DiffViewMode, DiffViewer, type DiffViewerProps };