@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,226 @@
1
+ import { buildCallLink } from "@arbidocs/client";
2
+ import { CallApiError } from "@arbidocs/sdk/browser";
3
+ import { notify } from "../notifications/notify-store.js";
4
+ import {
5
+ callSession,
6
+ DEFAULT_JOIN_CHOICES
7
+ } from "./session.js";
8
+ function callLink(callExtId, key, linkVersion) {
9
+ return buildCallLink(window.location.origin, callExtId, key, linkVersion);
10
+ }
11
+ function alreadyInCall(callExtId) {
12
+ const active = callSession.getState().active;
13
+ if (!active || active.callExtId === callExtId) return false;
14
+ notify.warning("You are already in a call. Leave it first.");
15
+ return true;
16
+ }
17
+ function fail(err, what = "start the call") {
18
+ console.error(`[calls] failed to ${what}`, err);
19
+ const message = err instanceof Error ? err.message : "Unknown error";
20
+ notify.error(`Could not ${what}: ${message}`);
21
+ }
22
+ function callContext(call) {
23
+ return {
24
+ chatExtId: call.chat_ext_id ?? null,
25
+ logConversationExtId: call.log_conversation_ext_id ?? null,
26
+ meetingConversationExtId: call.meeting_conversation_ext_id ?? null,
27
+ lockedWorkspaceExtId: call.locked_workspace_ext_id ?? null
28
+ };
29
+ }
30
+ async function sendInviteLinks(arbi, callExtId, key, linkVersion, invites) {
31
+ let sent = 0;
32
+ for (const invite of invites) {
33
+ try {
34
+ await arbi.calls.inviteLinks.create(callExtId, {
35
+ contact_ext_id: invite.contactExtId,
36
+ link: callLink(callExtId, key, linkVersion)
37
+ });
38
+ sent += 1;
39
+ } catch (err) {
40
+ fail(err, `invite ${invite.name || "a contact"}`);
41
+ }
42
+ }
43
+ if (sent) notify.success(`Sent ${sent} ${sent === 1 ? "invitation" : "invitations"}`);
44
+ return sent;
45
+ }
46
+ async function startCall(arbi, opts) {
47
+ if (alreadyInCall()) return false;
48
+ try {
49
+ const {
50
+ call,
51
+ key,
52
+ title,
53
+ sealedKeys: ringOnJoin
54
+ } = await arbi.calls.start({ ...opts.context, title: opts.title, invitees: opts.ring });
55
+ callSession.setActiveCall({
56
+ callExtId: call.external_id,
57
+ key,
58
+ linkVersion: call.link_version,
59
+ title,
60
+ isCreator: call.is_creator,
61
+ ...callContext(call),
62
+ phase: "prejoin",
63
+ tokenResponse: null,
64
+ choices: null,
65
+ knock: null,
66
+ ringOnJoin: Object.keys(ringOnJoin).length ? ringOnJoin : null
67
+ });
68
+ if (opts.invites?.length) {
69
+ void sendInviteLinks(arbi, call.external_id, key, call.link_version, opts.invites);
70
+ }
71
+ return true;
72
+ } catch (err) {
73
+ fail(err);
74
+ return false;
75
+ }
76
+ }
77
+ function startThreadCall(arbi, opts) {
78
+ return startCall(arbi, {
79
+ context: { threadExtId: opts.threadExtId },
80
+ title: opts.title,
81
+ ring: opts.ring
82
+ });
83
+ }
84
+ function startChatCall(arbi, opts) {
85
+ return startCall(arbi, {
86
+ context: { chatExtId: opts.chatExtId },
87
+ title: opts.title,
88
+ ring: opts.ring
89
+ });
90
+ }
91
+ async function startDmCall(arbi, peer) {
92
+ if (alreadyInCall()) return false;
93
+ if (!peer.encryption_public_key) {
94
+ fail(new Error("This person cannot receive encrypted calls"));
95
+ return false;
96
+ }
97
+ let chatExtId;
98
+ try {
99
+ chatExtId = (await arbi.chats.openDirect(peer.external_id)).external_id;
100
+ } catch (err) {
101
+ fail(err);
102
+ return false;
103
+ }
104
+ return startChatCall(arbi, { chatExtId, title: peer.name ?? null, ring: [peer] });
105
+ }
106
+ function startContactsCall(arbi, opts) {
107
+ return startCall(arbi, { context: {}, title: opts.title, ring: opts.ring, invites: opts.invites });
108
+ }
109
+ async function openCall(arbi, opts) {
110
+ if (alreadyInCall(opts.callExtId)) return false;
111
+ try {
112
+ const { call, key, title } = await arbi.calls.open(opts.callExtId, opts.key);
113
+ callSession.setActiveCall({
114
+ callExtId: call.external_id,
115
+ key,
116
+ linkVersion: opts.linkVersion ?? call.link_version,
117
+ title,
118
+ isCreator: call.is_creator,
119
+ ...callContext(call),
120
+ phase: "prejoin",
121
+ tokenResponse: null,
122
+ choices: null,
123
+ knock: null,
124
+ ringOnJoin: null,
125
+ inviteToken: opts.inviteToken ?? null
126
+ });
127
+ return true;
128
+ } catch (err) {
129
+ fail(err, "open the call");
130
+ return false;
131
+ }
132
+ }
133
+ async function acceptRing(arbi, ring) {
134
+ const current = callSession.getState().active;
135
+ if (current && current.callExtId !== ring.call_ext_id) callSession.endActiveCall();
136
+ try {
137
+ const { key, token, title } = await arbi.calls.answer(ring);
138
+ callSession.setActiveCall({
139
+ callExtId: ring.call_ext_id,
140
+ key,
141
+ linkVersion: ring.link_version,
142
+ title: title || ring.caller_name,
143
+ isCreator: false,
144
+ chatExtId: ring.chat_ext_id ?? null,
145
+ logConversationExtId: ring.log_conversation_ext_id ?? null,
146
+ meetingConversationExtId: ring.meeting_conversation_ext_id ?? null,
147
+ lockedWorkspaceExtId: ring.context === "thread" ? ring.workspace_ext_id ?? null : null,
148
+ phase: "connected",
149
+ tokenResponse: token,
150
+ choices: DEFAULT_JOIN_CHOICES,
151
+ knock: null,
152
+ ringOnJoin: null
153
+ });
154
+ return true;
155
+ } catch (err) {
156
+ fail(err, "join the call");
157
+ callSession.removeIncomingCall(ring.call_ext_id);
158
+ return false;
159
+ }
160
+ }
161
+ function declineRing(arbi, ring) {
162
+ callSession.removeIncomingCall(ring.call_ext_id);
163
+ arbi.calls.decline(ring.call_ext_id).catch((err) => console.warn("[calls] decline failed", err));
164
+ }
165
+ const KNOCK_POLL_MS = 2e3;
166
+ async function waitForAdmission(arbi, callExtId, knock, signal) {
167
+ for (; ; ) {
168
+ if (signal.aborted) throw new DOMException("Stopped waiting", "AbortError");
169
+ await new Promise((resolve) => setTimeout(resolve, KNOCK_POLL_MS));
170
+ if (signal.aborted) throw new DOMException("Stopped waiting", "AbortError");
171
+ const state = await arbi.calls.pollKnock(callExtId, knock.knock_id);
172
+ if (state.status === "admitted" && state.token) return state.token;
173
+ if (state.status === "denied") throw new CallApiError("The host declined your request.", 403);
174
+ if (state.status === "expired") throw new CallApiError("Nobody let you in. Try again.", 410);
175
+ }
176
+ }
177
+ async function joinFromPreJoin(arbi, choices) {
178
+ const active = callSession.getState().active;
179
+ if (!active) return;
180
+ const { callExtId, linkVersion, inviteToken } = active;
181
+ const update = (patch) => callSession.updateActiveCall(callExtId, patch);
182
+ try {
183
+ let tokenResponse;
184
+ try {
185
+ tokenResponse = await arbi.calls.token(callExtId, linkVersion, inviteToken);
186
+ } catch (err) {
187
+ if (!(err instanceof CallApiError && err.code === "knock_required")) throw err;
188
+ const knock = await arbi.calls.knock(callExtId, linkVersion);
189
+ if (knock.status === "admitted" && knock.token) tokenResponse = knock.token;
190
+ else {
191
+ const controller = new AbortController();
192
+ update({ phase: "knocking", choices, knock: { abort: () => controller.abort() } });
193
+ tokenResponse = await waitForAdmission(arbi, callExtId, knock, controller.signal);
194
+ }
195
+ }
196
+ if (callSession.getState().active?.callExtId !== callExtId) return;
197
+ update({ phase: "connected", tokenResponse, choices, knock: null });
198
+ const ring = active.ringOnJoin;
199
+ if (ring && Object.keys(ring).length) {
200
+ update({ ringOnJoin: null });
201
+ await arbi.calls.ring(callExtId, ring, linkVersion).catch((err) => console.warn("[calls] ring failed", err));
202
+ }
203
+ } catch (err) {
204
+ if (err instanceof DOMException && err.name === "AbortError") return;
205
+ if (err instanceof CallApiError && err.code === "webinar_not_live") {
206
+ update({ phase: "webinar-waiting", choices, knock: null });
207
+ return;
208
+ }
209
+ fail(err, "join the call");
210
+ if (callSession.getState().active?.callExtId === callExtId) {
211
+ callSession.endActiveCall();
212
+ }
213
+ }
214
+ }
215
+ export {
216
+ acceptRing,
217
+ callLink,
218
+ declineRing,
219
+ joinFromPreJoin,
220
+ openCall,
221
+ startChatCall,
222
+ startContactsCall,
223
+ startDmCall,
224
+ startThreadCall
225
+ };
226
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/calls/actions.ts"],
4
+ "sourcesContent": ["/**\n * Call actions \u2014 usable outside React (buttons, notification actions, the WS\n * ringer). One call system: every call has a random key K made in the\n * creator's browser (see `@arbidocs/client` call-keys):\n *\n * - start (thread / chat / contacts): generate K, create the call with K\n * sealed to ourselves and to the people picked, show the pre-join; on\n * join, ring them. Nobody else is rung: a thread call rings only the\n * members picked, never the whole workspace. Unregistered contacts get a\n * personal invite link by e-mail instead (register, then straight into the\n * call \u2014 there are no anonymous guests);\n * - accept a ring: open K from the ring's sealed blob and join at once;\n * - open a call (link / calendar event / notification): K from the link fragment,\n * else our sealed copy on the server.\n *\n * A thread call is get-or-create: if the thread already has a running call we\n * hold the key for, we join that one instead of starting another.\n */\n\nimport { buildCallLink, type CallPeer } from '@arbidocs/client'\nimport { CallApiError, type Arbi, type calls } from '@arbidocs/sdk/browser'\nimport { notify } from '../notifications/notify-store'\nimport {\n callSession,\n DEFAULT_JOIN_CHOICES,\n type ActiveCall,\n type IncomingCall,\n type JoinChoices,\n} from './session'\n\nexport type { CallPeer }\n\n/** `https://<host>/call/<id>#k=\u2026&v=\u2026` \u2014 the shareable link. */\nexport function callLink(callExtId: string, key: Uint8Array, linkVersion: number): string {\n return buildCallLink(window.location.origin, callExtId, key, linkVersion)\n}\n\nfunction alreadyInCall(callExtId?: string): boolean {\n const active = callSession.getState().active\n if (!active || active.callExtId === callExtId) return false\n notify.warning('You are already in a call. Leave it first.')\n return true\n}\n\nfunction fail(err: unknown, what = 'start the call') {\n console.error(`[calls] failed to ${what}`, err)\n const message = err instanceof Error ? err.message : 'Unknown error'\n notify.error(`Could not ${what}: ${message}`)\n}\n\n/** Where a call belongs, for the active call (and the in-call chat). */\nfunction callContext(\n call: Pick<\n calls.CallResponse,\n | 'chat_ext_id'\n | 'log_conversation_ext_id'\n | 'meeting_conversation_ext_id'\n | 'locked_workspace_ext_id'\n >\n): Pick<\n ActiveCall,\n 'chatExtId' | 'logConversationExtId' | 'meetingConversationExtId' | 'lockedWorkspaceExtId'\n> {\n return {\n chatExtId: call.chat_ext_id ?? null,\n logConversationExtId: call.log_conversation_ext_id ?? null,\n meetingConversationExtId: call.meeting_conversation_ext_id ?? null,\n lockedWorkspaceExtId: call.locked_workspace_ext_id ?? null,\n }\n}\n\n/** An unregistered contact who gets a personal invite link by e-mail. */\nexport interface CallInviteContact {\n contactExtId: string\n /** The name they are invited under; encrypted under K. */\n name: string\n}\n\n/**\n * Mail each contact a personal invite link: an ARBI registration link that, once they have an\n * account, opens `/call/<id>?i=<token>#k=\u2026` and admits them straight into the call. Best effort: a\n * failure for one contact is reported and does not stop the others. Resolves to how many went out.\n */\nasync function sendInviteLinks(\n arbi: Arbi,\n callExtId: string,\n key: Uint8Array,\n linkVersion: number,\n invites: CallInviteContact[]\n): Promise<number> {\n let sent = 0\n for (const invite of invites) {\n try {\n await arbi.calls.inviteLinks.create(callExtId, {\n contact_ext_id: invite.contactExtId,\n link: callLink(callExtId, key, linkVersion),\n })\n sent += 1\n } catch (err) {\n fail(err, `invite ${invite.name || 'a contact'}`)\n }\n }\n if (sent) notify.success(`Sent ${sent} ${sent === 1 ? 'invitation' : 'invitations'}`)\n return sent\n}\n\n/**\n * Create a call and open its pre-join. `ring` are invited now (K sealed to each) and rung when we\n * join; `invites` get a personal invite link by e-mail straight away.\n */\nasync function startCall(\n arbi: Arbi,\n opts: {\n context: { chatExtId?: string | null; threadExtId?: string | null }\n title?: string | null\n ring: CallPeer[]\n invites?: CallInviteContact[]\n }\n): Promise<boolean> {\n if (alreadyInCall()) return false\n try {\n const {\n call,\n key,\n title,\n sealedKeys: ringOnJoin,\n } = await arbi.calls.start({ ...opts.context, title: opts.title, invitees: opts.ring })\n callSession.setActiveCall({\n callExtId: call.external_id,\n key,\n linkVersion: call.link_version,\n title,\n isCreator: call.is_creator,\n ...callContext(call),\n phase: 'prejoin',\n tokenResponse: null,\n choices: null,\n knock: null,\n ringOnJoin: Object.keys(ringOnJoin).length ? ringOnJoin : null,\n })\n if (opts.invites?.length) {\n void sendInviteLinks(arbi, call.external_id, key, call.link_version, opts.invites)\n }\n return true\n } catch (err) {\n fail(err)\n return false\n }\n}\n\n/**\n * A thread call (shared threads only): locked to the thread's workspace and logged in the thread.\n * Get-or-create: a running call on the thread is joined. Only `ring` (the members picked) are rung.\n */\nexport function startThreadCall(\n arbi: Arbi,\n opts: {\n threadExtId: string\n title?: string | null\n ring: CallPeer[]\n }\n): Promise<boolean> {\n return startCall(arbi, {\n context: { threadExtId: opts.threadExtId },\n title: opts.title,\n ring: opts.ring,\n })\n}\n\n/** A chat's call (a DM or a group): the chat is its meeting chat. `ring` are rung when we join. */\nexport function startChatCall(\n arbi: Arbi,\n opts: {\n chatExtId: string\n title?: string | null\n ring: CallPeer[]\n }\n): Promise<boolean> {\n return startCall(arbi, {\n context: { chatExtId: opts.chatExtId },\n title: opts.title,\n ring: opts.ring,\n })\n}\n\n/** Call a person: the call of our direct chat (made if missing), ringing them. */\nexport async function startDmCall(\n arbi: Arbi,\n peer: CallPeer & { name?: string | null }\n): Promise<boolean> {\n if (alreadyInCall()) return false\n if (!peer.encryption_public_key) {\n fail(new Error('This person cannot receive encrypted calls'))\n return false\n }\n let chatExtId: string\n try {\n chatExtId = (await arbi.chats.openDirect(peer.external_id)).external_id\n } catch (err) {\n fail(err)\n return false\n }\n return startChatCall(arbi, { chatExtId, title: peer.name ?? null, ring: [peer] })\n}\n\n/**\n * A contacts call (\"New call\"): registered contacts are rung, unregistered ones get a personal invite\n * link. Its meeting chat is made on first use.\n */\nexport function startContactsCall(\n arbi: Arbi,\n opts: {\n title?: string | null\n ring: CallPeer[]\n invites: CallInviteContact[]\n }\n): Promise<boolean> {\n return startCall(arbi, { context: {}, title: opts.title, ring: opts.ring, invites: opts.invites })\n}\n\n/**\n * Open a call by id (link, upcoming list, notification) into the pre-join.\n * `key` comes from the link fragment; without it we use our sealed copy.\n * `inviteToken` (a personal invite link's `?i=`) is redeemed on join: straight in, no lobby.\n */\nexport async function openCall(\n arbi: Arbi,\n opts: {\n callExtId: string\n key?: Uint8Array | null\n linkVersion?: number | null\n inviteToken?: string | null\n }\n): Promise<boolean> {\n if (alreadyInCall(opts.callExtId)) return false\n try {\n const { call, key, title } = await arbi.calls.open(opts.callExtId, opts.key)\n callSession.setActiveCall({\n callExtId: call.external_id,\n key,\n linkVersion: opts.linkVersion ?? call.link_version,\n title,\n isCreator: call.is_creator,\n ...callContext(call),\n phase: 'prejoin',\n tokenResponse: null,\n choices: null,\n knock: null,\n ringOnJoin: null,\n inviteToken: opts.inviteToken ?? null,\n })\n return true\n } catch (err) {\n fail(err, 'open the call')\n return false\n }\n}\n\n/** Answer a ring: open K from the ring and join straight away (no pre-join). */\nexport async function acceptRing(arbi: Arbi, ring: IncomingCall): Promise<boolean> {\n // Accepting while in another call switches to the new one.\n const current = callSession.getState().active\n if (current && current.callExtId !== ring.call_ext_id) callSession.endActiveCall()\n try {\n const { key, token, title } = await arbi.calls.answer(ring)\n callSession.setActiveCall({\n callExtId: ring.call_ext_id,\n key,\n linkVersion: ring.link_version,\n title: title || ring.caller_name,\n isCreator: false,\n chatExtId: ring.chat_ext_id ?? null,\n logConversationExtId: ring.log_conversation_ext_id ?? null,\n meetingConversationExtId: ring.meeting_conversation_ext_id ?? null,\n lockedWorkspaceExtId: ring.context === 'thread' ? (ring.workspace_ext_id ?? null) : null,\n phase: 'connected',\n tokenResponse: token,\n choices: DEFAULT_JOIN_CHOICES,\n knock: null,\n ringOnJoin: null,\n })\n return true\n } catch (err) {\n fail(err, 'join the call')\n callSession.removeIncomingCall(ring.call_ext_id)\n return false\n }\n}\n\nexport function declineRing(arbi: Arbi, ring: IncomingCall): void {\n callSession.removeIncomingCall(ring.call_ext_id)\n arbi.calls\n .decline(ring.call_ext_id)\n .catch((err: unknown) => console.warn('[calls] decline failed', err))\n}\n\nconst KNOCK_POLL_MS = 2_000\n\n/**\n * Wait in the lobby: poll a knock until it is admitted (\u2192 token), denied or\n * expired (\u2192 throws). `signal` aborts the wait (the user gave up).\n */\nasync function waitForAdmission(\n arbi: Arbi,\n callExtId: string,\n knock: Pick<calls.CallKnockResponse, 'knock_id'>,\n signal: AbortSignal\n): Promise<calls.CallTokenResponse> {\n for (;;) {\n if (signal.aborted) throw new DOMException('Stopped waiting', 'AbortError')\n await new Promise((resolve) => setTimeout(resolve, KNOCK_POLL_MS))\n if (signal.aborted) throw new DOMException('Stopped waiting', 'AbortError')\n const state = await arbi.calls.pollKnock(callExtId, knock.knock_id)\n if (state.status === 'admitted' && state.token) return state.token\n if (state.status === 'denied') throw new CallApiError('The host declined your request.', 403)\n if (state.status === 'expired') throw new CallApiError('Nobody let you in. Try again.', 410)\n }\n}\n\n/**\n * Pre-join done: get a token (or knock when the policy says so), connect, and\n * ring whoever this call was started for.\n */\nexport async function joinFromPreJoin(arbi: Arbi, choices: JoinChoices): Promise<void> {\n const active = callSession.getState().active\n if (!active) return\n const { callExtId, linkVersion, inviteToken } = active\n const update = (patch: Partial<ActiveCall>) => callSession.updateActiveCall(callExtId, patch)\n try {\n let tokenResponse: calls.CallTokenResponse\n try {\n // A personal invite link admits its account straight in (no lobby).\n tokenResponse = await arbi.calls.token(callExtId, linkVersion, inviteToken)\n } catch (err) {\n if (!(err instanceof CallApiError && err.code === 'knock_required')) throw err\n // Knock as the signed-in user (the server names me to the hosts from my account); the\n // token comes at once when the policy lets us straight in.\n const knock = await arbi.calls.knock(callExtId, linkVersion)\n if (knock.status === 'admitted' && knock.token) tokenResponse = knock.token\n else {\n const controller = new AbortController()\n update({ phase: 'knocking', choices, knock: { abort: () => controller.abort() } })\n tokenResponse = await waitForAdmission(arbi, callExtId, knock, controller.signal)\n }\n }\n if (callSession.getState().active?.callExtId !== callExtId) return // left meanwhile\n update({ phase: 'connected', tokenResponse, choices, knock: null })\n const ring = active.ringOnJoin\n if (ring && Object.keys(ring).length) {\n update({ ringOnJoin: null })\n await arbi.calls\n .ring(callExtId, ring, linkVersion)\n .catch((err: unknown) => console.warn('[calls] ring failed', err))\n }\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n // A webinar's audience before go-live: \"Starting soon\", joining by itself once it is live.\n if (err instanceof CallApiError && err.code === 'webinar_not_live') {\n update({ phase: 'webinar-waiting', choices, knock: null })\n return\n }\n fail(err, 'join the call')\n if (callSession.getState().active?.callExtId === callExtId) {\n callSession.endActiveCall()\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,138 @@
1
+ import { calls } from "@arbidocs/sdk/browser";
2
+ import { notify } from "../notifications/notify-store.js";
3
+ import { callQueryKeys, invalidateCall, serverCallsExperimental } from "./keys.js";
4
+ import { mutedNoticeFromEvent } from "./moderation.js";
5
+ import { callSession } from "./session.js";
6
+ const listeners = /* @__PURE__ */ new Map();
7
+ function onCallEvent(type, listener) {
8
+ let set = listeners.get(type);
9
+ if (!set) listeners.set(type, set = /* @__PURE__ */ new Set());
10
+ set.add(listener);
11
+ return () => {
12
+ set.delete(listener);
13
+ };
14
+ }
15
+ function relay(type, message) {
16
+ if (!message) return;
17
+ for (const listener of listeners.get(type) ?? []) {
18
+ ;
19
+ listener(message);
20
+ }
21
+ }
22
+ const str = (value) => typeof value === "string" && value ? value : null;
23
+ function applyCallEvent(queryClient, event, options = {}) {
24
+ const m = event;
25
+ const callExtId = str(m.call_ext_id);
26
+ switch (m.type) {
27
+ case "call.ringing": {
28
+ const ring = m;
29
+ const optedOut = options.acceptRings === false && serverCallsExperimental(queryClient);
30
+ if (optedOut || !callExtId || !ring.sealed_key) return true;
31
+ if (options.me && ring.caller_ext_id === options.me) return true;
32
+ callSession.enqueueIncomingCall({
33
+ call_ext_id: ring.call_ext_id,
34
+ room_name: ring.room_name,
35
+ caller_ext_id: ring.caller_ext_id,
36
+ caller_name: ring.caller_name,
37
+ chat_ext_id: ring.chat_ext_id ?? null,
38
+ log_conversation_ext_id: ring.log_conversation_ext_id ?? null,
39
+ meeting_conversation_ext_id: ring.meeting_conversation_ext_id ?? null,
40
+ workspace_ext_id: ring.workspace_ext_id ?? null,
41
+ context: ring.context ?? null,
42
+ sealed_key: ring.sealed_key,
43
+ link_version: ring.link_version,
44
+ title: ring.title ?? null
45
+ });
46
+ return true;
47
+ }
48
+ case "call.declined":
49
+ if (callExtId && callSession.getState().active?.callExtId === callExtId) {
50
+ notify.info("Call declined", { record: false, ambient: false });
51
+ }
52
+ return true;
53
+ case "call.started":
54
+ if (!callExtId) return true;
55
+ callSession.markCallLive(callExtId, {
56
+ chatExtId: str(m.chat_ext_id),
57
+ logConversationExtId: str(m.log_conversation_ext_id),
58
+ meetingConversationExtId: str(m.meeting_conversation_ext_id)
59
+ });
60
+ invalidateCall(queryClient, {
61
+ call_ext_id: callExtId,
62
+ log_conversation_ext_id: str(m.log_conversation_ext_id)
63
+ });
64
+ return true;
65
+ case "call.ended":
66
+ if (!callExtId) return true;
67
+ callSession.markCallEnded(callExtId);
68
+ invalidateCall(queryClient, {
69
+ call_ext_id: callExtId,
70
+ log_conversation_ext_id: str(m.log_conversation_ext_id)
71
+ });
72
+ return true;
73
+ case "call.knock": {
74
+ const knock = m;
75
+ if (!callExtId) return true;
76
+ callSession.addKnock({
77
+ callExtId,
78
+ knockId: knock.knock_id,
79
+ displayName: knock.display_name,
80
+ userExtId: knock.user_ext_id
81
+ });
82
+ return true;
83
+ }
84
+ case "call.knock_resolved": {
85
+ const knockId = str(m.knock_id);
86
+ if (knockId) callSession.removeKnock(knockId);
87
+ return true;
88
+ }
89
+ case "call.recording": {
90
+ if (callExtId)
91
+ void queryClient.invalidateQueries({ queryKey: callQueryKeys.recordingsOf(callExtId) });
92
+ const state = calls.recordingStateFrom(m);
93
+ relay("call.recording", callExtId && state ? { ...state, call_ext_id: callExtId } : null);
94
+ return true;
95
+ }
96
+ case "call.recording_updated": {
97
+ if (callExtId)
98
+ void queryClient.invalidateQueries({ queryKey: callQueryKeys.recordingsOf(callExtId) });
99
+ return true;
100
+ }
101
+ case "call.recording_deleted": {
102
+ if (callExtId)
103
+ void queryClient.invalidateQueries({ queryKey: callQueryKeys.recordingsOf(callExtId) });
104
+ const recordingExtId = str(m.recording_ext_id);
105
+ relay(
106
+ "call.recording_deleted",
107
+ callExtId && recordingExtId ? { call_ext_id: callExtId, recording_ext_id: recordingExtId } : null
108
+ );
109
+ return true;
110
+ }
111
+ case "call.transcription": {
112
+ const state = calls.transcriptionStateFrom(m);
113
+ relay("call.transcription", callExtId && state ? { ...state, call_ext_id: callExtId } : null);
114
+ return true;
115
+ }
116
+ case "call.webinar":
117
+ relay(
118
+ "call.webinar",
119
+ callExtId && typeof m.live === "boolean" ? {
120
+ type: "call.webinar",
121
+ call_ext_id: callExtId,
122
+ live: m.live,
123
+ chat: m.chat === "everyone" ? "everyone" : "panelists"
124
+ } : null
125
+ );
126
+ return true;
127
+ case "call.muted":
128
+ relay("call.muted", mutedNoticeFromEvent(m));
129
+ return true;
130
+ default:
131
+ return false;
132
+ }
133
+ }
134
+ export {
135
+ applyCallEvent,
136
+ onCallEvent
137
+ };
138
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/calls/events.ts"],
4
+ "sourcesContent": ["/**\n * The calls' WebSocket events, applied in one place ({@link applyCallEvent}):\n *\n * - rings, declines, lobby knocks and live/ended calls update the call session and the cache\n * (the thread log card and chat call cards re-read their call);\n * - what only an open view cares about \u2014 recording, transcription, webinar and moderation\n * changes \u2014 is relayed to whoever listens ({@link onCallEvent}: the call room, recording cards,\n * the webinar waiting screen).\n *\n * `<ArbiWebSocketProvider>` applies them to every `call.*` message; a host with its own socket\n * passes each one to `applyCallEvent`.\n */\n\nimport type { QueryClient } from '@tanstack/react-query'\nimport { calls } from '@arbidocs/sdk/browser'\nimport { notify } from '../notifications/notify-store'\nimport { callQueryKeys, invalidateCall, serverCallsExperimental } from './keys'\nimport { mutedNoticeFromEvent, type CallMutedNotice } from './moderation'\nimport { callSession } from './session'\n\n/** What each relayed event carries to its listeners. */\nexport interface CallRoomEvents {\n 'call.recording': calls.CallRecordingState & { call_ext_id: string }\n 'call.recording_deleted': { call_ext_id: string; recording_ext_id: string }\n 'call.transcription': calls.CallTranscriptionState & { call_ext_id: string }\n 'call.webinar': calls.CallWebinarMessage\n 'call.muted': CallMutedNotice & { callExtId: string }\n}\n\ntype RoomEventType = keyof CallRoomEvents\ntype Listener = (message: never) => void\nconst listeners = new Map<RoomEventType, Set<Listener>>()\n\n/** Listen to one relayed call event while a view is open. Returns the unsubscribe. */\nexport function onCallEvent<K extends RoomEventType>(\n type: K,\n listener: (message: CallRoomEvents[K]) => void\n): () => void {\n let set = listeners.get(type)\n if (!set) listeners.set(type, (set = new Set()))\n set.add(listener as Listener)\n return () => {\n set.delete(listener as Listener)\n }\n}\n\nfunction relay<K extends RoomEventType>(type: K, message: CallRoomEvents[K] | null): void {\n if (!message) return\n for (const listener of listeners.get(type) ?? []) {\n ;(listener as (m: CallRoomEvents[K]) => void)(message)\n }\n}\n\nexport interface ApplyCallEventOptions {\n /** My user id: my own ring echoed to another tab or device of mine is not a ring. */\n me?: string | null\n /**\n * Whether this person is rung. A host that keeps calls behind a switch passes false while it\n * is off: the caller then just sees no answer, and a call link still opens. Ignored where the\n * deployment made calls a regular feature (`experimental: false`): everyone is rung there.\n */\n acceptRings?: boolean\n}\n\nconst str = (value: unknown): string | null => (typeof value === 'string' && value ? value : null)\n\n/**\n * Apply one WebSocket event. Returns false for an event that is not a call event (so a host's\n * dispatcher can go on), true otherwise.\n */\nexport function applyCallEvent(\n queryClient: QueryClient,\n event: { type: string },\n options: ApplyCallEventOptions = {}\n): boolean {\n const m = event as Record<string, unknown> & { type: string }\n const callExtId = str(m.call_ext_id)\n switch (m.type) {\n case 'call.ringing': {\n const ring = m as unknown as calls.CallRingingMessage\n const optedOut = options.acceptRings === false && serverCallsExperimental(queryClient)\n if (optedOut || !callExtId || !ring.sealed_key) return true\n if (options.me && ring.caller_ext_id === options.me) return true\n callSession.enqueueIncomingCall({\n call_ext_id: ring.call_ext_id,\n room_name: ring.room_name,\n caller_ext_id: ring.caller_ext_id,\n caller_name: ring.caller_name,\n chat_ext_id: ring.chat_ext_id ?? null,\n log_conversation_ext_id: ring.log_conversation_ext_id ?? null,\n meeting_conversation_ext_id: ring.meeting_conversation_ext_id ?? null,\n workspace_ext_id: ring.workspace_ext_id ?? null,\n context: ring.context ?? null,\n sealed_key: ring.sealed_key,\n link_version: ring.link_version,\n title: ring.title ?? null,\n })\n return true\n }\n case 'call.declined':\n if (callExtId && callSession.getState().active?.callExtId === callExtId) {\n notify.info('Call declined', { record: false, ambient: false })\n }\n return true\n case 'call.started':\n if (!callExtId) return true\n callSession.markCallLive(callExtId, {\n chatExtId: str(m.chat_ext_id),\n logConversationExtId: str(m.log_conversation_ext_id),\n meetingConversationExtId: str(m.meeting_conversation_ext_id),\n })\n invalidateCall(queryClient, {\n call_ext_id: callExtId,\n log_conversation_ext_id: str(m.log_conversation_ext_id),\n })\n return true\n case 'call.ended':\n if (!callExtId) return true\n callSession.markCallEnded(callExtId)\n invalidateCall(queryClient, {\n call_ext_id: callExtId,\n log_conversation_ext_id: str(m.log_conversation_ext_id),\n })\n return true\n case 'call.knock': {\n // Lobby: someone asks to join the call we are in (we are its creator or an invitee).\n const knock = m as unknown as calls.CallKnockMessage\n if (!callExtId) return true\n callSession.addKnock({\n callExtId,\n knockId: knock.knock_id,\n displayName: knock.display_name,\n userExtId: knock.user_ext_id,\n })\n return true\n }\n case 'call.knock_resolved': {\n // Another host answered: clear the prompt here too.\n const knockId = str(m.knock_id)\n if (knockId) callSession.removeKnock(knockId)\n return true\n }\n case 'call.recording': {\n // The call's recording cards re-read their recordings.\n if (callExtId)\n void queryClient.invalidateQueries({ queryKey: callQueryKeys.recordingsOf(callExtId) })\n const state = calls.recordingStateFrom(m)\n relay('call.recording', callExtId && state ? { ...state, call_ext_id: callExtId } : null)\n return true\n }\n case 'call.recording_updated': {\n // A stopped recording's tail landed (a part committed after the stop): its cards re-read it.\n if (callExtId)\n void queryClient.invalidateQueries({ queryKey: callQueryKeys.recordingsOf(callExtId) })\n return true\n }\n case 'call.recording_deleted': {\n if (callExtId)\n void queryClient.invalidateQueries({ queryKey: callQueryKeys.recordingsOf(callExtId) })\n const recordingExtId = str(m.recording_ext_id)\n relay(\n 'call.recording_deleted',\n callExtId && recordingExtId\n ? { call_ext_id: callExtId, recording_ext_id: recordingExtId }\n : null\n )\n return true\n }\n case 'call.transcription': {\n const state = calls.transcriptionStateFrom(m)\n relay('call.transcription', callExtId && state ? { ...state, call_ext_id: callExtId } : null)\n return true\n }\n case 'call.webinar':\n relay(\n 'call.webinar',\n callExtId && typeof m.live === 'boolean'\n ? {\n type: 'call.webinar',\n call_ext_id: callExtId,\n live: m.live,\n chat: m.chat === 'everyone' ? 'everyone' : 'panelists',\n }\n : null\n )\n return true\n case 'call.muted':\n relay('call.muted', mutedNoticeFromEvent(m))\n return true\n default:\n return false\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,19 @@
1
+ import { useFeature } from "../host/features.js";
2
+ import { useIsEntitled } from "../account/entitlements.js";
3
+ import { useServerCallsEnabled, useServerCallsExperimental } from "./hooks.js";
4
+ function useCallsEnabled() {
5
+ const serverEnabled = useServerCallsEnabled();
6
+ const experimental = useServerCallsExperimental();
7
+ const switchedOn = useFeature("calls");
8
+ return serverEnabled && (switchedOn || !experimental);
9
+ }
10
+ function useCanHostCalls() {
11
+ const callsEnabled = useCallsEnabled();
12
+ const entitled = useIsEntitled("host_calls");
13
+ return callsEnabled && entitled;
14
+ }
15
+ export {
16
+ useCallsEnabled,
17
+ useCanHostCalls
18
+ };
19
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/calls/gate.ts"],
4
+ "sourcesContent": ["/**\n * The call-UI gate. The call UI (call buttons, the incoming-call ringer, upcoming calls) shows only\n * when the server has calls enabled AND the host's `calls` feature is on (`useFeature('calls')`:\n * ARBI's Settings \u2192 Experimental toggle; a host that does not list it, on). The switch is an\n * experimental opt-in: on a deployment where calls are not experimental (`experimental: false`) the\n * call UI shows whatever it says. A call link opens whenever the server has calls enabled.\n */\n\nimport { useFeature } from '../host/features'\nimport { useIsEntitled } from '../account/entitlements'\nimport { useServerCallsEnabled, useServerCallsExperimental } from './hooks'\n\n/** The call UI shows: the server has calls AND (they are not experimental there OR the host's switch is on). */\nexport function useCallsEnabled(): boolean {\n const serverEnabled = useServerCallsEnabled()\n const experimental = useServerCallsExperimental()\n const switchedOn = useFeature('calls')\n return serverEnabled && (switchedOn || !experimental)\n}\n\n/**\n * Whether the person may HOST calls (start or schedule one, record one): the call UI is on and they\n * are entitled (Pro on the hosted service, an internal user on a Box). Joining a call someone else\n * hosts needs only `useCallsEnabled`.\n */\nexport function useCanHostCalls(): boolean {\n const callsEnabled = useCallsEnabled()\n const entitled = useIsEntitled('host_calls')\n return callsEnabled && entitled\n}\n"],
5
+ "mappings": "AAQA,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB,kCAAkC;AAG3D,SAAS,kBAA2B;AACzC,QAAM,gBAAgB,sBAAsB;AAC5C,QAAM,eAAe,2BAA2B;AAChD,QAAM,aAAa,WAAW,OAAO;AACrC,SAAO,kBAAkB,cAAc,CAAC;AAC1C;AAOO,SAAS,kBAA2B;AACzC,QAAM,eAAe,gBAAgB;AACrC,QAAM,WAAW,cAAc,YAAY;AAC3C,SAAO,gBAAgB;AACzB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,115 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { useArbi } from "../useArbi.js";
4
+ import { callQueryKeys } from "./keys.js";
5
+ import { meetingRefForCall } from "./recording.js";
6
+ import { openRecording, transcribeRecording } from "./recording-media.js";
7
+ import { recordingWindowsOf } from "./transcript-format.js";
8
+ function useCallsConfig() {
9
+ const arbi = useArbi();
10
+ const { data } = useQuery({
11
+ queryKey: callQueryKeys.config(),
12
+ queryFn: () => arbi.calls.config(),
13
+ enabled: arbi.isLoggedIn,
14
+ staleTime: 5 * 6e4,
15
+ retry: false
16
+ });
17
+ return data;
18
+ }
19
+ function useServerCallsEnabled() {
20
+ return useCallsConfig()?.enabled === true;
21
+ }
22
+ function useServerCallsExperimental() {
23
+ return useCallsConfig()?.experimental !== false;
24
+ }
25
+ function useCallTranscriptionAvailable() {
26
+ return useCallsConfig()?.transcription_available === true;
27
+ }
28
+ function useCall(callExtId) {
29
+ const arbi = useArbi();
30
+ return useQuery({
31
+ queryKey: callQueryKeys.call(callExtId ?? ""),
32
+ queryFn: () => arbi.calls.get(callExtId),
33
+ enabled: !!callExtId && arbi.isLoggedIn,
34
+ staleTime: 6e4,
35
+ retry: false
36
+ });
37
+ }
38
+ function useCallRecordings(callExtId, enabled = true) {
39
+ const arbi = useArbi();
40
+ return useQuery({
41
+ queryKey: callQueryKeys.recordings(callExtId ?? ""),
42
+ queryFn: () => arbi.calls.recording.list(callExtId),
43
+ enabled: !!callExtId && enabled && arbi.isLoggedIn,
44
+ retry: false
45
+ });
46
+ }
47
+ function useCallRecording(callExtId, recordingExtId) {
48
+ const arbi = useArbi();
49
+ return useQuery({
50
+ queryKey: callQueryKeys.recording(callExtId ?? "", recordingExtId ?? ""),
51
+ queryFn: () => arbi.calls.recording.get(callExtId, recordingExtId),
52
+ enabled: !!callExtId && !!recordingExtId && arbi.isLoggedIn,
53
+ retry: false
54
+ });
55
+ }
56
+ const NO_WINDOWS = [];
57
+ function useRecordingWindows(callExtId, enabled) {
58
+ const { data } = useCallRecordings(callExtId, enabled);
59
+ return useMemo(() => data ? recordingWindowsOf(data) : NO_WINDOWS, [data]);
60
+ }
61
+ function useCallInviteLinks(callExtId) {
62
+ const arbi = useArbi();
63
+ return useQuery({
64
+ queryKey: callQueryKeys.inviteLinks(callExtId ?? ""),
65
+ queryFn: () => arbi.calls.inviteLinks.list(callExtId),
66
+ enabled: !!callExtId && arbi.isLoggedIn,
67
+ retry: false
68
+ });
69
+ }
70
+ function useRecordingActions(call) {
71
+ const arbi = useArbi();
72
+ const queryClient = useQueryClient();
73
+ return useMemo(
74
+ () => ({
75
+ refresh: () => void queryClient.invalidateQueries({
76
+ queryKey: callQueryKeys.recordingsOf(call.external_id)
77
+ }),
78
+ open: (recording) => openRecording(arbi, queryClient, call, recording.external_id, recording),
79
+ transcribe: async (opened, onProgress) => transcribeRecording({
80
+ arbi,
81
+ queryClient,
82
+ callExtId: call.external_id,
83
+ opened,
84
+ ref: await meetingRefForCall(arbi, queryClient, call),
85
+ onProgress
86
+ })
87
+ }),
88
+ [arbi, queryClient, call]
89
+ );
90
+ }
91
+ function useRevokeCallInviteLink(callExtId) {
92
+ const arbi = useArbi();
93
+ const queryClient = useQueryClient();
94
+ return useCallback(
95
+ async (inviteExtId) => {
96
+ await arbi.calls.inviteLinks.revoke(callExtId, inviteExtId);
97
+ void queryClient.invalidateQueries({ queryKey: callQueryKeys.inviteLinks(callExtId) });
98
+ },
99
+ [arbi, queryClient, callExtId]
100
+ );
101
+ }
102
+ export {
103
+ useCall,
104
+ useCallInviteLinks,
105
+ useCallRecording,
106
+ useCallRecordings,
107
+ useCallTranscriptionAvailable,
108
+ useCallsConfig,
109
+ useRecordingActions,
110
+ useRecordingWindows,
111
+ useRevokeCallInviteLink,
112
+ useServerCallsEnabled,
113
+ useServerCallsExperimental
114
+ };
115
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/calls/hooks.ts"],
4
+ "sourcesContent": ["/**\n * Call data hooks over `arbi.calls`: the deployment's calls config and a call by id. They need no\n * LiveKit; the room hooks live in the `@arbidocs/react/calls` entry.\n *\n * Requires an `ArbiHost` (with an `arbi`) and a React Query client above it.\n */\n\nimport { useCallback, useMemo } from 'react'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport type { calls } from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { callQueryKeys } from './keys'\nimport { meetingRefForCall } from './recording'\nimport { openRecording, transcribeRecording, type OpenedRecording } from './recording-media'\nimport { recordingWindowsOf, type RecordingWindow } from './transcript-format'\n\n/**\n * The deployment's calls config. Any error (404 on a backend without calls, 5xx) reads as\n * \"disabled\", so call buttons simply stay hidden.\n */\nexport function useCallsConfig(): calls.CallsConfig | undefined {\n const arbi = useArbi()\n // A plain query (no abort signal): the header buttons remount while the app boots, and an\n // aborted request must not stick as \"disabled\".\n const { data } = useQuery({\n queryKey: callQueryKeys.config(),\n queryFn: () => arbi.calls.config(),\n enabled: arbi.isLoggedIn,\n staleTime: 5 * 60_000,\n retry: false,\n })\n return data\n}\n\n/** Calls are available on this deployment (the server has LiveKit configured). */\nexport function useServerCallsEnabled(): boolean {\n return useCallsConfig()?.enabled === true\n}\n\n/**\n * Calls are still experimental on this deployment (the default): the call UI shows only to people\n * who opted in with the host's switch. A deployment that made calls a regular feature\n * (`CALLS_EXPERIMENTAL=false`, `experimental: false`) shows it to everyone. Unknown reads as\n * experimental.\n */\nexport function useServerCallsExperimental(): boolean {\n return useCallsConfig()?.experimental !== false\n}\n\n/** Whether this deployment has a transcriber. Any error reads as \"no\": the controls stay hidden. */\nexport function useCallTranscriptionAvailable(): boolean {\n return useCallsConfig()?.transcription_available === true\n}\n\n/** A call by id (the thread log card, a chat's call card); refreshed by `call.started/ended`. */\nexport function useCall(callExtId: string | null | undefined) {\n const arbi = useArbi()\n return useQuery({\n queryKey: callQueryKeys.call(callExtId ?? ''),\n queryFn: () => arbi.calls.get(callExtId!),\n enabled: !!callExtId && arbi.isLoggedIn,\n staleTime: 60_000,\n retry: false,\n })\n}\n\n/**\n * A call's recordings (readers only: members of its meeting chat). Kept fresh by the recording\n * events (`applyCallEvent`).\n */\nexport function useCallRecordings(callExtId: string | null | undefined, enabled = true) {\n const arbi = useArbi()\n return useQuery({\n queryKey: callQueryKeys.recordings(callExtId ?? ''),\n queryFn: () => arbi.calls.recording.list(callExtId!),\n enabled: !!callExtId && enabled && arbi.isLoggedIn,\n retry: false,\n })\n}\n\n/** One recording of a call. */\nexport function useCallRecording(\n callExtId: string | null | undefined,\n recordingExtId: string | null | undefined\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: callQueryKeys.recording(callExtId ?? '', recordingExtId ?? ''),\n queryFn: () => arbi.calls.recording.get(callExtId!, recordingExtId!),\n enabled: !!callExtId && !!recordingExtId && arbi.isLoggedIn,\n retry: false,\n })\n}\n\nconst NO_WINDOWS: RecordingWindow[] = []\n\n/**\n * The call's recordings as windows: a recording's transcript supersedes the live lines spoken while\n * it recorded. Fetched only when `enabled` (the transcript has lines from a recording), sharing the\n * recordings list's cache. Empty while loading or when the list cannot be read.\n */\nexport function useRecordingWindows(\n callExtId: string | null | undefined,\n enabled: boolean\n): RecordingWindow[] {\n const { data } = useCallRecordings(callExtId, enabled)\n return useMemo(() => (data ? recordingWindowsOf(data) : NO_WINDOWS), [data])\n}\n\n/** The personal invite links sent for a call (the host's people picker). */\nexport function useCallInviteLinks(callExtId: string | null | undefined) {\n const arbi = useArbi()\n return useQuery({\n queryKey: callQueryKeys.inviteLinks(callExtId ?? ''),\n queryFn: () => arbi.calls.inviteLinks.list(callExtId!),\n enabled: !!callExtId && arbi.isLoggedIn,\n retry: false,\n })\n}\n\n/**\n * What a recording card does with a call's recordings: re-read them, open one (its track keys,\n * unwrapped under the meeting chat's or workspace's key), and transcribe one into the meeting chat.\n */\nexport function useRecordingActions(call: calls.CallResponse) {\n const arbi = useArbi()\n const queryClient = useQueryClient()\n return useMemo(\n () => ({\n refresh: () =>\n void queryClient.invalidateQueries({\n queryKey: callQueryKeys.recordingsOf(call.external_id),\n }),\n open: (recording: calls.CallRecording): Promise<OpenedRecording> =>\n openRecording(arbi, queryClient, call, recording.external_id, recording),\n transcribe: async (\n opened: OpenedRecording,\n onProgress: (done: number, total: number) => void\n ) =>\n transcribeRecording({\n arbi,\n queryClient,\n callExtId: call.external_id,\n opened,\n ref: await meetingRefForCall(arbi, queryClient, call),\n onProgress,\n }),\n }),\n [arbi, queryClient, call]\n )\n}\n\n/** Revoke a personal invite link of a call I host; the list re-reads. */\nexport function useRevokeCallInviteLink(callExtId: string) {\n const arbi = useArbi()\n const queryClient = useQueryClient()\n return useCallback(\n async (inviteExtId: string) => {\n await arbi.calls.inviteLinks.revoke(callExtId, inviteExtId)\n void queryClient.invalidateQueries({ queryKey: callQueryKeys.inviteLinks(callExtId) })\n },\n [arbi, queryClient, callExtId]\n )\n}\n"],
5
+ "mappings": "AAOA,SAAS,aAAa,eAAe;AACrC,SAAS,UAAU,sBAAsB;AAEzC,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,eAAe,2BAAiD;AACzE,SAAS,0BAAgD;AAMlD,SAAS,iBAAgD;AAC9D,QAAM,OAAO,QAAQ;AAGrB,QAAM,EAAE,KAAK,IAAI,SAAS;AAAA,IACxB,UAAU,cAAc,OAAO;AAAA,IAC/B,SAAS,MAAM,KAAK,MAAM,OAAO;AAAA,IACjC,SAAS,KAAK;AAAA,IACd,WAAW,IAAI;AAAA,IACf,OAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;AAGO,SAAS,wBAAiC;AAC/C,SAAO,eAAe,GAAG,YAAY;AACvC;AAQO,SAAS,6BAAsC;AACpD,SAAO,eAAe,GAAG,iBAAiB;AAC5C;AAGO,SAAS,gCAAyC;AACvD,SAAO,eAAe,GAAG,4BAA4B;AACvD;AAGO,SAAS,QAAQ,WAAsC;AAC5D,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,KAAK,aAAa,EAAE;AAAA,IAC5C,SAAS,MAAM,KAAK,MAAM,IAAI,SAAU;AAAA,IACxC,SAAS,CAAC,CAAC,aAAa,KAAK;AAAA,IAC7B,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AACH;AAMO,SAAS,kBAAkB,WAAsC,UAAU,MAAM;AACtF,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,WAAW,aAAa,EAAE;AAAA,IAClD,SAAS,MAAM,KAAK,MAAM,UAAU,KAAK,SAAU;AAAA,IACnD,SAAS,CAAC,CAAC,aAAa,WAAW,KAAK;AAAA,IACxC,OAAO;AAAA,EACT,CAAC;AACH;AAGO,SAAS,iBACd,WACA,gBACA;AACA,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,UAAU,aAAa,IAAI,kBAAkB,EAAE;AAAA,IACvE,SAAS,MAAM,KAAK,MAAM,UAAU,IAAI,WAAY,cAAe;AAAA,IACnE,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,kBAAkB,KAAK;AAAA,IACjD,OAAO;AAAA,EACT,CAAC;AACH;AAEA,MAAM,aAAgC,CAAC;AAOhC,SAAS,oBACd,WACA,SACmB;AACnB,QAAM,EAAE,KAAK,IAAI,kBAAkB,WAAW,OAAO;AACrD,SAAO,QAAQ,MAAO,OAAO,mBAAmB,IAAI,IAAI,YAAa,CAAC,IAAI,CAAC;AAC7E;AAGO,SAAS,mBAAmB,WAAsC;AACvE,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,YAAY,aAAa,EAAE;AAAA,IACnD,SAAS,MAAM,KAAK,MAAM,YAAY,KAAK,SAAU;AAAA,IACrD,SAAS,CAAC,CAAC,aAAa,KAAK;AAAA,IAC7B,OAAO;AAAA,EACT,CAAC;AACH;AAMO,SAAS,oBAAoB,MAA0B;AAC5D,QAAM,OAAO,QAAQ;AACrB,QAAM,cAAc,eAAe;AACnC,SAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS,MACP,KAAK,YAAY,kBAAkB;AAAA,QACjC,UAAU,cAAc,aAAa,KAAK,WAAW;AAAA,MACvD,CAAC;AAAA,MACH,MAAM,CAAC,cACL,cAAc,MAAM,aAAa,MAAM,UAAU,aAAa,SAAS;AAAA,MACzE,YAAY,OACV,QACA,eAEA,oBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,QACA,WAAW,KAAK;AAAA,QAChB;AAAA,QACA,KAAK,MAAM,kBAAkB,MAAM,aAAa,IAAI;AAAA,QACpD;AAAA,MACF,CAAC;AAAA,IACL;AAAA,IACA,CAAC,MAAM,aAAa,IAAI;AAAA,EAC1B;AACF;AAGO,SAAS,wBAAwB,WAAmB;AACzD,QAAM,OAAO,QAAQ;AACrB,QAAM,cAAc,eAAe;AACnC,SAAO;AAAA,IACL,OAAO,gBAAwB;AAC7B,YAAM,KAAK,MAAM,YAAY,OAAO,WAAW,WAAW;AAC1D,WAAK,YAAY,kBAAkB,EAAE,UAAU,cAAc,YAAY,SAAS,EAAE,CAAC;AAAA,IACvF;AAAA,IACA,CAAC,MAAM,aAAa,SAAS;AAAA,EAC/B;AACF;",
6
+ "names": []
7
+ }