@humain/ui 2.1.63 → 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 +7 -339
- 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 +79 -78
- 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 +58 -57
- 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 { f as i } from "./_shared.js";
|
|
2
|
+
import { t as I } from "./createLucideIcon.js";
|
|
3
|
+
import { t as j } from "./check.js";
|
|
4
|
+
import { t as V } from "./chevron-down.js";
|
|
5
|
+
import { t as q } from "./chevron-right.js";
|
|
6
|
+
import { t as w } from "./circle-alert.js";
|
|
7
|
+
import { t as H } from "./clock.js";
|
|
8
|
+
import { t as L } from "./react.js";
|
|
9
|
+
import { t as _ } from "./AnimatePresence.js";
|
|
10
|
+
import { t as T } from "./dist.js";
|
|
11
|
+
import { t as B } from "./use-controllable-state.js";
|
|
12
|
+
import { n as N } from "./AICodeBlock.js";
|
|
13
|
+
import * as y from "react";
|
|
14
|
+
import { jsx as t, jsxs as o } from "react/jsx-runtime";
|
|
15
|
+
var R = [["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
|
+
}]], C = I("code", R), D = [["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
|
+
}]], E = I("wrench", D), M = T("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
|
+
}), $ = T("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 k({ status: e, className: n }) {
|
|
42
|
+
const a = i($({ status: e }), n);
|
|
43
|
+
switch (e) {
|
|
44
|
+
case "running":
|
|
45
|
+
return /* @__PURE__ */ t(H, { className: a });
|
|
46
|
+
case "success":
|
|
47
|
+
return /* @__PURE__ */ t(j, { className: i(a, "delight-check-bounce motion-reduce:!animate-none") });
|
|
48
|
+
case "error":
|
|
49
|
+
return /* @__PURE__ */ t(w, { className: i(a, "delight-shake motion-reduce:!animate-none") });
|
|
50
|
+
default:
|
|
51
|
+
return /* @__PURE__ */ t(E, { className: a });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
k.displayName = "StatusIcon";
|
|
55
|
+
function z({ toolName: e, status: n, isOpen: a, onToggle: s, className: d }) {
|
|
56
|
+
return /* @__PURE__ */ o("button", {
|
|
57
|
+
type: "button",
|
|
58
|
+
onClick: s,
|
|
59
|
+
"aria-expanded": a,
|
|
60
|
+
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", d),
|
|
61
|
+
children: [/* @__PURE__ */ o("div", {
|
|
62
|
+
className: "flex items-center gap-3",
|
|
63
|
+
children: [/* @__PURE__ */ t(k, {
|
|
64
|
+
status: n,
|
|
65
|
+
"aria-hidden": "true"
|
|
66
|
+
}), /* @__PURE__ */ o("div", {
|
|
67
|
+
className: "flex flex-col items-start",
|
|
68
|
+
children: [/* @__PURE__ */ t("span", {
|
|
69
|
+
className: "text-sm font-medium text-foreground",
|
|
70
|
+
children: e
|
|
71
|
+
}), /* @__PURE__ */ t("span", {
|
|
72
|
+
className: "text-xs text-text-quaternary",
|
|
73
|
+
children: {
|
|
74
|
+
pending: "Pending",
|
|
75
|
+
running: "Running...",
|
|
76
|
+
success: "Completed",
|
|
77
|
+
error: "Failed"
|
|
78
|
+
}[n]
|
|
79
|
+
})]
|
|
80
|
+
})]
|
|
81
|
+
}), a ? /* @__PURE__ */ t(V, {
|
|
82
|
+
className: "size-4 text-muted-foreground",
|
|
83
|
+
"aria-hidden": "true"
|
|
84
|
+
}) : /* @__PURE__ */ t(q, {
|
|
85
|
+
className: "size-4 text-muted-foreground rtl:rotate-180",
|
|
86
|
+
"aria-hidden": "true"
|
|
87
|
+
})]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
z.displayName = "AIToolCallHeader";
|
|
91
|
+
function g({ title: e, icon: n, children: a, className: s }) {
|
|
92
|
+
return /* @__PURE__ */ o("div", {
|
|
93
|
+
className: i("space-y-2", s),
|
|
94
|
+
children: [/* @__PURE__ */ o("div", {
|
|
95
|
+
className: "flex items-center gap-2 text-xs font-medium text-text-quaternary uppercase tracking-wide",
|
|
96
|
+
children: [n, e]
|
|
97
|
+
}), a]
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
g.displayName = "ToolCallSection";
|
|
101
|
+
function b(e) {
|
|
102
|
+
return typeof e == "string" ? e : JSON.stringify(e, null, 2);
|
|
103
|
+
}
|
|
104
|
+
function S({ toolPart: e, defaultOpen: n = !1, open: a, onOpenChange: s, className: d }) {
|
|
105
|
+
const [u, l] = B({
|
|
106
|
+
value: a,
|
|
107
|
+
defaultValue: n,
|
|
108
|
+
onChange: s
|
|
109
|
+
}), m = e.status || "pending", p = () => {
|
|
110
|
+
l(!u);
|
|
111
|
+
};
|
|
112
|
+
return /* @__PURE__ */ o("div", {
|
|
113
|
+
"data-slot": "ai-tool-call",
|
|
114
|
+
className: i(M({ status: m }), d),
|
|
115
|
+
children: [/* @__PURE__ */ t(z, {
|
|
116
|
+
toolName: e.toolName,
|
|
117
|
+
status: m,
|
|
118
|
+
isOpen: u,
|
|
119
|
+
onToggle: p
|
|
120
|
+
}), /* @__PURE__ */ t(_, { children: u && /* @__PURE__ */ t(L.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__ */ o("div", {
|
|
136
|
+
className: "px-4 pb-4 space-y-4",
|
|
137
|
+
children: [
|
|
138
|
+
/* @__PURE__ */ o("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__ */ t(g, {
|
|
143
|
+
title: "Input",
|
|
144
|
+
icon: /* @__PURE__ */ t(C, { className: "size-3" }),
|
|
145
|
+
children: /* @__PURE__ */ t(N, {
|
|
146
|
+
code: b(e.args),
|
|
147
|
+
language: "json",
|
|
148
|
+
showHeader: !1,
|
|
149
|
+
showCopyButton: !0,
|
|
150
|
+
size: "sm"
|
|
151
|
+
})
|
|
152
|
+
}),
|
|
153
|
+
e.result !== void 0 && /* @__PURE__ */ t(g, {
|
|
154
|
+
title: "Output",
|
|
155
|
+
icon: /* @__PURE__ */ t(C, { className: "size-3" }),
|
|
156
|
+
children: /* @__PURE__ */ t(N, {
|
|
157
|
+
code: b(e.result),
|
|
158
|
+
language: "json",
|
|
159
|
+
showHeader: !1,
|
|
160
|
+
showCopyButton: !0,
|
|
161
|
+
size: "sm"
|
|
162
|
+
})
|
|
163
|
+
}),
|
|
164
|
+
e.error && /* @__PURE__ */ t("div", {
|
|
165
|
+
className: "p-3 rounded-lg bg-destructive/20 border border-destructive/50",
|
|
166
|
+
children: /* @__PURE__ */ o("div", {
|
|
167
|
+
className: "flex items-start gap-2",
|
|
168
|
+
children: [/* @__PURE__ */ t(w, { className: "size-4 text-destructive mt-0.5 shrink-0" }), /* @__PURE__ */ t("p", {
|
|
169
|
+
className: "text-sm text-destructive",
|
|
170
|
+
children: e.error
|
|
171
|
+
})]
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
]
|
|
175
|
+
})
|
|
176
|
+
}) })]
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
S.displayName = "AIToolCall";
|
|
180
|
+
function f(e, n) {
|
|
181
|
+
const a = new Set(e);
|
|
182
|
+
return n.flatMap((s) => a.has(s.toolCallId) ? [s.toolCallId] : []);
|
|
183
|
+
}
|
|
184
|
+
function F(e, n) {
|
|
185
|
+
return e.length === n.length && e.every((a, s) => a === n[s]);
|
|
186
|
+
}
|
|
187
|
+
function J({ toolCalls: e, defaultAllOpen: n = !1, defaultOpenToolCallIds: a = [], openToolCallIds: s, onOpenToolCallIdsChange: d, className: u }) {
|
|
188
|
+
const l = s !== void 0, [m, p] = y.useState(() => f(n ? e.map((r) => r.toolCallId) : a, e)), x = f(l ? s : m, e), A = new Set(x);
|
|
189
|
+
y.useLayoutEffect(() => {
|
|
190
|
+
l || p((r) => {
|
|
191
|
+
const c = f(r, e);
|
|
192
|
+
return F(r, c) ? r : c;
|
|
193
|
+
});
|
|
194
|
+
}, [l, e]);
|
|
195
|
+
const O = (r, c) => {
|
|
196
|
+
const h = new Set(x);
|
|
197
|
+
c ? h.add(r) : h.delete(r);
|
|
198
|
+
const v = f([...h], e);
|
|
199
|
+
l || p(v), d?.([...v]);
|
|
200
|
+
};
|
|
201
|
+
return /* @__PURE__ */ t("div", {
|
|
202
|
+
"data-slot": "ai-tool-call-list",
|
|
203
|
+
className: i("space-y-2", u),
|
|
204
|
+
children: e.map((r) => /* @__PURE__ */ t(S, {
|
|
205
|
+
toolPart: r,
|
|
206
|
+
open: A.has(r.toolCallId),
|
|
207
|
+
onOpenChange: (c) => O(r.toolCallId, c)
|
|
208
|
+
}, r.toolCallId))
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
J.displayName = "AIToolCallList";
|
|
212
|
+
export {
|
|
213
|
+
J as n,
|
|
214
|
+
E as r,
|
|
215
|
+
S 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,242 +1,57 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { t as
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import { t as L } from "./chevron-right.js";
|
|
6
|
-
import { t as y } from "./circle-alert.js";
|
|
7
|
-
import { t as R } from "./clock.js";
|
|
8
|
-
import { t as V } from "./wrench.js";
|
|
9
|
-
import { t as E } from "./react.js";
|
|
10
|
-
import { t as B } from "./AnimatePresence.js";
|
|
11
|
-
import { t as C } from "./dist.js";
|
|
12
|
-
import { t as D } from "./use-controllable-state.js";
|
|
13
|
-
import { n as g } from "./AICodeBlock.js";
|
|
14
|
-
import d from "react";
|
|
15
|
-
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
16
|
-
var H = [["path", {
|
|
17
|
-
d: "m16 18 6-6-6-6",
|
|
18
|
-
key: "eg8j8"
|
|
19
|
-
}], ["path", {
|
|
20
|
-
d: "m8 6-6 6 6 6",
|
|
21
|
-
key: "ppft3o"
|
|
22
|
-
}]], h = j("code", H), W = C("overflow-hidden rounded-xl border transition-colors", {
|
|
23
|
-
variants: { status: {
|
|
24
|
-
pending: "border-border bg-muted",
|
|
25
|
-
running: "border-primary bg-primary/10",
|
|
26
|
-
success: "border-success/50 bg-success/10",
|
|
27
|
-
error: "border-destructive/50 bg-destructive/10"
|
|
28
|
-
} },
|
|
29
|
-
defaultVariants: { status: "pending" }
|
|
30
|
-
}), F = C("size-4", {
|
|
31
|
-
variants: { status: {
|
|
32
|
-
pending: "text-muted-foreground",
|
|
33
|
-
running: "text-primary animate-spin motion-reduce:animate-none",
|
|
34
|
-
success: "text-success",
|
|
35
|
-
error: "text-destructive"
|
|
36
|
-
} },
|
|
37
|
-
defaultVariants: { status: "pending" }
|
|
38
|
-
});
|
|
39
|
-
function N({ status: e, className: s }) {
|
|
40
|
-
const r = l(F({ status: e }), s);
|
|
41
|
-
switch (e) {
|
|
42
|
-
case "running":
|
|
43
|
-
return /* @__PURE__ */ t(R, { className: r });
|
|
44
|
-
case "success":
|
|
45
|
-
return /* @__PURE__ */ t(z, { className: l(r, "delight-check-bounce motion-reduce:!animate-none") });
|
|
46
|
-
case "error":
|
|
47
|
-
return /* @__PURE__ */ t(y, { className: l(r, "delight-shake motion-reduce:!animate-none") });
|
|
48
|
-
default:
|
|
49
|
-
return /* @__PURE__ */ t(V, { className: r });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
N.displayName = "StatusIcon";
|
|
53
|
-
function b({ toolName: e, status: s, isOpen: r, onToggle: a, className: o }) {
|
|
54
|
-
return /* @__PURE__ */ n("button", {
|
|
55
|
-
type: "button",
|
|
56
|
-
onClick: a,
|
|
57
|
-
"aria-expanded": r,
|
|
58
|
-
className: l("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", o),
|
|
59
|
-
children: [/* @__PURE__ */ n("div", {
|
|
60
|
-
className: "flex items-center gap-3",
|
|
61
|
-
children: [/* @__PURE__ */ t(N, {
|
|
62
|
-
status: s,
|
|
63
|
-
"aria-hidden": "true"
|
|
64
|
-
}), /* @__PURE__ */ n("div", {
|
|
65
|
-
className: "flex flex-col items-start",
|
|
66
|
-
children: [/* @__PURE__ */ t("span", {
|
|
67
|
-
className: "text-sm font-medium text-foreground",
|
|
68
|
-
children: e
|
|
69
|
-
}), /* @__PURE__ */ t("span", {
|
|
70
|
-
className: "text-xs text-text-quaternary",
|
|
71
|
-
children: {
|
|
72
|
-
pending: "Pending",
|
|
73
|
-
running: "Running...",
|
|
74
|
-
success: "Completed",
|
|
75
|
-
error: "Failed"
|
|
76
|
-
}[s]
|
|
77
|
-
})]
|
|
78
|
-
})]
|
|
79
|
-
}), r ? /* @__PURE__ */ t(_, {
|
|
80
|
-
className: "size-4 text-muted-foreground",
|
|
81
|
-
"aria-hidden": "true"
|
|
82
|
-
}) : /* @__PURE__ */ t(L, {
|
|
83
|
-
className: "size-4 text-muted-foreground rtl:rotate-180",
|
|
84
|
-
"aria-hidden": "true"
|
|
85
|
-
})]
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
b.displayName = "AIToolCallHeader";
|
|
89
|
-
function u({ title: e, icon: s, children: r, className: a }) {
|
|
90
|
-
return /* @__PURE__ */ n("div", {
|
|
91
|
-
className: l("space-y-2", a),
|
|
92
|
-
children: [/* @__PURE__ */ n("div", {
|
|
93
|
-
className: "flex items-center gap-2 text-xs font-medium text-text-quaternary uppercase tracking-wide",
|
|
94
|
-
children: [s, e]
|
|
95
|
-
}), r]
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
u.displayName = "ToolCallSection";
|
|
99
|
-
function v(e) {
|
|
100
|
-
return typeof e == "string" ? e : JSON.stringify(e, null, 2);
|
|
101
|
-
}
|
|
102
|
-
function p({ toolPart: e, defaultOpen: s = !1, open: r, onOpenChange: a, className: o }) {
|
|
103
|
-
const [i, c] = D({
|
|
104
|
-
value: r,
|
|
105
|
-
defaultValue: s,
|
|
106
|
-
onChange: a
|
|
107
|
-
}), f = e.status || "pending", A = () => {
|
|
108
|
-
c(!i);
|
|
109
|
-
};
|
|
110
|
-
return /* @__PURE__ */ n("div", {
|
|
111
|
-
"data-slot": "ai-tool-call",
|
|
112
|
-
className: l(W({ status: f }), o),
|
|
113
|
-
children: [/* @__PURE__ */ t(b, {
|
|
114
|
-
toolName: e.toolName,
|
|
115
|
-
status: f,
|
|
116
|
-
isOpen: i,
|
|
117
|
-
onToggle: A
|
|
118
|
-
}), /* @__PURE__ */ t(B, { children: i && /* @__PURE__ */ t(E.div, {
|
|
119
|
-
initial: {
|
|
120
|
-
height: 0,
|
|
121
|
-
opacity: 0
|
|
122
|
-
},
|
|
123
|
-
animate: {
|
|
124
|
-
height: "auto",
|
|
125
|
-
opacity: 1
|
|
126
|
-
},
|
|
127
|
-
exit: {
|
|
128
|
-
height: 0,
|
|
129
|
-
opacity: 0
|
|
130
|
-
},
|
|
131
|
-
transition: { duration: 0.2 },
|
|
132
|
-
className: "overflow-hidden",
|
|
133
|
-
children: /* @__PURE__ */ n("div", {
|
|
134
|
-
className: "px-4 pb-4 space-y-4",
|
|
135
|
-
children: [
|
|
136
|
-
/* @__PURE__ */ n("div", {
|
|
137
|
-
className: "text-xs text-muted-foreground font-mono",
|
|
138
|
-
children: ["ID: ", e.toolCallId]
|
|
139
|
-
}),
|
|
140
|
-
e.args && Object.keys(e.args).length > 0 && /* @__PURE__ */ t(u, {
|
|
141
|
-
title: "Input",
|
|
142
|
-
icon: /* @__PURE__ */ t(h, { className: "size-3" }),
|
|
143
|
-
children: /* @__PURE__ */ t(g, {
|
|
144
|
-
code: v(e.args),
|
|
145
|
-
language: "json",
|
|
146
|
-
showHeader: !1,
|
|
147
|
-
showCopyButton: !0,
|
|
148
|
-
size: "sm"
|
|
149
|
-
})
|
|
150
|
-
}),
|
|
151
|
-
e.result !== void 0 && /* @__PURE__ */ t(u, {
|
|
152
|
-
title: "Output",
|
|
153
|
-
icon: /* @__PURE__ */ t(h, { className: "size-3" }),
|
|
154
|
-
children: /* @__PURE__ */ t(g, {
|
|
155
|
-
code: v(e.result),
|
|
156
|
-
language: "json",
|
|
157
|
-
showHeader: !1,
|
|
158
|
-
showCopyButton: !0,
|
|
159
|
-
size: "sm"
|
|
160
|
-
})
|
|
161
|
-
}),
|
|
162
|
-
e.error && /* @__PURE__ */ t("div", {
|
|
163
|
-
className: "p-3 rounded-lg bg-destructive/20 border border-destructive/50",
|
|
164
|
-
children: /* @__PURE__ */ n("div", {
|
|
165
|
-
className: "flex items-start gap-2",
|
|
166
|
-
children: [/* @__PURE__ */ t(y, { className: "size-4 text-destructive mt-0.5 shrink-0" }), /* @__PURE__ */ t("p", {
|
|
167
|
-
className: "text-sm text-destructive",
|
|
168
|
-
children: e.error
|
|
169
|
-
})]
|
|
170
|
-
})
|
|
171
|
-
})
|
|
172
|
-
]
|
|
173
|
-
})
|
|
174
|
-
}) })]
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
p.displayName = "AIToolCall";
|
|
178
|
-
function q({ toolCalls: e, defaultAllOpen: s = !1, className: r }) {
|
|
179
|
-
return /* @__PURE__ */ t("div", {
|
|
180
|
-
"data-slot": "ai-tool-call-list",
|
|
181
|
-
className: l("space-y-2", r),
|
|
182
|
-
children: e.map((a) => /* @__PURE__ */ t(p, {
|
|
183
|
-
toolPart: a,
|
|
184
|
-
defaultOpen: s
|
|
185
|
-
}, a.toolCallId))
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
q.displayName = "AIToolCallList";
|
|
189
|
-
var m = {
|
|
1
|
+
import { a as f, i as c, o as d, t as g, u as m } from "./_shared.js";
|
|
2
|
+
import { t as C } from "./AIToolCall.js";
|
|
3
|
+
import s from "react";
|
|
4
|
+
var l = {
|
|
190
5
|
toolPart: "json",
|
|
191
6
|
defaultOpen: "boolean",
|
|
192
7
|
open: "boolean"
|
|
193
|
-
},
|
|
8
|
+
}, A = {
|
|
194
9
|
error: !0,
|
|
195
10
|
pending: !0,
|
|
196
11
|
running: !0,
|
|
197
12
|
success: !0
|
|
198
13
|
};
|
|
199
|
-
function
|
|
200
|
-
return typeof
|
|
14
|
+
function i(t) {
|
|
15
|
+
return typeof t == "object" && t !== null && !Array.isArray(t);
|
|
201
16
|
}
|
|
202
|
-
function
|
|
203
|
-
return typeof
|
|
17
|
+
function b(t) {
|
|
18
|
+
return typeof t == "string" && t in A;
|
|
204
19
|
}
|
|
205
|
-
function
|
|
206
|
-
if (!
|
|
207
|
-
const { args:
|
|
208
|
-
if (!(typeof
|
|
20
|
+
function h(t) {
|
|
21
|
+
if (!i(t)) return;
|
|
22
|
+
const { args: r, error: e, result: u, status: o, toolCallId: n, toolName: a } = t;
|
|
23
|
+
if (!(typeof n != "string" || n.length === 0) && !(typeof a != "string" || a.length === 0) && !(o !== void 0 && !b(o)) && !(r !== void 0 && !i(r)))
|
|
209
24
|
return {
|
|
210
|
-
args:
|
|
211
|
-
error: typeof
|
|
212
|
-
result:
|
|
25
|
+
args: r,
|
|
26
|
+
error: typeof e == "string" ? e : void 0,
|
|
27
|
+
result: u,
|
|
213
28
|
status: o,
|
|
214
|
-
toolCallId:
|
|
215
|
-
toolName:
|
|
29
|
+
toolCallId: n,
|
|
30
|
+
toolName: a
|
|
216
31
|
};
|
|
217
32
|
}
|
|
218
|
-
var
|
|
33
|
+
var p = class extends g {
|
|
219
34
|
get propDefs() {
|
|
220
|
-
return
|
|
35
|
+
return l;
|
|
221
36
|
}
|
|
222
37
|
static get observedAttributes() {
|
|
223
|
-
return Object.keys(
|
|
38
|
+
return Object.keys(l).map(c);
|
|
224
39
|
}
|
|
225
40
|
_renderReact() {
|
|
226
|
-
const
|
|
227
|
-
return
|
|
228
|
-
toolPart:
|
|
229
|
-
defaultOpen:
|
|
230
|
-
open:
|
|
231
|
-
onOpenChange: (
|
|
232
|
-
}) :
|
|
41
|
+
const t = this._readAllProps(), r = h(t.toolPart);
|
|
42
|
+
return r ? s.createElement(C, {
|
|
43
|
+
toolPart: r,
|
|
44
|
+
defaultOpen: t.defaultOpen ?? !1,
|
|
45
|
+
open: t.open,
|
|
46
|
+
onOpenChange: (e) => f(this, "open-change", e)
|
|
47
|
+
}) : s.createElement(s.Fragment);
|
|
233
48
|
}
|
|
234
49
|
};
|
|
235
|
-
|
|
236
|
-
|
|
50
|
+
d(p, l);
|
|
51
|
+
m("hf-ai-tool-call", p);
|
|
237
52
|
export {
|
|
238
|
-
|
|
239
|
-
|
|
53
|
+
p as AIToolCallWC,
|
|
54
|
+
p as default
|
|
240
55
|
};
|
|
241
56
|
|
|
242
57
|
//# 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":";;;AAuBA,IAAM,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,IAIE,EAAM,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,IARQ,EAAM,cAAc,EAAM,QAAQ;AAAA,EAS7C;AACF;AAEA,EAAqB,GAAc,CAAS;AAC5C,EAAW,mBAAmB,CAAY"}
|