@arbidocs/blocks 0.4.76 → 0.4.78
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 +346 -258
- package/dist/agents/index.js +5 -5
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +15 -4
- package/dist/agents/workflows/SchemaForm.d.ts +6 -1
- package/dist/agents/workflows/StepBarFrame.d.ts +75 -0
- package/dist/agents/workflows/StepParts.d.ts +109 -0
- package/dist/agents/workflows/WorkflowRunner.d.ts +15 -2
- package/dist/agents/workflows/WorkflowStepBar.d.ts +9 -11
- package/dist/agents/workflows/index.d.ts +5 -2
- package/dist/agents/workflows/planSteps.d.ts +8 -1
- package/dist/agents/workflows/run.d.ts +61 -8
- package/dist/agents/workflows/stepWindow.d.ts +59 -0
- 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 +9 -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-TKB7TVMW.js → chunk-5OC5CGYX.js} +168 -100
- package/dist/chunk-5OC5CGYX.js.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-CWAZNXC5.js +441 -0
- package/dist/chunk-CWAZNXC5.js.map +1 -0
- package/dist/{chunk-UIWLDSTF.js → chunk-EWSEQEPL.js} +71 -7
- package/dist/chunk-EWSEQEPL.js.map +1 -0
- 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-WJEKRSPH.js → chunk-ICBAFX5B.js} +3 -3
- package/dist/{chunk-WJEKRSPH.js.map → chunk-ICBAFX5B.js.map} +1 -1
- package/dist/{chunk-7CVF3DK2.cjs → chunk-IF6VAYIA.cjs} +5 -5
- package/dist/{chunk-7CVF3DK2.cjs.map → chunk-IF6VAYIA.cjs.map} +1 -1
- package/dist/chunk-MLAHDAN5.cjs +450 -0
- package/dist/chunk-MLAHDAN5.cjs.map +1 -0
- package/dist/{chunk-IPGKTUF7.cjs → chunk-MP6FK43E.cjs} +71 -5
- package/dist/chunk-MP6FK43E.cjs.map +1 -0
- package/dist/{chunk-5EBGRG3X.js → chunk-OPA2Y6YZ.js} +3 -54
- package/dist/chunk-OPA2Y6YZ.js.map +1 -0
- package/dist/{chunk-7FKARMA3.cjs → chunk-SSDISIDW.cjs} +190 -122
- package/dist/chunk-SSDISIDW.cjs.map +1 -0
- package/dist/chunk-TZR36PPP.cjs +95 -0
- package/dist/chunk-TZR36PPP.cjs.map +1 -0
- package/dist/chunk-VFIZYSZB.cjs +2783 -0
- package/dist/chunk-VFIZYSZB.cjs.map +1 -0
- package/dist/chunk-WXRCMIAE.js +2707 -0
- package/dist/chunk-WXRCMIAE.js.map +1 -0
- package/dist/{chunk-HITAN7JF.cjs → chunk-XMBYDLZQ.cjs} +4 -4
- package/dist/{chunk-HITAN7JF.cjs.map → chunk-XMBYDLZQ.cjs.map} +1 -1
- package/dist/{chunk-MK6NJQGF.js → chunk-XQDM6T6C.js} +3 -3
- package/dist/{chunk-MK6NJQGF.js.map → chunk-XQDM6T6C.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 +468 -49
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +2 -0
- package/dist/connect/index.js +454 -37
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedTagMatrix.d.ts +20 -0
- package/dist/connection/ConnectedWorkflowRunner.d.ts +28 -2
- package/dist/connection/WorkflowRunThread.d.ts +21 -0
- 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/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/home/index.cjs +1 -1
- package/dist/home/index.js +1 -1
- package/dist/index.cjs +560 -431
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/shell/index.cjs +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/studio/index.cjs +4 -4
- package/dist/studio/index.js +3 -3
- package/dist/tags/TagMatrix.d.ts +64 -0
- package/dist/tags/index.d.ts +3 -0
- package/dist/tags/tagMatrixModel.d.ts +39 -0
- 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 +882 -102
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +849 -69
- 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 +0 -1422
- 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 +0 -1469
- package/dist/chunk-VYRKO3XU.cjs.map +0 -1
- package/dist/chunk-ZWA7UUZL.cjs.map +0 -1
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var lucideReact = require('lucide-react');
|
|
6
|
+
var ui = require('@arbidocs/react/ui');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
// src/tags/tagMatrixModel.ts
|
|
10
|
+
function tagMatrixColumns(matrix) {
|
|
11
|
+
const columns = [];
|
|
12
|
+
const add = (f) => {
|
|
13
|
+
if (!columns.some((c) => c.id === f.id)) columns.push(f);
|
|
14
|
+
};
|
|
15
|
+
for (const f of matrix?.parent?.fields ?? []) add(f);
|
|
16
|
+
for (const row of matrix?.rows ?? []) for (const f of row.tag.fields ?? []) add(f);
|
|
17
|
+
return columns;
|
|
18
|
+
}
|
|
19
|
+
var cellValue = (row, column) => row.tag.field_values?.[column.id];
|
|
20
|
+
var isGap = (row) => row.doc_count + row.fact_count === 0;
|
|
21
|
+
function cellText(value, column, nameOf) {
|
|
22
|
+
if (value === void 0 || value === null || value === "") return "";
|
|
23
|
+
if (column.type === "checkbox") return value ? "Yes" : "No";
|
|
24
|
+
if (column.type === "person" && typeof value === "string") return nameOf?.(value) ?? value;
|
|
25
|
+
if (Array.isArray(value)) return value.map(String).join(", ");
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
function parseCell(text, type) {
|
|
29
|
+
const t = text.trim();
|
|
30
|
+
if (t === "") return null;
|
|
31
|
+
if (type === "number") {
|
|
32
|
+
const n = Number(t);
|
|
33
|
+
return Number.isNaN(n) ? null : n;
|
|
34
|
+
}
|
|
35
|
+
return t;
|
|
36
|
+
}
|
|
37
|
+
var escapeCell = (text) => text.replace(/\|/g, "\\|").replace(/\n+/g, " ");
|
|
38
|
+
function tagMatrixMarkdown(matrix, options) {
|
|
39
|
+
const columns = tagMatrixColumns(matrix);
|
|
40
|
+
const heads = [
|
|
41
|
+
options.rowHeading ?? "Item",
|
|
42
|
+
...columns.map((c) => c.name),
|
|
43
|
+
options.evidence ?? "Evidence"
|
|
44
|
+
];
|
|
45
|
+
const lines = [
|
|
46
|
+
`# ${options.title}`,
|
|
47
|
+
"",
|
|
48
|
+
`_Snapshot taken ${new Date(options.at ?? Date.now()).toISOString().slice(0, 16).replace("T", " ")} UTC_`,
|
|
49
|
+
"",
|
|
50
|
+
`| ${heads.map(escapeCell).join(" | ")} |`,
|
|
51
|
+
`| ${heads.map(() => "---").join(" | ")} |`
|
|
52
|
+
];
|
|
53
|
+
for (const row of matrix.rows ?? []) {
|
|
54
|
+
const evidence = [
|
|
55
|
+
`${row.doc_count} document${row.doc_count === 1 ? "" : "s"}`,
|
|
56
|
+
`${row.fact_count} fact${row.fact_count === 1 ? "" : "s"}`
|
|
57
|
+
].join(", ");
|
|
58
|
+
const cells = [
|
|
59
|
+
row.tag.name,
|
|
60
|
+
...columns.map((c) => cellText(cellValue(row, c), c, options.nameOf)),
|
|
61
|
+
evidence
|
|
62
|
+
];
|
|
63
|
+
lines.push(`| ${cells.map(escapeCell).join(" | ")} |`);
|
|
64
|
+
}
|
|
65
|
+
return `${lines.join("\n")}
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
var DEFAULT_TAG_MATRIX_LABELS = {
|
|
69
|
+
row: "Item",
|
|
70
|
+
evidence: "Evidence",
|
|
71
|
+
documents: "{count} documents",
|
|
72
|
+
facts: "{count} facts",
|
|
73
|
+
document: "1 document",
|
|
74
|
+
fact: "1 fact",
|
|
75
|
+
more: "+{count} more",
|
|
76
|
+
gap: "No evidence",
|
|
77
|
+
gapsOnly: "Show gaps only",
|
|
78
|
+
gapCount: "{count} without evidence",
|
|
79
|
+
addRow: "Add row",
|
|
80
|
+
addRowPlaceholder: "Name of the new row",
|
|
81
|
+
add: "Add",
|
|
82
|
+
export: "Export as document",
|
|
83
|
+
exporting: "Exporting\u2026",
|
|
84
|
+
empty: "No rows yet.",
|
|
85
|
+
loading: "Loading\u2026",
|
|
86
|
+
noColumns: "No fields yet: add fields to the parent label to get columns.",
|
|
87
|
+
choose: "\u2014",
|
|
88
|
+
yes: "Yes"
|
|
89
|
+
};
|
|
90
|
+
function Cell({
|
|
91
|
+
row,
|
|
92
|
+
column,
|
|
93
|
+
people,
|
|
94
|
+
onChange,
|
|
95
|
+
l,
|
|
96
|
+
testId
|
|
97
|
+
}) {
|
|
98
|
+
const value = cellValue(row, column);
|
|
99
|
+
const nameOf = (id) => people?.find((p) => p.value === id)?.label;
|
|
100
|
+
const shown = cellText(value, column, nameOf);
|
|
101
|
+
const [draft, setDraft] = react.useState(shown);
|
|
102
|
+
react.useEffect(() => setDraft(cellText(value, column)), [value, column]);
|
|
103
|
+
const set = (next) => void onChange?.(row.tag.external_id, column.id, next);
|
|
104
|
+
if (!onChange)
|
|
105
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate", title: shown, "data-testid": testId, children: shown || /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: l.choose }) });
|
|
106
|
+
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";
|
|
107
|
+
switch (column.type) {
|
|
108
|
+
case "checkbox":
|
|
109
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
110
|
+
ui.Checkbox,
|
|
111
|
+
{
|
|
112
|
+
checked: value === true,
|
|
113
|
+
onCheckedChange: (v) => set(v === true),
|
|
114
|
+
"aria-label": `${row.tag.name}: ${column.name}`,
|
|
115
|
+
"data-testid": testId
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
case "select":
|
|
119
|
+
case "person": {
|
|
120
|
+
const options = column.type === "select" ? (column.options ?? []).map((o) => ({ value: o, label: o })) : people ?? [];
|
|
121
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
122
|
+
"select",
|
|
123
|
+
{
|
|
124
|
+
className: field,
|
|
125
|
+
value: typeof value === "string" ? value : "",
|
|
126
|
+
onChange: (e) => set(e.target.value || null),
|
|
127
|
+
"aria-label": `${row.tag.name}: ${column.name}`,
|
|
128
|
+
"data-testid": testId,
|
|
129
|
+
children: [
|
|
130
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: l.choose }),
|
|
131
|
+
options.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: o.label }, o.value)),
|
|
132
|
+
typeof value === "string" && value && !options.some((o) => o.value === value) && /* @__PURE__ */ jsxRuntime.jsx("option", { value, children: value })
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
default: {
|
|
138
|
+
const commit = () => {
|
|
139
|
+
if (draft !== cellText(value, column)) set(parseCell(draft, column.type));
|
|
140
|
+
};
|
|
141
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
142
|
+
"input",
|
|
143
|
+
{
|
|
144
|
+
className: field,
|
|
145
|
+
type: column.type === "number" ? "number" : column.type === "date" ? "date" : "text",
|
|
146
|
+
value: column.type === "date" ? draft.slice(0, 10) : draft,
|
|
147
|
+
onChange: (e) => setDraft(e.target.value),
|
|
148
|
+
onBlur: commit,
|
|
149
|
+
onKeyDown: (e) => {
|
|
150
|
+
if (e.key === "Enter") e.target.blur();
|
|
151
|
+
if (e.key === "Escape") setDraft(cellText(value, column));
|
|
152
|
+
},
|
|
153
|
+
"aria-label": `${row.tag.name}: ${column.name}`,
|
|
154
|
+
"data-testid": testId
|
|
155
|
+
}
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function Evidence({
|
|
161
|
+
row,
|
|
162
|
+
l,
|
|
163
|
+
onOpenDocument,
|
|
164
|
+
onOpenFact,
|
|
165
|
+
onOpenRow,
|
|
166
|
+
testId
|
|
167
|
+
}) {
|
|
168
|
+
if (isGap(row))
|
|
169
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
170
|
+
"span",
|
|
171
|
+
{
|
|
172
|
+
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",
|
|
173
|
+
"data-testid": `${testId}-gap`,
|
|
174
|
+
children: [
|
|
175
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "size-3" }),
|
|
176
|
+
" ",
|
|
177
|
+
l.gap
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
const docs = row.docs ?? [];
|
|
182
|
+
const facts = row.facts ?? [];
|
|
183
|
+
const more = row.doc_count - docs.length + (row.fact_count - facts.length);
|
|
184
|
+
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";
|
|
185
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1", "data-testid": testId, children: [
|
|
186
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1 text-xs text-muted-foreground", children: [
|
|
187
|
+
row.doc_count === 1 ? l.document : row.doc_count ? l.documents.replace("{count}", String(row.doc_count)) : null,
|
|
188
|
+
row.fact_count === 1 ? l.fact : row.fact_count ? l.facts.replace("{count}", String(row.fact_count)) : null
|
|
189
|
+
].filter(Boolean).join(" \xB7 ") }),
|
|
190
|
+
docs.map((d) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
191
|
+
"button",
|
|
192
|
+
{
|
|
193
|
+
type: "button",
|
|
194
|
+
className: chip,
|
|
195
|
+
title: d.note ? `${d.file_name}: ${d.note}` : d.file_name,
|
|
196
|
+
disabled: !onOpenDocument,
|
|
197
|
+
onClick: () => onOpenDocument?.(d.doc_ext_id),
|
|
198
|
+
"data-testid": `${testId}-doc-${d.doc_ext_id}`,
|
|
199
|
+
children: [
|
|
200
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "size-3 shrink-0" }),
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: d.file_name })
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
d.doc_ext_id
|
|
205
|
+
)),
|
|
206
|
+
facts.map((f) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
207
|
+
"button",
|
|
208
|
+
{
|
|
209
|
+
type: "button",
|
|
210
|
+
className: chip,
|
|
211
|
+
title: f.text,
|
|
212
|
+
disabled: !onOpenFact,
|
|
213
|
+
onClick: () => onOpenFact?.(f.fact_ext_id),
|
|
214
|
+
"data-testid": `${testId}-fact-${f.fact_ext_id}`,
|
|
215
|
+
children: [
|
|
216
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Lightbulb, { className: "size-3 shrink-0" }),
|
|
217
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: f.text })
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
f.fact_ext_id
|
|
221
|
+
)),
|
|
222
|
+
more > 0 && (onOpenRow ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
+
"button",
|
|
224
|
+
{
|
|
225
|
+
type: "button",
|
|
226
|
+
className: "text-xs text-primary hover:underline",
|
|
227
|
+
onClick: () => onOpenRow(row.tag.external_id),
|
|
228
|
+
"data-testid": `${testId}-more`,
|
|
229
|
+
children: l.more.replace("{count}", String(more))
|
|
230
|
+
}
|
|
231
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", "data-testid": `${testId}-more`, children: l.more.replace("{count}", String(more)) }))
|
|
232
|
+
] });
|
|
233
|
+
}
|
|
234
|
+
function TagMatrix({
|
|
235
|
+
matrix,
|
|
236
|
+
isLoading,
|
|
237
|
+
onChangeValue,
|
|
238
|
+
onAddRow,
|
|
239
|
+
onOpenDocument,
|
|
240
|
+
onOpenFact,
|
|
241
|
+
onOpenRow,
|
|
242
|
+
onExport,
|
|
243
|
+
people,
|
|
244
|
+
actions,
|
|
245
|
+
labels,
|
|
246
|
+
className,
|
|
247
|
+
testId = "tag-matrix"
|
|
248
|
+
}) {
|
|
249
|
+
const l = { ...DEFAULT_TAG_MATRIX_LABELS, ...labels };
|
|
250
|
+
const columns = react.useMemo(() => tagMatrixColumns(matrix), [matrix]);
|
|
251
|
+
const rows = matrix?.rows ?? [];
|
|
252
|
+
const gaps = rows.filter(isGap).length;
|
|
253
|
+
const [gapsOnly, setGapsOnly] = react.useState(false);
|
|
254
|
+
const [name, setName] = react.useState("");
|
|
255
|
+
const [adding, setAdding] = react.useState(false);
|
|
256
|
+
const [exporting, setExporting] = react.useState(false);
|
|
257
|
+
const shown = gapsOnly ? rows.filter(isGap) : rows;
|
|
258
|
+
const add = async () => {
|
|
259
|
+
const n = name.trim();
|
|
260
|
+
if (!n || !onAddRow) return;
|
|
261
|
+
setAdding(true);
|
|
262
|
+
try {
|
|
263
|
+
await onAddRow(n);
|
|
264
|
+
setName("");
|
|
265
|
+
} finally {
|
|
266
|
+
setAdding(false);
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("space-y-3", className), "data-testid": testId, children: [
|
|
270
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
271
|
+
gaps > 0 && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-sm", children: [
|
|
272
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
273
|
+
ui.Checkbox,
|
|
274
|
+
{
|
|
275
|
+
checked: gapsOnly,
|
|
276
|
+
onCheckedChange: (v) => setGapsOnly(v === true),
|
|
277
|
+
"data-testid": `${testId}-gaps-only`
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
l.gapsOnly,
|
|
281
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-amber-700 dark:text-amber-300", children: [
|
|
282
|
+
"(",
|
|
283
|
+
l.gapCount.replace("{count}", String(gaps)),
|
|
284
|
+
")"
|
|
285
|
+
] })
|
|
286
|
+
] }),
|
|
287
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex flex-wrap items-center gap-2", children: [
|
|
288
|
+
actions,
|
|
289
|
+
onExport && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
290
|
+
ui.Button,
|
|
291
|
+
{
|
|
292
|
+
variant: "outline",
|
|
293
|
+
size: "sm",
|
|
294
|
+
disabled: exporting || rows.length === 0,
|
|
295
|
+
onClick: async () => {
|
|
296
|
+
setExporting(true);
|
|
297
|
+
try {
|
|
298
|
+
await onExport();
|
|
299
|
+
} finally {
|
|
300
|
+
setExporting(false);
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"data-testid": `${testId}-export`,
|
|
304
|
+
children: [
|
|
305
|
+
exporting ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileDown, { className: "size-4" }),
|
|
306
|
+
exporting ? l.exporting : l.export
|
|
307
|
+
]
|
|
308
|
+
}
|
|
309
|
+
)
|
|
310
|
+
] })
|
|
311
|
+
] }),
|
|
312
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
313
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }),
|
|
314
|
+
" ",
|
|
315
|
+
l.loading
|
|
316
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-x-auto rounded-lg border border-border", children: [
|
|
317
|
+
/* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full border-collapse text-sm", "data-testid": `${testId}-table`, children: [
|
|
318
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "bg-muted/40", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
319
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "sticky left-0 z-10 bg-muted/40 px-3 py-2 text-left font-medium", children: l.row }),
|
|
320
|
+
columns.map((c) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
321
|
+
"th",
|
|
322
|
+
{
|
|
323
|
+
className: "px-3 py-2 text-left font-medium",
|
|
324
|
+
"data-testid": `${testId}-column-${c.id}`,
|
|
325
|
+
children: c.name
|
|
326
|
+
},
|
|
327
|
+
c.id
|
|
328
|
+
)),
|
|
329
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-3 py-2 text-left font-medium", children: l.evidence })
|
|
330
|
+
] }) }),
|
|
331
|
+
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
|
|
332
|
+
shown.map((row) => {
|
|
333
|
+
const id = row.tag.external_id;
|
|
334
|
+
const gap = isGap(row);
|
|
335
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
336
|
+
"tr",
|
|
337
|
+
{
|
|
338
|
+
className: ui.cn("border-t border-border align-top", gap && "bg-amber-500/5"),
|
|
339
|
+
"data-gap": gap || void 0,
|
|
340
|
+
"data-testid": `${testId}-row-${id}`,
|
|
341
|
+
children: [
|
|
342
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
343
|
+
"th",
|
|
344
|
+
{
|
|
345
|
+
scope: "row",
|
|
346
|
+
className: ui.cn(
|
|
347
|
+
"sticky left-0 z-10 max-w-56 px-3 py-2 text-left font-medium",
|
|
348
|
+
gap ? "bg-amber-50 dark:bg-amber-950" : "bg-background",
|
|
349
|
+
gap && "border-l-2 border-l-amber-500"
|
|
350
|
+
),
|
|
351
|
+
children: onOpenRow ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
352
|
+
"button",
|
|
353
|
+
{
|
|
354
|
+
type: "button",
|
|
355
|
+
className: "truncate text-left hover:text-primary hover:underline",
|
|
356
|
+
onClick: () => onOpenRow(id),
|
|
357
|
+
children: row.tag.name
|
|
358
|
+
}
|
|
359
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: row.tag.name })
|
|
360
|
+
}
|
|
361
|
+
),
|
|
362
|
+
columns.map((c) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-1.5 py-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
363
|
+
Cell,
|
|
364
|
+
{
|
|
365
|
+
row,
|
|
366
|
+
column: c,
|
|
367
|
+
people,
|
|
368
|
+
onChange: onChangeValue,
|
|
369
|
+
l,
|
|
370
|
+
testId: `${testId}-cell-${id}-${c.id}`
|
|
371
|
+
}
|
|
372
|
+
) }, c.id)),
|
|
373
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
374
|
+
Evidence,
|
|
375
|
+
{
|
|
376
|
+
row,
|
|
377
|
+
l,
|
|
378
|
+
onOpenDocument,
|
|
379
|
+
onOpenFact,
|
|
380
|
+
onOpenRow,
|
|
381
|
+
testId: `${testId}-evidence-${id}`
|
|
382
|
+
}
|
|
383
|
+
) })
|
|
384
|
+
]
|
|
385
|
+
},
|
|
386
|
+
id
|
|
387
|
+
);
|
|
388
|
+
}),
|
|
389
|
+
shown.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
390
|
+
"td",
|
|
391
|
+
{
|
|
392
|
+
colSpan: columns.length + 2,
|
|
393
|
+
className: "px-3 py-6 text-center text-sm text-muted-foreground",
|
|
394
|
+
children: l.empty
|
|
395
|
+
}
|
|
396
|
+
) })
|
|
397
|
+
] })
|
|
398
|
+
] }),
|
|
399
|
+
columns.length === 0 && rows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "border-t border-border px-3 py-2 text-xs text-muted-foreground", children: l.noColumns })
|
|
400
|
+
] }),
|
|
401
|
+
onAddRow && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
402
|
+
"form",
|
|
403
|
+
{
|
|
404
|
+
className: "flex max-w-md items-center gap-2",
|
|
405
|
+
onSubmit: (e) => {
|
|
406
|
+
e.preventDefault();
|
|
407
|
+
void add();
|
|
408
|
+
},
|
|
409
|
+
children: [
|
|
410
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
411
|
+
ui.Input,
|
|
412
|
+
{
|
|
413
|
+
value: name,
|
|
414
|
+
placeholder: l.addRowPlaceholder,
|
|
415
|
+
"aria-label": l.addRow,
|
|
416
|
+
onChange: (e) => setName(e.target.value),
|
|
417
|
+
"data-testid": `${testId}-add-name`
|
|
418
|
+
}
|
|
419
|
+
),
|
|
420
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
421
|
+
ui.Button,
|
|
422
|
+
{
|
|
423
|
+
type: "submit",
|
|
424
|
+
size: "sm",
|
|
425
|
+
variant: "outline",
|
|
426
|
+
disabled: !name.trim() || adding,
|
|
427
|
+
"data-testid": `${testId}-add`,
|
|
428
|
+
children: [
|
|
429
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" }),
|
|
430
|
+
" ",
|
|
431
|
+
l.addRow
|
|
432
|
+
]
|
|
433
|
+
}
|
|
434
|
+
)
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
)
|
|
438
|
+
] });
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
exports.DEFAULT_TAG_MATRIX_LABELS = DEFAULT_TAG_MATRIX_LABELS;
|
|
442
|
+
exports.TagMatrix = TagMatrix;
|
|
443
|
+
exports.cellText = cellText;
|
|
444
|
+
exports.cellValue = cellValue;
|
|
445
|
+
exports.isGap = isGap;
|
|
446
|
+
exports.parseCell = parseCell;
|
|
447
|
+
exports.tagMatrixColumns = tagMatrixColumns;
|
|
448
|
+
exports.tagMatrixMarkdown = tagMatrixMarkdown;
|
|
449
|
+
//# sourceMappingURL=chunk-MLAHDAN5.cjs.map
|
|
450
|
+
//# sourceMappingURL=chunk-MLAHDAN5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tags/tagMatrixModel.ts","../src/tags/TagMatrix.tsx"],"names":["useState","useEffect","jsx","Checkbox","jsxs","AlertTriangle","FileText","Lightbulb","useMemo","cn","Button","Loader2","FileDown","Input","Plus"],"mappings":"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","file":"chunk-MLAHDAN5.cjs","sourcesContent":["/**\n * The tag matrix as data: a parent label's child labels are the rows, the fields they share (the\n * parent's, then any a row adds) the columns, and each row's linked documents and facts its\n * 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/**\n * The columns: the parent's fields (shared by every row), then fields only some rows define,\n * each once, in the order first seen. Mirrors the SDK's `tagMatrixColumns`.\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)) 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/** 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?.[column.id]\n\n/** A row with nothing behind it: no linked document and no fact. */\nexport const isGap = (row: TagMatrixRowData): boolean => row.doc_count + row.fact_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 ].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 as a matrix: one row per child label, a column per field they share,\n * editable in place by type (text, number, date, checkbox, choice, person), and the evidence behind\n * each row (its linked documents and facts, with counts). Rows with no evidence are marked as\n * gaps. A row can be added (a new child label), and the matrix exported as a document snapshot.\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 { AlertTriangle, FileDown, FileText, Lightbulb, Loader2, Plus } from 'lucide-react'\nimport { Button, Checkbox, Input, cn } from '@arbidocs/react/ui'\nimport {\n cellText,\n cellValue,\n isGap,\n parseCell,\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 /** One document, one fact. */\n document: string\n fact: 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 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 document: '1 document',\n fact: '1 fact',\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 document',\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 row's label (all its evidence). */\n onOpenRow?: (tagId: string) => void\n /** Export the matrix as it stands. Absent: no export button. */\n onExport?: () => 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/** One editable cell: committed on blur or Enter (a checkbox and a choice at once). */\nfunction Cell({\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, column.id, 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={field}\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={field}\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/** What backs a row: its documents and facts as links, with counts and \"+N more\". */\nfunction Evidence({\n row,\n l,\n onOpenDocument,\n onOpenFact,\n onOpenRow,\n testId,\n}: {\n row: TagMatrixRowData\n l: TagMatrixLabels\n onOpenDocument?: (id: string) => void\n onOpenFact?: (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 more = row.doc_count - docs.length + (row.fact_count - facts.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 row.doc_count === 1\n ? l.document\n : row.doc_count\n ? l.documents.replace('{count}', String(row.doc_count))\n : null,\n row.fact_count === 1\n ? l.fact\n : row.fact_count\n ? l.facts.replace('{count}', String(row.fact_count))\n : null,\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 {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 onOpenRow,\n onExport,\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 {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 className=\"sticky left-0 z-10 bg-muted/40 px-3 py-2 text-left font-medium\">\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 'sticky left-0 z-10 max-w-56 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=\"truncate text-left hover:text-primary hover:underline\"\n onClick={() => onOpenRow(id)}\n >\n {row.tag.name}\n </button>\n ) : (\n <span className=\"truncate\">{row.tag.name}</span>\n )}\n </th>\n {columns.map((c) => (\n <td key={c.id} className=\"px-1.5 py-1\">\n <Cell\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 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"]}
|
|
@@ -12,6 +12,50 @@ var lucideReact = require('lucide-react');
|
|
|
12
12
|
var ui = require('@arbidocs/react/ui');
|
|
13
13
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
14
|
|
|
15
|
+
var DEFAULT_WORKFLOW_STEP_CHIP_LABELS = {
|
|
16
|
+
chip: "Workflow step \xB7 {title}",
|
|
17
|
+
show: "Show the instruction",
|
|
18
|
+
hide: "Hide the instruction"
|
|
19
|
+
};
|
|
20
|
+
function WorkflowStepChip({
|
|
21
|
+
step,
|
|
22
|
+
title,
|
|
23
|
+
content,
|
|
24
|
+
labels,
|
|
25
|
+
className,
|
|
26
|
+
testId = "workflow-step-message"
|
|
27
|
+
}) {
|
|
28
|
+
const l = { ...DEFAULT_WORKFLOW_STEP_CHIP_LABELS, ...labels };
|
|
29
|
+
const [open, setOpen] = react.useState(false);
|
|
30
|
+
const Chevron = open ? lucideReact.ChevronDown : lucideReact.ChevronRight;
|
|
31
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("flex max-w-full flex-col items-end gap-1", className), "data-testid": testId, children: [
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
33
|
+
"button",
|
|
34
|
+
{
|
|
35
|
+
type: "button",
|
|
36
|
+
onClick: () => setOpen((o) => !o),
|
|
37
|
+
"aria-expanded": open,
|
|
38
|
+
title: open ? l.hide : l.show,
|
|
39
|
+
className: "inline-flex max-w-full items-center gap-1.5 rounded-full border border-border bg-muted/60 px-2.5 py-1 text-xs font-medium text-muted-foreground hover:text-foreground",
|
|
40
|
+
"data-step": step,
|
|
41
|
+
"data-testid": `${testId}-toggle`,
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Workflow, { className: "size-3.5 shrink-0 text-primary", "aria-hidden": true }),
|
|
44
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: l.chip.replace("{title}", title || step) }),
|
|
45
|
+
/* @__PURE__ */ jsxRuntime.jsx(Chevron, { className: "size-3.5 shrink-0", "aria-hidden": true })
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
),
|
|
49
|
+
open && /* @__PURE__ */ jsxRuntime.jsx(
|
|
50
|
+
"p",
|
|
51
|
+
{
|
|
52
|
+
className: "m-0 max-w-prose whitespace-pre-wrap break-words rounded-lg border border-border bg-card px-3 py-2 text-sm text-muted-foreground",
|
|
53
|
+
"data-testid": `${testId}-content`,
|
|
54
|
+
children: content
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
] });
|
|
58
|
+
}
|
|
15
59
|
var LINE_PX = 16;
|
|
16
60
|
function wheelPixels(event, page) {
|
|
17
61
|
if (event.deltaMode === 1) return event.deltaY * LINE_PX;
|
|
@@ -1793,7 +1837,24 @@ var USER_BUBBLE = "bg-[color:hsl(var(--chat-user-bubble,var(--muted)))] text-[co
|
|
|
1793
1837
|
var NEAR_BOTTOM_PX = 96;
|
|
1794
1838
|
var LIST_COLUMN_REM = 48;
|
|
1795
1839
|
var DEFAULT_ASIDE_BREAKPOINT_REM = 60;
|
|
1796
|
-
function MessageRow({
|
|
1840
|
+
function MessageRow({
|
|
1841
|
+
message,
|
|
1842
|
+
identity,
|
|
1843
|
+
renderContent,
|
|
1844
|
+
onOpenCitation,
|
|
1845
|
+
workflowStepTitle,
|
|
1846
|
+
labels
|
|
1847
|
+
}) {
|
|
1848
|
+
if (message.role === "user" && message.workflowStep) {
|
|
1849
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { role: "user", messageId: message.id, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { role: "user", messageId: message.id, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1850
|
+
WorkflowStepChip,
|
|
1851
|
+
{
|
|
1852
|
+
step: message.workflowStep,
|
|
1853
|
+
title: workflowStepTitle?.(message.workflowStep),
|
|
1854
|
+
content: message.content
|
|
1855
|
+
}
|
|
1856
|
+
) }) });
|
|
1857
|
+
}
|
|
1797
1858
|
if (message.role === "user") {
|
|
1798
1859
|
return /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { role: "user", messageId: message.id, children: /* @__PURE__ */ jsxRuntime.jsxs(Message.Content, { role: "user", messageId: message.id, children: [
|
|
1799
1860
|
message.senderName && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: message.senderName }),
|
|
@@ -1859,6 +1920,8 @@ function ChatPage({
|
|
|
1859
1920
|
identity,
|
|
1860
1921
|
renderContent,
|
|
1861
1922
|
onOpenCitation,
|
|
1923
|
+
workflowStepTitle,
|
|
1924
|
+
singleThread,
|
|
1862
1925
|
targetMessageId,
|
|
1863
1926
|
asideBreakpoint = DEFAULT_ASIDE_BREAKPOINT_REM,
|
|
1864
1927
|
fillHeight = false,
|
|
@@ -1893,7 +1956,7 @@ function ChatPage({
|
|
|
1893
1956
|
const { width } = chunkB4SRYJLM_cjs.useElementSize(rootRef);
|
|
1894
1957
|
const { height: headerHeight } = chunkB4SRYJLM_cjs.useElementSize(headerRef);
|
|
1895
1958
|
const rem = chunkB4SRYJLM_cjs.rootFontSizePx();
|
|
1896
|
-
const hasListColumn = width >= LIST_COLUMN_REM * rem;
|
|
1959
|
+
const hasListColumn = !singleThread && width >= LIST_COLUMN_REM * rem;
|
|
1897
1960
|
const hasAsideColumn = width > 0 && width >= asideBreakpoint * rem;
|
|
1898
1961
|
const fillPx = useFillHeight(rootRef, fillHeight, minHeight);
|
|
1899
1962
|
const closeAside = react.useCallback(() => setIsAsideOpen(false), []);
|
|
@@ -2017,7 +2080,7 @@ function ChatPage({
|
|
|
2017
2080
|
"data-slot": "chat-page-header",
|
|
2018
2081
|
className: "flex min-h-12 shrink-0 items-center gap-2 border-b border-border px-3 py-1.5",
|
|
2019
2082
|
children: [
|
|
2020
|
-
hasListColumn ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1 items-center", children: heading }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
2083
|
+
hasListColumn || singleThread ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1 items-center", children: heading }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
2021
2084
|
heading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 shrink", children: heading }) : null,
|
|
2022
2085
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2023
2086
|
ChatThreadSelect,
|
|
@@ -2139,6 +2202,7 @@ function ChatPage({
|
|
|
2139
2202
|
identity,
|
|
2140
2203
|
renderContent,
|
|
2141
2204
|
onOpenCitation,
|
|
2205
|
+
workflowStepTitle,
|
|
2142
2206
|
labels: l
|
|
2143
2207
|
}
|
|
2144
2208
|
)
|
|
@@ -2410,6 +2474,7 @@ exports.DEFAULT_CONVERSATION_EMPTY_LABELS = DEFAULT_CONVERSATION_EMPTY_LABELS;
|
|
|
2410
2474
|
exports.DEFAULT_MESSAGE_ALERT_LABELS = DEFAULT_MESSAGE_ALERT_LABELS;
|
|
2411
2475
|
exports.DEFAULT_MESSAGE_LABELS = DEFAULT_MESSAGE_LABELS;
|
|
2412
2476
|
exports.DEFAULT_MESSAGE_LIST_LABELS = DEFAULT_MESSAGE_LIST_LABELS;
|
|
2477
|
+
exports.DEFAULT_WORKFLOW_STEP_CHIP_LABELS = DEFAULT_WORKFLOW_STEP_CHIP_LABELS;
|
|
2413
2478
|
exports.Message = Message;
|
|
2414
2479
|
exports.MessageActionButton = MessageActionButton;
|
|
2415
2480
|
exports.MessageActionMenu = MessageActionMenu;
|
|
@@ -2433,10 +2498,11 @@ exports.MessageSources = MessageSources;
|
|
|
2433
2498
|
exports.MessageSubagentBadge = MessageSubagentBadge;
|
|
2434
2499
|
exports.ScrollToBottom = ScrollToBottom;
|
|
2435
2500
|
exports.SourceChip = SourceChip;
|
|
2501
|
+
exports.WorkflowStepChip = WorkflowStepChip;
|
|
2436
2502
|
exports.toSpeakableText = toSpeakableText;
|
|
2437
2503
|
exports.useAssistantDock = useAssistantDock;
|
|
2438
2504
|
exports.useChatSurface = useChatSurface;
|
|
2439
2505
|
exports.useRegisterEmbeddedChat = useRegisterEmbeddedChat;
|
|
2440
2506
|
exports.useStreamAnnouncement = useStreamAnnouncement;
|
|
2441
|
-
//# sourceMappingURL=chunk-
|
|
2442
|
-
//# sourceMappingURL=chunk-
|
|
2507
|
+
//# sourceMappingURL=chunk-MP6FK43E.cjs.map
|
|
2508
|
+
//# sourceMappingURL=chunk-MP6FK43E.cjs.map
|