@arbidocs/blocks 0.4.82 → 0.4.84
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 +279 -279
- package/dist/agents/index.js +4 -4
- package/dist/agents/workflows/StepBarFrame.d.ts +12 -4
- package/dist/{chunk-FE4ULGOR.js → chunk-2YOVK524.js} +28 -5
- package/dist/chunk-2YOVK524.js.map +1 -0
- package/dist/{chunk-5XVWGJ2H.cjs → chunk-B3WCKBJ7.cjs} +3 -3
- package/dist/{chunk-5XVWGJ2H.cjs.map → chunk-B3WCKBJ7.cjs.map} +1 -1
- package/dist/{chunk-THCFZKTM.js → chunk-CONIA2ZA.js} +8 -8
- package/dist/chunk-CONIA2ZA.js.map +1 -0
- package/dist/{chunk-O35LRB3P.js → chunk-GJV2G4FC.js} +3 -3
- package/dist/{chunk-O35LRB3P.js.map → chunk-GJV2G4FC.js.map} +1 -1
- package/dist/{chunk-ZVBPRMHJ.cjs → chunk-JH6JTI76.cjs} +27 -4
- package/dist/chunk-JH6JTI76.cjs.map +1 -0
- package/dist/{chunk-COP6GVKN.js → chunk-RSKSXEPW.js} +57 -19
- package/dist/chunk-RSKSXEPW.js.map +1 -0
- package/dist/{chunk-IRG5LPDP.js → chunk-RX35SMPR.js} +6 -6
- package/dist/{chunk-IRG5LPDP.js.map → chunk-RX35SMPR.js.map} +1 -1
- package/dist/{chunk-BX7JWZWE.cjs → chunk-RYYYHPFU.cjs} +8 -8
- package/dist/chunk-RYYYHPFU.cjs.map +1 -0
- package/dist/{chunk-VWK24TEY.cjs → chunk-XA5S4776.cjs} +45 -45
- package/dist/chunk-XA5S4776.cjs.map +1 -0
- package/dist/{chunk-LRRJ2HBW.cjs → chunk-ZQYE7J3J.cjs} +54 -14
- package/dist/chunk-ZQYE7J3J.cjs.map +1 -0
- package/dist/connect/index.cjs +81 -51
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +43 -13
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedWorkflowBuilder.d.ts +9 -2
- package/dist/connection/WorkflowRunnerDialogs.d.ts +12 -1
- package/dist/document-tools/SignDocumentDialog.d.ts +9 -2
- package/dist/document-tools/index.cjs +2 -2
- package/dist/document-tools/index.js +1 -1
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/index.cjs +22 -3
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +22 -4
- package/dist/files/index.js.map +1 -1
- package/dist/files/views/TagFormParts.d.ts +8 -0
- package/dist/files/views/index.d.ts +1 -1
- package/dist/home/index.cjs +1 -1
- package/dist/home/index.js +1 -1
- package/dist/index.cjs +891 -609
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +283 -12
- package/dist/index.js.map +1 -1
- package/dist/settings/index.cjs +35 -35
- package/dist/settings/index.js +3 -3
- package/dist/shell/index.cjs +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/studio/index.cjs +1 -1
- package/dist/studio/index.js +1 -1
- package/dist/tags/TagDetail.d.ts +38 -0
- package/dist/tags/TagMatrix.d.ts +27 -8
- package/dist/tags/TagsNav.d.ts +44 -0
- package/dist/tags/index.d.ts +8 -3
- package/dist/tags/tagMatrixDocx.d.ts +4 -1
- package/dist/tags/tagMatrixModel.d.ts +10 -6
- package/dist/workflow-canvas/index.cjs +82 -64
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +40 -22
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workspaces/index.cjs +1 -1
- package/dist/workspaces/index.js +1 -1
- package/package.json +4 -4
- package/dist/chunk-BX7JWZWE.cjs.map +0 -1
- package/dist/chunk-COP6GVKN.js.map +0 -1
- package/dist/chunk-FE4ULGOR.js.map +0 -1
- package/dist/chunk-LRRJ2HBW.cjs.map +0 -1
- package/dist/chunk-THCFZKTM.js.map +0 -1
- package/dist/chunk-VWK24TEY.cjs.map +0 -1
- package/dist/chunk-ZVBPRMHJ.cjs.map +0 -1
|
@@ -12,23 +12,32 @@ function SignDocumentDialog({
|
|
|
12
12
|
onOpenChange,
|
|
13
13
|
documentId,
|
|
14
14
|
pdfBlob,
|
|
15
|
-
|
|
15
|
+
version,
|
|
16
|
+
appearance,
|
|
17
|
+
onOpenCurrent
|
|
16
18
|
}) {
|
|
17
19
|
const { user, notify, openDocument, emailDocument, certificateUrl } = documentTools.useDocumentTools();
|
|
18
20
|
const [name, setName] = react.useState(() => user?.name ?? "");
|
|
19
21
|
const [includeDate, setIncludeDate] = react.useState(false);
|
|
20
22
|
const [password, setPassword] = react.useState("");
|
|
21
23
|
const [error, setError] = react.useState(null);
|
|
24
|
+
const [isStale, setIsStale] = react.useState(false);
|
|
22
25
|
const sign = documentTools.useSignDocument();
|
|
26
|
+
const openCurrent = onOpenCurrent ?? (openDocument ? () => {
|
|
27
|
+
onOpenChange(false);
|
|
28
|
+
openDocument(documentId);
|
|
29
|
+
} : void 0);
|
|
23
30
|
const signer = { name };
|
|
24
31
|
const handleSubmit = async (e) => {
|
|
25
32
|
e.preventDefault();
|
|
26
33
|
if (!user?.email) return;
|
|
27
34
|
setError(null);
|
|
35
|
+
setIsStale(false);
|
|
28
36
|
try {
|
|
29
37
|
const result = await sign.mutateAsync({
|
|
30
38
|
documentId,
|
|
31
39
|
pdfBlob,
|
|
40
|
+
version,
|
|
32
41
|
email: user.email,
|
|
33
42
|
password,
|
|
34
43
|
signer,
|
|
@@ -54,6 +63,7 @@ function SignDocumentDialog({
|
|
|
54
63
|
openDocument?.(signedId);
|
|
55
64
|
} catch (err) {
|
|
56
65
|
setError(err instanceof Error ? err.message : "Signing failed");
|
|
66
|
+
setIsStale(err instanceof documentTools.SigningError && err.reason === "stale");
|
|
57
67
|
}
|
|
58
68
|
};
|
|
59
69
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -120,7 +130,20 @@ function SignDocumentDialog({
|
|
|
120
130
|
}
|
|
121
131
|
)
|
|
122
132
|
] }),
|
|
123
|
-
error && /* @__PURE__ */ jsxRuntime.
|
|
133
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", role: "alert", children: [
|
|
134
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-text", "data-testid": "sign-document-error", children: error }),
|
|
135
|
+
isStale && openCurrent && /* @__PURE__ */ jsxRuntime.jsx(
|
|
136
|
+
ui.Button,
|
|
137
|
+
{
|
|
138
|
+
type: "button",
|
|
139
|
+
variant: "outline",
|
|
140
|
+
size: "sm",
|
|
141
|
+
onClick: openCurrent,
|
|
142
|
+
"data-testid": "sign-document-open-current-button",
|
|
143
|
+
children: "Open the current version"
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
] })
|
|
124
147
|
] }),
|
|
125
148
|
/* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalScaffold.Footer, { children: [
|
|
126
149
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -149,5 +172,5 @@ function SignDocumentDialog({
|
|
|
149
172
|
}
|
|
150
173
|
|
|
151
174
|
exports.SignDocumentDialog = SignDocumentDialog;
|
|
152
|
-
//# sourceMappingURL=chunk-
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
175
|
+
//# sourceMappingURL=chunk-JH6JTI76.cjs.map
|
|
176
|
+
//# sourceMappingURL=chunk-JH6JTI76.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/document-tools/SignDocumentDialog.tsx"],"names":["useDocumentTools","useState","useSignDocument","certificateLink","SigningError","jsx","ModalScaffold","jsxs","Label","Input","Checkbox","Button"],"mappings":"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","file":"chunk-JH6JTI76.cjs","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 SigningError,\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: `GET /view?version=`, never the original's download. */\n pdfBlob: Blob\n /** The version `pdfBlob` is of; omitted = the current version. */\n version?: number\n /** Where the signature goes; omitted = bottom of the last page. */\n appearance?: SignatureAppearance\n /**\n * Open the current version when the one shown has been superseded (only the current version can\n * be signed). Default: the host's `openDocument` on the document, after the dialog closes.\n */\n onOpenCurrent?: () => void\n}\n\nexport function SignDocumentDialog({\n open,\n onOpenChange,\n documentId,\n pdfBlob,\n version,\n appearance,\n onOpenCurrent,\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 [isStale, setIsStale] = useState(false)\n const sign = useSignDocument()\n const openCurrent =\n onOpenCurrent ??\n (openDocument\n ? () => {\n onOpenChange(false)\n openDocument(documentId)\n }\n : undefined)\n\n const signer = { name }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n if (!user?.email) return\n setError(null)\n setIsStale(false)\n try {\n const result = await sign.mutateAsync({\n documentId,\n pdfBlob,\n version,\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 setIsStale(err instanceof SigningError && err.reason === 'stale')\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 <div className=\"space-y-2\" role=\"alert\">\n <p className=\"text-sm text-red-text\" data-testid=\"sign-document-error\">\n {error}\n </p>\n {isStale && openCurrent && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={openCurrent}\n data-testid=\"sign-document-open-current-button\"\n >\n Open the current version\n </Button>\n )}\n </div>\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"]}
|
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import { Download, Loader2, FileDown, Plus, AlertTriangle, FileText, Lightbulb } from 'lucide-react';
|
|
4
|
-
import { Checkbox, Button,
|
|
5
|
-
import {
|
|
2
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
3
|
+
import { Download, Loader2, FileDown, Plus, AlertTriangle, FileText, Lightbulb, MessagesSquare } from 'lucide-react';
|
|
4
|
+
import { cn, Checkbox, Button, Input } from '@arbidocs/react/ui';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
6
|
import { zipSync, strToU8 } from 'fflate';
|
|
7
7
|
|
|
8
8
|
// src/tags/tagMatrixModel.ts
|
|
9
|
+
var sameField = (a, b) => a.type === b.type && a.name.trim().toLowerCase() === b.name.trim().toLowerCase();
|
|
9
10
|
function tagMatrixColumns(matrix) {
|
|
10
11
|
const columns = [];
|
|
11
12
|
const add = (f) => {
|
|
12
|
-
if (!columns.some((c) => c.id === f.id)) columns.push(f);
|
|
13
|
+
if (!columns.some((c) => c.id === f.id || sameField(c, f))) columns.push(f);
|
|
13
14
|
};
|
|
14
15
|
for (const f of matrix?.parent?.fields ?? []) add(f);
|
|
15
16
|
for (const row of matrix?.rows ?? []) for (const f of row.tag.fields ?? []) add(f);
|
|
16
17
|
return columns;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
function rowFieldId(row, column) {
|
|
20
|
+
const fields = row.tag.fields ?? [];
|
|
21
|
+
if (fields.some((f) => f.id === column.id)) return column.id;
|
|
22
|
+
return fields.find((f) => sameField(f, column))?.id ?? column.id;
|
|
23
|
+
}
|
|
24
|
+
var cellValue = (row, column) => row.tag.field_values?.[rowFieldId(row, column)];
|
|
25
|
+
var isGap = (row) => row.doc_count + row.fact_count + row.thread_count === 0;
|
|
20
26
|
function cellText(value, column, nameOf) {
|
|
21
27
|
if (value === void 0 || value === null || value === "") return "";
|
|
22
28
|
if (column.type === "checkbox") return value ? "Yes" : "No";
|
|
@@ -52,7 +58,8 @@ function tagMatrixMarkdown(matrix, options) {
|
|
|
52
58
|
for (const row of matrix.rows ?? []) {
|
|
53
59
|
const evidence = [
|
|
54
60
|
`${row.doc_count} document${row.doc_count === 1 ? "" : "s"}`,
|
|
55
|
-
`${row.fact_count} fact${row.fact_count === 1 ? "" : "s"}
|
|
61
|
+
`${row.fact_count} fact${row.fact_count === 1 ? "" : "s"}`,
|
|
62
|
+
...row.thread_count ? [`${row.thread_count} thread${row.thread_count === 1 ? "" : "s"}`] : []
|
|
56
63
|
].join(", ");
|
|
57
64
|
const cells = [
|
|
58
65
|
row.tag.name,
|
|
@@ -69,8 +76,11 @@ var DEFAULT_TAG_MATRIX_LABELS = {
|
|
|
69
76
|
evidence: "Evidence",
|
|
70
77
|
documents: "{count} documents",
|
|
71
78
|
facts: "{count} facts",
|
|
79
|
+
threads: "{count} threads",
|
|
72
80
|
document: "1 document",
|
|
73
81
|
fact: "1 fact",
|
|
82
|
+
thread: "1 thread",
|
|
83
|
+
untitledThread: "Untitled thread",
|
|
74
84
|
more: "+{count} more",
|
|
75
85
|
gap: "No evidence",
|
|
76
86
|
gapsOnly: "Show gaps only",
|
|
@@ -89,7 +99,7 @@ var DEFAULT_TAG_MATRIX_LABELS = {
|
|
|
89
99
|
};
|
|
90
100
|
var ROW_LABEL_WIDTH = "w-[18rem] min-w-[12rem] max-w-[18rem]";
|
|
91
101
|
var ROW_LABEL = "line-clamp-3 whitespace-normal break-words";
|
|
92
|
-
function
|
|
102
|
+
function TagMatrixCell({
|
|
93
103
|
row,
|
|
94
104
|
column,
|
|
95
105
|
people,
|
|
@@ -102,7 +112,7 @@ function Cell({
|
|
|
102
112
|
const shown = cellText(value, column, nameOf);
|
|
103
113
|
const [draft, setDraft] = useState(shown);
|
|
104
114
|
useEffect(() => setDraft(cellText(value, column)), [value, column]);
|
|
105
|
-
const set = (next) => void onChange?.(row.tag.external_id, column
|
|
115
|
+
const set = (next) => void onChange?.(row.tag.external_id, rowFieldId(row, column), next);
|
|
106
116
|
if (!onChange)
|
|
107
117
|
return /* @__PURE__ */ jsx("span", { className: "block truncate", title: shown, "data-testid": testId, children: shown || /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: l.choose }) });
|
|
108
118
|
const field = "h-8 w-full min-w-24 rounded-md border border-transparent bg-transparent px-1.5 text-sm hover:border-input focus:border-input focus:bg-background focus:outline-none";
|
|
@@ -159,11 +169,13 @@ function Cell({
|
|
|
159
169
|
}
|
|
160
170
|
}
|
|
161
171
|
}
|
|
172
|
+
var countText = (count2, one, many) => count2 === 1 ? one : count2 ? many.replace("{count}", String(count2)) : null;
|
|
162
173
|
function Evidence({
|
|
163
174
|
row,
|
|
164
175
|
l,
|
|
165
176
|
onOpenDocument,
|
|
166
177
|
onOpenFact,
|
|
178
|
+
onOpenThread,
|
|
167
179
|
onOpenRow,
|
|
168
180
|
testId
|
|
169
181
|
}) {
|
|
@@ -182,12 +194,14 @@ function Evidence({
|
|
|
182
194
|
);
|
|
183
195
|
const docs = row.docs ?? [];
|
|
184
196
|
const facts = row.facts ?? [];
|
|
185
|
-
const
|
|
197
|
+
const threads = row.threads ?? [];
|
|
198
|
+
const more = row.doc_count - docs.length + (row.fact_count - facts.length) + (row.thread_count - threads.length);
|
|
186
199
|
const chip = "inline-flex max-w-44 items-center gap-1 truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary disabled:hover:border-border disabled:hover:text-inherit";
|
|
187
200
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1", "data-testid": testId, children: [
|
|
188
201
|
/* @__PURE__ */ jsx("span", { className: "mr-1 text-xs text-muted-foreground", children: [
|
|
189
|
-
row.doc_count
|
|
190
|
-
row.fact_count
|
|
202
|
+
countText(row.doc_count, l.document, l.documents),
|
|
203
|
+
countText(row.fact_count, l.fact, l.facts),
|
|
204
|
+
countText(row.thread_count, l.thread, l.threads)
|
|
191
205
|
].filter(Boolean).join(" \xB7 ") }),
|
|
192
206
|
docs.map((d) => /* @__PURE__ */ jsxs(
|
|
193
207
|
"button",
|
|
@@ -221,6 +235,22 @@ function Evidence({
|
|
|
221
235
|
},
|
|
222
236
|
f.fact_ext_id
|
|
223
237
|
)),
|
|
238
|
+
threads.map((t) => /* @__PURE__ */ jsxs(
|
|
239
|
+
"button",
|
|
240
|
+
{
|
|
241
|
+
type: "button",
|
|
242
|
+
className: chip,
|
|
243
|
+
title: t.title || l.untitledThread,
|
|
244
|
+
disabled: !onOpenThread,
|
|
245
|
+
onClick: () => onOpenThread?.(t.conversation_ext_id),
|
|
246
|
+
"data-testid": `${testId}-thread-${t.conversation_ext_id}`,
|
|
247
|
+
children: [
|
|
248
|
+
/* @__PURE__ */ jsx(MessagesSquare, { className: "size-3 shrink-0" }),
|
|
249
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: t.title || l.untitledThread })
|
|
250
|
+
]
|
|
251
|
+
},
|
|
252
|
+
t.conversation_ext_id
|
|
253
|
+
)),
|
|
224
254
|
more > 0 && (onOpenRow ? /* @__PURE__ */ jsx(
|
|
225
255
|
"button",
|
|
226
256
|
{
|
|
@@ -240,6 +270,7 @@ function TagMatrix({
|
|
|
240
270
|
onAddRow,
|
|
241
271
|
onOpenDocument,
|
|
242
272
|
onOpenFact,
|
|
273
|
+
onOpenThread,
|
|
243
274
|
onOpenRow,
|
|
244
275
|
onExport,
|
|
245
276
|
onDownload,
|
|
@@ -397,7 +428,7 @@ function TagMatrix({
|
|
|
397
428
|
}
|
|
398
429
|
),
|
|
399
430
|
columns.map((c) => /* @__PURE__ */ jsx("td", { className: "px-1.5 py-1", children: /* @__PURE__ */ jsx(
|
|
400
|
-
|
|
431
|
+
TagMatrixCell,
|
|
401
432
|
{
|
|
402
433
|
row,
|
|
403
434
|
column: c,
|
|
@@ -414,6 +445,7 @@ function TagMatrix({
|
|
|
414
445
|
l,
|
|
415
446
|
onOpenDocument,
|
|
416
447
|
onOpenFact,
|
|
448
|
+
onOpenThread,
|
|
417
449
|
onOpenRow,
|
|
418
450
|
testId: `${testId}-evidence-${id}`
|
|
419
451
|
}
|
|
@@ -488,6 +520,9 @@ var DEFAULT_TAG_MATRIX_DOCX_LABELS = {
|
|
|
488
520
|
documents: "{count} documents",
|
|
489
521
|
fact: "1 fact",
|
|
490
522
|
facts: "{count} facts",
|
|
523
|
+
thread: "1 thread",
|
|
524
|
+
threads: "{count} threads",
|
|
525
|
+
untitledThread: "Untitled thread",
|
|
491
526
|
empty: "No rows."
|
|
492
527
|
};
|
|
493
528
|
var INVALID_XML = /[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g;
|
|
@@ -504,14 +539,16 @@ function evidenceParagraphs(row, l) {
|
|
|
504
539
|
if (isGap(row)) return [];
|
|
505
540
|
const docs = row.docs ?? [];
|
|
506
541
|
const facts = row.facts ?? [];
|
|
507
|
-
const
|
|
542
|
+
const threads = row.threads ?? [];
|
|
543
|
+
const more = row.doc_count - docs.length + (row.fact_count - facts.length) + (row.thread_count - threads.length);
|
|
508
544
|
return [
|
|
509
545
|
paragraph(
|
|
510
546
|
[
|
|
511
547
|
{
|
|
512
548
|
text: [
|
|
513
549
|
row.doc_count ? count(row.doc_count, l.document, l.documents) : null,
|
|
514
|
-
row.fact_count ? count(row.fact_count, l.fact, l.facts) : null
|
|
550
|
+
row.fact_count ? count(row.fact_count, l.fact, l.facts) : null,
|
|
551
|
+
row.thread_count ? count(row.thread_count, l.thread, l.threads) : null
|
|
515
552
|
].filter(Boolean).join(" \xB7 "),
|
|
516
553
|
muted: true
|
|
517
554
|
}
|
|
@@ -525,6 +562,7 @@ function evidenceParagraphs(row, l) {
|
|
|
525
562
|
)
|
|
526
563
|
),
|
|
527
564
|
...facts.map((f) => paragraph([{ text: `\u201C${f.text}\u201D`, italic: true }], "MatrixCell")),
|
|
565
|
+
...threads.map((t) => paragraph([{ text: t.title || l.untitledThread }], "MatrixCell")),
|
|
528
566
|
...more > 0 ? [paragraph([{ text: l.more.replace("{count}", String(more)), muted: true }], "MatrixCell")] : []
|
|
529
567
|
];
|
|
530
568
|
}
|
|
@@ -601,6 +639,6 @@ function tagMatrixDocx(matrix, options) {
|
|
|
601
639
|
});
|
|
602
640
|
}
|
|
603
641
|
|
|
604
|
-
export { DEFAULT_TAG_MATRIX_DOCX_LABELS, DEFAULT_TAG_MATRIX_LABELS, DOCX_MIME_TYPE, TAG_MATRIX_DOCX_LANDSCAPE_AFTER, TagMatrix, cellText, cellValue, isGap, parseCell, tagMatrixColumns, tagMatrixDocumentXml, tagMatrixDocx, tagMatrixMarkdown };
|
|
605
|
-
//# sourceMappingURL=chunk-
|
|
606
|
-
//# sourceMappingURL=chunk-
|
|
642
|
+
export { DEFAULT_TAG_MATRIX_DOCX_LABELS, DEFAULT_TAG_MATRIX_LABELS, DOCX_MIME_TYPE, TAG_MATRIX_DOCX_LANDSCAPE_AFTER, TagMatrix, TagMatrixCell, cellText, cellValue, isGap, parseCell, rowFieldId, tagMatrixColumns, tagMatrixDocumentXml, tagMatrixDocx, tagMatrixMarkdown };
|
|
643
|
+
//# sourceMappingURL=chunk-RSKSXEPW.js.map
|
|
644
|
+
//# sourceMappingURL=chunk-RSKSXEPW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tags/tagMatrixModel.ts","../src/tags/TagMatrix.tsx","../src/tags/tagMatrixDocx.ts"],"names":["count"],"mappings":"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","file":"chunk-RSKSXEPW.js","sourcesContent":["/**\n * The tag matrix as data: a parent label's child labels (or every tag of a kind) are the rows, the\n * fields they share (the parent's, then any a row adds) the columns, and each row's linked\n * documents, facts and threads its evidence. Pure helpers for `TagMatrix`: the columns, a row's value, the gaps, and the snapshot\n * as a Markdown document.\n */\n\nimport type { components } from '@arbidocs/client'\n\nexport type TagMatrixData = components['schemas']['TagMatrixResponse']\nexport type TagMatrixRowData = components['schemas']['TagMatrixRow']\nexport type TagMatrixField = components['schemas']['TagField']\nexport type TagMatrixFieldType = TagMatrixField['type']\n\n/** The same field defined on two tags: same name (any case) and type. */\nconst sameField = (a: TagMatrixField, b: TagMatrixField) =>\n a.type === b.type && a.name.trim().toLowerCase() === b.name.trim().toLowerCase()\n\n/**\n * The columns: the parent's fields (shared by every row), then fields only some rows define, in\n * the order first seen. Rows that each define the same field share one column — every person has\n * its own \"Role\", and a matrix of people has one Role column (the SDK's `tagMatrixColumns` keeps\n * one column per field id).\n */\nexport function tagMatrixColumns(matrix: TagMatrixData | null | undefined): TagMatrixField[] {\n const columns: TagMatrixField[] = []\n const add = (f: TagMatrixField) => {\n if (!columns.some((c) => c.id === f.id || sameField(c, f))) columns.push(f)\n }\n for (const f of matrix?.parent?.fields ?? []) add(f)\n for (const row of matrix?.rows ?? []) for (const f of row.tag.fields ?? []) add(f)\n return columns\n}\n\n/** The id of a row's field behind a column: the column's own, or the row's field of that name. */\nexport function rowFieldId(row: TagMatrixRowData, column: TagMatrixField): string {\n const fields = row.tag.fields ?? []\n if (fields.some((f) => f.id === column.id)) return column.id\n return fields.find((f) => sameField(f, column))?.id ?? column.id\n}\n\n/** A row's value for a column (values are keyed by field id). */\nexport const cellValue = (row: TagMatrixRowData, column: TagMatrixField): unknown =>\n row.tag.field_values?.[rowFieldId(row, column)]\n\n/** A row with nothing behind it: no linked document, fact or thread. */\nexport const isGap = (row: TagMatrixRowData): boolean =>\n row.doc_count + row.fact_count + row.thread_count === 0\n\n/** A value as text (a person by name, a checkbox as yes or no, blank as empty). */\nexport function cellText(\n value: unknown,\n column: Pick<TagMatrixField, 'type'>,\n nameOf?: (id: string) => string | undefined\n): string {\n if (value === undefined || value === null || value === '') return ''\n if (column.type === 'checkbox') return value ? 'Yes' : 'No'\n if (column.type === 'person' && typeof value === 'string') return nameOf?.(value) ?? value\n if (Array.isArray(value)) return value.map(String).join(', ')\n return String(value)\n}\n\n/** A typed input's text back as the value to store (`null` clears it). */\nexport function parseCell(text: string, type: TagMatrixFieldType): unknown {\n const t = text.trim()\n if (t === '') return null\n if (type === 'number') {\n const n = Number(t)\n return Number.isNaN(n) ? null : n\n }\n return t\n}\n\nconst escapeCell = (text: string) => text.replace(/\\|/g, '\\\\|').replace(/\\n+/g, ' ')\n\nexport interface TagMatrixMarkdownOptions {\n title: string\n /** The evidence column's heading. */\n evidence?: string\n /** The row column's heading. */\n rowHeading?: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n}\n\n/**\n * The matrix as a Markdown document: a heading, when it was taken, and one table (a row per\n * label, a column per field, then the evidence counts). What a host files or has signed.\n */\nexport function tagMatrixMarkdown(\n matrix: TagMatrixData,\n options: TagMatrixMarkdownOptions\n): string {\n const columns = tagMatrixColumns(matrix)\n const heads = [\n options.rowHeading ?? 'Item',\n ...columns.map((c) => c.name),\n options.evidence ?? 'Evidence',\n ]\n const lines = [\n `# ${options.title}`,\n '',\n `_Snapshot taken ${new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace('T', ' ')} UTC_`,\n '',\n `| ${heads.map(escapeCell).join(' | ')} |`,\n `| ${heads.map(() => '---').join(' | ')} |`,\n ]\n for (const row of matrix.rows ?? []) {\n const evidence = [\n `${row.doc_count} document${row.doc_count === 1 ? '' : 's'}`,\n `${row.fact_count} fact${row.fact_count === 1 ? '' : 's'}`,\n ...(row.thread_count\n ? [`${row.thread_count} thread${row.thread_count === 1 ? '' : 's'}`]\n : []),\n ].join(', ')\n const cells = [\n row.tag.name,\n ...columns.map((c) => cellText(cellValue(row, c), c, options.nameOf)),\n evidence,\n ]\n lines.push(`| ${cells.map(escapeCell).join(' | ')} |`)\n }\n return `${lines.join('\\n')}\\n`\n}\n","/**\n * A label's children (or every tag of a kind: every person, every issue) as a matrix: one row per\n * tag, a column per field they share, editable in place by type (text, number, date, checkbox,\n * choice, person), and the evidence behind each row (its linked documents, facts and threads, with\n * counts). Rows with no evidence are marked as gaps. A row can be added, and the matrix exported as\n * a Word document snapshot (filed in the workspace) or downloaded.\n * The data and every write come from the host (`ConnectedTagMatrix` binds them to ARBI).\n */\n\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n Download,\n FileDown,\n FileText,\n Lightbulb,\n Loader2,\n MessagesSquare,\n Plus,\n} from 'lucide-react'\nimport { Button, Checkbox, Input, cn } from '@arbidocs/react/ui'\nimport {\n cellText,\n cellValue,\n isGap,\n parseCell,\n rowFieldId,\n tagMatrixColumns,\n type TagMatrixData,\n type TagMatrixField,\n type TagMatrixRowData,\n} from './tagMatrixModel'\n\nexport interface TagMatrixLabels {\n row: string\n evidence: string\n /** `{count}` documents linked. */\n documents: string\n /** `{count}` facts linked. */\n facts: string\n /** `{count}` threads linked. */\n threads: string\n /** One document, one fact, one thread. */\n document: string\n fact: string\n thread: string\n /** A thread without a title. */\n untitledThread: string\n /** `{count}` more links than shown. */\n more: string\n gap: string\n gapsOnly: string\n /** `{count}` rows without evidence. */\n gapCount: string\n addRow: string\n addRowPlaceholder: string\n add: string\n export: string\n exporting: string\n download: string\n empty: string\n loading: string\n noColumns: string\n choose: string\n yes: string\n}\n\nexport const DEFAULT_TAG_MATRIX_LABELS: TagMatrixLabels = {\n row: 'Item',\n evidence: 'Evidence',\n documents: '{count} documents',\n facts: '{count} facts',\n threads: '{count} threads',\n document: '1 document',\n fact: '1 fact',\n thread: '1 thread',\n untitledThread: 'Untitled thread',\n more: '+{count} more',\n gap: 'No evidence',\n gapsOnly: 'Show gaps only',\n gapCount: '{count} without evidence',\n addRow: 'Add row',\n addRowPlaceholder: 'Name of the new row',\n add: 'Add',\n export: 'Export as Word document',\n download: 'Download .docx',\n exporting: 'Exporting…',\n empty: 'No rows yet.',\n loading: 'Loading…',\n noColumns: 'No fields yet: add fields to the parent label to get columns.',\n choose: '—',\n yes: 'Yes',\n}\n\nexport interface TagMatrixProps {\n matrix: TagMatrixData | undefined\n isLoading?: boolean\n /** Change one cell (`null` clears it). Absent: read only. */\n onChangeValue?: (tagId: string, fieldId: string, value: unknown) => void | Promise<unknown>\n /** Add a row (a new child label). Absent: no \"Add row\". */\n onAddRow?: (name: string) => void | Promise<unknown>\n /** Open a linked document. */\n onOpenDocument?: (documentId: string) => void\n /** Open a linked fact. */\n onOpenFact?: (factId: string) => void\n /** Open a linked thread (conversation). */\n onOpenThread?: (conversationId: string) => void\n /** Open a row's label (all its evidence). */\n onOpenRow?: (tagId: string) => void\n /** Export the matrix as it stands (filed as a document). Absent: no export button. */\n onExport?: () => void | Promise<unknown>\n /** Download the matrix as it stands as a file. Absent: no download button. */\n onDownload?: () => void | Promise<unknown>\n /** Who a person column offers. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /** Extra controls in the toolbar. */\n actions?: ReactNode\n labels?: Partial<TagMatrixLabels>\n className?: string\n testId?: string\n}\n\n/**\n * The row-label (\"Item\") column: wide enough for a legal issue's name to read, never so wide the\n * fields are pushed out of view. Long names wrap inside it (cut after three lines, in full in the\n * tooltip), so a label never runs into the next column.\n */\nconst ROW_LABEL_WIDTH = 'w-[18rem] min-w-[12rem] max-w-[18rem]'\nconst ROW_LABEL = 'line-clamp-3 whitespace-normal break-words'\n\n/**\n * One editable field value of a tag, by its type: committed on blur or Enter (a checkbox and a\n * choice at once). A matrix cell, and a field of a single tag's form (`TagFields`).\n */\nexport function TagMatrixCell({\n row,\n column,\n people,\n onChange,\n l,\n testId,\n}: {\n row: TagMatrixRowData\n column: TagMatrixField\n people?: TagMatrixProps['people']\n onChange?: TagMatrixProps['onChangeValue']\n l: TagMatrixLabels\n testId: string\n}) {\n const value = cellValue(row, column)\n const nameOf = (id: string) => people?.find((p) => p.value === id)?.label\n const shown = cellText(value, column, nameOf)\n const [draft, setDraft] = useState(shown)\n useEffect(() => setDraft(cellText(value, column)), [value, column])\n const set = (next: unknown) => void onChange?.(row.tag.external_id, rowFieldId(row, column), next)\n\n if (!onChange)\n return (\n <span className=\"block truncate\" title={shown} data-testid={testId}>\n {shown || <span className=\"text-muted-foreground\">{l.choose}</span>}\n </span>\n )\n const field =\n 'h-8 w-full min-w-24 rounded-md border border-transparent bg-transparent px-1.5 text-sm hover:border-input focus:border-input focus:bg-background focus:outline-none'\n switch (column.type) {\n case 'checkbox':\n return (\n <Checkbox\n checked={value === true}\n onCheckedChange={(v) => set(v === true)}\n aria-label={`${row.tag.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n case 'select':\n case 'person': {\n const options =\n column.type === 'select'\n ? (column.options ?? []).map((o) => ({ value: o, label: o }))\n : (people ?? [])\n return (\n <select\n className={cn(field, 'min-w-32 pr-6')}\n value={typeof value === 'string' ? value : ''}\n onChange={(e) => set(e.target.value || null)}\n aria-label={`${row.tag.name}: ${column.name}`}\n data-testid={testId}\n >\n <option value=\"\">{l.choose}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n {typeof value === 'string' && value && !options.some((o) => o.value === value) && (\n <option value={value}>{value}</option>\n )}\n </select>\n )\n }\n default: {\n const commit = () => {\n if (draft !== cellText(value, column)) set(parseCell(draft, column.type))\n }\n return (\n <input\n className={cn(field, 'min-w-32 pr-6')}\n type={column.type === 'number' ? 'number' : column.type === 'date' ? 'date' : 'text'}\n value={column.type === 'date' ? draft.slice(0, 10) : draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') (e.target as HTMLInputElement).blur()\n if (e.key === 'Escape') setDraft(cellText(value, column))\n }}\n aria-label={`${row.tag.name}: ${column.name}`}\n data-testid={testId}\n />\n )\n }\n }\n}\n\n/** A count as a phrase: \"1 document\", \"3 facts\", or nothing for none. */\nconst countText = (count: number, one: string, many: string) =>\n count === 1 ? one : count ? many.replace('{count}', String(count)) : null\n\n/** What backs a row: its documents, facts and threads as links, with counts and \"+N more\". */\nfunction Evidence({\n row,\n l,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n testId,\n}: {\n row: TagMatrixRowData\n l: TagMatrixLabels\n onOpenDocument?: (id: string) => void\n onOpenFact?: (id: string) => void\n onOpenThread?: (id: string) => void\n onOpenRow?: (id: string) => void\n testId: string\n}) {\n if (isGap(row))\n return (\n <span\n className=\"inline-flex items-center gap-1 rounded-full bg-amber-500/15 px-2 py-0.5 text-xs font-medium text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-gap`}\n >\n <AlertTriangle className=\"size-3\" /> {l.gap}\n </span>\n )\n const docs = row.docs ?? []\n const facts = row.facts ?? []\n const threads = row.threads ?? []\n const more =\n row.doc_count -\n docs.length +\n (row.fact_count - facts.length) +\n (row.thread_count - threads.length)\n const chip =\n 'inline-flex max-w-44 items-center gap-1 truncate rounded-md border border-border px-1.5 py-0.5 text-xs hover:border-primary/40 hover:text-primary disabled:hover:border-border disabled:hover:text-inherit'\n return (\n <div className=\"flex flex-wrap items-center gap-1\" data-testid={testId}>\n <span className=\"mr-1 text-xs text-muted-foreground\">\n {[\n countText(row.doc_count, l.document, l.documents),\n countText(row.fact_count, l.fact, l.facts),\n countText(row.thread_count, l.thread, l.threads),\n ]\n .filter(Boolean)\n .join(' · ')}\n </span>\n {docs.map((d) => (\n <button\n key={d.doc_ext_id}\n type=\"button\"\n className={chip}\n title={d.note ? `${d.file_name}: ${d.note}` : d.file_name}\n disabled={!onOpenDocument}\n onClick={() => onOpenDocument?.(d.doc_ext_id)}\n data-testid={`${testId}-doc-${d.doc_ext_id}`}\n >\n <FileText className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{d.file_name}</span>\n </button>\n ))}\n {facts.map((f) => (\n <button\n key={f.fact_ext_id}\n type=\"button\"\n className={chip}\n title={f.text}\n disabled={!onOpenFact}\n onClick={() => onOpenFact?.(f.fact_ext_id)}\n data-testid={`${testId}-fact-${f.fact_ext_id}`}\n >\n <Lightbulb className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{f.text}</span>\n </button>\n ))}\n {threads.map((t) => (\n <button\n key={t.conversation_ext_id}\n type=\"button\"\n className={chip}\n title={t.title || l.untitledThread}\n disabled={!onOpenThread}\n onClick={() => onOpenThread?.(t.conversation_ext_id)}\n data-testid={`${testId}-thread-${t.conversation_ext_id}`}\n >\n <MessagesSquare className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{t.title || l.untitledThread}</span>\n </button>\n ))}\n {more > 0 &&\n (onOpenRow ? (\n <button\n type=\"button\"\n className=\"text-xs text-primary hover:underline\"\n onClick={() => onOpenRow(row.tag.external_id)}\n data-testid={`${testId}-more`}\n >\n {l.more.replace('{count}', String(more))}\n </button>\n ) : (\n <span className=\"text-xs text-muted-foreground\" data-testid={`${testId}-more`}>\n {l.more.replace('{count}', String(more))}\n </span>\n ))}\n </div>\n )\n}\n\nexport function TagMatrix({\n matrix,\n isLoading,\n onChangeValue,\n onAddRow,\n onOpenDocument,\n onOpenFact,\n onOpenThread,\n onOpenRow,\n onExport,\n onDownload,\n people,\n actions,\n labels,\n className,\n testId = 'tag-matrix',\n}: TagMatrixProps) {\n const l = { ...DEFAULT_TAG_MATRIX_LABELS, ...labels }\n const columns = useMemo(() => tagMatrixColumns(matrix), [matrix])\n const rows = matrix?.rows ?? []\n const gaps = rows.filter(isGap).length\n const [gapsOnly, setGapsOnly] = useState(false)\n const [name, setName] = useState('')\n const [adding, setAdding] = useState(false)\n const [exporting, setExporting] = useState(false)\n const shown = gapsOnly ? rows.filter(isGap) : rows\n\n const add = async () => {\n const n = name.trim()\n if (!n || !onAddRow) return\n setAdding(true)\n try {\n await onAddRow(n)\n setName('')\n } finally {\n setAdding(false)\n }\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {gaps > 0 && (\n <label className=\"flex items-center gap-2 text-sm\">\n <Checkbox\n checked={gapsOnly}\n onCheckedChange={(v) => setGapsOnly(v === true)}\n data-testid={`${testId}-gaps-only`}\n />\n {l.gapsOnly}\n <span className=\"text-xs text-amber-700 dark:text-amber-300\">\n ({l.gapCount.replace('{count}', String(gaps))})\n </span>\n </label>\n )}\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">\n {actions}\n {onDownload && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={rows.length === 0}\n onClick={() => void onDownload()}\n data-testid={`${testId}-download`}\n >\n <Download className=\"size-4\" />\n {l.download}\n </Button>\n )}\n {onExport && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={exporting || rows.length === 0}\n onClick={async () => {\n setExporting(true)\n try {\n await onExport()\n } finally {\n setExporting(false)\n }\n }}\n data-testid={`${testId}-export`}\n >\n {exporting ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <FileDown className=\"size-4\" />\n )}\n {exporting ? l.exporting : l.export}\n </Button>\n )}\n </div>\n </div>\n\n {isLoading ? (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" /> {l.loading}\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-lg border border-border\">\n <table className=\"w-full border-collapse text-sm\" data-testid={`${testId}-table`}>\n <thead className=\"bg-muted/40\">\n <tr>\n <th\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 bg-muted/40 px-3 py-2 text-left font-medium'\n )}\n >\n {l.row}\n </th>\n {columns.map((c) => (\n <th\n key={c.id}\n className=\"px-3 py-2 text-left font-medium\"\n data-testid={`${testId}-column-${c.id}`}\n >\n {c.name}\n </th>\n ))}\n <th className=\"px-3 py-2 text-left font-medium\">{l.evidence}</th>\n </tr>\n </thead>\n <tbody>\n {shown.map((row) => {\n const id = row.tag.external_id\n const gap = isGap(row)\n return (\n <tr\n key={id}\n className={cn('border-t border-border align-top', gap && 'bg-amber-500/5')}\n data-gap={gap || undefined}\n data-testid={`${testId}-row-${id}`}\n >\n <th\n scope=\"row\"\n className={cn(\n ROW_LABEL_WIDTH,\n 'sticky left-0 z-10 px-3 py-2 text-left font-medium',\n gap ? 'bg-amber-50 dark:bg-amber-950' : 'bg-background',\n gap && 'border-l-2 border-l-amber-500'\n )}\n >\n {onOpenRow ? (\n <button\n type=\"button\"\n className={cn(ROW_LABEL, 'text-left hover:text-primary hover:underline')}\n title={row.tag.name}\n onClick={() => onOpenRow(id)}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.tag.name}\n </button>\n ) : (\n <span\n className={ROW_LABEL}\n title={row.tag.name}\n data-testid={`${testId}-row-${id}-label`}\n >\n {row.tag.name}\n </span>\n )}\n </th>\n {columns.map((c) => (\n <td key={c.id} className=\"px-1.5 py-1\">\n <TagMatrixCell\n row={row}\n column={c}\n people={people}\n onChange={onChangeValue}\n l={l}\n testId={`${testId}-cell-${id}-${c.id}`}\n />\n </td>\n ))}\n <td className=\"px-3 py-2\">\n <Evidence\n row={row}\n l={l}\n onOpenDocument={onOpenDocument}\n onOpenFact={onOpenFact}\n onOpenThread={onOpenThread}\n onOpenRow={onOpenRow}\n testId={`${testId}-evidence-${id}`}\n />\n </td>\n </tr>\n )\n })}\n {shown.length === 0 && (\n <tr>\n <td\n colSpan={columns.length + 2}\n className=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {l.empty}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {columns.length === 0 && rows.length > 0 && (\n <p className=\"border-t border-border px-3 py-2 text-xs text-muted-foreground\">\n {l.noColumns}\n </p>\n )}\n </div>\n )}\n\n {onAddRow && (\n <form\n className=\"flex max-w-md items-center gap-2\"\n onSubmit={(e) => {\n e.preventDefault()\n void add()\n }}\n >\n <Input\n value={name}\n placeholder={l.addRowPlaceholder}\n aria-label={l.addRow}\n onChange={(e) => setName(e.target.value)}\n data-testid={`${testId}-add-name`}\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"outline\"\n disabled={!name.trim() || adding}\n data-testid={`${testId}-add`}\n >\n <Plus className=\"size-4\" /> {l.addRow}\n </Button>\n </form>\n )}\n </div>\n )\n}\n","/**\n * The tag matrix as a Word document: a title, when the snapshot was taken, then one table with a\n * row per item, a column per field, the evidence behind it (linked document names and fact\n * excerpts) and its gaps. Written straight as WordprocessingML and zipped with `fflate` (already a\n * dependency, and what `docx/export.ts` uses), so the result opens in the native Word editor and\n * in Word without pulling the editor engine into the tags module.\n */\n\nimport { strToU8, zipSync } from 'fflate'\nimport {\n cellText,\n cellValue,\n isGap,\n tagMatrixColumns,\n type TagMatrixData,\n type TagMatrixField,\n type TagMatrixRowData,\n} from './tagMatrixModel'\n\nexport const DOCX_MIME_TYPE =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\n/** More table columns than this (item, fields, evidence, gaps) turn the page to landscape. */\nexport const TAG_MATRIX_DOCX_LANDSCAPE_AFTER = 6\n\nexport interface TagMatrixDocxLabels {\n /** The row column's heading. */\n row: string\n evidence: string\n gaps: string\n /** `{at}` is the snapshot time, `YYYY-MM-DD HH:MM UTC`. */\n takenAt: string\n /** A row with no linked document, fact or thread. */\n noEvidence: string\n /** `{fields}`: the row's empty fields. */\n missing: string\n /** `{count}` more links than listed. */\n more: string\n document: string\n documents: string\n fact: string\n facts: string\n thread: string\n threads: string\n untitledThread: string\n empty: string\n}\n\nexport const DEFAULT_TAG_MATRIX_DOCX_LABELS: TagMatrixDocxLabels = {\n row: 'Item',\n evidence: 'Evidence',\n gaps: 'Gaps',\n takenAt: 'Snapshot taken {at}',\n noEvidence: 'No evidence',\n missing: 'Missing: {fields}',\n more: '+{count} more',\n document: '1 document',\n documents: '{count} documents',\n fact: '1 fact',\n facts: '{count} facts',\n thread: '1 thread',\n threads: '{count} threads',\n untitledThread: 'Untitled thread',\n empty: 'No rows.',\n}\n\nexport interface TagMatrixDocxOptions {\n title: string\n nameOf?: (id: string) => string | undefined\n /** When the snapshot was taken (ISO); default now. */\n at?: string\n labels?: Partial<TagMatrixDocxLabels>\n}\n\n// Text that is not allowed in XML 1.0 at all (control characters) is dropped, not escaped.\n// eslint-disable-next-line no-control-regex\nconst INVALID_XML = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F]/g\nconst esc = (text: string) =>\n text\n .replace(INVALID_XML, '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n\ninterface Run {\n text: string\n bold?: boolean\n italic?: boolean\n muted?: boolean\n}\n\nconst run = ({ text, bold, italic, muted }: Run) => {\n const props = [bold && '<w:b/>', italic && '<w:i/>', muted && '<w:color w:val=\"595959\"/>']\n .filter(Boolean)\n .join('')\n // Line breaks inside a value become Word line breaks rather than being lost.\n const body = text\n .split(/\\r?\\n/)\n .map((line) => `<w:t xml:space=\"preserve\">${esc(line)}</w:t>`)\n .join('<w:br/>')\n return `<w:r>${props ? `<w:rPr>${props}</w:rPr>` : ''}${body}</w:r>`\n}\n\nconst paragraph = (runs: Run[], style?: string) =>\n `<w:p>${style ? `<w:pPr><w:pStyle w:val=\"${style}\"/></w:pPr>` : ''}${runs.map(run).join('')}</w:p>`\n\n/** A table cell: its paragraphs (a cell must hold at least one), shaded when given a fill. */\nconst cell = (paragraphs: string[], width: number, fill?: string) =>\n `<w:tc><w:tcPr><w:tcW w:w=\"${width}\" w:type=\"dxa\"/>${\n fill ? `<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"${fill}\"/>` : ''\n }</w:tcPr>${paragraphs.length ? paragraphs.join('') : '<w:p/>'}</w:tc>`\n\nconst count = (n: number, one: string, many: string) =>\n n === 1 ? one : many.replace('{count}', String(n))\n\nfunction evidenceParagraphs(row: TagMatrixRowData, l: TagMatrixDocxLabels): string[] {\n if (isGap(row)) return []\n const docs = row.docs ?? []\n const facts = row.facts ?? []\n const threads = row.threads ?? []\n const more =\n row.doc_count -\n docs.length +\n (row.fact_count - facts.length) +\n (row.thread_count - threads.length)\n return [\n paragraph(\n [\n {\n text: [\n row.doc_count ? count(row.doc_count, l.document, l.documents) : null,\n row.fact_count ? count(row.fact_count, l.fact, l.facts) : null,\n row.thread_count ? count(row.thread_count, l.thread, l.threads) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n muted: true,\n },\n ],\n 'MatrixCell'\n ),\n ...docs.map((d) =>\n paragraph(\n [{ text: d.file_name, bold: true }, ...(d.note ? [{ text: ` — ${d.note}` }] : [])],\n 'MatrixCell'\n )\n ),\n ...facts.map((f) => paragraph([{ text: `“${f.text}”`, italic: true }], 'MatrixCell')),\n ...threads.map((t) => paragraph([{ text: t.title || l.untitledThread }], 'MatrixCell')),\n ...(more > 0\n ? [paragraph([{ text: l.more.replace('{count}', String(more)), muted: true }], 'MatrixCell')]\n : []),\n ]\n}\n\nfunction gapParagraphs(\n row: TagMatrixRowData,\n columns: TagMatrixField[],\n l: TagMatrixDocxLabels\n): string[] {\n const missing = columns\n .filter((c) => c.type !== 'checkbox' && cellText(cellValue(row, c), c) === '')\n .map((c) => c.name)\n return [\n ...(isGap(row) ? [paragraph([{ text: l.noEvidence, bold: true }], 'MatrixCell')] : []),\n ...(missing.length\n ? [paragraph([{ text: l.missing.replace('{fields}', missing.join(', ')) }], 'MatrixCell')]\n : []),\n ]\n}\n\n/** Page geometry in twips (A4), turned for landscape. */\nfunction page(landscape: boolean) {\n const [short, long] = [11906, 16838]\n const margin = landscape ? 1080 : 1440\n const width = landscape ? long : short\n return {\n margin,\n textWidth: width - 2 * margin,\n sectPr: `<w:sectPr><w:pgSz w:w=\"${landscape ? long : short}\" w:h=\"${landscape ? short : long}\"${\n landscape ? ' w:orient=\"landscape\"' : ''\n }/><w:pgMar w:top=\"${margin}\" w:right=\"${margin}\" w:bottom=\"${margin}\" w:left=\"${margin}\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/></w:sectPr>`,\n }\n}\n\n/** `word/document.xml` for the matrix (exposed for tests and for hosts that assemble their own package). */\nexport function tagMatrixDocumentXml(matrix: TagMatrixData, options: TagMatrixDocxOptions): string {\n const l = { ...DEFAULT_TAG_MATRIX_DOCX_LABELS, ...options.labels }\n const columns = tagMatrixColumns(matrix)\n const rows = matrix.rows ?? []\n const heads = [l.row, ...columns.map((c) => c.name), l.evidence, l.gaps]\n const landscape = heads.length > TAG_MATRIX_DOCX_LANDSCAPE_AFTER\n const { textWidth, sectPr } = page(landscape)\n // Relative widths: the item and evidence get room to read, each field and the gaps a share.\n const weights = [2, ...columns.map(() => 1), 3, 1.5]\n const total = weights.reduce((a, b) => a + b, 0)\n const widths = weights.map((w) => Math.floor((textWidth * w) / total))\n const at = new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace('T', ' ')\n\n const header = `<w:tr><w:trPr><w:tblHeader/><w:cantSplit/></w:trPr>${heads\n .map((h, i) => cell([paragraph([{ text: h, bold: true }], 'MatrixCell')], widths[i], 'E7E6E6'))\n .join('')}</w:tr>`\n const body = rows.map((row) => {\n const fill = isGap(row) ? 'FFF2CC' : undefined\n const cells = [\n cell([paragraph([{ text: row.tag.name, bold: true }], 'MatrixCell')], widths[0], fill),\n ...columns.map((c, i) => {\n const text = cellText(cellValue(row, c), c, options.nameOf)\n return cell(text ? [paragraph([{ text }], 'MatrixCell')] : [], widths[i + 1], fill)\n }),\n cell(evidenceParagraphs(row, l), widths[columns.length + 1], fill),\n cell(gapParagraphs(row, columns, l), widths[columns.length + 2], fill),\n ]\n return `<w:tr><w:trPr><w:cantSplit/></w:trPr>${cells.join('')}</w:tr>`\n })\n\n const table = `<w:tbl><w:tblPr><w:tblStyle w:val=\"MatrixTable\"/><w:tblW w:w=\"${textWidth}\" w:type=\"dxa\"/><w:tblLayout w:type=\"fixed\"/><w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr><w:tblGrid>${widths\n .map((w) => `<w:gridCol w:w=\"${w}\"/>`)\n .join('')}</w:tblGrid>${header}${body.join('')}</w:tbl>`\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><w:body>${paragraph(\n [{ text: options.title }],\n 'Title'\n )}${paragraph([{ text: l.takenAt.replace('{at}', `${at} UTC`), muted: true }])}${table}${\n rows.length ? '' : paragraph([{ text: l.empty, muted: true }])\n }<w:p/>${sectPr}</w:body></w:document>`\n}\n\nconst STYLES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:styles xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii=\"Calibri\" w:hAnsi=\"Calibri\" w:eastAsia=\"Calibri\" w:cs=\"Calibri\"/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/><w:lang w:val=\"en-GB\"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after=\"160\" w:line=\"259\" w:lineRule=\"auto\"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style><w:style w:type=\"paragraph\" w:styleId=\"Title\"><w:name w:val=\"Title\"/><w:basedOn w:val=\"Normal\"/><w:next w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"80\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"48\"/><w:szCs w:val=\"48\"/></w:rPr></w:style><w:style w:type=\"paragraph\" w:customStyle=\"1\" w:styleId=\"MatrixCell\"><w:name w:val=\"Matrix Cell\"/><w:basedOn w:val=\"Normal\"/><w:qFormat/><w:pPr><w:spacing w:after=\"40\" w:line=\"240\" w:lineRule=\"auto\"/></w:pPr><w:rPr><w:sz w:val=\"18\"/><w:szCs w:val=\"18\"/></w:rPr></w:style><w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\"><w:name w:val=\"Normal Table\"/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style><w:style w:type=\"table\" w:customStyle=\"1\" w:styleId=\"MatrixTable\"><w:name w:val=\"Matrix Table\"/><w:basedOn w:val=\"TableNormal\"/><w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"BFBFBF\"/></w:tblBorders><w:tblCellMar><w:top w:w=\"60\" w:type=\"dxa\"/><w:left w:w=\"100\" w:type=\"dxa\"/><w:bottom w:w=\"60\" w:type=\"dxa\"/><w:right w:w=\"100\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style></w:styles>`\n\nconst CONTENT_TYPES = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/><Default Extension=\"xml\" ContentType=\"application/xml\"/><Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/><Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/><Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/></Types>`\n\nconst ROOT_RELS = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"word/document.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/></Relationships>`\n\nconst DOCUMENT_RELS = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/></Relationships>`\n\nconst coreXml = (\n title: string,\n at: string\n) => `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dc:title>${esc(\n title\n)}</dc:title><dcterms:created xsi:type=\"dcterms:W3CDTF\">${at}</dcterms:created><dcterms:modified xsi:type=\"dcterms:W3CDTF\">${at}</dcterms:modified></cp:coreProperties>`\n\n/** The matrix as `.docx` bytes. */\nexport function tagMatrixDocx(matrix: TagMatrixData, options: TagMatrixDocxOptions): Uint8Array {\n const at = new Date(options.at ?? Date.now()).toISOString().replace(/\\.\\d{3}Z$/, 'Z')\n return zipSync({\n '[Content_Types].xml': strToU8(CONTENT_TYPES),\n '_rels/.rels': strToU8(ROOT_RELS),\n 'docProps/core.xml': strToU8(coreXml(options.title, at)),\n 'word/document.xml': strToU8(tagMatrixDocumentXml(matrix, { ...options, at })),\n 'word/styles.xml': strToU8(STYLES),\n 'word/_rels/document.xml.rels': strToU8(DOCUMENT_RELS),\n })\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, StepBarFrame, stepLevels, eventWaitingDocuments, waitingForDocumentsText, buildLaunch, waitingDocuments, PhaseMark,
|
|
4
|
+
import { defaultInputs, validateInputs, SchemaForm, isWorkflowScope, fieldToFrontmatter, workflowFromFrontmatter, workflowSteps, initialRunInputs, stepPhase, composeStepPrompt, useWorkflowView, composeWorkflowPrompt, isRunFinished, StepBarFrame, stepLevels, eventWaitingDocuments, waitingForDocumentsText, buildLaunch, waitingDocuments, PhaseMark, STEP_LABEL_CURRENT, STEP_LABEL, STEP_LABEL_MAX, STEP_EXTRA, STEP_PILL, stepPillTone } from './chunk-CONIA2ZA.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';
|
|
@@ -11,12 +11,12 @@ import { GridView } from './chunk-ZPLG7QYF.js';
|
|
|
11
11
|
import { QuickActionDialogHeader, AddFilesFirst, ScopePicker, StartTiles } from './chunk-DDF5GPIJ.js';
|
|
12
12
|
import { FoldSection } from './chunk-XD2M6LIG.js';
|
|
13
13
|
import { ActionLink } from './chunk-S7PSMMRG.js';
|
|
14
|
-
import { useBlocksEnvironment } from './chunk-76JDDMSP.js';
|
|
15
|
-
import { ModalHeader } from './chunk-TX2ZICS7.js';
|
|
16
14
|
import { useMentionAutocomplete } from './chunk-HOXKR26S.js';
|
|
17
15
|
import { toMessageMentions, extractMentions, MentionMenu } from './chunk-AA3PT6KR.js';
|
|
18
16
|
import { useIsPhone } from './chunk-SLSBJRWW.js';
|
|
17
|
+
import { useBlocksEnvironment } from './chunk-76JDDMSP.js';
|
|
19
18
|
import { formatCount, initials } from './chunk-OXF2IFXG.js';
|
|
19
|
+
import { ModalHeader } from './chunk-TX2ZICS7.js';
|
|
20
20
|
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';
|
|
@@ -6661,7 +6661,7 @@ function WorkflowThreadStrip({
|
|
|
6661
6661
|
"data-testid": `workflow-thread-step-${step.id}`,
|
|
6662
6662
|
children: [
|
|
6663
6663
|
/* @__PURE__ */ jsx(PhaseMark, { phase, icon: iconOf(step) }),
|
|
6664
|
-
/* @__PURE__ */ jsx("span", { className:
|
|
6664
|
+
/* @__PURE__ */ jsx("span", { className: isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX), children: step.title }),
|
|
6665
6665
|
sentBack && /* @__PURE__ */ jsx(
|
|
6666
6666
|
CornerUpLeft,
|
|
6667
6667
|
{
|
|
@@ -10089,5 +10089,5 @@ function AgentCreateView({
|
|
|
10089
10089
|
}
|
|
10090
10090
|
|
|
10091
10091
|
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 };
|
|
10092
|
-
//# sourceMappingURL=chunk-
|
|
10093
|
-
//# sourceMappingURL=chunk-
|
|
10092
|
+
//# sourceMappingURL=chunk-RX35SMPR.js.map
|
|
10093
|
+
//# sourceMappingURL=chunk-RX35SMPR.js.map
|