@arbidocs/blocks 0.4.76 → 0.4.77
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/agents/index.cjs +331 -255
- package/dist/agents/index.js +2 -2
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +7 -1
- package/dist/agents/workflows/SchemaForm.d.ts +6 -1
- package/dist/agents/workflows/StepParts.d.ts +109 -0
- package/dist/agents/workflows/WorkflowRunner.d.ts +11 -2
- package/dist/agents/workflows/index.d.ts +3 -2
- package/dist/agents/workflows/planSteps.d.ts +8 -1
- package/dist/agents/workflows/run.d.ts +61 -8
- package/dist/agents/workflows/types.d.ts +133 -4
- package/dist/agents/workflows/useWorkflowPreview.d.ts +2 -1
- package/dist/agents/workflows/useWorkflowView.d.ts +19 -0
- package/dist/chat/ChatPage.d.ts +1 -1
- package/dist/chat/WorkflowStepChip.d.ts +24 -0
- package/dist/chat/chat-page-types.d.ts +4 -0
- package/dist/chat/index.cjs +130 -122
- package/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.js +2 -2
- package/dist/{chunk-22P5KNIM.js → chunk-34UW6XUQ.js} +928 -38
- package/dist/chunk-34UW6XUQ.js.map +1 -0
- package/dist/{chunk-VYRKO3XU.cjs → chunk-3XR3IEGU.cjs} +944 -35
- package/dist/chunk-3XR3IEGU.cjs.map +1 -0
- package/dist/{chunk-ZWA7UUZL.cjs → chunk-7YUFMNFW.cjs} +2 -54
- package/dist/chunk-7YUFMNFW.cjs.map +1 -0
- package/dist/chunk-A24C6BNA.js +92 -0
- package/dist/chunk-A24C6BNA.js.map +1 -0
- package/dist/chunk-AINNADMT.cjs +62 -0
- package/dist/chunk-AINNADMT.cjs.map +1 -0
- package/dist/{chunk-7CVF3DK2.cjs → chunk-EKIUMNCN.cjs} +5 -5
- package/dist/{chunk-7CVF3DK2.cjs.map → chunk-EKIUMNCN.cjs.map} +1 -1
- package/dist/chunk-FE4ULGOR.js +151 -0
- package/dist/chunk-FE4ULGOR.js.map +1 -0
- package/dist/chunk-FT5FFXSJ.js +60 -0
- package/dist/chunk-FT5FFXSJ.js.map +1 -0
- package/dist/{chunk-HITAN7JF.cjs → chunk-GTXOV7IJ.cjs} +4 -4
- package/dist/{chunk-HITAN7JF.cjs.map → chunk-GTXOV7IJ.cjs.map} +1 -1
- package/dist/{chunk-TKB7TVMW.js → chunk-HEVVT6IT.js} +78 -14
- package/dist/chunk-HEVVT6IT.js.map +1 -0
- package/dist/{chunk-IPGKTUF7.cjs → chunk-HOD6OM7L.cjs} +68 -3
- package/dist/chunk-HOD6OM7L.cjs.map +1 -0
- package/dist/{chunk-7FKARMA3.cjs → chunk-JFUN4D7D.cjs} +101 -37
- package/dist/chunk-JFUN4D7D.cjs.map +1 -0
- package/dist/{chunk-UIWLDSTF.js → chunk-NIP5BOP7.js} +68 -5
- package/dist/chunk-NIP5BOP7.js.map +1 -0
- package/dist/{chunk-MK6NJQGF.js → chunk-OEM5ARVM.js} +3 -3
- package/dist/{chunk-MK6NJQGF.js.map → chunk-OEM5ARVM.js.map} +1 -1
- package/dist/{chunk-5EBGRG3X.js → chunk-OPA2Y6YZ.js} +3 -54
- package/dist/chunk-OPA2Y6YZ.js.map +1 -0
- package/dist/chunk-TZR36PPP.cjs +95 -0
- package/dist/chunk-TZR36PPP.cjs.map +1 -0
- package/dist/{chunk-WJEKRSPH.js → chunk-UEU23PTW.js} +3 -3
- package/dist/{chunk-WJEKRSPH.js.map → chunk-UEU23PTW.js.map} +1 -1
- package/dist/chunk-ZVBPRMHJ.cjs +153 -0
- package/dist/chunk-ZVBPRMHJ.cjs.map +1 -0
- package/dist/connect/docx.cjs +10 -88
- package/dist/connect/docx.cjs.map +1 -1
- package/dist/connect/docx.js +6 -86
- package/dist/connect/docx.js.map +1 -1
- package/dist/connect/index.cjs +293 -30
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +278 -15
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedWorkflowRunner.d.ts +16 -2
- package/dist/connection/WorkflowRunnerDialogs.d.ts +37 -0
- package/dist/connection/useWorkflowThread.d.ts +12 -0
- package/dist/document-tools/index.cjs +7 -143
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.js +5 -144
- package/dist/document-tools/index.js.map +1 -1
- package/dist/docx/index.cjs +18 -17
- package/dist/docx/index.cjs.map +1 -1
- package/dist/docx/index.js +3 -2
- package/dist/docx/index.js.map +1 -1
- package/dist/index.cjs +467 -383
- package/dist/index.js +5 -5
- package/dist/studio/index.cjs +3 -3
- package/dist/studio/index.js +2 -2
- package/dist/workflow-canvas/StepActionSettings.d.ts +132 -0
- package/dist/workflow-canvas/StepInspector.d.ts +25 -2
- package/dist/workflow-canvas/WorkflowBuilder.d.ts +11 -3
- package/dist/workflow-canvas/WorkflowCanvas.d.ts +27 -2
- package/dist/workflow-canvas/edit.d.ts +9 -1
- package/dist/workflow-canvas/index.cjs +879 -99
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +846 -66
- package/dist/workflow-canvas/index.js.map +1 -1
- package/package.json +4 -4
- package/src/workflow-canvas/canvas.css +9 -0
- package/dist/chunk-22P5KNIM.js.map +0 -1
- package/dist/chunk-5EBGRG3X.js.map +0 -1
- package/dist/chunk-7FKARMA3.cjs.map +0 -1
- package/dist/chunk-IPGKTUF7.cjs.map +0 -1
- package/dist/chunk-TKB7TVMW.js.map +0 -1
- package/dist/chunk-UIWLDSTF.js.map +0 -1
- package/dist/chunk-VYRKO3XU.cjs.map +0 -1
- package/dist/chunk-ZWA7UUZL.cjs.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { ModalScaffold } from './chunk-TX2ZICS7.js';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useDocumentTools, useSignDocument, intentText, certificateLink } from '@arbidocs/react/document-tools';
|
|
5
|
+
import { Label, Input, Checkbox, Button } from '@arbidocs/react/ui';
|
|
6
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function SignDocumentDialog({
|
|
9
|
+
open,
|
|
10
|
+
onOpenChange,
|
|
11
|
+
documentId,
|
|
12
|
+
pdfBlob,
|
|
13
|
+
appearance
|
|
14
|
+
}) {
|
|
15
|
+
const { user, notify, openDocument, emailDocument, certificateUrl } = useDocumentTools();
|
|
16
|
+
const [name, setName] = useState(() => user?.name ?? "");
|
|
17
|
+
const [includeDate, setIncludeDate] = useState(false);
|
|
18
|
+
const [password, setPassword] = useState("");
|
|
19
|
+
const [error, setError] = useState(null);
|
|
20
|
+
const sign = useSignDocument();
|
|
21
|
+
const signer = { name };
|
|
22
|
+
const handleSubmit = async (e) => {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
if (!user?.email) return;
|
|
25
|
+
setError(null);
|
|
26
|
+
try {
|
|
27
|
+
const result = await sign.mutateAsync({
|
|
28
|
+
documentId,
|
|
29
|
+
pdfBlob,
|
|
30
|
+
email: user.email,
|
|
31
|
+
password,
|
|
32
|
+
signer,
|
|
33
|
+
appearance,
|
|
34
|
+
includeDate
|
|
35
|
+
});
|
|
36
|
+
const signedId = result.doc_ext_id;
|
|
37
|
+
const certificate = certificateLink(result.signature, certificateUrl);
|
|
38
|
+
notify(
|
|
39
|
+
`Signed. The signed copy is saved as version ${result.version}.`,
|
|
40
|
+
"success",
|
|
41
|
+
emailDocument ? { action: { label: "Email it", onClick: () => emailDocument(signedId) } } : {
|
|
42
|
+
action: {
|
|
43
|
+
label: "View certificate",
|
|
44
|
+
onClick: () => {
|
|
45
|
+
window.open(certificate, "_blank", "noopener,noreferrer");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
setPassword("");
|
|
51
|
+
onOpenChange(false);
|
|
52
|
+
openDocument?.(signedId);
|
|
53
|
+
} catch (err) {
|
|
54
|
+
setError(err instanceof Error ? err.message : "Signing failed");
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return /* @__PURE__ */ jsx(
|
|
58
|
+
ModalScaffold,
|
|
59
|
+
{
|
|
60
|
+
open,
|
|
61
|
+
onOpenChange: (next) => !sign.isPending && onOpenChange(next),
|
|
62
|
+
title: "Sign document",
|
|
63
|
+
description: "Sign this document electronically. The signed copy is saved as a new version.",
|
|
64
|
+
showDescription: true,
|
|
65
|
+
testId: "sign-document-dialog",
|
|
66
|
+
children: /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, children: [
|
|
67
|
+
/* @__PURE__ */ jsxs(ModalScaffold.Body, { children: [
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
69
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "sign-name", children: "Name" }),
|
|
70
|
+
/* @__PURE__ */ jsx(
|
|
71
|
+
Input,
|
|
72
|
+
{
|
|
73
|
+
id: "sign-name",
|
|
74
|
+
value: name,
|
|
75
|
+
onChange: (e) => setName(e.target.value),
|
|
76
|
+
"data-testid": "sign-document-name-input",
|
|
77
|
+
required: true
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 pointer-coarse:min-h-11", children: [
|
|
82
|
+
/* @__PURE__ */ jsx(
|
|
83
|
+
Checkbox,
|
|
84
|
+
{
|
|
85
|
+
id: "sign-include-date",
|
|
86
|
+
checked: includeDate,
|
|
87
|
+
onCheckedChange: (checked) => setIncludeDate(checked === true),
|
|
88
|
+
"data-testid": "sign-document-include-date"
|
|
89
|
+
}
|
|
90
|
+
),
|
|
91
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "sign-include-date", className: "font-normal", children: "Include date" })
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", "data-testid": "sign-document-appearance-note", children: [
|
|
94
|
+
"Only your signature",
|
|
95
|
+
includeDate ? " and the date appear" : " appears",
|
|
96
|
+
" on the page. Anyone can click it to check it."
|
|
97
|
+
] }),
|
|
98
|
+
name.trim() && /* @__PURE__ */ jsx(
|
|
99
|
+
"blockquote",
|
|
100
|
+
{
|
|
101
|
+
className: "border-l-2 border-border pl-3 text-sm text-muted-foreground",
|
|
102
|
+
"data-testid": "sign-document-intent",
|
|
103
|
+
children: intentText(signer)
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
107
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "sign-password", children: "Password" }),
|
|
108
|
+
/* @__PURE__ */ jsx(
|
|
109
|
+
Input,
|
|
110
|
+
{
|
|
111
|
+
id: "sign-password",
|
|
112
|
+
type: "password",
|
|
113
|
+
autoComplete: "current-password",
|
|
114
|
+
value: password,
|
|
115
|
+
onChange: (e) => setPassword(e.target.value),
|
|
116
|
+
"data-testid": "sign-document-password-input",
|
|
117
|
+
required: true
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
] }),
|
|
121
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-red-text", role: "alert", "data-testid": "sign-document-error", children: error })
|
|
122
|
+
] }),
|
|
123
|
+
/* @__PURE__ */ jsxs(ModalScaffold.Footer, { children: [
|
|
124
|
+
/* @__PURE__ */ jsx(
|
|
125
|
+
Button,
|
|
126
|
+
{
|
|
127
|
+
type: "button",
|
|
128
|
+
variant: "outline",
|
|
129
|
+
onClick: () => onOpenChange(false),
|
|
130
|
+
disabled: sign.isPending,
|
|
131
|
+
children: "Cancel"
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
/* @__PURE__ */ jsx(
|
|
135
|
+
Button,
|
|
136
|
+
{
|
|
137
|
+
type: "submit",
|
|
138
|
+
disabled: sign.isPending || !name.trim() || !password,
|
|
139
|
+
"data-testid": "sign-document-submit-button",
|
|
140
|
+
children: sign.isPending ? "Signing..." : "Sign"
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] })
|
|
144
|
+
] })
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export { SignDocumentDialog };
|
|
150
|
+
//# sourceMappingURL=chunk-FE4ULGOR.js.map
|
|
151
|
+
//# sourceMappingURL=chunk-FE4ULGOR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/document-tools/SignDocumentDialog.tsx"],"names":[],"mappings":"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","file":"chunk-FE4ULGOR.js","sourcesContent":["/**\n * Sign a document electronically: confirm the name, choose whether the date is shown, read the\n * statement of intent, re-enter the password. Only the signature (and the date, if ticked) is drawn\n * on the page; a role, a firm or a place go on as ordinary annotation text. Anyone can click the\n * signature to check it. The signed copy is saved as a new version and opened, with an offer to\n * email it when the host gives the tools an `emailDocument`. Needs a `<DocumentToolsProvider>` with\n * a `user` (its email) and a `deploymentDomain`, inside a React Query `QueryClientProvider`.\n */\n\nimport { useState, type FormEvent, type ReactElement } from 'react'\nimport {\n certificateLink,\n intentText,\n useDocumentTools,\n useSignDocument,\n type SignatureAppearance,\n} from '@arbidocs/react/document-tools'\nimport { Button, Checkbox, Input, Label } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\nexport interface SignDocumentDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n documentId: string\n /** The PDF the viewer is showing. */\n pdfBlob: Blob\n /** Where the signature goes; omitted = bottom of the last page. */\n appearance?: SignatureAppearance\n}\n\nexport function SignDocumentDialog({\n open,\n onOpenChange,\n documentId,\n pdfBlob,\n appearance,\n}: SignDocumentDialogProps): ReactElement {\n const { user, notify, openDocument, emailDocument, certificateUrl } = useDocumentTools()\n const [name, setName] = useState(() => user?.name ?? '')\n const [includeDate, setIncludeDate] = useState(false)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const sign = useSignDocument()\n\n const signer = { name }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n if (!user?.email) return\n setError(null)\n try {\n const result = await sign.mutateAsync({\n documentId,\n pdfBlob,\n email: user.email,\n password,\n signer,\n appearance,\n includeDate,\n })\n const signedId = result.doc_ext_id\n const certificate = certificateLink(result.signature, certificateUrl)\n notify(\n `Signed. The signed copy is saved as version ${result.version}.`,\n 'success',\n emailDocument\n ? { action: { label: 'Email it', onClick: () => emailDocument(signedId) } }\n : {\n action: {\n label: 'View certificate',\n onClick: () => {\n window.open(certificate, '_blank', 'noopener,noreferrer')\n },\n },\n }\n )\n setPassword('')\n onOpenChange(false)\n openDocument?.(signedId)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Signing failed')\n }\n }\n\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => !sign.isPending && onOpenChange(next)}\n title=\"Sign document\"\n description=\"Sign this document electronically. The signed copy is saved as a new version.\"\n showDescription\n testId=\"sign-document-dialog\"\n >\n <form onSubmit={handleSubmit}>\n <ModalScaffold.Body>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sign-name\">Name</Label>\n <Input\n id=\"sign-name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n data-testid=\"sign-document-name-input\"\n required\n />\n </div>\n <div className=\"flex items-center gap-2 pointer-coarse:min-h-11\">\n <Checkbox\n id=\"sign-include-date\"\n checked={includeDate}\n onCheckedChange={(checked) => setIncludeDate(checked === true)}\n data-testid=\"sign-document-include-date\"\n />\n <Label htmlFor=\"sign-include-date\" className=\"font-normal\">\n Include date\n </Label>\n </div>\n <p className=\"text-sm text-muted-foreground\" data-testid=\"sign-document-appearance-note\">\n Only your signature{includeDate ? ' and the date appear' : ' appears'} on the page.\n Anyone can click it to check it.\n </p>\n {name.trim() && (\n <blockquote\n className=\"border-l-2 border-border pl-3 text-sm text-muted-foreground\"\n data-testid=\"sign-document-intent\"\n >\n {intentText(signer)}\n </blockquote>\n )}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sign-password\">Password</Label>\n <Input\n id=\"sign-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n data-testid=\"sign-document-password-input\"\n required\n />\n </div>\n {error && (\n <p className=\"text-sm text-red-text\" role=\"alert\" data-testid=\"sign-document-error\">\n {error}\n </p>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={sign.isPending}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={sign.isPending || !name.trim() || !password}\n data-testid=\"sign-document-submit-button\"\n >\n {sign.isPending ? 'Signing...' : 'Sign'}\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n )\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { NativeDocxEditor } from './chunk-OPA2Y6YZ.js';
|
|
3
|
+
import { useState, useRef } from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function StreamedWordArtifact({
|
|
7
|
+
adapter,
|
|
8
|
+
content,
|
|
9
|
+
title,
|
|
10
|
+
busy,
|
|
11
|
+
error,
|
|
12
|
+
draftId,
|
|
13
|
+
sourceDocumentId,
|
|
14
|
+
onSaved
|
|
15
|
+
}) {
|
|
16
|
+
const [documentId, setDocumentId] = useState();
|
|
17
|
+
const saving = useRef(null);
|
|
18
|
+
async function persist(bytes) {
|
|
19
|
+
if (saving.current) return saving.current;
|
|
20
|
+
saving.current = (async () => {
|
|
21
|
+
const query = new URLSearchParams({ title });
|
|
22
|
+
if (sourceDocumentId) query.set("version_of", sourceDocumentId);
|
|
23
|
+
const response = await adapter.request(`/notes?${query}`, {
|
|
24
|
+
method: "POST",
|
|
25
|
+
headers: {
|
|
26
|
+
"Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
27
|
+
},
|
|
28
|
+
body: bytes
|
|
29
|
+
});
|
|
30
|
+
if (!response.ok) throw new Error("Could not store the generated Word document.");
|
|
31
|
+
const result = await response.json();
|
|
32
|
+
if (!result.document_ext_id) throw new Error("The generated document has no ID.");
|
|
33
|
+
await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {
|
|
34
|
+
});
|
|
35
|
+
setDocumentId(result.document_ext_id);
|
|
36
|
+
onSaved?.(result.document_ext_id);
|
|
37
|
+
})();
|
|
38
|
+
try {
|
|
39
|
+
await saving.current;
|
|
40
|
+
} finally {
|
|
41
|
+
saving.current = null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
NativeDocxEditor,
|
|
46
|
+
{
|
|
47
|
+
adapter,
|
|
48
|
+
documentId: documentId || draftId,
|
|
49
|
+
title,
|
|
50
|
+
draftContent: documentId ? void 0 : "",
|
|
51
|
+
stream: documentId ? void 0 : { content, busy, error, onGenerated: persist },
|
|
52
|
+
onSaved
|
|
53
|
+
},
|
|
54
|
+
documentId || draftId
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { StreamedWordArtifact };
|
|
59
|
+
//# sourceMappingURL=chunk-FT5FFXSJ.js.map
|
|
60
|
+
//# sourceMappingURL=chunk-FT5FFXSJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/docx/StreamedWordArtifact.tsx"],"names":[],"mappings":";;;;AAiBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,EAAiB;AACrD,EAAA,MAAM,MAAA,GAAS,OAA6B,IAAI,CAAA;AAChD,EAAA,eAAe,QAAQ,KAAA,EAAoB;AACzC,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,OAAO,MAAA,CAAO,OAAA;AAClC,IAAA,MAAA,CAAO,WAAW,YAAY;AAC5B,MAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,EAAE,OAAO,CAAA;AAC3C,MAAA,IAAI,gBAAA,EAAkB,KAAA,CAAM,GAAA,CAAI,YAAA,EAAc,gBAAgB,CAAA;AAC9D,MAAA,MAAM,WAAW,MAAM,OAAA,CAAQ,OAAA,CAAQ,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI;AAAA,QACxD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAChF,MAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,MAAA,IAAI,CAAC,MAAA,CAAO,eAAA,EAAiB,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAChF,MAAA,MAAM,OAAA,CAAQ,QAAQ,OAAA,CAAQ,cAAA,GAAiB,OAAO,eAAe,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AACtF,MAAA,aAAA,CAAc,OAAO,eAAe,CAAA;AACpC,MAAA,OAAA,GAAU,OAAO,eAAe,CAAA;AAAA,IAClC,CAAA,GAAG;AACH,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,OAAA;AAAA,IACf,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,YAAY,UAAA,IAAc,OAAA;AAAA,MAC1B,KAAA;AAAA,MACA,YAAA,EAAc,aAAa,MAAA,GAAY,EAAA;AAAA,MACvC,MAAA,EAAQ,aAAa,MAAA,GAAY,EAAE,SAAS,IAAA,EAAM,KAAA,EAAO,aAAa,OAAA,EAAQ;AAAA,MAC9E;AAAA,KAAA;AAAA,IANK,UAAA,IAAc;AAAA,GAOrB;AAEJ","file":"chunk-FT5FFXSJ.js","sourcesContent":["import { useRef, useState } from 'react'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\nexport interface StreamedWordArtifactProps {\n adapter: NativeDocxAdapter\n content: string\n title: string\n busy: boolean\n error?: string | null\n /** Stable identity for this generation, not the ID of a persisted Markdown preview. */\n draftId: string\n /** Preserve version lineage when the stream already has a stored source artifact. */\n sourceDocumentId?: string\n onSaved?: (documentId: string) => void\n}\n\n/** One shared native drafting surface, from Markdown stream to saved collaborative DOCX. */\nexport function StreamedWordArtifact({\n adapter,\n content,\n title,\n busy,\n error,\n draftId,\n sourceDocumentId,\n onSaved,\n}: StreamedWordArtifactProps) {\n const [documentId, setDocumentId] = useState<string>()\n const saving = useRef<Promise<void> | null>(null)\n async function persist(bytes: ArrayBuffer) {\n if (saving.current) return saving.current\n saving.current = (async () => {\n const query = new URLSearchParams({ title })\n if (sourceDocumentId) query.set('version_of', sourceDocumentId)\n const response = await adapter.request(`/notes?${query}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n },\n body: bytes,\n })\n if (!response.ok) throw new Error('Could not store the generated Word document.')\n const result = (await response.json()) as { document_ext_id: string }\n if (!result.document_ext_id) throw new Error('The generated document has no ID.')\n await Promise.resolve(adapter.onVersionSaved?.(result.document_ext_id)).catch(() => {})\n setDocumentId(result.document_ext_id)\n onSaved?.(result.document_ext_id)\n })()\n try {\n await saving.current\n } finally {\n saving.current = null\n }\n }\n return (\n <NativeDocxEditor\n key={documentId || draftId}\n adapter={adapter}\n documentId={documentId || draftId}\n title={title}\n draftContent={documentId ? undefined : ''}\n stream={documentId ? undefined : { content, busy, error, onGenerated: persist }}\n onSaved={onSaved}\n />\n )\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkMUMH3Z6K_cjs = require('./chunk-MUMH3Z6K.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkHOD6OM7L_cjs = require('./chunk-HOD6OM7L.cjs');
|
|
6
6
|
var react$1 = require('react');
|
|
7
7
|
var react = require('@arbidocs/react');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -61,7 +61,7 @@ function useConnectedChat(options) {
|
|
|
61
61
|
}
|
|
62
62
|
function ConnectedAssistantDock(props) {
|
|
63
63
|
const chat = useConnectedChat();
|
|
64
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkHOD6OM7L_cjs.AssistantDock, { ...props, chat });
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
Object.defineProperty(exports, "redlineStats", {
|
|
@@ -81,5 +81,5 @@ exports.useConnectedAiTask = useConnectedAiTask;
|
|
|
81
81
|
exports.useConnectedChat = useConnectedChat;
|
|
82
82
|
exports.useSemanticSearch = useSemanticSearch;
|
|
83
83
|
exports.useWorkspaceDocs = useWorkspaceDocs;
|
|
84
|
-
//# sourceMappingURL=chunk-
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
84
|
+
//# sourceMappingURL=chunk-GTXOV7IJ.cjs.map
|
|
85
|
+
//# sourceMappingURL=chunk-GTXOV7IJ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","jsx","AssistantDock"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","jsx","AssistantDock"],"mappings":"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","file":"chunk-GTXOV7IJ.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n ...options,\n workspaceId: workspaceId ?? fallbackWorkspaceId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { DocumentPicker, TriStateFilterMenu, MultiSelect } from './chunk-CKB64Z4R.js';
|
|
3
3
|
import { EmptyState } from './chunk-P6GHJSLR.js';
|
|
4
|
-
import { defaultInputs, validateInputs, SchemaForm, isWorkflowScope, fieldToFrontmatter, workflowFromFrontmatter, workflowSteps, initialRunInputs, stepPhase, composeStepPrompt, useWorkflowView, composeWorkflowPrompt, isRunFinished, buildLaunch } from './chunk-
|
|
4
|
+
import { defaultInputs, validateInputs, SchemaForm, isWorkflowScope, fieldToFrontmatter, workflowFromFrontmatter, workflowSteps, initialRunInputs, stepPhase, composeStepPrompt, useWorkflowView, composeWorkflowPrompt, isRunFinished, buildLaunch } from './chunk-34UW6XUQ.js';
|
|
5
5
|
import { TabHeader } from './chunk-4WWM3GQ5.js';
|
|
6
6
|
import { CellHoverIcon } from './chunk-RFXJYIDV.js';
|
|
7
7
|
import { ToneBadge } from './chunk-DPLRHEJZ.js';
|
|
@@ -21,7 +21,7 @@ import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
|
|
|
21
21
|
import { memo, forwardRef, useState, useMemo, useId, useEffect, useRef, useCallback, useLayoutEffect } from 'react';
|
|
22
22
|
import { cn, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Textarea, Input, Switch, Button, Collapsible, CollapsibleTrigger, CollapsibleContent, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Tooltip, TooltipTrigger, TooltipContent, Badge, Slider, UserEntity, getEntityColorStyles, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, VisibilityToggle, EntityPill, ThreadVisibilityIcon, DialogClose, Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandItem, DropdownMenuSeparator, badgeVariants, Checkbox } from '@arbidocs/react/ui';
|
|
23
23
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
24
|
-
import { ChevronDown, ChevronRight, Plus, Trash2, Loader2, Play, MessageSquare, Eye, ClipboardList, Pencil, Copy, Bot, Sparkles, Wand2, X, Globe, Download, Lock, ListChecks, AlertTriangle, FileX, SkipForward, Check, FileText, CornerDownRight, AlertCircle, KeyRound, Workflow, ChevronsUpDown, ChevronsDownUp, ListTodo, CheckCheck, MoreHorizontal, CalendarClock, History, ChevronUp, Pause, Activity, Hourglass, MoreVertical, TriangleAlert, CheckSquare, Square, CheckCircle2, SquareArrowOutUpRight, ArrowLeft, LayoutGrid, List, CornerLeftUp, CircleDashed, RotateCcw, ListPlus, Link2, Clock, Bell, MousePointerClick, ArrowUpRight, Flag, UserRoundCog, MessageSquareReply, MinusCircle, Zap } from 'lucide-react';
|
|
24
|
+
import { ChevronDown, ChevronRight, Plus, Trash2, Loader2, Play, MessageSquare, Eye, ClipboardList, Pencil, Copy, Bot, Sparkles, Wand2, X, Globe, Download, Lock, ListChecks, AlertTriangle, FileX, SkipForward, Check, FileText, CornerDownRight, AlertCircle, KeyRound, Workflow, ChevronsUpDown, ChevronsDownUp, ListTodo, CheckCheck, MoreHorizontal, CalendarClock, History, CornerUpLeft, UserRound, ChevronUp, Pause, Activity, Hourglass, MoreVertical, TriangleAlert, CheckSquare, Square, CheckCircle2, SquareArrowOutUpRight, ArrowLeft, LayoutGrid, List, CornerLeftUp, CircleDashed, RotateCcw, ListPlus, Link2, Clock, Bell, MousePointerClick, ArrowUpRight, BellRing, PenLine, Flag, UserRoundCog, MessageSquareReply, MinusCircle, Zap } from 'lucide-react';
|
|
25
25
|
|
|
26
26
|
function useControllableState(value, defaultValue, onChange) {
|
|
27
27
|
const [inner, setInner] = useState(defaultValue);
|
|
@@ -565,15 +565,20 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
565
565
|
}, []);
|
|
566
566
|
useEffect(() => {
|
|
567
567
|
if (Object.values(states).some((s) => s.status === "running")) return;
|
|
568
|
-
const next = steps.find(
|
|
569
|
-
|
|
570
|
-
|
|
568
|
+
const next = steps.find(
|
|
569
|
+
(s) => (s.kind === "agent" || s.kind === "action") && stepPhase(steps, states, s.id) === "ready"
|
|
570
|
+
);
|
|
571
|
+
if (!next || next.kind !== "agent" && next.kind !== "action") return;
|
|
572
|
+
const prompt = next.kind === "agent" ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
|
|
571
573
|
set(next.id, { status: "running", startedAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
572
574
|
timers.current.set(
|
|
573
575
|
next.id,
|
|
574
576
|
setTimeout(() => {
|
|
575
577
|
timers.current.delete(next.id);
|
|
576
|
-
set(
|
|
578
|
+
set(
|
|
579
|
+
next.id,
|
|
580
|
+
next.kind === "agent" ? { status: "done", text: answer.replace("{prompt}", prompt) } : { status: "done" }
|
|
581
|
+
);
|
|
577
582
|
}, delayMs)
|
|
578
583
|
);
|
|
579
584
|
}, [states, steps, workflow]);
|
|
@@ -6212,6 +6217,11 @@ var ICONS = {
|
|
|
6212
6217
|
step_skipped: /* @__PURE__ */ jsx(RotateCcw, { className: "size-3.5", "aria-hidden": true }),
|
|
6213
6218
|
step_failed: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3.5", "aria-hidden": true }),
|
|
6214
6219
|
step_signal: /* @__PURE__ */ jsx(Flag, { className: "size-3.5", "aria-hidden": true }),
|
|
6220
|
+
step_waiting: /* @__PURE__ */ jsx(Hourglass, { className: "size-3.5", "aria-hidden": true }),
|
|
6221
|
+
step_progress: /* @__PURE__ */ jsx(PenLine, { className: "size-3.5", "aria-hidden": true }),
|
|
6222
|
+
step_sent_back: /* @__PURE__ */ jsx(CornerUpLeft, { className: "size-3.5", "aria-hidden": true }),
|
|
6223
|
+
step_ready: /* @__PURE__ */ jsx(BellRing, { className: "size-3.5", "aria-hidden": true }),
|
|
6224
|
+
step_reminded: /* @__PURE__ */ jsx(BellRing, { className: "size-3.5", "aria-hidden": true }),
|
|
6215
6225
|
linked_run: /* @__PURE__ */ jsx(ArrowUpRight, { className: "size-3.5", "aria-hidden": true })
|
|
6216
6226
|
};
|
|
6217
6227
|
var asString = (v) => typeof v === "string" && v.trim() ? v : null;
|
|
@@ -6257,6 +6267,16 @@ function TaskActivityTimeline({
|
|
|
6257
6267
|
return { headline: "Step done" };
|
|
6258
6268
|
case "step_skipped":
|
|
6259
6269
|
return { headline: "Step skipped" };
|
|
6270
|
+
case "step_waiting":
|
|
6271
|
+
return { headline: "Waiting on people" };
|
|
6272
|
+
case "step_progress":
|
|
6273
|
+
return { headline: detail.signed ? "Signed" : "Step moved on" };
|
|
6274
|
+
case "step_sent_back":
|
|
6275
|
+
return { headline: "Sent the work back" };
|
|
6276
|
+
case "step_ready":
|
|
6277
|
+
return { headline: "Told whose turn it is" };
|
|
6278
|
+
case "step_reminded":
|
|
6279
|
+
return { headline: "Sent a reminder" };
|
|
6260
6280
|
case "step_signal":
|
|
6261
6281
|
return { headline: `Signalled \u201C${asString(detail.signal) ?? "a signal"}\u201D` };
|
|
6262
6282
|
case "linked_run":
|
|
@@ -6467,7 +6487,13 @@ function ThreadActivity({ item, children }) {
|
|
|
6467
6487
|
}
|
|
6468
6488
|
) });
|
|
6469
6489
|
}
|
|
6470
|
-
var STEP_KINDS = /* @__PURE__ */ new Set([
|
|
6490
|
+
var STEP_KINDS = /* @__PURE__ */ new Set([
|
|
6491
|
+
"step_started",
|
|
6492
|
+
"step_waiting",
|
|
6493
|
+
"step_done",
|
|
6494
|
+
"step_skipped",
|
|
6495
|
+
"step_failed"
|
|
6496
|
+
]);
|
|
6471
6497
|
function groupThreadActivity(steps, items) {
|
|
6472
6498
|
const out = { before: [], byStep: {}, after: [] };
|
|
6473
6499
|
const states = {};
|
|
@@ -6476,7 +6502,7 @@ function groupThreadActivity(steps, items) {
|
|
|
6476
6502
|
if (item.kind && STEP_KINDS.has(item.kind) && item.step) {
|
|
6477
6503
|
current = item.step;
|
|
6478
6504
|
states[item.step] = {
|
|
6479
|
-
status: item.kind === "step_started" ? "running" : item.kind === "step_done" ? "done" : item.kind === "step_skipped" ? "skipped" : "failed"
|
|
6505
|
+
status: item.kind === "step_started" ? "running" : item.kind === "step_waiting" ? "waiting" : item.kind === "step_done" ? "done" : item.kind === "step_skipped" ? "skipped" : "failed"
|
|
6480
6506
|
};
|
|
6481
6507
|
continue;
|
|
6482
6508
|
}
|
|
@@ -6496,7 +6522,9 @@ var DEFAULT_WORKFLOW_THREAD_STRIP_LABELS = {
|
|
|
6496
6522
|
skip: "Skip this step",
|
|
6497
6523
|
startedBy: "Started by {step} in {thread}",
|
|
6498
6524
|
signalled: "This step signalled \u201C{signal}\u201D",
|
|
6499
|
-
linkedRun: "Started on \u201C{signal}\u201D: open its thread"
|
|
6525
|
+
linkedRun: "Started on \u201C{signal}\u201D: open its thread",
|
|
6526
|
+
waitingFor: "Waiting for {name}",
|
|
6527
|
+
sentBack: "Sent back to be done again"
|
|
6500
6528
|
};
|
|
6501
6529
|
function WorkflowThreadStartedBy({
|
|
6502
6530
|
origin,
|
|
@@ -6554,6 +6582,7 @@ function SignalPill({ signal, l }) {
|
|
|
6554
6582
|
function Mark({ phase, icon }) {
|
|
6555
6583
|
if (phase === "done") return /* @__PURE__ */ jsx(Check, { className: "size-3.5" });
|
|
6556
6584
|
if (phase === "running") return /* @__PURE__ */ jsx(Loader2, { className: "size-3.5 animate-spin" });
|
|
6585
|
+
if (phase === "waiting") return /* @__PURE__ */ jsx(Hourglass, { className: "size-3.5" });
|
|
6557
6586
|
if (phase === "failed") return /* @__PURE__ */ jsx(AlertTriangle, { className: "size-3.5" });
|
|
6558
6587
|
if (phase === "skipped") return /* @__PURE__ */ jsx(MinusCircle, { className: "size-3.5" });
|
|
6559
6588
|
return icon ? /* @__PURE__ */ jsx("span", { className: "flex size-3.5 items-center justify-center [&_svg]:size-3.5", children: icon }) : /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-current" });
|
|
@@ -6593,6 +6622,7 @@ function WorkflowThreadStrip({
|
|
|
6593
6622
|
renderStepAction,
|
|
6594
6623
|
signals = [],
|
|
6595
6624
|
startedBy,
|
|
6625
|
+
assigneeOf,
|
|
6596
6626
|
labels,
|
|
6597
6627
|
className
|
|
6598
6628
|
}) {
|
|
@@ -6619,12 +6649,14 @@ function WorkflowThreadStrip({
|
|
|
6619
6649
|
steps.map((step, i) => {
|
|
6620
6650
|
const phase = stepPhase(steps, states, step.id);
|
|
6621
6651
|
const happened = grouped.byStep[step.id] ?? [];
|
|
6652
|
+
const assignee = phase === "ready" || phase === "waiting" ? assigneeOf?.(step) : void 0;
|
|
6653
|
+
const sentBack = states[step.id]?.sentBack;
|
|
6622
6654
|
const chip = /* @__PURE__ */ jsxs(
|
|
6623
6655
|
"span",
|
|
6624
6656
|
{
|
|
6625
6657
|
className: cn(
|
|
6626
6658
|
"flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2 py-0.5 text-xs font-medium",
|
|
6627
|
-
phase === "running" || phase === "ready" ? "border-primary bg-primary/10 text-primary" : phase === "done" || phase === "skipped" ? "border-primary/30 text-primary" : phase === "failed" ? "border-destructive/40 text-destructive" : "border-dashed border-border text-muted-foreground"
|
|
6659
|
+
phase === "running" || phase === "ready" || phase === "waiting" ? "border-primary bg-primary/10 text-primary" : phase === "done" || phase === "skipped" ? "border-primary/30 text-primary" : phase === "failed" ? "border-destructive/40 text-destructive" : "border-dashed border-border text-muted-foreground"
|
|
6628
6660
|
),
|
|
6629
6661
|
"data-phase": phase,
|
|
6630
6662
|
"data-testid": `workflow-thread-step-${step.id}`,
|
|
@@ -6637,6 +6669,26 @@ function WorkflowThreadStrip({
|
|
|
6637
6669
|
}
|
|
6638
6670
|
),
|
|
6639
6671
|
step.title,
|
|
6672
|
+
sentBack && /* @__PURE__ */ jsx(
|
|
6673
|
+
CornerUpLeft,
|
|
6674
|
+
{
|
|
6675
|
+
className: "size-3 text-amber-600 dark:text-amber-400",
|
|
6676
|
+
"aria-label": l.sentBack,
|
|
6677
|
+
"data-testid": `workflow-thread-step-${step.id}-sent-back`
|
|
6678
|
+
}
|
|
6679
|
+
),
|
|
6680
|
+
assignee && /* @__PURE__ */ jsxs(
|
|
6681
|
+
"span",
|
|
6682
|
+
{
|
|
6683
|
+
className: "flex max-w-32 items-center gap-0.5 truncate font-normal opacity-80",
|
|
6684
|
+
title: l.waitingFor.replace("{name}", assignee),
|
|
6685
|
+
"data-testid": `workflow-thread-step-${step.id}-assignee`,
|
|
6686
|
+
children: [
|
|
6687
|
+
/* @__PURE__ */ jsx(UserRound, { className: "size-3 shrink-0" }),
|
|
6688
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: assignee })
|
|
6689
|
+
]
|
|
6690
|
+
}
|
|
6691
|
+
),
|
|
6640
6692
|
happened.length > 0 && /* @__PURE__ */ jsx("span", { className: "rounded-full bg-muted px-1.5 text-[10px] text-muted-foreground", children: happened.length })
|
|
6641
6693
|
]
|
|
6642
6694
|
}
|
|
@@ -6651,10 +6703,19 @@ function WorkflowThreadStrip({
|
|
|
6651
6703
|
className: "w-72 space-y-1 p-2",
|
|
6652
6704
|
"data-testid": `workflow-thread-step-${step.id}-menu`,
|
|
6653
6705
|
children: [
|
|
6706
|
+
assignee && /* @__PURE__ */ jsx(
|
|
6707
|
+
"p",
|
|
6708
|
+
{
|
|
6709
|
+
className: "px-1 text-xs",
|
|
6710
|
+
"data-testid": `workflow-thread-step-${step.id}-waiting-for`,
|
|
6711
|
+
children: l.waitingFor.replace("{name}", assignee)
|
|
6712
|
+
}
|
|
6713
|
+
),
|
|
6714
|
+
sentBack && /* @__PURE__ */ jsx("p", { className: "px-1 text-xs text-amber-700 dark:text-amber-300", children: l.sentBack }),
|
|
6654
6715
|
/* @__PURE__ */ jsx("p", { className: "px-1 text-xs font-medium text-muted-foreground", children: happened.length ? l.happened.replace("{count}", String(happened.length)) : l.nothingYet }),
|
|
6655
6716
|
happened.map((item) => /* @__PURE__ */ jsx(Entry, { item }, item.id)),
|
|
6656
6717
|
renderStepAction?.(step, phase),
|
|
6657
|
-
onSkip && ["ready", "blocked", "failed"].includes(phase) && /* @__PURE__ */ jsx(
|
|
6718
|
+
onSkip && ["ready", "blocked", "failed", "waiting"].includes(phase) && /* @__PURE__ */ jsx(
|
|
6658
6719
|
"button",
|
|
6659
6720
|
{
|
|
6660
6721
|
type: "button",
|
|
@@ -6717,7 +6778,10 @@ var STEP_LABELS = {
|
|
|
6717
6778
|
step_started: "Step started",
|
|
6718
6779
|
step_done: "Step done",
|
|
6719
6780
|
step_skipped: "Step skipped",
|
|
6720
|
-
step_failed: "Step failed"
|
|
6781
|
+
step_failed: "Step failed",
|
|
6782
|
+
step_waiting: "Waiting",
|
|
6783
|
+
step_progress: "Signed",
|
|
6784
|
+
step_sent_back: "Sent back"
|
|
6721
6785
|
};
|
|
6722
6786
|
function compactThreadActivity(events) {
|
|
6723
6787
|
const result = [];
|
|
@@ -10006,5 +10070,5 @@ function AgentCreateView({
|
|
|
10006
10070
|
}
|
|
10007
10071
|
|
|
10008
10072
|
export { AgentAvatarField, AgentBar, AgentBarIconButton, AgentBarMenu, AgentBarNotes, AgentBarProbeAnswer, AgentBarQueuedNote, AgentBarStatus, AgentCard, AgentCreateView, AgentCreatedView, AgentCreator, AgentEditView, AgentGallery, AgentMainView, AgentSelect, AgentTypeSelector, CapabilityGrid, CapabilityTile, ConfigField, ConfigForm, ConsentActions, ConsentBulletList, ConsentCard, ConsentFootnote, ConsentHeader, ConsentMessage, ConsentNotice, ConsentPage, ConsentPermissionList, ConsentSection, ConsentStrong, ConsentText, ConversationListView, ConversationTurnSpeaker, CopyableUrl, DEFAULT_AGENT_AVATAR_FIELD_LABELS, DEFAULT_AGENT_BAR_LABELS, DEFAULT_AGENT_CARD_LABELS, DEFAULT_AGENT_CREATOR_LABELS, DEFAULT_AGENT_GALLERY_LABELS, DEFAULT_AGENT_SELECT_LABELS, DEFAULT_AGENT_STEPS_LABELS, DEFAULT_AGENT_TYPE_SELECTOR_LABELS, DEFAULT_AUTHORIZE_AGENT_LABELS, DEFAULT_CONFIG_FIELD_LABELS, DEFAULT_CONFIG_FORM_LABELS, DEFAULT_CONSENT_ACTIONS_LABELS, DEFAULT_COPYABLE_URL_LABELS, DEFAULT_NEW_THREAD_DIALOG_LABELS, DEFAULT_PILL_SELECT_LABELS, DEFAULT_RECURRENCE, DEFAULT_RECURRENCE_BUILDER_LABELS, DEFAULT_SKILL_CARD_LABELS, DEFAULT_SKILL_EDIT_FORM_LABELS, DEFAULT_SKILL_GENERATE_FORM_LABELS, DEFAULT_SKILL_GLOBAL_BADGE_LABELS, DEFAULT_SKILL_ROW_LABELS, DEFAULT_SKILL_VIEW_TOGGLE_LABELS, DEFAULT_SUBAGENT_ROSTER_LABELS, DEFAULT_TASKS_CHROME_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_TASK_COMPOSER_LABELS, DEFAULT_TASK_LIST_LABELS, DEFAULT_TASK_OUTPUTS_CELL_LABELS, DEFAULT_TASK_PLAN_LABELS, DEFAULT_TASK_RUNS_DIALOG_LABELS, DEFAULT_TASK_STATUS_PILL_LABELS, DEFAULT_TASK_THREAD_CHIP_LABELS, DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_TUPLE_ARRAY_FIELD_LABELS, DEFAULT_UPLOAD_TASK_ITEM_LABELS, DEFAULT_UPLOAD_TASK_LIST_LABELS, DEFAULT_WORKFLOWS_CHROME_LABELS, DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, DERIVED_NAME_WORDS, EMPTY_NEW_THREAD, EntityChip, GoalCriteria, MAX_TASK_DEPTH, NewThreadDialog, PersonPill, PillSelect, RecurrenceBuilder, STATUS_LABELS, STATUS_ORDER, STATUS_TONE, SkillActionButton, SkillCard, SkillDetail, SkillDetailSection, SkillEditForm, SkillFilterChips, SkillGenerateForm, SkillGlobalBadge, SkillRow, SkillTile, SkillTypeBadge, SkillViewToggle, StepDetail, StepNarration, StepOutcome, StepParams, StepRow, StepSummary, StepTrace, StepTraceSummary, SubAgentLane, SubStepGroup, SubagentRoster, TASK_COLUMN_ORDER, TRIGGER_LABELS, TaskActivityDialog, TaskActivityTimeline, TaskComposer, TaskFlow, TaskInbox, TaskMoveDialog, TaskOutputsCell, TaskPlan, TaskRunsDialog, TaskStartDialog, TaskStatusPill, TaskTable, TaskThreadChip, TaskTriggerChip, TasksToolbar, ThreadActivity, ThreadNotifyDialog, TupleArrayField, UploadTaskItem, UploadTaskList, WEEKDAYS, WORKFLOW_COLUMN_ORDER, WorkflowConfigDialog, WorkflowDocumentsField, WorkflowLauncher, WorkflowThreadStartedBy, WorkflowThreadStrip, WorkflowsTable, WorkflowsToolbar, agentConfigSectionToValues, agentCreatorToConfigSection, asTaskStatus, authModeFor, buildRRule, buildTaskRows, buildWorkflowScopeSource, compactThreadActivity, composePersona, composerToTaskQuery, composerToWorkRequest, composerToWorkflowRequest, composerToWorkflowUpdate, createTaskColumns, createWorkflowColumns, createsWork, defaultScopeRenderer, defaultTaskComposerValues, deriveAgentName, deriveWorkflowName, descendantIds, describeRRule, filterConversationRows, firstWords, formatElapsed, goalProgress, groupThreadActivity, hasTaskFields, hasTrigger, humanizeSection, indexTasks, inferType, inputDocumentIds, isAgenticWorkflow, isOutOfBounds, isPlainTodo, isSkillRow, isValidAgentName, isoToLocalInput, linkedRunsFromActivity, localInputToIso, matchWorkflowScope, moveTargets, newThreadToRequest, nextCriterionId, ownerExtId, parseRRule, prettifyKey, resolveScopeInputs, skillSlug, stripPersonaPreamble, summarizeAgent, summarizeCapabilities, taskComposerToCreateRequest, taskComposerToUpdateRequest, taskNeedsAccess, taskToComposerValues, useWorkflowPreview, workflowFromSkillMarkdown, workflowStatus, workflowTaskFields, workflowToComposerValues, workflowToSkillMarkdown, workflowTriggerType, workflowWhen };
|
|
10009
|
-
//# sourceMappingURL=chunk-
|
|
10010
|
-
//# sourceMappingURL=chunk-
|
|
10073
|
+
//# sourceMappingURL=chunk-HEVVT6IT.js.map
|
|
10074
|
+
//# sourceMappingURL=chunk-HEVVT6IT.js.map
|