@arbidocs/react 0.5.110 → 0.5.112

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 (1011) hide show
  1. package/dist/PdfViewerImpl-QUSDLNNM.cjs +380 -0
  2. package/dist/PdfViewerImpl-QUSDLNNM.cjs.map +1 -0
  3. package/dist/{PdfViewer.d-bQH9yxFg.d.cts → PdfViewerImpl.d-B28hLEuj.d.ts} +8 -1
  4. package/dist/account/client.js +96 -0
  5. package/dist/account/client.js.map +7 -0
  6. package/dist/account/delete.js +70 -0
  7. package/dist/account/delete.js.map +7 -0
  8. package/dist/account/didit.js +34 -0
  9. package/dist/account/didit.js.map +7 -0
  10. package/dist/account/dismissed-tips.js +33 -0
  11. package/dist/account/dismissed-tips.js.map +7 -0
  12. package/dist/account/email.js +84 -0
  13. package/dist/account/email.js.map +7 -0
  14. package/dist/account/entitlements.js +47 -0
  15. package/dist/account/entitlements.js.map +7 -0
  16. package/dist/account/identity.js +270 -0
  17. package/dist/account/identity.js.map +7 -0
  18. package/dist/account/index.js +93 -0
  19. package/dist/account/index.js.map +7 -0
  20. package/dist/account/notifications.js +59 -0
  21. package/dist/account/notifications.js.map +7 -0
  22. package/dist/account/password.js +103 -0
  23. package/dist/account/password.js.map +7 -0
  24. package/dist/account/profile.js +116 -0
  25. package/dist/account/profile.js.map +7 -0
  26. package/dist/account/recovery.js +13 -0
  27. package/dist/account/recovery.js.map +7 -0
  28. package/dist/account/relevance.js +82 -0
  29. package/dist/account/relevance.js.map +7 -0
  30. package/dist/account/sessions.js +37 -0
  31. package/dist/account/sessions.js.map +7 -0
  32. package/dist/account/settings.js +39 -0
  33. package/dist/account/settings.js.map +7 -0
  34. package/dist/account/table-views.js +16 -0
  35. package/dist/account/table-views.js.map +7 -0
  36. package/dist/ai/AiAnswer.js +83 -0
  37. package/dist/ai/AiAnswer.js.map +7 -0
  38. package/dist/ai/AiMarkdown.js +40 -0
  39. package/dist/ai/AiMarkdown.js.map +7 -0
  40. package/dist/ai/ArtifactCanvas.js +193 -0
  41. package/dist/ai/ArtifactCanvas.js.map +7 -0
  42. package/dist/ai/CitationRenderer.js +413 -0
  43. package/dist/ai/CitationRenderer.js.map +7 -0
  44. package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
  45. package/dist/ai/MarkdownRenderer.js.map +7 -0
  46. package/dist/ai/MessageArtifactCard.js +75 -0
  47. package/dist/ai/MessageArtifactCard.js.map +7 -0
  48. package/dist/ai/PassageCard.js +79 -0
  49. package/dist/ai/PassageCard.js.map +7 -0
  50. package/dist/ai/engine.js +110 -0
  51. package/dist/ai/engine.js.map +7 -0
  52. package/dist/ai/index.js +63 -0
  53. package/dist/ai/index.js.map +7 -0
  54. package/dist/ai/markdown-base-components.js +37 -0
  55. package/dist/ai/markdown-base-components.js.map +7 -0
  56. package/dist/ai/markdown-streaming-context.js +6 -0
  57. package/dist/ai/markdown-streaming-context.js.map +7 -0
  58. package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
  59. package/dist/ai/normalize-citations.js.map +7 -0
  60. package/dist/ai/redline.js +41 -0
  61. package/dist/ai/redline.js.map +7 -0
  62. package/dist/ai/split-markdown-blocks.js +40 -0
  63. package/dist/ai/split-markdown-blocks.js.map +7 -0
  64. package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
  65. package/dist/ai/stored-markdown.js.map +7 -0
  66. package/dist/annotations/AnnotationPageOverlay.js +807 -0
  67. package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
  68. package/dist/annotations/AnnotationToolbar.js +398 -0
  69. package/dist/annotations/AnnotationToolbar.js.map +7 -0
  70. package/dist/annotations/FreezeDialog.js +170 -0
  71. package/dist/annotations/FreezeDialog.js.map +7 -0
  72. package/dist/annotations/ProductionDialog.js +354 -0
  73. package/dist/annotations/ProductionDialog.js.map +7 -0
  74. package/dist/annotations/controller.js +49 -0
  75. package/dist/annotations/controller.js.map +7 -0
  76. package/dist/annotations/freeze/browser.js +21 -0
  77. package/dist/annotations/freeze/browser.js.map +7 -0
  78. package/dist/annotations/freeze/bundle.js +201 -0
  79. package/dist/annotations/freeze/bundle.js.map +7 -0
  80. package/dist/annotations/freeze/coords.js +37 -0
  81. package/dist/annotations/freeze/coords.js.map +7 -0
  82. package/dist/annotations/freeze/freeze.js +261 -0
  83. package/dist/annotations/freeze/freeze.js.map +7 -0
  84. package/dist/annotations/freeze/hash.js +28 -0
  85. package/dist/annotations/freeze/hash.js.map +7 -0
  86. package/dist/annotations/freeze/index-page.js +78 -0
  87. package/dist/annotations/freeze/index-page.js.map +7 -0
  88. package/dist/annotations/freeze/index.d.ts +1 -1
  89. package/dist/annotations/freeze/index.js +28 -22
  90. package/dist/annotations/freeze/index.js.map +7 -1
  91. package/dist/annotations/freeze/raster.js +208 -0
  92. package/dist/annotations/freeze/raster.js.map +7 -0
  93. package/dist/annotations/freeze/stamp.js +117 -0
  94. package/dist/annotations/freeze/stamp.js.map +7 -0
  95. package/dist/annotations/freeze/types.js +14 -0
  96. package/dist/annotations/freeze/types.js.map +7 -0
  97. package/dist/annotations/freeze/vector.js +283 -0
  98. package/dist/annotations/freeze/vector.js.map +7 -0
  99. package/dist/annotations/geometry.js +81 -0
  100. package/dist/annotations/geometry.js.map +7 -0
  101. package/dist/annotations/index.js +125 -6
  102. package/dist/annotations/index.js.map +7 -1
  103. package/dist/annotations/merge.js +53 -0
  104. package/dist/annotations/merge.js.map +7 -0
  105. package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
  106. package/dist/annotations/model.js.map +7 -0
  107. package/dist/annotations/overlay-geometry.js +41 -0
  108. package/dist/annotations/overlay-geometry.js.map +7 -0
  109. package/dist/annotations/redaction-log.js +33 -0
  110. package/dist/annotations/redaction-log.js.map +7 -0
  111. package/dist/annotations/selection-marks.js +122 -0
  112. package/dist/annotations/selection-marks.js.map +7 -0
  113. package/dist/annotations/state.js +140 -0
  114. package/dist/annotations/state.js.map +7 -0
  115. package/dist/annotations/store.js +49 -0
  116. package/dist/annotations/store.js.map +7 -0
  117. package/dist/annotations/useAnnotationLayer.js +306 -0
  118. package/dist/annotations/useAnnotationLayer.js.map +7 -0
  119. package/dist/annotations/useAnnotationShortcuts.js +31 -0
  120. package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
  121. package/dist/annotations/useTextSelectionMarks.js +100 -0
  122. package/dist/annotations/useTextSelectionMarks.js.map +7 -0
  123. package/dist/artifacts/artifact-kind.js +19 -0
  124. package/dist/artifacts/artifact-kind.js.map +7 -0
  125. package/dist/artifacts/index.cjs +13 -13
  126. package/dist/artifacts/index.js +89 -571
  127. package/dist/artifacts/index.js.map +7 -1
  128. package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
  129. package/dist/artifacts/normalize-markdown.js.map +7 -0
  130. package/dist/artifacts/redline-core.js +12 -3
  131. package/dist/artifacts/redline-core.js.map +7 -1
  132. package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
  133. package/dist/artifacts/redline-diff.js.map +7 -0
  134. package/dist/artifacts/redline-engine.js +14 -0
  135. package/dist/artifacts/redline-engine.js.map +7 -0
  136. package/dist/artifacts/renderArtifactMarkdown.js +9 -0
  137. package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
  138. package/dist/artifacts/useArtifactEditSession.js +183 -0
  139. package/dist/artifacts/useArtifactEditSession.js.map +7 -0
  140. package/dist/artifacts/useArtifactSession.js +173 -0
  141. package/dist/artifacts/useArtifactSession.js.map +7 -0
  142. package/dist/artifacts/useArtifactSource.js +16 -0
  143. package/dist/artifacts/useArtifactSource.js.map +7 -0
  144. package/dist/artifacts/useArtifactText.js +78 -0
  145. package/dist/artifacts/useArtifactText.js.map +7 -0
  146. package/dist/artifacts/useRedline.js +65 -0
  147. package/dist/artifacts/useRedline.js.map +7 -0
  148. package/dist/artifacts/useStreamedArtifact.js +74 -0
  149. package/dist/artifacts/useStreamedArtifact.js.map +7 -0
  150. package/dist/artifacts/versions.js +68 -0
  151. package/dist/artifacts/versions.js.map +7 -0
  152. package/dist/billing.js +200 -0
  153. package/dist/billing.js.map +7 -0
  154. package/dist/boot-timeout.js +19 -0
  155. package/dist/boot-timeout.js.map +7 -0
  156. package/dist/calendar/accounts.js +213 -0
  157. package/dist/calendar/accounts.js.map +7 -0
  158. package/dist/calendar/hooks.js +409 -0
  159. package/dist/calendar/hooks.js.map +7 -0
  160. package/dist/calendar/index.js +31 -0
  161. package/dist/calendar/index.js.map +7 -0
  162. package/dist/calendar/keys.js +5 -0
  163. package/dist/calendar/keys.js.map +7 -0
  164. package/dist/calendar/offline/outbox.js +231 -0
  165. package/dist/calendar/offline/outbox.js.map +7 -0
  166. package/dist/calendar/offline/runtime.js +109 -0
  167. package/dist/calendar/offline/runtime.js.map +7 -0
  168. package/dist/calendar/offline/support.js +41 -0
  169. package/dist/calendar/offline/support.js.map +7 -0
  170. package/dist/calendar/support.js +34 -0
  171. package/dist/calendar/support.js.map +7 -0
  172. package/dist/calls/actions.js +226 -0
  173. package/dist/calls/actions.js.map +7 -0
  174. package/dist/calls/events.js +138 -0
  175. package/dist/calls/events.js.map +7 -0
  176. package/dist/calls/gate.js +19 -0
  177. package/dist/calls/gate.js.map +7 -0
  178. package/dist/calls/hooks.js +115 -0
  179. package/dist/calls/hooks.js.map +7 -0
  180. package/dist/calls/in-call-chat.js +132 -0
  181. package/dist/calls/in-call-chat.js.map +7 -0
  182. package/dist/calls/index.js +24 -0
  183. package/dist/calls/index.js.map +7 -0
  184. package/dist/calls/keys.js +17 -0
  185. package/dist/calls/keys.js.map +7 -0
  186. package/dist/calls/livekit/index.cjs +48 -48
  187. package/dist/calls/livekit/index.js +6 -958
  188. package/dist/calls/livekit/index.js.map +7 -1
  189. package/dist/calls/livekit/room.js +98 -0
  190. package/dist/calls/livekit/room.js.map +7 -0
  191. package/dist/calls/livekit/useCallRecorder.js +219 -0
  192. package/dist/calls/livekit/useCallRecorder.js.map +7 -0
  193. package/dist/calls/livekit/useCallTranscriber.js +309 -0
  194. package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
  195. package/dist/calls/livekit/useHostMuteNotice.js +29 -0
  196. package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
  197. package/dist/calls/livekit/useInCallChat.js +161 -0
  198. package/dist/calls/livekit/useInCallChat.js.map +7 -0
  199. package/dist/calls/livekit/useWebinar.js +239 -0
  200. package/dist/calls/livekit/useWebinar.js.map +7 -0
  201. package/dist/calls/meeting-chat.js +149 -0
  202. package/dist/calls/meeting-chat.js.map +7 -0
  203. package/dist/calls/moderation.js +50 -0
  204. package/dist/calls/moderation.js.map +7 -0
  205. package/dist/calls/open-meeting-chat.js +29 -0
  206. package/dist/calls/open-meeting-chat.js.map +7 -0
  207. package/dist/calls/read-only.js +24 -0
  208. package/dist/calls/read-only.js.map +7 -0
  209. package/dist/calls/recording-media.js +218 -0
  210. package/dist/calls/recording-media.js.map +7 -0
  211. package/dist/calls/recording-playback.js +260 -0
  212. package/dist/calls/recording-playback.js.map +7 -0
  213. package/dist/calls/recording.js +268 -0
  214. package/dist/calls/recording.js.map +7 -0
  215. package/dist/calls/save-to-thread.js +80 -0
  216. package/dist/calls/save-to-thread.js.map +7 -0
  217. package/dist/calls/session.js +134 -0
  218. package/dist/calls/session.js.map +7 -0
  219. package/dist/calls/transcript-format.js +147 -0
  220. package/dist/calls/transcript-format.js.map +7 -0
  221. package/dist/calls/transcription.js +101 -0
  222. package/dist/calls/transcription.js.map +7 -0
  223. package/dist/calls/webinar.js +71 -0
  224. package/dist/calls/webinar.js.map +7 -0
  225. package/dist/charge-watch.js +71 -0
  226. package/dist/charge-watch.js.map +7 -0
  227. package/dist/chat/ChatBubble.js +146 -0
  228. package/dist/chat/ChatBubble.js.map +7 -0
  229. package/dist/chat/ConversationScope.js +30 -0
  230. package/dist/chat/ConversationScope.js.map +7 -0
  231. package/dist/chat/active-config.js +20 -0
  232. package/dist/chat/active-config.js.map +7 -0
  233. package/dist/chat/agent-chat-owner.js +25 -0
  234. package/dist/chat/agent-chat-owner.js.map +7 -0
  235. package/dist/chat/chat-artifacts.js +64 -0
  236. package/dist/chat/chat-artifacts.js.map +7 -0
  237. package/dist/chat/citations.js +32 -0
  238. package/dist/chat/citations.js.map +7 -0
  239. package/dist/chat/config-model.js +10 -0
  240. package/dist/chat/config-model.js.map +7 -0
  241. package/dist/chat/conversation-cache.js +676 -0
  242. package/dist/chat/conversation-cache.js.map +7 -0
  243. package/dist/chat/conversation-events.js +57 -0
  244. package/dist/chat/conversation-events.js.map +7 -0
  245. package/dist/chat/conversation-mentions.js +58 -0
  246. package/dist/chat/conversation-mentions.js.map +7 -0
  247. package/dist/chat/conversation-workspace.js +58 -0
  248. package/dist/chat/conversation-workspace.js.map +7 -0
  249. package/dist/chat/mentions.js +116 -0
  250. package/dist/chat/mentions.js.map +7 -0
  251. package/dist/chat/open-document.js +106 -0
  252. package/dist/chat/open-document.js.map +7 -0
  253. package/dist/chat/orphaned.js +44 -0
  254. package/dist/chat/orphaned.js.map +7 -0
  255. package/dist/chat/pendingFirstTurn.js +30 -0
  256. package/dist/chat/pendingFirstTurn.js.map +7 -0
  257. package/dist/chat/reply-target.js +12 -0
  258. package/dist/chat/reply-target.js.map +7 -0
  259. package/dist/chat/run-finished.js +28 -0
  260. package/dist/chat/run-finished.js.map +7 -0
  261. package/dist/chat/run-state.js +91 -0
  262. package/dist/chat/run-state.js.map +7 -0
  263. package/dist/chat/stream-handlers.js +419 -0
  264. package/dist/chat/stream-handlers.js.map +7 -0
  265. package/dist/chat/thread-binding.js +76 -0
  266. package/dist/chat/thread-binding.js.map +7 -0
  267. package/dist/chat/thread-document.js +53 -0
  268. package/dist/chat/thread-document.js.map +7 -0
  269. package/dist/chat/turn-control.js +79 -0
  270. package/dist/chat/turn-control.js.map +7 -0
  271. package/dist/chat/useAgentRunControl.js +36 -0
  272. package/dist/chat/useAgentRunControl.js.map +7 -0
  273. package/dist/chat/useAnswerAgentQuestion.js +19 -0
  274. package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
  275. package/dist/chat/useAskAgain.js +32 -0
  276. package/dist/chat/useAskAgain.js.map +7 -0
  277. package/dist/chat/useAutoSendDraft.js +17 -0
  278. package/dist/chat/useAutoSendDraft.js.map +7 -0
  279. package/dist/chat/useBranchNavigation.js +97 -0
  280. package/dist/chat/useBranchNavigation.js.map +7 -0
  281. package/dist/chat/useConnectRunStream.js +169 -0
  282. package/dist/chat/useConnectRunStream.js.map +7 -0
  283. package/dist/chat/useConversation.js +431 -0
  284. package/dist/chat/useConversation.js.map +7 -0
  285. package/dist/chat/useConversationActions.js +662 -0
  286. package/dist/chat/useConversationActions.js.map +7 -0
  287. package/dist/chat/useConversationData.js +143 -0
  288. package/dist/chat/useConversationData.js.map +7 -0
  289. package/dist/chat/useConversationDocuments.js +41 -0
  290. package/dist/chat/useConversationDocuments.js.map +7 -0
  291. package/dist/chat/useConversationSettings.js +78 -0
  292. package/dist/chat/useConversationSettings.js.map +7 -0
  293. package/dist/chat/useConversationTurn.js +31 -0
  294. package/dist/chat/useConversationTurn.js.map +7 -0
  295. package/dist/chat/useConversationWorkspace.js +12 -0
  296. package/dist/chat/useConversationWorkspace.js.map +7 -0
  297. package/dist/chat/useDeleteMessage.js +15 -0
  298. package/dist/chat/useDeleteMessage.js.map +7 -0
  299. package/dist/chat/useDocumentAutoAdd.js +73 -0
  300. package/dist/chat/useDocumentAutoAdd.js.map +7 -0
  301. package/dist/chat/useMessageTimer.js +39 -0
  302. package/dist/chat/useMessageTimer.js.map +7 -0
  303. package/dist/chat/useThinkingContent.js +67 -0
  304. package/dist/chat/useThinkingContent.js.map +7 -0
  305. package/dist/chat/useThreadDocument.js +61 -0
  306. package/dist/chat/useThreadDocument.js.map +7 -0
  307. package/dist/chat/workflow-run-titles.js +50 -0
  308. package/dist/chat/workflow-run-titles.js.map +7 -0
  309. package/dist/{chunk-W2FATOTX.cjs → chunk-3JAEX57E.cjs} +4 -4
  310. package/dist/{chunk-W2FATOTX.cjs.map → chunk-3JAEX57E.cjs.map} +1 -1
  311. package/dist/{chunk-HD5H2PPP.cjs → chunk-5TRUFWKT.cjs} +66 -66
  312. package/dist/{chunk-HD5H2PPP.cjs.map → chunk-5TRUFWKT.cjs.map} +1 -1
  313. package/dist/{chunk-Z3W4XFWB.cjs → chunk-C72FSQUE.cjs} +3 -3
  314. package/dist/{chunk-Z3W4XFWB.cjs.map → chunk-C72FSQUE.cjs.map} +1 -1
  315. package/dist/{chunk-LBAG7KL7.cjs → chunk-FQVNZCTD.cjs} +3 -3
  316. package/dist/{chunk-LBAG7KL7.cjs.map → chunk-FQVNZCTD.cjs.map} +1 -1
  317. package/dist/{chunk-RVUGSM65.cjs → chunk-GKGAPU6T.cjs} +44 -44
  318. package/dist/{chunk-RVUGSM65.cjs.map → chunk-GKGAPU6T.cjs.map} +1 -1
  319. package/dist/{chunk-7LIMHY56.cjs → chunk-O32T7XRD.cjs} +3 -3
  320. package/dist/{chunk-7LIMHY56.cjs.map → chunk-O32T7XRD.cjs.map} +1 -1
  321. package/dist/chunk-PWGSIM3F.cjs +291 -0
  322. package/dist/chunk-PWGSIM3F.cjs.map +1 -0
  323. package/dist/chunk-QP3WQSAA.cjs +23 -0
  324. package/dist/chunk-QP3WQSAA.cjs.map +1 -0
  325. package/dist/chunk-T5FZICXN.cjs +50 -0
  326. package/dist/chunk-T5FZICXN.cjs.map +1 -0
  327. package/dist/{chunk-QF2BW6HZ.cjs → chunk-UDDJIUHJ.cjs} +38 -38
  328. package/dist/{chunk-QF2BW6HZ.cjs.map → chunk-UDDJIUHJ.cjs.map} +1 -1
  329. package/dist/{chunk-5HDKL6XB.cjs → chunk-YMB6XUR2.cjs} +57 -57
  330. package/dist/{chunk-5HDKL6XB.cjs.map → chunk-YMB6XUR2.cjs.map} +1 -1
  331. package/dist/config/config-hooks.js +209 -0
  332. package/dist/config/config-hooks.js.map +7 -0
  333. package/dist/connectivity.js +72 -0
  334. package/dist/connectivity.js.map +7 -0
  335. package/dist/connectors/hooks.js +263 -0
  336. package/dist/connectors/hooks.js.map +7 -0
  337. package/dist/connectors/index.js +28 -0
  338. package/dist/connectors/index.js.map +7 -0
  339. package/dist/contacts.js +100 -0
  340. package/dist/contacts.js.map +7 -0
  341. package/dist/conversation-list.js +65 -0
  342. package/dist/conversation-list.js.map +7 -0
  343. package/dist/databases.js +195 -0
  344. package/dist/databases.js.map +7 -0
  345. package/dist/datasets/aggregate.js +281 -0
  346. package/dist/datasets/aggregate.js.map +7 -0
  347. package/dist/datasets/index.js +122 -0
  348. package/dist/datasets/index.js.map +7 -0
  349. package/dist/datasets/members.js +27 -0
  350. package/dist/datasets/members.js.map +7 -0
  351. package/dist/datasets/panel.js +44 -0
  352. package/dist/datasets/panel.js.map +7 -0
  353. package/dist/datasets/registry.js +47 -0
  354. package/dist/datasets/registry.js.map +7 -0
  355. package/dist/datasets/rows-source.js +44 -0
  356. package/dist/datasets/rows-source.js.map +7 -0
  357. package/dist/datasets/sources/activity.js +83 -0
  358. package/dist/datasets/sources/activity.js.map +7 -0
  359. package/dist/datasets/sources/conversations.js +74 -0
  360. package/dist/datasets/sources/conversations.js.map +7 -0
  361. package/dist/datasets/sources/database.js +209 -0
  362. package/dist/datasets/sources/database.js.map +7 -0
  363. package/dist/datasets/sources/documents.js +93 -0
  364. package/dist/datasets/sources/documents.js.map +7 -0
  365. package/dist/datasets/sources/facts.js +56 -0
  366. package/dist/datasets/sources/facts.js.map +7 -0
  367. package/dist/datasets/sources/projects.js +117 -0
  368. package/dist/datasets/sources/projects.js.map +7 -0
  369. package/dist/datasets/sources/tags.js +67 -0
  370. package/dist/datasets/sources/tags.js.map +7 -0
  371. package/dist/datasets/sources/usage.js +268 -0
  372. package/dist/datasets/sources/usage.js.map +7 -0
  373. package/dist/datasets/sources/workflows.js +91 -0
  374. package/dist/datasets/sources/workflows.js.map +7 -0
  375. package/dist/datasets/sources/workspaces.js +67 -0
  376. package/dist/datasets/sources/workspaces.js.map +7 -0
  377. package/dist/datasets/store.js +194 -0
  378. package/dist/datasets/store.js.map +7 -0
  379. package/dist/datasets/types.js +14 -0
  380. package/dist/datasets/types.js.map +7 -0
  381. package/dist/directmessages/ConversationList.js +148 -0
  382. package/dist/directmessages/ConversationList.js.map +7 -0
  383. package/dist/directmessages/DateSeparator.js +8 -0
  384. package/dist/directmessages/DateSeparator.js.map +7 -0
  385. package/dist/directmessages/DmAvatar.js +29 -0
  386. package/dist/directmessages/DmAvatar.js.map +7 -0
  387. package/dist/directmessages/DmComposer.js +201 -0
  388. package/dist/directmessages/DmComposer.js.map +7 -0
  389. package/dist/directmessages/arrivals.js +29 -0
  390. package/dist/directmessages/arrivals.js.map +7 -0
  391. package/dist/directmessages/chat-cache.js +192 -0
  392. package/dist/directmessages/chat-cache.js.map +7 -0
  393. package/dist/directmessages/grouping.js +26 -0
  394. package/dist/directmessages/grouping.js.map +7 -0
  395. package/dist/directmessages/index.js +81 -0
  396. package/dist/directmessages/index.js.map +7 -0
  397. package/dist/directmessages/useChats.js +266 -0
  398. package/dist/directmessages/useChats.js.map +7 -0
  399. package/dist/directmessages/utils.js +23 -0
  400. package/dist/directmessages/utils.js.map +7 -0
  401. package/dist/document-tools/can-annotate.js +7 -0
  402. package/dist/document-tools/can-annotate.js.map +7 -0
  403. package/dist/document-tools/core.cjs +99 -99
  404. package/dist/document-tools/core.d.ts +2 -2
  405. package/dist/document-tools/core.js +218 -12
  406. package/dist/document-tools/core.js.map +7 -1
  407. package/dist/document-tools/document-pdf.js +76 -0
  408. package/dist/document-tools/document-pdf.js.map +7 -0
  409. package/dist/document-tools/environment.js +136 -0
  410. package/dist/document-tools/environment.js.map +7 -0
  411. package/dist/document-tools/file-shares.js +112 -0
  412. package/dist/document-tools/file-shares.js.map +7 -0
  413. package/dist/document-tools/frozen-copy.js +27 -0
  414. package/dist/document-tools/frozen-copy.js.map +7 -0
  415. package/dist/document-tools/index.cjs +101 -101
  416. package/dist/document-tools/index.d.ts +1 -1
  417. package/dist/document-tools/index.js +26 -148
  418. package/dist/document-tools/index.js.map +7 -1
  419. package/dist/document-tools/markup-download.js +51 -0
  420. package/dist/document-tools/markup-download.js.map +7 -0
  421. package/dist/document-tools/markup-store.js +138 -0
  422. package/dist/document-tools/markup-store.js.map +7 -0
  423. package/dist/document-tools/markup-transfer.js +88 -0
  424. package/dist/document-tools/markup-transfer.js.map +7 -0
  425. package/dist/document-tools/production.js +147 -0
  426. package/dist/document-tools/production.js.map +7 -0
  427. package/dist/document-tools/saved-signature.js +90 -0
  428. package/dist/document-tools/saved-signature.js.map +7 -0
  429. package/dist/document-tools/signature-requests.js +310 -0
  430. package/dist/document-tools/signature-requests.js.map +7 -0
  431. package/dist/document-tools/signing.js +127 -0
  432. package/dist/document-tools/signing.js.map +7 -0
  433. package/dist/document-tools/useDocumentBytes.js +38 -0
  434. package/dist/document-tools/useDocumentBytes.js.map +7 -0
  435. package/dist/document-tools/useDocumentMarkup.js +154 -0
  436. package/dist/document-tools/useDocumentMarkup.js.map +7 -0
  437. package/dist/document-tools/useIsOnline.js +13 -0
  438. package/dist/document-tools/useIsOnline.js.map +7 -0
  439. package/dist/document-tools/verification.js +60 -0
  440. package/dist/document-tools/verification.js.map +7 -0
  441. package/dist/documents/DocumentReview.js +220 -0
  442. package/dist/documents/DocumentReview.js.map +7 -0
  443. package/dist/documents/DraftTitleControls.js +41 -0
  444. package/dist/documents/DraftTitleControls.js.map +7 -0
  445. package/dist/documents/InlineMicButton.js +90 -0
  446. package/dist/documents/InlineMicButton.js.map +7 -0
  447. package/dist/documents/MicRecordingOverlay.js +29 -0
  448. package/dist/documents/MicRecordingOverlay.js.map +7 -0
  449. package/dist/documents/MicWaveformIndicator.js +68 -0
  450. package/dist/documents/MicWaveformIndicator.js.map +7 -0
  451. package/dist/documents/PhotoCapture.js +120 -0
  452. package/dist/documents/PhotoCapture.js.map +7 -0
  453. package/dist/documents/VideoCapture.js +129 -0
  454. package/dist/documents/VideoCapture.js.map +7 -0
  455. package/dist/documents/VoiceNoteRecorder.js +166 -0
  456. package/dist/documents/VoiceNoteRecorder.js.map +7 -0
  457. package/dist/documents/audio-segmenter.js +63 -0
  458. package/dist/documents/audio-segmenter.js.map +7 -0
  459. package/dist/documents/capture-frame.js +21 -0
  460. package/dist/documents/capture-frame.js.map +7 -0
  461. package/dist/documents/chunked-recorder.js +190 -0
  462. package/dist/documents/chunked-recorder.js.map +7 -0
  463. package/dist/documents/document-download.js +53 -0
  464. package/dist/documents/document-download.js.map +7 -0
  465. package/dist/documents/document-fields.js +109 -0
  466. package/dist/documents/document-fields.js.map +7 -0
  467. package/dist/documents/documents-cache.js +110 -0
  468. package/dist/documents/documents-cache.js.map +7 -0
  469. package/dist/documents/documents-data.js +128 -0
  470. package/dist/documents/documents-data.js.map +7 -0
  471. package/dist/documents/documents-loader.js +113 -0
  472. package/dist/documents/documents-loader.js.map +7 -0
  473. package/dist/documents/documents-writes.js +448 -0
  474. package/dist/documents/documents-writes.js.map +7 -0
  475. package/dist/documents/format-elapsed.js +10 -0
  476. package/dist/documents/format-elapsed.js.map +7 -0
  477. package/dist/documents/has-video-track.js +26 -0
  478. package/dist/documents/has-video-track.js.map +7 -0
  479. package/dist/documents/index.js +266 -0
  480. package/dist/documents/index.js.map +7 -0
  481. package/dist/documents/media-error.js +18 -0
  482. package/dist/documents/media-error.js.map +7 -0
  483. package/dist/documents/offline-documents.js +160 -0
  484. package/dist/documents/offline-documents.js.map +7 -0
  485. package/dist/documents/pending-sync.js +210 -0
  486. package/dist/documents/pending-sync.js.map +7 -0
  487. package/dist/documents/processing-live.js +122 -0
  488. package/dist/documents/processing-live.js.map +7 -0
  489. package/dist/documents/processing-order.js +59 -0
  490. package/dist/documents/processing-order.js.map +7 -0
  491. package/dist/documents/processing-settle.js +21 -0
  492. package/dist/documents/processing-settle.js.map +7 -0
  493. package/dist/documents/related-documents.js +133 -0
  494. package/dist/documents/related-documents.js.map +7 -0
  495. package/dist/documents/support.js +29 -0
  496. package/dist/documents/support.js.map +7 -0
  497. package/dist/documents/upload-files.js +169 -0
  498. package/dist/documents/upload-files.js.map +7 -0
  499. package/dist/documents/useAudioRecorder.js +315 -0
  500. package/dist/documents/useAudioRecorder.js.map +7 -0
  501. package/dist/documents/useCameraStream.js +35 -0
  502. package/dist/documents/useCameraStream.js.map +7 -0
  503. package/dist/documents/useDocumentThumbnails.js +71 -0
  504. package/dist/documents/useDocumentThumbnails.js.map +7 -0
  505. package/dist/documents/useDownloadDocuments.js +90 -0
  506. package/dist/documents/useDownloadDocuments.js.map +7 -0
  507. package/dist/documents/usePassageQuotes.js +37 -0
  508. package/dist/documents/usePassageQuotes.js.map +7 -0
  509. package/dist/documents/useUploadFiles.js +165 -0
  510. package/dist/documents/useUploadFiles.js.map +7 -0
  511. package/dist/documents/useUploadFromUrls.js +63 -0
  512. package/dist/documents/useUploadFromUrls.js.map +7 -0
  513. package/dist/documents/useVideoRecorder.js +62 -0
  514. package/dist/documents/useVideoRecorder.js.map +7 -0
  515. package/dist/entities/AgentMarkers.js +61 -0
  516. package/dist/entities/AgentMarkers.js.map +7 -0
  517. package/dist/entities/DocumentEntity.js +125 -0
  518. package/dist/entities/DocumentEntity.js.map +7 -0
  519. package/dist/entities/EntityPill.js +250 -0
  520. package/dist/entities/EntityPill.js.map +7 -0
  521. package/dist/entities/ProjectEntity.js +61 -0
  522. package/dist/entities/ProjectEntity.js.map +7 -0
  523. package/dist/entities/ShieldIcon.js +49 -0
  524. package/dist/entities/ShieldIcon.js.map +7 -0
  525. package/dist/entities/TagEntity.js +79 -0
  526. package/dist/entities/TagEntity.js.map +7 -0
  527. package/dist/entities/ThreadVisibilityIcon.js +15 -0
  528. package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
  529. package/dist/entities/UserEntity.js +211 -0
  530. package/dist/entities/UserEntity.js.map +7 -0
  531. package/dist/entities/VerifiedBadge.js +19 -0
  532. package/dist/entities/VerifiedBadge.js.map +7 -0
  533. package/dist/entities/agent-avatar-colors.js +26 -0
  534. package/dist/entities/agent-avatar-colors.js.map +7 -0
  535. package/dist/entities/colors.js +64 -0
  536. package/dist/entities/colors.js.map +7 -0
  537. package/dist/entities/file-type.js +151 -0
  538. package/dist/entities/file-type.js.map +7 -0
  539. package/dist/entities/index.js +100 -0
  540. package/dist/entities/index.js.map +7 -0
  541. package/dist/entities/media-type.js +61 -0
  542. package/dist/entities/media-type.js.map +7 -0
  543. package/dist/entities/registry.js +385 -0
  544. package/dist/entities/registry.js.map +7 -0
  545. package/dist/entities/status.js +43 -0
  546. package/dist/entities/status.js.map +7 -0
  547. package/dist/entities/tag-kinds.js +23 -0
  548. package/dist/entities/tag-kinds.js.map +7 -0
  549. package/dist/entities/tag-types.js +44 -0
  550. package/dist/entities/tag-types.js.map +7 -0
  551. package/dist/entities/vocabulary.js +12 -0
  552. package/dist/entities/vocabulary.js.map +7 -0
  553. package/dist/entity-extraction.js +25 -0
  554. package/dist/entity-extraction.js.map +7 -0
  555. package/dist/facts-search.js +57 -0
  556. package/dist/facts-search.js.map +7 -0
  557. package/dist/facts.js +69 -0
  558. package/dist/facts.js.map +7 -0
  559. package/dist/hooks.js +320 -0
  560. package/dist/hooks.js.map +7 -0
  561. package/dist/host/ArbiHost.js +24 -0
  562. package/dist/host/ArbiHost.js.map +7 -0
  563. package/dist/host/assistant-copy.js +54 -0
  564. package/dist/host/assistant-copy.js.map +7 -0
  565. package/dist/host/config.js +9 -0
  566. package/dist/host/config.js.map +7 -0
  567. package/dist/host/context.js +10 -0
  568. package/dist/host/context.js.map +7 -0
  569. package/dist/host/features.js +144 -0
  570. package/dist/host/features.js.map +7 -0
  571. package/dist/host/index.js +12 -0
  572. package/dist/host/index.js.map +7 -0
  573. package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
  574. package/dist/host/merge.js.map +7 -0
  575. package/dist/house-template.js +40 -0
  576. package/dist/house-template.js.map +7 -0
  577. package/dist/icons/AppleIcon.js +25 -0
  578. package/dist/icons/AppleIcon.js.map +7 -0
  579. package/dist/icons/ArbiBotHeadIcon.js +46 -0
  580. package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
  581. package/dist/icons/ArbiIcon.js +24 -0
  582. package/dist/icons/ArbiIcon.js.map +7 -0
  583. package/dist/icons/AudIcon.js +56 -0
  584. package/dist/icons/AudIcon.js.map +7 -0
  585. package/dist/icons/ClaudeIcon.js +28 -0
  586. package/dist/icons/ClaudeIcon.js.map +7 -0
  587. package/dist/icons/DocIcon.js +56 -0
  588. package/dist/icons/DocIcon.js.map +7 -0
  589. package/dist/icons/EmlIcon.js +57 -0
  590. package/dist/icons/EmlIcon.js.map +7 -0
  591. package/dist/icons/FireworksIcon.js +47 -0
  592. package/dist/icons/FireworksIcon.js.map +7 -0
  593. package/dist/icons/GeminiIcon.js +37 -0
  594. package/dist/icons/GeminiIcon.js.map +7 -0
  595. package/dist/icons/GitHubIcon.js +32 -0
  596. package/dist/icons/GitHubIcon.js.map +7 -0
  597. package/dist/icons/GoogleIcon.js +53 -0
  598. package/dist/icons/GoogleIcon.js.map +7 -0
  599. package/dist/icons/HtmlIcon.js +56 -0
  600. package/dist/icons/HtmlIcon.js.map +7 -0
  601. package/dist/icons/ImgIcon.js +56 -0
  602. package/dist/icons/ImgIcon.js.map +7 -0
  603. package/dist/icons/LinkedInIcon.js +25 -0
  604. package/dist/icons/LinkedInIcon.js.map +7 -0
  605. package/dist/icons/OpenAIIcon.js +28 -0
  606. package/dist/icons/OpenAIIcon.js.map +7 -0
  607. package/dist/icons/PdfIcon.js +56 -0
  608. package/dist/icons/PdfIcon.js.map +7 -0
  609. package/dist/icons/ProviderIcon.js +42 -0
  610. package/dist/icons/ProviderIcon.js.map +7 -0
  611. package/dist/icons/TxtIcon.js +56 -0
  612. package/dist/icons/TxtIcon.js.map +7 -0
  613. package/dist/icons/VidIcon.js +56 -0
  614. package/dist/icons/VidIcon.js.map +7 -0
  615. package/dist/icons/XlsIcon.js +56 -0
  616. package/dist/icons/XlsIcon.js.map +7 -0
  617. package/dist/icons/arbi-mark.js +5 -0
  618. package/dist/icons/arbi-mark.js.map +7 -0
  619. package/dist/icons/colors.js +31 -0
  620. package/dist/icons/colors.js.map +7 -0
  621. package/dist/icons/file-type.js +105 -0
  622. package/dist/icons/file-type.js.map +7 -0
  623. package/dist/icons/index.js +55 -0
  624. package/dist/icons/index.js.map +7 -0
  625. package/dist/imagecrop/ImageCropModal.js +56 -0
  626. package/dist/imagecrop/ImageCropModal.js.map +7 -0
  627. package/dist/imagecrop/ImageCropper.js +100 -0
  628. package/dist/imagecrop/ImageCropper.js.map +7 -0
  629. package/dist/imagecrop/cropImage.js +43 -0
  630. package/dist/imagecrop/cropImage.js.map +7 -0
  631. package/dist/imagecrop/index.js +13 -0
  632. package/dist/imagecrop/index.js.map +7 -0
  633. package/dist/index.cjs +1689 -1619
  634. package/dist/index.cjs.map +1 -1
  635. package/dist/{index.d-BMhTH98a.d.ts → index.d-CYXcTKYt.d.ts} +1 -0
  636. package/dist/index.d.ts +38 -8
  637. package/dist/index.js +702 -17060
  638. package/dist/index.js.map +7 -1
  639. package/dist/lazy-chunk.d-B6YDLMKI.d.ts +31 -0
  640. package/dist/lazy-chunk.js +46 -0
  641. package/dist/lazy-chunk.js.map +7 -0
  642. package/dist/lib/collision-padding.js +13 -0
  643. package/dist/lib/collision-padding.js.map +7 -0
  644. package/dist/lib/format-friendly-date.js +55 -0
  645. package/dist/lib/format-friendly-date.js.map +7 -0
  646. package/dist/lib/format-relative-time.js +52 -0
  647. package/dist/lib/format-relative-time.js.map +7 -0
  648. package/dist/lib/markdown-to-text.js +35 -0
  649. package/dist/lib/markdown-to-text.js.map +7 -0
  650. package/dist/lib/toast-interaction.js +9 -0
  651. package/dist/lib/toast-interaction.js.map +7 -0
  652. package/dist/lib/utils.js +9 -0
  653. package/dist/lib/utils.js.map +7 -0
  654. package/dist/mail/client.js +103 -0
  655. package/dist/mail/client.js.map +7 -0
  656. package/dist/mail/document-attachment.js +38 -0
  657. package/dist/mail/document-attachment.js.map +7 -0
  658. package/dist/mail/filing.js +132 -0
  659. package/dist/mail/filing.js.map +7 -0
  660. package/dist/mail/hooks.js +393 -0
  661. package/dist/mail/hooks.js.map +7 -0
  662. package/dist/mail/index.js +120 -0
  663. package/dist/mail/index.js.map +7 -0
  664. package/dist/mail/offline/changes.js +258 -0
  665. package/dist/mail/offline/changes.js.map +7 -0
  666. package/dist/mail/offline/confirm-sign-out.js +37 -0
  667. package/dist/mail/offline/confirm-sign-out.js.map +7 -0
  668. package/dist/mail/offline/crypto.js +26 -0
  669. package/dist/mail/offline/crypto.js.map +7 -0
  670. package/dist/mail/offline/drafts.js +69 -0
  671. package/dist/mail/offline/drafts.js.map +7 -0
  672. package/dist/mail/offline/hooks.js +104 -0
  673. package/dist/mail/offline/hooks.js.map +7 -0
  674. package/dist/mail/offline/index.js +48 -0
  675. package/dist/mail/offline/index.js.map +7 -0
  676. package/dist/mail/offline/live.js +233 -0
  677. package/dist/mail/offline/live.js.map +7 -0
  678. package/dist/mail/offline/mailbox.js +191 -0
  679. package/dist/mail/offline/mailbox.js.map +7 -0
  680. package/dist/mail/offline/outbox.js +167 -0
  681. package/dist/mail/offline/outbox.js.map +7 -0
  682. package/dist/mail/offline/reads.js +159 -0
  683. package/dist/mail/offline/reads.js.map +7 -0
  684. package/dist/mail/offline/runtime.js +100 -0
  685. package/dist/mail/offline/runtime.js.map +7 -0
  686. package/dist/mail/offline/settings.js +84 -0
  687. package/dist/mail/offline/settings.js.map +7 -0
  688. package/dist/mail/offline/store.js +29 -0
  689. package/dist/mail/offline/store.js.map +7 -0
  690. package/dist/mail/offline/sync.js +251 -0
  691. package/dist/mail/offline/sync.js.map +7 -0
  692. package/dist/mail/offline/wipe.js +19 -0
  693. package/dist/mail/offline/wipe.js.map +7 -0
  694. package/dist/mail/thread-keys.js +53 -0
  695. package/dist/mail/thread-keys.js.map +7 -0
  696. package/dist/mail/threads.js +71 -0
  697. package/dist/mail/threads.js.map +7 -0
  698. package/dist/mail/useMailClient.js +42 -0
  699. package/dist/mail/useMailClient.js.map +7 -0
  700. package/dist/model-connections.js +58 -0
  701. package/dist/model-connections.js.map +7 -0
  702. package/dist/notifications/ActivityFeed.js +70 -0
  703. package/dist/notifications/ActivityFeed.js.map +7 -0
  704. package/dist/notifications/NotificationBell.js +200 -0
  705. package/dist/notifications/NotificationBell.js.map +7 -0
  706. package/dist/notifications/Toaster.js +24 -0
  707. package/dist/notifications/Toaster.js.map +7 -0
  708. package/dist/notifications/activity-types.js +65 -0
  709. package/dist/notifications/activity-types.js.map +7 -0
  710. package/dist/notifications/bell.js +24 -0
  711. package/dist/notifications/bell.js.map +7 -0
  712. package/dist/notifications/calendar-notifications.js +79 -0
  713. package/dist/notifications/calendar-notifications.js.map +7 -0
  714. package/dist/notifications/index.js +108 -0
  715. package/dist/notifications/index.js.map +7 -0
  716. package/dist/notifications/live.js +28 -0
  717. package/dist/notifications/live.js.map +7 -0
  718. package/dist/notifications/notification-types.js +127 -0
  719. package/dist/notifications/notification-types.js.map +7 -0
  720. package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
  721. package/dist/notifications/notify-store.js.map +7 -0
  722. package/dist/notifications/server-notifications.js +452 -0
  723. package/dist/notifications/server-notifications.js.map +7 -0
  724. package/dist/notifications/useNotifications.js +34 -0
  725. package/dist/notifications/useNotifications.js.map +7 -0
  726. package/dist/offline-store/network.js +11 -0
  727. package/dist/offline-store/network.js.map +7 -0
  728. package/dist/offline-store/store.js +136 -0
  729. package/dist/offline-store/store.js.map +7 -0
  730. package/dist/offline-store/wipe.js +8 -0
  731. package/dist/offline-store/wipe.js.map +7 -0
  732. package/dist/offline.js +58 -0
  733. package/dist/offline.js.map +7 -0
  734. package/dist/people.js +122 -0
  735. package/dist/people.js.map +7 -0
  736. package/dist/projects.js +30 -0
  737. package/dist/projects.js.map +7 -0
  738. package/dist/query-client.js +63 -0
  739. package/dist/query-client.js.map +7 -0
  740. package/dist/{query-keys.d-ChgpJLPF.d.ts → query-keys.d-B1Am9tIF.d.ts} +1 -1
  741. package/dist/{chunk-6H3O63TQ.js → query-keys.js} +19 -32
  742. package/dist/query-keys.js.map +7 -0
  743. package/dist/query-persist.js +66 -0
  744. package/dist/query-persist.js.map +7 -0
  745. package/dist/queued-writes.js +59 -0
  746. package/dist/queued-writes.js.map +7 -0
  747. package/dist/remote-control.js +67 -0
  748. package/dist/remote-control.js.map +7 -0
  749. package/dist/search/index.js +23 -0
  750. package/dist/search/index.js.map +7 -0
  751. package/dist/search/session.js +58 -0
  752. package/dist/search/session.js.map +7 -0
  753. package/dist/search/useSemanticSearch.js +82 -0
  754. package/dist/search/useSemanticSearch.js.map +7 -0
  755. package/dist/session/chat.js +512 -0
  756. package/dist/session/chat.js.map +7 -0
  757. package/dist/session/documents.js +196 -0
  758. package/dist/session/documents.js.map +7 -0
  759. package/dist/session/drafts.js +103 -0
  760. package/dist/session/drafts.js.map +7 -0
  761. package/dist/session/index.js +123 -0
  762. package/dist/session/index.js.map +7 -0
  763. package/dist/session/layout.js +339 -0
  764. package/dist/session/layout.js.map +7 -0
  765. package/dist/session/persist.js +106 -0
  766. package/dist/session/persist.js.map +7 -0
  767. package/dist/session/session-hooks.js +53 -0
  768. package/dist/session/session-hooks.js.map +7 -0
  769. package/dist/session/signed-in.js +36 -0
  770. package/dist/session/signed-in.js.map +7 -0
  771. package/dist/session/store.js +166 -0
  772. package/dist/session/store.js.map +7 -0
  773. package/dist/session/thread-tabs.js +121 -0
  774. package/dist/session/thread-tabs.js.map +7 -0
  775. package/dist/session/ui-state-storage.js +76 -0
  776. package/dist/session/ui-state-storage.js.map +7 -0
  777. package/dist/session/workspace.js +77 -0
  778. package/dist/session/workspace.js.map +7 -0
  779. package/dist/shell/index.cjs +37 -37
  780. package/dist/shell/index.js +43 -10
  781. package/dist/shell/index.js.map +7 -1
  782. package/dist/skill-pack.js +111 -0
  783. package/dist/skill-pack.js.map +7 -0
  784. package/dist/storage.js +186 -0
  785. package/dist/storage.js.map +7 -0
  786. package/dist/support/index.js +35 -0
  787. package/dist/support/index.js.map +7 -0
  788. package/dist/tags.js +204 -0
  789. package/dist/tags.js.map +7 -0
  790. package/dist/ui/DebouncedInput.js +109 -0
  791. package/dist/ui/DebouncedInput.js.map +7 -0
  792. package/dist/ui/DictateContext.js +8 -0
  793. package/dist/ui/DictateContext.js.map +7 -0
  794. package/dist/ui/IconToggle.js +79 -0
  795. package/dist/ui/IconToggle.js.map +7 -0
  796. package/dist/ui/VerifiedToggle.js +38 -0
  797. package/dist/ui/VerifiedToggle.js.map +7 -0
  798. package/dist/ui/VisibilityToggle.js +103 -0
  799. package/dist/ui/VisibilityToggle.js.map +7 -0
  800. package/dist/ui/avatar.js +40 -0
  801. package/dist/ui/avatar.js.map +7 -0
  802. package/dist/ui/badge.js +28 -0
  803. package/dist/ui/badge.js.map +7 -0
  804. package/dist/ui/button.js +48 -0
  805. package/dist/ui/button.js.map +7 -0
  806. package/dist/ui/card.js +90 -0
  807. package/dist/ui/card.js.map +7 -0
  808. package/dist/ui/checkbox.js +22 -0
  809. package/dist/ui/checkbox.js.map +7 -0
  810. package/dist/ui/collapsible.js +10 -0
  811. package/dist/ui/collapsible.js.map +7 -0
  812. package/dist/ui/command.js +103 -0
  813. package/dist/ui/command.js.map +7 -0
  814. package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
  815. package/dist/ui/dialog.js.map +7 -0
  816. package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
  817. package/dist/ui/dropdown-menu.js.map +7 -0
  818. package/dist/ui/hover-card.js +36 -0
  819. package/dist/ui/hover-card.js.map +7 -0
  820. package/dist/ui/index.cjs +167 -154
  821. package/dist/ui/index.d.ts +2 -1
  822. package/dist/ui/index.js +290 -9
  823. package/dist/ui/index.js.map +7 -1
  824. package/dist/ui/input.js +65 -0
  825. package/dist/ui/input.js.map +7 -0
  826. package/dist/ui/label.js +16 -0
  827. package/dist/ui/label.js.map +7 -0
  828. package/dist/ui/mark-menu.js +300 -0
  829. package/dist/ui/mark-menu.js.map +7 -0
  830. package/dist/ui/popover.js +40 -0
  831. package/dist/ui/popover.js.map +7 -0
  832. package/dist/ui/portal-container.js +17 -0
  833. package/dist/ui/portal-container.js.map +7 -0
  834. package/dist/ui/progress.js +24 -0
  835. package/dist/ui/progress.js.map +7 -0
  836. package/dist/ui/radio-group.js +29 -0
  837. package/dist/ui/radio-group.js.map +7 -0
  838. package/dist/ui/scroll-area.js +39 -0
  839. package/dist/ui/scroll-area.js.map +7 -0
  840. package/dist/ui/select.js +130 -0
  841. package/dist/ui/select.js.map +7 -0
  842. package/dist/ui/separator.js +23 -0
  843. package/dist/ui/separator.js.map +7 -0
  844. package/dist/ui/slider.js +23 -0
  845. package/dist/ui/slider.js.map +7 -0
  846. package/dist/ui/switch.js +28 -0
  847. package/dist/ui/switch.js.map +7 -0
  848. package/dist/ui/table.js +75 -0
  849. package/dist/ui/table.js.map +7 -0
  850. package/dist/ui/tabs.js +48 -0
  851. package/dist/ui/tabs.js.map +7 -0
  852. package/dist/ui/textarea.js +63 -0
  853. package/dist/ui/textarea.js.map +7 -0
  854. package/dist/ui/toggle-group.js +43 -0
  855. package/dist/ui/toggle-group.js.map +7 -0
  856. package/dist/ui/toggle.js +40 -0
  857. package/dist/ui/toggle.js.map +7 -0
  858. package/dist/ui/tooltip.js +215 -0
  859. package/dist/ui/tooltip.js.map +7 -0
  860. package/dist/usage-metered.js +8 -0
  861. package/dist/usage-metered.js.map +7 -0
  862. package/dist/useArbi.js +16 -0
  863. package/dist/useArbi.js.map +7 -0
  864. package/dist/useInstallSkillPack.js +81 -0
  865. package/dist/useInstallSkillPack.js.map +7 -0
  866. package/dist/usermenu/UserMenu.js +188 -0
  867. package/dist/usermenu/UserMenu.js.map +7 -0
  868. package/dist/usermenu/index.js +5 -0
  869. package/dist/usermenu/index.js.map +7 -0
  870. package/dist/users/index.js +15 -0
  871. package/dist/users/index.js.map +7 -0
  872. package/dist/users/user-display.js +60 -0
  873. package/dist/users/user-display.js.map +7 -0
  874. package/dist/viewers/AudioViewer.js +23 -0
  875. package/dist/viewers/AudioViewer.js.map +7 -0
  876. package/dist/viewers/DocxViewer.js +81 -0
  877. package/dist/viewers/DocxViewer.js.map +7 -0
  878. package/dist/viewers/ImageViewer.js +31 -0
  879. package/dist/viewers/ImageViewer.js.map +7 -0
  880. package/dist/viewers/PdfViewer.cjs +17 -0
  881. package/dist/viewers/PdfViewer.cjs.map +1 -0
  882. package/dist/viewers/PdfViewer.d.ts +9 -0
  883. package/dist/viewers/PdfViewer.js +20 -0
  884. package/dist/viewers/PdfViewer.js.map +7 -0
  885. package/dist/viewers/PdfViewerImpl.js +384 -0
  886. package/dist/viewers/PdfViewerImpl.js.map +7 -0
  887. package/dist/viewers/VideoViewer.js +31 -0
  888. package/dist/viewers/VideoViewer.js.map +7 -0
  889. package/dist/viewers/XlsxViewer.js +102 -0
  890. package/dist/viewers/XlsxViewer.js.map +7 -0
  891. package/dist/viewers/index.cjs +79 -653
  892. package/dist/viewers/index.cjs.map +1 -1
  893. package/dist/viewers/index.d.ts +3 -1
  894. package/dist/viewers/index.js +60 -903
  895. package/dist/viewers/index.js.map +7 -1
  896. package/dist/viewers/page-scroll.js +59 -0
  897. package/dist/viewers/page-scroll.js.map +7 -0
  898. package/dist/viewers/pdf-viewer-constants.js +9 -0
  899. package/dist/viewers/pdf-viewer-constants.js.map +7 -0
  900. package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
  901. package/dist/viewers/pdfjs-polyfills.js.map +7 -0
  902. package/dist/viewers/selection-runs.js +38 -0
  903. package/dist/viewers/selection-runs.js.map +7 -0
  904. package/dist/viewers/usePageIntersectionObserver.js +68 -0
  905. package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
  906. package/dist/viewers/useProcessedChunks.js +58 -0
  907. package/dist/viewers/useProcessedChunks.js.map +7 -0
  908. package/dist/viewers/viewer-zoom.js +163 -0
  909. package/dist/viewers/viewer-zoom.js.map +7 -0
  910. package/dist/websocket/ArbiWebSocketProvider.js +207 -0
  911. package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
  912. package/dist/websocket/context.js +14 -0
  913. package/dist/websocket/context.js.map +7 -0
  914. package/dist/websocket/hooks.js +30 -0
  915. package/dist/websocket/hooks.js.map +7 -0
  916. package/dist/websocket/index.js +22 -0
  917. package/dist/websocket/index.js.map +7 -0
  918. package/dist/websocket/live-updates.js +38 -0
  919. package/dist/websocket/live-updates.js.map +7 -0
  920. package/dist/websocket/reconnect.js +13 -0
  921. package/dist/websocket/reconnect.js.map +7 -0
  922. package/dist/websocket/store.js +58 -0
  923. package/dist/websocket/store.js.map +7 -0
  924. package/dist/workforce.js +607 -0
  925. package/dist/workforce.js.map +7 -0
  926. package/dist/workspaces/access-request.js +35 -0
  927. package/dist/workspaces/access-request.js.map +7 -0
  928. package/dist/workspaces/archive.js +59 -0
  929. package/dist/workspaces/archive.js.map +7 -0
  930. package/dist/workspaces/current.js +20 -0
  931. package/dist/workspaces/current.js.map +7 -0
  932. package/dist/workspaces/delete-workspaces.js +15 -0
  933. package/dist/workspaces/delete-workspaces.js.map +7 -0
  934. package/dist/workspaces/export-archive.js +40 -0
  935. package/dist/workspaces/export-archive.js.map +7 -0
  936. package/dist/workspaces/index.js +99 -0
  937. package/dist/workspaces/index.js.map +7 -0
  938. package/dist/workspaces/settings.js +45 -0
  939. package/dist/workspaces/settings.js.map +7 -0
  940. package/dist/workspaces/shell-workspaces.js +49 -0
  941. package/dist/workspaces/shell-workspaces.js.map +7 -0
  942. package/dist/workspaces/switch.js +234 -0
  943. package/dist/workspaces/switch.js.map +7 -0
  944. package/dist/workspaces/transfer.js +170 -0
  945. package/dist/workspaces/transfer.js.map +7 -0
  946. package/dist/workspaces/useShellWorkspaces.js +86 -0
  947. package/dist/workspaces/useShellWorkspaces.js.map +7 -0
  948. package/dist/workspaces/workspace-users.js +65 -0
  949. package/dist/workspaces/workspace-users.js.map +7 -0
  950. package/package.json +12 -4
  951. package/dist/PdfViewer.d-bQH9yxFg.d.ts +0 -55
  952. package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
  953. package/dist/annotations/freeze/index.d.cts +0 -205
  954. package/dist/annotations/index.d.cts +0 -360
  955. package/dist/artifacts/index.d.cts +0 -476
  956. package/dist/artifacts/redline-core.d.cts +0 -39
  957. package/dist/bundle-YNOX7VIL.js +0 -5
  958. package/dist/bundle-YNOX7VIL.js.map +0 -1
  959. package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
  960. package/dist/calls/livekit/index.d.cts +0 -280
  961. package/dist/chunk-47CCGUWR.js.map +0 -1
  962. package/dist/chunk-6H3O63TQ.js.map +0 -1
  963. package/dist/chunk-74N436VK.js.map +0 -1
  964. package/dist/chunk-APZZQZ6P.js +0 -147
  965. package/dist/chunk-APZZQZ6P.js.map +0 -1
  966. package/dist/chunk-BF5KW5ZI.js.map +0 -1
  967. package/dist/chunk-CPQ3CU4B.js +0 -246
  968. package/dist/chunk-CPQ3CU4B.js.map +0 -1
  969. package/dist/chunk-DPYBZDJB.js.map +0 -1
  970. package/dist/chunk-DQALOQPI.js +0 -2766
  971. package/dist/chunk-DQALOQPI.js.map +0 -1
  972. package/dist/chunk-FZJMA32S.js +0 -1011
  973. package/dist/chunk-FZJMA32S.js.map +0 -1
  974. package/dist/chunk-H5M7FXLB.js +0 -2057
  975. package/dist/chunk-H5M7FXLB.js.map +0 -1
  976. package/dist/chunk-HDCRPPBW.js +0 -75
  977. package/dist/chunk-HDCRPPBW.js.map +0 -1
  978. package/dist/chunk-NIKPG4PW.js +0 -1128
  979. package/dist/chunk-NIKPG4PW.js.map +0 -1
  980. package/dist/chunk-NNAJLY6B.js +0 -4974
  981. package/dist/chunk-NNAJLY6B.js.map +0 -1
  982. package/dist/chunk-OYPKKHXY.js +0 -559
  983. package/dist/chunk-OYPKKHXY.js.map +0 -1
  984. package/dist/chunk-P6WLV5UY.js +0 -644
  985. package/dist/chunk-P6WLV5UY.js.map +0 -1
  986. package/dist/chunk-PTOP7OHG.js.map +0 -1
  987. package/dist/chunk-SN5YV6FF.js +0 -11
  988. package/dist/chunk-SN5YV6FF.js.map +0 -1
  989. package/dist/chunk-T3USOSVN.js.map +0 -1
  990. package/dist/chunk-T4CLW3DN.js +0 -2560
  991. package/dist/chunk-T4CLW3DN.js.map +0 -1
  992. package/dist/chunk-UW2SGTI5.js.map +0 -1
  993. package/dist/chunk-VSCU7K4V.js.map +0 -1
  994. package/dist/chunk-WL2Y2T47.js.map +0 -1
  995. package/dist/chunk-WUTL62MC.js.map +0 -1
  996. package/dist/chunk-Y3MTRA7D.js +0 -97
  997. package/dist/chunk-Y3MTRA7D.js.map +0 -1
  998. package/dist/chunk-YNNAJJ5Z.js.map +0 -1
  999. package/dist/document-tools/core.d.cts +0 -883
  1000. package/dist/document-tools/index.d.cts +0 -90
  1001. package/dist/index.d-BMhTH98a.d.cts +0 -2035
  1002. package/dist/index.d-oR5FKZpJ.d.cts +0 -579
  1003. package/dist/index.d.cts +0 -15893
  1004. package/dist/model.d-CNtRWKVK.d.cts +0 -110
  1005. package/dist/query-keys.d-ChgpJLPF.d.cts +0 -337
  1006. package/dist/shell/index.d.cts +0 -6
  1007. package/dist/store.d-GADDvC7w.d.cts +0 -35
  1008. package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
  1009. package/dist/ui/index.d.cts +0 -25
  1010. package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
  1011. package/dist/viewers/index.d.cts +0 -260
@@ -0,0 +1,448 @@
1
+ import { useCallback } from "react";
2
+ import { onlineManager, useMutation, useQueryClient } from "@tanstack/react-query";
3
+ import {
4
+ documents as documentOps,
5
+ doctags as doctagOps
6
+ } from "@arbidocs/sdk/browser";
7
+ import { useArbi } from "../useArbi.js";
8
+ import { arbiMutationKeys, arbiQueryKeys } from "../hooks.js";
9
+ import {
10
+ forgetDocuments,
11
+ getCachedDocuments,
12
+ patchCachedDocument,
13
+ patchDocuments,
14
+ setCachedDocument
15
+ } from "./documents-cache.js";
16
+ import { adjustTagCounts, refreshDocuments } from "./documents-data.js";
17
+ import { useArbiWsStore } from "../websocket/store.js";
18
+ import {
19
+ QUEUED_WRITE_RETRY,
20
+ inWorkspace,
21
+ isWorkspaceUnavailable,
22
+ primeOnArbi,
23
+ primeOnClient,
24
+ useCapturingWorkspace
25
+ } from "../queued-writes.js";
26
+ function applyOptimisticDocumentEdit(qc, updates) {
27
+ const byId = new Map(updates.map((update) => [update.external_id, update]));
28
+ const previous = [];
29
+ patchDocuments(qc, (old) => {
30
+ let changed = false;
31
+ const next = old.map((doc) => {
32
+ const update = byId.get(doc.external_id);
33
+ if (!update) return doc;
34
+ changed = true;
35
+ previous.push(doc);
36
+ return { ...doc, ...update };
37
+ });
38
+ return changed ? next : old;
39
+ });
40
+ const previousOwn = updates.map((update) => {
41
+ const own = qc.getQueryData(
42
+ arbiQueryKeys.document(update.external_id)
43
+ );
44
+ if (own) setCachedDocument(qc, { ...own, ...update });
45
+ return [update.external_id, own];
46
+ });
47
+ return { optimistic: true, previous, previousOwn };
48
+ }
49
+ function rollbackOptimisticDocumentEdit(qc, context) {
50
+ const edit = context;
51
+ if (!edit?.optimistic) return;
52
+ if (edit.previous.length) {
53
+ const restore = new Map(edit.previous.map((doc) => [doc.external_id, doc]));
54
+ patchDocuments(
55
+ qc,
56
+ (old) => old.some((doc) => restore.has(doc.external_id)) ? old.map((doc) => restore.get(doc.external_id) ?? doc) : old
57
+ );
58
+ }
59
+ for (const [id, own] of edit.previousOwn) qc.setQueryData(arbiQueryKeys.document(id), own);
60
+ }
61
+ function settleUpdatedDocuments(qc, updated) {
62
+ if (!updated.length) return;
63
+ const byId = new Map(updated.map((doc) => [doc.external_id, doc]));
64
+ patchDocuments(
65
+ qc,
66
+ (old) => old.some((doc) => byId.has(doc.external_id)) ? old.map((doc) => byId.get(doc.external_id) ?? doc) : old
67
+ );
68
+ for (const doc of updated) setCachedDocument(qc, doc);
69
+ }
70
+ function patchEachDocument(qc, docIds, reducer) {
71
+ const ids = new Set(docIds);
72
+ patchDocuments(
73
+ qc,
74
+ (old) => old.some((doc) => ids.has(doc.external_id)) ? old.map((doc) => ids.has(doc.external_id) ? reducer(doc) : doc) : old
75
+ );
76
+ for (const id of ids) patchCachedDocument(qc, id, reducer);
77
+ }
78
+ function workspaceOf(qc, docId) {
79
+ for (const [, docs] of qc.getQueriesData({
80
+ queryKey: arbiQueryKeys.allDocuments()
81
+ })) {
82
+ const doc = Array.isArray(docs) ? docs.find((d) => d.external_id === docId) : void 0;
83
+ if (doc) return doc.workspace_ext_id;
84
+ }
85
+ return qc.getQueryData(arbiQueryKeys.document(docId))?.workspace_ext_id;
86
+ }
87
+ function settleAssignedDocTags(qc, created) {
88
+ const byDoc = /* @__PURE__ */ new Map();
89
+ for (const doctag of created)
90
+ byDoc.set(doctag.doc_ext_id, [...byDoc.get(doctag.doc_ext_id) ?? [], doctag]);
91
+ const workspaces = /* @__PURE__ */ new Map();
92
+ for (const doctag of created) {
93
+ const workspaceId = workspaceOf(qc, doctag.doc_ext_id);
94
+ if (!workspaceId) continue;
95
+ const delta = workspaces.get(workspaceId) ?? /* @__PURE__ */ new Map();
96
+ delta.set(doctag.tag_ext_id, (delta.get(doctag.tag_ext_id) ?? 0) + 1);
97
+ workspaces.set(workspaceId, delta);
98
+ }
99
+ patchEachDocument(qc, byDoc.keys(), (doc) => ({
100
+ ...doc,
101
+ doctags: [...doc.doctags ?? [], ...byDoc.get(doc.external_id) ?? []]
102
+ }));
103
+ for (const [workspaceId, delta] of workspaces) adjustTagCounts(qc, workspaceId, delta);
104
+ }
105
+ function settleRemovedDocTags(qc, { tagId, docIds }) {
106
+ const ids = new Set(docIds);
107
+ const removedByWorkspace = /* @__PURE__ */ new Map();
108
+ for (const [, docs] of qc.getQueriesData({
109
+ queryKey: arbiQueryKeys.allDocuments()
110
+ })) {
111
+ for (const doc of Array.isArray(docs) ? docs : []) {
112
+ if (!ids.has(doc.external_id)) continue;
113
+ if (!doc.doctags?.some((dt) => dt.tag_ext_id === tagId)) continue;
114
+ removedByWorkspace.set(
115
+ doc.workspace_ext_id,
116
+ (removedByWorkspace.get(doc.workspace_ext_id) ?? 0) + 1
117
+ );
118
+ }
119
+ }
120
+ patchEachDocument(qc, ids, (doc) => ({
121
+ ...doc,
122
+ doctags: (doc.doctags ?? []).filter((dt) => dt.tag_ext_id !== tagId)
123
+ }));
124
+ for (const [workspaceId, removed] of removedByWorkspace)
125
+ adjustTagCounts(qc, workspaceId, /* @__PURE__ */ new Map([[tagId, -removed]]));
126
+ }
127
+ function settleUpdatedDocTag(qc, updated) {
128
+ patchEachDocument(qc, [updated.doc_ext_id], (doc) => ({
129
+ ...doc,
130
+ doctags: (doc.doctags ?? []).map((dt) => dt.tag_ext_id === updated.tag_ext_id ? updated : dt)
131
+ }));
132
+ }
133
+ const sendUpdateDocuments = (client, input) => inWorkspace(
134
+ primeOnClient(client),
135
+ input.workspaceId,
136
+ () => documentOps.updateDocuments(client, input.documents)
137
+ );
138
+ const sendAssignDocTags = (client, input) => inWorkspace(
139
+ primeOnClient(client),
140
+ input.workspaceId,
141
+ () => doctagOps.assignDocTags(client, input.tagId, input.docIds, input.note, input.citations)
142
+ );
143
+ const sendRemoveDocTags = (client, input) => inWorkspace(
144
+ primeOnClient(client),
145
+ input.workspaceId,
146
+ () => doctagOps.removeDocTags(client, input.tagId, input.docIds)
147
+ );
148
+ const sendUpdateDocTag = (client, input) => inWorkspace(
149
+ primeOnClient(client),
150
+ input.workspaceId,
151
+ () => doctagOps.updateDocTag(client, input.tagId, input.docId, {
152
+ note: input.note,
153
+ citations: input.citations
154
+ })
155
+ );
156
+ const replayableDocumentMutations = [
157
+ {
158
+ mutationKey: arbiMutationKeys.updateDocuments(),
159
+ run: sendUpdateDocuments,
160
+ settle: (qc, updated) => settleUpdatedDocuments(qc, updated)
161
+ },
162
+ {
163
+ mutationKey: arbiMutationKeys.assignDocTags(),
164
+ run: sendAssignDocTags,
165
+ settle: (qc, created) => settleAssignedDocTags(qc, created)
166
+ },
167
+ {
168
+ mutationKey: arbiMutationKeys.removeDocTags(),
169
+ run: sendRemoveDocTags,
170
+ settle: (qc, _data, input) => settleRemovedDocTags(qc, input)
171
+ },
172
+ {
173
+ mutationKey: arbiMutationKeys.updateDocTag(),
174
+ run: sendUpdateDocTag,
175
+ settle: (qc, updated) => settleUpdatedDocTag(qc, updated)
176
+ }
177
+ ];
178
+ function useDocumentWriteWorkspace(docIdOf) {
179
+ const arbi = useArbi();
180
+ const qc = useQueryClient();
181
+ return (variables) => {
182
+ if (variables.workspaceId) return variables;
183
+ const docId = docIdOf(variables);
184
+ const workspaceId = (docId ? workspaceOf(qc, docId) : void 0) ?? (arbi.hasWorkspace ? arbi.getWorkspaceId() : void 0);
185
+ return workspaceId ? { ...variables, workspaceId } : variables;
186
+ };
187
+ }
188
+ function resolvingOffline(mutation) {
189
+ const mutateAsync = ((variables, options) => {
190
+ if (!onlineManager.isOnline()) {
191
+ ;
192
+ mutation.mutate(variables, options);
193
+ return Promise.resolve(void 0);
194
+ }
195
+ return mutation.mutateAsync(variables, options);
196
+ });
197
+ return { ...mutation, mutateAsync };
198
+ }
199
+ function useMarkDocumentShared() {
200
+ const qc = useQueryClient();
201
+ return useCallback(
202
+ (documentExtId) => {
203
+ patchDocuments(
204
+ qc,
205
+ (old) => old.map((doc) => doc.external_id === documentExtId ? { ...doc, shared: true } : doc)
206
+ );
207
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.document(documentExtId) });
208
+ },
209
+ [qc]
210
+ );
211
+ }
212
+ function useUpdateDocuments() {
213
+ const arbi = useArbi();
214
+ const qc = useQueryClient();
215
+ const capture = useDocumentWriteWorkspace(
216
+ (input) => input.documents[0]?.external_id
217
+ );
218
+ return resolvingOffline(
219
+ useCapturingWorkspace(
220
+ useMutation({
221
+ mutationKey: arbiMutationKeys.updateDocuments(),
222
+ mutationFn: (input) => inWorkspace(
223
+ primeOnArbi(arbi),
224
+ input.workspaceId,
225
+ () => arbi.documents.update(input.documents)
226
+ ),
227
+ onMutate: ({ documents }) => onlineManager.isOnline() || !documents.length ? void 0 : applyOptimisticDocumentEdit(qc, documents),
228
+ // Not sent because its workspace can't be opened: the edit stays, listed as not sent.
229
+ onError: (error, _input, context) => {
230
+ if (!isWorkspaceUnavailable(error)) rollbackOptimisticDocumentEdit(qc, context);
231
+ },
232
+ onSuccess: (updated) => settleUpdatedDocuments(qc, updated),
233
+ ...QUEUED_WRITE_RETRY
234
+ }),
235
+ capture
236
+ )
237
+ );
238
+ }
239
+ function folderSegments(folder) {
240
+ return (folder ?? "").split("/").map((segment) => segment.trim()).filter(Boolean);
241
+ }
242
+ function useRenameFolder() {
243
+ const qc = useQueryClient();
244
+ const { mutateAsync } = useUpdateDocuments();
245
+ return useCallback(
246
+ async (documents, from, to) => {
247
+ const moved = (folder) => {
248
+ const segments = folderSegments(folder);
249
+ if (from.length === 0 || segments.length < from.length) return void 0;
250
+ if (!from.every((segment, i) => segments[i] === segment)) return void 0;
251
+ const next = [...to, ...segments.slice(from.length)];
252
+ return next.length > 0 ? next.join("/") : null;
253
+ };
254
+ const updates = documents.flatMap((doc) => {
255
+ const folder = moved(doc.folder);
256
+ return folder === void 0 ? [] : [{ external_id: doc.external_id, folder }];
257
+ });
258
+ if (updates.length > 0) await mutateAsync({ documents: updates });
259
+ patchDocuments(qc, (rows) => {
260
+ let changed = false;
261
+ const next = rows.map((doc) => {
262
+ const folder = moved(doc.folder);
263
+ if (folder === void 0 || folder === doc.folder) return doc;
264
+ changed = true;
265
+ return { ...doc, folder };
266
+ });
267
+ return changed ? next : rows;
268
+ });
269
+ return updates.length;
270
+ },
271
+ [qc, mutateAsync]
272
+ );
273
+ }
274
+ function useDeleteDocuments() {
275
+ const arbi = useArbi();
276
+ const qc = useQueryClient();
277
+ return useMutation({
278
+ mutationKey: arbiMutationKeys.deleteDocuments(),
279
+ mutationFn: (docIds) => arbi.documents.delete(docIds),
280
+ onSuccess: (_data, docIds) => {
281
+ const gone = new Set(docIds);
282
+ patchDocuments(
283
+ qc,
284
+ (old) => old.some((doc) => gone.has(doc.external_id)) ? old.filter((doc) => !gone.has(doc.external_id)) : old
285
+ );
286
+ forgetDocuments(qc, docIds);
287
+ const { clearTask } = useArbiWsStore.getState();
288
+ for (const id of docIds) clearTask(id);
289
+ return qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
290
+ }
291
+ });
292
+ }
293
+ async function settleUpload(qc, arbi, docIds) {
294
+ if (docIds?.length) await refreshDocuments(qc, arbi, docIds);
295
+ await qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
296
+ }
297
+ function useUploadDocuments() {
298
+ const arbi = useArbi();
299
+ const qc = useQueryClient();
300
+ return useMutation({
301
+ mutationKey: arbiMutationKeys.uploadDocuments(),
302
+ mutationFn: ({ files, options }) => arbi.documents.upload(files, options),
303
+ onSuccess: (result) => settleUpload(qc, arbi, result.doc_ext_ids)
304
+ });
305
+ }
306
+ function useUploadUrls() {
307
+ const arbi = useArbi();
308
+ const qc = useQueryClient();
309
+ return useMutation({
310
+ mutationKey: arbiMutationKeys.uploadUrls(),
311
+ mutationFn: ({ urls, shared, configExtId, workspaceId }) => arbi.documents.uploadUrl(urls, {
312
+ workspaceId: workspaceId ?? arbi.getWorkspaceId() ?? void 0,
313
+ shared,
314
+ configExtId
315
+ }),
316
+ onSuccess: (result) => settleUpload(qc, arbi, result.doc_ext_ids)
317
+ });
318
+ }
319
+ function useAssignDocTags() {
320
+ const arbi = useArbi();
321
+ const qc = useQueryClient();
322
+ const capture = useDocumentWriteWorkspace((input) => input.docIds[0]);
323
+ return resolvingOffline(
324
+ useCapturingWorkspace(
325
+ useMutation({
326
+ mutationKey: arbiMutationKeys.assignDocTags(),
327
+ mutationFn: ({ workspaceId, tagId, docIds, note, citations }) => inWorkspace(
328
+ primeOnArbi(arbi),
329
+ workspaceId,
330
+ () => arbi.doctags.assign(tagId, docIds, note, citations)
331
+ ),
332
+ onSuccess: (created) => settleAssignedDocTags(qc, created),
333
+ ...QUEUED_WRITE_RETRY
334
+ }),
335
+ capture
336
+ )
337
+ );
338
+ }
339
+ function useRemoveDocTags() {
340
+ const arbi = useArbi();
341
+ const qc = useQueryClient();
342
+ const capture = useDocumentWriteWorkspace((input) => input.docIds[0]);
343
+ return resolvingOffline(
344
+ useCapturingWorkspace(
345
+ useMutation({
346
+ mutationKey: arbiMutationKeys.removeDocTags(),
347
+ mutationFn: ({ workspaceId, tagId, docIds }) => inWorkspace(primeOnArbi(arbi), workspaceId, () => arbi.doctags.remove(tagId, docIds)),
348
+ onSuccess: (_data, input) => settleRemovedDocTags(qc, input),
349
+ ...QUEUED_WRITE_RETRY
350
+ }),
351
+ capture
352
+ )
353
+ );
354
+ }
355
+ function useUpdateDocTag() {
356
+ const arbi = useArbi();
357
+ const qc = useQueryClient();
358
+ const capture = useDocumentWriteWorkspace((input) => input.docId);
359
+ return resolvingOffline(
360
+ useCapturingWorkspace(
361
+ useMutation({
362
+ mutationKey: arbiMutationKeys.updateDocTag(),
363
+ mutationFn: ({ workspaceId, tagId, docId, note, citations }) => inWorkspace(
364
+ primeOnArbi(arbi),
365
+ workspaceId,
366
+ () => arbi.doctags.update(tagId, docId, { note, citations })
367
+ ),
368
+ onSuccess: (updated) => settleUpdatedDocTag(qc, updated),
369
+ ...QUEUED_WRITE_RETRY
370
+ }),
371
+ capture
372
+ )
373
+ );
374
+ }
375
+ function queueProcessing(documents) {
376
+ const store = useArbiWsStore.getState();
377
+ const previous = documents.map(({ docId }) => [docId, store.tasks[docId]]);
378
+ const now = Date.now();
379
+ for (const doc of documents)
380
+ store.putTask({
381
+ doc_ext_id: doc.docId,
382
+ workspace_ext_id: doc.workspaceId,
383
+ file_name: doc.fileName,
384
+ version: doc.version,
385
+ status: "queued",
386
+ progress: 0,
387
+ startTime: now
388
+ });
389
+ return () => useArbiWsStore.setState((state) => {
390
+ const tasks = { ...state.tasks };
391
+ for (const [docId, task] of previous) {
392
+ if (task) tasks[docId] = task;
393
+ else delete tasks[docId];
394
+ }
395
+ return { tasks };
396
+ });
397
+ }
398
+ function useGenerateDocTags() {
399
+ const arbi = useArbi();
400
+ const qc = useQueryClient();
401
+ return useMutation({
402
+ mutationKey: arbiMutationKeys.generateDocTags(),
403
+ mutationFn: ({ tagIds, docIds, overwrite }) => arbi.doctags.generate(tagIds, docIds, { overwrite }),
404
+ onMutate: ({ docIds }) => {
405
+ if (!docIds.length) return void 0;
406
+ const workspaceId = arbi.hasWorkspace ? arbi.getWorkspaceId() : "";
407
+ const listed = new Map(
408
+ (getCachedDocuments(qc, workspaceId) ?? []).map((doc) => [doc.external_id, doc])
409
+ );
410
+ return {
411
+ undo: queueProcessing(
412
+ docIds.map((docId) => ({
413
+ docId,
414
+ workspaceId,
415
+ fileName: listed.get(docId)?.file_name ?? "",
416
+ version: listed.get(docId)?.current_version ?? 1
417
+ }))
418
+ )
419
+ };
420
+ },
421
+ onError: (_error, _input, context) => context?.undo()
422
+ });
423
+ }
424
+ function useFinaliseTranslation() {
425
+ const arbi = useArbi();
426
+ const qc = useQueryClient();
427
+ return useMutation({
428
+ mutationFn: (docId) => arbi.documents.finaliseTranslation(docId),
429
+ onSuccess: (result) => void refreshDocuments(qc, arbi, [result.document_ext_id])
430
+ });
431
+ }
432
+ export {
433
+ applyOptimisticDocumentEdit,
434
+ replayableDocumentMutations,
435
+ rollbackOptimisticDocumentEdit,
436
+ useAssignDocTags,
437
+ useDeleteDocuments,
438
+ useFinaliseTranslation,
439
+ useGenerateDocTags,
440
+ useMarkDocumentShared,
441
+ useRemoveDocTags,
442
+ useRenameFolder,
443
+ useUpdateDocTag,
444
+ useUpdateDocuments,
445
+ useUploadDocuments,
446
+ useUploadUrls
447
+ };
448
+ //# sourceMappingURL=documents-writes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/documents/documents-writes.ts"],
4
+ "sourcesContent": ["/**\n * Writing documents: field edits, deletion, uploads (files and URLs), and their tags (applying,\n * removing, re-noting, filling them with AI). Every write patches the caches that show its\n * documents in place (the workspace list, each document's own entry, the tag counts) instead of\n * re-reading a list that can be 100k documents long.\n *\n * Offline: field edits and tag applications / removals / notes pause and are sent on reconnect.\n * While queued, a field edit already shows (it is applied to the cache, and undone if the send\n * fails or the change is cancelled: {@link rollbackOptimisticDocumentEdit}), and awaiting one\n * resolves at once rather than when the connection is back. A host that persists its query cache\n * keeps them across a reload by registering `registerArbiMutationDefaults` (`offline.ts`).\n */\n\nimport { useCallback } from 'react'\nimport { onlineManager, useMutation, useQueryClient, type QueryClient } from '@tanstack/react-query'\nimport type { ArbiClient, components } from '@arbidocs/client'\nimport {\n documents as documentOps,\n doctags as doctagOps,\n type Arbi,\n type UploadDocumentsOptions,\n type UploadResult,\n} from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { arbiMutationKeys, arbiQueryKeys } from '../hooks'\nimport {\n forgetDocuments,\n getCachedDocuments,\n patchCachedDocument,\n patchDocuments,\n setCachedDocument,\n type WorkspaceDocument,\n} from './documents-cache'\nimport { adjustTagCounts, refreshDocuments } from './documents-data'\nimport { useArbiWsStore, type LiveTask } from '../websocket/store'\nimport {\n QUEUED_WRITE_RETRY,\n inWorkspace,\n isWorkspaceUnavailable,\n primeOnArbi,\n primeOnClient,\n useCapturingWorkspace,\n type QueuedWriteWorkspace,\n} from '../queued-writes'\n\ntype DocUpdate = components['schemas']['DocUpdateRequest']\ntype DocTag = components['schemas']['DocTagResponse']\ntype CitationSources = components['schemas']['CitationSources']\n\n/** A field edit: the documents' ids with the fields that change (folder, sharing, metadata, \u2026). */\nexport interface UpdateDocumentsInput extends QueuedWriteWorkspace {\n documents: DocUpdate[]\n}\n\n/** Applying a tag to documents (with a note, e.g. a field's value, and the passages it cites). */\nexport interface AssignDocTagsInput extends QueuedWriteWorkspace {\n tagId: string\n docIds: string[]\n note?: string | null\n citations?: CitationSources | null\n}\n\n/** Removing a tag from documents. */\nexport interface RemoveDocTagsInput extends QueuedWriteWorkspace {\n tagId: string\n docIds: string[]\n}\n\n/** Changing the note (or its cited passages) of a tag on one document. */\nexport interface UpdateDocTagInput extends QueuedWriteWorkspace {\n tagId: string\n docId: string\n note?: string | null\n citations?: CitationSources | null\n}\n\n/**\n * Snapshot taken when a queued field edit was applied to the cache; restoring it undoes the edit.\n * It is the mutation's context, so a host's list of pending changes can undo one.\n */\nexport interface OptimisticDocumentEdit {\n optimistic: true\n previous: WorkspaceDocument[]\n previousOwn: Array<[string, WorkspaceDocument | null | undefined]>\n}\n\n/**\n * Show a queued field edit in the caches at once (offline only: online, the server's answer is the\n * one source). A second edit of the same document layers on the first, so undoing the later one\n * restores the earlier one.\n */\nexport function applyOptimisticDocumentEdit(\n qc: QueryClient,\n updates: DocUpdate[]\n): OptimisticDocumentEdit {\n const byId = new Map(updates.map((update) => [update.external_id, update]))\n const previous: WorkspaceDocument[] = []\n patchDocuments(qc, (old) => {\n let changed = false\n const next = old.map((doc) => {\n const update = byId.get(doc.external_id)\n if (!update) return doc\n changed = true\n previous.push(doc)\n return { ...doc, ...update } as WorkspaceDocument\n })\n return changed ? next : old\n })\n const previousOwn = updates.map((update): [string, WorkspaceDocument | null | undefined] => {\n const own = qc.getQueryData<WorkspaceDocument | null>(\n arbiQueryKeys.document(update.external_id)\n )\n if (own) setCachedDocument(qc, { ...own, ...update } as WorkspaceDocument)\n return [update.external_id, own]\n })\n return { optimistic: true, previous, previousOwn }\n}\n\n/** Undo {@link applyOptimisticDocumentEdit} from its snapshot (anything else: nothing to undo). */\nexport function rollbackOptimisticDocumentEdit(qc: QueryClient, context: unknown): void {\n const edit = context as OptimisticDocumentEdit | undefined\n if (!edit?.optimistic) return\n if (edit.previous.length) {\n const restore = new Map(edit.previous.map((doc) => [doc.external_id, doc]))\n patchDocuments(qc, (old) =>\n old.some((doc) => restore.has(doc.external_id))\n ? old.map((doc) => restore.get(doc.external_id) ?? doc)\n : old\n )\n }\n for (const [id, own] of edit.previousOwn) qc.setQueryData(arbiQueryKeys.document(id), own)\n}\n\n/** The server's documents after an edit replace the cached ones. */\nfunction settleUpdatedDocuments(qc: QueryClient, updated: WorkspaceDocument[]): void {\n if (!updated.length) return\n const byId = new Map(updated.map((doc) => [doc.external_id, doc]))\n patchDocuments(qc, (old) =>\n old.some((doc) => byId.has(doc.external_id))\n ? old.map((doc) => byId.get(doc.external_id) ?? doc)\n : old\n )\n for (const doc of updated) setCachedDocument(qc, doc)\n}\n\n/** Apply `reducer` to the given documents wherever they are cached (lists and own entries). */\nfunction patchEachDocument(\n qc: QueryClient,\n docIds: Iterable<string>,\n reducer: (doc: WorkspaceDocument) => WorkspaceDocument\n): void {\n const ids = new Set(docIds)\n patchDocuments(qc, (old) =>\n old.some((doc) => ids.has(doc.external_id))\n ? old.map((doc) => (ids.has(doc.external_id) ? reducer(doc) : doc))\n : old\n )\n for (const id of ids) patchCachedDocument(qc, id, reducer)\n}\n\n/** The workspace a cached document belongs to. */\nfunction workspaceOf(qc: QueryClient, docId: string): string | undefined {\n for (const [, docs] of qc.getQueriesData<WorkspaceDocument[]>({\n queryKey: arbiQueryKeys.allDocuments(),\n })) {\n const doc = Array.isArray(docs) ? docs.find((d) => d.external_id === docId) : undefined\n if (doc) return doc.workspace_ext_id\n }\n return qc.getQueryData<WorkspaceDocument | null>(arbiQueryKeys.document(docId))?.workspace_ext_id\n}\n\n/** Tags applied: each document gains them, each tag's document count rises. */\nfunction settleAssignedDocTags(qc: QueryClient, created: DocTag[]): void {\n const byDoc = new Map<string, DocTag[]>()\n for (const doctag of created)\n byDoc.set(doctag.doc_ext_id, [...(byDoc.get(doctag.doc_ext_id) ?? []), doctag])\n const workspaces = new Map<string, Map<string, number>>()\n for (const doctag of created) {\n const workspaceId = workspaceOf(qc, doctag.doc_ext_id)\n if (!workspaceId) continue\n const delta = workspaces.get(workspaceId) ?? new Map<string, number>()\n delta.set(doctag.tag_ext_id, (delta.get(doctag.tag_ext_id) ?? 0) + 1)\n workspaces.set(workspaceId, delta)\n }\n patchEachDocument(qc, byDoc.keys(), (doc) => ({\n ...doc,\n doctags: [...(doc.doctags ?? []), ...(byDoc.get(doc.external_id) ?? [])],\n }))\n for (const [workspaceId, delta] of workspaces) adjustTagCounts(qc, workspaceId, delta)\n}\n\n/** A tag removed: the documents lose it, its count drops by the documents that had it. */\nfunction settleRemovedDocTags(qc: QueryClient, { tagId, docIds }: RemoveDocTagsInput): void {\n const ids = new Set(docIds)\n const removedByWorkspace = new Map<string, number>()\n for (const [, docs] of qc.getQueriesData<WorkspaceDocument[]>({\n queryKey: arbiQueryKeys.allDocuments(),\n })) {\n for (const doc of Array.isArray(docs) ? docs : []) {\n if (!ids.has(doc.external_id)) continue\n if (!doc.doctags?.some((dt) => dt.tag_ext_id === tagId)) continue\n removedByWorkspace.set(\n doc.workspace_ext_id,\n (removedByWorkspace.get(doc.workspace_ext_id) ?? 0) + 1\n )\n }\n }\n patchEachDocument(qc, ids, (doc) => ({\n ...doc,\n doctags: (doc.doctags ?? []).filter((dt) => dt.tag_ext_id !== tagId),\n }))\n for (const [workspaceId, removed] of removedByWorkspace)\n adjustTagCounts(qc, workspaceId, new Map([[tagId, -removed]]))\n}\n\n/** A tag's note changed on a document: the document's copy of it is replaced. */\nfunction settleUpdatedDocTag(qc: QueryClient, updated: DocTag): void {\n patchEachDocument(qc, [updated.doc_ext_id], (doc) => ({\n ...doc,\n doctags: (doc.doctags ?? []).map((dt) => (dt.tag_ext_id === updated.tag_ext_id ? updated : dt)),\n }))\n}\n\n/**\n * Each document write's request on a bare client (a replay after a reload), in the workspace it was\n * made in. The server keys a document or doctag write by the resource's own workspace, so once that\n * workspace is opened for the session the write cannot land in the one open now.\n */\nconst sendUpdateDocuments = (client: ArbiClient, input: UpdateDocumentsInput) =>\n inWorkspace(primeOnClient(client), input.workspaceId, () =>\n documentOps.updateDocuments(client, input.documents)\n ) as Promise<WorkspaceDocument[]>\nconst sendAssignDocTags = (client: ArbiClient, input: AssignDocTagsInput) =>\n inWorkspace(primeOnClient(client), input.workspaceId, () =>\n doctagOps.assignDocTags(client, input.tagId, input.docIds, input.note, input.citations)\n )\nconst sendRemoveDocTags = (client: ArbiClient, input: RemoveDocTagsInput) =>\n inWorkspace(primeOnClient(client), input.workspaceId, () =>\n doctagOps.removeDocTags(client, input.tagId, input.docIds)\n )\nconst sendUpdateDocTag = (client: ArbiClient, input: UpdateDocTagInput) =>\n inWorkspace(primeOnClient(client), input.workspaceId, () =>\n doctagOps.updateDocTag(client, input.tagId, input.docId, {\n note: input.note,\n citations: input.citations,\n })\n )\n\n/**\n * The document writes a host may queue offline and replay after a reload (`offline.ts`): each\n * key's request on a bare client (in the workspace the write was made in), and what its success\n * does to the cache.\n */\nexport const replayableDocumentMutations = [\n {\n mutationKey: arbiMutationKeys.updateDocuments(),\n run: sendUpdateDocuments,\n settle: (qc: QueryClient, updated: WorkspaceDocument[]) => settleUpdatedDocuments(qc, updated),\n },\n {\n mutationKey: arbiMutationKeys.assignDocTags(),\n run: sendAssignDocTags,\n settle: (qc: QueryClient, created: DocTag[]) => settleAssignedDocTags(qc, created),\n },\n {\n mutationKey: arbiMutationKeys.removeDocTags(),\n run: sendRemoveDocTags,\n settle: (qc: QueryClient, _data: unknown, input: RemoveDocTagsInput) =>\n settleRemovedDocTags(qc, input),\n },\n {\n mutationKey: arbiMutationKeys.updateDocTag(),\n run: sendUpdateDocTag,\n settle: (qc: QueryClient, updated: DocTag) => settleUpdatedDocTag(qc, updated),\n },\n] as const\n\n/**\n * The workspace a document write is made in, when its caller named none: the edited documents'\n * own (from the cache: a document can be edited from a view of another workspace), else the\n * current one. Read when the write is made, before it can be queued.\n */\nfunction useDocumentWriteWorkspace<V extends QueuedWriteWorkspace>(\n docIdOf: (variables: V) => string | undefined\n): (variables: V) => V {\n const arbi = useArbi()\n const qc = useQueryClient()\n return (variables: V) => {\n if (variables.workspaceId) return variables\n const docId = docIdOf(variables)\n const workspaceId =\n (docId ? workspaceOf(qc, docId) : undefined) ??\n (arbi.hasWorkspace ? arbi.getWorkspaceId() : undefined)\n return workspaceId ? { ...variables, workspaceId } : variables\n }\n}\n\n/**\n * `mutateAsync` that, while offline, queues the write and resolves at once (with `undefined`), so\n * a caller awaiting it to close a dialog never waits for the connection. For writes whose callers\n * do not need the server's answer.\n */\nfunction resolvingOffline<\n T extends { mutate: (...args: never[]) => unknown; mutateAsync: unknown },\n>(mutation: T): T {\n const mutateAsync = ((variables: never, options: never) => {\n if (!onlineManager.isOnline()) {\n ;(mutation.mutate as (v: never, o: never) => void)(variables, options)\n return Promise.resolve(undefined)\n }\n return (mutation.mutateAsync as (v: never, o: never) => Promise<unknown>)(variables, options)\n }) as T['mutateAsync']\n return { ...mutation, mutateAsync }\n}\n\n/** Reflect a confirmed resource share in every files view, and refresh its document detail. */\nexport function useMarkDocumentShared(): (documentExtId: string) => void {\n const qc = useQueryClient()\n return useCallback(\n (documentExtId: string) => {\n patchDocuments(qc, (old) =>\n old.map((doc) => (doc.external_id === documentExtId ? { ...doc, shared: true } : doc))\n )\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.document(documentExtId) })\n },\n [qc]\n )\n}\n\n/**\n * Edit documents' fields (folder, sharing, title and other metadata, status). The answer replaces\n * the cached documents; offline the edit shows at once and is sent on reconnect.\n */\nexport function useUpdateDocuments() {\n const arbi = useArbi()\n const qc = useQueryClient()\n const capture = useDocumentWriteWorkspace<UpdateDocumentsInput>(\n (input) => input.documents[0]?.external_id\n )\n return resolvingOffline(\n useCapturingWorkspace(\n useMutation({\n mutationKey: arbiMutationKeys.updateDocuments(),\n mutationFn: (input: UpdateDocumentsInput): Promise<WorkspaceDocument[]> =>\n inWorkspace(primeOnArbi(arbi), input.workspaceId, () =>\n arbi.documents.update(input.documents)\n ),\n onMutate: ({ documents }) =>\n onlineManager.isOnline() || !documents.length\n ? undefined\n : applyOptimisticDocumentEdit(qc, documents),\n // Not sent because its workspace can't be opened: the edit stays, listed as not sent.\n onError: (error, _input, context) => {\n if (!isWorkspaceUnavailable(error)) rollbackOptimisticDocumentEdit(qc, context)\n },\n onSuccess: (updated) => settleUpdatedDocuments(qc, updated),\n ...QUEUED_WRITE_RETRY,\n }),\n capture\n )\n )\n}\n\n/** A folder path's segments: the `folder` string split on \"/\", trimmed, empty ones dropped. */\nfunction folderSegments(folder: string | null | undefined): string[] {\n return (folder ?? '')\n .split('/')\n .map((segment) => segment.trim())\n .filter(Boolean)\n}\n\n/**\n * Rename or move a folder: each of `documents` beneath `from` moves under `to`, keeping the\n * structure below it. The batch write does not return an email's attachments, so every cached row\n * beneath `from` moves too. Resolves to how many documents were written.\n */\nexport function useRenameFolder() {\n const qc = useQueryClient()\n const { mutateAsync } = useUpdateDocuments()\n return useCallback(\n async (documents: WorkspaceDocument[], from: string[], to: string[]): Promise<number> => {\n const moved = (folder: string | null | undefined): string | null | undefined => {\n const segments = folderSegments(folder)\n if (from.length === 0 || segments.length < from.length) return undefined\n if (!from.every((segment, i) => segments[i] === segment)) return undefined\n const next = [...to, ...segments.slice(from.length)]\n return next.length > 0 ? next.join('/') : null\n }\n const updates = documents.flatMap((doc) => {\n const folder = moved(doc.folder)\n return folder === undefined ? [] : [{ external_id: doc.external_id, folder }]\n })\n if (updates.length > 0) await mutateAsync({ documents: updates })\n patchDocuments(qc, (rows) => {\n let changed = false\n const next = rows.map((doc) => {\n const folder = moved(doc.folder)\n if (folder === undefined || folder === doc.folder) return doc\n changed = true\n return { ...doc, folder }\n })\n return changed ? next : rows\n })\n return updates.length\n },\n [qc, mutateAsync]\n )\n}\n\n/**\n * Delete documents (each with all its versions; an email with its attachments). They leave every\n * list, what was cached about them is forgotten, and the workspaces' file counts re-read.\n */\nexport function useDeleteDocuments() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.deleteDocuments(),\n mutationFn: (docIds: string[]) => arbi.documents.delete(docIds),\n onSuccess: (_data, docIds) => {\n const gone = new Set(docIds)\n patchDocuments(qc, (old) =>\n old.some((doc) => gone.has(doc.external_id))\n ? old.filter((doc) => !gone.has(doc.external_id))\n : old\n )\n forgetDocuments(qc, docIds)\n // A deleted document (a failed upload especially) leaves the processing rows too.\n const { clearTask } = useArbiWsStore.getState()\n for (const id of docIds) clearTask(id)\n return qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n },\n })\n}\n\n/** Re-read the documents an upload made and the workspaces' file counts. */\nasync function settleUpload(\n qc: QueryClient,\n arbi: Arbi,\n docIds: string[] | undefined\n): Promise<void> {\n if (docIds?.length) await refreshDocuments(qc, arbi, docIds)\n await qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n}\n\n/** Files to upload and where they go. */\nexport interface UploadDocumentsInput {\n files: Array<Blob | File>\n options?: UploadDocumentsOptions\n}\n\n/**\n * Upload files (to the open workspace, or `options.workspaceExtId`): resolves with the new\n * documents' ids (and the files the server skipped). The new documents join their list.\n */\nexport function useUploadDocuments() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.uploadDocuments(),\n mutationFn: ({ files, options }: UploadDocumentsInput): Promise<UploadResult> =>\n arbi.documents.upload(files, options),\n onSuccess: (result) => settleUpload(qc, arbi, result.doc_ext_ids),\n })\n}\n\n/** Web pages or files to fetch into a workspace (default: the open one). */\nexport interface UploadUrlsInput {\n urls: string[]\n shared?: boolean\n configExtId?: string | null\n /** The workspace the documents are made in; named on the request. Default: the open one. */\n workspaceId?: string | null\n}\n\n/** Add documents from URLs to a workspace (default: the open one); they join its list. */\nexport function useUploadUrls() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.uploadUrls(),\n mutationFn: ({ urls, shared, configExtId, workspaceId }: UploadUrlsInput) =>\n arbi.documents.uploadUrl(urls, {\n workspaceId: workspaceId ?? arbi.getWorkspaceId() ?? undefined,\n shared,\n configExtId,\n }),\n onSuccess: (result) =>\n settleUpload(qc, arbi, (result as { doc_ext_ids?: string[] }).doc_ext_ids),\n })\n}\n\n/** Apply a tag to documents: they show it at once, its count rises. Queued offline. */\nexport function useAssignDocTags() {\n const arbi = useArbi()\n const qc = useQueryClient()\n const capture = useDocumentWriteWorkspace<AssignDocTagsInput>((input) => input.docIds[0])\n return resolvingOffline(\n useCapturingWorkspace(\n useMutation({\n mutationKey: arbiMutationKeys.assignDocTags(),\n mutationFn: ({ workspaceId, tagId, docIds, note, citations }: AssignDocTagsInput) =>\n inWorkspace(primeOnArbi(arbi), workspaceId, () =>\n arbi.doctags.assign(tagId, docIds, note, citations)\n ) as Promise<DocTag[]>,\n onSuccess: (created) => settleAssignedDocTags(qc, created),\n ...QUEUED_WRITE_RETRY,\n }),\n capture\n )\n )\n}\n\n/** Remove a tag from documents: they lose it, its count drops. Queued offline. */\nexport function useRemoveDocTags() {\n const arbi = useArbi()\n const qc = useQueryClient()\n const capture = useDocumentWriteWorkspace<RemoveDocTagsInput>((input) => input.docIds[0])\n return resolvingOffline(\n useCapturingWorkspace(\n useMutation({\n mutationKey: arbiMutationKeys.removeDocTags(),\n mutationFn: ({ workspaceId, tagId, docIds }: RemoveDocTagsInput) =>\n inWorkspace(primeOnArbi(arbi), workspaceId, () => arbi.doctags.remove(tagId, docIds)),\n onSuccess: (_data, input) => settleRemovedDocTags(qc, input),\n ...QUEUED_WRITE_RETRY,\n }),\n capture\n )\n )\n}\n\n/** Change a tag's note (or its cited passages) on a document. Queued offline. */\nexport function useUpdateDocTag() {\n const arbi = useArbi()\n const qc = useQueryClient()\n const capture = useDocumentWriteWorkspace<UpdateDocTagInput>((input) => input.docId)\n return resolvingOffline(\n useCapturingWorkspace(\n useMutation({\n mutationKey: arbiMutationKeys.updateDocTag(),\n mutationFn: ({ workspaceId, tagId, docId, note, citations }: UpdateDocTagInput) =>\n inWorkspace(primeOnArbi(arbi), workspaceId, () =>\n arbi.doctags.update(tagId, docId, { note, citations })\n ) as Promise<DocTag>,\n onSuccess: (updated) => settleUpdatedDocTag(qc, updated),\n ...QUEUED_WRITE_RETRY,\n }),\n capture\n )\n )\n}\n\n/** Tags whose values AI fills on documents. */\nexport interface GenerateDocTagsInput {\n tagIds: string[]\n docIds: string[]\n /** Also where a document already has a value (default: only where it has none). */\n overwrite?: boolean\n}\n\n/**\n * Show documents sent back into processing (AI fields being filled) as queued, as an upload shows,\n * until their real task updates take over. Returns the undo (the write was refused).\n */\nfunction queueProcessing(\n documents: Array<{ docId: string; workspaceId: string; fileName: string; version: number }>\n): () => void {\n const store = useArbiWsStore.getState()\n const previous = documents.map(({ docId }) => [docId, store.tasks[docId]] as const)\n const now = Date.now()\n for (const doc of documents)\n store.putTask({\n doc_ext_id: doc.docId,\n workspace_ext_id: doc.workspaceId,\n file_name: doc.fileName,\n version: doc.version,\n status: 'queued',\n progress: 0,\n startTime: now,\n } as LiveTask)\n return () =>\n useArbiWsStore.setState((state) => {\n const tasks = { ...state.tasks }\n for (const [docId, task] of previous) {\n if (task) tasks[docId] = task\n else delete tasks[docId]\n }\n return { tasks }\n })\n}\n\n/**\n * Fill tags' values on documents with AI. Accepted at once; the work runs in the background and a\n * `batch_complete` (`doctag_generate`) event names the documents when it is done\n * (`refreshDocuments` then brings their values). Meanwhile the documents show as queued for\n * processing (as queued), undone if the request is refused.\n */\nexport function useGenerateDocTags() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationKey: arbiMutationKeys.generateDocTags(),\n mutationFn: ({ tagIds, docIds, overwrite }: GenerateDocTagsInput) =>\n arbi.doctags.generate(tagIds, docIds, { overwrite }),\n onMutate: ({ docIds }) => {\n if (!docIds.length) return undefined\n const workspaceId = arbi.hasWorkspace ? arbi.getWorkspaceId() : ''\n const listed = new Map(\n (getCachedDocuments(qc, workspaceId) ?? []).map((doc) => [doc.external_id, doc])\n )\n // Reprocessing works on each document's current version.\n return {\n undo: queueProcessing(\n docIds.map((docId) => ({\n docId,\n workspaceId,\n fileName: listed.get(docId)?.file_name ?? '',\n version: listed.get(docId)?.current_version ?? 1,\n }))\n ),\n }\n },\n onError: (_error, _input, context) => context?.undo(),\n })\n}\n\n/**\n * Finalise a translation: its current version is saved as a new PDF document, labelled\n * \"Translation\" and linked to the original. Resolves with the new document's id; the new document\n * joins the list with its links, so the original's translations show it at once.\n */\nexport function useFinaliseTranslation() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (docId: string) => arbi.documents.finaliseTranslation(docId),\n onSuccess: (result) => void refreshDocuments(qc, arbi, [result.document_ext_id]),\n })\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,10 @@
1
+ function formatElapsed(ms) {
2
+ const totalSeconds = Math.max(0, Math.floor(ms / 1e3));
3
+ const minutes = Math.floor(totalSeconds / 60);
4
+ const seconds = totalSeconds % 60;
5
+ return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
6
+ }
7
+ export {
8
+ formatElapsed
9
+ };
10
+ //# sourceMappingURL=format-elapsed.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/documents/format-elapsed.ts"],
4
+ "sourcesContent": ["/** Formats a duration in milliseconds as \"mm:ss\", clamped to non-negative. */\nexport function formatElapsed(ms: number): string {\n const totalSeconds = Math.max(0, Math.floor(ms / 1000))\n const minutes = Math.floor(totalSeconds / 60)\n const seconds = totalSeconds % 60\n return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`\n}\n"],
5
+ "mappings": "AACO,SAAS,cAAc,IAAoB;AAChD,QAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,GAAI,CAAC;AACtD,QAAM,UAAU,KAAK,MAAM,eAAe,EAAE;AAC5C,QAAM,UAAU,eAAe;AAC/B,SAAO,GAAG,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC;AAChF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,26 @@
1
+ function hasVideoTrack(blob) {
2
+ return new Promise((resolve) => {
3
+ const url = URL.createObjectURL(blob);
4
+ const video = document.createElement("video");
5
+ video.preload = "metadata";
6
+ video.muted = true;
7
+ const cleanup = () => {
8
+ video.removeAttribute("src");
9
+ video.load();
10
+ URL.revokeObjectURL(url);
11
+ };
12
+ video.onloadedmetadata = () => {
13
+ resolve(video.videoWidth > 0 && video.videoHeight > 0);
14
+ cleanup();
15
+ };
16
+ video.onerror = () => {
17
+ resolve(false);
18
+ cleanup();
19
+ };
20
+ video.src = url;
21
+ });
22
+ }
23
+ export {
24
+ hasVideoTrack
25
+ };
26
+ //# sourceMappingURL=has-video-track.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/documents/has-video-track.ts"],
4
+ "sourcesContent": ["/**\n * Content-based audio-vs-video detection for containers that don't tell you\n * from the extension alone. WebM in particular can hold audio-only, video-only,\n * or both, and a host app bucketing purely by file extension will get an\n * audio-only recording (e.g. a voice note) wrong, since `.webm` is what\n * MediaRecorder produces either way.\n *\n * No backend involvement needed: most document APIs don't expose a\n * content-type field to check post-upload (only a file name), but loading the\n * bytes into a hidden <video> element and reading its decoded metadata does\n * the job entirely client-side \u2014 videoWidth/videoHeight report 0x0 when\n * there's no video track, even though duration/audio still work fine.\n */\nexport function hasVideoTrack(blob: Blob): Promise<boolean> {\n return new Promise((resolve) => {\n const url = URL.createObjectURL(blob)\n const video = document.createElement('video')\n video.preload = 'metadata'\n video.muted = true\n\n const cleanup = () => {\n video.removeAttribute('src')\n video.load()\n URL.revokeObjectURL(url)\n }\n\n video.onloadedmetadata = () => {\n resolve(video.videoWidth > 0 && video.videoHeight > 0)\n cleanup()\n }\n // Couldn't even decode it as a video container \u2014 treat conservatively as\n // \"no video track\" rather than leaving the caller hanging.\n video.onerror = () => {\n resolve(false)\n cleanup()\n }\n\n video.src = url\n })\n}\n"],
5
+ "mappings": "AAaO,SAAS,cAAc,MAA8B;AAC1D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,UAAU;AAChB,UAAM,QAAQ;AAEd,UAAM,UAAU,MAAM;AACpB,YAAM,gBAAgB,KAAK;AAC3B,YAAM,KAAK;AACX,UAAI,gBAAgB,GAAG;AAAA,IACzB;AAEA,UAAM,mBAAmB,MAAM;AAC7B,cAAQ,MAAM,aAAa,KAAK,MAAM,cAAc,CAAC;AACrD,cAAQ;AAAA,IACV;AAGA,UAAM,UAAU,MAAM;AACpB,cAAQ,KAAK;AACb,cAAQ;AAAA,IACV;AAEA,UAAM,MAAM;AAAA,EACd,CAAC;AACH;",
6
+ "names": []
7
+ }