@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,132 @@
1
+ import { useCallback, useEffect, useRef } from "react";
2
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { logger } from "@arbidocs/client";
4
+ import { mail as mailOps } from "@arbidocs/sdk/browser";
5
+ import { useArbiHost } from "../host/config.js";
6
+ import { inWorkspace, primeOnArbi } from "../queued-writes.js";
7
+ import { mailQueryKeys } from "../query-keys.js";
8
+ import { useMailOnline } from "./hooks.js";
9
+ import { useMailClient } from "./useMailClient.js";
10
+ import { mailConversationKey } from "./threads.js";
11
+ const NO_PRIMER = () => void 0;
12
+ async function sendMailFile(fetch, prime, account, messageId, request) {
13
+ const { threadId } = request;
14
+ return inWorkspace(prime, request.workspaceExtId, async () => {
15
+ if (!threadId) return mailOps.fileMessage(fetch, messageId, request.workspaceExtId, account.id);
16
+ const { filed } = await mailOps.fileConversation(fetch, {
17
+ accountId: account.id,
18
+ threadId,
19
+ messageIds: request.messageIds?.length ? request.messageIds : [messageId],
20
+ workspaceExtId: request.workspaceExtId
21
+ });
22
+ return filed.find((f) => f.message_id === messageId) ?? filed[0];
23
+ });
24
+ }
25
+ function useMailWorkspacePrimer() {
26
+ const { arbi } = useArbiHost();
27
+ return arbi ? primeOnArbi(arbi) : NO_PRIMER;
28
+ }
29
+ function useMailFiling(account, messageIds, threadIds, options = {}) {
30
+ const { client } = useMailClient();
31
+ const isOnline = useMailOnline();
32
+ return useQuery({
33
+ queryKey: mailQueryKeys.filing(account?.id, messageIds, threadIds),
34
+ queryFn: () => mailOps.getFilingState(client.fetch, { accountId: account.id, messageIds, threadIds }),
35
+ enabled: !!account && isOnline && (messageIds.length > 0 || threadIds.length > 0) && (options.enabled ?? true),
36
+ retry: false
37
+ });
38
+ }
39
+ function useStopMailFilingRule() {
40
+ const { client } = useMailClient();
41
+ const queryClient = useQueryClient();
42
+ return useMutation({
43
+ mutationFn: ({ ruleId, threadId }) => mailOps.stopFilingConversation(client.fetch, ruleId, threadId),
44
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() })
45
+ });
46
+ }
47
+ function useNativeMailFiling(options = {}) {
48
+ const { client, enabled } = useMailClient();
49
+ return useQuery({
50
+ queryKey: mailQueryKeys.nativeFiling(),
51
+ queryFn: () => mailOps.listNativeFiling(client.fetch),
52
+ enabled: enabled && (options.enabled ?? true),
53
+ retry: false
54
+ });
55
+ }
56
+ function useSetNativeMailFiling() {
57
+ const { client } = useMailClient();
58
+ const prime = useMailWorkspacePrimer();
59
+ const queryClient = useQueryClient();
60
+ return useMutation({
61
+ mutationFn: (input) => inWorkspace(prime, input.workspaceExtId, () => mailOps.setNativeFiling(client.fetch, input)),
62
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() })
63
+ });
64
+ }
65
+ function useFileWaitingNativeMail() {
66
+ const { arbi } = useArbiHost();
67
+ const queryClient = useQueryClient();
68
+ return useMutation({
69
+ mutationFn: (workspaceExtId) => {
70
+ if (!arbi) throw new Error("Filing needs a signed-in session");
71
+ return arbi.mail.fileWaiting(workspaceExtId);
72
+ },
73
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() })
74
+ });
75
+ }
76
+ function useConnectedMailFiling(account, messages) {
77
+ const { client, enabled } = useMailClient();
78
+ const isOnline = useMailOnline();
79
+ const prime = useMailWorkspacePrimer();
80
+ const queryClient = useQueryClient();
81
+ const tried = useRef(/* @__PURE__ */ new Set());
82
+ const run = useCallback(
83
+ async (connected, listed) => {
84
+ const fresh = listed.filter((m) => m.thread_id && !tried.current.has(m.id));
85
+ if (!fresh.length) return;
86
+ for (const m of fresh) tried.current.add(m.id);
87
+ const threadIds = [...new Set(fresh.map(mailConversationKey))];
88
+ const state = await mailOps.getFilingState(client.fetch, {
89
+ accountId: connected.id,
90
+ messageIds: fresh.map((m) => m.id),
91
+ threadIds
92
+ });
93
+ const filed = new Set(state.filed.map((f) => f.message_id));
94
+ const rules = new Map(state.rules.map((r) => [r.thread_id, r]));
95
+ let added = 0;
96
+ for (const message of fresh) {
97
+ const rule = rules.get(mailConversationKey(message));
98
+ if (!rule || filed.has(message.id)) continue;
99
+ try {
100
+ await sendMailFile(client.fetch, prime, connected, message.id, {
101
+ workspaceExtId: rule.workspace_ext_id,
102
+ threadId: mailConversationKey(message),
103
+ messageIds: [message.id]
104
+ });
105
+ added++;
106
+ } catch (error) {
107
+ logger.warn("[mail] could not add a message to its conversation\u2019s workspace", error);
108
+ }
109
+ }
110
+ if (added) await queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() });
111
+ },
112
+ [client, prime, queryClient]
113
+ );
114
+ useEffect(() => {
115
+ if (!enabled || !isOnline || !account || account.provider === "native" || !messages?.length)
116
+ return;
117
+ run(account, messages).catch(
118
+ (error) => logger.warn("[mail] could not add new mail to its conversation\u2019s workspace", error)
119
+ );
120
+ }, [account, messages, enabled, isOnline, run]);
121
+ }
122
+ export {
123
+ sendMailFile,
124
+ useConnectedMailFiling,
125
+ useFileWaitingNativeMail,
126
+ useMailFiling,
127
+ useMailWorkspacePrimer,
128
+ useNativeMailFiling,
129
+ useSetNativeMailFiling,
130
+ useStopMailFilingRule
131
+ };
132
+ //# sourceMappingURL=filing.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/mail/filing.ts"],
4
+ "sourcesContent": ["/**\n * Adding mail to a workspace: this message, or the whole conversation (its future replies too, until\n * the rule is stopped). It becomes a document only the person who added it can see.\n *\n * One mechanism for every mailbox (the mailbox-sync tables). ARBI mail that arrives in a filed\n * folder or conversation while you are away waits; it is filed the next time you open the\n * workspace, with your session (the connectors' auto-sync trigger, `useConnectorAutoSync`). A\n * connected account's new messages in a filed conversation are added by this app while it lists\n * them (`useConnectedMailFiling`): only while the app is open and syncing.\n */\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { logger } from '@arbidocs/client'\nimport { mail as mailOps } from '@arbidocs/sdk/browser'\nimport { useArbiHost } from '../host/config'\nimport { inWorkspace, primeOnArbi, type WorkspacePrimer } from '../queued-writes'\nimport { mailQueryKeys } from '../query-keys'\nimport type { MailFetch } from './client'\nimport { useMailOnline } from './hooks'\nimport { useMailClient } from './useMailClient'\nimport { mailConversationKey } from './threads'\nimport type {\n MailAccount,\n MailFiled,\n MailFilingState,\n MailMessage,\n NativeMailFiling,\n} from './types'\n\n/** What to add: one message, or (with `threadId`) a conversation, its `messageIds` now and its replies. */\nexport interface MailFileRequest {\n workspaceExtId: string\n threadId?: string\n messageIds?: string[]\n}\n\n/** Nothing to deposit: the host keeps the workspace's key on the session itself. */\nconst NO_PRIMER: WorkspacePrimer = () => undefined\n\n/**\n * Send a filing to the server in its workspace (its key deposited on the session first, without\n * switching to it); resolves with where the message went. Used online and when a filing made\n * offline is replayed.\n */\nexport async function sendMailFile(\n fetch: MailFetch,\n prime: WorkspacePrimer,\n account: Pick<MailAccount, 'id'>,\n messageId: string,\n request: MailFileRequest\n): Promise<MailFiled | undefined> {\n const { threadId } = request\n return inWorkspace(prime, request.workspaceExtId, async () => {\n if (!threadId) return mailOps.fileMessage(fetch, messageId, request.workspaceExtId, account.id)\n const { filed } = await mailOps.fileConversation(fetch, {\n accountId: account.id,\n threadId,\n messageIds: request.messageIds?.length ? request.messageIds : [messageId],\n workspaceExtId: request.workspaceExtId,\n })\n return filed.find((f) => f.message_id === messageId) ?? filed[0]\n })\n}\n\n/** The workspace primer of the host's session (none without one). */\nexport function useMailWorkspacePrimer(): WorkspacePrimer {\n const { arbi } = useArbiHost()\n return arbi ? primeOnArbi(arbi) : NO_PRIMER\n}\n\n/** Which of these messages are in a workspace, and which of these conversations add replies to one. */\nexport function useMailFiling(\n account: MailAccount | undefined,\n messageIds: string[],\n threadIds: string[],\n options: { enabled?: boolean } = {}\n) {\n const { client } = useMailClient()\n const isOnline = useMailOnline()\n return useQuery<MailFilingState>({\n queryKey: mailQueryKeys.filing(account?.id, messageIds, threadIds),\n queryFn: () =>\n mailOps.getFilingState(client.fetch, { accountId: account!.id, messageIds, threadIds }),\n enabled:\n !!account &&\n isOnline &&\n (messageIds.length > 0 || threadIds.length > 0) &&\n (options.enabled ?? true),\n retry: false,\n })\n}\n\n/** Stop adding a conversation's replies to its workspace (what was added stays). */\nexport function useStopMailFilingRule() {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMutation({\n mutationFn: ({ ruleId, threadId }: { ruleId: string; threadId: string }) =>\n mailOps.stopFilingConversation(client.fetch, ruleId, threadId),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() }),\n })\n}\n\n/** Where the ARBI mailbox files mail: per workspace, its folders and conversations. */\nexport function useNativeMailFiling(options: { enabled?: boolean } = {}) {\n const { client, enabled } = useMailClient()\n return useQuery<NativeMailFiling[]>({\n queryKey: mailQueryKeys.nativeFiling(),\n queryFn: () => mailOps.listNativeFiling(client.fetch),\n enabled: enabled && (options.enabled ?? true),\n retry: false,\n })\n}\n\n/** File the ARBI mailbox's folders into a workspace, ongoing (the import panel's sync dialog). */\nexport function useSetNativeMailFiling() {\n const { client } = useMailClient()\n const prime = useMailWorkspacePrimer()\n const queryClient = useQueryClient()\n return useMutation({\n mutationFn: (input: {\n workspaceExtId: string\n folders: ('inbox' | 'sent' | 'archive')[]\n backfillWindow?: number\n }) =>\n inWorkspace(prime, input.workspaceExtId, () => mailOps.setNativeFiling(client.fetch, input)),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() }),\n })\n}\n\n/**\n * File the ARBI mail waiting for a workspace now, with this session (it is also filed whenever the\n * workspace is opened, by the connectors' auto-sync trigger).\n */\nexport function useFileWaitingNativeMail() {\n const { arbi } = useArbiHost()\n const queryClient = useQueryClient()\n return useMutation({\n mutationFn: (workspaceExtId: string) => {\n if (!arbi) throw new Error('Filing needs a signed-in session')\n return arbi.mail.fileWaiting(workspaceExtId)\n },\n onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() }),\n })\n}\n\n/**\n * A connected account's new messages in a filed conversation, added by this app as it lists them\n * (ARBI does not store that mail, so the server can't). Each message is tried once per page life.\n */\nexport function useConnectedMailFiling(\n account: MailAccount | undefined,\n messages: MailMessage[] | undefined\n): void {\n const { client, enabled } = useMailClient()\n const isOnline = useMailOnline()\n const prime = useMailWorkspacePrimer()\n const queryClient = useQueryClient()\n const tried = useRef(new Set<string>())\n const run = useCallback(\n async (connected: MailAccount, listed: MailMessage[]) => {\n const fresh = listed.filter((m) => m.thread_id && !tried.current.has(m.id))\n if (!fresh.length) return\n for (const m of fresh) tried.current.add(m.id)\n const threadIds = [...new Set(fresh.map(mailConversationKey))]\n const state = await mailOps.getFilingState(client.fetch, {\n accountId: connected.id,\n messageIds: fresh.map((m) => m.id),\n threadIds,\n })\n const filed = new Set(state.filed.map((f) => f.message_id))\n const rules = new Map(state.rules.map((r) => [r.thread_id, r]))\n let added = 0\n for (const message of fresh) {\n const rule = rules.get(mailConversationKey(message))\n if (!rule || filed.has(message.id)) continue\n try {\n await sendMailFile(client.fetch, prime, connected, message.id, {\n workspaceExtId: rule.workspace_ext_id,\n threadId: mailConversationKey(message),\n messageIds: [message.id],\n })\n added++\n } catch (error) {\n // One that can't be added now must not keep the others out.\n logger.warn('[mail] could not add a message to its conversation\u2019s workspace', error)\n }\n }\n if (added) await queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFiling() })\n },\n [client, prime, queryClient]\n )\n useEffect(() => {\n if (!enabled || !isOnline || !account || account.provider === 'native' || !messages?.length)\n return\n run(account, messages).catch((error) =>\n logger.warn('[mail] could not add new mail to its conversation\u2019s workspace', error)\n )\n }, [account, messages, enabled, isOnline, run])\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,393 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from "react";
2
+ import { onlineManager, useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { accountPath, mailJson } from "./client.js";
4
+ import { useMailClient } from "./useMailClient.js";
5
+ import { useArbi } from "../useArbi.js";
6
+ import { mailQueryKeys } from "../query-keys.js";
7
+ import { mailQueryKeys as mailQueryKeys2 } from "../query-keys.js";
8
+ function useMailOnline() {
9
+ return useSyncExternalStore(
10
+ (onChange) => onlineManager.subscribe(onChange),
11
+ () => onlineManager.isOnline(),
12
+ () => true
13
+ );
14
+ }
15
+ function useMailPolicy(options = {}) {
16
+ const { client, enabled } = useMailClient();
17
+ return useQuery({
18
+ queryKey: mailQueryKeys2.policy(),
19
+ queryFn: () => client.getPolicy(),
20
+ networkMode: "always",
21
+ enabled: enabled && (options.enabled ?? true),
22
+ staleTime: 6e4,
23
+ retry: false
24
+ });
25
+ }
26
+ function useMailAccounts(options = {}) {
27
+ const { client, enabled } = useMailClient();
28
+ return useQuery({
29
+ queryKey: mailQueryKeys2.accounts(),
30
+ queryFn: () => client.listAccounts(),
31
+ networkMode: "always",
32
+ enabled: enabled && (options.enabled ?? true),
33
+ retry: false
34
+ });
35
+ }
36
+ function useMailUnlock(account) {
37
+ const { client, enabled, sessionKey } = useMailClient();
38
+ const isOnline = useMailOnline();
39
+ return useQuery({
40
+ queryKey: mailQueryKeys2.unlock(account?.id, sessionKey),
41
+ queryFn: async () => {
42
+ if (!account) throw new Error("Sign in to unlock your mailbox");
43
+ await client.unlock(account);
44
+ return true;
45
+ },
46
+ enabled: enabled && !!account && sessionKey !== null && !account.needs_reconsent && isOnline,
47
+ staleTime: Infinity,
48
+ retry: false
49
+ });
50
+ }
51
+ function useMailFolders(account, options) {
52
+ const { client } = useMailClient();
53
+ return useQuery({
54
+ queryKey: mailQueryKeys2.folders(account?.id),
55
+ queryFn: () => client.listFolders(account),
56
+ networkMode: "always",
57
+ enabled: !!account && (options.enabled ?? true),
58
+ retry: false
59
+ });
60
+ }
61
+ function useMailMessages(account, folderId, query, cursor, options = {}) {
62
+ const { client } = useMailClient();
63
+ return useQuery({
64
+ queryKey: mailQueryKeys2.messages(account?.id, folderId, query, cursor),
65
+ queryFn: () => client.listMessages(account, folderId, query, cursor),
66
+ networkMode: "always",
67
+ enabled: !!account && !!folderId && (options.enabled ?? true),
68
+ retry: false,
69
+ refetchInterval: options.refetchInterval
70
+ });
71
+ }
72
+ function useMailConversations(account, folderId, query, cursor, options = {}) {
73
+ const { client } = useMailClient();
74
+ return useQuery({
75
+ queryKey: mailQueryKeys2.conversations(account?.id, folderId, query, cursor),
76
+ queryFn: () => client.listConversations(account, folderId, query, cursor),
77
+ networkMode: "always",
78
+ enabled: !!account && !!folderId && (options.enabled ?? true),
79
+ retry: false,
80
+ refetchInterval: options.refetchInterval
81
+ });
82
+ }
83
+ function useMailThread(account, threadId, folderId, options = {}) {
84
+ const { client } = useMailClient();
85
+ return useQuery({
86
+ queryKey: mailQueryKeys2.thread(account?.id, threadId, folderId),
87
+ queryFn: () => client.getThread(account, threadId, folderId ?? ""),
88
+ networkMode: "always",
89
+ enabled: !!account && !!threadId && (options.enabled ?? true),
90
+ retry: false
91
+ });
92
+ }
93
+ function useMailMessage(account, messageId, options = {}) {
94
+ const { client } = useMailClient();
95
+ return useQuery({
96
+ queryKey: mailQueryKeys2.message(account?.id, messageId),
97
+ queryFn: () => client.getMessage(account, messageId),
98
+ networkMode: "always",
99
+ enabled: !!account && !!messageId && (options.enabled ?? true),
100
+ retry: false
101
+ });
102
+ }
103
+ function useReadMailMessage() {
104
+ const { client } = useMailClient();
105
+ const queryClient = useQueryClient();
106
+ return useCallback(
107
+ (account, messageId) => queryClient.ensureQueryData({
108
+ queryKey: mailQueryKeys2.message(account.id, messageId),
109
+ queryFn: () => client.getMessage(account, messageId),
110
+ networkMode: "always"
111
+ }),
112
+ [client, queryClient]
113
+ );
114
+ }
115
+ function decodeBase64Text(b64) {
116
+ const bytes = Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
117
+ return new TextDecoder().decode(bytes);
118
+ }
119
+ function useMailAttachmentText(accountId, messageId, attachment, options = {}) {
120
+ const { client } = useMailClient();
121
+ return useQuery({
122
+ queryKey: mailQueryKeys2.attachmentText(accountId, messageId, attachment?.id ?? ""),
123
+ queryFn: async () => {
124
+ const a = attachment;
125
+ if (a.content_base64) return decodeBase64Text(a.content_base64);
126
+ const path = `${accountPath(accountId)}/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(a.id)}`;
127
+ return (await client.fetch(path)).text();
128
+ },
129
+ enabled: !!attachment && (options.enabled ?? true),
130
+ staleTime: Infinity,
131
+ retry: false
132
+ });
133
+ }
134
+ function useClaimNativeAlias(onClaimed) {
135
+ const { client } = useMailClient();
136
+ const queryClient = useQueryClient();
137
+ return useMutation({
138
+ mutationFn: (alias) => mailJson(client.fetch, "/native/alias", { method: "POST", body: JSON.stringify({ alias }) }),
139
+ onSuccess: async (_data, alias) => {
140
+ await queryClient.invalidateQueries({ queryKey: mailQueryKeys2.all() });
141
+ onClaimed?.(alias);
142
+ }
143
+ });
144
+ }
145
+ function useClaimSecureMail() {
146
+ const arbi = useArbi();
147
+ const { client } = useMailClient();
148
+ const queryClient = useQueryClient();
149
+ const keys = useRef(/* @__PURE__ */ new Map());
150
+ const mutation = useMutation({
151
+ mutationFn: (id) => {
152
+ const fragmentKey = keys.current.get(id);
153
+ keys.current.delete(id);
154
+ if (!fragmentKey) return Promise.reject(new Error("Open the original link from your email"));
155
+ return arbi.secureMail.claim(id, fragmentKey, client.fetch);
156
+ },
157
+ networkMode: "always",
158
+ gcTime: 0,
159
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys2.all() })
160
+ });
161
+ const { mutateAsync } = mutation;
162
+ const claim = useCallback(
163
+ (id, fragmentKey) => {
164
+ keys.current.set(id, fragmentKey);
165
+ return mutateAsync(id);
166
+ },
167
+ [mutateAsync]
168
+ );
169
+ return { claim, isPending: mutation.isPending };
170
+ }
171
+ function useConnectMailAccount() {
172
+ const { client } = useMailClient();
173
+ const queryClient = useQueryClient();
174
+ return useMutation({
175
+ mutationFn: (input) => mailJson(client.fetch, "/accounts", {
176
+ method: "POST",
177
+ body: JSON.stringify({
178
+ profile_id: input.profileId,
179
+ email: input.email,
180
+ username: input.username || input.email,
181
+ password: input.password
182
+ })
183
+ }),
184
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys2.accounts() })
185
+ });
186
+ }
187
+ function useDisconnectMailAccount() {
188
+ const { client } = useMailClient();
189
+ const queryClient = useQueryClient();
190
+ return useMutation({
191
+ mutationFn: (accountId) => mailJson(client.fetch, accountPath(accountId), { method: "DELETE" }),
192
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys2.all() })
193
+ });
194
+ }
195
+ function useMailCache() {
196
+ const queryClient = useQueryClient();
197
+ return useMemo(() => {
198
+ const refreshAll = () => queryClient.invalidateQueries({ queryKey: mailQueryKeys2.all() });
199
+ return {
200
+ refreshAll,
201
+ refreshFolders: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys2.allFolders() }),
202
+ /**
203
+ * Show a flag change at once in every conversation list and thread read (the server's state
204
+ * follows on the next refresh).
205
+ */
206
+ showFlag: (accountId, messageIds, flagged, threadId) => {
207
+ const ids = new Set(messageIds);
208
+ const patch = (message) => ids.has(message.id) ? { ...message, flagged } : message;
209
+ queryClient.setQueriesData(
210
+ { queryKey: mailQueryKeys2.allConversations() },
211
+ (page) => page && {
212
+ ...page,
213
+ conversations: page.conversations.map((c) => {
214
+ const whole = threadId !== void 0 && c.thread_id === threadId;
215
+ if (!whole && !c.messages.some((m) => ids.has(m.id))) return c;
216
+ const messages = c.messages.map(patch);
217
+ return {
218
+ ...c,
219
+ messages,
220
+ flagged: whole ? flagged : messages.some((m) => m.flagged)
221
+ };
222
+ })
223
+ }
224
+ );
225
+ queryClient.setQueriesData(
226
+ { queryKey: mailQueryKeys2.accountThreads(accountId) },
227
+ (thread) => thread && { ...thread, messages: thread.messages.map(patch) }
228
+ );
229
+ }
230
+ };
231
+ }, [queryClient]);
232
+ }
233
+ async function withFallback(compose, fallback, online) {
234
+ if (fallback && !onlineManager.isOnline()) {
235
+ await fallback.keep(compose);
236
+ return { onDevice: true };
237
+ }
238
+ try {
239
+ return await online();
240
+ } catch (error) {
241
+ if (!fallback?.isNetworkFailure(error)) throw error;
242
+ await fallback.keep(compose);
243
+ return { onDevice: true };
244
+ }
245
+ }
246
+ function useSaveMailDraft(fallback) {
247
+ const { client } = useMailClient();
248
+ const queryClient = useQueryClient();
249
+ return useMutation({
250
+ // networkMode 'always': offline the save runs (to the device) instead of pausing on "Saving…".
251
+ networkMode: "always",
252
+ mutationFn: ({ accountId, compose }) => withFallback(
253
+ compose,
254
+ fallback,
255
+ () => mailJson(client.fetch, `${accountPath(accountId)}/drafts`, {
256
+ method: "POST",
257
+ body: JSON.stringify(compose)
258
+ })
259
+ ),
260
+ onSuccess: (result) => {
261
+ if (!("onDevice" in result))
262
+ void queryClient.invalidateQueries({ queryKey: mailQueryKeys2.allMessages() });
263
+ }
264
+ });
265
+ }
266
+ function useSendMail(fallback) {
267
+ const { client } = useMailClient();
268
+ const queryClient = useQueryClient();
269
+ return useMutation({
270
+ networkMode: "always",
271
+ retry: false,
272
+ mutationFn: ({
273
+ accountId,
274
+ compose,
275
+ requestId,
276
+ secure
277
+ }) => withFallback(
278
+ compose,
279
+ fallback,
280
+ async () => secure ? mailJson(client.fetch, "/secure/send", {
281
+ method: "POST",
282
+ body: JSON.stringify(await secure())
283
+ }) : mailJson(client.fetch, `${accountPath(accountId)}/send`, {
284
+ method: "POST",
285
+ body: JSON.stringify({ ...compose, request_id: requestId })
286
+ })
287
+ ),
288
+ onSuccess: (result) => {
289
+ if (!(result && typeof result === "object" && "onDevice" in result))
290
+ void queryClient.invalidateQueries({ queryKey: mailQueryKeys2.all() });
291
+ }
292
+ });
293
+ }
294
+ function useMailDraftEditor() {
295
+ const { client } = useMailClient();
296
+ const queryClient = useQueryClient();
297
+ return useMemo(() => {
298
+ const call = (roomId, path, payload) => mailJson(client.fetch, `/drafts/editor/${encodeURIComponent(roomId)}${path}`, {
299
+ method: "POST",
300
+ body: JSON.stringify(payload)
301
+ });
302
+ return {
303
+ /** Save as the draft: suggestions still waiting stay out of it. */
304
+ save: async (roomId, compose, state) => {
305
+ const saved = await call(roomId, "/save", { compose, state });
306
+ void queryClient.invalidateQueries({ queryKey: mailQueryKeys2.allMessages() });
307
+ return saved;
308
+ },
309
+ /** Send (refused, `status` 409, while suggestions wait). */
310
+ send: async (roomId, compose, state) => {
311
+ const sent = await call(roomId, "/send", { compose, state });
312
+ void queryClient.invalidateQueries({ queryKey: mailQueryKeys2.all() });
313
+ return sent;
314
+ },
315
+ /** The body as text and HTML (`final`: refused while suggestions wait). */
316
+ body: (roomId, final, state) => call(roomId, "/body", { final, state }),
317
+ /** Bill ARBI's work on this email to another project the person may bill (null: their own). */
318
+ setProject: (roomId, projectExtId) => mailJson(
319
+ client.fetch,
320
+ `/drafts/editor/${encodeURIComponent(roomId)}/project`,
321
+ { method: "PUT", body: JSON.stringify({ project_ext_id: projectExtId }) }
322
+ )
323
+ };
324
+ }, [client, queryClient]);
325
+ }
326
+ function useMailProjects(options = {}) {
327
+ const { client } = useMailClient();
328
+ return useQuery({
329
+ queryKey: mailQueryKeys2.projects(),
330
+ queryFn: () => mailJson(client.fetch, "/drafts/editor/projects"),
331
+ enabled: options.enabled ?? true,
332
+ staleTime: 6e4
333
+ });
334
+ }
335
+ function useMailDraftCompose(account, draftId, prepare, options = {}) {
336
+ return useQuery({
337
+ queryKey: mailQueryKeys2.draftCompose(account?.id, draftId),
338
+ queryFn: () => prepare(account, draftId),
339
+ networkMode: "always",
340
+ enabled: !!account && !!draftId && (options.enabled ?? true),
341
+ retry: false,
342
+ staleTime: Infinity
343
+ });
344
+ }
345
+ const MAIL_DRAFT_REPLACED_EVENT = "arbi:mail-draft-replaced";
346
+ function announceMailDraftReplaced(oldId, newId) {
347
+ window.dispatchEvent(
348
+ new CustomEvent(MAIL_DRAFT_REPLACED_EVENT, { detail: { oldId, newId } })
349
+ );
350
+ }
351
+ function useMailDraftReplaced(draftId, onReplaced) {
352
+ const latest = useRef(onReplaced);
353
+ useEffect(() => {
354
+ latest.current = onReplaced;
355
+ });
356
+ useEffect(() => {
357
+ if (!draftId) return;
358
+ const listener = (event) => {
359
+ const { oldId, newId } = event.detail;
360
+ if (oldId === draftId) latest.current(newId);
361
+ };
362
+ window.addEventListener(MAIL_DRAFT_REPLACED_EVENT, listener);
363
+ return () => window.removeEventListener(MAIL_DRAFT_REPLACED_EVENT, listener);
364
+ }, [draftId]);
365
+ }
366
+ export {
367
+ MAIL_DRAFT_REPLACED_EVENT,
368
+ announceMailDraftReplaced,
369
+ mailQueryKeys,
370
+ useClaimNativeAlias,
371
+ useClaimSecureMail,
372
+ useConnectMailAccount,
373
+ useDisconnectMailAccount,
374
+ useMailAccounts,
375
+ useMailAttachmentText,
376
+ useMailCache,
377
+ useMailConversations,
378
+ useMailDraftCompose,
379
+ useMailDraftEditor,
380
+ useMailDraftReplaced,
381
+ useMailFolders,
382
+ useMailMessage,
383
+ useMailMessages,
384
+ useMailOnline,
385
+ useMailPolicy,
386
+ useMailProjects,
387
+ useMailThread,
388
+ useMailUnlock,
389
+ useReadMailMessage,
390
+ useSaveMailDraft,
391
+ useSendMail
392
+ };
393
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/mail/hooks.ts"],
4
+ "sourcesContent": ["/**\n * Mail hooks: the policy, accounts, folders and messages of the mail client in scope\n * (`useMailClient`), unlocking an account for this session, and the account writes.\n *\n * Reads use `networkMode: 'always'`, so a host whose client answers from the device keeps working\n * offline instead of pausing on a loading state. Every key starts with `['arbi', 'mail']`\n * ({@link mailQueryKeys}), so invalidating that refreshes everything mail.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from 'react'\nimport { onlineManager, useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { accountPath, mailJson } from './client'\nimport { useMailClient } from './useMailClient'\nimport { useArbi } from '../useArbi'\nimport type { MailProject } from './client'\nimport type {\n MailAccount,\n MailAttachment,\n MailCompose,\n MailConversationPage,\n MailDeliveryStatus,\n MailMessage,\n MailThread,\n} from './types'\n\nexport { mailQueryKeys } from '../query-keys'\nimport { mailQueryKeys } from '../query-keys'\n\n/** Whether the app is online (React Query's `onlineManager`). */\nexport function useMailOnline(): boolean {\n return useSyncExternalStore(\n (onChange) => onlineManager.subscribe(onChange),\n () => onlineManager.isOnline(),\n () => true\n )\n}\n\n/** What the deployment allows: native mail, OAuth providers, mail servers, the attachment limit. */\nexport function useMailPolicy(options: { enabled?: boolean } = {}) {\n const { client, enabled } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.policy(),\n queryFn: () => client.getPolicy(),\n networkMode: 'always',\n enabled: enabled && (options.enabled ?? true),\n staleTime: 60_000,\n retry: false,\n })\n}\n\nexport function useMailAccounts(options: { enabled?: boolean } = {}) {\n const { client, enabled } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.accounts(),\n queryFn: () => client.listAccounts(),\n networkMode: 'always',\n enabled: enabled && (options.enabled ?? true),\n retry: false,\n })\n}\n\n/**\n * Unlock `account` for this session. It waits for a connection (offline, a host that keeps mail on\n * the device reads from there and queues sends), then runs once per session.\n */\nexport function useMailUnlock(account: MailAccount | undefined) {\n const { client, enabled, sessionKey } = useMailClient()\n const isOnline = useMailOnline()\n return useQuery({\n queryKey: mailQueryKeys.unlock(account?.id, sessionKey),\n queryFn: async () => {\n if (!account) throw new Error('Sign in to unlock your mailbox')\n await client.unlock(account)\n return true\n },\n enabled: enabled && !!account && sessionKey !== null && !account.needs_reconsent && isOnline,\n staleTime: Infinity,\n retry: false,\n })\n}\n\nexport function useMailFolders(account: MailAccount | undefined, options: { enabled?: boolean }) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.folders(account?.id),\n queryFn: () => client.listFolders(account!),\n networkMode: 'always',\n enabled: !!account && (options.enabled ?? true),\n retry: false,\n })\n}\n\n/** One page of a folder, filtered by `query`, from `cursor` (`null`: the first page). */\nexport function useMailMessages(\n account: MailAccount | undefined,\n folderId: string | undefined,\n query: string,\n cursor: string | null,\n options: { enabled?: boolean; refetchInterval?: number } = {}\n) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.messages(account?.id, folderId, query, cursor),\n queryFn: () => client.listMessages(account!, folderId!, query, cursor),\n networkMode: 'always',\n enabled: !!account && !!folderId && (options.enabled ?? true),\n retry: false,\n refetchInterval: options.refetchInterval,\n })\n}\n\n/**\n * One page of a folder's conversations, filtered by `query`, from `cursor` (`null`: the first page).\n * Offline, a host whose client keeps mail on the device groups its copy the same way.\n */\nexport function useMailConversations(\n account: MailAccount | undefined,\n folderId: string | undefined,\n query: string,\n cursor: string | null,\n options: { enabled?: boolean; refetchInterval?: number } = {}\n) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.conversations(account?.id, folderId, query, cursor),\n queryFn: () => client.listConversations(account!, folderId!, query, cursor),\n networkMode: 'always',\n enabled: !!account && !!folderId && (options.enabled ?? true),\n retry: false,\n refetchInterval: options.refetchInterval,\n })\n}\n\n/** One conversation's messages, oldest first, opened from `folderId`. */\nexport function useMailThread(\n account: MailAccount | undefined,\n threadId: string | null | undefined,\n folderId: string | undefined,\n options: { enabled?: boolean } = {}\n) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.thread(account?.id, threadId, folderId),\n queryFn: () => client.getThread(account!, threadId!, folderId ?? ''),\n networkMode: 'always',\n enabled: !!account && !!threadId && (options.enabled ?? true),\n retry: false,\n })\n}\n\nexport function useMailMessage(\n account: MailAccount | undefined,\n messageId: string | null | undefined,\n options: { enabled?: boolean } = {}\n) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.message(account?.id, messageId),\n queryFn: () => client.getMessage(account!, messageId!),\n networkMode: 'always',\n enabled: !!account && !!messageId && (options.enabled ?? true),\n retry: false,\n })\n}\n\n/**\n * Read a message in full when an action needs it (replying, forwarding, printing): the cached read\n * when it was opened, else one read now.\n */\nexport function useReadMailMessage() {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useCallback(\n (account: MailAccount, messageId: string) =>\n queryClient.ensureQueryData({\n queryKey: mailQueryKeys.message(account.id, messageId),\n queryFn: () => client.getMessage(account, messageId),\n networkMode: 'always',\n }),\n [client, queryClient]\n )\n}\n\nfunction decodeBase64Text(b64: string): string {\n const bytes = Uint8Array.from(atob(b64), (c) => c.charCodeAt(0))\n return new TextDecoder().decode(bytes)\n}\n\n/**\n * A text attachment's content (an invitation's `.ics`, say): inline when the message carries it,\n * else downloaded once. Off while `attachment` is missing or `enabled` is false.\n */\nexport function useMailAttachmentText(\n accountId: string,\n messageId: string,\n attachment: MailAttachment | undefined,\n options: { enabled?: boolean } = {}\n) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.attachmentText(accountId, messageId, attachment?.id ?? ''),\n queryFn: async () => {\n const a = attachment as MailAttachment\n if (a.content_base64) return decodeBase64Text(a.content_base64)\n const path = `${accountPath(accountId)}/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(a.id)}`\n return (await client.fetch(path)).text()\n },\n enabled: !!attachment && (options.enabled ?? true),\n staleTime: Infinity,\n retry: false,\n })\n}\n\n/** Claim `alias@<deployment domain>` as the user's native inbox, then refresh everything mail. */\nexport function useClaimNativeAlias(onClaimed?: (alias: string) => void) {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMutation({\n mutationFn: (alias: string) =>\n mailJson(client.fetch, '/native/alias', { method: 'POST', body: JSON.stringify({ alias }) }),\n onSuccess: async (_data, alias) => {\n await queryClient.invalidateQueries({ queryKey: mailQueryKeys.all() })\n onClaimed?.(alias)\n },\n })\n}\n\n/**\n * Claim a secure message from its link (`id` and the link's key) into the user's native inbox\n * (`arbi.secureMail.claim` over the mail client in scope), then refresh everything mail. `claim`\n * resolves to the message's id there.\n *\n * The link's key is never a mutation variable: variables stay in the query client's mutation\n * cache, which a host may inspect or persist. Only the id is; the key is handed to the request\n * beside it and dropped once it is sent. Offline, the claim fails at once rather than waiting\n * for the network (`networkMode: 'always'`).\n */\nexport function useClaimSecureMail(): {\n claim: (id: string, fragmentKey: string) => Promise<{ id: string }>\n isPending: boolean\n} {\n const arbi = useArbi()\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n const keys = useRef(new Map<string, string>())\n const mutation = useMutation({\n mutationFn: (id: string) => {\n const fragmentKey = keys.current.get(id)\n keys.current.delete(id)\n if (!fragmentKey) return Promise.reject(new Error('Open the original link from your email'))\n return arbi.secureMail.claim(id, fragmentKey, client.fetch)\n },\n networkMode: 'always',\n gcTime: 0,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.all() }),\n })\n const { mutateAsync } = mutation\n const claim = useCallback(\n (id: string, fragmentKey: string) => {\n keys.current.set(id, fragmentKey)\n return mutateAsync(id)\n },\n [mutateAsync]\n )\n return { claim, isPending: mutation.isPending }\n}\n\n/** Connect a mailbox on one of the deployment's approved mail servers. */\nexport function useConnectMailAccount() {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMutation({\n mutationFn: (input: { profileId: string; email: string; username: string; password: string }) =>\n mailJson(client.fetch, '/accounts', {\n method: 'POST',\n body: JSON.stringify({\n profile_id: input.profileId,\n email: input.email,\n username: input.username || input.email,\n password: input.password,\n }),\n }),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.accounts() }),\n })\n}\n\nexport function useDisconnectMailAccount() {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMutation({\n mutationFn: (accountId: string) =>\n mailJson(client.fetch, accountPath(accountId), { method: 'DELETE' }),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.all() }),\n })\n}\n\n/** Refresh mail reads after a write the hooks below don't cover. */\nexport function useMailCache() {\n const queryClient = useQueryClient()\n return useMemo(() => {\n const refreshAll = () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.all() })\n return {\n refreshAll,\n refreshFolders: () => queryClient.invalidateQueries({ queryKey: mailQueryKeys.allFolders() }),\n /**\n * Show a flag change at once in every conversation list and thread read (the server's state\n * follows on the next refresh).\n */\n showFlag: (accountId: string, messageIds: string[], flagged: boolean, threadId?: string) => {\n const ids = new Set(messageIds)\n const patch = (message: MailMessage) =>\n ids.has(message.id) ? { ...message, flagged } : message\n queryClient.setQueriesData<MailConversationPage>(\n { queryKey: mailQueryKeys.allConversations() },\n (page) =>\n page && {\n ...page,\n conversations: page.conversations.map((c) => {\n const whole = threadId !== undefined && c.thread_id === threadId\n if (!whole && !c.messages.some((m) => ids.has(m.id))) return c\n const messages = c.messages.map(patch)\n // A row may carry only the newest message: a change to the whole thread sets its flag.\n return {\n ...c,\n messages,\n flagged: whole ? flagged : messages.some((m) => m.flagged),\n }\n }),\n }\n )\n queryClient.setQueriesData<MailThread>(\n { queryKey: mailQueryKeys.accountThreads(accountId) },\n (thread) => thread && { ...thread, messages: thread.messages.map(patch) }\n )\n },\n }\n }, [queryClient])\n}\n\n/** Where a message goes when the server can't be reached: kept on the device (a host option). */\nexport interface MailDeviceFallback {\n /** Keep it on the device; called offline, or when the request got no answer. */\n keep: (compose: MailCompose) => Promise<void>\n /** The request got no answer (no connection), as opposed to the server refusing it. */\n isNetworkFailure: (error: unknown) => boolean\n}\n\nasync function withFallback<T>(\n compose: MailCompose,\n fallback: MailDeviceFallback | undefined,\n online: () => Promise<T>\n): Promise<T | { onDevice: true }> {\n if (fallback && !onlineManager.isOnline()) {\n await fallback.keep(compose)\n return { onDevice: true }\n }\n try {\n return await online()\n } catch (error) {\n if (!fallback?.isNetworkFailure(error)) throw error\n await fallback.keep(compose)\n return { onDevice: true }\n }\n}\n\n/**\n * Save a draft to the account's Drafts. With `fallback`, offline (or with no answer) it is kept on\n * the device instead (`{ onDevice: true }`).\n */\nexport function useSaveMailDraft(fallback?: MailDeviceFallback) {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMutation({\n // networkMode 'always': offline the save runs (to the device) instead of pausing on \"Saving\u2026\".\n networkMode: 'always',\n mutationFn: ({ accountId, compose }: { accountId: string; compose: MailCompose }) =>\n withFallback(compose, fallback, () =>\n mailJson<{ id: string }>(client.fetch, `${accountPath(accountId)}/drafts`, {\n method: 'POST',\n body: JSON.stringify(compose),\n })\n ),\n onSuccess: (result) => {\n if (!('onDevice' in result))\n void queryClient.invalidateQueries({ queryKey: mailQueryKeys.allMessages() })\n },\n })\n}\n\n/**\n * Send a message. `requestId` makes it idempotent: sending the same request again never sends twice.\n * `secure` sends it by secure delivery instead (resolves with the prepared payload). With\n * `fallback`, offline (or with no answer) it waits on the device (`{ onDevice: true }`).\n */\nexport function useSendMail(fallback?: MailDeviceFallback) {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMutation({\n networkMode: 'always',\n retry: false,\n mutationFn: ({\n accountId,\n compose,\n requestId,\n secure,\n }: {\n accountId: string\n compose: MailCompose\n requestId: string\n secure?: () => Promise<unknown>\n }) =>\n withFallback(compose, fallback, async () =>\n secure\n ? mailJson<unknown>(client.fetch, '/secure/send', {\n method: 'POST',\n body: JSON.stringify(await secure()),\n })\n : mailJson<unknown>(client.fetch, `${accountPath(accountId)}/send`, {\n method: 'POST',\n body: JSON.stringify({ ...compose, request_id: requestId }),\n })\n ),\n onSuccess: (result) => {\n if (!(result && typeof result === 'object' && 'onDevice' in result))\n void queryClient.invalidateQueries({ queryKey: mailQueryKeys.all() })\n },\n })\n}\n\n/**\n * A native draft's Word room (opened with `MailClient.openDraftEditor`): save it as the draft, send\n * it, or read its body. The server makes the draft's text and HTML from the room; `state` is the\n * editor's latest state, so the last keystrokes are included.\n */\nexport function useMailDraftEditor() {\n const { client } = useMailClient()\n const queryClient = useQueryClient()\n return useMemo(() => {\n const call = <T>(roomId: string, path: string, payload: object) =>\n mailJson<T>(client.fetch, `/drafts/editor/${encodeURIComponent(roomId)}${path}`, {\n method: 'POST',\n body: JSON.stringify(payload),\n })\n return {\n /** Save as the draft: suggestions still waiting stay out of it. */\n save: async (roomId: string, compose: MailCompose, state?: string | null) => {\n const saved = await call<{ id: string }>(roomId, '/save', { compose, state })\n void queryClient.invalidateQueries({ queryKey: mailQueryKeys.allMessages() })\n return saved\n },\n /** Send (refused, `status` 409, while suggestions wait). */\n send: async (\n roomId: string,\n compose: MailCompose & { request_id: string },\n state?: string | null\n ) => {\n const sent = await call<{\n id: string\n status: string\n delivery_status?: MailDeliveryStatus | null\n }>(roomId, '/send', { compose, state })\n void queryClient.invalidateQueries({ queryKey: mailQueryKeys.all() })\n return sent\n },\n /** The body as text and HTML (`final`: refused while suggestions wait). */\n body: (roomId: string, final: boolean, state?: string | null) =>\n call<{ text: string; html: string }>(roomId, '/body', { final, state }),\n /** Bill ARBI's work on this email to another project the person may bill (null: their own). */\n setProject: (roomId: string, projectExtId: string | null) =>\n mailJson<MailProject>(\n client.fetch,\n `/drafts/editor/${encodeURIComponent(roomId)}/project`,\n { method: 'PUT', body: JSON.stringify({ project_ext_id: projectExtId }) }\n ),\n }\n }, [client, queryClient])\n}\n\n/** The projects an email's AI work can be billed to: the person's own first, then their matters. */\nexport function useMailProjects(options: { enabled?: boolean } = {}) {\n const { client } = useMailClient()\n return useQuery({\n queryKey: mailQueryKeys.projects(),\n queryFn: () => mailJson<MailProject[]>(client.fetch, '/drafts/editor/projects'),\n enabled: options.enabled ?? true,\n staleTime: 60_000,\n })\n}\n\n/** A saved draft prepared for editing by `prepare` (e.g. with its attachments' content). */\nexport function useMailDraftCompose(\n account: MailAccount | undefined,\n draftId: string | undefined,\n prepare: (account: MailAccount, draftId: string) => Promise<MailCompose>,\n options: { enabled?: boolean } = {}\n) {\n return useQuery({\n queryKey: mailQueryKeys.draftCompose(account?.id, draftId),\n queryFn: () => prepare(account!, draftId!),\n networkMode: 'always',\n enabled: !!account && !!draftId && (options.enabled ?? true),\n retry: false,\n staleTime: Infinity,\n })\n}\n\n/** Fired on `window` when a saved draft now lives under a new id (saving a native draft replaces it). */\nexport const MAIL_DRAFT_REPLACED_EVENT = 'arbi:mail-draft-replaced'\n\ninterface MailDraftReplaced {\n oldId: string\n newId: string\n}\n\n/** Announce that draft `oldId` is now `newId`: the host calls it on the server's `mail.draft_replaced`. */\nexport function announceMailDraftReplaced(oldId: string, newId: string): void {\n window.dispatchEvent(\n new CustomEvent<MailDraftReplaced>(MAIL_DRAFT_REPLACED_EVENT, { detail: { oldId, newId } })\n )\n}\n\n/** Call `onReplaced(newId)` when draft `draftId` is saved again elsewhere (by ARBI, or in another tab). */\nexport function useMailDraftReplaced(\n draftId: string | null | undefined,\n onReplaced: (newId: string) => void\n): void {\n const latest = useRef(onReplaced)\n useEffect(() => {\n latest.current = onReplaced\n })\n useEffect(() => {\n if (!draftId) return\n const listener = (event: Event) => {\n const { oldId, newId } = (event as CustomEvent<MailDraftReplaced>).detail\n if (oldId === draftId) latest.current(newId)\n }\n window.addEventListener(MAIL_DRAFT_REPLACED_EVENT, listener)\n return () => window.removeEventListener(MAIL_DRAFT_REPLACED_EVENT, listener)\n }, [draftId])\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["mailQueryKeys"]
7
+ }