@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
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { d as
|
|
2
|
-
import { t as
|
|
1
|
+
import { d as M, f } from "./_shared.js";
|
|
2
|
+
import { t as E } from "./createLucideIcon.js";
|
|
3
3
|
import { t as A } from "./check.js";
|
|
4
|
-
import { t as
|
|
4
|
+
import { t as q } from "./chevron-down.js";
|
|
5
5
|
import { t as V } from "./chevron-right.js";
|
|
6
|
-
import { t as
|
|
7
|
-
import { t as
|
|
8
|
-
import { t as
|
|
9
|
-
import { t as
|
|
10
|
-
import { t as
|
|
11
|
-
import * as
|
|
6
|
+
import { t as D } from "./circle-alert.js";
|
|
7
|
+
import { t as P } from "./react.js";
|
|
8
|
+
import { t as _ } from "./AnimatePresence.js";
|
|
9
|
+
import { t as F } from "./use-reduced-motion.js";
|
|
10
|
+
import { t as $ } from "./dist.js";
|
|
11
|
+
import * as l from "react";
|
|
12
12
|
import { Fragment as B, jsx as t, jsxs as g } from "react/jsx-runtime";
|
|
13
13
|
var K = [
|
|
14
14
|
["path", {
|
|
@@ -43,7 +43,7 @@ var K = [
|
|
|
43
43
|
d: "m4.9 4.9 2.9 2.9",
|
|
44
44
|
key: "giyufr"
|
|
45
45
|
}]
|
|
46
|
-
], O =
|
|
46
|
+
], O = E("loader", K), T = [["rect", {
|
|
47
47
|
x: "14",
|
|
48
48
|
y: "3",
|
|
49
49
|
width: "5",
|
|
@@ -57,25 +57,30 @@ var K = [
|
|
|
57
57
|
height: "18",
|
|
58
58
|
rx: "1",
|
|
59
59
|
key: "1wsw3u"
|
|
60
|
-
}]], U =
|
|
60
|
+
}]], U = E("pause", T);
|
|
61
|
+
function G(e) {
|
|
62
|
+
const r = Math.max(0, Math.round(e / 1e3)), a = Math.floor(r / 3600), n = Math.floor(r % 3600 / 60), s = r % 60;
|
|
63
|
+
return a > 0 ? [a ? `${a}h` : "", n ? `${n}m` : ""].filter(Boolean).join(" ") : n > 0 ? `${n}m${s ? ` ${s}s` : ""}` : `${r}s`;
|
|
64
|
+
}
|
|
65
|
+
var H = {
|
|
61
66
|
pending: "text-muted-foreground",
|
|
62
67
|
running: "text-primary",
|
|
63
68
|
suspended: "text-warning",
|
|
64
69
|
completed: "text-success",
|
|
65
70
|
error: "text-destructive"
|
|
66
|
-
},
|
|
71
|
+
}, J = {
|
|
67
72
|
pending: "bg-accent text-muted-foreground",
|
|
68
73
|
running: "bg-primary/20 text-primary",
|
|
69
74
|
suspended: "bg-warning/20 text-warning",
|
|
70
75
|
completed: "bg-success/20 text-success",
|
|
71
76
|
error: "bg-destructive/20 text-destructive"
|
|
72
|
-
}, z =
|
|
73
|
-
variants: { status: G },
|
|
74
|
-
defaultVariants: { status: "pending" }
|
|
75
|
-
}), J = j("size-5 shrink-0 flex items-center justify-center rounded-full", {
|
|
77
|
+
}, z = $("flex items-start gap-3 px-4 py-3 transition-colors motion-reduce:transition-none", {
|
|
76
78
|
variants: { status: H },
|
|
77
79
|
defaultVariants: { status: "pending" }
|
|
78
|
-
}), Q = {
|
|
80
|
+
}), Q = $("size-5 shrink-0 flex items-center justify-center rounded-full", {
|
|
81
|
+
variants: { status: J },
|
|
82
|
+
defaultVariants: { status: "pending" }
|
|
83
|
+
}), X = {
|
|
79
84
|
contained: {
|
|
80
85
|
rootClassName: "relative",
|
|
81
86
|
hasDivider: !0,
|
|
@@ -96,19 +101,9 @@ function N(e, r) {
|
|
|
96
101
|
const a = new Set(e);
|
|
97
102
|
return r.flatMap((n) => a.has(n.id) ? [n.id] : []);
|
|
98
103
|
}
|
|
99
|
-
function
|
|
104
|
+
function Y(e, r) {
|
|
100
105
|
return e.length === r.length && e.every((a, n) => a === r[n]);
|
|
101
106
|
}
|
|
102
|
-
function Y(e) {
|
|
103
|
-
if (e < 1e3) return `${e}ms`;
|
|
104
|
-
if (e < 6e4) return `${(e / 1e3).toFixed(1)}s`;
|
|
105
|
-
const r = Math.floor(e / 1e3), a = Math.floor(r / 3600), n = Math.floor(r % 3600 / 60), s = r % 60;
|
|
106
|
-
return [
|
|
107
|
-
a > 0 ? `${a}h` : null,
|
|
108
|
-
n > 0 ? `${n}m` : null,
|
|
109
|
-
s > 0 ? `${s}s` : null
|
|
110
|
-
].filter((l) => l !== null).join(" ");
|
|
111
|
-
}
|
|
112
107
|
function Z(e) {
|
|
113
108
|
return typeof e == "object" && e !== null && Symbol.iterator in e && typeof e[Symbol.iterator] == "function";
|
|
114
109
|
}
|
|
@@ -119,8 +114,8 @@ var W = /* @__PURE__ */ new WeakMap();
|
|
|
119
114
|
function te(e, r) {
|
|
120
115
|
const a = [];
|
|
121
116
|
let n = !1, s = !Array.isArray(e);
|
|
122
|
-
for (let
|
|
123
|
-
const u = R(
|
|
117
|
+
for (let c = r.next(); !c.done; c = r.next()) {
|
|
118
|
+
const u = R(c.value);
|
|
124
119
|
a.push(u.content), n ||= u.hasRenderableContent, s ||= u.changed;
|
|
125
120
|
}
|
|
126
121
|
return {
|
|
@@ -140,15 +135,15 @@ function R(e) {
|
|
|
140
135
|
hasRenderableContent: !0,
|
|
141
136
|
changed: !1
|
|
142
137
|
};
|
|
143
|
-
if (
|
|
144
|
-
if (e.type !==
|
|
138
|
+
if (l.isValidElement(e)) {
|
|
139
|
+
if (e.type !== l.Fragment) return {
|
|
145
140
|
content: e,
|
|
146
141
|
hasRenderableContent: !0,
|
|
147
142
|
changed: !1
|
|
148
143
|
};
|
|
149
144
|
const r = R(e.props.children);
|
|
150
145
|
return {
|
|
151
|
-
content: r.changed ?
|
|
146
|
+
content: r.changed ? l.cloneElement(e, void 0, r.content) : e,
|
|
152
147
|
hasRenderableContent: r.hasRenderableContent,
|
|
153
148
|
changed: r.changed
|
|
154
149
|
};
|
|
@@ -184,11 +179,11 @@ function ne(e) {
|
|
|
184
179
|
case "error":
|
|
185
180
|
return "Error";
|
|
186
181
|
default:
|
|
187
|
-
return
|
|
182
|
+
return M(e);
|
|
188
183
|
}
|
|
189
184
|
}
|
|
190
|
-
function
|
|
191
|
-
const n = f(
|
|
185
|
+
function j({ status: e, index: r, className: a }) {
|
|
186
|
+
const n = f(Q({ status: e }), a);
|
|
192
187
|
switch (e) {
|
|
193
188
|
case "pending":
|
|
194
189
|
return /* @__PURE__ */ t("div", {
|
|
@@ -221,24 +216,29 @@ function $({ status: e, index: r, className: a }) {
|
|
|
221
216
|
return /* @__PURE__ */ t("div", {
|
|
222
217
|
"data-slot": "workflow-step-icon",
|
|
223
218
|
className: f(n, "delight-shake motion-reduce:!animate-none"),
|
|
224
|
-
children: /* @__PURE__ */ t(
|
|
219
|
+
children: /* @__PURE__ */ t(D, { className: "size-3" })
|
|
225
220
|
});
|
|
226
221
|
default:
|
|
227
|
-
return
|
|
222
|
+
return M(e);
|
|
228
223
|
}
|
|
229
224
|
}
|
|
230
|
-
|
|
231
|
-
function
|
|
232
|
-
const y =
|
|
233
|
-
/* @__PURE__ */ t(
|
|
225
|
+
j.displayName = "WorkflowStepStatusIcon";
|
|
226
|
+
function L({ step: e, index: r, isLast: a, appearance: n = "contained", itemSlot: s = "workflow-step-item", expandable: c = !0, expanded: u, active: k = !1, onExpandedChange: S }) {
|
|
227
|
+
const y = l.useId(), d = l.useId(), p = R(e.content), C = p.hasRenderableContent, h = re(e.error), m = h !== void 0, v = C || m, w = v && c, I = F(), x = X[n], i = { duration: I ? 0 : 0.2 }, o = /* @__PURE__ */ g(B, { children: [
|
|
228
|
+
/* @__PURE__ */ t(j, {
|
|
234
229
|
status: e.status,
|
|
235
230
|
index: r
|
|
236
231
|
}),
|
|
237
232
|
/* @__PURE__ */ g("div", {
|
|
238
233
|
className: "min-w-0 flex-1 text-start",
|
|
239
234
|
children: [/* @__PURE__ */ g("div", {
|
|
240
|
-
className: "flex items-center gap-2",
|
|
235
|
+
className: "flex flex-wrap items-center gap-2",
|
|
241
236
|
children: [
|
|
237
|
+
e.contextLabel && /* @__PURE__ */ t("span", {
|
|
238
|
+
"data-slot": "workflow-step-context",
|
|
239
|
+
className: "rounded-full border border-border px-2 py-0.5 text-[0.6875rem] font-medium leading-none text-secondary-foreground",
|
|
240
|
+
children: e.contextLabel
|
|
241
|
+
}),
|
|
242
242
|
/* @__PURE__ */ t("span", {
|
|
243
243
|
className: f("text-sm font-medium", e.status === "pending" ? "text-text-quaternary" : "text-foreground"),
|
|
244
244
|
children: e.title
|
|
@@ -249,7 +249,7 @@ function q({ step: e, index: r, isLast: a, appearance: n = "contained", itemSlot
|
|
|
249
249
|
}),
|
|
250
250
|
e.durationMs !== void 0 && /* @__PURE__ */ t("span", {
|
|
251
251
|
className: "text-xs text-muted-foreground",
|
|
252
|
-
children:
|
|
252
|
+
children: G(e.durationMs)
|
|
253
253
|
})
|
|
254
254
|
]
|
|
255
255
|
}), e.description && /* @__PURE__ */ t("p", {
|
|
@@ -259,7 +259,7 @@ function q({ step: e, index: r, isLast: a, appearance: n = "contained", itemSlot
|
|
|
259
259
|
}),
|
|
260
260
|
w && /* @__PURE__ */ t("div", {
|
|
261
261
|
className: "shrink-0",
|
|
262
|
-
children: u ? /* @__PURE__ */ t(
|
|
262
|
+
children: u ? /* @__PURE__ */ t(q, { className: "size-4 text-muted-foreground" }) : /* @__PURE__ */ t(V, { className: "size-4 text-muted-foreground rtl:rotate-180" })
|
|
263
263
|
})
|
|
264
264
|
] });
|
|
265
265
|
return /* @__PURE__ */ g("div", {
|
|
@@ -283,9 +283,9 @@ function q({ step: e, index: r, isLast: a, appearance: n = "contained", itemSlot
|
|
|
283
283
|
className: f(z({ status: e.status }), "w-full"),
|
|
284
284
|
children: o
|
|
285
285
|
}),
|
|
286
|
-
/* @__PURE__ */ t(
|
|
286
|
+
/* @__PURE__ */ t(_, {
|
|
287
287
|
initial: !1,
|
|
288
|
-
children: u && v && /* @__PURE__ */ t(
|
|
288
|
+
children: u && v && /* @__PURE__ */ t(P.div, {
|
|
289
289
|
id: y,
|
|
290
290
|
"data-slot": "workflow-step-panel",
|
|
291
291
|
initial: {
|
|
@@ -308,7 +308,7 @@ function q({ step: e, index: r, isLast: a, appearance: n = "contained", itemSlot
|
|
|
308
308
|
className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3",
|
|
309
309
|
children: /* @__PURE__ */ g("div", {
|
|
310
310
|
className: "flex items-start gap-2",
|
|
311
|
-
children: [/* @__PURE__ */ t(
|
|
311
|
+
children: [/* @__PURE__ */ t(D, { className: "mt-0.5 size-4 shrink-0 text-destructive" }), /* @__PURE__ */ t("p", {
|
|
312
312
|
className: "text-sm text-destructive",
|
|
313
313
|
children: h
|
|
314
314
|
})]
|
|
@@ -333,16 +333,16 @@ function q({ step: e, index: r, isLast: a, appearance: n = "contained", itemSlot
|
|
|
333
333
|
]
|
|
334
334
|
});
|
|
335
335
|
}
|
|
336
|
-
|
|
337
|
-
function ae({ steps: e, appearance: r = "contained", itemSlot: a = "workflow-step-item", expandable: n = !0, activeStepId: s, expandedStepIds:
|
|
338
|
-
const d =
|
|
339
|
-
|
|
336
|
+
L.displayName = "WorkflowStepItem";
|
|
337
|
+
function ae({ steps: e, appearance: r = "contained", itemSlot: a = "workflow-step-item", expandable: n = !0, activeStepId: s, expandedStepIds: c, defaultExpandedStepIds: u = [], onExpandedStepIdsChange: k, className: S, renderItems: y = !0 }) {
|
|
338
|
+
const d = c !== void 0, p = d ? [...c] : void 0, [C, h] = l.useState(() => N(u, e)), m = l.useRef(p ?? []), v = l.useRef(d), w = N(d ? c : C, e), I = new Set(w);
|
|
339
|
+
l.useLayoutEffect(() => {
|
|
340
340
|
p !== void 0 && (m.current = p);
|
|
341
|
-
}, [p]),
|
|
341
|
+
}, [p]), l.useLayoutEffect(() => {
|
|
342
342
|
const i = v.current;
|
|
343
343
|
v.current = d, !d && h((o) => {
|
|
344
344
|
const b = N(i ? m.current : o, e);
|
|
345
|
-
return
|
|
345
|
+
return Y(b, o) ? o : b;
|
|
346
346
|
});
|
|
347
347
|
}, [d, e]);
|
|
348
348
|
const x = (i) => {
|
|
@@ -355,7 +355,7 @@ function ae({ steps: e, appearance: r = "contained", itemSlot: a = "workflow-ste
|
|
|
355
355
|
"data-slot": "workflow-step-list",
|
|
356
356
|
"data-appearance": r,
|
|
357
357
|
className: f("m-0 list-none p-0", S),
|
|
358
|
-
children: e.map((i, o) => /* @__PURE__ */ t("li", { children: /* @__PURE__ */ t(
|
|
358
|
+
children: e.map((i, o) => /* @__PURE__ */ t("li", { children: /* @__PURE__ */ t(L, {
|
|
359
359
|
step: i,
|
|
360
360
|
index: o,
|
|
361
361
|
isLast: o === e.length - 1,
|
|
@@ -370,9 +370,10 @@ function ae({ steps: e, appearance: r = "contained", itemSlot: a = "workflow-ste
|
|
|
370
370
|
}
|
|
371
371
|
ae.displayName = "WorkflowStepRenderer";
|
|
372
372
|
export {
|
|
373
|
+
G as i,
|
|
373
374
|
ae as n,
|
|
374
|
-
|
|
375
|
-
|
|
375
|
+
j as r,
|
|
376
|
+
L as t
|
|
376
377
|
};
|
|
377
378
|
|
|
378
379
|
//# sourceMappingURL=workflow-step-renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-step-renderer.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/loader.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/pause.mjs","../../src/components/organisms/ai/_shared/workflow-step-renderer.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: \"M12 2v4\", key: \"3427ic\" }],\n [\"path\", { d: \"m16.2 7.8 2.9-2.9\", key: \"r700ao\" }],\n [\"path\", { d: \"M18 12h4\", key: \"wj9ykh\" }],\n [\"path\", { d: \"m16.2 16.2 2.9 2.9\", key: \"1bxg5t\" }],\n [\"path\", { d: \"M12 18v4\", key: \"jadmvz\" }],\n [\"path\", { d: \"m4.9 19.1 2.9-2.9\", key: \"bwix9q\" }],\n [\"path\", { d: \"M2 12h4\", key: \"j09sii\" }],\n [\"path\", { d: \"m4.9 4.9 2.9 2.9\", key: \"giyufr\" }]\n];\nconst Loader = createLucideIcon(\"loader\", __iconNode);\n\nexport { __iconNode, Loader as default };\n//# sourceMappingURL=loader.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 [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.mjs.map\n","import { cva } from 'class-variance-authority';\nimport {\n AlertCircle,\n Check,\n ChevronDown,\n ChevronRight,\n Loader,\n Pause,\n} from 'lucide-react';\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react';\nimport * as React from 'react';\nimport { assertNever, cn } from '@/lib/utils';\n\nexport type WorkflowStepStatus =\n | 'pending'\n | 'running'\n | 'suspended'\n | 'completed'\n | 'error';\n\nexport type WorkflowStepAppearance = 'contained' | 'embedded' | 'timeline';\n\nexport interface WorkflowStepViewModel {\n id: string;\n title: string;\n description?: string;\n status: WorkflowStepStatus;\n content?: React.ReactNode;\n durationMs?: number;\n error?: string;\n}\n\nexport interface WorkflowStepRendererProps {\n steps: readonly WorkflowStepViewModel[];\n appearance?: WorkflowStepAppearance;\n itemSlot?: string;\n expandable?: boolean;\n activeStepId?: string;\n expandedStepIds?: readonly string[];\n defaultExpandedStepIds?: readonly string[];\n onExpandedStepIdsChange?: (ids: readonly string[]) => void;\n className?: string;\n}\n\ninterface PrivateWorkflowStepRendererProps extends WorkflowStepRendererProps {\n renderItems?: boolean;\n}\n\nconst workflowStepItemStatusClasses = {\n pending: 'text-muted-foreground',\n running: 'text-primary',\n suspended: 'text-warning',\n completed: 'text-success',\n error: 'text-destructive',\n} as const satisfies Record<WorkflowStepStatus, string>;\n\nconst workflowStepIconStatusClasses = {\n pending: 'bg-accent text-muted-foreground',\n running: 'bg-primary/20 text-primary',\n suspended: 'bg-warning/20 text-warning',\n completed: 'bg-success/20 text-success',\n error: 'bg-destructive/20 text-destructive',\n} as const satisfies Record<WorkflowStepStatus, string>;\n\nexport const workflowStepItemVariants = cva(\n 'flex items-start gap-3 px-4 py-3 transition-colors motion-reduce:transition-none',\n {\n variants: {\n status: workflowStepItemStatusClasses,\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nexport const workflowStepIconVariants = cva(\n 'size-5 shrink-0 flex items-center justify-center rounded-full',\n {\n variants: {\n status: workflowStepIconStatusClasses,\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nconst workflowStepAppearanceConfig = {\n contained: {\n rootClassName: 'relative',\n hasDivider: true,\n hasConnector: false,\n },\n embedded: {\n rootClassName: 'relative',\n hasDivider: true,\n hasConnector: false,\n },\n timeline: {\n rootClassName: 'relative',\n hasDivider: false,\n hasConnector: true,\n },\n} as const satisfies Record<\n WorkflowStepAppearance,\n { rootClassName: string; hasDivider: boolean; hasConnector: boolean }\n>;\n\nexport function normalizeExpandedWorkflowStepIds(\n ids: readonly string[],\n steps: readonly WorkflowStepViewModel[],\n): string[] {\n const requested = new Set(ids);\n return steps.flatMap((step) => (requested.has(step.id) ? [step.id] : []));\n}\n\nfunction areWorkflowStepIdsEqual(\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 formatWorkflowStepDuration(durationMs: number): string {\n if (durationMs < 1000) return `${durationMs}ms`;\n if (durationMs < 60_000) return `${(durationMs / 1000).toFixed(1)}s`;\n\n const totalSeconds = Math.floor(durationMs / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n return [\n hours > 0 ? `${hours}h` : null,\n minutes > 0 ? `${minutes}m` : null,\n seconds > 0 ? `${seconds}s` : null,\n ]\n .filter((part): part is string => part !== null)\n .join(' ');\n}\n\nfunction isIterableWorkflowStepContent(\n content: React.ReactNode,\n): content is Iterable<React.ReactNode> {\n return (\n typeof content === 'object' &&\n content !== null &&\n Symbol.iterator in content &&\n typeof (content as Iterable<React.ReactNode>)[Symbol.iterator] ===\n 'function'\n );\n}\n\nfunction isIteratorWorkflowStepContent(\n content: unknown,\n): content is Iterator<React.ReactNode> {\n return (\n typeof (content as Partial<Iterator<React.ReactNode>>).next === 'function'\n );\n}\n\ninterface NormalizedWorkflowStepContent {\n content: React.ReactNode;\n hasRenderableContent: boolean;\n changed: boolean;\n}\n\nconst normalizedOneShotWorkflowStepContent = new WeakMap<\n object,\n NormalizedWorkflowStepContent\n>();\n\nfunction normalizeIterableWorkflowStepContent(\n content: Iterable<React.ReactNode>,\n iterator: Iterator<React.ReactNode>,\n): NormalizedWorkflowStepContent {\n const normalizedChildren: React.ReactNode[] = [];\n let hasRenderableContent = false;\n let changed = !Array.isArray(content);\n\n for (let result = iterator.next(); !result.done; result = iterator.next()) {\n const normalizedChild = normalizeWorkflowStepContent(result.value);\n normalizedChildren.push(normalizedChild.content);\n hasRenderableContent ||= normalizedChild.hasRenderableContent;\n changed ||= normalizedChild.changed;\n }\n\n return {\n content: changed ? normalizedChildren : content,\n hasRenderableContent,\n changed,\n };\n}\n\nfunction normalizeWorkflowStepContent(\n content: React.ReactNode,\n): NormalizedWorkflowStepContent {\n if (\n content === null ||\n content === undefined ||\n typeof content === 'boolean' ||\n content === ''\n ) {\n return { content, hasRenderableContent: false, changed: false };\n }\n\n if (\n typeof content === 'string' ||\n typeof content === 'number' ||\n typeof content === 'bigint'\n ) {\n return { content, hasRenderableContent: true, changed: false };\n }\n\n if (React.isValidElement<{ children?: React.ReactNode }>(content)) {\n if (content.type !== React.Fragment) {\n return { content, hasRenderableContent: true, changed: false };\n }\n\n const normalizedChildren = normalizeWorkflowStepContent(\n content.props.children,\n );\n return {\n content: normalizedChildren.changed\n ? React.cloneElement(content, undefined, normalizedChildren.content)\n : content,\n hasRenderableContent: normalizedChildren.hasRenderableContent,\n changed: normalizedChildren.changed,\n };\n }\n\n if (isIterableWorkflowStepContent(content)) {\n const iterator = content[Symbol.iterator]();\n const oneShotCacheKey = isIteratorWorkflowStepContent(iterator)\n ? (iterator as object)\n : null;\n\n if (oneShotCacheKey !== null) {\n const cached = normalizedOneShotWorkflowStepContent.get(oneShotCacheKey);\n if (cached !== undefined) return cached;\n }\n\n const normalized = normalizeIterableWorkflowStepContent(content, iterator);\n if (oneShotCacheKey !== null) {\n normalizedOneShotWorkflowStepContent.set(oneShotCacheKey, normalized);\n }\n return normalized;\n }\n\n return { content, hasRenderableContent: true, changed: false };\n}\n\nfunction getNonBlankWorkflowStepError(\n error: string | undefined,\n): string | undefined {\n return error?.trim() ? error : undefined;\n}\n\nfunction getWorkflowStepStatusLabel(status: WorkflowStepStatus): string {\n switch (status) {\n case 'pending':\n return 'Pending';\n case 'running':\n return 'Running';\n case 'suspended':\n return 'Paused';\n case 'completed':\n return 'Completed';\n case 'error':\n return 'Error';\n default:\n return assertNever(status);\n }\n}\n\nexport interface WorkflowStepStatusIconProps {\n status: WorkflowStepStatus;\n index: number;\n className?: string;\n}\n\nexport function WorkflowStepStatusIcon({\n status,\n index,\n className,\n}: WorkflowStepStatusIconProps) {\n const iconClass = cn(workflowStepIconVariants({ status }), className);\n\n switch (status) {\n case 'pending':\n return (\n <div data-slot=\"workflow-step-icon\" className={iconClass}>\n <span className=\"text-xs font-medium\">{index + 1}</span>\n </div>\n );\n case 'running':\n return (\n <div\n data-slot=\"workflow-step-icon\"\n className={cn(\n iconClass,\n 'delight-status-pulse motion-reduce:!animate-none',\n )}\n >\n <Loader className=\"size-3 animate-spin motion-reduce:animate-none\" />\n </div>\n );\n case 'suspended':\n return (\n <div data-slot=\"workflow-step-icon\" className={iconClass}>\n <Pause className=\"size-3\" />\n </div>\n );\n case 'completed':\n return (\n <div\n data-slot=\"workflow-step-icon\"\n className={cn(\n iconClass,\n 'delight-check-bounce motion-reduce:!animate-none',\n )}\n >\n <Check className=\"size-3\" />\n </div>\n );\n case 'error':\n return (\n <div\n data-slot=\"workflow-step-icon\"\n className={cn(iconClass, 'delight-shake motion-reduce:!animate-none')}\n >\n <AlertCircle className=\"size-3\" />\n </div>\n );\n default:\n return assertNever(status);\n }\n}\n\nWorkflowStepStatusIcon.displayName = 'WorkflowStepStatusIcon';\n\nexport interface WorkflowStepItemProps {\n step: WorkflowStepViewModel;\n index: number;\n isLast: boolean;\n appearance?: WorkflowStepAppearance;\n itemSlot?: string;\n expandable?: boolean;\n expanded: boolean;\n active?: boolean;\n onExpandedChange: () => void;\n}\n\nexport function WorkflowStepItem({\n step,\n index,\n isLast,\n appearance = 'contained',\n itemSlot = 'workflow-step-item',\n expandable = true,\n expanded,\n active = false,\n onExpandedChange,\n}: WorkflowStepItemProps) {\n const contentId = React.useId();\n const errorDescriptionId = React.useId();\n const normalizedContent = normalizeWorkflowStepContent(step.content);\n const hasContent = normalizedContent.hasRenderableContent;\n const error = getNonBlankWorkflowStepError(step.error);\n const hasError = error !== undefined;\n const hasExpandableDetails = hasContent || hasError;\n const isDisclosureControl = hasExpandableDetails && expandable;\n const prefersReducedMotion = useReducedMotion();\n const appearanceConfig = workflowStepAppearanceConfig[appearance];\n const disclosureTransition = {\n duration: prefersReducedMotion ? 0 : 0.2,\n };\n const stepContent = (\n <>\n <WorkflowStepStatusIcon status={step.status} index={index} />\n\n <div className=\"min-w-0 flex-1 text-start\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'text-sm font-medium',\n step.status === 'pending'\n ? 'text-text-quaternary'\n : 'text-foreground',\n )}\n >\n {step.title}\n </span>\n <span className=\"text-xs text-secondary-foreground\">\n {getWorkflowStepStatusLabel(step.status)}\n </span>\n {step.durationMs !== undefined && (\n <span className=\"text-xs text-muted-foreground\">\n {formatWorkflowStepDuration(step.durationMs)}\n </span>\n )}\n </div>\n {step.description && (\n <p className=\"mt-0.5 text-xs text-text-quaternary\">\n {step.description}\n </p>\n )}\n </div>\n\n {isDisclosureControl && (\n <div className=\"shrink-0\">\n {expanded ? (\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"size-4 text-muted-foreground rtl:rotate-180\" />\n )}\n </div>\n )}\n </>\n );\n\n return (\n <div\n data-slot={itemSlot}\n data-step-status={step.status}\n data-appearance={appearance}\n className={cn(\n appearanceConfig.rootClassName,\n appearanceConfig.hasDivider && !isLast && 'border-b border-border',\n )}\n >\n {isDisclosureControl ? (\n <button\n type=\"button\"\n onClick={onExpandedChange}\n aria-current={active ? 'step' : undefined}\n aria-expanded={expanded}\n aria-controls={contentId}\n aria-describedby={hasError ? errorDescriptionId : undefined}\n className={cn(\n workflowStepItemVariants({ status: step.status }),\n 'w-full cursor-pointer hover:bg-muted focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring',\n )}\n >\n {stepContent}\n </button>\n ) : (\n <div\n aria-current={active ? 'step' : undefined}\n aria-describedby={hasError ? errorDescriptionId : undefined}\n className={cn(\n workflowStepItemVariants({ status: step.status }),\n 'w-full',\n )}\n >\n {stepContent}\n </div>\n )}\n\n <AnimatePresence initial={false}>\n {expanded && hasExpandableDetails && (\n <motion.div\n id={contentId}\n data-slot=\"workflow-step-panel\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={disclosureTransition}\n className=\"overflow-hidden motion-reduce:transition-none\"\n >\n <div className=\"px-4 pb-3 ps-12\">\n {hasError && (\n <div className=\"rounded-lg border border-destructive/50 bg-destructive/10 p-3\">\n <div className=\"flex items-start gap-2\">\n <AlertCircle className=\"mt-0.5 size-4 shrink-0 text-destructive\" />\n <p className=\"text-sm text-destructive\">{error}</p>\n </div>\n </div>\n )}\n {hasContent && (\n <div className={hasError ? 'mt-3' : undefined}>\n {normalizedContent.content}\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {hasError && (\n <span id={errorDescriptionId} className=\"sr-only\">\n {error}\n </span>\n )}\n\n {appearanceConfig.hasConnector && !isLast && (\n <div\n data-slot=\"workflow-step-connector\"\n aria-hidden=\"true\"\n className=\"absolute top-8 -bottom-3 start-6 w-px bg-border\"\n />\n )}\n </div>\n );\n}\n\nWorkflowStepItem.displayName = 'WorkflowStepItem';\n\nexport function WorkflowStepRenderer({\n steps,\n appearance = 'contained',\n itemSlot = 'workflow-step-item',\n expandable = true,\n activeStepId,\n expandedStepIds: controlledExpandedStepIds,\n defaultExpandedStepIds = [],\n onExpandedStepIdsChange,\n className,\n renderItems = true,\n}: PrivateWorkflowStepRendererProps) {\n const isControlled = controlledExpandedStepIds !== undefined;\n const controlledSnapshot = isControlled\n ? [...controlledExpandedStepIds]\n : undefined;\n const [uncontrolledExpandedStepIds, setUncontrolledExpandedStepIds] =\n React.useState<readonly string[]>(() =>\n normalizeExpandedWorkflowStepIds(defaultExpandedStepIds, steps),\n );\n const lastControlledExpandedStepIdsRef = React.useRef<readonly string[]>(\n controlledSnapshot ?? [],\n );\n const wasControlledRef = React.useRef(isControlled);\n const rawExpandedStepIds = isControlled\n ? controlledExpandedStepIds\n : uncontrolledExpandedStepIds;\n const visibleExpandedStepIds = normalizeExpandedWorkflowStepIds(\n rawExpandedStepIds,\n steps,\n );\n const expandedSet = new Set(visibleExpandedStepIds);\n\n React.useLayoutEffect(() => {\n if (controlledSnapshot !== undefined) {\n lastControlledExpandedStepIdsRef.current = controlledSnapshot;\n }\n }, [controlledSnapshot]);\n\n React.useLayoutEffect(() => {\n const wasControlled = wasControlledRef.current;\n wasControlledRef.current = isControlled;\n if (isControlled) return;\n\n setUncontrolledExpandedStepIds((current) => {\n const source = wasControlled\n ? lastControlledExpandedStepIdsRef.current\n : current;\n const reconciled = normalizeExpandedWorkflowStepIds(source, steps);\n return areWorkflowStepIdsEqual(reconciled, current)\n ? current\n : reconciled;\n });\n }, [isControlled, steps]);\n\n const toggleStep = (id: string) => {\n const next = new Set(visibleExpandedStepIds);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n const normalizedNext = normalizeExpandedWorkflowStepIds([...next], steps);\n if (!isControlled) {\n setUncontrolledExpandedStepIds([...normalizedNext]);\n }\n onExpandedStepIdsChange?.([...normalizedNext]);\n };\n\n if (!renderItems) return null;\n\n return (\n <ol\n data-slot=\"workflow-step-list\"\n data-appearance={appearance}\n className={cn('m-0 list-none p-0', className)}\n >\n {steps.map((step, index) => (\n <li key={step.id}>\n <WorkflowStepItem\n step={step}\n index={index}\n isLast={index === steps.length - 1}\n appearance={appearance}\n itemSlot={itemSlot}\n expandable={expandable}\n expanded={expandedSet.has(step.id)}\n active={activeStepId === step.id}\n onExpandedChange={() => toggleStep(step.id)}\n />\n </li>\n ))}\n </ol>\n );\n}\n\nWorkflowStepRenderer.displayName = 'WorkflowStepRenderer';\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-step-renderer.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/loader.mjs","../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/pause.mjs","../../src/components/organisms/ai/_shared/format-ai-duration.ts","../../src/components/organisms/ai/_shared/workflow-step-renderer.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: \"M12 2v4\", key: \"3427ic\" }],\n [\"path\", { d: \"m16.2 7.8 2.9-2.9\", key: \"r700ao\" }],\n [\"path\", { d: \"M18 12h4\", key: \"wj9ykh\" }],\n [\"path\", { d: \"m16.2 16.2 2.9 2.9\", key: \"1bxg5t\" }],\n [\"path\", { d: \"M12 18v4\", key: \"jadmvz\" }],\n [\"path\", { d: \"m4.9 19.1 2.9-2.9\", key: \"bwix9q\" }],\n [\"path\", { d: \"M2 12h4\", key: \"j09sii\" }],\n [\"path\", { d: \"m4.9 4.9 2.9 2.9\", key: \"giyufr\" }]\n];\nconst Loader = createLucideIcon(\"loader\", __iconNode);\n\nexport { __iconNode, Loader as default };\n//# sourceMappingURL=loader.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 [\"rect\", { x: \"14\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"kaeet6\" }],\n [\"rect\", { x: \"5\", y: \"3\", width: \"5\", height: \"18\", rx: \"1\", key: \"1wsw3u\" }]\n];\nconst Pause = createLucideIcon(\"pause\", __iconNode);\n\nexport { __iconNode, Pause as default };\n//# sourceMappingURL=pause.mjs.map\n","export function formatAIDuration(durationMs: number): string {\n const totalSeconds = Math.max(0, Math.round(durationMs / 1000));\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n if (hours > 0) {\n return [hours ? `${hours}h` : '', minutes ? `${minutes}m` : '']\n .filter(Boolean)\n .join(' ');\n }\n if (minutes > 0) {\n return `${minutes}m${seconds ? ` ${seconds}s` : ''}`;\n }\n return `${totalSeconds}s`;\n}\n","import { cva } from 'class-variance-authority';\nimport {\n AlertCircle,\n Check,\n ChevronDown,\n ChevronRight,\n Loader,\n Pause,\n} from 'lucide-react';\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react';\nimport * as React from 'react';\nimport { assertNever, cn } from '@/lib/utils';\nimport { formatAIDuration } from './format-ai-duration';\n\nexport type WorkflowStepStatus =\n | 'pending'\n | 'running'\n | 'suspended'\n | 'completed'\n | 'error';\n\nexport type WorkflowStepAppearance = 'contained' | 'embedded' | 'timeline';\n\nexport interface WorkflowStepViewModel {\n id: string;\n title: string;\n description?: string;\n contextLabel?: string;\n status: WorkflowStepStatus;\n content?: React.ReactNode;\n durationMs?: number;\n error?: string;\n}\n\nexport interface WorkflowStepRendererProps {\n steps: readonly WorkflowStepViewModel[];\n appearance?: WorkflowStepAppearance;\n itemSlot?: string;\n expandable?: boolean;\n activeStepId?: string;\n expandedStepIds?: readonly string[];\n defaultExpandedStepIds?: readonly string[];\n onExpandedStepIdsChange?: (ids: readonly string[]) => void;\n className?: string;\n}\n\ninterface PrivateWorkflowStepRendererProps extends WorkflowStepRendererProps {\n renderItems?: boolean;\n}\n\nconst workflowStepItemStatusClasses = {\n pending: 'text-muted-foreground',\n running: 'text-primary',\n suspended: 'text-warning',\n completed: 'text-success',\n error: 'text-destructive',\n} as const satisfies Record<WorkflowStepStatus, string>;\n\nconst workflowStepIconStatusClasses = {\n pending: 'bg-accent text-muted-foreground',\n running: 'bg-primary/20 text-primary',\n suspended: 'bg-warning/20 text-warning',\n completed: 'bg-success/20 text-success',\n error: 'bg-destructive/20 text-destructive',\n} as const satisfies Record<WorkflowStepStatus, string>;\n\nexport const workflowStepItemVariants = cva(\n 'flex items-start gap-3 px-4 py-3 transition-colors motion-reduce:transition-none',\n {\n variants: {\n status: workflowStepItemStatusClasses,\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nexport const workflowStepIconVariants = cva(\n 'size-5 shrink-0 flex items-center justify-center rounded-full',\n {\n variants: {\n status: workflowStepIconStatusClasses,\n },\n defaultVariants: {\n status: 'pending',\n },\n },\n);\n\nconst workflowStepAppearanceConfig = {\n contained: {\n rootClassName: 'relative',\n hasDivider: true,\n hasConnector: false,\n },\n embedded: {\n rootClassName: 'relative',\n hasDivider: true,\n hasConnector: false,\n },\n timeline: {\n rootClassName: 'relative',\n hasDivider: false,\n hasConnector: true,\n },\n} as const satisfies Record<\n WorkflowStepAppearance,\n { rootClassName: string; hasDivider: boolean; hasConnector: boolean }\n>;\n\nexport function normalizeExpandedWorkflowStepIds(\n ids: readonly string[],\n steps: readonly WorkflowStepViewModel[],\n): string[] {\n const requested = new Set(ids);\n return steps.flatMap((step) => (requested.has(step.id) ? [step.id] : []));\n}\n\nfunction areWorkflowStepIdsEqual(\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 isIterableWorkflowStepContent(\n content: React.ReactNode,\n): content is Iterable<React.ReactNode> {\n return (\n typeof content === 'object' &&\n content !== null &&\n Symbol.iterator in content &&\n typeof (content as Iterable<React.ReactNode>)[Symbol.iterator] ===\n 'function'\n );\n}\n\nfunction isIteratorWorkflowStepContent(\n content: unknown,\n): content is Iterator<React.ReactNode> {\n return (\n typeof (content as Partial<Iterator<React.ReactNode>>).next === 'function'\n );\n}\n\ninterface NormalizedWorkflowStepContent {\n content: React.ReactNode;\n hasRenderableContent: boolean;\n changed: boolean;\n}\n\nconst normalizedOneShotWorkflowStepContent = new WeakMap<\n object,\n NormalizedWorkflowStepContent\n>();\n\nfunction normalizeIterableWorkflowStepContent(\n content: Iterable<React.ReactNode>,\n iterator: Iterator<React.ReactNode>,\n): NormalizedWorkflowStepContent {\n const normalizedChildren: React.ReactNode[] = [];\n let hasRenderableContent = false;\n let changed = !Array.isArray(content);\n\n for (let result = iterator.next(); !result.done; result = iterator.next()) {\n const normalizedChild = normalizeWorkflowStepContent(result.value);\n normalizedChildren.push(normalizedChild.content);\n hasRenderableContent ||= normalizedChild.hasRenderableContent;\n changed ||= normalizedChild.changed;\n }\n\n return {\n content: changed ? normalizedChildren : content,\n hasRenderableContent,\n changed,\n };\n}\n\nfunction normalizeWorkflowStepContent(\n content: React.ReactNode,\n): NormalizedWorkflowStepContent {\n if (\n content === null ||\n content === undefined ||\n typeof content === 'boolean' ||\n content === ''\n ) {\n return { content, hasRenderableContent: false, changed: false };\n }\n\n if (\n typeof content === 'string' ||\n typeof content === 'number' ||\n typeof content === 'bigint'\n ) {\n return { content, hasRenderableContent: true, changed: false };\n }\n\n if (React.isValidElement<{ children?: React.ReactNode }>(content)) {\n if (content.type !== React.Fragment) {\n return { content, hasRenderableContent: true, changed: false };\n }\n\n const normalizedChildren = normalizeWorkflowStepContent(\n content.props.children,\n );\n return {\n content: normalizedChildren.changed\n ? React.cloneElement(content, undefined, normalizedChildren.content)\n : content,\n hasRenderableContent: normalizedChildren.hasRenderableContent,\n changed: normalizedChildren.changed,\n };\n }\n\n if (isIterableWorkflowStepContent(content)) {\n const iterator = content[Symbol.iterator]();\n const oneShotCacheKey = isIteratorWorkflowStepContent(iterator)\n ? (iterator as object)\n : null;\n\n if (oneShotCacheKey !== null) {\n const cached = normalizedOneShotWorkflowStepContent.get(oneShotCacheKey);\n if (cached !== undefined) return cached;\n }\n\n const normalized = normalizeIterableWorkflowStepContent(content, iterator);\n if (oneShotCacheKey !== null) {\n normalizedOneShotWorkflowStepContent.set(oneShotCacheKey, normalized);\n }\n return normalized;\n }\n\n return { content, hasRenderableContent: true, changed: false };\n}\n\nfunction getNonBlankWorkflowStepError(\n error: string | undefined,\n): string | undefined {\n return error?.trim() ? error : undefined;\n}\n\nfunction getWorkflowStepStatusLabel(status: WorkflowStepStatus): string {\n switch (status) {\n case 'pending':\n return 'Pending';\n case 'running':\n return 'Running';\n case 'suspended':\n return 'Paused';\n case 'completed':\n return 'Completed';\n case 'error':\n return 'Error';\n default:\n return assertNever(status);\n }\n}\n\nexport interface WorkflowStepStatusIconProps {\n status: WorkflowStepStatus;\n index: number;\n className?: string;\n}\n\nexport function WorkflowStepStatusIcon({\n status,\n index,\n className,\n}: WorkflowStepStatusIconProps) {\n const iconClass = cn(workflowStepIconVariants({ status }), className);\n\n switch (status) {\n case 'pending':\n return (\n <div data-slot=\"workflow-step-icon\" className={iconClass}>\n <span className=\"text-xs font-medium\">{index + 1}</span>\n </div>\n );\n case 'running':\n return (\n <div\n data-slot=\"workflow-step-icon\"\n className={cn(\n iconClass,\n 'delight-status-pulse motion-reduce:!animate-none',\n )}\n >\n <Loader className=\"size-3 animate-spin motion-reduce:animate-none\" />\n </div>\n );\n case 'suspended':\n return (\n <div data-slot=\"workflow-step-icon\" className={iconClass}>\n <Pause className=\"size-3\" />\n </div>\n );\n case 'completed':\n return (\n <div\n data-slot=\"workflow-step-icon\"\n className={cn(\n iconClass,\n 'delight-check-bounce motion-reduce:!animate-none',\n )}\n >\n <Check className=\"size-3\" />\n </div>\n );\n case 'error':\n return (\n <div\n data-slot=\"workflow-step-icon\"\n className={cn(iconClass, 'delight-shake motion-reduce:!animate-none')}\n >\n <AlertCircle className=\"size-3\" />\n </div>\n );\n default:\n return assertNever(status);\n }\n}\n\nWorkflowStepStatusIcon.displayName = 'WorkflowStepStatusIcon';\n\nexport interface WorkflowStepItemProps {\n step: WorkflowStepViewModel;\n index: number;\n isLast: boolean;\n appearance?: WorkflowStepAppearance;\n itemSlot?: string;\n expandable?: boolean;\n expanded: boolean;\n active?: boolean;\n onExpandedChange: () => void;\n}\n\nexport function WorkflowStepItem({\n step,\n index,\n isLast,\n appearance = 'contained',\n itemSlot = 'workflow-step-item',\n expandable = true,\n expanded,\n active = false,\n onExpandedChange,\n}: WorkflowStepItemProps) {\n const contentId = React.useId();\n const errorDescriptionId = React.useId();\n const normalizedContent = normalizeWorkflowStepContent(step.content);\n const hasContent = normalizedContent.hasRenderableContent;\n const error = getNonBlankWorkflowStepError(step.error);\n const hasError = error !== undefined;\n const hasExpandableDetails = hasContent || hasError;\n const isDisclosureControl = hasExpandableDetails && expandable;\n const prefersReducedMotion = useReducedMotion();\n const appearanceConfig = workflowStepAppearanceConfig[appearance];\n const disclosureTransition = {\n duration: prefersReducedMotion ? 0 : 0.2,\n };\n const stepContent = (\n <>\n <WorkflowStepStatusIcon status={step.status} index={index} />\n\n <div className=\"min-w-0 flex-1 text-start\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {step.contextLabel && (\n <span\n data-slot=\"workflow-step-context\"\n className=\"rounded-full border border-border px-2 py-0.5 text-[0.6875rem] font-medium leading-none text-secondary-foreground\"\n >\n {step.contextLabel}\n </span>\n )}\n <span\n className={cn(\n 'text-sm font-medium',\n step.status === 'pending'\n ? 'text-text-quaternary'\n : 'text-foreground',\n )}\n >\n {step.title}\n </span>\n <span className=\"text-xs text-secondary-foreground\">\n {getWorkflowStepStatusLabel(step.status)}\n </span>\n {step.durationMs !== undefined && (\n <span className=\"text-xs text-muted-foreground\">\n {formatAIDuration(step.durationMs)}\n </span>\n )}\n </div>\n {step.description && (\n <p className=\"mt-0.5 text-xs text-text-quaternary\">\n {step.description}\n </p>\n )}\n </div>\n\n {isDisclosureControl && (\n <div className=\"shrink-0\">\n {expanded ? (\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"size-4 text-muted-foreground rtl:rotate-180\" />\n )}\n </div>\n )}\n </>\n );\n\n return (\n <div\n data-slot={itemSlot}\n data-step-status={step.status}\n data-appearance={appearance}\n className={cn(\n appearanceConfig.rootClassName,\n appearanceConfig.hasDivider && !isLast && 'border-b border-border',\n )}\n >\n {isDisclosureControl ? (\n <button\n type=\"button\"\n onClick={onExpandedChange}\n aria-current={active ? 'step' : undefined}\n aria-expanded={expanded}\n aria-controls={contentId}\n aria-describedby={hasError ? errorDescriptionId : undefined}\n className={cn(\n workflowStepItemVariants({ status: step.status }),\n 'w-full cursor-pointer hover:bg-muted focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ring',\n )}\n >\n {stepContent}\n </button>\n ) : (\n <div\n aria-current={active ? 'step' : undefined}\n aria-describedby={hasError ? errorDescriptionId : undefined}\n className={cn(\n workflowStepItemVariants({ status: step.status }),\n 'w-full',\n )}\n >\n {stepContent}\n </div>\n )}\n\n <AnimatePresence initial={false}>\n {expanded && hasExpandableDetails && (\n <motion.div\n id={contentId}\n data-slot=\"workflow-step-panel\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={disclosureTransition}\n className=\"overflow-hidden motion-reduce:transition-none\"\n >\n <div className=\"px-4 pb-3 ps-12\">\n {hasError && (\n <div className=\"rounded-lg border border-destructive/50 bg-destructive/10 p-3\">\n <div className=\"flex items-start gap-2\">\n <AlertCircle className=\"mt-0.5 size-4 shrink-0 text-destructive\" />\n <p className=\"text-sm text-destructive\">{error}</p>\n </div>\n </div>\n )}\n {hasContent && (\n <div className={hasError ? 'mt-3' : undefined}>\n {normalizedContent.content}\n </div>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {hasError && (\n <span id={errorDescriptionId} className=\"sr-only\">\n {error}\n </span>\n )}\n\n {appearanceConfig.hasConnector && !isLast && (\n <div\n data-slot=\"workflow-step-connector\"\n aria-hidden=\"true\"\n className=\"absolute top-8 -bottom-3 start-6 w-px bg-border\"\n />\n )}\n </div>\n );\n}\n\nWorkflowStepItem.displayName = 'WorkflowStepItem';\n\nexport function WorkflowStepRenderer({\n steps,\n appearance = 'contained',\n itemSlot = 'workflow-step-item',\n expandable = true,\n activeStepId,\n expandedStepIds: controlledExpandedStepIds,\n defaultExpandedStepIds = [],\n onExpandedStepIdsChange,\n className,\n renderItems = true,\n}: PrivateWorkflowStepRendererProps) {\n const isControlled = controlledExpandedStepIds !== undefined;\n const controlledSnapshot = isControlled\n ? [...controlledExpandedStepIds]\n : undefined;\n const [uncontrolledExpandedStepIds, setUncontrolledExpandedStepIds] =\n React.useState<readonly string[]>(() =>\n normalizeExpandedWorkflowStepIds(defaultExpandedStepIds, steps),\n );\n const lastControlledExpandedStepIdsRef = React.useRef<readonly string[]>(\n controlledSnapshot ?? [],\n );\n const wasControlledRef = React.useRef(isControlled);\n const rawExpandedStepIds = isControlled\n ? controlledExpandedStepIds\n : uncontrolledExpandedStepIds;\n const visibleExpandedStepIds = normalizeExpandedWorkflowStepIds(\n rawExpandedStepIds,\n steps,\n );\n const expandedSet = new Set(visibleExpandedStepIds);\n\n React.useLayoutEffect(() => {\n if (controlledSnapshot !== undefined) {\n lastControlledExpandedStepIdsRef.current = controlledSnapshot;\n }\n }, [controlledSnapshot]);\n\n React.useLayoutEffect(() => {\n const wasControlled = wasControlledRef.current;\n wasControlledRef.current = isControlled;\n if (isControlled) return;\n\n setUncontrolledExpandedStepIds((current) => {\n const source = wasControlled\n ? lastControlledExpandedStepIdsRef.current\n : current;\n const reconciled = normalizeExpandedWorkflowStepIds(source, steps);\n return areWorkflowStepIdsEqual(reconciled, current)\n ? current\n : reconciled;\n });\n }, [isControlled, steps]);\n\n const toggleStep = (id: string) => {\n const next = new Set(visibleExpandedStepIds);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n const normalizedNext = normalizeExpandedWorkflowStepIds([...next], steps);\n if (!isControlled) {\n setUncontrolledExpandedStepIds([...normalizedNext]);\n }\n onExpandedStepIdsChange?.([...normalizedNext]);\n };\n\n if (!renderItems) return null;\n\n return (\n <ol\n data-slot=\"workflow-step-list\"\n data-appearance={appearance}\n className={cn('m-0 list-none p-0', className)}\n >\n {steps.map((step, index) => (\n <li key={step.id}>\n <WorkflowStepItem\n step={step}\n index={index}\n isLast={index === steps.length - 1}\n appearance={appearance}\n itemSlot={itemSlot}\n expandable={expandable}\n expanded={expandedSet.has(step.id)}\n active={activeStepId === step.id}\n onExpandedChange={() => toggleStep(step.id)}\n />\n </li>\n ))}\n </ol>\n );\n}\n\nWorkflowStepRenderer.displayName = 'WorkflowStepRenderer';\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@ name: humain-ui
|
|
|
3
3
|
description: Use when building, migrating, auditing, or bootstrapping React UI with @humain/ui, including pages, dashboards, app shells, forms, dialogs, data tables, charts, AI chat workspaces, or Figma-to-Humain mapping.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Humain Foundation UI (v2.1.
|
|
6
|
+
# Humain Foundation UI (v2.1.65)
|
|
7
7
|
|
|
8
8
|
Build product UI with `@humain/ui`, a React 18/19 component library with Tailwind v4, dark mode, design tokens, Web Component projections, and AI-facing references.
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: humain-ui-wc
|
|
|
3
3
|
description: Use when building browser-native prototypes, iframe artifacts, static HTML, custom-element demos, framework-neutral integrations, or any HUMAIN UI that must use hf-* Web Components instead of React JSX.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Humain Foundation UI Web Components (v2.1.
|
|
6
|
+
# Humain Foundation UI Web Components (v2.1.65)
|
|
7
7
|
|
|
8
8
|
**Identity** - You build HUMAIN interfaces with `hf-*` custom elements. You keep the same product taste, spacing discipline, and component intent as the React `humain-ui` skill, but you only use Web Component APIs that actually exist in the manifest.
|
|
9
9
|
|
|
Binary file
|
package/skills/humain-ui.skill
CHANGED
|
Binary file
|
package/dist/index182.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { cn } from "./index2.js";
|
|
2
|
-
/* empty css */
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { useAnimate, useReducedMotion } from "motion/react";
|
|
6
|
-
//#region src/components/organisms/ai/AIThinkingLoader/AIThinkingLoader.tsx
|
|
7
|
-
function AnimatedProgressOvals({ className, animationDuration = 3e3, easing = "ease-in-out" }) {
|
|
8
|
-
const prefersReducedMotion = useReducedMotion();
|
|
9
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
10
|
-
"data-slot": "thinking-oval",
|
|
11
|
-
"aria-hidden": "true",
|
|
12
|
-
className: cn("absolute top-0 bottom-0 pointer-events-none", className),
|
|
13
|
-
style: prefersReducedMotion ? void 0 : {
|
|
14
|
-
left: 0,
|
|
15
|
-
right: "100%",
|
|
16
|
-
animationName: "thinking-grow-empty",
|
|
17
|
-
animationDuration: `${animationDuration}ms`,
|
|
18
|
-
animationTimingFunction: easing,
|
|
19
|
-
animationIterationCount: "infinite",
|
|
20
|
-
willChange: "left, right, transform"
|
|
21
|
-
},
|
|
22
|
-
children: [
|
|
23
|
-
/* @__PURE__ */ jsx("div", {
|
|
24
|
-
className: "absolute rounded-full bg-air-200 opacity-20",
|
|
25
|
-
style: { inset: -40 }
|
|
26
|
-
}),
|
|
27
|
-
/* @__PURE__ */ jsx("div", {
|
|
28
|
-
className: "absolute rounded-full bg-air-200 opacity-50",
|
|
29
|
-
style: { inset: -20 }
|
|
30
|
-
}),
|
|
31
|
-
/* @__PURE__ */ jsx("div", {
|
|
32
|
-
className: "absolute rounded-full bg-air-200 opacity-70",
|
|
33
|
-
style: { inset: 0 }
|
|
34
|
-
})
|
|
35
|
-
]
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
AnimatedProgressOvals.displayName = "AnimatedProgressOvals";
|
|
39
|
-
function CountdownTimer({ initialTime = 5, isActive = true, onComplete, className }) {
|
|
40
|
-
const [timeLeft, setTimeLeft] = React.useState(initialTime);
|
|
41
|
-
const [scope, animate] = useAnimate();
|
|
42
|
-
const prefersReducedMotion = useReducedMotion();
|
|
43
|
-
const isFirstTick = React.useRef(true);
|
|
44
|
-
React.useEffect(() => {
|
|
45
|
-
setTimeLeft(initialTime);
|
|
46
|
-
}, [initialTime]);
|
|
47
|
-
React.useEffect(() => {
|
|
48
|
-
if (!isActive) return;
|
|
49
|
-
const timer = setInterval(() => {
|
|
50
|
-
setTimeLeft((prev) => {
|
|
51
|
-
if (prev <= 1) {
|
|
52
|
-
onComplete?.();
|
|
53
|
-
return initialTime;
|
|
54
|
-
}
|
|
55
|
-
return prev - 1;
|
|
56
|
-
});
|
|
57
|
-
}, 1e3);
|
|
58
|
-
return () => clearInterval(timer);
|
|
59
|
-
}, [
|
|
60
|
-
isActive,
|
|
61
|
-
initialTime,
|
|
62
|
-
onComplete
|
|
63
|
-
]);
|
|
64
|
-
React.useEffect(() => {
|
|
65
|
-
if (isFirstTick.current) {
|
|
66
|
-
isFirstTick.current = false;
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (!prefersReducedMotion && scope.current) animate(scope.current, {
|
|
70
|
-
scale: [1.12, 1],
|
|
71
|
-
y: [-2, 0]
|
|
72
|
-
}, {
|
|
73
|
-
duration: .3,
|
|
74
|
-
ease: [
|
|
75
|
-
.25,
|
|
76
|
-
1,
|
|
77
|
-
.5,
|
|
78
|
-
1
|
|
79
|
-
]
|
|
80
|
-
});
|
|
81
|
-
}, [
|
|
82
|
-
timeLeft,
|
|
83
|
-
animate,
|
|
84
|
-
prefersReducedMotion,
|
|
85
|
-
scope
|
|
86
|
-
]);
|
|
87
|
-
return /* @__PURE__ */ jsx("div", {
|
|
88
|
-
ref: scope,
|
|
89
|
-
role: "timer",
|
|
90
|
-
"aria-label": `${timeLeft} seconds remaining`,
|
|
91
|
-
className: cn("flex items-center justify-center px-3 py-2 rounded-full bg-card/20 shrink-0", !prefersReducedMotion && "animate-[thinking-pop-in_0.3s_ease-out_0.3s_both]", className),
|
|
92
|
-
children: /* @__PURE__ */ jsxs("span", {
|
|
93
|
-
className: "text-sm text-foreground tabular-nums",
|
|
94
|
-
children: [timeLeft, "s"]
|
|
95
|
-
})
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
CountdownTimer.displayName = "CountdownTimer";
|
|
99
|
-
function AIThinkingLoader({ loadingText = "Transferring to AI Agent: Meeting Manager", easing = "ease-in-out", showCountdown = true, countdownTime = 5, animationDuration = 3e3, onAnimationComplete, className }) {
|
|
100
|
-
const clipRef = React.useRef(null);
|
|
101
|
-
const prefersReducedMotion = useReducedMotion();
|
|
102
|
-
React.useEffect(() => {
|
|
103
|
-
if (!onAnimationComplete) return;
|
|
104
|
-
const oval = clipRef.current?.querySelector("[data-slot=\"thinking-oval\"]");
|
|
105
|
-
if (!oval) return;
|
|
106
|
-
const handler = () => onAnimationComplete();
|
|
107
|
-
oval.addEventListener("animationiteration", handler);
|
|
108
|
-
return () => oval.removeEventListener("animationiteration", handler);
|
|
109
|
-
}, [onAnimationComplete]);
|
|
110
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
111
|
-
"data-slot": "ai-thinking-loader",
|
|
112
|
-
role: "status",
|
|
113
|
-
"aria-live": "polite",
|
|
114
|
-
"aria-busy": "true",
|
|
115
|
-
"aria-label": loadingText,
|
|
116
|
-
className: cn("relative flex items-center justify-center gap-2 min-h-[3.25rem] px-4 py-2 rounded-full border border-border bg-card/60", className),
|
|
117
|
-
style: prefersReducedMotion ? void 0 : { animation: "thinking-fade-in 0.5s ease-out forwards, thinking-glow 4s ease-in-out 0.5s infinite" },
|
|
118
|
-
children: [
|
|
119
|
-
/* @__PURE__ */ jsx("div", {
|
|
120
|
-
ref: clipRef,
|
|
121
|
-
className: "absolute inset-0 overflow-clip rounded-full",
|
|
122
|
-
children: /* @__PURE__ */ jsx(AnimatedProgressOvals, {
|
|
123
|
-
easing,
|
|
124
|
-
animationDuration
|
|
125
|
-
})
|
|
126
|
-
}),
|
|
127
|
-
/* @__PURE__ */ jsx("span", {
|
|
128
|
-
className: cn("relative z-10 text-sm text-foreground whitespace-nowrap truncate font-medium", !prefersReducedMotion && "animate-[thinking-slide-in_0.35s_ease-out_0.15s_both]"),
|
|
129
|
-
children: loadingText
|
|
130
|
-
}),
|
|
131
|
-
showCountdown && /* @__PURE__ */ jsx(CountdownTimer, {
|
|
132
|
-
initialTime: countdownTime,
|
|
133
|
-
isActive: true,
|
|
134
|
-
className: "relative z-10"
|
|
135
|
-
})
|
|
136
|
-
]
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
AIThinkingLoader.displayName = "AIThinkingLoader";
|
|
140
|
-
//#endregion
|
|
141
|
-
export { AIThinkingLoader, CountdownTimer };
|
|
142
|
-
|
|
143
|
-
//# sourceMappingURL=index182.js.map
|
package/dist/index182.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index182.js","names":[],"sources":["../src/components/organisms/ai/AIThinkingLoader/AIThinkingLoader.tsx"],"sourcesContent":["import './AIThinkingLoader.css';\n\nimport { useAnimate, useReducedMotion } from 'motion/react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// Animated Progress Ovals\n\ninterface AnimatedProgressOvalsProps {\n className?: string;\n animationDuration?: number;\n easing?: string;\n}\n\nfunction AnimatedProgressOvals({\n className,\n animationDuration = 3000,\n easing = 'ease-in-out',\n}: AnimatedProgressOvalsProps) {\n const prefersReducedMotion = useReducedMotion();\n\n return (\n <div\n data-slot=\"thinking-oval\"\n aria-hidden=\"true\"\n className={cn('absolute top-0 bottom-0 pointer-events-none', className)}\n style={\n prefersReducedMotion\n ? undefined\n : {\n left: 0,\n right: '100%',\n animationName: 'thinking-grow-empty',\n animationDuration: `${animationDuration}ms`,\n animationTimingFunction: easing,\n animationIterationCount: 'infinite',\n willChange: 'left, right, transform',\n }\n }\n >\n <div\n className=\"absolute rounded-full bg-air-200 opacity-20\"\n style={{ inset: -40 }}\n />\n <div\n className=\"absolute rounded-full bg-air-200 opacity-50\"\n style={{ inset: -20 }}\n />\n <div\n className=\"absolute rounded-full bg-air-200 opacity-70\"\n style={{ inset: 0 }}\n />\n </div>\n );\n}\n\nAnimatedProgressOvals.displayName = 'AnimatedProgressOvals';\n\n// Countdown Timer\n\nexport interface CountdownTimerProps {\n initialTime?: number;\n isActive?: boolean;\n onComplete?: () => void;\n className?: string;\n}\n\nfunction CountdownTimer({\n initialTime = 5,\n isActive = true,\n onComplete,\n className,\n}: CountdownTimerProps) {\n const [timeLeft, setTimeLeft] = React.useState(initialTime);\n const [scope, animate] = useAnimate();\n const prefersReducedMotion = useReducedMotion();\n const isFirstTick = React.useRef(true);\n\n React.useEffect(() => {\n setTimeLeft(initialTime);\n }, [initialTime]);\n\n React.useEffect(() => {\n if (!isActive) return;\n\n const timer = setInterval(() => {\n setTimeLeft((prev) => {\n if (prev <= 1) {\n onComplete?.();\n return initialTime;\n }\n return prev - 1;\n });\n }, 1000);\n\n return () => clearInterval(timer);\n }, [isActive, initialTime, onComplete]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: timeLeft is an intentional trigger — re-run pulse animation on each tick\n React.useEffect(() => {\n if (isFirstTick.current) {\n isFirstTick.current = false;\n return;\n }\n if (!prefersReducedMotion && scope.current) {\n animate(\n scope.current,\n { scale: [1.12, 1], y: [-2, 0] },\n { duration: 0.3, ease: [0.25, 1, 0.5, 1] },\n );\n }\n }, [timeLeft, animate, prefersReducedMotion, scope]);\n\n return (\n <div\n ref={scope}\n role=\"timer\"\n aria-label={`${timeLeft} seconds remaining`}\n className={cn(\n 'flex items-center justify-center px-3 py-2 rounded-full bg-card/20 shrink-0',\n !prefersReducedMotion &&\n 'animate-[thinking-pop-in_0.3s_ease-out_0.3s_both]',\n className,\n )}\n >\n <span className=\"text-sm text-foreground tabular-nums\">{timeLeft}s</span>\n </div>\n );\n}\n\nCountdownTimer.displayName = 'CountdownTimer';\n\n// Main AIThinkingLoader Component\n\nexport interface AIThinkingLoaderProps {\n loadingText?: string;\n easing?: string;\n showCountdown?: boolean;\n countdownTime?: number;\n animationDuration?: number;\n onAnimationComplete?: () => void;\n className?: string;\n}\n\nfunction AIThinkingLoader({\n loadingText = 'Transferring to AI Agent: Meeting Manager',\n easing = 'ease-in-out',\n showCountdown = true,\n countdownTime = 5,\n animationDuration = 3000,\n onAnimationComplete,\n className,\n}: AIThinkingLoaderProps) {\n const clipRef = React.useRef<HTMLDivElement>(null);\n const prefersReducedMotion = useReducedMotion();\n\n React.useEffect(() => {\n if (!onAnimationComplete) return;\n\n const oval = clipRef.current?.querySelector('[data-slot=\"thinking-oval\"]');\n if (!oval) return;\n\n const handler = () => onAnimationComplete();\n oval.addEventListener('animationiteration', handler);\n return () => oval.removeEventListener('animationiteration', handler);\n }, [onAnimationComplete]);\n\n return (\n <div\n data-slot=\"ai-thinking-loader\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n aria-label={loadingText}\n className={cn(\n 'relative flex items-center justify-center gap-2 min-h-[3.25rem] px-4 py-2 rounded-full border border-border bg-card/60',\n className,\n )}\n style={\n prefersReducedMotion\n ? undefined\n : {\n animation:\n 'thinking-fade-in 0.5s ease-out forwards, thinking-glow 4s ease-in-out 0.5s infinite',\n }\n }\n >\n <div\n ref={clipRef}\n className=\"absolute inset-0 overflow-clip rounded-full\"\n >\n <AnimatedProgressOvals\n easing={easing}\n animationDuration={animationDuration}\n />\n </div>\n\n <span\n className={cn(\n 'relative z-10 text-sm text-foreground whitespace-nowrap truncate font-medium',\n !prefersReducedMotion &&\n 'animate-[thinking-slide-in_0.35s_ease-out_0.15s_both]',\n )}\n >\n {loadingText}\n </span>\n\n {showCountdown && (\n <CountdownTimer\n initialTime={countdownTime}\n isActive={true}\n className=\"relative z-10\"\n />\n )}\n </div>\n );\n}\n\nAIThinkingLoader.displayName = 'AIThinkingLoader';\n\nexport { AIThinkingLoader, CountdownTimer };\n"],"mappings":"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"}
|
package/dist/wc/wrench.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { t as a } from "./createLucideIcon.js";
|
|
2
|
-
var c = [["path", {
|
|
3
|
-
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",
|
|
4
|
-
key: "1ngwbx"
|
|
5
|
-
}]], r = a("wrench", c);
|
|
6
|
-
export {
|
|
7
|
-
r as t
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=wrench.js.map
|
package/dist/wc/wrench.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrench.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/wrench.mjs"],"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 [\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"],"x_google_ignoreList":[0],"mappings":";AASA,IAAM,IAAa,CACjB,CACE,QACA;AAAA,EACE,GAAG;AAAA,EACH,KAAK;AACP,CACF,CACF,GACM,IAAS,EAAiB,UAAU,CAAU"}
|
package/dist/wc-react/wrench.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { t as a } from "./createLucideIcon.js";
|
|
2
|
-
var c = [["path", {
|
|
3
|
-
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",
|
|
4
|
-
key: "1ngwbx"
|
|
5
|
-
}]], r = a("wrench", c);
|
|
6
|
-
export {
|
|
7
|
-
r as t
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=wrench.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrench.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/wrench.mjs"],"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 [\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"],"x_google_ignoreList":[0],"mappings":";AASA,IAAM,IAAa,CACjB,CACE,QACA;AAAA,EACE,GAAG;AAAA,EACH,KAAK;AACP,CACF,CACF,GACM,IAAS,EAAiB,UAAU,CAAU"}
|