@arbidocs/blocks 0.5.92 → 0.5.94

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.
Files changed (91) hide show
  1. package/dist/{ConnectedNativeDocxComparison-QHAV3K7N.cjs → ConnectedNativeDocxComparison-2LHBSTHG.cjs} +5 -5
  2. package/dist/{ConnectedNativeDocxComparison-QHAV3K7N.cjs.map → ConnectedNativeDocxComparison-2LHBSTHG.cjs.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-P6GG3ODF.js → ConnectedNativeDocxComparison-E65YZ7ML.js} +4 -4
  4. package/dist/{ConnectedNativeDocxComparison-P6GG3ODF.js.map → ConnectedNativeDocxComparison-E65YZ7ML.js.map} +1 -1
  5. package/dist/{DocumentReviewCard-LP33IGEL.js → DocumentReviewCard-H3C3D2OT.js} +7 -7
  6. package/dist/{DocumentReviewCard-LP33IGEL.js.map → DocumentReviewCard-H3C3D2OT.js.map} +1 -1
  7. package/dist/{DocumentReviewCard-QV3CM7YP.cjs → DocumentReviewCard-S77M6UGK.cjs} +12 -12
  8. package/dist/{DocumentReviewCard-QV3CM7YP.cjs.map → DocumentReviewCard-S77M6UGK.cjs.map} +1 -1
  9. package/dist/{FilesViewerDialog-FZYXO3MS.js → FilesViewerDialog-APITCSFU.js} +6 -6
  10. package/dist/{FilesViewerDialog-FZYXO3MS.js.map → FilesViewerDialog-APITCSFU.js.map} +1 -1
  11. package/dist/{FilesViewerDialog-JKNA25Q3.cjs → FilesViewerDialog-SWTDMWSU.cjs} +7 -7
  12. package/dist/{FilesViewerDialog-JKNA25Q3.cjs.map → FilesViewerDialog-SWTDMWSU.cjs.map} +1 -1
  13. package/dist/{chunk-KB2FH26M.cjs → chunk-345BCA6C.cjs} +4 -4
  14. package/dist/chunk-345BCA6C.cjs.map +1 -0
  15. package/dist/{chunk-DBGN4M4F.cjs → chunk-3I335OG7.cjs} +4 -4
  16. package/dist/{chunk-DBGN4M4F.cjs.map → chunk-3I335OG7.cjs.map} +1 -1
  17. package/dist/{chunk-DIE5ENQC.cjs → chunk-6BPA5O3I.cjs} +28 -28
  18. package/dist/{chunk-DIE5ENQC.cjs.map → chunk-6BPA5O3I.cjs.map} +1 -1
  19. package/dist/{chunk-SOZIHPO2.js → chunk-AFNPK2AH.js} +3 -3
  20. package/dist/{chunk-SOZIHPO2.js.map → chunk-AFNPK2AH.js.map} +1 -1
  21. package/dist/chunk-BFMOBAKB.js +29 -0
  22. package/dist/chunk-BFMOBAKB.js.map +1 -0
  23. package/dist/{chunk-WA2U4G43.cjs → chunk-FAD6D5EV.cjs} +7 -7
  24. package/dist/{chunk-WA2U4G43.cjs.map → chunk-FAD6D5EV.cjs.map} +1 -1
  25. package/dist/chunk-FWBU4MKG.cjs +130 -0
  26. package/dist/chunk-FWBU4MKG.cjs.map +1 -0
  27. package/dist/{chunk-VWX36C4Y.cjs → chunk-HKZT7K4L.cjs} +8 -8
  28. package/dist/{chunk-VWX36C4Y.cjs.map → chunk-HKZT7K4L.cjs.map} +1 -1
  29. package/dist/{chunk-BSTVTI5G.js → chunk-HP2DF3XY.js} +6 -6
  30. package/dist/{chunk-BSTVTI5G.js.map → chunk-HP2DF3XY.js.map} +1 -1
  31. package/dist/{chunk-HLVLPDDD.js → chunk-IG2EZOH3.js} +3 -3
  32. package/dist/{chunk-HLVLPDDD.js.map → chunk-IG2EZOH3.js.map} +1 -1
  33. package/dist/{chunk-QIEUKIBH.cjs → chunk-JTRMTIHN.cjs} +4 -4
  34. package/dist/{chunk-QIEUKIBH.cjs.map → chunk-JTRMTIHN.cjs.map} +1 -1
  35. package/dist/{chunk-GE2O6S44.cjs → chunk-MN622SFR.cjs} +4 -4
  36. package/dist/{chunk-GE2O6S44.cjs.map → chunk-MN622SFR.cjs.map} +1 -1
  37. package/dist/{chunk-DCYVHUSU.cjs → chunk-MPA74GSM.cjs} +46 -46
  38. package/dist/{chunk-DCYVHUSU.cjs.map → chunk-MPA74GSM.cjs.map} +1 -1
  39. package/dist/{chunk-CPOFZYKH.js → chunk-MXCJLF4H.js} +3 -3
  40. package/dist/{chunk-CPOFZYKH.js.map → chunk-MXCJLF4H.js.map} +1 -1
  41. package/dist/{chunk-5SUIQS75.js → chunk-NALP6YI6.js} +4 -4
  42. package/dist/{chunk-5SUIQS75.js.map → chunk-NALP6YI6.js.map} +1 -1
  43. package/dist/chunk-PGSBXD5U.js +128 -0
  44. package/dist/chunk-PGSBXD5U.js.map +1 -0
  45. package/dist/{chunk-WLWZAS7J.js → chunk-QYNPE4C4.js} +4 -4
  46. package/dist/chunk-QYNPE4C4.js.map +1 -0
  47. package/dist/{chunk-4P553YX2.cjs → chunk-WVMOIMDQ.cjs} +35 -35
  48. package/dist/{chunk-4P553YX2.cjs.map → chunk-WVMOIMDQ.cjs.map} +1 -1
  49. package/dist/{chunk-BCYFZIG6.js → chunk-Z256XHYA.js} +4 -4
  50. package/dist/{chunk-BCYFZIG6.js.map → chunk-Z256XHYA.js.map} +1 -1
  51. package/dist/{chunk-JM7Z3QNS.js → chunk-ZFAYQ3XJ.js} +5 -5
  52. package/dist/{chunk-JM7Z3QNS.js.map → chunk-ZFAYQ3XJ.js.map} +1 -1
  53. package/dist/chunk-ZK7UK77G.cjs +31 -0
  54. package/dist/chunk-ZK7UK77G.cjs.map +1 -0
  55. package/dist/{chunk-YB2P5Y52.js → chunk-ZV3I6EVU.js} +3 -3
  56. package/dist/{chunk-YB2P5Y52.js.map → chunk-ZV3I6EVU.js.map} +1 -1
  57. package/dist/connect/docx.cjs +3 -3
  58. package/dist/connect/docx.js +2 -2
  59. package/dist/connect/index.cjs +436 -410
  60. package/dist/connect/index.cjs.map +1 -1
  61. package/dist/connect/index.js +61 -35
  62. package/dist/connect/index.js.map +1 -1
  63. package/dist/connect/viewer.cjs +5 -5
  64. package/dist/connect/viewer.js +4 -4
  65. package/dist/connection/docx/ConnectedNativeDocxComparison.d.ts +6 -2
  66. package/dist/connection/mail/offline/offlineMailSupport.d.ts +3 -1
  67. package/dist/connection/mail/types.d.ts +6 -0
  68. package/dist/connection/mail/useMailOffline.d.ts +6 -0
  69. package/dist/docx/NativeDocxComparison.d.ts +17 -1
  70. package/dist/docx/index.cjs +2 -2
  71. package/dist/docx/index.js +1 -1
  72. package/dist/embed/index.cjs +11 -11
  73. package/dist/embed/index.js +5 -5
  74. package/dist/files/AiReviewDialog.d.ts +2 -0
  75. package/dist/files/index.cjs +222 -222
  76. package/dist/files/index.js +1 -1
  77. package/dist/workflow-canvas/index.cjs +13 -13
  78. package/dist/workflow-canvas/index.js +6 -6
  79. package/node_modules/@arbidocs/coedit/package.json +1 -1
  80. package/package.json +5 -5
  81. package/src/docx/README.md +8 -1
  82. package/dist/chunk-DW7LSBIW.js +0 -16
  83. package/dist/chunk-DW7LSBIW.js.map +0 -1
  84. package/dist/chunk-EBNY3RTL.cjs +0 -18
  85. package/dist/chunk-EBNY3RTL.cjs.map +0 -1
  86. package/dist/chunk-IVY4EEN5.js +0 -65
  87. package/dist/chunk-IVY4EEN5.js.map +0 -1
  88. package/dist/chunk-KB2FH26M.cjs.map +0 -1
  89. package/dist/chunk-VNO36IVK.cjs +0 -67
  90. package/dist/chunk-VNO36IVK.cjs.map +0 -1
  91. package/dist/chunk-WLWZAS7J.js.map +0 -1
@@ -0,0 +1,130 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkLCPU44GW_cjs = require('./chunk-LCPU44GW.cjs');
5
+ var react = require('react');
6
+ var artifacts = require('@arbidocs/react/artifacts');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function redlineQuery(baseId, revisedId) {
10
+ const base = artifacts.parseVersionRef(baseId);
11
+ const revised = artifacts.parseVersionRef(revisedId);
12
+ const query = new URLSearchParams({ base_ext_id: base.docId, revised_ext_id: revised.docId });
13
+ if (base.version) query.set("base_version", String(base.version));
14
+ if (revised.version) query.set("revised_version", String(revised.version));
15
+ return query;
16
+ }
17
+ function comparedSides(documents, baseId, revisedId) {
18
+ const side = (ref) => {
19
+ const { docId, version } = artifacts.parseVersionRef(ref);
20
+ if (version) return { docId, version };
21
+ const doc = documents.find((d) => d.external_id === docId);
22
+ return doc ? { docId, version: doc.current_version ?? 1 } : null;
23
+ };
24
+ const base = side(baseId);
25
+ const revised = side(revisedId);
26
+ if (!base || !revised) return null;
27
+ return {
28
+ base,
29
+ revised,
30
+ key: `${base.docId}@v${base.version}>${revised.docId}@v${revised.version}`
31
+ };
32
+ }
33
+ var savedThisSession = /* @__PURE__ */ new Map();
34
+ function reusableRedline(documents, sides) {
35
+ const madeFrom = (doc, role, from) => !!doc.derived_from?.some(
36
+ (link) => link.role === role && link.doc_ext_id === from.docId && link.version === from.version
37
+ );
38
+ const unedited = documents.find(
39
+ (doc) => (doc.current_version ?? 1) === 1 && madeFrom(doc, "redline_base", sides.base) && madeFrom(doc, "redline_revised", sides.revised)
40
+ );
41
+ if (unedited) return unedited.external_id;
42
+ const saved = savedThisSession.get(sides.key);
43
+ if (!saved) return void 0;
44
+ if (saved.listed || documents.some((doc) => doc.external_id === saved.id)) {
45
+ savedThisSession.delete(sides.key);
46
+ return void 0;
47
+ }
48
+ return saved.id;
49
+ }
50
+ function noteListed(documents) {
51
+ for (const saved of savedThisSession.values())
52
+ if (!saved.listed && documents.some((doc) => doc.external_id === saved.id)) saved.listed = true;
53
+ }
54
+ var savingRedlines = /* @__PURE__ */ new Map();
55
+ function saveRedline(adapter, query, sessionKey, onSaved) {
56
+ const saving = savingRedlines.get(query);
57
+ if (saving) return saving;
58
+ const saved = adapter.request(`/redline?${query}`, { method: "POST" }).then((response) => response.json()).then((result) => {
59
+ if (!result.document_ext_id) throw new Error("Comparison did not return a Word document.");
60
+ if (sessionKey)
61
+ savedThisSession.set(sessionKey, { id: result.document_ext_id, listed: false });
62
+ return result.document_ext_id;
63
+ });
64
+ savingRedlines.set(query, saved);
65
+ void saved.then(
66
+ (documentId) => Promise.resolve(onSaved(documentId)).catch(() => {
67
+ }),
68
+ () => {
69
+ }
70
+ ).finally(() => savingRedlines.delete(query));
71
+ return saved;
72
+ }
73
+ function NativeDocxComparison({
74
+ adapter,
75
+ baseId,
76
+ revisedId,
77
+ title,
78
+ onCompared,
79
+ documents
80
+ }) {
81
+ const host = react.useRef({ adapter, onCompared, documents });
82
+ host.current = { adapter, onCompared, documents };
83
+ const [documentId, setDocumentId] = react.useState("");
84
+ const [error, setError] = react.useState("");
85
+ const [attempt, setAttempt] = react.useState(0);
86
+ react.useEffect(() => {
87
+ if (documents) noteListed(documents);
88
+ }, [documents]);
89
+ react.useEffect(() => {
90
+ let cancelled = false;
91
+ setDocumentId("");
92
+ setError("");
93
+ const listed = host.current.documents ?? [];
94
+ const sides = comparedSides(listed, baseId, revisedId);
95
+ const saved = sides && reusableRedline(listed, sides);
96
+ void (saved ? Promise.resolve(saved) : saveRedline(
97
+ host.current.adapter,
98
+ String(redlineQuery(baseId, revisedId)),
99
+ sides?.key,
100
+ (id) => host.current.onCompared?.(id)
101
+ )).then((id) => {
102
+ if (!cancelled) setDocumentId(id);
103
+ }).catch((error2) => {
104
+ if (!cancelled) setError(error2 instanceof Error ? error2.message : String(error2));
105
+ });
106
+ return () => {
107
+ cancelled = true;
108
+ };
109
+ }, [baseId, revisedId, attempt]);
110
+ if (error)
111
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "native-docx-error", role: "alert", children: [
112
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: error }),
113
+ /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: () => setAttempt((value) => value + 1), children: "Retry comparison" })
114
+ ] });
115
+ if (!documentId)
116
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "native-docx-error", role: "status", children: "Comparing Word documents\u2026" });
117
+ return /* @__PURE__ */ jsxRuntime.jsx(
118
+ chunkLCPU44GW_cjs.NativeDocxEditor,
119
+ {
120
+ adapter,
121
+ documentId,
122
+ title: `${title.replace(/\.[^.]+$/, "")} (redline).docx`
123
+ },
124
+ documentId
125
+ );
126
+ }
127
+
128
+ exports.NativeDocxComparison = NativeDocxComparison;
129
+ //# sourceMappingURL=chunk-FWBU4MKG.cjs.map
130
+ //# sourceMappingURL=chunk-FWBU4MKG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docx/NativeDocxComparison.tsx"],"names":["parseVersionRef","useRef","useState","useEffect","error","jsxs","jsx","NativeDocxEditor"],"mappings":"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","file":"chunk-FWBU4MKG.cjs","sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { parseVersionRef } from '@arbidocs/react/artifacts'\nimport { NativeDocxEditor, type NativeDocxAdapter } from './NativeDocxEditor'\n\n/** A workspace document as the comparison needs it: its current version and what it was made from. */\nexport interface NativeDocxComparedDocument {\n external_id: string\n current_version?: number | null\n derived_from?: ReadonlyArray<{\n doc_ext_id: string\n role: string\n version?: number | null\n }> | null\n}\n\nexport interface NativeDocxComparisonProps {\n adapter: NativeDocxAdapter\n baseId: string\n revisedId: string\n title: string\n /** Called once for each redline the comparison saves as a new document (to add it to the lists). */\n onCompared?: (documentId: string) => void | Promise<void>\n /**\n * The workspace's documents, all of them (a redline may be on any page). The unedited redline\n * saved earlier from the same two versions is opened from here instead of saving another.\n */\n documents?: ReadonlyArray<NativeDocxComparedDocument>\n}\n\n/** A `doc-…@v{n}` side names an older version: the endpoint takes its document and version apart. */\nfunction redlineQuery(baseId: string, revisedId: string): URLSearchParams {\n const base = parseVersionRef(baseId)\n const revised = parseVersionRef(revisedId)\n const query = new URLSearchParams({ base_ext_id: base.docId, revised_ext_id: revised.docId })\n if (base.version) query.set('base_version', String(base.version))\n if (revised.version) query.set('revised_version', String(revised.version))\n return query\n}\n\ninterface ComparedSide {\n docId: string\n version: number\n}\n\n/** The two versions compared. A plain id compares the document's current version (from the list). */\nfunction comparedSides(\n documents: ReadonlyArray<NativeDocxComparedDocument>,\n baseId: string,\n revisedId: string\n): { base: ComparedSide; revised: ComparedSide; key: string } | null {\n const side = (ref: string): ComparedSide | null => {\n const { docId, version } = parseVersionRef(ref)\n if (version) return { docId, version }\n const doc = documents.find((d) => d.external_id === docId)\n return doc ? { docId, version: doc.current_version ?? 1 } : null\n }\n const base = side(baseId)\n const revised = side(revisedId)\n if (!base || !revised) return null\n return {\n base,\n revised,\n key: `${base.docId}@v${base.version}>${revised.docId}@v${revised.version}`,\n }\n}\n\n/**\n * Redlines saved in this page's life, by the versions compared, with whether the lists have shown\n * them yet. One the lists never got (adding it failed) is reopened from here; one they showed and\n * no longer do was deleted.\n */\nconst savedThisSession = new Map<string, { id: string; listed: boolean }>()\n\n/**\n * The redline to reopen for these two versions: a document made from both (`redline_base` and\n * `redline_revised`, at the versions compared) that is still unedited (no version saved since it\n * was made, so it shows the real differences), else the one saved earlier in this page's life that\n * the lists never got. An edited or deleted one is not reopened: the comparison makes a fresh one.\n */\nfunction reusableRedline(\n documents: ReadonlyArray<NativeDocxComparedDocument>,\n sides: { base: ComparedSide; revised: ComparedSide; key: string }\n): string | undefined {\n const madeFrom = (doc: NativeDocxComparedDocument, role: string, from: ComparedSide) =>\n !!doc.derived_from?.some(\n (link) =>\n link.role === role && link.doc_ext_id === from.docId && link.version === from.version\n )\n const unedited = documents.find(\n (doc) =>\n (doc.current_version ?? 1) === 1 &&\n madeFrom(doc, 'redline_base', sides.base) &&\n madeFrom(doc, 'redline_revised', sides.revised)\n )\n if (unedited) return unedited.external_id\n const saved = savedThisSession.get(sides.key)\n if (!saved) return undefined\n // Listed now (yet not unedited) means edited; listed before and gone means deleted.\n if (saved.listed || documents.some((doc) => doc.external_id === saved.id)) {\n savedThisSession.delete(sides.key)\n return undefined\n }\n return saved.id\n}\n\n/** Note which redlines saved in this page's life the lists now show. */\nfunction noteListed(documents: ReadonlyArray<NativeDocxComparedDocument>): void {\n for (const saved of savedThisSession.values())\n if (!saved.listed && documents.some((doc) => doc.external_id === saved.id)) saved.listed = true\n}\n\n/**\n * Redlines being saved, by request. Another open of the same comparison meanwhile (React\n * StrictMode runs effects twice; reopening the viewer) waits for this one instead of saving a\n * second. Each is kept until its document has been added to the lists, where the next open finds it.\n */\nconst savingRedlines = new Map<string, Promise<string>>()\n\nfunction saveRedline(\n adapter: NativeDocxAdapter,\n query: string,\n sessionKey: string | undefined,\n onSaved: (documentId: string) => void | Promise<void>\n): Promise<string> {\n const saving = savingRedlines.get(query)\n if (saving) return saving\n const saved = adapter\n .request(`/redline?${query}`, { method: 'POST' })\n .then((response) => response.json())\n .then((result: { document_ext_id: string }) => {\n if (!result.document_ext_id) throw new Error('Comparison did not return a Word document.')\n if (sessionKey)\n savedThisSession.set(sessionKey, { id: result.document_ext_id, listed: false })\n return result.document_ext_id\n })\n savingRedlines.set(query, saved)\n void saved\n .then(\n (documentId) => Promise.resolve(onSaved(documentId)).catch(() => {}),\n () => {}\n )\n .finally(() => savingRedlines.delete(query))\n return saved\n}\n\n/** Word comparison through the host's authenticated transport and LibreOffice service. */\nexport function NativeDocxComparison({\n adapter,\n baseId,\n revisedId,\n title,\n onCompared,\n documents,\n}: NativeDocxComparisonProps) {\n const host = useRef({ adapter, onCompared, documents })\n host.current = { adapter, onCompared, documents }\n const [documentId, setDocumentId] = useState('')\n const [error, setError] = useState('')\n const [attempt, setAttempt] = useState(0)\n useEffect(() => {\n if (documents) noteListed(documents)\n }, [documents])\n useEffect(() => {\n let cancelled = false\n setDocumentId('')\n setError('')\n const listed = host.current.documents ?? []\n const sides = comparedSides(listed, baseId, revisedId)\n const saved = sides && reusableRedline(listed, sides)\n // The redline is a document of its own (the Word editor opens documents): reopen the unedited\n // one saved from these versions, else save it once, however often the comparison opens.\n void (\n saved\n ? Promise.resolve(saved)\n : saveRedline(\n host.current.adapter,\n String(redlineQuery(baseId, revisedId)),\n sides?.key,\n (id) => host.current.onCompared?.(id)\n )\n )\n .then((id) => {\n if (!cancelled) setDocumentId(id)\n })\n .catch((error) => {\n if (!cancelled) setError(error instanceof Error ? error.message : String(error))\n })\n return () => {\n cancelled = true\n }\n }, [baseId, revisedId, attempt])\n if (error)\n return (\n <div className=\"native-docx-error\" role=\"alert\">\n <p>{error}</p>\n <button onClick={() => setAttempt((value) => value + 1)}>Retry comparison</button>\n </div>\n )\n if (!documentId)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxEditor\n key={documentId}\n adapter={adapter}\n documentId={documentId}\n title={`${title.replace(/\\.[^.]+$/, '')} (redline).docx`}\n />\n )\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkDBGN4M4F_cjs = require('./chunk-DBGN4M4F.cjs');
5
- var chunkQIEUKIBH_cjs = require('./chunk-QIEUKIBH.cjs');
4
+ var chunk3I335OG7_cjs = require('./chunk-3I335OG7.cjs');
5
+ var chunkJTRMTIHN_cjs = require('./chunk-JTRMTIHN.cjs');
6
6
  var chunkTJY7XPDE_cjs = require('./chunk-TJY7XPDE.cjs');
7
7
  var chunkXNW62J54_cjs = require('./chunk-XNW62J54.cjs');
8
8
  var chunk6Y7MHSIT_cjs = require('./chunk-6Y7MHSIT.cjs');
@@ -2252,7 +2252,7 @@ var MessageComponent = ({
2252
2252
  align: isOtherPerson ? "start" : "end",
2253
2253
  leading: isUser ? (
2254
2254
  // Someone else's author is the pill above their run; only mine is marked here.
2255
- !isOtherPerson && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunkQIEUKIBH_cjs.DocumentUser, { user: messageAuthorUser })
2255
+ !isOtherPerson && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunkJTRMTIHN_cjs.DocumentUser, { user: messageAuthorUser })
2256
2256
  ) : /* @__PURE__ */ jsxRuntime.jsx(
2257
2257
  "span",
2258
2258
  {
@@ -2357,7 +2357,7 @@ var MessageComponent = ({
2357
2357
  messageId,
2358
2358
  align: isOtherPerson ? "start" : "end",
2359
2359
  children: [
2360
- startsAuthorRun && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunkZ6JUJI4A_cjs.MessageAuthor, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkQIEUKIBH_cjs.DocumentUser, { user: messageAuthorUser, variant: "pill" }) }),
2360
+ startsAuthorRun && messageAuthorUser && /* @__PURE__ */ jsxRuntime.jsx(chunkZ6JUJI4A_cjs.MessageAuthor, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkJTRMTIHN_cjs.DocumentUser, { user: messageAuthorUser, variant: "pill" }) }),
2361
2361
  /* @__PURE__ */ jsxRuntime.jsxs(
2362
2362
  chunkZ6JUJI4A_cjs.MessageBubble,
2363
2363
  {
@@ -2741,7 +2741,7 @@ function ConnectedMessageList({ messages, scrollElementRef }) {
2741
2741
  React6.useEffect(() => {
2742
2742
  scrollContainerRef.current = scrollElementRef?.current ?? resolveScrollContainer(null);
2743
2743
  }, [scrollElementRef]);
2744
- const { items: activityItems } = chunkDBGN4M4F_cjs.useConnectedThreadActivity(currentConversationId);
2744
+ const { items: activityItems } = chunk3I335OG7_cjs.useConnectedThreadActivity(currentConversationId);
2745
2745
  const transcript = [
2746
2746
  ...displayMessages.map((message, index) => ({
2747
2747
  type: "message",
@@ -4926,7 +4926,7 @@ function EmbeddedWorkspaceHeader({ title }) {
4926
4926
  const signedIn = react.useArbiSession();
4927
4927
  const workspaceId = react.useArbiSessionState((s) => s.workspaceId);
4928
4928
  const { data: workspaces = [], isLoading, error: listError } = react.useWorkspaces();
4929
- const select = chunkDBGN4M4F_cjs.useSelectWorkspace();
4929
+ const select = chunk3I335OG7_cjs.useSelectWorkspace();
4930
4930
  const connection = chunkWV65MJ43_cjs.useOptionalConnection();
4931
4931
  const [pending, setPending] = React6.useState(false);
4932
4932
  const [error, setError] = React6.useState(null);
@@ -5110,5 +5110,5 @@ exports.useOpenWorkspaceIcon = useOpenWorkspaceIcon;
5110
5110
  exports.useSlashItems = useSlashItems;
5111
5111
  exports.useSsoSignIn = useSsoSignIn;
5112
5112
  exports.useWorkspaceDocTitles = useWorkspaceDocTitles;
5113
- //# sourceMappingURL=chunk-VWX36C4Y.cjs.map
5114
- //# sourceMappingURL=chunk-VWX36C4Y.cjs.map
5113
+ //# sourceMappingURL=chunk-HKZT7K4L.cjs.map
5114
+ //# sourceMappingURL=chunk-HKZT7K4L.cjs.map