@neuronection/assistant-ui 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +1 -0
- package/dist/chunk-PRHTQBCP.js +123 -0
- package/dist/chunk-PRHTQBCP.js.map +1 -0
- package/dist/flow-status.d.ts +37 -0
- package/dist/flow-status.js +3 -0
- package/dist/flow-status.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @neuronection/assistant-ui
|
|
2
2
|
|
|
3
|
+
## 0.18.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`f3f37bc`](https://github.com/neuronection/assistant-ui/commit/f3f37bc8ad65e3219e0d7997a786e8131c0de2c1) Thanks [@constLiakos](https://github.com/constLiakos)! - New `flow-status` module: `FlowStatusCard`, a presentational + controlled
|
|
8
|
+
card for multi-step AI flows (per-node status, current-step emphasis,
|
|
9
|
+
progress summary, error + `retryable`, controlled `onRetry`/`onCancel`/
|
|
10
|
+
`onResume`, `detail` payload slot). Apps map the family event vocabulary
|
|
11
|
+
(`flow_started`/`node_*`/`flow_failed`/`interrupt`) to props; the component
|
|
12
|
+
never sees transports.
|
|
13
|
+
|
|
3
14
|
## 0.17.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -85,6 +85,7 @@ Visual reference: [gallery](https://neuronection.github.io/assistant-ui/).
|
|
|
85
85
|
| [`error-banner`](./docs/components/error-banner.md) / [`undo-notice`](./docs/components/undo-notice.md) / [`empty-state`](./docs/components/empty-state.md) / [`spinner`](./docs/components/spinner.md) | presentational feedback: alert banner with `action` slot · undo toast · `EmptyState` · `Spinner` | [stories](https://neuronection.github.io/assistant-ui/?story=feedback--errors) |
|
|
86
86
|
| [`info-button`](./docs/components/info-button.md) / [`field-label`](./docs/components/field-label.md) / [`copy-button`](./docs/components/copy-button.md) / [`breadcrumbs`](./docs/components/breadcrumbs.md) | `InfoButton` · `FieldLabel` · `CopyButton` (clipboard + copied state) · `Breadcrumbs` (SPA links via `linkComponent`) | [stories](https://neuronection.github.io/assistant-ui/?story=phase2--copy-buttons) |
|
|
87
87
|
| [`ai-button`](./docs/components/ai-button.md) / [`ai-actions-dropdown`](./docs/components/ai-actions-dropdown.md) / [`ai-magic-fill`](./docs/components/ai-magic-fill.md) | AI affordances: ask-with-suggestions (controlled open, icon-only mode) · action menu + custom prompt · describe-in-words fill modal — API calls stay app-side | [stories](https://neuronection.github.io/assistant-ui/?story=ai-patterns--ai-buttons) |
|
|
88
|
+
| [`flow-status`](./docs/components/flow-status.md) | `FlowStatusCard` (multi-step AI-flow progress from the family event vocabulary: per-node status, current-step emphasis, progress summary, error + retryable, controlled retry/cancel/resume, `detail` slot for HITL cards) | [stories](https://neuronection.github.io/assistant-ui/?story=flow-status--running) |
|
|
88
89
|
| [`settings-shell`](./docs/components/settings-shell.md) / [`provider-form`](./docs/components/provider-form.md) / [`connection-test-row`](./docs/components/connection-test-row.md) | `SettingsShell` (controlled two-pane nav) · `ProviderForm` (write-only API-key field) · `ConnectionTestRow` (idle/testing/ok/fail + latency, `inline` variant + meta slot) | [stories](https://neuronection.github.io/assistant-ui/?story=settings-trio--provider-form-story) |
|
|
89
90
|
| [`sidebar-nav`](./docs/components/sidebar-nav.md) | `SidebarNav` (family-standard vertical nav: groups + sections, badges, controlled active id, pinned secondary items, optional collapsed icon rail with hover flyouts, header/footer slots) | [stories](https://neuronection.github.io/assistant-ui/?story=sidebar-nav--groups-story) |
|
|
90
91
|
| [`user-menu`](./docs/components/user-menu.md) | `UserMenu` (avatar/identity trigger + action menu incl. checkable items; composed over `Menu`) | [stories](https://neuronection.github.io/assistant-ui/?story=user-menu--checkable-items-story) |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Button } from './chunk-GTXGTQ6F.js';
|
|
2
|
+
import { Spinner } from './chunk-INTST5VG.js';
|
|
3
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { PauseCircle, TriangleAlert, Check, CircleDashed } from 'lucide-react';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var stepIcons = {
|
|
9
|
+
pending: { icon: CircleDashed, tone: "text-[var(--as-muted-fg)]" },
|
|
10
|
+
running: { icon: null, tone: "text-[var(--as-primary)]" },
|
|
11
|
+
done: { icon: Check, tone: "text-[var(--as-success)]" },
|
|
12
|
+
failed: { icon: TriangleAlert, tone: "text-[var(--as-danger)]" },
|
|
13
|
+
interrupted: { icon: PauseCircle, tone: "text-[var(--as-warning)]" }
|
|
14
|
+
};
|
|
15
|
+
var FlowStatusCard = React.forwardRef(function FlowStatusCard2({
|
|
16
|
+
title,
|
|
17
|
+
steps,
|
|
18
|
+
status,
|
|
19
|
+
error,
|
|
20
|
+
onRetry,
|
|
21
|
+
onCancel,
|
|
22
|
+
onResume,
|
|
23
|
+
detail,
|
|
24
|
+
labels,
|
|
25
|
+
className
|
|
26
|
+
}, ref) {
|
|
27
|
+
const completed = steps.filter((step) => step.status === "done").length;
|
|
28
|
+
const current = steps.find((step) => step.status === "running");
|
|
29
|
+
const currentNumber = steps.findIndex((step) => step.id === current?.id) + 1;
|
|
30
|
+
const progress = steps.length > 0 ? `${status === "running" ? currentNumber : completed}/${steps.length}` : null;
|
|
31
|
+
const overall = stepIcons[status];
|
|
32
|
+
const showRetry = Boolean(onRetry && error?.retryable);
|
|
33
|
+
const showCancel = Boolean(onCancel && status === "running");
|
|
34
|
+
const showResume = Boolean(onResume && status === "interrupted");
|
|
35
|
+
return /* @__PURE__ */ jsxs(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
ref,
|
|
39
|
+
"data-as": "flow-status-card",
|
|
40
|
+
"data-status": status,
|
|
41
|
+
className: cn(
|
|
42
|
+
"flex w-full flex-col gap-3 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-4",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
47
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-[var(--as-fg)]", children: title }),
|
|
48
|
+
/* @__PURE__ */ jsxs(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
role: "status",
|
|
52
|
+
className: cn(
|
|
53
|
+
"flex shrink-0 items-center gap-1.5 text-xs",
|
|
54
|
+
overall.tone
|
|
55
|
+
),
|
|
56
|
+
children: [
|
|
57
|
+
status === "running" ? /* @__PURE__ */ jsx(Spinner, { size: "sm", className: "text-[var(--as-primary)]" }) : overall.icon && /* @__PURE__ */ jsx(overall.icon, { className: "size-3.5", "aria-hidden": true }),
|
|
58
|
+
progress ? /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: progress }) : null
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }),
|
|
63
|
+
status === "running" && current ? /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--as-muted-fg)]", children: current.label }) : null,
|
|
64
|
+
steps.length > 0 ? /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-2", children: steps.map((step) => {
|
|
65
|
+
const stepIcon = stepIcons[step.status];
|
|
66
|
+
return /* @__PURE__ */ jsxs(
|
|
67
|
+
"li",
|
|
68
|
+
{
|
|
69
|
+
"data-status": step.status,
|
|
70
|
+
"aria-current": step.status === "running" && status === "running" ? "step" : void 0,
|
|
71
|
+
className: "flex items-center gap-2.5",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
"span",
|
|
75
|
+
{
|
|
76
|
+
className: cn(
|
|
77
|
+
"flex size-4 shrink-0 items-center justify-center",
|
|
78
|
+
stepIcon.tone
|
|
79
|
+
),
|
|
80
|
+
children: step.status === "running" ? /* @__PURE__ */ jsx(Spinner, { size: "sm", className: "text-[var(--as-primary)]" }) : stepIcon.icon && /* @__PURE__ */ jsx(stepIcon.icon, { className: "size-4", "aria-hidden": true })
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
"span",
|
|
85
|
+
{
|
|
86
|
+
className: cn(
|
|
87
|
+
"text-sm",
|
|
88
|
+
step.status === "running" ? "font-medium text-[var(--as-fg)]" : "text-[var(--as-muted-fg)]"
|
|
89
|
+
),
|
|
90
|
+
children: step.label
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
step.id
|
|
96
|
+
);
|
|
97
|
+
}) }) : null,
|
|
98
|
+
status === "failed" && error ? /* @__PURE__ */ jsxs(
|
|
99
|
+
"div",
|
|
100
|
+
{
|
|
101
|
+
role: "alert",
|
|
102
|
+
"data-as": "flow-status-card-error",
|
|
103
|
+
className: "flex flex-col gap-1 rounded-[var(--as-radius)] border border-[var(--as-danger)]/40 bg-[var(--as-danger)]/10 px-3 py-2 text-xs text-[var(--as-danger)]",
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono font-semibold uppercase tracking-wide", children: error.code }),
|
|
106
|
+
/* @__PURE__ */ jsx("span", { className: "whitespace-pre-wrap break-words", children: error.message })
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
) : null,
|
|
110
|
+
detail ? /* @__PURE__ */ jsx("div", { children: detail }) : null,
|
|
111
|
+
showRetry || showCancel || showResume ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [
|
|
112
|
+
showCancel ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: onCancel, children: labels?.cancel ?? "Cancel" }) : null,
|
|
113
|
+
showResume ? /* @__PURE__ */ jsx(Button, { size: "sm", onClick: onResume, children: labels?.resume ?? "Resume" }) : null,
|
|
114
|
+
showRetry ? /* @__PURE__ */ jsx(Button, { size: "sm", onClick: onRetry, children: labels?.retry ?? "Retry" }) : null
|
|
115
|
+
] }) : null
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
export { FlowStatusCard };
|
|
122
|
+
//# sourceMappingURL=chunk-PRHTQBCP.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-PRHTQBCP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/flow-status/FlowStatusCard.tsx"],"names":["FlowStatusCard"],"mappings":";;;;;;;AAgDA,IAAM,SAAA,GAGF;AAAA,EACF,OAAA,EAAS,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,2BAAA,EAA4B;AAAA,EACjE,OAAA,EAAS,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,0BAAA,EAA2B;AAAA,EACxD,IAAA,EAAM,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,0BAAA,EAA2B;AAAA,EACtD,MAAA,EAAQ,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,yBAAA,EAA0B;AAAA,EAC/D,WAAA,EAAa,EAAE,IAAA,EAAM,WAAA,EAAa,MAAM,0BAAA;AAC1C,CAAA;AAEO,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA,CAGlC,SAASA,eAAAA,CACT;AAAA,EACE,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AACjE,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,SAAS,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,EAAA,KAAO,OAAA,EAAS,EAAE,CAAA,GAAI,CAAA;AAC3E,EAAA,MAAM,QAAA,GACJ,KAAA,CAAM,MAAA,GAAS,CAAA,GACX,CAAA,EAAG,MAAA,KAAW,SAAA,GAAY,aAAA,GAAgB,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,CAAA,CAAA,GACnE,IAAA;AACN,EAAA,MAAM,OAAA,GAAU,UAAU,MAAM,CAAA;AAEhC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,IAAW,KAAA,EAAO,SAAS,CAAA;AACrD,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,MAAA,KAAW,SAAS,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,MAAA,KAAW,aAAa,CAAA;AAE/D,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAQ,kBAAA;AAAA,MACR,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,6HAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BAChE,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAW,EAAA;AAAA,gBACT,4CAAA;AAAA,gBACA,OAAA,CAAQ;AAAA,eACV;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,MAAA,KAAW,4BACV,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,WAAU,0BAAA,EAA2B,CAAA,GAExD,OAAA,CAAQ,IAAA,wBAAS,OAAA,CAAQ,IAAA,EAAR,EAAa,SAAA,EAAU,UAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,gBAEhE,2BAAW,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAgB,oBAAS,CAAA,GAAU;AAAA;AAAA;AAAA;AACjE,SAAA,EACF,CAAA;AAAA,QACC,MAAA,KAAW,aAAa,OAAA,mBACvB,GAAA,CAAC,OAAE,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA,OAAA,CAAQ,KAAA,EAAM,CAAA,GAC9D,IAAA;AAAA,QACH,KAAA,CAAM,MAAA,GAAS,CAAA,mBACd,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,qBAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AACtC,UAAA,uBACE,IAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,eAAa,IAAA,CAAK,MAAA;AAAA,cAClB,gBACE,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,YACpC,MAAA,GACA,MAAA;AAAA,cAEN,SAAA,EAAU,2BAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,kDAAA;AAAA,sBACA,QAAA,CAAS;AAAA,qBACX;AAAA,oBAEC,eAAK,MAAA,KAAW,SAAA,uBACd,OAAA,EAAA,EAAQ,IAAA,EAAK,MAAK,SAAA,EAAU,0BAAA,EAA2B,IAExD,QAAA,CAAS,IAAA,wBACN,QAAA,CAAS,IAAA,EAAT,EAAc,SAAA,EAAU,QAAA,EAAS,eAAW,IAAA,EAAC;AAAA;AAAA,iBAGpD;AAAA,gCACA,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,SAAA;AAAA,sBACA,IAAA,CAAK,MAAA,KAAW,SAAA,GACZ,iCAAA,GACA;AAAA,qBACN;AAAA,oBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA,aAAA;AAAA,YAhCK,IAAA,CAAK;AAAA,WAiCZ;AAAA,QAEJ,CAAC,GACH,CAAA,GACE,IAAA;AAAA,QACH,MAAA,KAAW,YAAY,KAAA,mBACtB,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAQ,wBAAA;AAAA,YACR,SAAA,EAAU,uJAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA,KAAA,CAAM,IAAA,EACT,CAAA;AAAA,8BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EACb,gBAAM,OAAA,EACT;AAAA;AAAA;AAAA,SACF,GACE,IAAA;AAAA,QACH,MAAA,mBAAS,GAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,MAAA,EAAO,CAAA,GAAS,IAAA;AAAA,QAC/B,aAAa,UAAA,IAAc,UAAA,mBAC1B,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,QAAA,EAC1C,QAAA,EAAA,MAAA,EAAQ,MAAA,IAAU,QAAA,EACrB,CAAA,GACE,IAAA;AAAA,UACH,UAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAS,QAAA,EACxB,QAAA,EAAA,MAAA,EAAQ,MAAA,IAAU,QAAA,EACrB,CAAA,GACE,IAAA;AAAA,UACH,SAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAS,OAAA,EACxB,QAAA,EAAA,MAAA,EAAQ,KAAA,IAAS,OAAA,EACpB,CAAA,GACE;AAAA,SAAA,EACN,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-PRHTQBCP.js","sourcesContent":["import * as React from 'react'\nimport { Check, CircleDashed, PauseCircle, TriangleAlert } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Spinner } from '../spinner/Spinner'\nimport { Button } from '../button/Button'\n\nexport type FlowStepStatus =\n | 'pending'\n | 'running'\n | 'done'\n | 'failed'\n | 'interrupted'\n\nexport interface FlowStep {\n id: string\n label: string\n status: FlowStepStatus\n}\n\nexport interface FlowError {\n code: string\n message: string\n retryable: boolean\n}\n\nexport interface FlowStatusCardProps {\n /** Flow name, e.g. \"Analyzing document\". */\n title: string\n /** Ordered steps, one per graph node. */\n steps: FlowStep[]\n /** Overall run status. */\n status: FlowStepStatus\n /** Set when `status === 'failed'`. */\n error?: FlowError\n /** Rendered only when `error?.retryable`. */\n onRetry?: () => void\n /** Rendered while `status === 'running'`. */\n onCancel?: () => void\n /** Rendered when `status === 'interrupted'`. */\n onResume?: () => void\n /** Payload slot: HITL card, references, extra info. */\n detail?: React.ReactNode\n /** Plain strings, i18n at call sites. */\n labels?: Partial<Record<'retry' | 'cancel' | 'resume', string>>\n className?: string\n}\n\nconst stepIcons: Record<\n FlowStepStatus,\n { icon: LucideIcon | null; tone: string }\n> = {\n pending: { icon: CircleDashed, tone: 'text-[var(--as-muted-fg)]' },\n running: { icon: null, tone: 'text-[var(--as-primary)]' },\n done: { icon: Check, tone: 'text-[var(--as-success)]' },\n failed: { icon: TriangleAlert, tone: 'text-[var(--as-danger)]' },\n interrupted: { icon: PauseCircle, tone: 'text-[var(--as-warning)]' },\n}\n\nexport const FlowStatusCard = React.forwardRef<\n HTMLDivElement,\n FlowStatusCardProps\n>(function FlowStatusCard(\n {\n title,\n steps,\n status,\n error,\n onRetry,\n onCancel,\n onResume,\n detail,\n labels,\n className,\n },\n ref,\n) {\n const completed = steps.filter((step) => step.status === 'done').length\n const current = steps.find((step) => step.status === 'running')\n const currentNumber = steps.findIndex((step) => step.id === current?.id) + 1\n const progress =\n steps.length > 0\n ? `${status === 'running' ? currentNumber : completed}/${steps.length}`\n : null\n const overall = stepIcons[status]\n\n const showRetry = Boolean(onRetry && error?.retryable)\n const showCancel = Boolean(onCancel && status === 'running')\n const showResume = Boolean(onResume && status === 'interrupted')\n\n return (\n <div\n ref={ref}\n data-as=\"flow-status-card\"\n data-status={status}\n className={cn(\n 'flex w-full flex-col gap-3 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-4',\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-semibold text-[var(--as-fg)]\">{title}</p>\n <span\n role=\"status\"\n className={cn(\n 'flex shrink-0 items-center gap-1.5 text-xs',\n overall.tone,\n )}\n >\n {status === 'running' ? (\n <Spinner size=\"sm\" className=\"text-[var(--as-primary)]\" />\n ) : (\n overall.icon && <overall.icon className=\"size-3.5\" aria-hidden />\n )}\n {progress ? <span className=\"tabular-nums\">{progress}</span> : null}\n </span>\n </div>\n {status === 'running' && current ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{current.label}</p>\n ) : null}\n {steps.length > 0 ? (\n <ol className=\"flex flex-col gap-2\">\n {steps.map((step) => {\n const stepIcon = stepIcons[step.status]\n return (\n <li\n key={step.id}\n data-status={step.status}\n aria-current={\n step.status === 'running' && status === 'running'\n ? 'step'\n : undefined\n }\n className=\"flex items-center gap-2.5\"\n >\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center',\n stepIcon.tone,\n )}\n >\n {step.status === 'running' ? (\n <Spinner size=\"sm\" className=\"text-[var(--as-primary)]\" />\n ) : (\n stepIcon.icon && (\n <stepIcon.icon className=\"size-4\" aria-hidden />\n )\n )}\n </span>\n <span\n className={cn(\n 'text-sm',\n step.status === 'running'\n ? 'font-medium text-[var(--as-fg)]'\n : 'text-[var(--as-muted-fg)]',\n )}\n >\n {step.label}\n </span>\n </li>\n )\n })}\n </ol>\n ) : null}\n {status === 'failed' && error ? (\n <div\n role=\"alert\"\n data-as=\"flow-status-card-error\"\n className=\"flex flex-col gap-1 rounded-[var(--as-radius)] border border-[var(--as-danger)]/40 bg-[var(--as-danger)]/10 px-3 py-2 text-xs text-[var(--as-danger)]\"\n >\n <span className=\"font-mono font-semibold uppercase tracking-wide\">\n {error.code}\n </span>\n <span className=\"whitespace-pre-wrap break-words\">\n {error.message}\n </span>\n </div>\n ) : null}\n {detail ? <div>{detail}</div> : null}\n {showRetry || showCancel || showResume ? (\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n {showCancel ? (\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel}>\n {labels?.cancel ?? 'Cancel'}\n </Button>\n ) : null}\n {showResume ? (\n <Button size=\"sm\" onClick={onResume}>\n {labels?.resume ?? 'Resume'}\n </Button>\n ) : null}\n {showRetry ? (\n <Button size=\"sm\" onClick={onRetry}>\n {labels?.retry ?? 'Retry'}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n})\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type FlowStepStatus = 'pending' | 'running' | 'done' | 'failed' | 'interrupted';
|
|
4
|
+
interface FlowStep {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
status: FlowStepStatus;
|
|
8
|
+
}
|
|
9
|
+
interface FlowError {
|
|
10
|
+
code: string;
|
|
11
|
+
message: string;
|
|
12
|
+
retryable: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface FlowStatusCardProps {
|
|
15
|
+
/** Flow name, e.g. "Analyzing document". */
|
|
16
|
+
title: string;
|
|
17
|
+
/** Ordered steps, one per graph node. */
|
|
18
|
+
steps: FlowStep[];
|
|
19
|
+
/** Overall run status. */
|
|
20
|
+
status: FlowStepStatus;
|
|
21
|
+
/** Set when `status === 'failed'`. */
|
|
22
|
+
error?: FlowError;
|
|
23
|
+
/** Rendered only when `error?.retryable`. */
|
|
24
|
+
onRetry?: () => void;
|
|
25
|
+
/** Rendered while `status === 'running'`. */
|
|
26
|
+
onCancel?: () => void;
|
|
27
|
+
/** Rendered when `status === 'interrupted'`. */
|
|
28
|
+
onResume?: () => void;
|
|
29
|
+
/** Payload slot: HITL card, references, extra info. */
|
|
30
|
+
detail?: React.ReactNode;
|
|
31
|
+
/** Plain strings, i18n at call sites. */
|
|
32
|
+
labels?: Partial<Record<'retry' | 'cancel' | 'resume', string>>;
|
|
33
|
+
className?: string;
|
|
34
|
+
}
|
|
35
|
+
declare const FlowStatusCard: React.ForwardRefExoticComponent<FlowStatusCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
|
|
37
|
+
export { type FlowError, FlowStatusCard, type FlowStatusCardProps, type FlowStep, type FlowStepStatus };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"flow-status.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { AboutCard, AboutCardProps, AboutCreator, AboutFooterLine, AboutFooterLi
|
|
|
12
12
|
export { AiAction, AiActionsDropdown, AiActionsDropdownProps } from './ai-actions-dropdown.js';
|
|
13
13
|
export { AiButton, AiButtonProps } from './ai-button.js';
|
|
14
14
|
export { AiMagicFill, AiMagicFillProps } from './ai-magic-fill.js';
|
|
15
|
+
export { FlowError, FlowStatusCard, FlowStatusCardProps, FlowStep, FlowStepStatus } from './flow-status.js';
|
|
15
16
|
export { Badge, BadgeProps, badgeVariants } from './badge.js';
|
|
16
17
|
export { BreadcrumbItem, BreadcrumbLinkProps, Breadcrumbs, BreadcrumbsProps } from './breadcrumbs.js';
|
|
17
18
|
export { Button, ButtonProps, buttonVariants } from './button.js';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
export { UndoNotice } from './chunk-OUHUVACM.js';
|
|
1
2
|
export { ViewToggle } from './chunk-MXOBOS4Y.js';
|
|
2
3
|
export { Stepper, Wizard } from './chunk-YMCMUAIF.js';
|
|
4
|
+
export { TaskAssignmentPicker } from './chunk-VULOVVKF.js';
|
|
3
5
|
export { SettingsShell } from './chunk-AHLNXCP2.js';
|
|
4
6
|
export { SidebarNav } from './chunk-SW3YNICQ.js';
|
|
5
7
|
export { UserMenu } from './chunk-535TM7SK.js';
|
|
@@ -7,19 +9,18 @@ export { ThemeScope } from './chunk-TGU3PKNM.js';
|
|
|
7
9
|
export { TimeList } from './chunk-GVOC3ARM.js';
|
|
8
10
|
export { TimePicker, TimePickerContent } from './chunk-CR42EAF4.js';
|
|
9
11
|
export { InfoTooltip, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './chunk-34NO2UOB.js';
|
|
10
|
-
export {
|
|
12
|
+
export { ScaleSlider, scaleColorForValue } from './chunk-PSFJN7WH.js';
|
|
11
13
|
export { SearchInput } from './chunk-H5U4KNXF.js';
|
|
12
14
|
export { ModelRegistry } from './chunk-RBEPQY2A.js';
|
|
13
15
|
export { CapabilityChips } from './chunk-G3DWN2DJ.js';
|
|
14
16
|
export { SelectionBar } from './chunk-HSUCCANX.js';
|
|
15
17
|
export { Table } from './chunk-5LRRVD27.js';
|
|
16
|
-
export { TaskAssignmentPicker } from './chunk-VULOVVKF.js';
|
|
17
18
|
export { ModelPicker } from './chunk-SVQK7TXU.js';
|
|
18
19
|
export { PanelModal } from './chunk-G6557MEN.js';
|
|
19
20
|
export { Portal } from './chunk-7YLR4AGA.js';
|
|
20
21
|
export { ProviderForm } from './chunk-4WDXLXHL.js';
|
|
21
22
|
export { RangeBar } from './chunk-PFAH25VU.js';
|
|
22
|
-
export {
|
|
23
|
+
export { FlowStatusCard } from './chunk-PRHTQBCP.js';
|
|
23
24
|
export { FieldLabel } from './chunk-I5J6SDLK.js';
|
|
24
25
|
export { InfoButton } from './chunk-OT6EQFMP.js';
|
|
25
26
|
export { PopoverButton } from './chunk-BE3XFZWU.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/upload-dropzone/UploadDropzone.tsx"],"names":["UploadDropzone"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/components/upload-dropzone/UploadDropzone.tsx"],"names":["UploadDropzone"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from 'react'\nimport { FolderUp, Loader2, Upload } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface UploadDropzoneProps {\n onFiles: (files: File[]) => void\n uploading?: boolean\n variant?: 'block' | 'row'\n label?: string\n hint?: string\n browseLabel?: string\n folderLabel?: string\n accept?: string\n multiple?: boolean\n allowFolders?: boolean\n disabled?: boolean\n className?: string\n}\n\n/**\n * Presentational dropzone: drag events and file-picker results go out via\n * `onFiles` — uploading, storage and progress stay app-side. Pass\n * `uploading` to render a busy state and suppress input.\n */\nexport const UploadDropzone = React.forwardRef<HTMLDivElement, UploadDropzoneProps>(\n function UploadDropzone(\n {\n onFiles,\n uploading = false,\n variant = 'block',\n label = 'Drop files here or click to browse',\n hint,\n browseLabel = 'Choose files',\n folderLabel = 'Choose folder',\n accept,\n multiple = true,\n allowFolders = false,\n disabled = false,\n className,\n },\n ref,\n ) {\n const [dragging, setDragging] = React.useState(false)\n const fileInput = React.useRef<HTMLInputElement>(null)\n const folderInput = React.useRef<HTMLInputElement>(null)\n\n const active = !disabled && !uploading\n\n const emit = (list: FileList | null) => {\n if (!active || !list || list.length === 0) return\n onFiles(Array.from(list))\n }\n\n const input = allowFolders ? (\n <>\n <input\n ref={fileInput}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n aria-hidden\n tabIndex={-1}\n onChange={(event) => {\n emit(event.target.files)\n event.target.value = ''\n }}\n />\n <input\n ref={folderInput}\n type=\"file\"\n multiple\n className=\"hidden\"\n // @ts-expect-error non-standard but universally supported directory picker\n webkitdirectory=\"\"\n aria-hidden\n tabIndex={-1}\n onChange={(event) => {\n emit(event.target.files)\n event.target.value = ''\n }}\n />\n </>\n ) : (\n <input\n ref={fileInput}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n aria-hidden\n tabIndex={-1}\n onChange={(event) => {\n emit(event.target.files)\n event.target.value = ''\n }}\n />\n )\n\n return (\n <>\n {input}\n <div\n ref={ref}\n data-as=\"upload-dropzone\"\n data-variant={variant}\n data-dragging={dragging || undefined}\n role=\"button\"\n tabIndex={active ? 0 : -1}\n aria-label={label}\n aria-disabled={disabled || uploading || undefined}\n onClick={() => active && fileInput.current?.click()}\n onKeyDown={(event) => {\n if (active && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n fileInput.current?.click()\n }\n }}\n onDragOver={(event) => {\n event.preventDefault()\n if (active) setDragging(true)\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={(event) => {\n event.preventDefault()\n setDragging(false)\n emit(event.dataTransfer.files)\n }}\n className={cn(\n 'flex cursor-pointer items-center justify-center gap-3 border border-dashed border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-muted-fg)] transition-colors',\n 'hover:border-[var(--as-primary)] hover:text-[var(--as-fg)]',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]',\n variant === 'block' ? 'rounded-[var(--as-radius-lg)] p-8' : 'rounded-[var(--as-radius)] px-4 py-3',\n dragging && 'border-[var(--as-primary)] bg-[color-mix(in_srgb,var(--as-primary)_8%,transparent)] text-[var(--as-fg)]',\n uploading && 'cursor-progress opacity-70',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n >\n {uploading ? (\n <Loader2 className=\"size-5 shrink-0 animate-spin\" aria-hidden />\n ) : allowFolders ? (\n <FolderUp className=\"size-5 shrink-0\" aria-hidden />\n ) : (\n <Upload className=\"size-5 shrink-0\" aria-hidden />\n )}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-sm font-medium\" role={uploading ? 'status' : undefined}>\n {uploading ? `${browseLabel}…` : dragging ? folderLabel : label}\n </span>\n {hint ? <span className=\"truncate text-xs\">{hint}</span> : null}\n </span>\n </div>\n </>\n )\n },\n)\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neuronection/assistant-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Shared React component library for the Assistant family (career-, study-, health-assistant). Family look by default, app-flavored via CSS-variable tokens.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -102,6 +102,10 @@
|
|
|
102
102
|
"types": "./dist/file-queue.d.ts",
|
|
103
103
|
"import": "./dist/file-queue.js"
|
|
104
104
|
},
|
|
105
|
+
"./flow-status": {
|
|
106
|
+
"types": "./dist/flow-status.d.ts",
|
|
107
|
+
"import": "./dist/flow-status.js"
|
|
108
|
+
},
|
|
105
109
|
"./expandable-search": {
|
|
106
110
|
"types": "./dist/expandable-search.d.ts",
|
|
107
111
|
"import": "./dist/expandable-search.js"
|