@humain/ui 2.1.62 → 2.1.65
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/dist/components/organisms/ai/AIToolCall/AIToolCall.d.ts +9 -3
- package/dist/components/organisms/ai/AIToolRun/index.d.ts +1 -1
- package/dist/components/organisms/ai/AIToolRun/validation.d.ts +24 -3
- package/dist/components/organisms/ai/_shared/format-ai-duration.d.ts +1 -0
- package/dist/components/organisms/ai/_shared/workflow-step-renderer.d.ts +1 -0
- package/dist/index.js +52 -52
- package/dist/index151.js +1 -1
- package/dist/index174.js +10 -333
- package/dist/index174.js.map +1 -1
- package/dist/index175.js +310 -137
- package/dist/index175.js.map +1 -1
- package/dist/index176.js +148 -174
- package/dist/index176.js.map +1 -1
- package/dist/index177.js +186 -78
- package/dist/index177.js.map +1 -1
- package/dist/index178.js +74 -124
- package/dist/index178.js.map +1 -1
- package/dist/index179.js +133 -1
- package/dist/index179.js.map +1 -0
- package/dist/index180.js +2 -201
- package/dist/index181.js +201 -0
- package/dist/{index180.js.map → index181.js.map} +1 -1
- package/dist/index183.js +130 -166
- package/dist/index183.js.map +1 -1
- package/dist/index184.js +195 -983
- package/dist/index184.js.map +1 -1
- package/dist/index185.js +1069 -369
- package/dist/index185.js.map +1 -1
- package/dist/index186.js +395 -197
- package/dist/index186.js.map +1 -1
- package/dist/index187.js +198 -243
- package/dist/index187.js.map +1 -1
- package/dist/index188.js +263 -3
- package/dist/index188.js.map +1 -1
- package/dist/index189.js +3 -209
- package/dist/index189.js.map +1 -1
- package/dist/index190.js +190 -777
- package/dist/index190.js.map +1 -1
- package/dist/index191.js +771 -252
- package/dist/index191.js.map +1 -1
- package/dist/index192.js +250 -65
- package/dist/index192.js.map +1 -1
- package/dist/index193.js +72 -523
- package/dist/index193.js.map +1 -1
- package/dist/index194.js +537 -144
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +139 -720
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +707 -167
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +175 -151
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +152 -487
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +472 -225
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +236 -260
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +265 -215
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +207 -307
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +302 -135
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +140 -271
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +263 -253
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +244 -137
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +100 -238
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +278 -74
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +56 -97
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +142 -47
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +38 -84
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +72 -252
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +274 -26
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +29 -94
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +98 -25
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +20 -565
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +564 -17
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +20 -23
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +20 -95
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +92 -88
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +97 -29
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +24 -470
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +446 -196
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +199 -729
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +750 -61
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +58 -181
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +175 -259
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +246 -172
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +195 -32
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +12 -40
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +23 -26
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +45 -22
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +27 -48
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +52 -26
- package/dist/index234.js.map +1 -1
- package/dist/index235.js +40 -225
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +217 -39
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +50 -0
- package/dist/index237.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/wc/AIToolCall.js +218 -0
- package/dist/wc/AIToolCall.js.map +1 -0
- package/dist/wc/hf-ai-tool-call.js +34 -219
- package/dist/wc/hf-ai-tool-call.js.map +1 -1
- package/dist/wc/hf-ai-tool-run.js +673 -576
- package/dist/wc/hf-ai-tool-run.js.map +1 -1
- package/dist/wc/workflow-step-renderer.js +94 -86
- package/dist/wc/workflow-step-renderer.js.map +1 -1
- package/dist/wc-react/AIToolCall.js +218 -0
- package/dist/wc-react/AIToolCall.js.map +1 -0
- package/dist/wc-react/hf-ai-tool-call.js +32 -217
- package/dist/wc-react/hf-ai-tool-call.js.map +1 -1
- package/dist/wc-react/hf-ai-tool-run.js +698 -601
- package/dist/wc-react/hf-ai-tool-run.js.map +1 -1
- package/dist/wc-react/workflow-step-renderer.js +76 -68
- package/dist/wc-react/workflow-step-renderer.js.map +1 -1
- package/package.json +1 -1
- package/skills/humain-ui/SKILL.md +1 -1
- package/skills/humain-ui-wc/SKILL.md +1 -1
- package/skills/humain-ui-wc.skill +0 -0
- package/skills/humain-ui.skill +0 -0
- package/dist/index182.js +0 -143
- package/dist/index182.js.map +0 -1
- package/dist/wc/wrench.js +0 -10
- package/dist/wc/wrench.js.map +0 -1
- package/dist/wc-react/wrench.js +0 -10
- package/dist/wc-react/wrench.js.map +0 -1
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { a as _ } from "./rolldown-runtime.js";
|
|
2
|
+
import { i as A, t as O } from "./vendor/react.js";
|
|
3
|
+
import { n as o } from "./utils.js";
|
|
4
|
+
import { t as C } from "./createLucideIcon.js";
|
|
5
|
+
import { t as q } from "./check.js";
|
|
6
|
+
import { t as V } from "./chevron-down.js";
|
|
7
|
+
import { t as H } from "./chevron-right.js";
|
|
8
|
+
import { t as b } from "./circle-alert.js";
|
|
9
|
+
import { t as L } from "./clock.js";
|
|
10
|
+
import { t as B } from "./react.js";
|
|
11
|
+
import { t as E } from "./AnimatePresence.js";
|
|
12
|
+
import { t as I } from "./dist.js";
|
|
13
|
+
import { t as M } from "./use-controllable-state.js";
|
|
14
|
+
import { n as v } from "./AICodeBlock.js";
|
|
15
|
+
var D = [["path", {
|
|
16
|
+
d: "m16 18 6-6-6-6",
|
|
17
|
+
key: "eg8j8"
|
|
18
|
+
}], ["path", {
|
|
19
|
+
d: "m8 6-6 6 6 6",
|
|
20
|
+
key: "ppft3o"
|
|
21
|
+
}]], j = C("code", D), R = [["path", {
|
|
22
|
+
d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",
|
|
23
|
+
key: "1ngwbx"
|
|
24
|
+
}]], F = C("wrench", R), N = /* @__PURE__ */ _(A(), 1), s = O(), J = I("overflow-hidden rounded-xl border transition-colors", {
|
|
25
|
+
variants: { status: {
|
|
26
|
+
pending: "border-border bg-muted",
|
|
27
|
+
running: "border-primary bg-primary/10",
|
|
28
|
+
success: "border-success/50 bg-success/10",
|
|
29
|
+
error: "border-destructive/50 bg-destructive/10"
|
|
30
|
+
} },
|
|
31
|
+
defaultVariants: { status: "pending" }
|
|
32
|
+
}), U = I("size-4", {
|
|
33
|
+
variants: { status: {
|
|
34
|
+
pending: "text-muted-foreground",
|
|
35
|
+
running: "text-primary animate-spin motion-reduce:animate-none",
|
|
36
|
+
success: "text-success",
|
|
37
|
+
error: "text-destructive"
|
|
38
|
+
} },
|
|
39
|
+
defaultVariants: { status: "pending" }
|
|
40
|
+
});
|
|
41
|
+
function w({ status: e, className: a }) {
|
|
42
|
+
const t = o(U({ status: e }), a);
|
|
43
|
+
switch (e) {
|
|
44
|
+
case "running":
|
|
45
|
+
return /* @__PURE__ */ (0, s.jsx)(L, { className: t });
|
|
46
|
+
case "success":
|
|
47
|
+
return /* @__PURE__ */ (0, s.jsx)(q, { className: o(t, "delight-check-bounce motion-reduce:!animate-none") });
|
|
48
|
+
case "error":
|
|
49
|
+
return /* @__PURE__ */ (0, s.jsx)(b, { className: o(t, "delight-shake motion-reduce:!animate-none") });
|
|
50
|
+
default:
|
|
51
|
+
return /* @__PURE__ */ (0, s.jsx)(F, { className: t });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
w.displayName = "StatusIcon";
|
|
55
|
+
function T({ toolName: e, status: a, isOpen: t, onToggle: n, className: c }) {
|
|
56
|
+
return /* @__PURE__ */ (0, s.jsxs)("button", {
|
|
57
|
+
type: "button",
|
|
58
|
+
onClick: n,
|
|
59
|
+
"aria-expanded": t,
|
|
60
|
+
className: o("flex items-center justify-between w-full px-4 py-3 transition-colors hover:bg-foreground/5 focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring", c),
|
|
61
|
+
children: [/* @__PURE__ */ (0, s.jsxs)("div", {
|
|
62
|
+
className: "flex items-center gap-3",
|
|
63
|
+
children: [/* @__PURE__ */ (0, s.jsx)(w, {
|
|
64
|
+
status: a,
|
|
65
|
+
"aria-hidden": "true"
|
|
66
|
+
}), /* @__PURE__ */ (0, s.jsxs)("div", {
|
|
67
|
+
className: "flex flex-col items-start",
|
|
68
|
+
children: [/* @__PURE__ */ (0, s.jsx)("span", {
|
|
69
|
+
className: "text-sm font-medium text-foreground",
|
|
70
|
+
children: e
|
|
71
|
+
}), /* @__PURE__ */ (0, s.jsx)("span", {
|
|
72
|
+
className: "text-xs text-text-quaternary",
|
|
73
|
+
children: {
|
|
74
|
+
pending: "Pending",
|
|
75
|
+
running: "Running...",
|
|
76
|
+
success: "Completed",
|
|
77
|
+
error: "Failed"
|
|
78
|
+
}[a]
|
|
79
|
+
})]
|
|
80
|
+
})]
|
|
81
|
+
}), t ? /* @__PURE__ */ (0, s.jsx)(V, {
|
|
82
|
+
className: "size-4 text-muted-foreground",
|
|
83
|
+
"aria-hidden": "true"
|
|
84
|
+
}) : /* @__PURE__ */ (0, s.jsx)(H, {
|
|
85
|
+
className: "size-4 text-muted-foreground rtl:rotate-180",
|
|
86
|
+
"aria-hidden": "true"
|
|
87
|
+
})]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
T.displayName = "AIToolCallHeader";
|
|
91
|
+
function f({ title: e, icon: a, children: t, className: n }) {
|
|
92
|
+
return /* @__PURE__ */ (0, s.jsxs)("div", {
|
|
93
|
+
className: o("space-y-2", n),
|
|
94
|
+
children: [/* @__PURE__ */ (0, s.jsxs)("div", {
|
|
95
|
+
className: "flex items-center gap-2 text-xs font-medium text-text-quaternary uppercase tracking-wide",
|
|
96
|
+
children: [a, e]
|
|
97
|
+
}), t]
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
f.displayName = "ToolCallSection";
|
|
101
|
+
function y(e) {
|
|
102
|
+
return typeof e == "string" ? e : JSON.stringify(e, null, 2);
|
|
103
|
+
}
|
|
104
|
+
function k({ toolPart: e, defaultOpen: a = !1, open: t, onOpenChange: n, className: c }) {
|
|
105
|
+
const [d, i] = M({
|
|
106
|
+
value: t,
|
|
107
|
+
defaultValue: a,
|
|
108
|
+
onChange: n
|
|
109
|
+
}), u = e.status || "pending", m = () => {
|
|
110
|
+
i(!d);
|
|
111
|
+
};
|
|
112
|
+
return /* @__PURE__ */ (0, s.jsxs)("div", {
|
|
113
|
+
"data-slot": "ai-tool-call",
|
|
114
|
+
className: o(J({ status: u }), c),
|
|
115
|
+
children: [/* @__PURE__ */ (0, s.jsx)(T, {
|
|
116
|
+
toolName: e.toolName,
|
|
117
|
+
status: u,
|
|
118
|
+
isOpen: d,
|
|
119
|
+
onToggle: m
|
|
120
|
+
}), /* @__PURE__ */ (0, s.jsx)(E, { children: d && /* @__PURE__ */ (0, s.jsx)(B.div, {
|
|
121
|
+
initial: {
|
|
122
|
+
height: 0,
|
|
123
|
+
opacity: 0
|
|
124
|
+
},
|
|
125
|
+
animate: {
|
|
126
|
+
height: "auto",
|
|
127
|
+
opacity: 1
|
|
128
|
+
},
|
|
129
|
+
exit: {
|
|
130
|
+
height: 0,
|
|
131
|
+
opacity: 0
|
|
132
|
+
},
|
|
133
|
+
transition: { duration: 0.2 },
|
|
134
|
+
className: "overflow-hidden",
|
|
135
|
+
children: /* @__PURE__ */ (0, s.jsxs)("div", {
|
|
136
|
+
className: "px-4 pb-4 space-y-4",
|
|
137
|
+
children: [
|
|
138
|
+
/* @__PURE__ */ (0, s.jsxs)("div", {
|
|
139
|
+
className: "text-xs text-muted-foreground font-mono",
|
|
140
|
+
children: ["ID: ", e.toolCallId]
|
|
141
|
+
}),
|
|
142
|
+
e.args && Object.keys(e.args).length > 0 && /* @__PURE__ */ (0, s.jsx)(f, {
|
|
143
|
+
title: "Input",
|
|
144
|
+
icon: /* @__PURE__ */ (0, s.jsx)(j, { className: "size-3" }),
|
|
145
|
+
children: /* @__PURE__ */ (0, s.jsx)(v, {
|
|
146
|
+
code: y(e.args),
|
|
147
|
+
language: "json",
|
|
148
|
+
showHeader: !1,
|
|
149
|
+
showCopyButton: !0,
|
|
150
|
+
size: "sm"
|
|
151
|
+
})
|
|
152
|
+
}),
|
|
153
|
+
e.result !== void 0 && /* @__PURE__ */ (0, s.jsx)(f, {
|
|
154
|
+
title: "Output",
|
|
155
|
+
icon: /* @__PURE__ */ (0, s.jsx)(j, { className: "size-3" }),
|
|
156
|
+
children: /* @__PURE__ */ (0, s.jsx)(v, {
|
|
157
|
+
code: y(e.result),
|
|
158
|
+
language: "json",
|
|
159
|
+
showHeader: !1,
|
|
160
|
+
showCopyButton: !0,
|
|
161
|
+
size: "sm"
|
|
162
|
+
})
|
|
163
|
+
}),
|
|
164
|
+
e.error && /* @__PURE__ */ (0, s.jsx)("div", {
|
|
165
|
+
className: "p-3 rounded-lg bg-destructive/20 border border-destructive/50",
|
|
166
|
+
children: /* @__PURE__ */ (0, s.jsxs)("div", {
|
|
167
|
+
className: "flex items-start gap-2",
|
|
168
|
+
children: [/* @__PURE__ */ (0, s.jsx)(b, { className: "size-4 text-destructive mt-0.5 shrink-0" }), /* @__PURE__ */ (0, s.jsx)("p", {
|
|
169
|
+
className: "text-sm text-destructive",
|
|
170
|
+
children: e.error
|
|
171
|
+
})]
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
]
|
|
175
|
+
})
|
|
176
|
+
}) })]
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
k.displayName = "AIToolCall";
|
|
180
|
+
function p(e, a) {
|
|
181
|
+
const t = new Set(e);
|
|
182
|
+
return a.flatMap((n) => t.has(n.toolCallId) ? [n.toolCallId] : []);
|
|
183
|
+
}
|
|
184
|
+
function W(e, a) {
|
|
185
|
+
return e.length === a.length && e.every((t, n) => t === a[n]);
|
|
186
|
+
}
|
|
187
|
+
function $({ toolCalls: e, defaultAllOpen: a = !1, defaultOpenToolCallIds: t = [], openToolCallIds: n, onOpenToolCallIdsChange: c, className: d }) {
|
|
188
|
+
const i = n !== void 0, [u, m] = N.useState(() => p(a ? e.map((r) => r.toolCallId) : t, e)), h = p(i ? n : u, e), z = new Set(h);
|
|
189
|
+
N.useLayoutEffect(() => {
|
|
190
|
+
i || m((r) => {
|
|
191
|
+
const l = p(r, e);
|
|
192
|
+
return W(r, l) ? r : l;
|
|
193
|
+
});
|
|
194
|
+
}, [i, e]);
|
|
195
|
+
const S = (r, l) => {
|
|
196
|
+
const x = new Set(h);
|
|
197
|
+
l ? x.add(r) : x.delete(r);
|
|
198
|
+
const g = p([...x], e);
|
|
199
|
+
i || m(g), c?.([...g]);
|
|
200
|
+
};
|
|
201
|
+
return /* @__PURE__ */ (0, s.jsx)("div", {
|
|
202
|
+
"data-slot": "ai-tool-call-list",
|
|
203
|
+
className: o("space-y-2", d),
|
|
204
|
+
children: e.map((r) => /* @__PURE__ */ (0, s.jsx)(k, {
|
|
205
|
+
toolPart: r,
|
|
206
|
+
open: z.has(r.toolCallId),
|
|
207
|
+
onOpenChange: (l) => S(r.toolCallId, l)
|
|
208
|
+
}, r.toolCallId))
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
$.displayName = "AIToolCallList";
|
|
212
|
+
export {
|
|
213
|
+
$ as n,
|
|
214
|
+
F as r,
|
|
215
|
+
k as t
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
//# sourceMappingURL=AIToolCall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIToolCall.js","names":["__iconNode"],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/code.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/wrench.mjs","../../src/components/organisms/ai/AIToolCall/AIToolCall.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 18 6-6-6-6\", key: \"eg8j8\" }],\n [\"path\", { d: \"m8 6-6 6 6 6\", key: \"ppft3o\" }]\n];\nconst Code = createLucideIcon(\"code\", __iconNode);\n\nexport { __iconNode, Code as default };\n//# sourceMappingURL=code.mjs.map\n","/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\",\n key: \"1ngwbx\"\n }\n ]\n];\nconst Wrench = createLucideIcon(\"wrench\", __iconNode);\n\nexport { __iconNode, Wrench as default };\n//# sourceMappingURL=wrench.mjs.map\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport {\n AlertCircle,\n Check,\n ChevronDown,\n ChevronRight,\n Clock,\n Code,\n Wrench,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport * as React from 'react';\nimport { AICodeBlock } from '@/components/organisms/ai/AICodeBlock';\nimport { useControllableState } from '@/hooks/use-controllable-state';\nimport { cn } from '@/lib/utils';\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nconst toolCallVariants = cva(\n 'overflow-hidden rounded-xl border transition-colors',\n {\n variants: {\n status: {\n pending: 'border-border bg-muted',\n running: 'border-primary bg-primary/10',\n success: 'border-success/50 bg-success/10',\n error: 'border-destructive/50 bg-destructive/10',\n },\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nconst statusIconVariants = cva('size-4', {\n variants: {\n status: {\n pending: 'text-muted-foreground',\n running: 'text-primary animate-spin motion-reduce:animate-none',\n success: 'text-success',\n error: 'text-destructive',\n },\n },\n defaultVariants: {\n status: 'pending',\n },\n});\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';\n\nexport interface ToolCallPart {\n /** Unique tool call ID */\n toolCallId: string;\n /** Tool name */\n toolName: string;\n /** Tool input/arguments */\n args?: Record<string, unknown>;\n /** Tool output/result */\n result?: unknown;\n /** Tool status */\n status?: ToolCallStatus;\n /** Error message if status is error */\n error?: string;\n}\n\n// =============================================================================\n// Status Icon Component\n// =============================================================================\n\ninterface StatusIconProps {\n status: ToolCallStatus;\n className?: string;\n}\n\nfunction StatusIcon({ status, className }: StatusIconProps) {\n const iconClass = cn(statusIconVariants({ status }), className);\n\n switch (status) {\n case 'running':\n return <Clock className={iconClass} />;\n case 'success':\n return (\n <Check\n className={cn(\n iconClass,\n 'delight-check-bounce motion-reduce:!animate-none',\n )}\n />\n );\n case 'error':\n return (\n <AlertCircle\n className={cn(iconClass, 'delight-shake motion-reduce:!animate-none')}\n />\n );\n default:\n return <Wrench className={iconClass} />;\n }\n}\n\nStatusIcon.displayName = 'StatusIcon';\n\n// =============================================================================\n// Tool Call Header\n// =============================================================================\n\ninterface AIToolCallHeaderProps {\n toolName: string;\n status: ToolCallStatus;\n isOpen: boolean;\n onToggle: () => void;\n className?: string;\n}\n\nfunction AIToolCallHeader({\n toolName,\n status,\n isOpen,\n onToggle,\n className,\n}: AIToolCallHeaderProps) {\n const statusLabel = {\n pending: 'Pending',\n running: 'Running...',\n success: 'Completed',\n error: 'Failed',\n };\n\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-expanded={isOpen}\n className={cn(\n 'flex items-center justify-between w-full px-4 py-3 transition-colors hover:bg-foreground/5 focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring',\n className,\n )}\n >\n <div className=\"flex items-center gap-3\">\n <StatusIcon status={status} aria-hidden=\"true\" />\n <div className=\"flex flex-col items-start\">\n <span className=\"text-sm font-medium text-foreground\">\n {toolName}\n </span>\n <span className=\"text-xs text-text-quaternary\">\n {statusLabel[status]}\n </span>\n </div>\n </div>\n {isOpen ? (\n <ChevronDown\n className=\"size-4 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n ) : (\n <ChevronRight\n className=\"size-4 text-muted-foreground rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n}\n\nAIToolCallHeader.displayName = 'AIToolCallHeader';\n\n// =============================================================================\n// Tool Call Section\n// =============================================================================\n\ninterface ToolCallSectionProps {\n title: string;\n icon: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\nfunction ToolCallSection({\n title,\n icon,\n children,\n className,\n}: ToolCallSectionProps) {\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex items-center gap-2 text-xs font-medium text-text-quaternary uppercase tracking-wide\">\n {icon}\n {title}\n </div>\n {children}\n </div>\n );\n}\n\nToolCallSection.displayName = 'ToolCallSection';\n\n// =============================================================================\n// Main AIToolCall Component\n// =============================================================================\n\nexport interface AIToolCallProps extends VariantProps<typeof toolCallVariants> {\n /** Tool call data */\n toolPart: ToolCallPart;\n /** Whether to expand by default */\n defaultOpen?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Additional class name */\n className?: string;\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === 'string') return value;\n return JSON.stringify(value, null, 2);\n}\n\nfunction AIToolCall({\n toolPart,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n}: AIToolCallProps) {\n const [isOpen, setIsOpen] = useControllableState({\n value: controlledOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const status = toolPart.status || 'pending';\n\n const handleToggle = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n <div\n data-slot=\"ai-tool-call\"\n className={cn(toolCallVariants({ status }), className)}\n >\n <AIToolCallHeader\n toolName={toolPart.toolName}\n status={status}\n isOpen={isOpen}\n onToggle={handleToggle}\n />\n\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"overflow-hidden\"\n >\n <div className=\"px-4 pb-4 space-y-4\">\n {/* Tool Call ID */}\n <div className=\"text-xs text-muted-foreground font-mono\">\n ID: {toolPart.toolCallId}\n </div>\n\n {/* Input Section */}\n {toolPart.args && Object.keys(toolPart.args).length > 0 && (\n <ToolCallSection\n title=\"Input\"\n icon={<Code className=\"size-3\" />}\n >\n <AICodeBlock\n code={formatValue(toolPart.args)}\n language=\"json\"\n showHeader={false}\n showCopyButton={true}\n size=\"sm\"\n />\n </ToolCallSection>\n )}\n\n {/* Output Section */}\n {toolPart.result !== undefined && (\n <ToolCallSection\n title=\"Output\"\n icon={<Code className=\"size-3\" />}\n >\n <AICodeBlock\n code={formatValue(toolPart.result)}\n language=\"json\"\n showHeader={false}\n showCopyButton={true}\n size=\"sm\"\n />\n </ToolCallSection>\n )}\n\n {/* Error Section */}\n {toolPart.error && (\n <div className=\"p-3 rounded-lg bg-destructive/20 border border-destructive/50\">\n <div className=\"flex items-start gap-2\">\n <AlertCircle className=\"size-4 text-destructive mt-0.5 shrink-0\" />\n <p className=\"text-sm text-destructive\">{toolPart.error}</p>\n </div>\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nAIToolCall.displayName = 'AIToolCall';\n\n// =============================================================================\n// Tool Call List Component\n// =============================================================================\n\nexport interface AIToolCallListProps {\n /** Array of tool calls */\n toolCalls: readonly ToolCallPart[];\n /** Whether to expand all by default */\n defaultAllOpen?: boolean;\n /** Tool-call IDs to expand initially in uncontrolled mode */\n defaultOpenToolCallIds?: readonly string[];\n /** Controlled expanded tool-call IDs */\n openToolCallIds?: readonly string[];\n /** Called with expanded IDs in current tool-call order */\n onOpenToolCallIdsChange?: (ids: readonly string[]) => void;\n /** Additional class name */\n className?: string;\n}\n\nfunction normalizeOpenToolCallIds(\n ids: readonly string[],\n toolCalls: readonly ToolCallPart[],\n): string[] {\n const requested = new Set(ids);\n return toolCalls.flatMap((toolCall) =>\n requested.has(toolCall.toolCallId) ? [toolCall.toolCallId] : [],\n );\n}\n\nfunction areToolCallIdsEqual(\n left: readonly string[],\n right: readonly string[],\n): boolean {\n return (\n left.length === right.length &&\n left.every((id, index) => id === right[index])\n );\n}\n\nfunction AIToolCallList({\n toolCalls,\n defaultAllOpen = false,\n defaultOpenToolCallIds = [],\n openToolCallIds: controlledOpenToolCallIds,\n onOpenToolCallIdsChange,\n className,\n}: AIToolCallListProps) {\n const isControlled = controlledOpenToolCallIds !== undefined;\n const [uncontrolledOpenToolCallIds, setUncontrolledOpenToolCallIds] =\n React.useState<readonly string[]>(() =>\n normalizeOpenToolCallIds(\n defaultAllOpen\n ? toolCalls.map((toolCall) => toolCall.toolCallId)\n : defaultOpenToolCallIds,\n toolCalls,\n ),\n );\n const rawOpenToolCallIds = isControlled\n ? controlledOpenToolCallIds\n : uncontrolledOpenToolCallIds;\n const visibleOpenToolCallIds = normalizeOpenToolCallIds(\n rawOpenToolCallIds,\n toolCalls,\n );\n const openSet = new Set(visibleOpenToolCallIds);\n\n React.useLayoutEffect(() => {\n if (isControlled) return;\n setUncontrolledOpenToolCallIds((current) => {\n const normalized = normalizeOpenToolCallIds(current, toolCalls);\n return areToolCallIdsEqual(current, normalized) ? current : normalized;\n });\n }, [isControlled, toolCalls]);\n\n const setToolCallOpen = (toolCallId: string, open: boolean) => {\n const next = new Set(visibleOpenToolCallIds);\n if (open) next.add(toolCallId);\n else next.delete(toolCallId);\n const normalized = normalizeOpenToolCallIds([...next], toolCalls);\n if (!isControlled) {\n setUncontrolledOpenToolCallIds(normalized);\n }\n onOpenToolCallIdsChange?.([...normalized]);\n };\n\n return (\n <div data-slot=\"ai-tool-call-list\" className={cn('space-y-2', className)}>\n {toolCalls.map((toolCall) => (\n <AIToolCall\n key={toolCall.toolCallId}\n toolPart={toolCall}\n open={openSet.has(toolCall.toolCallId)}\n onOpenChange={(open) => setToolCallOpen(toolCall.toolCallId, open)}\n />\n ))}\n </div>\n );\n}\n\nAIToolCallList.displayName = 'AIToolCallList';\n\nexport {\n AIToolCall,\n AIToolCallHeader,\n AIToolCallList,\n StatusIcon,\n statusIconVariants,\n ToolCallSection,\n toolCallVariants,\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
@@ -1,243 +1,58 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { i as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { t as E } from "./check.js";
|
|
7
|
-
import { t as L } from "./chevron-down.js";
|
|
8
|
-
import { t as V } from "./chevron-right.js";
|
|
9
|
-
import { t as j } from "./circle-alert.js";
|
|
10
|
-
import { t as R } from "./clock.js";
|
|
11
|
-
import { t as q } from "./wrench.js";
|
|
12
|
-
import { t as B } from "./react.js";
|
|
13
|
-
import { t as D } from "./AnimatePresence.js";
|
|
14
|
-
import { t as v } from "./dist.js";
|
|
15
|
-
import { t as H } from "./use-controllable-state.js";
|
|
16
|
-
import { n as f } from "./AICodeBlock.js";
|
|
17
|
-
var W = [["path", {
|
|
18
|
-
d: "m16 18 6-6-6-6",
|
|
19
|
-
key: "eg8j8"
|
|
20
|
-
}], ["path", {
|
|
21
|
-
d: "m8 6-6 6 6 6",
|
|
22
|
-
key: "ppft3o"
|
|
23
|
-
}]], x = z("code", W), t = T(), F = v("overflow-hidden rounded-xl border transition-colors", {
|
|
24
|
-
variants: { status: {
|
|
25
|
-
pending: "border-border bg-muted",
|
|
26
|
-
running: "border-primary bg-primary/10",
|
|
27
|
-
success: "border-success/50 bg-success/10",
|
|
28
|
-
error: "border-destructive/50 bg-destructive/10"
|
|
29
|
-
} },
|
|
30
|
-
defaultVariants: { status: "pending" }
|
|
31
|
-
}), P = v("size-4", {
|
|
32
|
-
variants: { status: {
|
|
33
|
-
pending: "text-muted-foreground",
|
|
34
|
-
running: "text-primary animate-spin motion-reduce:animate-none",
|
|
35
|
-
success: "text-success",
|
|
36
|
-
error: "text-destructive"
|
|
37
|
-
} },
|
|
38
|
-
defaultVariants: { status: "pending" }
|
|
39
|
-
});
|
|
40
|
-
function y({ status: e, className: r }) {
|
|
41
|
-
const s = i(P({ status: e }), r);
|
|
42
|
-
switch (e) {
|
|
43
|
-
case "running":
|
|
44
|
-
return /* @__PURE__ */ (0, t.jsx)(R, { className: s });
|
|
45
|
-
case "success":
|
|
46
|
-
return /* @__PURE__ */ (0, t.jsx)(E, { className: i(s, "delight-check-bounce motion-reduce:!animate-none") });
|
|
47
|
-
case "error":
|
|
48
|
-
return /* @__PURE__ */ (0, t.jsx)(j, { className: i(s, "delight-shake motion-reduce:!animate-none") });
|
|
49
|
-
default:
|
|
50
|
-
return /* @__PURE__ */ (0, t.jsx)(q, { className: s });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
y.displayName = "StatusIcon";
|
|
54
|
-
function C({ toolName: e, status: r, isOpen: s, onToggle: a, className: n }) {
|
|
55
|
-
return /* @__PURE__ */ (0, t.jsxs)("button", {
|
|
56
|
-
type: "button",
|
|
57
|
-
onClick: a,
|
|
58
|
-
"aria-expanded": s,
|
|
59
|
-
className: i("flex items-center justify-between w-full px-4 py-3 transition-colors hover:bg-foreground/5 focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring", n),
|
|
60
|
-
children: [/* @__PURE__ */ (0, t.jsxs)("div", {
|
|
61
|
-
className: "flex items-center gap-3",
|
|
62
|
-
children: [/* @__PURE__ */ (0, t.jsx)(y, {
|
|
63
|
-
status: r,
|
|
64
|
-
"aria-hidden": "true"
|
|
65
|
-
}), /* @__PURE__ */ (0, t.jsxs)("div", {
|
|
66
|
-
className: "flex flex-col items-start",
|
|
67
|
-
children: [/* @__PURE__ */ (0, t.jsx)("span", {
|
|
68
|
-
className: "text-sm font-medium text-foreground",
|
|
69
|
-
children: e
|
|
70
|
-
}), /* @__PURE__ */ (0, t.jsx)("span", {
|
|
71
|
-
className: "text-xs text-text-quaternary",
|
|
72
|
-
children: {
|
|
73
|
-
pending: "Pending",
|
|
74
|
-
running: "Running...",
|
|
75
|
-
success: "Completed",
|
|
76
|
-
error: "Failed"
|
|
77
|
-
}[r]
|
|
78
|
-
})]
|
|
79
|
-
})]
|
|
80
|
-
}), s ? /* @__PURE__ */ (0, t.jsx)(L, {
|
|
81
|
-
className: "size-4 text-muted-foreground",
|
|
82
|
-
"aria-hidden": "true"
|
|
83
|
-
}) : /* @__PURE__ */ (0, t.jsx)(V, {
|
|
84
|
-
className: "size-4 text-muted-foreground rtl:rotate-180",
|
|
85
|
-
"aria-hidden": "true"
|
|
86
|
-
})]
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
C.displayName = "AIToolCallHeader";
|
|
90
|
-
function d({ title: e, icon: r, children: s, className: a }) {
|
|
91
|
-
return /* @__PURE__ */ (0, t.jsxs)("div", {
|
|
92
|
-
className: i("space-y-2", a),
|
|
93
|
-
children: [/* @__PURE__ */ (0, t.jsxs)("div", {
|
|
94
|
-
className: "flex items-center gap-2 text-xs font-medium text-text-quaternary uppercase tracking-wide",
|
|
95
|
-
children: [r, e]
|
|
96
|
-
}), s]
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
d.displayName = "ToolCallSection";
|
|
100
|
-
function g(e) {
|
|
101
|
-
return typeof e == "string" ? e : JSON.stringify(e, null, 2);
|
|
102
|
-
}
|
|
103
|
-
function m({ toolPart: e, defaultOpen: r = !1, open: s, onOpenChange: a, className: n }) {
|
|
104
|
-
const [o, l] = H({
|
|
105
|
-
value: s,
|
|
106
|
-
defaultValue: r,
|
|
107
|
-
onChange: a
|
|
108
|
-
}), p = e.status || "pending", b = () => {
|
|
109
|
-
l(!o);
|
|
110
|
-
};
|
|
111
|
-
return /* @__PURE__ */ (0, t.jsxs)("div", {
|
|
112
|
-
"data-slot": "ai-tool-call",
|
|
113
|
-
className: i(F({ status: p }), n),
|
|
114
|
-
children: [/* @__PURE__ */ (0, t.jsx)(C, {
|
|
115
|
-
toolName: e.toolName,
|
|
116
|
-
status: p,
|
|
117
|
-
isOpen: o,
|
|
118
|
-
onToggle: b
|
|
119
|
-
}), /* @__PURE__ */ (0, t.jsx)(D, { children: o && /* @__PURE__ */ (0, t.jsx)(B.div, {
|
|
120
|
-
initial: {
|
|
121
|
-
height: 0,
|
|
122
|
-
opacity: 0
|
|
123
|
-
},
|
|
124
|
-
animate: {
|
|
125
|
-
height: "auto",
|
|
126
|
-
opacity: 1
|
|
127
|
-
},
|
|
128
|
-
exit: {
|
|
129
|
-
height: 0,
|
|
130
|
-
opacity: 0
|
|
131
|
-
},
|
|
132
|
-
transition: { duration: 0.2 },
|
|
133
|
-
className: "overflow-hidden",
|
|
134
|
-
children: /* @__PURE__ */ (0, t.jsxs)("div", {
|
|
135
|
-
className: "px-4 pb-4 space-y-4",
|
|
136
|
-
children: [
|
|
137
|
-
/* @__PURE__ */ (0, t.jsxs)("div", {
|
|
138
|
-
className: "text-xs text-muted-foreground font-mono",
|
|
139
|
-
children: ["ID: ", e.toolCallId]
|
|
140
|
-
}),
|
|
141
|
-
e.args && Object.keys(e.args).length > 0 && /* @__PURE__ */ (0, t.jsx)(d, {
|
|
142
|
-
title: "Input",
|
|
143
|
-
icon: /* @__PURE__ */ (0, t.jsx)(x, { className: "size-3" }),
|
|
144
|
-
children: /* @__PURE__ */ (0, t.jsx)(f, {
|
|
145
|
-
code: g(e.args),
|
|
146
|
-
language: "json",
|
|
147
|
-
showHeader: !1,
|
|
148
|
-
showCopyButton: !0,
|
|
149
|
-
size: "sm"
|
|
150
|
-
})
|
|
151
|
-
}),
|
|
152
|
-
e.result !== void 0 && /* @__PURE__ */ (0, t.jsx)(d, {
|
|
153
|
-
title: "Output",
|
|
154
|
-
icon: /* @__PURE__ */ (0, t.jsx)(x, { className: "size-3" }),
|
|
155
|
-
children: /* @__PURE__ */ (0, t.jsx)(f, {
|
|
156
|
-
code: g(e.result),
|
|
157
|
-
language: "json",
|
|
158
|
-
showHeader: !1,
|
|
159
|
-
showCopyButton: !0,
|
|
160
|
-
size: "sm"
|
|
161
|
-
})
|
|
162
|
-
}),
|
|
163
|
-
e.error && /* @__PURE__ */ (0, t.jsx)("div", {
|
|
164
|
-
className: "p-3 rounded-lg bg-destructive/20 border border-destructive/50",
|
|
165
|
-
children: /* @__PURE__ */ (0, t.jsxs)("div", {
|
|
166
|
-
className: "flex items-start gap-2",
|
|
167
|
-
children: [/* @__PURE__ */ (0, t.jsx)(j, { className: "size-4 text-destructive mt-0.5 shrink-0" }), /* @__PURE__ */ (0, t.jsx)("p", {
|
|
168
|
-
className: "text-sm text-destructive",
|
|
169
|
-
children: e.error
|
|
170
|
-
})]
|
|
171
|
-
})
|
|
172
|
-
})
|
|
173
|
-
]
|
|
174
|
-
})
|
|
175
|
-
}) })]
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
m.displayName = "AIToolCall";
|
|
179
|
-
function J({ toolCalls: e, defaultAllOpen: r = !1, className: s }) {
|
|
180
|
-
return /* @__PURE__ */ (0, t.jsx)("div", {
|
|
181
|
-
"data-slot": "ai-tool-call-list",
|
|
182
|
-
className: i("space-y-2", s),
|
|
183
|
-
children: e.map((a) => /* @__PURE__ */ (0, t.jsx)(m, {
|
|
184
|
-
toolPart: a,
|
|
185
|
-
defaultOpen: r
|
|
186
|
-
}, a.toolCallId))
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
J.displayName = "AIToolCallList";
|
|
190
|
-
var c = /* @__PURE__ */ I(A(), 1), u = {
|
|
1
|
+
import { a as f } from "./rolldown-runtime.js";
|
|
2
|
+
import { i as c } from "./vendor/react.js";
|
|
3
|
+
import { a as d, i as m, o as g, t as C, u as A } from "./_shared.js";
|
|
4
|
+
import { t as _ } from "./AIToolCall.js";
|
|
5
|
+
var s = /* @__PURE__ */ f(c(), 1), i = {
|
|
191
6
|
toolPart: "json",
|
|
192
7
|
defaultOpen: "boolean",
|
|
193
8
|
open: "boolean"
|
|
194
|
-
},
|
|
9
|
+
}, b = {
|
|
195
10
|
error: !0,
|
|
196
11
|
pending: !0,
|
|
197
12
|
running: !0,
|
|
198
13
|
success: !0
|
|
199
14
|
};
|
|
200
|
-
function
|
|
201
|
-
return typeof
|
|
15
|
+
function l(r) {
|
|
16
|
+
return typeof r == "object" && r !== null && !Array.isArray(r);
|
|
202
17
|
}
|
|
203
|
-
function
|
|
204
|
-
return typeof
|
|
18
|
+
function h(r) {
|
|
19
|
+
return typeof r == "string" && r in b;
|
|
205
20
|
}
|
|
206
|
-
function
|
|
207
|
-
if (!
|
|
208
|
-
const { args:
|
|
209
|
-
if (!(typeof
|
|
21
|
+
function y(r) {
|
|
22
|
+
if (!l(r)) return;
|
|
23
|
+
const { args: t, error: e, result: u, status: o, toolCallId: n, toolName: a } = r;
|
|
24
|
+
if (!(typeof n != "string" || n.length === 0) && !(typeof a != "string" || a.length === 0) && !(o !== void 0 && !h(o)) && !(t !== void 0 && !l(t)))
|
|
210
25
|
return {
|
|
211
|
-
args:
|
|
212
|
-
error: typeof
|
|
213
|
-
result:
|
|
214
|
-
status:
|
|
215
|
-
toolCallId:
|
|
216
|
-
toolName:
|
|
26
|
+
args: t,
|
|
27
|
+
error: typeof e == "string" ? e : void 0,
|
|
28
|
+
result: u,
|
|
29
|
+
status: o,
|
|
30
|
+
toolCallId: n,
|
|
31
|
+
toolName: a
|
|
217
32
|
};
|
|
218
33
|
}
|
|
219
|
-
var
|
|
34
|
+
var p = class extends C {
|
|
220
35
|
get propDefs() {
|
|
221
|
-
return
|
|
36
|
+
return i;
|
|
222
37
|
}
|
|
223
38
|
static get observedAttributes() {
|
|
224
|
-
return Object.keys(
|
|
39
|
+
return Object.keys(i).map(m);
|
|
225
40
|
}
|
|
226
41
|
_renderReact() {
|
|
227
|
-
const
|
|
228
|
-
return
|
|
229
|
-
toolPart:
|
|
230
|
-
defaultOpen:
|
|
231
|
-
open:
|
|
232
|
-
onOpenChange: (
|
|
233
|
-
}) :
|
|
42
|
+
const r = this._readAllProps(), t = y(r.toolPart);
|
|
43
|
+
return t ? s.createElement(_, {
|
|
44
|
+
toolPart: t,
|
|
45
|
+
defaultOpen: r.defaultOpen ?? !1,
|
|
46
|
+
open: r.open,
|
|
47
|
+
onOpenChange: (e) => d(this, "open-change", e)
|
|
48
|
+
}) : s.createElement(s.Fragment);
|
|
234
49
|
}
|
|
235
50
|
};
|
|
236
|
-
|
|
237
|
-
|
|
51
|
+
g(p, i);
|
|
52
|
+
A("hf-ai-tool-call", p);
|
|
238
53
|
export {
|
|
239
|
-
|
|
240
|
-
|
|
54
|
+
p as AIToolCallWC,
|
|
55
|
+
p as default
|
|
241
56
|
};
|
|
242
57
|
|
|
243
58
|
//# sourceMappingURL=hf-ai-tool-call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hf-ai-tool-call.js","names":[],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/code.mjs","../../src/components/organisms/ai/AIToolCall/AIToolCall.tsx","../../src/wc/hf-ai-tool-call.ts"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 18 6-6-6-6\", key: \"eg8j8\" }],\n [\"path\", { d: \"m8 6-6 6 6 6\", key: \"ppft3o\" }]\n];\nconst Code = createLucideIcon(\"code\", __iconNode);\n\nexport { __iconNode, Code as default };\n//# sourceMappingURL=code.mjs.map\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport {\n AlertCircle,\n Check,\n ChevronDown,\n ChevronRight,\n Clock,\n Code,\n Wrench,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport type * as React from 'react';\nimport { AICodeBlock } from '@/components/organisms/ai/AICodeBlock';\nimport { useControllableState } from '@/hooks/use-controllable-state';\nimport { cn } from '@/lib/utils';\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nconst toolCallVariants = cva(\n 'overflow-hidden rounded-xl border transition-colors',\n {\n variants: {\n status: {\n pending: 'border-border bg-muted',\n running: 'border-primary bg-primary/10',\n success: 'border-success/50 bg-success/10',\n error: 'border-destructive/50 bg-destructive/10',\n },\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nconst statusIconVariants = cva('size-4', {\n variants: {\n status: {\n pending: 'text-muted-foreground',\n running: 'text-primary animate-spin motion-reduce:animate-none',\n success: 'text-success',\n error: 'text-destructive',\n },\n },\n defaultVariants: {\n status: 'pending',\n },\n});\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';\n\nexport interface ToolCallPart {\n /** Unique tool call ID */\n toolCallId: string;\n /** Tool name */\n toolName: string;\n /** Tool input/arguments */\n args?: Record<string, unknown>;\n /** Tool output/result */\n result?: unknown;\n /** Tool status */\n status?: ToolCallStatus;\n /** Error message if status is error */\n error?: string;\n}\n\n// =============================================================================\n// Status Icon Component\n// =============================================================================\n\ninterface StatusIconProps {\n status: ToolCallStatus;\n className?: string;\n}\n\nfunction StatusIcon({ status, className }: StatusIconProps) {\n const iconClass = cn(statusIconVariants({ status }), className);\n\n switch (status) {\n case 'running':\n return <Clock className={iconClass} />;\n case 'success':\n return (\n <Check\n className={cn(\n iconClass,\n 'delight-check-bounce motion-reduce:!animate-none',\n )}\n />\n );\n case 'error':\n return (\n <AlertCircle\n className={cn(iconClass, 'delight-shake motion-reduce:!animate-none')}\n />\n );\n default:\n return <Wrench className={iconClass} />;\n }\n}\n\nStatusIcon.displayName = 'StatusIcon';\n\n// =============================================================================\n// Tool Call Header\n// =============================================================================\n\ninterface AIToolCallHeaderProps {\n toolName: string;\n status: ToolCallStatus;\n isOpen: boolean;\n onToggle: () => void;\n className?: string;\n}\n\nfunction AIToolCallHeader({\n toolName,\n status,\n isOpen,\n onToggle,\n className,\n}: AIToolCallHeaderProps) {\n const statusLabel = {\n pending: 'Pending',\n running: 'Running...',\n success: 'Completed',\n error: 'Failed',\n };\n\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-expanded={isOpen}\n className={cn(\n 'flex items-center justify-between w-full px-4 py-3 transition-colors hover:bg-foreground/5 focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring',\n className,\n )}\n >\n <div className=\"flex items-center gap-3\">\n <StatusIcon status={status} aria-hidden=\"true\" />\n <div className=\"flex flex-col items-start\">\n <span className=\"text-sm font-medium text-foreground\">\n {toolName}\n </span>\n <span className=\"text-xs text-text-quaternary\">\n {statusLabel[status]}\n </span>\n </div>\n </div>\n {isOpen ? (\n <ChevronDown\n className=\"size-4 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n ) : (\n <ChevronRight\n className=\"size-4 text-muted-foreground rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n}\n\nAIToolCallHeader.displayName = 'AIToolCallHeader';\n\n// =============================================================================\n// Tool Call Section\n// =============================================================================\n\ninterface ToolCallSectionProps {\n title: string;\n icon: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\nfunction ToolCallSection({\n title,\n icon,\n children,\n className,\n}: ToolCallSectionProps) {\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex items-center gap-2 text-xs font-medium text-text-quaternary uppercase tracking-wide\">\n {icon}\n {title}\n </div>\n {children}\n </div>\n );\n}\n\nToolCallSection.displayName = 'ToolCallSection';\n\n// =============================================================================\n// Main AIToolCall Component\n// =============================================================================\n\nexport interface AIToolCallProps extends VariantProps<typeof toolCallVariants> {\n /** Tool call data */\n toolPart: ToolCallPart;\n /** Whether to expand by default */\n defaultOpen?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Additional class name */\n className?: string;\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === 'string') return value;\n return JSON.stringify(value, null, 2);\n}\n\nfunction AIToolCall({\n toolPart,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n}: AIToolCallProps) {\n const [isOpen, setIsOpen] = useControllableState({\n value: controlledOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const status = toolPart.status || 'pending';\n\n const handleToggle = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n <div\n data-slot=\"ai-tool-call\"\n className={cn(toolCallVariants({ status }), className)}\n >\n <AIToolCallHeader\n toolName={toolPart.toolName}\n status={status}\n isOpen={isOpen}\n onToggle={handleToggle}\n />\n\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"overflow-hidden\"\n >\n <div className=\"px-4 pb-4 space-y-4\">\n {/* Tool Call ID */}\n <div className=\"text-xs text-muted-foreground font-mono\">\n ID: {toolPart.toolCallId}\n </div>\n\n {/* Input Section */}\n {toolPart.args && Object.keys(toolPart.args).length > 0 && (\n <ToolCallSection\n title=\"Input\"\n icon={<Code className=\"size-3\" />}\n >\n <AICodeBlock\n code={formatValue(toolPart.args)}\n language=\"json\"\n showHeader={false}\n showCopyButton={true}\n size=\"sm\"\n />\n </ToolCallSection>\n )}\n\n {/* Output Section */}\n {toolPart.result !== undefined && (\n <ToolCallSection\n title=\"Output\"\n icon={<Code className=\"size-3\" />}\n >\n <AICodeBlock\n code={formatValue(toolPart.result)}\n language=\"json\"\n showHeader={false}\n showCopyButton={true}\n size=\"sm\"\n />\n </ToolCallSection>\n )}\n\n {/* Error Section */}\n {toolPart.error && (\n <div className=\"p-3 rounded-lg bg-destructive/20 border border-destructive/50\">\n <div className=\"flex items-start gap-2\">\n <AlertCircle className=\"size-4 text-destructive mt-0.5 shrink-0\" />\n <p className=\"text-sm text-destructive\">{toolPart.error}</p>\n </div>\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nAIToolCall.displayName = 'AIToolCall';\n\n// =============================================================================\n// Tool Call List Component\n// =============================================================================\n\nexport interface AIToolCallListProps {\n /** Array of tool calls */\n toolCalls: ToolCallPart[];\n /** Whether to expand all by default */\n defaultAllOpen?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nfunction AIToolCallList({\n toolCalls,\n defaultAllOpen = false,\n className,\n}: AIToolCallListProps) {\n return (\n <div data-slot=\"ai-tool-call-list\" className={cn('space-y-2', className)}>\n {toolCalls.map((toolCall) => (\n <AIToolCall\n key={toolCall.toolCallId}\n toolPart={toolCall}\n defaultOpen={defaultAllOpen}\n />\n ))}\n </div>\n );\n}\n\nAIToolCallList.displayName = 'AIToolCallList';\n\nexport {\n AIToolCall,\n AIToolCallHeader,\n AIToolCallList,\n StatusIcon,\n statusIconVariants,\n ToolCallSection,\n toolCallVariants,\n};\n","/**\n * Web Component wrapper for AIToolCall (hand-crafted WC adapter).\n * Custom element: <hf-ai-tool-call>\n *\n * Provides JSON prop parsing for `toolPart` and a null guard\n * so the component doesn't crash before Vue sets the prop.\n *\n * @generated by scripts/generate-wc-components.ts\n * DO NOT EDIT MANUALLY\n */\n\nimport React from 'react';\nimport type { ToolCallPart, ToolCallStatus } from '../components';\nimport { AIToolCall } from '../components';\nimport {\n BaseCompoundWC,\n camelToKebab,\n dispatchEvent,\n installPropAccessors,\n type PropDefs,\n registerWC,\n} from './_shared';\n\nconst PROP_DEFS: PropDefs = {\n toolPart: 'json',\n defaultOpen: 'boolean',\n open: 'boolean',\n};\n\nconst TOOL_CALL_STATUSES = {\n error: true,\n pending: true,\n running: true,\n success: true,\n} as const satisfies Record<ToolCallStatus, true>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isToolCallStatus(value: unknown): value is ToolCallStatus {\n return typeof value === 'string' && value in TOOL_CALL_STATUSES;\n}\n\nfunction parseToolCallPart(value: unknown): ToolCallPart | undefined {\n if (!isRecord(value)) return undefined;\n\n const { args, error, result, status, toolCallId, toolName } = value;\n if (typeof toolCallId !== 'string' || toolCallId.length === 0) {\n return undefined;\n }\n\n if (typeof toolName !== 'string' || toolName.length === 0) {\n return undefined;\n }\n\n if (status !== undefined && !isToolCallStatus(status)) {\n return undefined;\n }\n\n if (args !== undefined && !isRecord(args)) {\n return undefined;\n }\n\n return {\n args,\n error: typeof error === 'string' ? error : undefined,\n result,\n status,\n toolCallId,\n toolName,\n };\n}\n\nclass AIToolCallWC extends BaseCompoundWC {\n get propDefs() {\n return PROP_DEFS;\n }\n\n static get observedAttributes() {\n return Object.keys(PROP_DEFS).map(camelToKebab);\n }\n\n protected _renderReact(): React.ReactElement {\n const props = this._readAllProps();\n const toolPart = parseToolCallPart(props.toolPart);\n\n // Null guard: return empty fragment until toolPart is provided\n if (!toolPart) {\n return React.createElement(React.Fragment);\n }\n\n return React.createElement(AIToolCall, {\n toolPart,\n defaultOpen: (props.defaultOpen as boolean) ?? false,\n open: props.open as boolean | undefined,\n onOpenChange: (open: boolean) => dispatchEvent(this, 'open-change', open),\n });\n }\n}\n\ninstallPropAccessors(AIToolCallWC, PROP_DEFS);\nregisterWC('hf-ai-tool-call', AIToolCallWC);\n\nexport { AIToolCallWC };\nexport default AIToolCallWC;\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hf-ai-tool-call.js","names":[],"sources":["../../src/wc/hf-ai-tool-call.ts"],"sourcesContent":["/**\n * Web Component wrapper for AIToolCall (hand-crafted WC adapter).\n * Custom element: <hf-ai-tool-call>\n *\n * Provides JSON prop parsing for `toolPart` and a null guard\n * so the component doesn't crash before Vue sets the prop.\n *\n * @generated by scripts/generate-wc-components.ts\n * DO NOT EDIT MANUALLY\n */\n\nimport React from 'react';\nimport type { ToolCallPart, ToolCallStatus } from '../components';\nimport { AIToolCall } from '../components';\nimport {\n BaseCompoundWC,\n camelToKebab,\n dispatchEvent,\n installPropAccessors,\n type PropDefs,\n registerWC,\n} from './_shared';\n\nconst PROP_DEFS: PropDefs = {\n toolPart: 'json',\n defaultOpen: 'boolean',\n open: 'boolean',\n};\n\nconst TOOL_CALL_STATUSES = {\n error: true,\n pending: true,\n running: true,\n success: true,\n} as const satisfies Record<ToolCallStatus, true>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isToolCallStatus(value: unknown): value is ToolCallStatus {\n return typeof value === 'string' && value in TOOL_CALL_STATUSES;\n}\n\nfunction parseToolCallPart(value: unknown): ToolCallPart | undefined {\n if (!isRecord(value)) return undefined;\n\n const { args, error, result, status, toolCallId, toolName } = value;\n if (typeof toolCallId !== 'string' || toolCallId.length === 0) {\n return undefined;\n }\n\n if (typeof toolName !== 'string' || toolName.length === 0) {\n return undefined;\n }\n\n if (status !== undefined && !isToolCallStatus(status)) {\n return undefined;\n }\n\n if (args !== undefined && !isRecord(args)) {\n return undefined;\n }\n\n return {\n args,\n error: typeof error === 'string' ? error : undefined,\n result,\n status,\n toolCallId,\n toolName,\n };\n}\n\nclass AIToolCallWC extends BaseCompoundWC {\n get propDefs() {\n return PROP_DEFS;\n }\n\n static get observedAttributes() {\n return Object.keys(PROP_DEFS).map(camelToKebab);\n }\n\n protected _renderReact(): React.ReactElement {\n const props = this._readAllProps();\n const toolPart = parseToolCallPart(props.toolPart);\n\n // Null guard: return empty fragment until toolPart is provided\n if (!toolPart) {\n return React.createElement(React.Fragment);\n }\n\n return React.createElement(AIToolCall, {\n toolPart,\n defaultOpen: (props.defaultOpen as boolean) ?? false,\n open: props.open as boolean | undefined,\n onOpenChange: (open: boolean) => dispatchEvent(this, 'open-change', open),\n });\n }\n}\n\ninstallPropAccessors(AIToolCallWC, PROP_DEFS);\nregisterWC('hf-ai-tool-call', AIToolCallWC);\n\nexport { AIToolCallWC };\nexport default AIToolCallWC;\n"],"mappings":";;;;mCAuBM,IAAsB;AAAA,EAC1B,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AACR,GAEM,IAAqB;AAAA,EACzB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAS,EAAS,GAAkD;AAClE,SAAO,OAAO,KAAU,YAAY,MAAU,QAAQ,CAAC,MAAM,QAAQ,CAAK;AAC5E;AAEA,SAAS,EAAiB,GAAyC;AACjE,SAAO,OAAO,KAAU,YAAY,KAAS;AAC/C;AAEA,SAAS,EAAkB,GAA0C;AACnE,MAAI,CAAC,EAAS,CAAK,EAAG;AAEtB,QAAM,EAAE,MAAA,GAAM,OAAA,GAAO,QAAA,GAAQ,QAAA,GAAQ,YAAA,GAAY,UAAA,EAAA,IAAa;AAC9D,MAAI,SAAO,KAAe,YAAY,EAAW,WAAW,MAIxD,SAAO,KAAa,YAAY,EAAS,WAAW,MAIpD,EAAA,MAAW,UAAa,CAAC,EAAiB,CAAM,MAIhD,EAAA,MAAS,UAAa,CAAC,EAAS,CAAI;AAIxC,WAAO;AAAA,MACL,MAAA;AAAA,MACA,OAAO,OAAO,KAAU,WAAW,IAAQ;AAAA,MAC3C,QAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,IACF;AACF;AAEA,IAAM,IAAN,cAA2B,EAAe;AAAA,EACxC,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,qBAAqB;AAC9B,WAAO,OAAO,KAAK,CAAS,EAAE,IAAI,CAAY;AAAA,EAChD;AAAA,EAEA,eAA6C;AAC3C,UAAM,IAAQ,KAAK,cAAc,GAC3B,IAAW,EAAkB,EAAM,QAAQ;AAGjD,WAAK,IAIL,EAAa,cAAc,GAAY;AAAA,MACrC,UAAA;AAAA,MACA,aAAc,EAAM,eAA2B;AAAA,MAC/C,MAAM,EAAM;AAAA,MACZ,cAAA,CAAe,MAAkB,EAAc,MAAM,eAAe,CAAI;AAAA,IAC1E,CAAC,IARC,EAAa,cAAA,EAAoB,QAAQ;AAAA,EAS7C;AACF;AAEA,EAAqB,GAAc,CAAS;AAC5C,EAAW,mBAAmB,CAAY"}
|