@arbidocs/react 0.5.111 → 0.5.113

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 (972) hide show
  1. package/dist/account/client.js +96 -0
  2. package/dist/account/client.js.map +7 -0
  3. package/dist/account/delete.js +70 -0
  4. package/dist/account/delete.js.map +7 -0
  5. package/dist/account/didit.js +34 -0
  6. package/dist/account/didit.js.map +7 -0
  7. package/dist/account/dismissed-tips.js +33 -0
  8. package/dist/account/dismissed-tips.js.map +7 -0
  9. package/dist/account/email.js +84 -0
  10. package/dist/account/email.js.map +7 -0
  11. package/dist/account/entitlements.js +47 -0
  12. package/dist/account/entitlements.js.map +7 -0
  13. package/dist/account/identity.js +270 -0
  14. package/dist/account/identity.js.map +7 -0
  15. package/dist/account/index.js +93 -0
  16. package/dist/account/index.js.map +7 -0
  17. package/dist/account/notifications.js +59 -0
  18. package/dist/account/notifications.js.map +7 -0
  19. package/dist/account/password.js +103 -0
  20. package/dist/account/password.js.map +7 -0
  21. package/dist/account/profile.js +116 -0
  22. package/dist/account/profile.js.map +7 -0
  23. package/dist/account/recovery.js +13 -0
  24. package/dist/account/recovery.js.map +7 -0
  25. package/dist/account/relevance.js +82 -0
  26. package/dist/account/relevance.js.map +7 -0
  27. package/dist/account/sessions.js +37 -0
  28. package/dist/account/sessions.js.map +7 -0
  29. package/dist/account/settings.js +39 -0
  30. package/dist/account/settings.js.map +7 -0
  31. package/dist/account/table-views.js +16 -0
  32. package/dist/account/table-views.js.map +7 -0
  33. package/dist/ai/AiAnswer.js +83 -0
  34. package/dist/ai/AiAnswer.js.map +7 -0
  35. package/dist/ai/AiMarkdown.js +40 -0
  36. package/dist/ai/AiMarkdown.js.map +7 -0
  37. package/dist/ai/ArtifactCanvas.js +193 -0
  38. package/dist/ai/ArtifactCanvas.js.map +7 -0
  39. package/dist/ai/CitationRenderer.js +413 -0
  40. package/dist/ai/CitationRenderer.js.map +7 -0
  41. package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
  42. package/dist/ai/MarkdownRenderer.js.map +7 -0
  43. package/dist/ai/MessageArtifactCard.js +75 -0
  44. package/dist/ai/MessageArtifactCard.js.map +7 -0
  45. package/dist/ai/PassageCard.js +79 -0
  46. package/dist/ai/PassageCard.js.map +7 -0
  47. package/dist/ai/engine.js +110 -0
  48. package/dist/ai/engine.js.map +7 -0
  49. package/dist/ai/index.js +63 -0
  50. package/dist/ai/index.js.map +7 -0
  51. package/dist/ai/markdown-base-components.js +37 -0
  52. package/dist/ai/markdown-base-components.js.map +7 -0
  53. package/dist/ai/markdown-streaming-context.js +6 -0
  54. package/dist/ai/markdown-streaming-context.js.map +7 -0
  55. package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
  56. package/dist/ai/normalize-citations.js.map +7 -0
  57. package/dist/ai/redline.js +41 -0
  58. package/dist/ai/redline.js.map +7 -0
  59. package/dist/ai/split-markdown-blocks.js +40 -0
  60. package/dist/ai/split-markdown-blocks.js.map +7 -0
  61. package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
  62. package/dist/ai/stored-markdown.js.map +7 -0
  63. package/dist/annotations/AnnotationPageOverlay.js +807 -0
  64. package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
  65. package/dist/annotations/AnnotationToolbar.js +398 -0
  66. package/dist/annotations/AnnotationToolbar.js.map +7 -0
  67. package/dist/annotations/FreezeDialog.js +170 -0
  68. package/dist/annotations/FreezeDialog.js.map +7 -0
  69. package/dist/annotations/ProductionDialog.js +354 -0
  70. package/dist/annotations/ProductionDialog.js.map +7 -0
  71. package/dist/annotations/controller.js +49 -0
  72. package/dist/annotations/controller.js.map +7 -0
  73. package/dist/annotations/freeze/browser.js +21 -0
  74. package/dist/annotations/freeze/browser.js.map +7 -0
  75. package/dist/annotations/freeze/bundle.js +201 -0
  76. package/dist/annotations/freeze/bundle.js.map +7 -0
  77. package/dist/annotations/freeze/coords.js +37 -0
  78. package/dist/annotations/freeze/coords.js.map +7 -0
  79. package/dist/annotations/freeze/freeze.js +261 -0
  80. package/dist/annotations/freeze/freeze.js.map +7 -0
  81. package/dist/annotations/freeze/hash.js +28 -0
  82. package/dist/annotations/freeze/hash.js.map +7 -0
  83. package/dist/annotations/freeze/index-page.js +78 -0
  84. package/dist/annotations/freeze/index-page.js.map +7 -0
  85. package/dist/annotations/freeze/index.js +28 -22
  86. package/dist/annotations/freeze/index.js.map +7 -1
  87. package/dist/annotations/freeze/raster.js +208 -0
  88. package/dist/annotations/freeze/raster.js.map +7 -0
  89. package/dist/annotations/freeze/stamp.js +117 -0
  90. package/dist/annotations/freeze/stamp.js.map +7 -0
  91. package/dist/annotations/freeze/types.js +14 -0
  92. package/dist/annotations/freeze/types.js.map +7 -0
  93. package/dist/annotations/freeze/vector.js +283 -0
  94. package/dist/annotations/freeze/vector.js.map +7 -0
  95. package/dist/annotations/geometry.js +81 -0
  96. package/dist/annotations/geometry.js.map +7 -0
  97. package/dist/annotations/index.js +125 -6
  98. package/dist/annotations/index.js.map +7 -1
  99. package/dist/annotations/merge.js +53 -0
  100. package/dist/annotations/merge.js.map +7 -0
  101. package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
  102. package/dist/annotations/model.js.map +7 -0
  103. package/dist/annotations/overlay-geometry.js +41 -0
  104. package/dist/annotations/overlay-geometry.js.map +7 -0
  105. package/dist/annotations/redaction-log.js +33 -0
  106. package/dist/annotations/redaction-log.js.map +7 -0
  107. package/dist/annotations/selection-marks.js +122 -0
  108. package/dist/annotations/selection-marks.js.map +7 -0
  109. package/dist/annotations/state.js +140 -0
  110. package/dist/annotations/state.js.map +7 -0
  111. package/dist/annotations/store.js +49 -0
  112. package/dist/annotations/store.js.map +7 -0
  113. package/dist/annotations/useAnnotationLayer.js +306 -0
  114. package/dist/annotations/useAnnotationLayer.js.map +7 -0
  115. package/dist/annotations/useAnnotationShortcuts.js +31 -0
  116. package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
  117. package/dist/annotations/useTextSelectionMarks.js +100 -0
  118. package/dist/annotations/useTextSelectionMarks.js.map +7 -0
  119. package/dist/artifacts/artifact-kind.js +19 -0
  120. package/dist/artifacts/artifact-kind.js.map +7 -0
  121. package/dist/artifacts/index.js +89 -571
  122. package/dist/artifacts/index.js.map +7 -1
  123. package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
  124. package/dist/artifacts/normalize-markdown.js.map +7 -0
  125. package/dist/artifacts/redline-core.js +12 -3
  126. package/dist/artifacts/redline-core.js.map +7 -1
  127. package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
  128. package/dist/artifacts/redline-diff.js.map +7 -0
  129. package/dist/artifacts/redline-engine.js +14 -0
  130. package/dist/artifacts/redline-engine.js.map +7 -0
  131. package/dist/artifacts/renderArtifactMarkdown.js +9 -0
  132. package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
  133. package/dist/artifacts/useArtifactEditSession.js +183 -0
  134. package/dist/artifacts/useArtifactEditSession.js.map +7 -0
  135. package/dist/artifacts/useArtifactSession.js +173 -0
  136. package/dist/artifacts/useArtifactSession.js.map +7 -0
  137. package/dist/artifacts/useArtifactSource.js +16 -0
  138. package/dist/artifacts/useArtifactSource.js.map +7 -0
  139. package/dist/artifacts/useArtifactText.js +78 -0
  140. package/dist/artifacts/useArtifactText.js.map +7 -0
  141. package/dist/artifacts/useRedline.js +65 -0
  142. package/dist/artifacts/useRedline.js.map +7 -0
  143. package/dist/artifacts/useStreamedArtifact.js +74 -0
  144. package/dist/artifacts/useStreamedArtifact.js.map +7 -0
  145. package/dist/artifacts/versions.js +68 -0
  146. package/dist/artifacts/versions.js.map +7 -0
  147. package/dist/billing.js +200 -0
  148. package/dist/billing.js.map +7 -0
  149. package/dist/boot-timeout.js +19 -0
  150. package/dist/boot-timeout.js.map +7 -0
  151. package/dist/calendar/accounts.js +213 -0
  152. package/dist/calendar/accounts.js.map +7 -0
  153. package/dist/calendar/hooks.js +409 -0
  154. package/dist/calendar/hooks.js.map +7 -0
  155. package/dist/calendar/index.js +31 -0
  156. package/dist/calendar/index.js.map +7 -0
  157. package/dist/calendar/keys.js +5 -0
  158. package/dist/calendar/keys.js.map +7 -0
  159. package/dist/calendar/offline/outbox.js +231 -0
  160. package/dist/calendar/offline/outbox.js.map +7 -0
  161. package/dist/calendar/offline/runtime.js +109 -0
  162. package/dist/calendar/offline/runtime.js.map +7 -0
  163. package/dist/calendar/offline/support.js +41 -0
  164. package/dist/calendar/offline/support.js.map +7 -0
  165. package/dist/calendar/support.js +34 -0
  166. package/dist/calendar/support.js.map +7 -0
  167. package/dist/calls/actions.js +226 -0
  168. package/dist/calls/actions.js.map +7 -0
  169. package/dist/calls/events.js +138 -0
  170. package/dist/calls/events.js.map +7 -0
  171. package/dist/calls/gate.js +19 -0
  172. package/dist/calls/gate.js.map +7 -0
  173. package/dist/calls/hooks.js +115 -0
  174. package/dist/calls/hooks.js.map +7 -0
  175. package/dist/calls/in-call-chat.js +132 -0
  176. package/dist/calls/in-call-chat.js.map +7 -0
  177. package/dist/calls/index.js +24 -0
  178. package/dist/calls/index.js.map +7 -0
  179. package/dist/calls/keys.js +17 -0
  180. package/dist/calls/keys.js.map +7 -0
  181. package/dist/calls/livekit/index.js +6 -958
  182. package/dist/calls/livekit/index.js.map +7 -1
  183. package/dist/calls/livekit/room.js +98 -0
  184. package/dist/calls/livekit/room.js.map +7 -0
  185. package/dist/calls/livekit/useCallRecorder.js +219 -0
  186. package/dist/calls/livekit/useCallRecorder.js.map +7 -0
  187. package/dist/calls/livekit/useCallTranscriber.js +309 -0
  188. package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
  189. package/dist/calls/livekit/useHostMuteNotice.js +29 -0
  190. package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
  191. package/dist/calls/livekit/useInCallChat.js +161 -0
  192. package/dist/calls/livekit/useInCallChat.js.map +7 -0
  193. package/dist/calls/livekit/useWebinar.js +239 -0
  194. package/dist/calls/livekit/useWebinar.js.map +7 -0
  195. package/dist/calls/meeting-chat.js +149 -0
  196. package/dist/calls/meeting-chat.js.map +7 -0
  197. package/dist/calls/moderation.js +50 -0
  198. package/dist/calls/moderation.js.map +7 -0
  199. package/dist/calls/open-meeting-chat.js +29 -0
  200. package/dist/calls/open-meeting-chat.js.map +7 -0
  201. package/dist/calls/read-only.js +24 -0
  202. package/dist/calls/read-only.js.map +7 -0
  203. package/dist/calls/recording-media.js +218 -0
  204. package/dist/calls/recording-media.js.map +7 -0
  205. package/dist/calls/recording-playback.js +260 -0
  206. package/dist/calls/recording-playback.js.map +7 -0
  207. package/dist/calls/recording.js +268 -0
  208. package/dist/calls/recording.js.map +7 -0
  209. package/dist/calls/save-to-thread.js +80 -0
  210. package/dist/calls/save-to-thread.js.map +7 -0
  211. package/dist/calls/session.js +134 -0
  212. package/dist/calls/session.js.map +7 -0
  213. package/dist/calls/transcript-format.js +147 -0
  214. package/dist/calls/transcript-format.js.map +7 -0
  215. package/dist/calls/transcription.js +101 -0
  216. package/dist/calls/transcription.js.map +7 -0
  217. package/dist/calls/webinar.js +71 -0
  218. package/dist/calls/webinar.js.map +7 -0
  219. package/dist/charge-watch.js +71 -0
  220. package/dist/charge-watch.js.map +7 -0
  221. package/dist/chat/ChatBubble.js +146 -0
  222. package/dist/chat/ChatBubble.js.map +7 -0
  223. package/dist/chat/ConversationScope.js +30 -0
  224. package/dist/chat/ConversationScope.js.map +7 -0
  225. package/dist/chat/active-config.js +20 -0
  226. package/dist/chat/active-config.js.map +7 -0
  227. package/dist/chat/agent-chat-owner.js +25 -0
  228. package/dist/chat/agent-chat-owner.js.map +7 -0
  229. package/dist/chat/chat-artifacts.js +64 -0
  230. package/dist/chat/chat-artifacts.js.map +7 -0
  231. package/dist/chat/citations.js +32 -0
  232. package/dist/chat/citations.js.map +7 -0
  233. package/dist/chat/config-model.js +10 -0
  234. package/dist/chat/config-model.js.map +7 -0
  235. package/dist/chat/conversation-cache.js +676 -0
  236. package/dist/chat/conversation-cache.js.map +7 -0
  237. package/dist/chat/conversation-events.js +57 -0
  238. package/dist/chat/conversation-events.js.map +7 -0
  239. package/dist/chat/conversation-mentions.js +58 -0
  240. package/dist/chat/conversation-mentions.js.map +7 -0
  241. package/dist/chat/conversation-workspace.js +58 -0
  242. package/dist/chat/conversation-workspace.js.map +7 -0
  243. package/dist/chat/mentions.js +116 -0
  244. package/dist/chat/mentions.js.map +7 -0
  245. package/dist/chat/open-document.js +106 -0
  246. package/dist/chat/open-document.js.map +7 -0
  247. package/dist/chat/orphaned.js +44 -0
  248. package/dist/chat/orphaned.js.map +7 -0
  249. package/dist/chat/pendingFirstTurn.js +30 -0
  250. package/dist/chat/pendingFirstTurn.js.map +7 -0
  251. package/dist/chat/reply-target.js +12 -0
  252. package/dist/chat/reply-target.js.map +7 -0
  253. package/dist/chat/run-finished.js +28 -0
  254. package/dist/chat/run-finished.js.map +7 -0
  255. package/dist/chat/run-state.js +91 -0
  256. package/dist/chat/run-state.js.map +7 -0
  257. package/dist/chat/stream-handlers.js +419 -0
  258. package/dist/chat/stream-handlers.js.map +7 -0
  259. package/dist/chat/thread-binding.js +76 -0
  260. package/dist/chat/thread-binding.js.map +7 -0
  261. package/dist/chat/thread-document.js +53 -0
  262. package/dist/chat/thread-document.js.map +7 -0
  263. package/dist/chat/turn-control.js +79 -0
  264. package/dist/chat/turn-control.js.map +7 -0
  265. package/dist/chat/useAgentRunControl.js +36 -0
  266. package/dist/chat/useAgentRunControl.js.map +7 -0
  267. package/dist/chat/useAnswerAgentQuestion.js +19 -0
  268. package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
  269. package/dist/chat/useAskAgain.js +32 -0
  270. package/dist/chat/useAskAgain.js.map +7 -0
  271. package/dist/chat/useAutoSendDraft.js +17 -0
  272. package/dist/chat/useAutoSendDraft.js.map +7 -0
  273. package/dist/chat/useBranchNavigation.js +97 -0
  274. package/dist/chat/useBranchNavigation.js.map +7 -0
  275. package/dist/chat/useConnectRunStream.js +169 -0
  276. package/dist/chat/useConnectRunStream.js.map +7 -0
  277. package/dist/chat/useConversation.js +431 -0
  278. package/dist/chat/useConversation.js.map +7 -0
  279. package/dist/chat/useConversationActions.js +662 -0
  280. package/dist/chat/useConversationActions.js.map +7 -0
  281. package/dist/chat/useConversationData.js +143 -0
  282. package/dist/chat/useConversationData.js.map +7 -0
  283. package/dist/chat/useConversationDocuments.js +41 -0
  284. package/dist/chat/useConversationDocuments.js.map +7 -0
  285. package/dist/chat/useConversationSettings.js +78 -0
  286. package/dist/chat/useConversationSettings.js.map +7 -0
  287. package/dist/chat/useConversationTurn.js +31 -0
  288. package/dist/chat/useConversationTurn.js.map +7 -0
  289. package/dist/chat/useConversationWorkspace.js +12 -0
  290. package/dist/chat/useConversationWorkspace.js.map +7 -0
  291. package/dist/chat/useDeleteMessage.js +15 -0
  292. package/dist/chat/useDeleteMessage.js.map +7 -0
  293. package/dist/chat/useDocumentAutoAdd.js +73 -0
  294. package/dist/chat/useDocumentAutoAdd.js.map +7 -0
  295. package/dist/chat/useMessageTimer.js +39 -0
  296. package/dist/chat/useMessageTimer.js.map +7 -0
  297. package/dist/chat/useThinkingContent.js +67 -0
  298. package/dist/chat/useThinkingContent.js.map +7 -0
  299. package/dist/chat/useThreadDocument.js +61 -0
  300. package/dist/chat/useThreadDocument.js.map +7 -0
  301. package/dist/chat/workflow-run-titles.js +50 -0
  302. package/dist/chat/workflow-run-titles.js.map +7 -0
  303. package/dist/config/config-hooks.js +209 -0
  304. package/dist/config/config-hooks.js.map +7 -0
  305. package/dist/connectivity.js +72 -0
  306. package/dist/connectivity.js.map +7 -0
  307. package/dist/connectors/hooks.js +263 -0
  308. package/dist/connectors/hooks.js.map +7 -0
  309. package/dist/connectors/index.js +28 -0
  310. package/dist/connectors/index.js.map +7 -0
  311. package/dist/contacts.js +100 -0
  312. package/dist/contacts.js.map +7 -0
  313. package/dist/conversation-list.js +65 -0
  314. package/dist/conversation-list.js.map +7 -0
  315. package/dist/databases.js +195 -0
  316. package/dist/databases.js.map +7 -0
  317. package/dist/datasets/aggregate.js +281 -0
  318. package/dist/datasets/aggregate.js.map +7 -0
  319. package/dist/datasets/index.js +122 -0
  320. package/dist/datasets/index.js.map +7 -0
  321. package/dist/datasets/members.js +27 -0
  322. package/dist/datasets/members.js.map +7 -0
  323. package/dist/datasets/panel.js +44 -0
  324. package/dist/datasets/panel.js.map +7 -0
  325. package/dist/datasets/registry.js +47 -0
  326. package/dist/datasets/registry.js.map +7 -0
  327. package/dist/datasets/rows-source.js +44 -0
  328. package/dist/datasets/rows-source.js.map +7 -0
  329. package/dist/datasets/sources/activity.js +83 -0
  330. package/dist/datasets/sources/activity.js.map +7 -0
  331. package/dist/datasets/sources/conversations.js +74 -0
  332. package/dist/datasets/sources/conversations.js.map +7 -0
  333. package/dist/datasets/sources/database.js +209 -0
  334. package/dist/datasets/sources/database.js.map +7 -0
  335. package/dist/datasets/sources/documents.js +93 -0
  336. package/dist/datasets/sources/documents.js.map +7 -0
  337. package/dist/datasets/sources/facts.js +56 -0
  338. package/dist/datasets/sources/facts.js.map +7 -0
  339. package/dist/datasets/sources/projects.js +117 -0
  340. package/dist/datasets/sources/projects.js.map +7 -0
  341. package/dist/datasets/sources/tags.js +67 -0
  342. package/dist/datasets/sources/tags.js.map +7 -0
  343. package/dist/datasets/sources/usage.js +268 -0
  344. package/dist/datasets/sources/usage.js.map +7 -0
  345. package/dist/datasets/sources/workflows.js +91 -0
  346. package/dist/datasets/sources/workflows.js.map +7 -0
  347. package/dist/datasets/sources/workspaces.js +67 -0
  348. package/dist/datasets/sources/workspaces.js.map +7 -0
  349. package/dist/datasets/store.js +194 -0
  350. package/dist/datasets/store.js.map +7 -0
  351. package/dist/datasets/types.js +14 -0
  352. package/dist/datasets/types.js.map +7 -0
  353. package/dist/directmessages/ConversationList.js +148 -0
  354. package/dist/directmessages/ConversationList.js.map +7 -0
  355. package/dist/directmessages/DateSeparator.js +8 -0
  356. package/dist/directmessages/DateSeparator.js.map +7 -0
  357. package/dist/directmessages/DmAvatar.js +29 -0
  358. package/dist/directmessages/DmAvatar.js.map +7 -0
  359. package/dist/directmessages/DmComposer.js +201 -0
  360. package/dist/directmessages/DmComposer.js.map +7 -0
  361. package/dist/directmessages/arrivals.js +29 -0
  362. package/dist/directmessages/arrivals.js.map +7 -0
  363. package/dist/directmessages/chat-cache.js +192 -0
  364. package/dist/directmessages/chat-cache.js.map +7 -0
  365. package/dist/directmessages/grouping.js +26 -0
  366. package/dist/directmessages/grouping.js.map +7 -0
  367. package/dist/directmessages/index.js +81 -0
  368. package/dist/directmessages/index.js.map +7 -0
  369. package/dist/directmessages/useChats.js +266 -0
  370. package/dist/directmessages/useChats.js.map +7 -0
  371. package/dist/directmessages/utils.js +23 -0
  372. package/dist/directmessages/utils.js.map +7 -0
  373. package/dist/document-tools/can-annotate.js +7 -0
  374. package/dist/document-tools/can-annotate.js.map +7 -0
  375. package/dist/document-tools/core.js +218 -12
  376. package/dist/document-tools/core.js.map +7 -1
  377. package/dist/document-tools/document-pdf.js +76 -0
  378. package/dist/document-tools/document-pdf.js.map +7 -0
  379. package/dist/document-tools/environment.js +136 -0
  380. package/dist/document-tools/environment.js.map +7 -0
  381. package/dist/document-tools/file-shares.js +112 -0
  382. package/dist/document-tools/file-shares.js.map +7 -0
  383. package/dist/document-tools/frozen-copy.js +27 -0
  384. package/dist/document-tools/frozen-copy.js.map +7 -0
  385. package/dist/document-tools/index.js +26 -148
  386. package/dist/document-tools/index.js.map +7 -1
  387. package/dist/document-tools/markup-download.js +51 -0
  388. package/dist/document-tools/markup-download.js.map +7 -0
  389. package/dist/document-tools/markup-store.js +138 -0
  390. package/dist/document-tools/markup-store.js.map +7 -0
  391. package/dist/document-tools/markup-transfer.js +88 -0
  392. package/dist/document-tools/markup-transfer.js.map +7 -0
  393. package/dist/document-tools/production.js +147 -0
  394. package/dist/document-tools/production.js.map +7 -0
  395. package/dist/document-tools/saved-signature.js +90 -0
  396. package/dist/document-tools/saved-signature.js.map +7 -0
  397. package/dist/document-tools/signature-requests.js +310 -0
  398. package/dist/document-tools/signature-requests.js.map +7 -0
  399. package/dist/document-tools/signing.js +127 -0
  400. package/dist/document-tools/signing.js.map +7 -0
  401. package/dist/document-tools/useDocumentBytes.js +38 -0
  402. package/dist/document-tools/useDocumentBytes.js.map +7 -0
  403. package/dist/document-tools/useDocumentMarkup.js +154 -0
  404. package/dist/document-tools/useDocumentMarkup.js.map +7 -0
  405. package/dist/document-tools/useIsOnline.js +13 -0
  406. package/dist/document-tools/useIsOnline.js.map +7 -0
  407. package/dist/document-tools/verification.js +60 -0
  408. package/dist/document-tools/verification.js.map +7 -0
  409. package/dist/documents/DocumentReview.js +220 -0
  410. package/dist/documents/DocumentReview.js.map +7 -0
  411. package/dist/documents/DraftTitleControls.js +41 -0
  412. package/dist/documents/DraftTitleControls.js.map +7 -0
  413. package/dist/documents/InlineMicButton.js +90 -0
  414. package/dist/documents/InlineMicButton.js.map +7 -0
  415. package/dist/documents/MicRecordingOverlay.js +29 -0
  416. package/dist/documents/MicRecordingOverlay.js.map +7 -0
  417. package/dist/documents/MicWaveformIndicator.js +68 -0
  418. package/dist/documents/MicWaveformIndicator.js.map +7 -0
  419. package/dist/documents/PhotoCapture.js +120 -0
  420. package/dist/documents/PhotoCapture.js.map +7 -0
  421. package/dist/documents/VideoCapture.js +129 -0
  422. package/dist/documents/VideoCapture.js.map +7 -0
  423. package/dist/documents/VoiceNoteRecorder.js +166 -0
  424. package/dist/documents/VoiceNoteRecorder.js.map +7 -0
  425. package/dist/documents/audio-segmenter.js +63 -0
  426. package/dist/documents/audio-segmenter.js.map +7 -0
  427. package/dist/documents/capture-frame.js +21 -0
  428. package/dist/documents/capture-frame.js.map +7 -0
  429. package/dist/documents/chunked-recorder.js +190 -0
  430. package/dist/documents/chunked-recorder.js.map +7 -0
  431. package/dist/documents/document-download.js +53 -0
  432. package/dist/documents/document-download.js.map +7 -0
  433. package/dist/documents/document-fields.js +109 -0
  434. package/dist/documents/document-fields.js.map +7 -0
  435. package/dist/documents/documents-cache.js +110 -0
  436. package/dist/documents/documents-cache.js.map +7 -0
  437. package/dist/documents/documents-data.js +128 -0
  438. package/dist/documents/documents-data.js.map +7 -0
  439. package/dist/documents/documents-loader.js +113 -0
  440. package/dist/documents/documents-loader.js.map +7 -0
  441. package/dist/documents/documents-writes.js +448 -0
  442. package/dist/documents/documents-writes.js.map +7 -0
  443. package/dist/documents/format-elapsed.js +10 -0
  444. package/dist/documents/format-elapsed.js.map +7 -0
  445. package/dist/documents/has-video-track.js +26 -0
  446. package/dist/documents/has-video-track.js.map +7 -0
  447. package/dist/documents/index.js +266 -0
  448. package/dist/documents/index.js.map +7 -0
  449. package/dist/documents/media-error.js +18 -0
  450. package/dist/documents/media-error.js.map +7 -0
  451. package/dist/documents/offline-documents.js +160 -0
  452. package/dist/documents/offline-documents.js.map +7 -0
  453. package/dist/documents/pending-sync.js +210 -0
  454. package/dist/documents/pending-sync.js.map +7 -0
  455. package/dist/documents/processing-live.js +122 -0
  456. package/dist/documents/processing-live.js.map +7 -0
  457. package/dist/documents/processing-order.js +59 -0
  458. package/dist/documents/processing-order.js.map +7 -0
  459. package/dist/documents/processing-settle.js +21 -0
  460. package/dist/documents/processing-settle.js.map +7 -0
  461. package/dist/documents/related-documents.js +133 -0
  462. package/dist/documents/related-documents.js.map +7 -0
  463. package/dist/documents/support.js +29 -0
  464. package/dist/documents/support.js.map +7 -0
  465. package/dist/documents/upload-files.js +169 -0
  466. package/dist/documents/upload-files.js.map +7 -0
  467. package/dist/documents/useAudioRecorder.js +315 -0
  468. package/dist/documents/useAudioRecorder.js.map +7 -0
  469. package/dist/documents/useCameraStream.js +35 -0
  470. package/dist/documents/useCameraStream.js.map +7 -0
  471. package/dist/documents/useDocumentThumbnails.js +71 -0
  472. package/dist/documents/useDocumentThumbnails.js.map +7 -0
  473. package/dist/documents/useDownloadDocuments.js +90 -0
  474. package/dist/documents/useDownloadDocuments.js.map +7 -0
  475. package/dist/documents/usePassageQuotes.js +37 -0
  476. package/dist/documents/usePassageQuotes.js.map +7 -0
  477. package/dist/documents/useUploadFiles.js +165 -0
  478. package/dist/documents/useUploadFiles.js.map +7 -0
  479. package/dist/documents/useUploadFromUrls.js +63 -0
  480. package/dist/documents/useUploadFromUrls.js.map +7 -0
  481. package/dist/documents/useVideoRecorder.js +62 -0
  482. package/dist/documents/useVideoRecorder.js.map +7 -0
  483. package/dist/entities/AgentMarkers.js +61 -0
  484. package/dist/entities/AgentMarkers.js.map +7 -0
  485. package/dist/entities/DocumentEntity.js +125 -0
  486. package/dist/entities/DocumentEntity.js.map +7 -0
  487. package/dist/entities/EntityPill.js +250 -0
  488. package/dist/entities/EntityPill.js.map +7 -0
  489. package/dist/entities/ProjectEntity.js +61 -0
  490. package/dist/entities/ProjectEntity.js.map +7 -0
  491. package/dist/entities/ShieldIcon.js +49 -0
  492. package/dist/entities/ShieldIcon.js.map +7 -0
  493. package/dist/entities/TagEntity.js +79 -0
  494. package/dist/entities/TagEntity.js.map +7 -0
  495. package/dist/entities/ThreadVisibilityIcon.js +15 -0
  496. package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
  497. package/dist/entities/UserEntity.js +211 -0
  498. package/dist/entities/UserEntity.js.map +7 -0
  499. package/dist/entities/VerifiedBadge.js +19 -0
  500. package/dist/entities/VerifiedBadge.js.map +7 -0
  501. package/dist/entities/agent-avatar-colors.js +26 -0
  502. package/dist/entities/agent-avatar-colors.js.map +7 -0
  503. package/dist/entities/colors.js +64 -0
  504. package/dist/entities/colors.js.map +7 -0
  505. package/dist/entities/file-type.js +151 -0
  506. package/dist/entities/file-type.js.map +7 -0
  507. package/dist/entities/index.js +100 -0
  508. package/dist/entities/index.js.map +7 -0
  509. package/dist/entities/media-type.js +61 -0
  510. package/dist/entities/media-type.js.map +7 -0
  511. package/dist/entities/registry.js +385 -0
  512. package/dist/entities/registry.js.map +7 -0
  513. package/dist/entities/status.js +43 -0
  514. package/dist/entities/status.js.map +7 -0
  515. package/dist/entities/tag-kinds.js +23 -0
  516. package/dist/entities/tag-kinds.js.map +7 -0
  517. package/dist/entities/tag-types.js +44 -0
  518. package/dist/entities/tag-types.js.map +7 -0
  519. package/dist/entities/vocabulary.js +12 -0
  520. package/dist/entities/vocabulary.js.map +7 -0
  521. package/dist/entity-extraction.js +25 -0
  522. package/dist/entity-extraction.js.map +7 -0
  523. package/dist/facts-search.js +57 -0
  524. package/dist/facts-search.js.map +7 -0
  525. package/dist/facts.js +69 -0
  526. package/dist/facts.js.map +7 -0
  527. package/dist/hooks.js +320 -0
  528. package/dist/hooks.js.map +7 -0
  529. package/dist/host/ArbiHost.js +24 -0
  530. package/dist/host/ArbiHost.js.map +7 -0
  531. package/dist/host/assistant-copy.js +54 -0
  532. package/dist/host/assistant-copy.js.map +7 -0
  533. package/dist/host/config.js +9 -0
  534. package/dist/host/config.js.map +7 -0
  535. package/dist/host/context.js +10 -0
  536. package/dist/host/context.js.map +7 -0
  537. package/dist/host/features.js +144 -0
  538. package/dist/host/features.js.map +7 -0
  539. package/dist/host/index.js +12 -0
  540. package/dist/host/index.js.map +7 -0
  541. package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
  542. package/dist/host/merge.js.map +7 -0
  543. package/dist/house-template.js +40 -0
  544. package/dist/house-template.js.map +7 -0
  545. package/dist/icons/AppleIcon.js +25 -0
  546. package/dist/icons/AppleIcon.js.map +7 -0
  547. package/dist/icons/ArbiBotHeadIcon.js +46 -0
  548. package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
  549. package/dist/icons/ArbiIcon.js +24 -0
  550. package/dist/icons/ArbiIcon.js.map +7 -0
  551. package/dist/icons/AudIcon.js +56 -0
  552. package/dist/icons/AudIcon.js.map +7 -0
  553. package/dist/icons/ClaudeIcon.js +28 -0
  554. package/dist/icons/ClaudeIcon.js.map +7 -0
  555. package/dist/icons/DocIcon.js +56 -0
  556. package/dist/icons/DocIcon.js.map +7 -0
  557. package/dist/icons/EmlIcon.js +57 -0
  558. package/dist/icons/EmlIcon.js.map +7 -0
  559. package/dist/icons/FireworksIcon.js +47 -0
  560. package/dist/icons/FireworksIcon.js.map +7 -0
  561. package/dist/icons/GeminiIcon.js +37 -0
  562. package/dist/icons/GeminiIcon.js.map +7 -0
  563. package/dist/icons/GitHubIcon.js +32 -0
  564. package/dist/icons/GitHubIcon.js.map +7 -0
  565. package/dist/icons/GoogleIcon.js +53 -0
  566. package/dist/icons/GoogleIcon.js.map +7 -0
  567. package/dist/icons/HtmlIcon.js +56 -0
  568. package/dist/icons/HtmlIcon.js.map +7 -0
  569. package/dist/icons/ImgIcon.js +56 -0
  570. package/dist/icons/ImgIcon.js.map +7 -0
  571. package/dist/icons/LinkedInIcon.js +25 -0
  572. package/dist/icons/LinkedInIcon.js.map +7 -0
  573. package/dist/icons/OpenAIIcon.js +28 -0
  574. package/dist/icons/OpenAIIcon.js.map +7 -0
  575. package/dist/icons/PdfIcon.js +56 -0
  576. package/dist/icons/PdfIcon.js.map +7 -0
  577. package/dist/icons/ProviderIcon.js +42 -0
  578. package/dist/icons/ProviderIcon.js.map +7 -0
  579. package/dist/icons/TxtIcon.js +56 -0
  580. package/dist/icons/TxtIcon.js.map +7 -0
  581. package/dist/icons/VidIcon.js +56 -0
  582. package/dist/icons/VidIcon.js.map +7 -0
  583. package/dist/icons/XlsIcon.js +56 -0
  584. package/dist/icons/XlsIcon.js.map +7 -0
  585. package/dist/icons/arbi-mark.js +5 -0
  586. package/dist/icons/arbi-mark.js.map +7 -0
  587. package/dist/icons/colors.js +31 -0
  588. package/dist/icons/colors.js.map +7 -0
  589. package/dist/icons/file-type.js +105 -0
  590. package/dist/icons/file-type.js.map +7 -0
  591. package/dist/icons/index.js +55 -0
  592. package/dist/icons/index.js.map +7 -0
  593. package/dist/imagecrop/ImageCropModal.js +56 -0
  594. package/dist/imagecrop/ImageCropModal.js.map +7 -0
  595. package/dist/imagecrop/ImageCropper.js +100 -0
  596. package/dist/imagecrop/ImageCropper.js.map +7 -0
  597. package/dist/imagecrop/cropImage.js +43 -0
  598. package/dist/imagecrop/cropImage.js.map +7 -0
  599. package/dist/imagecrop/index.js +13 -0
  600. package/dist/imagecrop/index.js.map +7 -0
  601. package/dist/index.js +702 -17116
  602. package/dist/index.js.map +7 -1
  603. package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
  604. package/dist/lazy-chunk.js.map +7 -0
  605. package/dist/lib/collision-padding.js +13 -0
  606. package/dist/lib/collision-padding.js.map +7 -0
  607. package/dist/lib/format-friendly-date.js +55 -0
  608. package/dist/lib/format-friendly-date.js.map +7 -0
  609. package/dist/lib/format-relative-time.js +52 -0
  610. package/dist/lib/format-relative-time.js.map +7 -0
  611. package/dist/lib/markdown-to-text.js +35 -0
  612. package/dist/lib/markdown-to-text.js.map +7 -0
  613. package/dist/lib/toast-interaction.js +9 -0
  614. package/dist/lib/toast-interaction.js.map +7 -0
  615. package/dist/lib/utils.js +9 -0
  616. package/dist/lib/utils.js.map +7 -0
  617. package/dist/mail/client.js +103 -0
  618. package/dist/mail/client.js.map +7 -0
  619. package/dist/mail/document-attachment.js +38 -0
  620. package/dist/mail/document-attachment.js.map +7 -0
  621. package/dist/mail/filing.js +132 -0
  622. package/dist/mail/filing.js.map +7 -0
  623. package/dist/mail/hooks.js +393 -0
  624. package/dist/mail/hooks.js.map +7 -0
  625. package/dist/mail/index.js +120 -0
  626. package/dist/mail/index.js.map +7 -0
  627. package/dist/mail/offline/changes.js +258 -0
  628. package/dist/mail/offline/changes.js.map +7 -0
  629. package/dist/mail/offline/confirm-sign-out.js +37 -0
  630. package/dist/mail/offline/confirm-sign-out.js.map +7 -0
  631. package/dist/mail/offline/crypto.js +26 -0
  632. package/dist/mail/offline/crypto.js.map +7 -0
  633. package/dist/mail/offline/drafts.js +69 -0
  634. package/dist/mail/offline/drafts.js.map +7 -0
  635. package/dist/mail/offline/hooks.js +104 -0
  636. package/dist/mail/offline/hooks.js.map +7 -0
  637. package/dist/mail/offline/index.js +48 -0
  638. package/dist/mail/offline/index.js.map +7 -0
  639. package/dist/mail/offline/live.js +233 -0
  640. package/dist/mail/offline/live.js.map +7 -0
  641. package/dist/mail/offline/mailbox.js +191 -0
  642. package/dist/mail/offline/mailbox.js.map +7 -0
  643. package/dist/mail/offline/outbox.js +167 -0
  644. package/dist/mail/offline/outbox.js.map +7 -0
  645. package/dist/mail/offline/reads.js +159 -0
  646. package/dist/mail/offline/reads.js.map +7 -0
  647. package/dist/mail/offline/runtime.js +100 -0
  648. package/dist/mail/offline/runtime.js.map +7 -0
  649. package/dist/mail/offline/settings.js +84 -0
  650. package/dist/mail/offline/settings.js.map +7 -0
  651. package/dist/mail/offline/store.js +29 -0
  652. package/dist/mail/offline/store.js.map +7 -0
  653. package/dist/mail/offline/sync.js +251 -0
  654. package/dist/mail/offline/sync.js.map +7 -0
  655. package/dist/mail/offline/wipe.js +19 -0
  656. package/dist/mail/offline/wipe.js.map +7 -0
  657. package/dist/mail/thread-keys.js +53 -0
  658. package/dist/mail/thread-keys.js.map +7 -0
  659. package/dist/mail/threads.js +71 -0
  660. package/dist/mail/threads.js.map +7 -0
  661. package/dist/mail/useMailClient.js +42 -0
  662. package/dist/mail/useMailClient.js.map +7 -0
  663. package/dist/model-connections.js +58 -0
  664. package/dist/model-connections.js.map +7 -0
  665. package/dist/notifications/ActivityFeed.js +70 -0
  666. package/dist/notifications/ActivityFeed.js.map +7 -0
  667. package/dist/notifications/NotificationBell.js +200 -0
  668. package/dist/notifications/NotificationBell.js.map +7 -0
  669. package/dist/notifications/Toaster.js +24 -0
  670. package/dist/notifications/Toaster.js.map +7 -0
  671. package/dist/notifications/activity-types.js +65 -0
  672. package/dist/notifications/activity-types.js.map +7 -0
  673. package/dist/notifications/bell.js +24 -0
  674. package/dist/notifications/bell.js.map +7 -0
  675. package/dist/notifications/calendar-notifications.js +79 -0
  676. package/dist/notifications/calendar-notifications.js.map +7 -0
  677. package/dist/notifications/index.js +108 -0
  678. package/dist/notifications/index.js.map +7 -0
  679. package/dist/notifications/live.js +28 -0
  680. package/dist/notifications/live.js.map +7 -0
  681. package/dist/notifications/notification-types.js +127 -0
  682. package/dist/notifications/notification-types.js.map +7 -0
  683. package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
  684. package/dist/notifications/notify-store.js.map +7 -0
  685. package/dist/notifications/server-notifications.js +452 -0
  686. package/dist/notifications/server-notifications.js.map +7 -0
  687. package/dist/notifications/useNotifications.js +34 -0
  688. package/dist/notifications/useNotifications.js.map +7 -0
  689. package/dist/offline-store/network.js +11 -0
  690. package/dist/offline-store/network.js.map +7 -0
  691. package/dist/offline-store/store.js +136 -0
  692. package/dist/offline-store/store.js.map +7 -0
  693. package/dist/offline-store/wipe.js +8 -0
  694. package/dist/offline-store/wipe.js.map +7 -0
  695. package/dist/offline.js +58 -0
  696. package/dist/offline.js.map +7 -0
  697. package/dist/people.js +122 -0
  698. package/dist/people.js.map +7 -0
  699. package/dist/projects.js +30 -0
  700. package/dist/projects.js.map +7 -0
  701. package/dist/query-client.js +63 -0
  702. package/dist/query-client.js.map +7 -0
  703. package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
  704. package/dist/query-keys.js.map +7 -0
  705. package/dist/query-persist.js +66 -0
  706. package/dist/query-persist.js.map +7 -0
  707. package/dist/queued-writes.js +59 -0
  708. package/dist/queued-writes.js.map +7 -0
  709. package/dist/remote-control.js +67 -0
  710. package/dist/remote-control.js.map +7 -0
  711. package/dist/search/index.js +23 -0
  712. package/dist/search/index.js.map +7 -0
  713. package/dist/search/session.js +58 -0
  714. package/dist/search/session.js.map +7 -0
  715. package/dist/search/useSemanticSearch.js +82 -0
  716. package/dist/search/useSemanticSearch.js.map +7 -0
  717. package/dist/session/chat.js +512 -0
  718. package/dist/session/chat.js.map +7 -0
  719. package/dist/session/documents.js +196 -0
  720. package/dist/session/documents.js.map +7 -0
  721. package/dist/session/drafts.js +103 -0
  722. package/dist/session/drafts.js.map +7 -0
  723. package/dist/session/index.js +123 -0
  724. package/dist/session/index.js.map +7 -0
  725. package/dist/session/layout.js +339 -0
  726. package/dist/session/layout.js.map +7 -0
  727. package/dist/session/persist.js +106 -0
  728. package/dist/session/persist.js.map +7 -0
  729. package/dist/session/session-hooks.js +53 -0
  730. package/dist/session/session-hooks.js.map +7 -0
  731. package/dist/session/signed-in.js +36 -0
  732. package/dist/session/signed-in.js.map +7 -0
  733. package/dist/session/store.js +166 -0
  734. package/dist/session/store.js.map +7 -0
  735. package/dist/session/thread-tabs.js +121 -0
  736. package/dist/session/thread-tabs.js.map +7 -0
  737. package/dist/session/ui-state-storage.js +76 -0
  738. package/dist/session/ui-state-storage.js.map +7 -0
  739. package/dist/session/workspace.js +77 -0
  740. package/dist/session/workspace.js.map +7 -0
  741. package/dist/shell/index.js +43 -10
  742. package/dist/shell/index.js.map +7 -1
  743. package/dist/skill-pack.js +111 -0
  744. package/dist/skill-pack.js.map +7 -0
  745. package/dist/storage.js +186 -0
  746. package/dist/storage.js.map +7 -0
  747. package/dist/support/index.js +35 -0
  748. package/dist/support/index.js.map +7 -0
  749. package/dist/tags.js +204 -0
  750. package/dist/tags.js.map +7 -0
  751. package/dist/ui/DebouncedInput.js +109 -0
  752. package/dist/ui/DebouncedInput.js.map +7 -0
  753. package/dist/ui/DictateContext.js +8 -0
  754. package/dist/ui/DictateContext.js.map +7 -0
  755. package/dist/ui/IconToggle.js +79 -0
  756. package/dist/ui/IconToggle.js.map +7 -0
  757. package/dist/ui/VerifiedToggle.js +38 -0
  758. package/dist/ui/VerifiedToggle.js.map +7 -0
  759. package/dist/ui/VisibilityToggle.js +103 -0
  760. package/dist/ui/VisibilityToggle.js.map +7 -0
  761. package/dist/ui/avatar.js +40 -0
  762. package/dist/ui/avatar.js.map +7 -0
  763. package/dist/ui/badge.js +28 -0
  764. package/dist/ui/badge.js.map +7 -0
  765. package/dist/ui/button.js +48 -0
  766. package/dist/ui/button.js.map +7 -0
  767. package/dist/ui/card.js +90 -0
  768. package/dist/ui/card.js.map +7 -0
  769. package/dist/ui/checkbox.js +22 -0
  770. package/dist/ui/checkbox.js.map +7 -0
  771. package/dist/ui/collapsible.js +10 -0
  772. package/dist/ui/collapsible.js.map +7 -0
  773. package/dist/ui/command.js +103 -0
  774. package/dist/ui/command.js.map +7 -0
  775. package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
  776. package/dist/ui/dialog.js.map +7 -0
  777. package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
  778. package/dist/ui/dropdown-menu.js.map +7 -0
  779. package/dist/ui/hover-card.js +36 -0
  780. package/dist/ui/hover-card.js.map +7 -0
  781. package/dist/ui/index.js +290 -10
  782. package/dist/ui/index.js.map +7 -1
  783. package/dist/ui/input.js +65 -0
  784. package/dist/ui/input.js.map +7 -0
  785. package/dist/ui/label.js +16 -0
  786. package/dist/ui/label.js.map +7 -0
  787. package/dist/ui/mark-menu.js +300 -0
  788. package/dist/ui/mark-menu.js.map +7 -0
  789. package/dist/ui/popover.js +40 -0
  790. package/dist/ui/popover.js.map +7 -0
  791. package/dist/ui/portal-container.js +17 -0
  792. package/dist/ui/portal-container.js.map +7 -0
  793. package/dist/ui/progress.js +24 -0
  794. package/dist/ui/progress.js.map +7 -0
  795. package/dist/ui/radio-group.js +29 -0
  796. package/dist/ui/radio-group.js.map +7 -0
  797. package/dist/ui/scroll-area.js +39 -0
  798. package/dist/ui/scroll-area.js.map +7 -0
  799. package/dist/ui/select.js +130 -0
  800. package/dist/ui/select.js.map +7 -0
  801. package/dist/ui/separator.js +23 -0
  802. package/dist/ui/separator.js.map +7 -0
  803. package/dist/ui/slider.js +23 -0
  804. package/dist/ui/slider.js.map +7 -0
  805. package/dist/ui/switch.js +28 -0
  806. package/dist/ui/switch.js.map +7 -0
  807. package/dist/ui/table.js +75 -0
  808. package/dist/ui/table.js.map +7 -0
  809. package/dist/ui/tabs.js +48 -0
  810. package/dist/ui/tabs.js.map +7 -0
  811. package/dist/ui/textarea.js +63 -0
  812. package/dist/ui/textarea.js.map +7 -0
  813. package/dist/ui/toggle-group.js +43 -0
  814. package/dist/ui/toggle-group.js.map +7 -0
  815. package/dist/ui/toggle.js +40 -0
  816. package/dist/ui/toggle.js.map +7 -0
  817. package/dist/ui/tooltip.js +215 -0
  818. package/dist/ui/tooltip.js.map +7 -0
  819. package/dist/usage-metered.js +8 -0
  820. package/dist/usage-metered.js.map +7 -0
  821. package/dist/useArbi.js +16 -0
  822. package/dist/useArbi.js.map +7 -0
  823. package/dist/useInstallSkillPack.js +81 -0
  824. package/dist/useInstallSkillPack.js.map +7 -0
  825. package/dist/usermenu/UserMenu.js +188 -0
  826. package/dist/usermenu/UserMenu.js.map +7 -0
  827. package/dist/usermenu/index.js +5 -0
  828. package/dist/usermenu/index.js.map +7 -0
  829. package/dist/users/index.js +15 -0
  830. package/dist/users/index.js.map +7 -0
  831. package/dist/users/user-display.js +60 -0
  832. package/dist/users/user-display.js.map +7 -0
  833. package/dist/viewers/AudioViewer.js +23 -0
  834. package/dist/viewers/AudioViewer.js.map +7 -0
  835. package/dist/viewers/DocxViewer.js +81 -0
  836. package/dist/viewers/DocxViewer.js.map +7 -0
  837. package/dist/viewers/ImageViewer.js +31 -0
  838. package/dist/viewers/ImageViewer.js.map +7 -0
  839. package/dist/viewers/PdfViewer.js +19 -3
  840. package/dist/viewers/PdfViewer.js.map +7 -1
  841. package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
  842. package/dist/viewers/PdfViewerImpl.js.map +7 -0
  843. package/dist/viewers/VideoViewer.js +31 -0
  844. package/dist/viewers/VideoViewer.js.map +7 -0
  845. package/dist/viewers/XlsxViewer.js +102 -0
  846. package/dist/viewers/XlsxViewer.js.map +7 -0
  847. package/dist/viewers/index.js +61 -271
  848. package/dist/viewers/index.js.map +7 -1
  849. package/dist/viewers/page-scroll.js +59 -0
  850. package/dist/viewers/page-scroll.js.map +7 -0
  851. package/dist/viewers/pdf-viewer-constants.js +9 -0
  852. package/dist/viewers/pdf-viewer-constants.js.map +7 -0
  853. package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
  854. package/dist/viewers/pdfjs-polyfills.js.map +7 -0
  855. package/dist/viewers/selection-runs.js +38 -0
  856. package/dist/viewers/selection-runs.js.map +7 -0
  857. package/dist/viewers/usePageIntersectionObserver.js +68 -0
  858. package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
  859. package/dist/viewers/useProcessedChunks.js +58 -0
  860. package/dist/viewers/useProcessedChunks.js.map +7 -0
  861. package/dist/viewers/viewer-zoom.js +163 -0
  862. package/dist/viewers/viewer-zoom.js.map +7 -0
  863. package/dist/websocket/ArbiWebSocketProvider.js +207 -0
  864. package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
  865. package/dist/websocket/context.js +14 -0
  866. package/dist/websocket/context.js.map +7 -0
  867. package/dist/websocket/hooks.js +30 -0
  868. package/dist/websocket/hooks.js.map +7 -0
  869. package/dist/websocket/index.js +22 -0
  870. package/dist/websocket/index.js.map +7 -0
  871. package/dist/websocket/live-updates.js +38 -0
  872. package/dist/websocket/live-updates.js.map +7 -0
  873. package/dist/websocket/reconnect.js +13 -0
  874. package/dist/websocket/reconnect.js.map +7 -0
  875. package/dist/websocket/store.js +58 -0
  876. package/dist/websocket/store.js.map +7 -0
  877. package/dist/workforce.js +607 -0
  878. package/dist/workforce.js.map +7 -0
  879. package/dist/workspaces/access-request.js +35 -0
  880. package/dist/workspaces/access-request.js.map +7 -0
  881. package/dist/workspaces/archive.js +59 -0
  882. package/dist/workspaces/archive.js.map +7 -0
  883. package/dist/workspaces/current.js +20 -0
  884. package/dist/workspaces/current.js.map +7 -0
  885. package/dist/workspaces/delete-workspaces.js +15 -0
  886. package/dist/workspaces/delete-workspaces.js.map +7 -0
  887. package/dist/workspaces/export-archive.js +40 -0
  888. package/dist/workspaces/export-archive.js.map +7 -0
  889. package/dist/workspaces/index.js +99 -0
  890. package/dist/workspaces/index.js.map +7 -0
  891. package/dist/workspaces/settings.js +45 -0
  892. package/dist/workspaces/settings.js.map +7 -0
  893. package/dist/workspaces/shell-workspaces.js +49 -0
  894. package/dist/workspaces/shell-workspaces.js.map +7 -0
  895. package/dist/workspaces/switch.js +234 -0
  896. package/dist/workspaces/switch.js.map +7 -0
  897. package/dist/workspaces/transfer.js +170 -0
  898. package/dist/workspaces/transfer.js.map +7 -0
  899. package/dist/workspaces/useShellWorkspaces.js +86 -0
  900. package/dist/workspaces/useShellWorkspaces.js.map +7 -0
  901. package/dist/workspaces/workspace-users.js +65 -0
  902. package/dist/workspaces/workspace-users.js.map +7 -0
  903. package/package.json +4 -4
  904. package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
  905. package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
  906. package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
  907. package/dist/annotations/freeze/index.d.cts +0 -205
  908. package/dist/annotations/index.d.cts +0 -360
  909. package/dist/artifacts/index.d.cts +0 -476
  910. package/dist/artifacts/redline-core.d.cts +0 -39
  911. package/dist/bundle-YNOX7VIL.js +0 -5
  912. package/dist/bundle-YNOX7VIL.js.map +0 -1
  913. package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
  914. package/dist/calls/livekit/index.d.cts +0 -280
  915. package/dist/chunk-47CCGUWR.js.map +0 -1
  916. package/dist/chunk-4FL3X3LA.js +0 -2057
  917. package/dist/chunk-4FL3X3LA.js.map +0 -1
  918. package/dist/chunk-6QNBSXCE.js +0 -271
  919. package/dist/chunk-6QNBSXCE.js.map +0 -1
  920. package/dist/chunk-74N436VK.js.map +0 -1
  921. package/dist/chunk-APZZQZ6P.js +0 -147
  922. package/dist/chunk-APZZQZ6P.js.map +0 -1
  923. package/dist/chunk-BF5KW5ZI.js.map +0 -1
  924. package/dist/chunk-DPYBZDJB.js.map +0 -1
  925. package/dist/chunk-DZKRL5H3.js +0 -2766
  926. package/dist/chunk-DZKRL5H3.js.map +0 -1
  927. package/dist/chunk-HDCRPPBW.js +0 -75
  928. package/dist/chunk-HDCRPPBW.js.map +0 -1
  929. package/dist/chunk-L2IPPTVC.js +0 -20
  930. package/dist/chunk-L2IPPTVC.js.map +0 -1
  931. package/dist/chunk-LSU4UPS5.js +0 -1011
  932. package/dist/chunk-LSU4UPS5.js.map +0 -1
  933. package/dist/chunk-NIKPG4PW.js +0 -1128
  934. package/dist/chunk-NIKPG4PW.js.map +0 -1
  935. package/dist/chunk-NNAJLY6B.js +0 -4974
  936. package/dist/chunk-NNAJLY6B.js.map +0 -1
  937. package/dist/chunk-OYPKKHXY.js +0 -559
  938. package/dist/chunk-OYPKKHXY.js.map +0 -1
  939. package/dist/chunk-PTOP7OHG.js.map +0 -1
  940. package/dist/chunk-QMY2JKBI.js +0 -246
  941. package/dist/chunk-QMY2JKBI.js.map +0 -1
  942. package/dist/chunk-SN5YV6FF.js +0 -11
  943. package/dist/chunk-SN5YV6FF.js.map +0 -1
  944. package/dist/chunk-SSXFVWCT.js.map +0 -1
  945. package/dist/chunk-T3USOSVN.js.map +0 -1
  946. package/dist/chunk-T4CLW3DN.js +0 -2560
  947. package/dist/chunk-T4CLW3DN.js.map +0 -1
  948. package/dist/chunk-UW2SGTI5.js.map +0 -1
  949. package/dist/chunk-VSCU7K4V.js.map +0 -1
  950. package/dist/chunk-WL2Y2T47.js.map +0 -1
  951. package/dist/chunk-WUTL62MC.js.map +0 -1
  952. package/dist/chunk-XWPLOFDN.js +0 -644
  953. package/dist/chunk-XWPLOFDN.js.map +0 -1
  954. package/dist/chunk-Y3MTRA7D.js +0 -97
  955. package/dist/chunk-Y3MTRA7D.js.map +0 -1
  956. package/dist/chunk-YNNAJJ5Z.js.map +0 -1
  957. package/dist/chunk-ZM6N7YZH.js.map +0 -1
  958. package/dist/document-tools/core.d.cts +0 -883
  959. package/dist/document-tools/index.d.cts +0 -90
  960. package/dist/index.d-LArLnpI8.d.cts +0 -2036
  961. package/dist/index.d-oR5FKZpJ.d.cts +0 -579
  962. package/dist/index.d.cts +0 -15923
  963. package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
  964. package/dist/model.d-CNtRWKVK.d.cts +0 -110
  965. package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
  966. package/dist/shell/index.d.cts +0 -6
  967. package/dist/store.d-GADDvC7w.d.cts +0 -35
  968. package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
  969. package/dist/ui/index.d.cts +0 -26
  970. package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
  971. package/dist/viewers/PdfViewer.d.cts +0 -9
  972. package/dist/viewers/index.d.cts +0 -262
@@ -0,0 +1,452 @@
1
+ import { mailDraftIdFromContent } from "../mail/client.js";
2
+ function notificationUserName(user) {
3
+ return [user.given_name, user.family_name].filter(Boolean).join(" ") || user.email;
4
+ }
5
+ const CONVERSATION_ID = /^con-[a-zA-Z0-9]+$/;
6
+ const WORKFLOW_ID = /^wfl-[a-zA-Z0-9]+$/;
7
+ const DOCUMENT_ID = /^doc-[a-zA-Z0-9]+$/;
8
+ function parse(content) {
9
+ try {
10
+ const value = JSON.parse(content || "{}");
11
+ return value && typeof value === "object" ? value : null;
12
+ } catch {
13
+ return null;
14
+ }
15
+ }
16
+ function inputRequestTitle(content) {
17
+ const metadata = parse(content);
18
+ if (!metadata) return "ARBI needs your input \u2014 open the thread to reply";
19
+ const timeout = typeof metadata.timeout_seconds === "number" ? metadata.timeout_seconds : 300;
20
+ const minutes = Math.ceil(timeout / 60);
21
+ const deadline = typeof metadata.expires_at === "string" ? new Date(metadata.expires_at) : null;
22
+ if (deadline && Number.isFinite(deadline.getTime())) {
23
+ return `ARBI needs your input \u2014 ${minutes} min to reply (until ${deadline.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })})`;
24
+ }
25
+ return `ARBI needs your input \u2014 ${minutes} min to reply`;
26
+ }
27
+ function documentActivityMeta(content) {
28
+ const meta = parse(content);
29
+ if (!meta) return {};
30
+ const documentId = typeof meta.doc_ext_id === "string" && DOCUMENT_ID.test(meta.doc_ext_id) ? meta.doc_ext_id : void 0;
31
+ const version = typeof meta.version === "number" && Number.isInteger(meta.version) && meta.version > 0 ? meta.version : void 0;
32
+ const reason = typeof meta.reason === "string" ? meta.reason : void 0;
33
+ return { documentId, reason, version };
34
+ }
35
+ function documentActivityPhrase(content) {
36
+ const { reason, version } = documentActivityMeta(content);
37
+ if (reason === "signed") return "signed a document";
38
+ return version ? `saved version ${version} of a document` : "saved a new version of a document";
39
+ }
40
+ function docxMentionMeta(content) {
41
+ const meta = parse(content);
42
+ if (!meta || typeof meta.document_id !== "string" || !DOCUMENT_ID.test(meta.document_id))
43
+ return {};
44
+ return {
45
+ documentId: meta.document_id,
46
+ commentId: typeof meta.comment_id === "string" && meta.comment_id ? meta.comment_id : void 0
47
+ };
48
+ }
49
+ function signatureRequestMeta(content) {
50
+ const meta = parse(content);
51
+ if (!meta) return {};
52
+ const documentId = typeof meta.document_id === "string" && DOCUMENT_ID.test(meta.document_id) ? meta.document_id : void 0;
53
+ const version = typeof meta.signed_version === "number" && Number.isInteger(meta.signed_version) ? meta.signed_version : void 0;
54
+ return { documentId, version };
55
+ }
56
+ const SIGNATURE_NOTIFICATION_TYPES = [
57
+ "signature_requested",
58
+ "signature_completed",
59
+ "signature_declined"
60
+ ];
61
+ function isSignatureNotificationType(type) {
62
+ return SIGNATURE_NOTIFICATION_TYPES.includes(type ?? "");
63
+ }
64
+ function signatureNotificationPhrase(type, incoming) {
65
+ if (incoming) {
66
+ switch (type) {
67
+ case "signature_requested":
68
+ return { lead: "", showPerson: true, verb: "asked you to sign", tail: "" };
69
+ case "signature_completed":
70
+ return { lead: "", showPerson: true, verb: "signed", tail: " \u2014 everyone has now signed" };
71
+ case "signature_declined":
72
+ return { lead: "", showPerson: true, verb: "declined to sign", tail: "" };
73
+ }
74
+ }
75
+ switch (type) {
76
+ case "signature_requested":
77
+ return { lead: "You asked", showPerson: true, verb: "to sign", tail: "" };
78
+ case "signature_completed":
79
+ return { lead: "You signed", showPerson: false, verb: "", tail: " \u2014 everyone has now signed" };
80
+ case "signature_declined":
81
+ return { lead: "You declined to sign", showPerson: false, verb: "", tail: "" };
82
+ }
83
+ }
84
+ function callNotificationMeta(content) {
85
+ const meta = parse(content);
86
+ return {
87
+ callExtId: typeof meta?.call_ext_id === "string" && /^call-[a-zA-Z0-9]{8}$/.test(meta.call_ext_id) ? meta.call_ext_id : void 0
88
+ };
89
+ }
90
+ const BOX_SEAT_REFUSED = "box_seat_refused";
91
+ const BOX_SEAT_REFUSED_TITLE = "Invitation not sent: your Box has no seat left. Your Box admins have been notified and can add users in the ARBI portal.";
92
+ const BOX_SEAT_REFUSED_ACTION = "Open the ARBI portal";
93
+ function isDeploymentUserNotification(type) {
94
+ return type === "deployment_user_invited" || type === "deployment_user_registered";
95
+ }
96
+ const ALLOWED_PORTAL_ORIGINS = ["https://portal.arbicity.com"];
97
+ function safePortalUrl(value, origins = ALLOWED_PORTAL_ORIGINS) {
98
+ if (typeof value !== "string") return void 0;
99
+ try {
100
+ const url = new URL(value);
101
+ if (url.protocol !== "https:" || !origins.includes(url.origin)) return void 0;
102
+ return url.href;
103
+ } catch {
104
+ return void 0;
105
+ }
106
+ }
107
+ function deploymentUserMeta(content, origins = ALLOWED_PORTAL_ORIGINS) {
108
+ const meta = parse(content);
109
+ if (!meta) return { external: false };
110
+ const email = typeof meta.email === "string" && meta.email.trim() ? meta.email.trim() : void 0;
111
+ return {
112
+ email,
113
+ external: meta.user_type === "external",
114
+ portalUrl: safePortalUrl(meta.portal_url, origins)
115
+ };
116
+ }
117
+ function documentDisplayName(doc) {
118
+ return doc?.doc_metadata?.title || doc?.file_name || void 0;
119
+ }
120
+ const WORK_NOTIFICATION_LABELS = {
121
+ conversation_ready: "A task is ready",
122
+ conversation_done: "A task was marked done",
123
+ conversation_notified: "You were notified in a thread",
124
+ workflow_failed: "A workflow failed to run"
125
+ };
126
+ function conversationTarget(n) {
127
+ if (!n.conversation_ext_id || !CONVERSATION_ID.test(n.conversation_ext_id)) return void 0;
128
+ return {
129
+ kind: "conversation",
130
+ workspaceId: n.workspace_ext_id ?? void 0,
131
+ conversationId: n.conversation_ext_id,
132
+ ...n.message_ext_id ? { messageId: n.message_ext_id } : {}
133
+ };
134
+ }
135
+ function workflowTarget(n) {
136
+ const workflowId = parse(n.content)?.workflow_ext_id;
137
+ return {
138
+ kind: "workflows",
139
+ ...typeof workflowId === "string" && WORKFLOW_ID.test(workflowId) ? { workflowId } : {},
140
+ ...n.workspace_ext_id ? { workspaceId: n.workspace_ext_id } : {}
141
+ };
142
+ }
143
+ function signatureTitle(n, senderName, documentName) {
144
+ const type = n.type;
145
+ const { documentId } = signatureRequestMeta(n.content);
146
+ const name = documentId ? documentName?.(n.workspace_ext_id, documentId) : void 0;
147
+ const fallback = type === "signature_requested" ? "a document" : "your document";
148
+ const { verb, tail } = signatureNotificationPhrase(type, true);
149
+ return `${senderName} ${verb} ${name ?? fallback}${tail}`;
150
+ }
151
+ function quotaPercent(type) {
152
+ if (type === "quota_threshold_100") return 100;
153
+ if (type === "quota_threshold_90") return 90;
154
+ if (type === "quota_threshold_50") return 50;
155
+ return null;
156
+ }
157
+ function describeServerNotification(n, options = {}) {
158
+ const senderName = options.senderName ?? notificationUserName(n.sender);
159
+ const workspace = n.workspace_ext_id ? { kind: "workspace", workspaceId: n.workspace_ext_id } : void 0;
160
+ const type = n.type;
161
+ if (type === BOX_SEAT_REFUSED) {
162
+ return {
163
+ title: BOX_SEAT_REFUSED_TITLE,
164
+ variant: "warning",
165
+ actionLabel: BOX_SEAT_REFUSED_ACTION,
166
+ target: { kind: "seats" }
167
+ };
168
+ }
169
+ const pct = quotaPercent(type);
170
+ if (pct !== null) {
171
+ return {
172
+ title: `You have used ${pct}% of your daily AI limit for this project.`,
173
+ variant: pct === 100 ? "error" : pct === 90 ? "warning" : "info",
174
+ target: { kind: "projects" }
175
+ };
176
+ }
177
+ switch (type) {
178
+ case "support_ticket_received":
179
+ case "support_ticket_reviewed":
180
+ case "support_ticket_resolved": {
181
+ const ticketId = parse(n.content)?.ticket_id;
182
+ if (typeof ticketId !== "number" || !Number.isSafeInteger(ticketId) || ticketId < 1)
183
+ return null;
184
+ const suppliedReference = parse(n.content)?.ticket_reference;
185
+ const reference = typeof suppliedReference === "string" && /^[a-z0-9-]+-[0-9]+$/.test(suppliedReference) && suppliedReference.endsWith(`-${ticketId}`) ? suppliedReference : `#${ticketId}`;
186
+ return {
187
+ title: type === "support_ticket_received" ? `We received support request ${reference}` : type === "support_ticket_reviewed" ? `We have reviewed support request ${reference}` : `Support request ${reference} is resolved`,
188
+ variant: "success",
189
+ actionLabel: type === "support_ticket_resolved" ? "View outcome" : "View request",
190
+ target: { kind: "support", ticketId }
191
+ };
192
+ }
193
+ case "file_shared": {
194
+ const meta = parse(n.content);
195
+ const id = meta?.file_share_id;
196
+ if (typeof id !== "string" || !/^fsh-[0-9a-f]{32}$/.test(id)) return null;
197
+ return {
198
+ title: meta?.declined ? `${senderName} declined to sign a file` : meta?.completed ? "Everyone has signed. Your PDF is ready." : meta?.signature ? `${senderName} asked you to sign a file` : `${senderName} shared a file with you`,
199
+ variant: meta?.declined ? "warning" : meta?.completed ? "success" : "info",
200
+ actionLabel: meta?.signature && !meta?.completed ? "Review and sign" : "Open file",
201
+ target: { kind: "url", url: `/shared-files/${id}` }
202
+ };
203
+ }
204
+ case "call_missed":
205
+ return {
206
+ title: `Missed call from ${senderName}`,
207
+ variant: "warning",
208
+ actionLabel: "Call back",
209
+ target: { kind: "call-back", user: n.sender }
210
+ };
211
+ case "native_mail_received":
212
+ return {
213
+ title: "New email in your encrypted inbox",
214
+ variant: "info",
215
+ target: { kind: "mail" }
216
+ };
217
+ case "mail_draft_ready": {
218
+ const draftId = mailDraftIdFromContent(n.content);
219
+ return {
220
+ title: `${senderName} left a draft email for you to review`,
221
+ variant: "info",
222
+ target: { kind: "mail", ...draftId ? { draftId } : {} }
223
+ };
224
+ }
225
+ case "workspaceuser_added_owner":
226
+ return { title: `${senderName} added you as owner`, variant: "info", target: workspace };
227
+ case "workspaceuser_added_collaborator":
228
+ return {
229
+ title: `${senderName} added you as collaborator`,
230
+ variant: "info",
231
+ target: workspace
232
+ };
233
+ case "workspaceuser_added_guest":
234
+ return { title: `${senderName} added you as read only`, variant: "info", target: workspace };
235
+ case "workspaceuser_removed":
236
+ return { title: `${senderName} removed you from a workspace`, variant: "warning" };
237
+ case "workspaceuser_updated_owner":
238
+ return {
239
+ title: `${senderName} changed your role to owner`,
240
+ variant: "info",
241
+ target: workspace
242
+ };
243
+ case "workspaceuser_updated_collaborator":
244
+ return {
245
+ title: `${senderName} changed your role to collaborator`,
246
+ variant: "info",
247
+ target: workspace
248
+ };
249
+ case "workspaceuser_updated_guest":
250
+ return {
251
+ title: `${senderName} changed your role to read only`,
252
+ variant: "info",
253
+ target: workspace
254
+ };
255
+ case "signature_requested":
256
+ case "signature_completed":
257
+ case "signature_declined": {
258
+ const { documentId, version } = signatureRequestMeta(n.content);
259
+ return {
260
+ title: signatureTitle(n, senderName, options.documentName),
261
+ variant: type === "signature_completed" ? "success" : type === "signature_declined" ? "warning" : "info",
262
+ actionLabel: type === "signature_requested" ? "Review and sign" : "Open",
263
+ // A request opens the current version on its PDF, where the banner offers "Review and
264
+ // sign"; a completed request opens the signed copy.
265
+ target: documentId ? {
266
+ kind: "document",
267
+ workspaceId: n.workspace_ext_id ?? void 0,
268
+ documentId,
269
+ ...version ? { version } : {},
270
+ tab: "pdf"
271
+ } : void 0
272
+ };
273
+ }
274
+ case "docx_mention": {
275
+ const { documentId, commentId } = docxMentionMeta(n.content);
276
+ return {
277
+ title: `${senderName} mentioned you in a document comment`,
278
+ variant: "info",
279
+ target: documentId ? {
280
+ kind: "document",
281
+ workspaceId: n.workspace_ext_id ?? void 0,
282
+ documentId,
283
+ ...commentId ? { commentId } : {}
284
+ } : void 0
285
+ };
286
+ }
287
+ case "agent_input_requested":
288
+ return { title: inputRequestTitle(n.content), variant: "info", target: conversationTarget(n) };
289
+ case "mention":
290
+ return {
291
+ title: `${senderName} mentioned you in a conversation`,
292
+ variant: "info",
293
+ target: conversationTarget(n)
294
+ };
295
+ case "thread_reply":
296
+ return {
297
+ title: `${senderName} replied in a thread`,
298
+ variant: "info",
299
+ target: conversationTarget(n)
300
+ };
301
+ case "document_activity": {
302
+ const { documentId, version } = documentActivityMeta(n.content);
303
+ return {
304
+ title: `${senderName} ${documentActivityPhrase(n.content)}`,
305
+ variant: "info",
306
+ target: documentId ? {
307
+ kind: "document",
308
+ workspaceId: n.workspace_ext_id ?? void 0,
309
+ documentId,
310
+ ...version ? { version } : {}
311
+ } : void 0
312
+ };
313
+ }
314
+ // Each of these opens the thread, so the person it is for finds it. One about your own thread
315
+ // (you started the work) says so.
316
+ case "conversation_ready":
317
+ return {
318
+ title: n.sender.external_id === n.recipient.external_id ? "Your thread is ready" : `${senderName}\u2019s thread is ready`,
319
+ variant: "info",
320
+ target: conversationTarget(n)
321
+ };
322
+ case "conversation_notified":
323
+ return {
324
+ title: `${senderName} notified you in a thread`,
325
+ variant: "info",
326
+ target: conversationTarget(n)
327
+ };
328
+ case "conversation_done":
329
+ return {
330
+ title: `${senderName} marked a thread done`,
331
+ variant: "success",
332
+ target: conversationTarget(n)
333
+ };
334
+ case "workflow_completed":
335
+ return { title: "A workflow completed", variant: "success", target: workflowTarget(n) };
336
+ // The failed run's thread when it has one (its error is there), else the workflow.
337
+ case "workflow_failed":
338
+ return {
339
+ title: "A workflow failed to start",
340
+ variant: "error",
341
+ target: conversationTarget(n) ?? workflowTarget(n)
342
+ };
343
+ case "deployment_user_invited":
344
+ case "deployment_user_registered": {
345
+ const { email, external, portalUrl } = deploymentUserMeta(n.content, options.portalOrigins);
346
+ const suffix = external ? " \xB7 External" : "";
347
+ return {
348
+ title: type === "deployment_user_invited" ? `${senderName} invited ${email ?? "a new user"}${suffix}` : `${email ?? senderName} joined${suffix}`,
349
+ variant: "info",
350
+ ...portalUrl && {
351
+ actionLabel: "Manage users",
352
+ target: { kind: "url", url: portalUrl }
353
+ }
354
+ };
355
+ }
356
+ case "contact_accepted":
357
+ return { title: `${senderName} joined the platform`, variant: "success", target: workspace };
358
+ case "workspace_access_request":
359
+ return {
360
+ title: `${senderName} asked for workspace access`,
361
+ variant: "info",
362
+ // Straight into the review — granting needs a workspace choice and a role, so a bare
363
+ // "grant" action could never be right here.
364
+ target: { kind: "access-request", notification: n }
365
+ };
366
+ case "project_quota_warning": {
367
+ let resource = "usage";
368
+ let percentage = null;
369
+ let upgrade = "";
370
+ let impending = false;
371
+ try {
372
+ const data = JSON.parse(n.content ?? "{}");
373
+ resource = data.resource === "storage_gb" ? "storage" : "AI credits";
374
+ if (data.limit > 0) percentage = Math.round(data.used / data.limit * 100);
375
+ if (data.stage === "before_upgrade") {
376
+ impending = true;
377
+ const charge = new Intl.NumberFormat("en-GB", {
378
+ style: "currency",
379
+ currency: data.currency || "GBP"
380
+ }).format(data.charge_ex_vat_pence / 100);
381
+ upgrade = `An automatic ${resource} upgrade will now be attempted: ${charge} ex VAT.`;
382
+ } else if (data.automatic_upgrade === true) {
383
+ upgrade = " An automatic upgrade is available within your limit and will be attempted when needed, subject to payment.";
384
+ } else if (data.automatic_upgrade === false) {
385
+ upgrade = data.upgrade_reason === "limit" ? " No automatic upgrade fits your remaining limit. Increase it or add allowances to keep working." : data.upgrade_reason === "payment" ? " Automatic upgrades are paused. Resolve your payment issue to keep working." : " Automatic upgrades are unavailable. Upgrade your plan or reduce usage to keep working.";
386
+ }
387
+ } catch {
388
+ }
389
+ return {
390
+ title: impending ? upgrade : `Your project is approaching its ${resource} limit${percentage != null ? ` (${percentage}% used)` : ""}.${upgrade}`,
391
+ variant: "warning",
392
+ target: { kind: "projects" }
393
+ };
394
+ }
395
+ case "project_retention": {
396
+ let deadline = "";
397
+ try {
398
+ const data = JSON.parse(n.content ?? "{}");
399
+ if (data.deletion_at) deadline = new Date(data.deletion_at).toLocaleDateString("en-GB");
400
+ } catch {
401
+ }
402
+ return {
403
+ title: `Your project subscription has ended. Export or resubscribe${deadline ? ` before ${deadline}` : ""} to keep its data.`,
404
+ variant: "warning",
405
+ target: { kind: "projects" }
406
+ };
407
+ }
408
+ case "storage_quota_exceeded":
409
+ return {
410
+ title: "Your storage is full. Mail still arrives, but new uploads and attachments are paused until you free space or add storage.",
411
+ variant: "error",
412
+ target: { kind: "storage" }
413
+ };
414
+ case "signup_reward":
415
+ return {
416
+ title: n.content ? `\u{1F389} Signup bonus \u2014 ${n.content}` : "\u{1F389} You earned a signup bonus!",
417
+ variant: "success",
418
+ target: { kind: "projects" }
419
+ };
420
+ case "referral_reward":
421
+ return {
422
+ title: n.content ? `\u{1F381} Reward \u2014 ${n.content}` : "\u{1F381} You earned a reward!",
423
+ variant: "success",
424
+ target: { kind: "projects" }
425
+ };
426
+ default:
427
+ return null;
428
+ }
429
+ }
430
+ export {
431
+ ALLOWED_PORTAL_ORIGINS,
432
+ BOX_SEAT_REFUSED,
433
+ BOX_SEAT_REFUSED_ACTION,
434
+ BOX_SEAT_REFUSED_TITLE,
435
+ SIGNATURE_NOTIFICATION_TYPES,
436
+ WORK_NOTIFICATION_LABELS,
437
+ callNotificationMeta,
438
+ deploymentUserMeta,
439
+ describeServerNotification,
440
+ documentActivityMeta,
441
+ documentActivityPhrase,
442
+ documentDisplayName,
443
+ docxMentionMeta,
444
+ inputRequestTitle,
445
+ isDeploymentUserNotification,
446
+ isSignatureNotificationType,
447
+ notificationUserName,
448
+ safePortalUrl,
449
+ signatureNotificationPhrase,
450
+ signatureRequestMeta
451
+ };
452
+ //# sourceMappingURL=server-notifications.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/notifications/server-notifications.ts"],
4
+ "sourcesContent": ["/**\n * What a server-persisted notification (`NotificationResponse`) says and where it leads \u2014 the one\n * type\u2192presentation mapping every surface reads (the arrival toast, the bell entry, the\n * notification centre), so wording cannot drift between them or between hosts.\n *\n * Titles derive from `type`, the sender and plaintext routing metadata only: the E2E-encrypted\n * content is never needed. Where an entry leads is data ({@link NotificationTarget}); the host\n * owns navigation and turns a target into its own route.\n */\n\nimport type { components } from '@arbidocs/client'\nimport { mailDraftIdFromContent } from '../mail/client'\nimport type { NotifyVariant } from './notify-store'\n\ntype NotificationResponse = components['schemas']['NotificationResponse']\ntype NotificationUser = NotificationResponse['sender']\n\n/** Where a notification leads. The host maps each kind onto its routes. */\nexport type NotificationTarget =\n /** A workspace's own page (a membership change). */\n | { kind: 'workspace'; workspaceId: string }\n /** A thread, scrolled to a message when given. */\n | { kind: 'conversation'; workspaceId?: string; conversationId: string; messageId?: string }\n /** A document: at a version, on a comment, or on a viewer tab when given. */\n | {\n kind: 'document'\n workspaceId?: string\n documentId: string\n version?: number\n commentId?: string\n tab?: 'pdf'\n }\n /** The mailbox, on a draft when given. */\n | { kind: 'mail'; draftId?: string }\n /** The workflows page, on a workflow (in its workspace) when given. */\n | { kind: 'workflows'; workflowId?: string; workspaceId?: string }\n /** Projects and their AI usage. */\n | { kind: 'projects' }\n | { kind: 'support'; ticketId: number }\n /** Storage settings. */\n | { kind: 'storage' }\n /** Where seats are added (the Box's licence page). */\n | { kind: 'seats' }\n /** Review a workspace access request (choose a workspace and a role). */\n | { kind: 'access-request'; notification: NotificationResponse }\n /** Call the sender back. */\n | { kind: 'call-back'; user: NotificationUser }\n /** An external page, opened in a new tab. */\n | { kind: 'url'; url: string }\n /** The calendar, on an event when given; `join`: join the event's online meeting. */\n | { kind: 'calendar'; eventId?: string; recurrenceId?: string | null; join?: boolean }\n\n/** A server notification's presentation: its sentence, severity, and where it leads. */\nexport interface ServerNotificationDescription {\n title: string\n variant: NotifyVariant\n /** The label of the action that opens {@link target} (\"Review and sign\"); default \"View\". */\n actionLabel?: string\n target?: NotificationTarget\n}\n\nexport interface DescribeServerNotificationOptions {\n /** The sender's display name; default their given and family name, else their email. */\n senderName?: string\n /** The name of a document the notification is about, when the host knows it (names are\n * encrypted, so a notification carries only the id). */\n documentName?: (workspaceId: string | null | undefined, documentId: string) => string | undefined\n /** The portal origins a deployment-user notice may link to. */\n portalOrigins?: readonly string[]\n}\n\n/** A person's display name: given and family name, else their email. */\nexport function notificationUserName(user: NotificationUser): string {\n return [user.given_name, user.family_name].filter(Boolean).join(' ') || user.email\n}\n\nconst CONVERSATION_ID = /^con-[a-zA-Z0-9]+$/\nconst WORKFLOW_ID = /^wfl-[a-zA-Z0-9]+$/\nconst DOCUMENT_ID = /^doc-[a-zA-Z0-9]+$/\n\nfunction parse(content: string | null | undefined): Record<string, unknown> | null {\n try {\n const value = JSON.parse(content || '{}') as unknown\n return value && typeof value === 'object' ? (value as Record<string, unknown>) : null\n } catch {\n return null\n }\n}\n\n/** Deadline metadata is intentionally plaintext; the confidential question stays in the thread. */\nexport function inputRequestTitle(content: string | null | undefined): string {\n const metadata = parse(content)\n if (!metadata) return 'ARBI needs your input \u2014 open the thread to reply'\n const timeout = typeof metadata.timeout_seconds === 'number' ? metadata.timeout_seconds : 300\n const minutes = Math.ceil(timeout / 60)\n const deadline = typeof metadata.expires_at === 'string' ? new Date(metadata.expires_at) : null\n if (deadline && Number.isFinite(deadline.getTime())) {\n return `ARBI needs your input \u2014 ${minutes} min to reply (until ${deadline.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })})`\n }\n return `ARBI needs your input \u2014 ${minutes} min to reply`\n}\n\n/**\n * The plaintext routing content of a `document_activity` notification: `{doc_ext_id, event,\n * reason, version}`. Opaque ids and a closed vocabulary only; never the file name.\n */\nexport function documentActivityMeta(content: string | null | undefined): {\n documentId?: string\n reason?: string\n version?: number\n} {\n const meta = parse(content)\n if (!meta) return {}\n const documentId =\n typeof meta.doc_ext_id === 'string' && DOCUMENT_ID.test(meta.doc_ext_id)\n ? meta.doc_ext_id\n : undefined\n const version =\n typeof meta.version === 'number' && Number.isInteger(meta.version) && meta.version > 0\n ? meta.version\n : undefined\n const reason = typeof meta.reason === 'string' ? meta.reason : undefined\n return { documentId, reason, version }\n}\n\n/** What a `document_activity` says after its sender: \"signed a document\", \"saved version 3 of a document\". */\nexport function documentActivityPhrase(content: string | null | undefined): string {\n const { reason, version } = documentActivityMeta(content)\n if (reason === 'signed') return 'signed a document'\n return version ? `saved version ${version} of a document` : 'saved a new version of a document'\n}\n\n/** The document and comment a `docx_mention` points at (routing ids only). */\nexport function docxMentionMeta(content: string | null | undefined): {\n documentId?: string\n commentId?: string\n} {\n const meta = parse(content)\n if (!meta || typeof meta.document_id !== 'string' || !DOCUMENT_ID.test(meta.document_id))\n return {}\n return {\n documentId: meta.document_id,\n commentId: typeof meta.comment_id === 'string' && meta.comment_id ? meta.comment_id : undefined,\n }\n}\n\n/**\n * The plaintext routing content of a signature-request notification: `{request_id, document_id,\n * signed_version?}`. Opaque ids only: the document's name is encrypted, so it is never in a\n * notification.\n */\nexport function signatureRequestMeta(content: string | null | undefined): {\n documentId?: string\n version?: number\n} {\n const meta = parse(content)\n if (!meta) return {}\n const documentId =\n typeof meta.document_id === 'string' && DOCUMENT_ID.test(meta.document_id)\n ? meta.document_id\n : undefined\n const version =\n typeof meta.signed_version === 'number' && Number.isInteger(meta.signed_version)\n ? meta.signed_version\n : undefined\n return { documentId, version }\n}\n\n/** The notification types of a signature request. */\nexport const SIGNATURE_NOTIFICATION_TYPES = [\n 'signature_requested',\n 'signature_completed',\n 'signature_declined',\n] as const\nexport type SignatureNotificationType = (typeof SIGNATURE_NOTIFICATION_TYPES)[number]\n\nexport function isSignatureNotificationType(\n type: string | null | undefined\n): type is SignatureNotificationType {\n return (SIGNATURE_NOTIFICATION_TYPES as readonly string[]).includes(type ?? '')\n}\n\n/**\n * What a signature notification says, around the person's name and the document's:\n * `{lead} [person] {verb} [document]{tail}`. The recipient reads it about the sender\n * (\"Priya Shah asked you to sign NDA.pdf\"); the sender, in their own activity, about what they did\n * (\"You asked Sam Lee to sign NDA.pdf\"), with the person left out when the sentence needs none.\n */\nexport function signatureNotificationPhrase(\n type: SignatureNotificationType,\n incoming: boolean\n): { lead: string; showPerson: boolean; verb: string; tail: string } {\n if (incoming) {\n switch (type) {\n case 'signature_requested':\n return { lead: '', showPerson: true, verb: 'asked you to sign', tail: '' }\n case 'signature_completed':\n return { lead: '', showPerson: true, verb: 'signed', tail: ' \u2014 everyone has now signed' }\n case 'signature_declined':\n return { lead: '', showPerson: true, verb: 'declined to sign', tail: '' }\n }\n }\n switch (type) {\n case 'signature_requested':\n return { lead: 'You asked', showPerson: true, verb: 'to sign', tail: '' }\n case 'signature_completed':\n return { lead: 'You signed', showPerson: false, verb: '', tail: ' \u2014 everyone has now signed' }\n case 'signature_declined':\n return { lead: 'You declined to sign', showPerson: false, verb: '', tail: '' }\n }\n}\n\n/**\n * Plaintext routing metadata on call notifications (`call_missed`): `{call_ext_id}`. Never a\n * title \u2014 titles are encrypted under the call's key.\n */\nexport function callNotificationMeta(content: string | null | undefined): { callExtId?: string } {\n const meta = parse(content)\n return {\n callExtId:\n typeof meta?.call_ext_id === 'string' && /^call-[a-zA-Z0-9]{8}$/.test(meta.call_ext_id)\n ? meta.call_ext_id\n : undefined,\n }\n}\n\n/** A Box had no seat for a new internal user: the inviter's invitation was not sent. Central\n * emails the inviter and the Box admins; this is the inviter's own notice. */\nexport const BOX_SEAT_REFUSED = 'box_seat_refused'\nexport const BOX_SEAT_REFUSED_TITLE =\n 'Invitation not sent: your Box has no seat left. Your Box admins have been notified and can add users in the ARBI portal.'\nexport const BOX_SEAT_REFUSED_ACTION = 'Open the ARBI portal'\n\n/** A deployment admin's notice about the Box's users (`deployment_user_invited` / `_registered`):\n * an invitation sent (sender = the inviter) or an account created (sender = the new user). */\nexport function isDeploymentUserNotification(type: string | null | undefined): boolean {\n return type === 'deployment_user_invited' || type === 'deployment_user_registered'\n}\n\n/** The portal origins a \"Manage users\" link may open by default. Anything else gets no button. */\nexport const ALLOWED_PORTAL_ORIGINS: readonly string[] = ['https://portal.arbicity.com']\n\n/** The portal link, only when it is https on an allowed portal origin. */\nexport function safePortalUrl(\n value: unknown,\n origins: readonly string[] = ALLOWED_PORTAL_ORIGINS\n): string | undefined {\n if (typeof value !== 'string') return undefined\n try {\n const url = new URL(value)\n if (url.protocol !== 'https:' || !origins.includes(url.origin)) return undefined\n return url.href\n } catch {\n return undefined\n }\n}\n\n/** Plaintext content of a deployment-user notification: `{email, user_type, portal_url}`. */\nexport function deploymentUserMeta(\n content: string | null | undefined,\n origins: readonly string[] = ALLOWED_PORTAL_ORIGINS\n): { email?: string; external: boolean; portalUrl?: string } {\n const meta = parse(content)\n if (!meta) return { external: false }\n const email = typeof meta.email === 'string' && meta.email.trim() ? meta.email.trim() : undefined\n return {\n email,\n external: meta.user_type === 'external',\n portalUrl: safePortalUrl(meta.portal_url, origins),\n }\n}\n\n/** A document's display name, as a document list shows it (its title, else its file name). */\nexport function documentDisplayName(\n doc:\n | { file_name?: string | null; doc_metadata?: { title?: string | null } | null }\n | null\n | undefined\n): string | undefined {\n return doc?.doc_metadata?.title || doc?.file_name || undefined\n}\n\n/** What the work notifications say in a list, where the sender has a column of their own. */\nexport const WORK_NOTIFICATION_LABELS: Readonly<Record<string, string>> = {\n conversation_ready: 'A task is ready',\n conversation_done: 'A task was marked done',\n conversation_notified: 'You were notified in a thread',\n workflow_failed: 'A workflow failed to run',\n}\n\nfunction conversationTarget(n: NotificationResponse): NotificationTarget | undefined {\n if (!n.conversation_ext_id || !CONVERSATION_ID.test(n.conversation_ext_id)) return undefined\n return {\n kind: 'conversation',\n workspaceId: n.workspace_ext_id ?? undefined,\n conversationId: n.conversation_ext_id,\n ...(n.message_ext_id ? { messageId: n.message_ext_id } : {}),\n }\n}\n\n/** The workflows page on the notification's workflow (`{workflow_ext_id}` in its content). */\nfunction workflowTarget(n: NotificationResponse): NotificationTarget {\n const workflowId = parse(n.content)?.workflow_ext_id\n return {\n kind: 'workflows',\n ...(typeof workflowId === 'string' && WORKFLOW_ID.test(workflowId) ? { workflowId } : {}),\n ...(n.workspace_ext_id ? { workspaceId: n.workspace_ext_id } : {}),\n }\n}\n\nfunction signatureTitle(\n n: NotificationResponse,\n senderName: string,\n documentName: DescribeServerNotificationOptions['documentName']\n): string {\n const type = n.type as SignatureNotificationType\n const { documentId } = signatureRequestMeta(n.content)\n const name = documentId ? documentName?.(n.workspace_ext_id, documentId) : undefined\n const fallback = type === 'signature_requested' ? 'a document' : 'your document'\n const { verb, tail } = signatureNotificationPhrase(type, true)\n return `${senderName} ${verb} ${name ?? fallback}${tail}`\n}\n\nfunction quotaPercent(type: string): number | null {\n if (type === 'quota_threshold_100') return 100\n if (type === 'quota_threshold_90') return 90\n if (type === 'quota_threshold_50') return 50\n return null\n}\n\n/**\n * One server notification \u2192 what it says to its recipient and where it leads, or null for\n * types without a sentence here (calendar events, sync completions: they have their own\n * surfaces).\n */\nexport function describeServerNotification(\n n: NotificationResponse,\n options: DescribeServerNotificationOptions = {}\n): ServerNotificationDescription | null {\n const senderName = options.senderName ?? notificationUserName(n.sender)\n const workspace: NotificationTarget | undefined = n.workspace_ext_id\n ? { kind: 'workspace', workspaceId: n.workspace_ext_id }\n : undefined\n const type = n.type as string\n\n if (type === BOX_SEAT_REFUSED) {\n return {\n title: BOX_SEAT_REFUSED_TITLE,\n variant: 'warning',\n actionLabel: BOX_SEAT_REFUSED_ACTION,\n target: { kind: 'seats' },\n }\n }\n const pct = quotaPercent(type)\n if (pct !== null) {\n return {\n title: `You have used ${pct}% of your daily AI limit for this project.`,\n variant: pct === 100 ? 'error' : pct === 90 ? 'warning' : 'info',\n target: { kind: 'projects' },\n }\n }\n\n switch (type) {\n case 'support_ticket_received':\n case 'support_ticket_reviewed':\n case 'support_ticket_resolved': {\n const ticketId = parse(n.content)?.ticket_id\n if (typeof ticketId !== 'number' || !Number.isSafeInteger(ticketId) || ticketId < 1)\n return null\n const suppliedReference = parse(n.content)?.ticket_reference\n const reference =\n typeof suppliedReference === 'string' &&\n /^[a-z0-9-]+-[0-9]+$/.test(suppliedReference) &&\n suppliedReference.endsWith(`-${ticketId}`)\n ? suppliedReference\n : `#${ticketId}`\n return {\n title:\n type === 'support_ticket_received'\n ? `We received support request ${reference}`\n : type === 'support_ticket_reviewed'\n ? `We have reviewed support request ${reference}`\n : `Support request ${reference} is resolved`,\n variant: 'success',\n actionLabel: type === 'support_ticket_resolved' ? 'View outcome' : 'View request',\n target: { kind: 'support', ticketId },\n }\n }\n case 'file_shared': {\n const meta = parse(n.content)\n const id = meta?.file_share_id\n if (typeof id !== 'string' || !/^fsh-[0-9a-f]{32}$/.test(id)) return null\n return {\n title: meta?.declined\n ? `${senderName} declined to sign a file`\n : meta?.completed\n ? 'Everyone has signed. Your PDF is ready.'\n : meta?.signature\n ? `${senderName} asked you to sign a file`\n : `${senderName} shared a file with you`,\n variant: meta?.declined ? 'warning' : meta?.completed ? 'success' : 'info',\n actionLabel: meta?.signature && !meta?.completed ? 'Review and sign' : 'Open file',\n target: { kind: 'url', url: `/shared-files/${id}` },\n }\n }\n case 'call_missed':\n return {\n title: `Missed call from ${senderName}`,\n variant: 'warning',\n actionLabel: 'Call back',\n target: { kind: 'call-back', user: n.sender },\n }\n case 'native_mail_received':\n return {\n title: 'New email in your encrypted inbox',\n variant: 'info',\n target: { kind: 'mail' },\n }\n case 'mail_draft_ready': {\n const draftId = mailDraftIdFromContent(n.content)\n return {\n title: `${senderName} left a draft email for you to review`,\n variant: 'info',\n target: { kind: 'mail', ...(draftId ? { draftId } : {}) },\n }\n }\n case 'workspaceuser_added_owner':\n return { title: `${senderName} added you as owner`, variant: 'info', target: workspace }\n case 'workspaceuser_added_collaborator':\n return {\n title: `${senderName} added you as collaborator`,\n variant: 'info',\n target: workspace,\n }\n case 'workspaceuser_added_guest':\n return { title: `${senderName} added you as read only`, variant: 'info', target: workspace }\n case 'workspaceuser_removed':\n return { title: `${senderName} removed you from a workspace`, variant: 'warning' }\n case 'workspaceuser_updated_owner':\n return {\n title: `${senderName} changed your role to owner`,\n variant: 'info',\n target: workspace,\n }\n case 'workspaceuser_updated_collaborator':\n return {\n title: `${senderName} changed your role to collaborator`,\n variant: 'info',\n target: workspace,\n }\n case 'workspaceuser_updated_guest':\n return {\n title: `${senderName} changed your role to read only`,\n variant: 'info',\n target: workspace,\n }\n case 'signature_requested':\n case 'signature_completed':\n case 'signature_declined': {\n const { documentId, version } = signatureRequestMeta(n.content)\n return {\n title: signatureTitle(n, senderName, options.documentName),\n variant:\n type === 'signature_completed'\n ? 'success'\n : type === 'signature_declined'\n ? 'warning'\n : 'info',\n actionLabel: type === 'signature_requested' ? 'Review and sign' : 'Open',\n // A request opens the current version on its PDF, where the banner offers \"Review and\n // sign\"; a completed request opens the signed copy.\n target: documentId\n ? {\n kind: 'document',\n workspaceId: n.workspace_ext_id ?? undefined,\n documentId,\n ...(version ? { version } : {}),\n tab: 'pdf',\n }\n : undefined,\n }\n }\n case 'docx_mention': {\n const { documentId, commentId } = docxMentionMeta(n.content)\n return {\n title: `${senderName} mentioned you in a document comment`,\n variant: 'info',\n target: documentId\n ? {\n kind: 'document',\n workspaceId: n.workspace_ext_id ?? undefined,\n documentId,\n ...(commentId ? { commentId } : {}),\n }\n : undefined,\n }\n }\n case 'agent_input_requested':\n return { title: inputRequestTitle(n.content), variant: 'info', target: conversationTarget(n) }\n case 'mention':\n return {\n title: `${senderName} mentioned you in a conversation`,\n variant: 'info',\n target: conversationTarget(n),\n }\n case 'thread_reply':\n return {\n title: `${senderName} replied in a thread`,\n variant: 'info',\n target: conversationTarget(n),\n }\n case 'document_activity': {\n const { documentId, version } = documentActivityMeta(n.content)\n return {\n title: `${senderName} ${documentActivityPhrase(n.content)}`,\n variant: 'info',\n target: documentId\n ? {\n kind: 'document',\n workspaceId: n.workspace_ext_id ?? undefined,\n documentId,\n ...(version ? { version } : {}),\n }\n : undefined,\n }\n }\n // Each of these opens the thread, so the person it is for finds it. One about your own thread\n // (you started the work) says so.\n case 'conversation_ready':\n return {\n title:\n n.sender.external_id === n.recipient.external_id\n ? 'Your thread is ready'\n : `${senderName}\u2019s thread is ready`,\n variant: 'info',\n target: conversationTarget(n),\n }\n case 'conversation_notified':\n return {\n title: `${senderName} notified you in a thread`,\n variant: 'info',\n target: conversationTarget(n),\n }\n case 'conversation_done':\n return {\n title: `${senderName} marked a thread done`,\n variant: 'success',\n target: conversationTarget(n),\n }\n case 'workflow_completed':\n return { title: 'A workflow completed', variant: 'success', target: workflowTarget(n) }\n // The failed run's thread when it has one (its error is there), else the workflow.\n case 'workflow_failed':\n return {\n title: 'A workflow failed to start',\n variant: 'error',\n target: conversationTarget(n) ?? workflowTarget(n),\n }\n case 'deployment_user_invited':\n case 'deployment_user_registered': {\n const { email, external, portalUrl } = deploymentUserMeta(n.content, options.portalOrigins)\n const suffix = external ? ' \u00B7 External' : ''\n return {\n title:\n type === 'deployment_user_invited'\n ? `${senderName} invited ${email ?? 'a new user'}${suffix}`\n : `${email ?? senderName} joined${suffix}`,\n variant: 'info',\n ...(portalUrl && {\n actionLabel: 'Manage users',\n target: { kind: 'url' as const, url: portalUrl },\n }),\n }\n }\n case 'contact_accepted':\n return { title: `${senderName} joined the platform`, variant: 'success', target: workspace }\n case 'workspace_access_request':\n return {\n title: `${senderName} asked for workspace access`,\n variant: 'info',\n // Straight into the review \u2014 granting needs a workspace choice and a role, so a bare\n // \"grant\" action could never be right here.\n target: { kind: 'access-request', notification: n },\n }\n case 'project_quota_warning': {\n let resource = 'usage'\n let percentage: number | null = null\n let upgrade = ''\n let impending = false\n try {\n const data = JSON.parse(n.content ?? '{}')\n resource = data.resource === 'storage_gb' ? 'storage' : 'AI credits'\n if (data.limit > 0) percentage = Math.round((data.used / data.limit) * 100)\n if (data.stage === 'before_upgrade') {\n impending = true\n const charge = new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: data.currency || 'GBP',\n }).format(data.charge_ex_vat_pence / 100)\n upgrade = `An automatic ${resource} upgrade will now be attempted: ${charge} ex VAT.`\n } else if (data.automatic_upgrade === true) {\n upgrade =\n ' An automatic upgrade is available within your limit and will be attempted when needed, subject to payment.'\n } else if (data.automatic_upgrade === false) {\n upgrade =\n data.upgrade_reason === 'limit'\n ? ' No automatic upgrade fits your remaining limit. Increase it or add allowances to keep working.'\n : data.upgrade_reason === 'payment'\n ? ' Automatic upgrades are paused. Resolve your payment issue to keep working.'\n : ' Automatic upgrades are unavailable. Upgrade your plan or reduce usage to keep working.'\n }\n } catch {\n /* An old or malformed notice still opens project usage. */\n }\n return {\n title: impending\n ? upgrade\n : `Your project is approaching its ${resource} limit${percentage != null ? ` (${percentage}% used)` : ''}.${upgrade}`,\n variant: 'warning',\n target: { kind: 'projects' },\n }\n }\n case 'project_retention': {\n let deadline = ''\n try {\n const data = JSON.parse(n.content ?? '{}')\n if (data.deletion_at) deadline = new Date(data.deletion_at).toLocaleDateString('en-GB')\n } catch {\n /* display the recovery notice without a date */\n }\n return {\n title: `Your project subscription has ended. Export or resubscribe${deadline ? ` before ${deadline}` : ''} to keep its data.`,\n variant: 'warning',\n target: { kind: 'projects' },\n }\n }\n case 'storage_quota_exceeded':\n return {\n title:\n 'Your storage is full. Mail still arrives, but new uploads and attachments are paused until you free space or add storage.',\n variant: 'error',\n target: { kind: 'storage' },\n }\n case 'signup_reward':\n return {\n title: n.content ? `\uD83C\uDF89 Signup bonus \u2014 ${n.content}` : '\uD83C\uDF89 You earned a signup bonus!',\n variant: 'success',\n target: { kind: 'projects' },\n }\n case 'referral_reward':\n return {\n title: n.content ? `\uD83C\uDF81 Reward \u2014 ${n.content}` : '\uD83C\uDF81 You earned a reward!',\n variant: 'success',\n target: { kind: 'projects' },\n }\n default:\n return null\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,34 @@
1
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { useArbi } from "../useArbi.js";
3
+ import { arbiQueryKeys } from "../hooks.js";
4
+ function useNotifications(options = {}) {
5
+ const arbi = useArbi();
6
+ const limit = options.limit ?? 100;
7
+ return useQuery({
8
+ queryKey: arbiQueryKeys.notifications(limit),
9
+ queryFn: () => arbi.notifications.list({ limit }),
10
+ enabled: (options.enabled ?? true) && arbi.isLoggedIn
11
+ });
12
+ }
13
+ function useDeleteNotifications() {
14
+ const arbi = useArbi();
15
+ const queries = useQueryClient();
16
+ return useMutation({
17
+ mutationFn: (ids) => arbi.notifications.delete(ids),
18
+ onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allNotifications() })
19
+ });
20
+ }
21
+ function useMarkNotificationsRead() {
22
+ const arbi = useArbi();
23
+ const queries = useQueryClient();
24
+ return useMutation({
25
+ mutationFn: (ids) => arbi.notifications.markRead(ids),
26
+ onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allNotifications() })
27
+ });
28
+ }
29
+ export {
30
+ useDeleteNotifications,
31
+ useMarkNotificationsRead,
32
+ useNotifications
33
+ };
34
+ //# sourceMappingURL=useNotifications.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/notifications/useNotifications.ts"],
4
+ "sourcesContent": ["/**\n * Persisted notifications (`/v1/notifications`): the list (both what you received and what you\n * sent, newest first), deleting, and read receipts. Every write refreshes every list; rows\n * arriving live are applied by `ArbiWebSocketProvider` (`applyNotificationRow`).\n */\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useArbi } from '../useArbi'\nimport { arbiQueryKeys } from '../hooks'\n\n/** The newest `limit` (default 100) notifications. Live under an `<ArbiWebSocketProvider>`. */\nexport function useNotifications(options: { limit?: number; enabled?: boolean } = {}) {\n const arbi = useArbi()\n const limit = options.limit ?? 100\n return useQuery({\n queryKey: arbiQueryKeys.notifications(limit),\n queryFn: () => arbi.notifications.list({ limit }),\n enabled: (options.enabled ?? true) && arbi.isLoggedIn,\n })\n}\n\n/** Delete notifications for yourself (the other side keeps its copy). */\nexport function useDeleteNotifications() {\n const arbi = useArbi()\n const queries = useQueryClient()\n return useMutation({\n mutationFn: (ids: string[]) => arbi.notifications.delete(ids),\n onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allNotifications() }),\n })\n}\n\n/** Mark notifications addressed to you read. */\nexport function useMarkNotificationsRead() {\n const arbi = useArbi()\n const queries = useQueryClient()\n return useMutation({\n mutationFn: (ids: string[]) => arbi.notifications.markRead(ids),\n onSuccess: () => queries.invalidateQueries({ queryKey: arbiQueryKeys.allNotifications() }),\n })\n}\n"],
5
+ "mappings": "AAKA,SAAS,aAAa,UAAU,sBAAsB;AACtD,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAGvB,SAAS,iBAAiB,UAAiD,CAAC,GAAG;AACpF,QAAM,OAAO,QAAQ;AACrB,QAAM,QAAQ,QAAQ,SAAS;AAC/B,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,cAAc,KAAK;AAAA,IAC3C,SAAS,MAAM,KAAK,cAAc,KAAK,EAAE,MAAM,CAAC;AAAA,IAChD,UAAU,QAAQ,WAAW,SAAS,KAAK;AAAA,EAC7C,CAAC;AACH;AAGO,SAAS,yBAAyB;AACvC,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,eAAe;AAC/B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,QAAkB,KAAK,cAAc,OAAO,GAAG;AAAA,IAC5D,WAAW,MAAM,QAAQ,kBAAkB,EAAE,UAAU,cAAc,iBAAiB,EAAE,CAAC;AAAA,EAC3F,CAAC;AACH;AAGO,SAAS,2BAA2B;AACzC,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,eAAe;AAC/B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,QAAkB,KAAK,cAAc,SAAS,GAAG;AAAA,IAC9D,WAAW,MAAM,QAAQ,kBAAkB,EAAE,UAAU,cAAc,iBAAiB,EAAE,CAAC;AAAA,EAC3F,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ function isNetworkFailure(error) {
2
+ return error instanceof TypeError && /fetch|network|load failed|internet/i.test(error.message);
3
+ }
4
+ function isBrowserOffline() {
5
+ return typeof navigator !== "undefined" && navigator.onLine === false;
6
+ }
7
+ export {
8
+ isBrowserOffline,
9
+ isNetworkFailure
10
+ };
11
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/offline-store/network.ts"],
4
+ "sourcesContent": ["/**\n * Whether a request failed without reaching the server at all. fetch() rejects with a TypeError\n * when the network is down or the host can't be reached (\"Failed to fetch\" in Chromium,\n * \"NetworkError when attempting to fetch resource.\" in Firefox, \"Load failed\" in Safari). A server\n * error (any HTTP status) is not one: the server answered, so its answer stands. Neither is any\n * other TypeError (a bug), which must surface rather than be taken for \"offline\".\n */\nexport function isNetworkFailure(error: unknown): boolean {\n return error instanceof TypeError && /fetch|network|load failed|internet/i.test(error.message)\n}\n\n/** The browser reports no connection. */\nexport function isBrowserOffline(): boolean {\n return typeof navigator !== 'undefined' && navigator.onLine === false\n}\n"],
5
+ "mappings": "AAOO,SAAS,iBAAiB,OAAyB;AACxD,SAAO,iBAAiB,aAAa,sCAAsC,KAAK,MAAM,OAAO;AAC/F;AAGO,SAAS,mBAA4B;AAC1C,SAAO,OAAO,cAAc,eAAe,UAAU,WAAW;AAClE;",
6
+ "names": []
7
+ }