@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,136 @@
1
+ const DB_VERSION = 1;
2
+ const RECORDS = "records";
3
+ const META = "meta";
4
+ function promisify(request) {
5
+ return new Promise((resolve, reject) => {
6
+ request.onsuccess = () => resolve(request.result);
7
+ request.onerror = () => reject(request.error);
8
+ });
9
+ }
10
+ function createRecordStore(dbName) {
11
+ let dbPromise = null;
12
+ function openDB() {
13
+ if (dbPromise) return dbPromise;
14
+ let request;
15
+ try {
16
+ request = indexedDB.open(dbName, DB_VERSION);
17
+ } catch (error) {
18
+ return Promise.reject(error);
19
+ }
20
+ dbPromise = new Promise((resolve, reject) => {
21
+ request.onerror = () => {
22
+ dbPromise = null;
23
+ reject(request.error);
24
+ };
25
+ request.onsuccess = () => {
26
+ const db = request.result;
27
+ db.onversionchange = () => {
28
+ db.close();
29
+ dbPromise = null;
30
+ };
31
+ resolve(db);
32
+ };
33
+ request.onupgradeneeded = () => {
34
+ const db = request.result;
35
+ if (!db.objectStoreNames.contains(RECORDS)) {
36
+ const records = db.createObjectStore(RECORDS, { keyPath: "key" });
37
+ records.createIndex("bucket", "bucket");
38
+ records.createIndex("kind", "kind");
39
+ }
40
+ if (!db.objectStoreNames.contains(META)) db.createObjectStore(META, { keyPath: "key" });
41
+ };
42
+ });
43
+ return dbPromise;
44
+ }
45
+ async function run(store, mode, fn) {
46
+ const db = await openDB();
47
+ return promisify(fn(db.transaction(store, mode).objectStore(store)));
48
+ }
49
+ async function scan(pick) {
50
+ const db = await openDB();
51
+ const store = db.transaction(RECORDS, "readonly").objectStore(RECORDS);
52
+ return new Promise((resolve, reject) => {
53
+ const out = [];
54
+ const cursor = store.openCursor();
55
+ cursor.onerror = () => reject(cursor.error);
56
+ cursor.onsuccess = () => {
57
+ const c = cursor.result;
58
+ if (!c) return resolve(out);
59
+ out.push(pick(c.value));
60
+ c.continue();
61
+ };
62
+ });
63
+ }
64
+ const self = {
65
+ dbName,
66
+ async putRecord(record) {
67
+ await run(RECORDS, "readwrite", (s) => s.put(record));
68
+ },
69
+ async getRecord(key) {
70
+ return await run(RECORDS, "readonly", (s) => s.get(key));
71
+ },
72
+ async hasRecord(key) {
73
+ return await run(RECORDS, "readonly", (s) => s.count(key)) > 0;
74
+ },
75
+ async deleteRecords(keys) {
76
+ if (keys.length === 0) return;
77
+ const db = await openDB();
78
+ const tx = db.transaction(RECORDS, "readwrite");
79
+ const store = tx.objectStore(RECORDS);
80
+ for (const key of keys) store.delete(key);
81
+ await new Promise((resolve, reject) => {
82
+ tx.oncomplete = () => resolve();
83
+ tx.onerror = () => reject(tx.error);
84
+ tx.onabort = () => reject(tx.error);
85
+ });
86
+ },
87
+ async recordsInBucket(bucket) {
88
+ return await run(
89
+ RECORDS,
90
+ "readonly",
91
+ (s) => s.index("bucket").getAll(bucket)
92
+ );
93
+ },
94
+ async recordsOfKind(kind) {
95
+ return await run(
96
+ RECORDS,
97
+ "readonly",
98
+ (s) => s.index("kind").getAll(kind)
99
+ );
100
+ },
101
+ allRecordSizes() {
102
+ return scan(({ key, kind, size }) => ({ key, kind, size }));
103
+ },
104
+ allRecordAccess() {
105
+ return scan(({ key, kind, lastAccess }) => ({ key, kind, lastAccess }));
106
+ },
107
+ async touchRecord(key) {
108
+ const record = await self.getRecord(key);
109
+ if (record) await self.putRecord({ ...record, lastAccess: Date.now() });
110
+ },
111
+ async getMeta(key) {
112
+ const row = await run(META, "readonly", (s) => s.get(key));
113
+ return row?.value;
114
+ },
115
+ async setMeta(key, value) {
116
+ await run(META, "readwrite", (s) => s.put({ key, value }));
117
+ },
118
+ async deleteDatabase() {
119
+ const db = await dbPromise?.catch(() => null);
120
+ db?.close();
121
+ dbPromise = null;
122
+ await new Promise((resolve, reject) => {
123
+ const request = indexedDB.deleteDatabase(dbName);
124
+ request.onsuccess = () => resolve();
125
+ request.onerror = () => reject(request.error);
126
+ request.onblocked = () => {
127
+ };
128
+ });
129
+ }
130
+ };
131
+ return self;
132
+ }
133
+ export {
134
+ createRecordStore
135
+ };
136
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/offline-store/store.ts"],
4
+ "sourcesContent": ["/**\n * A generic encrypted-at-rest IndexedDB store: one object store of sealed records plus a small\n * plaintext `meta` store. A record's plaintext fields are only what IndexedDB needs to find and\n * evict it (a blind key, its kind, a blind bucket, a sort time, its size, last access); the content\n * is in `data`, sealed by the caller (see ./crypto). The store itself is crypto-agnostic.\n *\n * Used by the offline mailbox (`arbi-offline-mail`) and the offline calendar (`arbi-offline-calendar`).\n */\n\nconst DB_VERSION = 1\nconst RECORDS = 'records'\nconst META = 'meta'\n\nexport interface StoredRecord<K extends string = string> {\n /** Blind key (see crypto.blind). */\n key: string\n kind: K\n /** Blind group key. */\n bucket: string\n sortAt: number\n /** Ciphertext bytes, for the storage quota. */\n size: number\n /** Last read (ms), for least-recently-used eviction. */\n lastAccess: number\n /** Sealed contents. */\n data: Uint8Array\n}\n\nexport interface RecordStore<K extends string> {\n readonly dbName: string\n putRecord(record: StoredRecord<K>): Promise<void>\n getRecord(key: string): Promise<StoredRecord<K> | undefined>\n hasRecord(key: string): Promise<boolean>\n deleteRecords(keys: string[]): Promise<void>\n recordsInBucket(bucket: string): Promise<StoredRecord<K>[]>\n recordsOfKind(kind: K): Promise<StoredRecord<K>[]>\n allRecordSizes(): Promise<Array<Pick<StoredRecord<K>, 'key' | 'kind' | 'size'>>>\n /** Keys, kinds and last access (no data), for LRU eviction. */\n allRecordAccess(): Promise<Array<Pick<StoredRecord<K>, 'key' | 'kind' | 'lastAccess'>>>\n touchRecord(key: string): Promise<void>\n getMeta<T>(key: string): Promise<T | undefined>\n setMeta(key: string, value: unknown): Promise<void>\n /** Delete the whole database. */\n deleteDatabase(): Promise<void>\n}\n\nfunction promisify<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve(request.result)\n request.onerror = () => reject(request.error)\n })\n}\n\nexport function createRecordStore<K extends string>(dbName: string): RecordStore<K> {\n let dbPromise: Promise<IDBDatabase> | null = null\n\n function openDB(): Promise<IDBDatabase> {\n if (dbPromise) return dbPromise\n let request: IDBOpenDBRequest\n try {\n request = indexedDB.open(dbName, DB_VERSION)\n } catch (error) {\n // No indexedDB here, or opening it threw (e.g. blocked storage): nothing is kept, so the\n // next call tries again.\n return Promise.reject(error)\n }\n dbPromise = new Promise((resolve, reject) => {\n request.onerror = () => {\n dbPromise = null\n reject(request.error)\n }\n request.onsuccess = () => {\n const db = request.result\n // Another tab deleting the database (sign-out) must not be blocked by this handle.\n db.onversionchange = () => {\n db.close()\n dbPromise = null\n }\n resolve(db)\n }\n request.onupgradeneeded = () => {\n const db = request.result\n if (!db.objectStoreNames.contains(RECORDS)) {\n const records = db.createObjectStore(RECORDS, { keyPath: 'key' })\n records.createIndex('bucket', 'bucket')\n records.createIndex('kind', 'kind')\n }\n if (!db.objectStoreNames.contains(META)) db.createObjectStore(META, { keyPath: 'key' })\n }\n })\n return dbPromise\n }\n\n async function run<T>(\n store: string,\n mode: IDBTransactionMode,\n fn: (s: IDBObjectStore) => IDBRequest<T>\n ): Promise<T> {\n const db = await openDB()\n return promisify(fn(db.transaction(store, mode).objectStore(store)))\n }\n\n async function scan<T>(pick: (r: StoredRecord<K>) => T): Promise<T[]> {\n const db = await openDB()\n const store = db.transaction(RECORDS, 'readonly').objectStore(RECORDS)\n return new Promise((resolve, reject) => {\n const out: T[] = []\n const cursor = store.openCursor()\n cursor.onerror = () => reject(cursor.error)\n cursor.onsuccess = () => {\n const c = cursor.result\n if (!c) return resolve(out)\n out.push(pick(c.value as StoredRecord<K>))\n c.continue()\n }\n })\n }\n\n const self: RecordStore<K> = {\n dbName,\n async putRecord(record) {\n await run(RECORDS, 'readwrite', (s) => s.put(record))\n },\n async getRecord(key) {\n return (await run(RECORDS, 'readonly', (s) => s.get(key))) as StoredRecord<K> | undefined\n },\n async hasRecord(key) {\n return (await run(RECORDS, 'readonly', (s) => s.count(key))) > 0\n },\n async deleteRecords(keys) {\n if (keys.length === 0) return\n const db = await openDB()\n const tx = db.transaction(RECORDS, 'readwrite')\n const store = tx.objectStore(RECORDS)\n for (const key of keys) store.delete(key)\n await new Promise<void>((resolve, reject) => {\n tx.oncomplete = () => resolve()\n tx.onerror = () => reject(tx.error)\n tx.onabort = () => reject(tx.error)\n })\n },\n async recordsInBucket(bucket) {\n return (await run(RECORDS, 'readonly', (s) =>\n s.index('bucket').getAll(bucket)\n )) as StoredRecord<K>[]\n },\n async recordsOfKind(kind) {\n return (await run(RECORDS, 'readonly', (s) =>\n s.index('kind').getAll(kind)\n )) as StoredRecord<K>[]\n },\n allRecordSizes() {\n return scan(({ key, kind, size }) => ({ key, kind, size }))\n },\n allRecordAccess() {\n return scan(({ key, kind, lastAccess }) => ({ key, kind, lastAccess }))\n },\n async touchRecord(key) {\n const record = await self.getRecord(key)\n if (record) await self.putRecord({ ...record, lastAccess: Date.now() })\n },\n async getMeta<T>(key: string) {\n const row = (await run(META, 'readonly', (s) => s.get(key))) as { value: T } | undefined\n return row?.value\n },\n async setMeta(key, value) {\n await run(META, 'readwrite', (s) => s.put({ key, value }))\n },\n async deleteDatabase() {\n const db = await dbPromise?.catch(() => null)\n db?.close()\n dbPromise = null\n await new Promise<void>((resolve, reject) => {\n const request = indexedDB.deleteDatabase(dbName)\n request.onsuccess = () => resolve()\n request.onerror = () => reject(request.error)\n // Another tab still holds it open: it closes on versionchange, then this completes.\n request.onblocked = () => {}\n })\n },\n }\n return self\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ async function wipeStore(sealer, store) {
2
+ sealer.forget();
3
+ await store.deleteDatabase();
4
+ }
5
+ export {
6
+ wipeStore
7
+ };
8
+ //# sourceMappingURL=wipe.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/offline-store/wipe.ts"],
4
+ "sourcesContent": ["import type { OfflineSealer } from '@arbidocs/client'\nimport type { RecordStore } from './store'\n\n/** Forget a store's keys and delete its database. */\nexport async function wipeStore(sealer: OfflineSealer, store: RecordStore<string>): Promise<void> {\n sealer.forget()\n await store.deleteDatabase()\n}\n"],
5
+ "mappings": "AAIA,eAAsB,UAAU,QAAuB,OAA2C;AAChG,SAAO,OAAO;AACd,QAAM,MAAM,eAAe;AAC7B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,58 @@
1
+ import { partialMatchKey } from "@tanstack/react-query";
2
+ import { replayableTagMutations } from "./tags.js";
3
+ import { replayableDocumentMutations } from "./documents/documents-writes.js";
4
+ import { FINISHED_DOCUMENT_STATUSES } from "./documents/documents-data.js";
5
+ import { QUEUED_WRITE_RETRY } from "./queued-writes.js";
6
+ const REPLAYABLE = [
7
+ ...replayableTagMutations,
8
+ ...replayableDocumentMutations
9
+ ];
10
+ function isReplayableArbiMutation(mutationKey) {
11
+ return !!mutationKey && REPLAYABLE.some((m) => partialMatchKey(mutationKey, m.mutationKey));
12
+ }
13
+ function registerArbiMutationDefaults(queryClient, client) {
14
+ for (const m of REPLAYABLE) {
15
+ queryClient.setMutationDefaults(m.mutationKey, {
16
+ // Each write is sent in the workspace it was made in (kept in its variables), never in the
17
+ // one open when it is replayed; one whose workspace can't be opened is tried again, then
18
+ // kept as not sent.
19
+ mutationFn: (variables) => m.run(client(), variables),
20
+ onSuccess: (data, variables) => m.settle(queryClient, data, variables),
21
+ ...QUEUED_WRITE_RETRY
22
+ });
23
+ }
24
+ }
25
+ const DOCUMENT_FAMILIES = [
26
+ "documents",
27
+ "document",
28
+ "documentsById",
29
+ "documentVersions",
30
+ "similarDocuments"
31
+ ];
32
+ const OFFLINE_READABLE = [
33
+ ...DOCUMENT_FAMILIES,
34
+ "workspaces",
35
+ "userSettings",
36
+ "projects",
37
+ "entitlements"
38
+ ];
39
+ function isOfflineReadableArbiQuery(queryKey) {
40
+ return queryKey[0] === "arbi" && OFFLINE_READABLE.includes(queryKey[1]);
41
+ }
42
+ function isRestorableArbiQueryOnline(queryKey, data) {
43
+ if (queryKey[0] !== "arbi") return true;
44
+ if (queryKey[1] === "documents" || queryKey[1] === "entitlements") return false;
45
+ if (!DOCUMENT_FAMILIES.includes(queryKey[1])) return true;
46
+ const docs = Array.isArray(data) ? data : [data];
47
+ return !docs.some((doc) => {
48
+ const status = doc?.status;
49
+ return !!status && !FINISHED_DOCUMENT_STATUSES.has(status);
50
+ });
51
+ }
52
+ export {
53
+ isOfflineReadableArbiQuery,
54
+ isReplayableArbiMutation,
55
+ isRestorableArbiQueryOnline,
56
+ registerArbiMutationDefaults
57
+ };
58
+ //# sourceMappingURL=offline.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/offline.ts"],
4
+ "sourcesContent": ["/**\n * Offline writes that survive a reload \u2014 opt in. A mutation made while offline pauses and is sent on\n * reconnect; a host that also persists its query cache (`@tanstack/react-query-persist-client`)\n * keeps the paused write across a reload, but the restored mutation has lost its function. Call\n * {@link registerArbiMutationDefaults} once on the query client, before the persisted cache is\n * restored and `resumePausedMutations()` runs: it gives each replayable package write its request\n * back (on a bare client: the hook's `Arbi` may not exist yet) and what its success does to the\n * cache. {@link isReplayableArbiMutation} says which writes those are, for a host's\n * `shouldDehydrateMutation` and its pending-changes list.\n *\n * Replayable: creating a tag (`useCreateTag`), editing documents' fields (`useUpdateDocuments`),\n * and applying, removing or re-noting a tag on documents (`useAssignDocTags`, `useRemoveDocTags`,\n * `useUpdateDocTag`). Each keeps the workspace it was made in and is replayed there\n * (`queued-writes.ts`), whichever workspace is open after the reload.\n */\n\nimport type { MutationKey, QueryClient, QueryKey } from '@tanstack/react-query'\nimport { partialMatchKey } from '@tanstack/react-query'\nimport type { ArbiClient } from '@arbidocs/client'\nimport { replayableTagMutations } from './tags'\nimport { replayableDocumentMutations } from './documents/documents-writes'\nimport { FINISHED_DOCUMENT_STATUSES } from './documents/documents-data'\nimport { QUEUED_WRITE_RETRY } from './queued-writes'\n\ninterface ReplayableMutation {\n mutationKey: MutationKey\n // Each entry types its own variables and result; the registry only passes them through.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n run: (client: ArbiClient, variables: any) => Promise<unknown>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n settle: (qc: QueryClient, data: any, variables: any) => unknown\n}\n\nconst REPLAYABLE: readonly ReplayableMutation[] = [\n ...replayableTagMutations,\n ...replayableDocumentMutations,\n]\n\n/** Whether a mutation is a package write that can be queued offline and replayed after a reload. */\nexport function isReplayableArbiMutation(mutationKey: MutationKey | undefined): boolean {\n return !!mutationKey && REPLAYABLE.some((m) => partialMatchKey(mutationKey, m.mutationKey))\n}\n\n/**\n * Re-supply the replayable package writes on `queryClient` (see the module comment). `client` is\n * the host's API client, read when a restored write is sent.\n */\nexport function registerArbiMutationDefaults(\n queryClient: QueryClient,\n client: () => ArbiClient\n): void {\n for (const m of REPLAYABLE) {\n queryClient.setMutationDefaults(m.mutationKey, {\n // Each write is sent in the workspace it was made in (kept in its variables), never in the\n // one open when it is replayed; one whose workspace can't be opened is tried again, then\n // kept as not sent.\n mutationFn: (variables: unknown) => m.run(client(), variables),\n onSuccess: (data: unknown, variables: unknown) => m.settle(queryClient, data, variables),\n ...QUEUED_WRITE_RETRY,\n })\n }\n}\n\n/** The package query families holding document metadata (never content). */\nconst DOCUMENT_FAMILIES = [\n 'documents',\n 'document',\n 'documentsById',\n 'documentVersions',\n 'similarDocuments',\n]\n\n/**\n * The package query families a host may persist for an offline start. The entitlements too: the\n * paid pages (Mail, Calendar) open only once they are known, so without them a reopened tab offline\n * showed an empty page instead of the mailbox and Outbox kept on this device.\n */\nconst OFFLINE_READABLE = [\n ...DOCUMENT_FAMILIES,\n 'workspaces',\n 'userSettings',\n 'projects',\n 'entitlements',\n]\n\n/**\n * Whether a package query is worth persisting for an offline start (a host's\n * `shouldDehydrateQuery`): the documents lists, documents, their versions and near-duplicate\n * pairs (metadata, never a document's content), the workspace list (its keys stay wrapped), the\n * user settings, the projects and the entitlements.\n */\nexport function isOfflineReadableArbiQuery(queryKey: QueryKey): boolean {\n return queryKey[0] === 'arbi' && OFFLINE_READABLE.includes(queryKey[1] as string)\n}\n\n/**\n * Whether a persisted package query may be restored when the app starts online. Not a documents\n * list (it is never re-read on its own, so a stale copy would be trusted all session: it loads\n * fresh instead), nor a document saved while still processing (its saved freshness would keep it\n * \"processing\" with no re-read), nor the entitlements (kept for an offline start only: online they\n * are read fresh, so a plan bought since shows at once). The other families (the workspace list,\n * the settings) always. Offline, everything persisted is restored.\n */\nexport function isRestorableArbiQueryOnline(queryKey: QueryKey, data: unknown): boolean {\n if (queryKey[0] !== 'arbi') return true\n if (queryKey[1] === 'documents' || queryKey[1] === 'entitlements') return false\n if (!DOCUMENT_FAMILIES.includes(queryKey[1] as string)) return true\n const docs = Array.isArray(data) ? data : [data]\n return !docs.some((doc) => {\n const status = (doc as { status?: string | null } | null)?.status\n return !!status && !FINISHED_DOCUMENT_STATUSES.has(status)\n })\n}\n"],
5
+ "mappings": "AAiBA,SAAS,uBAAuB;AAEhC,SAAS,8BAA8B;AACvC,SAAS,mCAAmC;AAC5C,SAAS,kCAAkC;AAC3C,SAAS,0BAA0B;AAWnC,MAAM,aAA4C;AAAA,EAChD,GAAG;AAAA,EACH,GAAG;AACL;AAGO,SAAS,yBAAyB,aAA+C;AACtF,SAAO,CAAC,CAAC,eAAe,WAAW,KAAK,CAAC,MAAM,gBAAgB,aAAa,EAAE,WAAW,CAAC;AAC5F;AAMO,SAAS,6BACd,aACA,QACM;AACN,aAAW,KAAK,YAAY;AAC1B,gBAAY,oBAAoB,EAAE,aAAa;AAAA;AAAA;AAAA;AAAA,MAI7C,YAAY,CAAC,cAAuB,EAAE,IAAI,OAAO,GAAG,SAAS;AAAA,MAC7D,WAAW,CAAC,MAAe,cAAuB,EAAE,OAAO,aAAa,MAAM,SAAS;AAAA,MACvF,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AACF;AAGA,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOA,MAAM,mBAAmB;AAAA,EACvB,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,2BAA2B,UAA6B;AACtE,SAAO,SAAS,CAAC,MAAM,UAAU,iBAAiB,SAAS,SAAS,CAAC,CAAW;AAClF;AAUO,SAAS,4BAA4B,UAAoB,MAAwB;AACtF,MAAI,SAAS,CAAC,MAAM,OAAQ,QAAO;AACnC,MAAI,SAAS,CAAC,MAAM,eAAe,SAAS,CAAC,MAAM,eAAgB,QAAO;AAC1E,MAAI,CAAC,kBAAkB,SAAS,SAAS,CAAC,CAAW,EAAG,QAAO;AAC/D,QAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAC/C,SAAO,CAAC,KAAK,KAAK,CAAC,QAAQ;AACzB,UAAM,SAAU,KAA2C;AAC3D,WAAO,CAAC,CAAC,UAAU,CAAC,2BAA2B,IAAI,MAAM;AAAA,EAC3D,CAAC;AACH;",
6
+ "names": []
7
+ }
package/dist/people.js ADDED
@@ -0,0 +1,122 @@
1
+ import { useMemo } from "react";
2
+ import { useAgents, useWorkspaces } from "./hooks.js";
3
+ import { useContacts, useSearchContacts } from "./contacts.js";
4
+ import { useArbi } from "./useArbi.js";
5
+ import { getUserDisplayName, isAgent } from "./users/user-display.js";
6
+ function peopleDirectory(people, meId) {
7
+ const ids = /* @__PURE__ */ new Map();
8
+ const emails = /* @__PURE__ */ new Map();
9
+ for (const p of people) {
10
+ if (p.user && p.user.external_id !== meId && !ids.has(p.user.external_id))
11
+ ids.set(p.user.external_id, p.user);
12
+ const key = p.email.toLowerCase();
13
+ if (key && !emails.has(key)) emails.set(key, p);
14
+ }
15
+ const users = [...ids.values()].sort(
16
+ (a, b) => getUserDisplayName(a).localeCompare(getUserDisplayName(b))
17
+ );
18
+ return {
19
+ users,
20
+ byId: (id) => id ? ids.get(id) : void 0,
21
+ byEmail: (email) => email ? emails.get(email.toLowerCase()) : void 0
22
+ };
23
+ }
24
+ function personOfUser(user, contactId = null) {
25
+ return {
26
+ email: user.email,
27
+ name: getUserDisplayName(user) || user.email,
28
+ user,
29
+ contactId,
30
+ addressBookId: null
31
+ };
32
+ }
33
+ function cardName(contact) {
34
+ return contact.card?.name?.trim() || [contact.card?.given_name, contact.card?.family_name].filter(Boolean).join(" ");
35
+ }
36
+ function userFromName(externalId, email, name) {
37
+ const [given = "", ...rest] = (name || email).trim().split(/\s+/);
38
+ return { external_id: externalId, email, given_name: given, family_name: rest.join(" ") };
39
+ }
40
+ function usePeople() {
41
+ const arbi = useArbi();
42
+ const meId = arbi.isLoggedIn ? arbi.user.identity()?.externalId : void 0;
43
+ const { data: contacts = [] } = useContacts();
44
+ const { data: workspaces = [] } = useWorkspaces();
45
+ const { data: agents = [] } = useAgents();
46
+ return useMemo(() => {
47
+ const people = [];
48
+ const contactOf = /* @__PURE__ */ new Map();
49
+ for (const c of contacts) {
50
+ if (c.status === "failed" || c.user && isAgent(c.user)) continue;
51
+ if (c.user) contactOf.set(c.user.external_id, c);
52
+ const addresses = [
53
+ c.email ?? c.user?.email,
54
+ ...(c.card?.emails ?? []).map((e) => e.email)
55
+ ].filter((e) => !!e);
56
+ const user = c.status === "registered" ? c.user ?? null : null;
57
+ for (const email of new Set(addresses))
58
+ people.push({
59
+ email,
60
+ name: cardName(c) || (user ? getUserDisplayName(user) : "") || email,
61
+ user,
62
+ contactId: c.external_id ?? null,
63
+ addressBookId: c.address_book_ext_id ?? null
64
+ });
65
+ }
66
+ const addUser = (user) => {
67
+ const contact = contactOf.get(user.external_id);
68
+ people.push({
69
+ email: user.email,
70
+ name: getUserDisplayName(user) || user.email,
71
+ user,
72
+ contactId: contact?.external_id ?? null,
73
+ addressBookId: contact?.address_book_ext_id ?? null
74
+ });
75
+ };
76
+ for (const ws of workspaces) for (const wu of ws.users ?? []) addUser(wu.user);
77
+ for (const agent of agents) addUser(agent);
78
+ return peopleDirectory(people, meId);
79
+ }, [contacts, workspaces, agents, meId]);
80
+ }
81
+ function usePeopleSearch(query, { agents = false } = {}) {
82
+ const arbi = useArbi();
83
+ const meId = arbi.isLoggedIn ? arbi.user.identity()?.externalId : void 0;
84
+ const directory = usePeople();
85
+ const search = useSearchContacts(query);
86
+ const term = query.trim().toLowerCase();
87
+ const hits = search.data;
88
+ const people = useMemo(() => {
89
+ if (!term) return [];
90
+ const out = [];
91
+ const seen = /* @__PURE__ */ new Set();
92
+ for (const hit of hits ?? []) {
93
+ if (hit.user_id === meId || seen.has(hit.email.toLowerCase())) continue;
94
+ seen.add(hit.email.toLowerCase());
95
+ const user = hit.user_id ? directory.byId(hit.user_id) ?? userFromName(hit.user_id, hit.email, hit.name) : null;
96
+ if (user && isAgent(user)) continue;
97
+ out.push({
98
+ email: hit.email,
99
+ name: hit.name || (user ? getUserDisplayName(user) : "") || hit.email,
100
+ user,
101
+ contactId: hit.contact_id ?? null,
102
+ addressBookId: hit.address_book_ext_id ?? null
103
+ });
104
+ }
105
+ if (agents)
106
+ for (const user of directory.users) {
107
+ if (!isAgent(user) || seen.has(user.email.toLowerCase())) continue;
108
+ const name = getUserDisplayName(user);
109
+ if (!`${name} ${user.email}`.toLowerCase().includes(term)) continue;
110
+ out.push({ email: user.email, name, user, contactId: null, addressBookId: null });
111
+ }
112
+ return out;
113
+ }, [term, hits, directory, agents, meId]);
114
+ return { people, isFetching: search.isFetching };
115
+ }
116
+ export {
117
+ peopleDirectory,
118
+ personOfUser,
119
+ usePeople,
120
+ usePeopleSearch
121
+ };
122
+ //# sourceMappingURL=people.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/people.ts"],
4
+ "sourcesContent": ["/**\n * People \u2014 the one place an app learns who someone is.\n *\n * Pickers and autocomplete ask {@link usePeopleSearch}: GET /v1/contacts/search (every address book you can see\n * plus registered people who share a workspace with you, one entry per address), and your own agents where an\n * agent is a valid target. Resolving an id or address seen elsewhere (a DM tab, a tag's creator, a mail\n * recipient) asks {@link usePeople}: the same population, held as a directory \u2014 your contacts, your workspace\n * co-members and your agents. Nothing is learned from notifications.\n */\n\nimport { useMemo } from 'react'\nimport type { components } from '@arbidocs/client'\nimport type { contacts as contactsOps } from '@arbidocs/sdk/browser'\nimport { useAgents, useWorkspaces } from './hooks'\nimport { useContacts, useSearchContacts } from './contacts'\nimport { useArbi } from './useArbi'\nimport { getUserDisplayName, isAgent } from './users/user-display'\n\n/** An ARBI account (or agent) as the API returns it. */\nexport type UserResponse = components['schemas']['UserResponse']\ntype Contact = contactsOps.Contact\n\n// \u2500\u2500 The directory (pure) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface Person {\n email: string\n /** Display name: the card's name, else the account's, else the address. */\n name: string\n /** The ARBI account (or agent), when the person has one. Null: a contact who is not on ARBI. */\n user: UserResponse | null\n /** `cnt-\u2026` when the person is one of the contacts you can see. */\n contactId: string | null\n /** `cal-\u2026` of the address book that contact is in. */\n addressBookId: string | null\n}\n\nexport interface PeopleDirectory {\n /** Registered people and agents, sorted by name (never you). */\n users: UserResponse[]\n byId: (externalId: string | null | undefined) => UserResponse | undefined\n byEmail: (email: string | null | undefined) => Person | undefined\n}\n\n/** Index people by account id and by every address they have. Pure, so tests can build one. */\nexport function peopleDirectory(people: Person[], meId?: string | null): PeopleDirectory {\n const ids = new Map<string, UserResponse>()\n const emails = new Map<string, Person>()\n for (const p of people) {\n if (p.user && p.user.external_id !== meId && !ids.has(p.user.external_id))\n ids.set(p.user.external_id, p.user)\n const key = p.email.toLowerCase()\n if (key && !emails.has(key)) emails.set(key, p)\n }\n const users = [...ids.values()].sort((a, b) =>\n getUserDisplayName(a).localeCompare(getUserDisplayName(b))\n )\n return {\n users,\n byId: (id) => (id ? ids.get(id) : undefined),\n byEmail: (email) => (email ? emails.get(email.toLowerCase()) : undefined),\n }\n}\n\n/** A registered person (or agent) as a {@link Person}. */\nexport function personOfUser(user: UserResponse, contactId: string | null = null): Person {\n return {\n email: user.email,\n name: getUserDisplayName(user) || user.email,\n user,\n contactId,\n addressBookId: null,\n }\n}\n\n// \u2500\u2500 The hooks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction cardName(contact: Contact): string {\n return (\n contact.card?.name?.trim() ||\n [contact.card?.given_name, contact.card?.family_name].filter(Boolean).join(' ')\n )\n}\n\n/** A stand-in account for a search hit whose full record the directory does not hold. */\nfunction userFromName(externalId: string, email: string, name: string | null | undefined) {\n const [given = '', ...rest] = (name || email).trim().split(/\\s+/)\n return { external_id: externalId, email, given_name: given, family_name: rest.join(' ') }\n}\n\n/** Everyone you know, for resolving an id or an address to a person. */\nexport function usePeople(): PeopleDirectory {\n const arbi = useArbi()\n const meId = arbi.isLoggedIn ? arbi.user.identity()?.externalId : undefined\n const { data: contacts = [] } = useContacts()\n const { data: workspaces = [] } = useWorkspaces()\n const { data: agents = [] } = useAgents()\n\n return useMemo(() => {\n const people: Person[] = []\n const contactOf = new Map<string, Contact>()\n for (const c of contacts) {\n if (c.status === 'failed' || (c.user && isAgent(c.user))) continue\n if (c.user) contactOf.set(c.user.external_id, c)\n const addresses = [\n c.email ?? c.user?.email,\n ...(c.card?.emails ?? []).map((e) => e.email),\n ].filter((e): e is string => !!e)\n const user = c.status === 'registered' ? (c.user ?? null) : null\n for (const email of new Set(addresses))\n people.push({\n email,\n name: cardName(c) || (user ? getUserDisplayName(user) : '') || email,\n user,\n contactId: c.external_id ?? null,\n addressBookId: c.address_book_ext_id ?? null,\n })\n }\n const addUser = (user: UserResponse) => {\n const contact = contactOf.get(user.external_id)\n people.push({\n email: user.email,\n name: getUserDisplayName(user) || user.email,\n user,\n contactId: contact?.external_id ?? null,\n addressBookId: contact?.address_book_ext_id ?? null,\n })\n }\n for (const ws of workspaces) for (const wu of ws.users ?? []) addUser(wu.user as UserResponse)\n for (const agent of agents) addUser(agent as UserResponse)\n return peopleDirectory(people, meId)\n }, [contacts, workspaces, agents, meId])\n}\n\n/**\n * People matching `query` (debounced; an empty query matches nobody), for a picker or an autocomplete.\n * `agents`: also your own agents whose name or address matches \u2014 only where an agent is a valid target.\n */\nexport function usePeopleSearch(\n query: string,\n { agents = false }: { agents?: boolean } = {}\n): { people: Person[]; isFetching: boolean } {\n const arbi = useArbi()\n const meId = arbi.isLoggedIn ? arbi.user.identity()?.externalId : undefined\n const directory = usePeople()\n const search = useSearchContacts(query)\n const term = query.trim().toLowerCase()\n const hits = search.data\n\n const people = useMemo(() => {\n if (!term) return []\n const out: Person[] = []\n const seen = new Set<string>()\n for (const hit of hits ?? []) {\n if (hit.user_id === meId || seen.has(hit.email.toLowerCase())) continue\n seen.add(hit.email.toLowerCase())\n const user = hit.user_id\n ? (directory.byId(hit.user_id) ??\n (userFromName(hit.user_id, hit.email, hit.name) as UserResponse))\n : null\n if (user && isAgent(user)) continue\n out.push({\n email: hit.email,\n name: hit.name || (user ? getUserDisplayName(user) : '') || hit.email,\n user,\n contactId: hit.contact_id ?? null,\n addressBookId: hit.address_book_ext_id ?? null,\n })\n }\n if (agents)\n for (const user of directory.users) {\n if (!isAgent(user) || seen.has(user.email.toLowerCase())) continue\n const name = getUserDisplayName(user)\n if (!`${name} ${user.email}`.toLowerCase().includes(term)) continue\n out.push({ email: user.email, name, user, contactId: null, addressBookId: null })\n }\n return out\n }, [term, hits, directory, agents, meId])\n\n return { people, isFetching: search.isFetching }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,30 @@
1
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { useArbi } from "./useArbi.js";
3
+ import { arbiQueryKeys } from "./hooks.js";
4
+ function useUpdateProjectFields() {
5
+ const arbi = useArbi();
6
+ const qc = useQueryClient();
7
+ return useMutation({
8
+ mutationFn: ({
9
+ projectExtId,
10
+ patch
11
+ }) => arbi.projects.update(projectExtId, patch),
12
+ onSuccess: () => {
13
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() });
14
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
15
+ }
16
+ });
17
+ }
18
+ function useProjectConversationUsage(projectExtId, monthsBack = 0, options) {
19
+ const arbi = useArbi();
20
+ return useQuery({
21
+ queryKey: arbiQueryKeys.projectConversationUsage(projectExtId ?? "", monthsBack),
22
+ queryFn: () => arbi.projects.usageByConversation(projectExtId, monthsBack),
23
+ enabled: (options?.enabled ?? true) && !!projectExtId && arbi.isLoggedIn
24
+ });
25
+ }
26
+ export {
27
+ useProjectConversationUsage,
28
+ useUpdateProjectFields
29
+ };
30
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/projects.ts"],
4
+ "sourcesContent": ["/**\n * Project details (budget, client, stage, lead, fields) and spend by conversation.\n *\n * Requires an `ArbiHost` (with an `arbi`) and a React Query client above it.\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport type {\n ProjectConversationUsageResponse,\n ProjectResponse,\n ProjectUpdateRequest,\n} from '@arbidocs/sdk/browser'\nimport { useArbi } from './useArbi'\nimport { arbiQueryKeys } from './hooks'\n\n/**\n * Patch a project (owner only): name, daily cap, and the details a host sets (`budget` in minor\n * units, `client`, `client_ref`, `stage`, `lead_user`, `fields` merged key by key, `field_schema`).\n * The project list and the workspace list (which carries project names) refresh.\n */\nexport function useUpdateProjectFields() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({\n projectExtId,\n patch,\n }: {\n projectExtId: string\n patch: ProjectUpdateRequest\n }): Promise<ProjectResponse> => arbi.projects.update(projectExtId, patch),\n onSuccess: () => {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.projects() })\n // Each workspace carries its project's name: a rename shows there at once.\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n },\n })\n}\n\n/** A project's spend by conversation (and what no conversation accounts for), in \u00A3. */\nexport function useProjectConversationUsage(\n projectExtId: string | undefined,\n monthsBack: number = 0,\n options?: { enabled?: boolean }\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.projectConversationUsage(projectExtId ?? '', monthsBack),\n queryFn: (): Promise<ProjectConversationUsageResponse> =>\n arbi.projects.usageByConversation(projectExtId as string, monthsBack),\n enabled: (options?.enabled ?? true) && !!projectExtId && arbi.isLoggedIn,\n })\n}\n"],
5
+ "mappings": "AAMA,SAAS,aAAa,UAAU,sBAAsB;AAMtD,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAOvB,SAAS,yBAAyB;AACvC,QAAM,OAAO,QAAQ;AACrB,QAAM,KAAK,eAAe;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC;AAAA,MACX;AAAA,MACA;AAAA,IACF,MAGgC,KAAK,SAAS,OAAO,cAAc,KAAK;AAAA,IACxE,WAAW,MAAM;AACf,WAAK,GAAG,kBAAkB,EAAE,UAAU,cAAc,SAAS,EAAE,CAAC;AAEhE,WAAK,GAAG,kBAAkB,EAAE,UAAU,cAAc,WAAW,EAAE,CAAC;AAAA,IACpE;AAAA,EACF,CAAC;AACH;AAGO,SAAS,4BACd,cACA,aAAqB,GACrB,SACA;AACA,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,yBAAyB,gBAAgB,IAAI,UAAU;AAAA,IAC/E,SAAS,MACP,KAAK,SAAS,oBAAoB,cAAwB,UAAU;AAAA,IACtE,UAAU,SAAS,WAAW,SAAS,CAAC,CAAC,gBAAgB,KAAK;AAAA,EAChE,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,63 @@
1
+ import { MutationCache, QueryClient } from "@tanstack/react-query";
2
+ import { isAbortError, SETTINGS_WRITE_BREAKER_CODE } from "@arbidocs/client";
3
+ import { notify } from "./notifications/notify-store.js";
4
+ import { createArbiQueryPersistOptions } from "./query-persist.js";
5
+ function isClientError(error) {
6
+ if (error && typeof error === "object" && "status" in error) {
7
+ const status = error.status;
8
+ if (typeof status === "number" && status >= 400 && status < 500) {
9
+ if (status === 408 || status === 429) return false;
10
+ return true;
11
+ }
12
+ }
13
+ return false;
14
+ }
15
+ function retryDelay(attempt) {
16
+ return Math.min(1e3 * 2 ** attempt, 3e4) + Math.random() * 500;
17
+ }
18
+ function shouldRetryQuery(failureCount, error) {
19
+ return failureCount < 2 && !isClientError(error) && !isAbortError(error);
20
+ }
21
+ const BREAKER_NOTICE_MS = 6e4;
22
+ function createArbiQueryClient({
23
+ persist = false
24
+ } = {}) {
25
+ let breakerNoticeAt = -Infinity;
26
+ const queryClient = new QueryClient({
27
+ mutationCache: new MutationCache({
28
+ onError: (error) => {
29
+ const { detail, code } = error ?? {};
30
+ if (detail === "account_deletion_pending") {
31
+ notify.error("Your account is read-only while deletion is pending.");
32
+ }
33
+ if (code === SETTINGS_WRITE_BREAKER_CODE && Date.now() - breakerNoticeAt > BREAKER_NOTICE_MS) {
34
+ breakerNoticeAt = Date.now();
35
+ notify.warning("Settings are being saved too frequently", {
36
+ description: "Some changes were not saved. Refresh the page if this keeps happening.",
37
+ duration: 1e4
38
+ });
39
+ }
40
+ }
41
+ }),
42
+ defaultOptions: {
43
+ queries: {
44
+ staleTime: 1e3 * 60 * 5,
45
+ refetchOnWindowFocus: false,
46
+ retry: shouldRetryQuery,
47
+ retryDelay,
48
+ gcTime: 1e3 * 60 * 30
49
+ },
50
+ mutations: {
51
+ retry: false
52
+ }
53
+ }
54
+ });
55
+ return { queryClient, persistOptions: persist ? createArbiQueryPersistOptions() : null };
56
+ }
57
+ export {
58
+ createArbiQueryClient,
59
+ isClientError,
60
+ retryDelay,
61
+ shouldRetryQuery
62
+ };
63
+ //# sourceMappingURL=query-client.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/query-client.ts"],
4
+ "sourcesContent": ["/**\n * The React Query client every ARBI host shares: ARBI-frontend's own, and a blocks-only site's\n * through `defaultHost`. Call once per page, at module scope.\n *\n * const { queryClient } = createArbiQueryClient()\n * const { queryClient, persistOptions } = createArbiQueryClient({ persist: true })\n * <PersistQueryClientProvider client={queryClient} persistOptions={persistOptions}>\n *\n * Reads are fresh for 5 minutes and kept 30, are not re-read on window focus, and retry twice\n * with backoff, never on a 4xx (but 408/429) nor on a read a sign-out aborted. Writes never retry.\n * A write refused because the account's deletion is pending, or dropped by the client's settings\n * write breaker, tells the user. With `persist`, the offline slice of the cache is kept on this\n * device (`query-persist.ts`). Sign-out and sign-in clear it with `queryClient.clear()`; the same\n * client stays, so the provider and every hook keep theirs.\n */\n\nimport { MutationCache, QueryClient } from '@tanstack/react-query'\nimport { isAbortError, SETTINGS_WRITE_BREAKER_CODE } from '@arbidocs/client'\nimport { notify } from './notifications/notify-store'\nimport { createArbiQueryPersistOptions, type ArbiQueryPersistOptions } from './query-persist'\n\n/**\n * Returns true for HTTP 4xx errors that should NOT be retried, except for\n * 408 (Request Timeout) and 429 (Too Many Requests) which are transient\n * and worth retrying.\n *\n * Auth errors (401/403) are already handled by the client's re-login, so\n * React Query does not stack additional retries on top of its retry.\n */\nexport function isClientError(error: unknown): boolean {\n if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status?: number }).status\n if (typeof status === 'number' && status >= 400 && status < 500) {\n // Transient client errors \u2014 allow retry\n if (status === 408 || status === 429) return false\n return true\n }\n }\n return false\n}\n\n/**\n * Exponential backoff with jitter.\n * attempt 0 \u2192 ~1 s, attempt 1 \u2192 ~2 s, capped at 30 s.\n */\nexport function retryDelay(attempt: number): number {\n return Math.min(1000 * 2 ** attempt, 30_000) + Math.random() * 500\n}\n\n/** Whether a failed read is tried again (`failureCount` failures so far). */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n return failureCount < 2 && !isClientError(error) && !isAbortError(error)\n}\n\n// A write storm fails hundreds of writes a minute: tell the user once per minute, not per write.\nconst BREAKER_NOTICE_MS = 60_000\n\nexport interface ArbiQueryClientOptions {\n /** Keep the offline slice of the cache on this device, for an offline start. */\n persist?: boolean\n}\n\nexport interface ArbiQueryClient {\n queryClient: QueryClient\n /** For `<PersistQueryClientProvider persistOptions>`; `null` without `persist`. */\n persistOptions: ArbiQueryPersistOptions | null\n}\n\n/** The shared React Query client (see the module comment). */\nexport function createArbiQueryClient(options: {\n persist: true\n}): ArbiQueryClient & { persistOptions: ArbiQueryPersistOptions }\nexport function createArbiQueryClient(options?: ArbiQueryClientOptions): ArbiQueryClient\nexport function createArbiQueryClient({\n persist = false,\n}: ArbiQueryClientOptions = {}): ArbiQueryClient {\n let breakerNoticeAt = -Infinity\n const queryClient = new QueryClient({\n mutationCache: new MutationCache({\n onError: (error: unknown) => {\n const { detail, code } = (error ?? {}) as { detail?: unknown; code?: unknown }\n // The structured 403 of an account whose deletion is pending.\n if (detail === 'account_deletion_pending') {\n notify.error('Your account is read-only while deletion is pending.')\n }\n if (\n code === SETTINGS_WRITE_BREAKER_CODE &&\n Date.now() - breakerNoticeAt > BREAKER_NOTICE_MS\n ) {\n breakerNoticeAt = Date.now()\n notify.warning('Settings are being saved too frequently', {\n description: 'Some changes were not saved. Refresh the page if this keeps happening.',\n duration: 10_000,\n })\n }\n },\n }),\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5,\n refetchOnWindowFocus: false,\n retry: shouldRetryQuery,\n retryDelay,\n gcTime: 1000 * 60 * 30,\n },\n mutations: {\n retry: false,\n },\n },\n })\n return { queryClient, persistOptions: persist ? createArbiQueryPersistOptions() : null }\n}\n"],
5
+ "mappings": "AAgBA,SAAS,eAAe,mBAAmB;AAC3C,SAAS,cAAc,mCAAmC;AAC1D,SAAS,cAAc;AACvB,SAAS,qCAAmE;AAUrE,SAAS,cAAc,OAAyB;AACrD,MAAI,SAAS,OAAO,UAAU,YAAY,YAAY,OAAO;AAC3D,UAAM,SAAU,MAA8B;AAC9C,QAAI,OAAO,WAAW,YAAY,UAAU,OAAO,SAAS,KAAK;AAE/D,UAAI,WAAW,OAAO,WAAW,IAAK,QAAO;AAC7C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,WAAW,SAAyB;AAClD,SAAO,KAAK,IAAI,MAAO,KAAK,SAAS,GAAM,IAAI,KAAK,OAAO,IAAI;AACjE;AAGO,SAAS,iBAAiB,cAAsB,OAAyB;AAC9E,SAAO,eAAe,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,aAAa,KAAK;AACzE;AAGA,MAAM,oBAAoB;AAkBnB,SAAS,sBAAsB;AAAA,EACpC,UAAU;AACZ,IAA4B,CAAC,GAAoB;AAC/C,MAAI,kBAAkB;AACtB,QAAM,cAAc,IAAI,YAAY;AAAA,IAClC,eAAe,IAAI,cAAc;AAAA,MAC/B,SAAS,CAAC,UAAmB;AAC3B,cAAM,EAAE,QAAQ,KAAK,IAAK,SAAS,CAAC;AAEpC,YAAI,WAAW,4BAA4B;AACzC,iBAAO,MAAM,sDAAsD;AAAA,QACrE;AACA,YACE,SAAS,+BACT,KAAK,IAAI,IAAI,kBAAkB,mBAC/B;AACA,4BAAkB,KAAK,IAAI;AAC3B,iBAAO,QAAQ,2CAA2C;AAAA,YACxD,aAAa;AAAA,YACb,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,gBAAgB;AAAA,MACd,SAAS;AAAA,QACP,WAAW,MAAO,KAAK;AAAA,QACvB,sBAAsB;AAAA,QACtB,OAAO;AAAA,QACP;AAAA,QACA,QAAQ,MAAO,KAAK;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,EAAE,aAAa,gBAAgB,UAAU,8BAA8B,IAAI,KAAK;AACzF;",
6
+ "names": []
7
+ }
@@ -1,24 +1,4 @@
1
- import { ArbiHostContext } from './chunk-VSCU7K4V.js';
2
- import { useContext } from 'react';
3
-
4
- function useArbiHost() {
5
- return useContext(ArbiHostContext);
6
- }
7
-
8
- // src/useArbi.ts
9
- function useArbi() {
10
- const { arbi } = useArbiHost();
11
- if (!arbi) {
12
- throw new Error("useArbi() needs an <ArbiHost> whose config has an `arbi`");
13
- }
14
- return arbi;
15
- }
16
- function useDeploymentDomain() {
17
- return useArbiHost().arbi?.getDeploymentDomain();
18
- }
19
-
20
- // src/query-keys.ts
21
- var arbiQueryKeys = {
1
+ const arbiQueryKeys = {
22
2
  fileShares: () => ["arbi", "fileShares"],
23
3
  fileShare: (id) => ["arbi", "fileShare", id],
24
4
  fileSharePdf: (id, status) => ["arbi", "fileSharePdf", id, status],
@@ -225,7 +205,7 @@ var arbiQueryKeys = {
225
205
  /** Notifications of one kind for a deployment's user (polled). */
226
206
  typedNotifications: (kind, apiUrl, userId) => ["arbi", "typedNotifications", kind, apiUrl, userId ?? ""]
227
207
  };
228
- var arbiMutationKeys = {
208
+ const arbiMutationKeys = {
229
209
  /** A member's role changed. */
230
210
  setWorkspaceMemberRoles: () => ["arbi", "workspaces", "roles"],
231
211
  runWorkflow: () => ["arbi", "workflows", "run"],
@@ -247,7 +227,7 @@ var arbiMutationKeys = {
247
227
  /** A chat turn being sent (the app's send pipeline). */
248
228
  sendMessage: () => ["arbi", "conversations", "send"]
249
229
  };
250
- var calendarQueryKeys = {
230
+ const calendarQueryKeys = {
251
231
  all: () => ["arbi", "calendar"],
252
232
  settings: () => ["arbi", "calendar", "settings"],
253
233
  calendars: () => ["arbi", "calendar", "calendars"],
@@ -283,7 +263,7 @@ var calendarQueryKeys = {
283
263
  /** The offline outbox (writes made offline, not yet sent). */
284
264
  outbox: () => ["arbi", "calendar", "outbox"]
285
265
  };
286
- var callQueryKeys = {
266
+ const callQueryKeys = {
287
267
  all: () => ["arbi", "calls"],
288
268
  config: () => ["arbi", "calls", "config"],
289
269
  call: (callExtId) => ["arbi", "calls", "call", callExtId],
@@ -293,7 +273,7 @@ var callQueryKeys = {
293
273
  recording: (callExtId, recordingExtId) => ["arbi", "calls", "recordings", callExtId, "one", recordingExtId],
294
274
  inviteLinks: (callExtId) => ["arbi", "calls", "invite-links", callExtId]
295
275
  };
296
- var connectorQueryKeys = {
276
+ const connectorQueryKeys = {
297
277
  all: () => ["arbi", "connectors"],
298
278
  catalog: () => ["arbi", "connectors", "catalog"],
299
279
  mine: () => ["arbi", "connectors", "mine"],
@@ -308,7 +288,7 @@ var connectorQueryKeys = {
308
288
  allDriveSyncProgress: () => ["arbi", "connectors", "drive-sync-progress"],
309
289
  slack: () => ["arbi", "connectors", "slack"]
310
290
  };
311
- var mailQueryKeys = {
291
+ const mailQueryKeys = {
312
292
  all: () => ["arbi", "mail"],
313
293
  policy: () => ["arbi", "mail", "policy"],
314
294
  accounts: () => ["arbi", "mail", "accounts"],
@@ -338,11 +318,18 @@ var mailQueryKeys = {
338
318
  draftCompose: (accountId, draftId) => ["arbi", "mail", "draft-compose", accountId, draftId],
339
319
  attachmentText: (accountId, messageId, attachmentId) => ["arbi", "mail", "attachment-text", accountId, messageId, attachmentId]
340
320
  };
341
- var documentBytesKey = (documentRef, version, kind) => version === void 0 ? ["arbi", "documentBytes", documentRef] : ["arbi", "documentBytes", documentRef, version, kind ?? "pdf"];
321
+ const documentBytesKey = (documentRef, version, kind) => version === void 0 ? ["arbi", "documentBytes", documentRef] : ["arbi", "documentBytes", documentRef, version, kind ?? "pdf"];
342
322
  function isUnderQueryKey(queryKey, prefix) {
343
323
  return prefix.every((part, i) => queryKey[i] === part);
344
324
  }
345
-
346
- export { arbiMutationKeys, arbiQueryKeys, calendarQueryKeys, callQueryKeys, connectorQueryKeys, documentBytesKey, isUnderQueryKey, mailQueryKeys, useArbi, useArbiHost, useDeploymentDomain };
347
- //# sourceMappingURL=chunk-ZM6N7YZH.js.map
348
- //# sourceMappingURL=chunk-ZM6N7YZH.js.map
325
+ export {
326
+ arbiMutationKeys,
327
+ arbiQueryKeys,
328
+ calendarQueryKeys,
329
+ callQueryKeys,
330
+ connectorQueryKeys,
331
+ documentBytesKey,
332
+ isUnderQueryKey,
333
+ mailQueryKeys
334
+ };
335
+ //# sourceMappingURL=query-keys.js.map