@arbidocs/react 0.5.111 → 0.5.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (983) 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/{chunk-Z3W4XFWB.cjs → chunk-C72FSQUE.cjs} +3 -3
  304. package/dist/{chunk-Z3W4XFWB.cjs.map → chunk-C72FSQUE.cjs.map} +1 -1
  305. package/dist/{chunk-LBAG7KL7.cjs → chunk-FQVNZCTD.cjs} +3 -3
  306. package/dist/{chunk-LBAG7KL7.cjs.map → chunk-FQVNZCTD.cjs.map} +1 -1
  307. package/dist/{chunk-DI5KSVKY.cjs → chunk-UDDJIUHJ.cjs} +3 -3
  308. package/dist/{chunk-DI5KSVKY.cjs.map → chunk-UDDJIUHJ.cjs.map} +1 -1
  309. package/dist/config/config-hooks.js +209 -0
  310. package/dist/config/config-hooks.js.map +7 -0
  311. package/dist/connectivity.js +72 -0
  312. package/dist/connectivity.js.map +7 -0
  313. package/dist/connectors/hooks.js +263 -0
  314. package/dist/connectors/hooks.js.map +7 -0
  315. package/dist/connectors/index.js +28 -0
  316. package/dist/connectors/index.js.map +7 -0
  317. package/dist/contacts.js +100 -0
  318. package/dist/contacts.js.map +7 -0
  319. package/dist/conversation-list.js +65 -0
  320. package/dist/conversation-list.js.map +7 -0
  321. package/dist/databases.js +195 -0
  322. package/dist/databases.js.map +7 -0
  323. package/dist/datasets/aggregate.js +281 -0
  324. package/dist/datasets/aggregate.js.map +7 -0
  325. package/dist/datasets/index.js +122 -0
  326. package/dist/datasets/index.js.map +7 -0
  327. package/dist/datasets/members.js +27 -0
  328. package/dist/datasets/members.js.map +7 -0
  329. package/dist/datasets/panel.js +44 -0
  330. package/dist/datasets/panel.js.map +7 -0
  331. package/dist/datasets/registry.js +47 -0
  332. package/dist/datasets/registry.js.map +7 -0
  333. package/dist/datasets/rows-source.js +44 -0
  334. package/dist/datasets/rows-source.js.map +7 -0
  335. package/dist/datasets/sources/activity.js +83 -0
  336. package/dist/datasets/sources/activity.js.map +7 -0
  337. package/dist/datasets/sources/conversations.js +74 -0
  338. package/dist/datasets/sources/conversations.js.map +7 -0
  339. package/dist/datasets/sources/database.js +209 -0
  340. package/dist/datasets/sources/database.js.map +7 -0
  341. package/dist/datasets/sources/documents.js +93 -0
  342. package/dist/datasets/sources/documents.js.map +7 -0
  343. package/dist/datasets/sources/facts.js +56 -0
  344. package/dist/datasets/sources/facts.js.map +7 -0
  345. package/dist/datasets/sources/projects.js +117 -0
  346. package/dist/datasets/sources/projects.js.map +7 -0
  347. package/dist/datasets/sources/tags.js +67 -0
  348. package/dist/datasets/sources/tags.js.map +7 -0
  349. package/dist/datasets/sources/usage.js +268 -0
  350. package/dist/datasets/sources/usage.js.map +7 -0
  351. package/dist/datasets/sources/workflows.js +91 -0
  352. package/dist/datasets/sources/workflows.js.map +7 -0
  353. package/dist/datasets/sources/workspaces.js +67 -0
  354. package/dist/datasets/sources/workspaces.js.map +7 -0
  355. package/dist/datasets/store.js +194 -0
  356. package/dist/datasets/store.js.map +7 -0
  357. package/dist/datasets/types.js +14 -0
  358. package/dist/datasets/types.js.map +7 -0
  359. package/dist/directmessages/ConversationList.js +148 -0
  360. package/dist/directmessages/ConversationList.js.map +7 -0
  361. package/dist/directmessages/DateSeparator.js +8 -0
  362. package/dist/directmessages/DateSeparator.js.map +7 -0
  363. package/dist/directmessages/DmAvatar.js +29 -0
  364. package/dist/directmessages/DmAvatar.js.map +7 -0
  365. package/dist/directmessages/DmComposer.js +201 -0
  366. package/dist/directmessages/DmComposer.js.map +7 -0
  367. package/dist/directmessages/arrivals.js +29 -0
  368. package/dist/directmessages/arrivals.js.map +7 -0
  369. package/dist/directmessages/chat-cache.js +192 -0
  370. package/dist/directmessages/chat-cache.js.map +7 -0
  371. package/dist/directmessages/grouping.js +26 -0
  372. package/dist/directmessages/grouping.js.map +7 -0
  373. package/dist/directmessages/index.js +81 -0
  374. package/dist/directmessages/index.js.map +7 -0
  375. package/dist/directmessages/useChats.js +266 -0
  376. package/dist/directmessages/useChats.js.map +7 -0
  377. package/dist/directmessages/utils.js +23 -0
  378. package/dist/directmessages/utils.js.map +7 -0
  379. package/dist/document-tools/can-annotate.js +7 -0
  380. package/dist/document-tools/can-annotate.js.map +7 -0
  381. package/dist/document-tools/core.cjs +80 -80
  382. package/dist/document-tools/core.js +218 -12
  383. package/dist/document-tools/core.js.map +7 -1
  384. package/dist/document-tools/document-pdf.js +76 -0
  385. package/dist/document-tools/document-pdf.js.map +7 -0
  386. package/dist/document-tools/environment.js +136 -0
  387. package/dist/document-tools/environment.js.map +7 -0
  388. package/dist/document-tools/file-shares.js +112 -0
  389. package/dist/document-tools/file-shares.js.map +7 -0
  390. package/dist/document-tools/frozen-copy.js +27 -0
  391. package/dist/document-tools/frozen-copy.js.map +7 -0
  392. package/dist/document-tools/index.cjs +80 -80
  393. package/dist/document-tools/index.js +26 -148
  394. package/dist/document-tools/index.js.map +7 -1
  395. package/dist/document-tools/markup-download.js +51 -0
  396. package/dist/document-tools/markup-download.js.map +7 -0
  397. package/dist/document-tools/markup-store.js +138 -0
  398. package/dist/document-tools/markup-store.js.map +7 -0
  399. package/dist/document-tools/markup-transfer.js +88 -0
  400. package/dist/document-tools/markup-transfer.js.map +7 -0
  401. package/dist/document-tools/production.js +147 -0
  402. package/dist/document-tools/production.js.map +7 -0
  403. package/dist/document-tools/saved-signature.js +90 -0
  404. package/dist/document-tools/saved-signature.js.map +7 -0
  405. package/dist/document-tools/signature-requests.js +310 -0
  406. package/dist/document-tools/signature-requests.js.map +7 -0
  407. package/dist/document-tools/signing.js +127 -0
  408. package/dist/document-tools/signing.js.map +7 -0
  409. package/dist/document-tools/useDocumentBytes.js +38 -0
  410. package/dist/document-tools/useDocumentBytes.js.map +7 -0
  411. package/dist/document-tools/useDocumentMarkup.js +154 -0
  412. package/dist/document-tools/useDocumentMarkup.js.map +7 -0
  413. package/dist/document-tools/useIsOnline.js +13 -0
  414. package/dist/document-tools/useIsOnline.js.map +7 -0
  415. package/dist/document-tools/verification.js +60 -0
  416. package/dist/document-tools/verification.js.map +7 -0
  417. package/dist/documents/DocumentReview.js +220 -0
  418. package/dist/documents/DocumentReview.js.map +7 -0
  419. package/dist/documents/DraftTitleControls.js +41 -0
  420. package/dist/documents/DraftTitleControls.js.map +7 -0
  421. package/dist/documents/InlineMicButton.js +90 -0
  422. package/dist/documents/InlineMicButton.js.map +7 -0
  423. package/dist/documents/MicRecordingOverlay.js +29 -0
  424. package/dist/documents/MicRecordingOverlay.js.map +7 -0
  425. package/dist/documents/MicWaveformIndicator.js +68 -0
  426. package/dist/documents/MicWaveformIndicator.js.map +7 -0
  427. package/dist/documents/PhotoCapture.js +120 -0
  428. package/dist/documents/PhotoCapture.js.map +7 -0
  429. package/dist/documents/VideoCapture.js +129 -0
  430. package/dist/documents/VideoCapture.js.map +7 -0
  431. package/dist/documents/VoiceNoteRecorder.js +166 -0
  432. package/dist/documents/VoiceNoteRecorder.js.map +7 -0
  433. package/dist/documents/audio-segmenter.js +63 -0
  434. package/dist/documents/audio-segmenter.js.map +7 -0
  435. package/dist/documents/capture-frame.js +21 -0
  436. package/dist/documents/capture-frame.js.map +7 -0
  437. package/dist/documents/chunked-recorder.js +190 -0
  438. package/dist/documents/chunked-recorder.js.map +7 -0
  439. package/dist/documents/document-download.js +53 -0
  440. package/dist/documents/document-download.js.map +7 -0
  441. package/dist/documents/document-fields.js +109 -0
  442. package/dist/documents/document-fields.js.map +7 -0
  443. package/dist/documents/documents-cache.js +110 -0
  444. package/dist/documents/documents-cache.js.map +7 -0
  445. package/dist/documents/documents-data.js +128 -0
  446. package/dist/documents/documents-data.js.map +7 -0
  447. package/dist/documents/documents-loader.js +113 -0
  448. package/dist/documents/documents-loader.js.map +7 -0
  449. package/dist/documents/documents-writes.js +448 -0
  450. package/dist/documents/documents-writes.js.map +7 -0
  451. package/dist/documents/format-elapsed.js +10 -0
  452. package/dist/documents/format-elapsed.js.map +7 -0
  453. package/dist/documents/has-video-track.js +26 -0
  454. package/dist/documents/has-video-track.js.map +7 -0
  455. package/dist/documents/index.js +266 -0
  456. package/dist/documents/index.js.map +7 -0
  457. package/dist/documents/media-error.js +18 -0
  458. package/dist/documents/media-error.js.map +7 -0
  459. package/dist/documents/offline-documents.js +160 -0
  460. package/dist/documents/offline-documents.js.map +7 -0
  461. package/dist/documents/pending-sync.js +210 -0
  462. package/dist/documents/pending-sync.js.map +7 -0
  463. package/dist/documents/processing-live.js +122 -0
  464. package/dist/documents/processing-live.js.map +7 -0
  465. package/dist/documents/processing-order.js +59 -0
  466. package/dist/documents/processing-order.js.map +7 -0
  467. package/dist/documents/processing-settle.js +21 -0
  468. package/dist/documents/processing-settle.js.map +7 -0
  469. package/dist/documents/related-documents.js +133 -0
  470. package/dist/documents/related-documents.js.map +7 -0
  471. package/dist/documents/support.js +29 -0
  472. package/dist/documents/support.js.map +7 -0
  473. package/dist/documents/upload-files.js +169 -0
  474. package/dist/documents/upload-files.js.map +7 -0
  475. package/dist/documents/useAudioRecorder.js +315 -0
  476. package/dist/documents/useAudioRecorder.js.map +7 -0
  477. package/dist/documents/useCameraStream.js +35 -0
  478. package/dist/documents/useCameraStream.js.map +7 -0
  479. package/dist/documents/useDocumentThumbnails.js +71 -0
  480. package/dist/documents/useDocumentThumbnails.js.map +7 -0
  481. package/dist/documents/useDownloadDocuments.js +90 -0
  482. package/dist/documents/useDownloadDocuments.js.map +7 -0
  483. package/dist/documents/usePassageQuotes.js +37 -0
  484. package/dist/documents/usePassageQuotes.js.map +7 -0
  485. package/dist/documents/useUploadFiles.js +165 -0
  486. package/dist/documents/useUploadFiles.js.map +7 -0
  487. package/dist/documents/useUploadFromUrls.js +63 -0
  488. package/dist/documents/useUploadFromUrls.js.map +7 -0
  489. package/dist/documents/useVideoRecorder.js +62 -0
  490. package/dist/documents/useVideoRecorder.js.map +7 -0
  491. package/dist/entities/AgentMarkers.js +61 -0
  492. package/dist/entities/AgentMarkers.js.map +7 -0
  493. package/dist/entities/DocumentEntity.js +125 -0
  494. package/dist/entities/DocumentEntity.js.map +7 -0
  495. package/dist/entities/EntityPill.js +250 -0
  496. package/dist/entities/EntityPill.js.map +7 -0
  497. package/dist/entities/ProjectEntity.js +61 -0
  498. package/dist/entities/ProjectEntity.js.map +7 -0
  499. package/dist/entities/ShieldIcon.js +49 -0
  500. package/dist/entities/ShieldIcon.js.map +7 -0
  501. package/dist/entities/TagEntity.js +79 -0
  502. package/dist/entities/TagEntity.js.map +7 -0
  503. package/dist/entities/ThreadVisibilityIcon.js +15 -0
  504. package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
  505. package/dist/entities/UserEntity.js +211 -0
  506. package/dist/entities/UserEntity.js.map +7 -0
  507. package/dist/entities/VerifiedBadge.js +19 -0
  508. package/dist/entities/VerifiedBadge.js.map +7 -0
  509. package/dist/entities/agent-avatar-colors.js +26 -0
  510. package/dist/entities/agent-avatar-colors.js.map +7 -0
  511. package/dist/entities/colors.js +64 -0
  512. package/dist/entities/colors.js.map +7 -0
  513. package/dist/entities/file-type.js +151 -0
  514. package/dist/entities/file-type.js.map +7 -0
  515. package/dist/entities/index.js +100 -0
  516. package/dist/entities/index.js.map +7 -0
  517. package/dist/entities/media-type.js +61 -0
  518. package/dist/entities/media-type.js.map +7 -0
  519. package/dist/entities/registry.js +385 -0
  520. package/dist/entities/registry.js.map +7 -0
  521. package/dist/entities/status.js +43 -0
  522. package/dist/entities/status.js.map +7 -0
  523. package/dist/entities/tag-kinds.js +23 -0
  524. package/dist/entities/tag-kinds.js.map +7 -0
  525. package/dist/entities/tag-types.js +44 -0
  526. package/dist/entities/tag-types.js.map +7 -0
  527. package/dist/entities/vocabulary.js +12 -0
  528. package/dist/entities/vocabulary.js.map +7 -0
  529. package/dist/entity-extraction.js +25 -0
  530. package/dist/entity-extraction.js.map +7 -0
  531. package/dist/facts-search.js +57 -0
  532. package/dist/facts-search.js.map +7 -0
  533. package/dist/facts.js +69 -0
  534. package/dist/facts.js.map +7 -0
  535. package/dist/hooks.js +320 -0
  536. package/dist/hooks.js.map +7 -0
  537. package/dist/host/ArbiHost.js +24 -0
  538. package/dist/host/ArbiHost.js.map +7 -0
  539. package/dist/host/assistant-copy.js +54 -0
  540. package/dist/host/assistant-copy.js.map +7 -0
  541. package/dist/host/config.js +9 -0
  542. package/dist/host/config.js.map +7 -0
  543. package/dist/host/context.js +10 -0
  544. package/dist/host/context.js.map +7 -0
  545. package/dist/host/features.js +144 -0
  546. package/dist/host/features.js.map +7 -0
  547. package/dist/host/index.js +12 -0
  548. package/dist/host/index.js.map +7 -0
  549. package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
  550. package/dist/host/merge.js.map +7 -0
  551. package/dist/house-template.js +40 -0
  552. package/dist/house-template.js.map +7 -0
  553. package/dist/icons/AppleIcon.js +25 -0
  554. package/dist/icons/AppleIcon.js.map +7 -0
  555. package/dist/icons/ArbiBotHeadIcon.js +46 -0
  556. package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
  557. package/dist/icons/ArbiIcon.js +24 -0
  558. package/dist/icons/ArbiIcon.js.map +7 -0
  559. package/dist/icons/AudIcon.js +56 -0
  560. package/dist/icons/AudIcon.js.map +7 -0
  561. package/dist/icons/ClaudeIcon.js +28 -0
  562. package/dist/icons/ClaudeIcon.js.map +7 -0
  563. package/dist/icons/DocIcon.js +56 -0
  564. package/dist/icons/DocIcon.js.map +7 -0
  565. package/dist/icons/EmlIcon.js +57 -0
  566. package/dist/icons/EmlIcon.js.map +7 -0
  567. package/dist/icons/FireworksIcon.js +47 -0
  568. package/dist/icons/FireworksIcon.js.map +7 -0
  569. package/dist/icons/GeminiIcon.js +37 -0
  570. package/dist/icons/GeminiIcon.js.map +7 -0
  571. package/dist/icons/GitHubIcon.js +32 -0
  572. package/dist/icons/GitHubIcon.js.map +7 -0
  573. package/dist/icons/GoogleIcon.js +53 -0
  574. package/dist/icons/GoogleIcon.js.map +7 -0
  575. package/dist/icons/HtmlIcon.js +56 -0
  576. package/dist/icons/HtmlIcon.js.map +7 -0
  577. package/dist/icons/ImgIcon.js +56 -0
  578. package/dist/icons/ImgIcon.js.map +7 -0
  579. package/dist/icons/LinkedInIcon.js +25 -0
  580. package/dist/icons/LinkedInIcon.js.map +7 -0
  581. package/dist/icons/OpenAIIcon.js +28 -0
  582. package/dist/icons/OpenAIIcon.js.map +7 -0
  583. package/dist/icons/PdfIcon.js +56 -0
  584. package/dist/icons/PdfIcon.js.map +7 -0
  585. package/dist/icons/ProviderIcon.js +42 -0
  586. package/dist/icons/ProviderIcon.js.map +7 -0
  587. package/dist/icons/TxtIcon.js +56 -0
  588. package/dist/icons/TxtIcon.js.map +7 -0
  589. package/dist/icons/VidIcon.js +56 -0
  590. package/dist/icons/VidIcon.js.map +7 -0
  591. package/dist/icons/XlsIcon.js +56 -0
  592. package/dist/icons/XlsIcon.js.map +7 -0
  593. package/dist/icons/arbi-mark.js +5 -0
  594. package/dist/icons/arbi-mark.js.map +7 -0
  595. package/dist/icons/colors.js +31 -0
  596. package/dist/icons/colors.js.map +7 -0
  597. package/dist/icons/file-type.js +105 -0
  598. package/dist/icons/file-type.js.map +7 -0
  599. package/dist/icons/index.js +55 -0
  600. package/dist/icons/index.js.map +7 -0
  601. package/dist/imagecrop/ImageCropModal.js +56 -0
  602. package/dist/imagecrop/ImageCropModal.js.map +7 -0
  603. package/dist/imagecrop/ImageCropper.js +100 -0
  604. package/dist/imagecrop/ImageCropper.js.map +7 -0
  605. package/dist/imagecrop/cropImage.js +43 -0
  606. package/dist/imagecrop/cropImage.js.map +7 -0
  607. package/dist/imagecrop/index.js +13 -0
  608. package/dist/imagecrop/index.js.map +7 -0
  609. package/dist/index.cjs +282 -282
  610. package/dist/index.js +702 -17116
  611. package/dist/index.js.map +7 -1
  612. package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
  613. package/dist/lazy-chunk.js.map +7 -0
  614. package/dist/lib/collision-padding.js +13 -0
  615. package/dist/lib/collision-padding.js.map +7 -0
  616. package/dist/lib/format-friendly-date.js +55 -0
  617. package/dist/lib/format-friendly-date.js.map +7 -0
  618. package/dist/lib/format-relative-time.js +52 -0
  619. package/dist/lib/format-relative-time.js.map +7 -0
  620. package/dist/lib/markdown-to-text.js +35 -0
  621. package/dist/lib/markdown-to-text.js.map +7 -0
  622. package/dist/lib/toast-interaction.js +9 -0
  623. package/dist/lib/toast-interaction.js.map +7 -0
  624. package/dist/lib/utils.js +9 -0
  625. package/dist/lib/utils.js.map +7 -0
  626. package/dist/mail/client.js +103 -0
  627. package/dist/mail/client.js.map +7 -0
  628. package/dist/mail/document-attachment.js +38 -0
  629. package/dist/mail/document-attachment.js.map +7 -0
  630. package/dist/mail/filing.js +132 -0
  631. package/dist/mail/filing.js.map +7 -0
  632. package/dist/mail/hooks.js +393 -0
  633. package/dist/mail/hooks.js.map +7 -0
  634. package/dist/mail/index.js +120 -0
  635. package/dist/mail/index.js.map +7 -0
  636. package/dist/mail/offline/changes.js +258 -0
  637. package/dist/mail/offline/changes.js.map +7 -0
  638. package/dist/mail/offline/confirm-sign-out.js +37 -0
  639. package/dist/mail/offline/confirm-sign-out.js.map +7 -0
  640. package/dist/mail/offline/crypto.js +26 -0
  641. package/dist/mail/offline/crypto.js.map +7 -0
  642. package/dist/mail/offline/drafts.js +69 -0
  643. package/dist/mail/offline/drafts.js.map +7 -0
  644. package/dist/mail/offline/hooks.js +104 -0
  645. package/dist/mail/offline/hooks.js.map +7 -0
  646. package/dist/mail/offline/index.js +48 -0
  647. package/dist/mail/offline/index.js.map +7 -0
  648. package/dist/mail/offline/live.js +233 -0
  649. package/dist/mail/offline/live.js.map +7 -0
  650. package/dist/mail/offline/mailbox.js +191 -0
  651. package/dist/mail/offline/mailbox.js.map +7 -0
  652. package/dist/mail/offline/outbox.js +167 -0
  653. package/dist/mail/offline/outbox.js.map +7 -0
  654. package/dist/mail/offline/reads.js +159 -0
  655. package/dist/mail/offline/reads.js.map +7 -0
  656. package/dist/mail/offline/runtime.js +100 -0
  657. package/dist/mail/offline/runtime.js.map +7 -0
  658. package/dist/mail/offline/settings.js +84 -0
  659. package/dist/mail/offline/settings.js.map +7 -0
  660. package/dist/mail/offline/store.js +29 -0
  661. package/dist/mail/offline/store.js.map +7 -0
  662. package/dist/mail/offline/sync.js +251 -0
  663. package/dist/mail/offline/sync.js.map +7 -0
  664. package/dist/mail/offline/wipe.js +19 -0
  665. package/dist/mail/offline/wipe.js.map +7 -0
  666. package/dist/mail/thread-keys.js +53 -0
  667. package/dist/mail/thread-keys.js.map +7 -0
  668. package/dist/mail/threads.js +71 -0
  669. package/dist/mail/threads.js.map +7 -0
  670. package/dist/mail/useMailClient.js +42 -0
  671. package/dist/mail/useMailClient.js.map +7 -0
  672. package/dist/model-connections.js +58 -0
  673. package/dist/model-connections.js.map +7 -0
  674. package/dist/notifications/ActivityFeed.js +70 -0
  675. package/dist/notifications/ActivityFeed.js.map +7 -0
  676. package/dist/notifications/NotificationBell.js +200 -0
  677. package/dist/notifications/NotificationBell.js.map +7 -0
  678. package/dist/notifications/Toaster.js +24 -0
  679. package/dist/notifications/Toaster.js.map +7 -0
  680. package/dist/notifications/activity-types.js +65 -0
  681. package/dist/notifications/activity-types.js.map +7 -0
  682. package/dist/notifications/bell.js +24 -0
  683. package/dist/notifications/bell.js.map +7 -0
  684. package/dist/notifications/calendar-notifications.js +79 -0
  685. package/dist/notifications/calendar-notifications.js.map +7 -0
  686. package/dist/notifications/index.js +108 -0
  687. package/dist/notifications/index.js.map +7 -0
  688. package/dist/notifications/live.js +28 -0
  689. package/dist/notifications/live.js.map +7 -0
  690. package/dist/notifications/notification-types.js +127 -0
  691. package/dist/notifications/notification-types.js.map +7 -0
  692. package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
  693. package/dist/notifications/notify-store.js.map +7 -0
  694. package/dist/notifications/server-notifications.js +452 -0
  695. package/dist/notifications/server-notifications.js.map +7 -0
  696. package/dist/notifications/useNotifications.js +34 -0
  697. package/dist/notifications/useNotifications.js.map +7 -0
  698. package/dist/offline-store/network.js +11 -0
  699. package/dist/offline-store/network.js.map +7 -0
  700. package/dist/offline-store/store.js +136 -0
  701. package/dist/offline-store/store.js.map +7 -0
  702. package/dist/offline-store/wipe.js +8 -0
  703. package/dist/offline-store/wipe.js.map +7 -0
  704. package/dist/offline.js +58 -0
  705. package/dist/offline.js.map +7 -0
  706. package/dist/people.js +122 -0
  707. package/dist/people.js.map +7 -0
  708. package/dist/projects.js +30 -0
  709. package/dist/projects.js.map +7 -0
  710. package/dist/query-client.js +63 -0
  711. package/dist/query-client.js.map +7 -0
  712. package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
  713. package/dist/query-keys.js.map +7 -0
  714. package/dist/query-persist.js +66 -0
  715. package/dist/query-persist.js.map +7 -0
  716. package/dist/queued-writes.js +59 -0
  717. package/dist/queued-writes.js.map +7 -0
  718. package/dist/remote-control.js +67 -0
  719. package/dist/remote-control.js.map +7 -0
  720. package/dist/search/index.js +23 -0
  721. package/dist/search/index.js.map +7 -0
  722. package/dist/search/session.js +58 -0
  723. package/dist/search/session.js.map +7 -0
  724. package/dist/search/useSemanticSearch.js +82 -0
  725. package/dist/search/useSemanticSearch.js.map +7 -0
  726. package/dist/session/chat.js +512 -0
  727. package/dist/session/chat.js.map +7 -0
  728. package/dist/session/documents.js +196 -0
  729. package/dist/session/documents.js.map +7 -0
  730. package/dist/session/drafts.js +103 -0
  731. package/dist/session/drafts.js.map +7 -0
  732. package/dist/session/index.js +123 -0
  733. package/dist/session/index.js.map +7 -0
  734. package/dist/session/layout.js +339 -0
  735. package/dist/session/layout.js.map +7 -0
  736. package/dist/session/persist.js +106 -0
  737. package/dist/session/persist.js.map +7 -0
  738. package/dist/session/session-hooks.js +53 -0
  739. package/dist/session/session-hooks.js.map +7 -0
  740. package/dist/session/signed-in.js +36 -0
  741. package/dist/session/signed-in.js.map +7 -0
  742. package/dist/session/store.js +166 -0
  743. package/dist/session/store.js.map +7 -0
  744. package/dist/session/thread-tabs.js +121 -0
  745. package/dist/session/thread-tabs.js.map +7 -0
  746. package/dist/session/ui-state-storage.js +76 -0
  747. package/dist/session/ui-state-storage.js.map +7 -0
  748. package/dist/session/workspace.js +77 -0
  749. package/dist/session/workspace.js.map +7 -0
  750. package/dist/shell/index.cjs +37 -37
  751. package/dist/shell/index.js +43 -10
  752. package/dist/shell/index.js.map +7 -1
  753. package/dist/skill-pack.js +111 -0
  754. package/dist/skill-pack.js.map +7 -0
  755. package/dist/storage.js +186 -0
  756. package/dist/storage.js.map +7 -0
  757. package/dist/support/index.js +35 -0
  758. package/dist/support/index.js.map +7 -0
  759. package/dist/tags.js +204 -0
  760. package/dist/tags.js.map +7 -0
  761. package/dist/ui/DebouncedInput.js +109 -0
  762. package/dist/ui/DebouncedInput.js.map +7 -0
  763. package/dist/ui/DictateContext.js +8 -0
  764. package/dist/ui/DictateContext.js.map +7 -0
  765. package/dist/ui/IconToggle.js +79 -0
  766. package/dist/ui/IconToggle.js.map +7 -0
  767. package/dist/ui/VerifiedToggle.js +38 -0
  768. package/dist/ui/VerifiedToggle.js.map +7 -0
  769. package/dist/ui/VisibilityToggle.js +103 -0
  770. package/dist/ui/VisibilityToggle.js.map +7 -0
  771. package/dist/ui/avatar.js +40 -0
  772. package/dist/ui/avatar.js.map +7 -0
  773. package/dist/ui/badge.js +28 -0
  774. package/dist/ui/badge.js.map +7 -0
  775. package/dist/ui/button.js +48 -0
  776. package/dist/ui/button.js.map +7 -0
  777. package/dist/ui/card.js +90 -0
  778. package/dist/ui/card.js.map +7 -0
  779. package/dist/ui/checkbox.js +22 -0
  780. package/dist/ui/checkbox.js.map +7 -0
  781. package/dist/ui/collapsible.js +10 -0
  782. package/dist/ui/collapsible.js.map +7 -0
  783. package/dist/ui/command.js +103 -0
  784. package/dist/ui/command.js.map +7 -0
  785. package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
  786. package/dist/ui/dialog.js.map +7 -0
  787. package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
  788. package/dist/ui/dropdown-menu.js.map +7 -0
  789. package/dist/ui/hover-card.js +36 -0
  790. package/dist/ui/hover-card.js.map +7 -0
  791. package/dist/ui/index.cjs +154 -154
  792. package/dist/ui/index.js +290 -10
  793. package/dist/ui/index.js.map +7 -1
  794. package/dist/ui/input.js +65 -0
  795. package/dist/ui/input.js.map +7 -0
  796. package/dist/ui/label.js +16 -0
  797. package/dist/ui/label.js.map +7 -0
  798. package/dist/ui/mark-menu.js +300 -0
  799. package/dist/ui/mark-menu.js.map +7 -0
  800. package/dist/ui/popover.js +40 -0
  801. package/dist/ui/popover.js.map +7 -0
  802. package/dist/ui/portal-container.js +17 -0
  803. package/dist/ui/portal-container.js.map +7 -0
  804. package/dist/ui/progress.js +24 -0
  805. package/dist/ui/progress.js.map +7 -0
  806. package/dist/ui/radio-group.js +29 -0
  807. package/dist/ui/radio-group.js.map +7 -0
  808. package/dist/ui/scroll-area.js +39 -0
  809. package/dist/ui/scroll-area.js.map +7 -0
  810. package/dist/ui/select.js +130 -0
  811. package/dist/ui/select.js.map +7 -0
  812. package/dist/ui/separator.js +23 -0
  813. package/dist/ui/separator.js.map +7 -0
  814. package/dist/ui/slider.js +23 -0
  815. package/dist/ui/slider.js.map +7 -0
  816. package/dist/ui/switch.js +28 -0
  817. package/dist/ui/switch.js.map +7 -0
  818. package/dist/ui/table.js +75 -0
  819. package/dist/ui/table.js.map +7 -0
  820. package/dist/ui/tabs.js +48 -0
  821. package/dist/ui/tabs.js.map +7 -0
  822. package/dist/ui/textarea.js +63 -0
  823. package/dist/ui/textarea.js.map +7 -0
  824. package/dist/ui/toggle-group.js +43 -0
  825. package/dist/ui/toggle-group.js.map +7 -0
  826. package/dist/ui/toggle.js +40 -0
  827. package/dist/ui/toggle.js.map +7 -0
  828. package/dist/ui/tooltip.js +215 -0
  829. package/dist/ui/tooltip.js.map +7 -0
  830. package/dist/usage-metered.js +8 -0
  831. package/dist/usage-metered.js.map +7 -0
  832. package/dist/useArbi.js +16 -0
  833. package/dist/useArbi.js.map +7 -0
  834. package/dist/useInstallSkillPack.js +81 -0
  835. package/dist/useInstallSkillPack.js.map +7 -0
  836. package/dist/usermenu/UserMenu.js +188 -0
  837. package/dist/usermenu/UserMenu.js.map +7 -0
  838. package/dist/usermenu/index.js +5 -0
  839. package/dist/usermenu/index.js.map +7 -0
  840. package/dist/users/index.js +15 -0
  841. package/dist/users/index.js.map +7 -0
  842. package/dist/users/user-display.js +60 -0
  843. package/dist/users/user-display.js.map +7 -0
  844. package/dist/viewers/AudioViewer.js +23 -0
  845. package/dist/viewers/AudioViewer.js.map +7 -0
  846. package/dist/viewers/DocxViewer.js +81 -0
  847. package/dist/viewers/DocxViewer.js.map +7 -0
  848. package/dist/viewers/ImageViewer.js +31 -0
  849. package/dist/viewers/ImageViewer.js.map +7 -0
  850. package/dist/viewers/PdfViewer.js +19 -3
  851. package/dist/viewers/PdfViewer.js.map +7 -1
  852. package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
  853. package/dist/viewers/PdfViewerImpl.js.map +7 -0
  854. package/dist/viewers/VideoViewer.js +31 -0
  855. package/dist/viewers/VideoViewer.js.map +7 -0
  856. package/dist/viewers/XlsxViewer.js +102 -0
  857. package/dist/viewers/XlsxViewer.js.map +7 -0
  858. package/dist/viewers/index.js +61 -271
  859. package/dist/viewers/index.js.map +7 -1
  860. package/dist/viewers/page-scroll.js +59 -0
  861. package/dist/viewers/page-scroll.js.map +7 -0
  862. package/dist/viewers/pdf-viewer-constants.js +9 -0
  863. package/dist/viewers/pdf-viewer-constants.js.map +7 -0
  864. package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
  865. package/dist/viewers/pdfjs-polyfills.js.map +7 -0
  866. package/dist/viewers/selection-runs.js +38 -0
  867. package/dist/viewers/selection-runs.js.map +7 -0
  868. package/dist/viewers/usePageIntersectionObserver.js +68 -0
  869. package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
  870. package/dist/viewers/useProcessedChunks.js +58 -0
  871. package/dist/viewers/useProcessedChunks.js.map +7 -0
  872. package/dist/viewers/viewer-zoom.js +163 -0
  873. package/dist/viewers/viewer-zoom.js.map +7 -0
  874. package/dist/websocket/ArbiWebSocketProvider.js +207 -0
  875. package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
  876. package/dist/websocket/context.js +14 -0
  877. package/dist/websocket/context.js.map +7 -0
  878. package/dist/websocket/hooks.js +30 -0
  879. package/dist/websocket/hooks.js.map +7 -0
  880. package/dist/websocket/index.js +22 -0
  881. package/dist/websocket/index.js.map +7 -0
  882. package/dist/websocket/live-updates.js +38 -0
  883. package/dist/websocket/live-updates.js.map +7 -0
  884. package/dist/websocket/reconnect.js +13 -0
  885. package/dist/websocket/reconnect.js.map +7 -0
  886. package/dist/websocket/store.js +58 -0
  887. package/dist/websocket/store.js.map +7 -0
  888. package/dist/workforce.js +607 -0
  889. package/dist/workforce.js.map +7 -0
  890. package/dist/workspaces/access-request.js +35 -0
  891. package/dist/workspaces/access-request.js.map +7 -0
  892. package/dist/workspaces/archive.js +59 -0
  893. package/dist/workspaces/archive.js.map +7 -0
  894. package/dist/workspaces/current.js +20 -0
  895. package/dist/workspaces/current.js.map +7 -0
  896. package/dist/workspaces/delete-workspaces.js +15 -0
  897. package/dist/workspaces/delete-workspaces.js.map +7 -0
  898. package/dist/workspaces/export-archive.js +40 -0
  899. package/dist/workspaces/export-archive.js.map +7 -0
  900. package/dist/workspaces/index.js +99 -0
  901. package/dist/workspaces/index.js.map +7 -0
  902. package/dist/workspaces/settings.js +45 -0
  903. package/dist/workspaces/settings.js.map +7 -0
  904. package/dist/workspaces/shell-workspaces.js +49 -0
  905. package/dist/workspaces/shell-workspaces.js.map +7 -0
  906. package/dist/workspaces/switch.js +234 -0
  907. package/dist/workspaces/switch.js.map +7 -0
  908. package/dist/workspaces/transfer.js +170 -0
  909. package/dist/workspaces/transfer.js.map +7 -0
  910. package/dist/workspaces/useShellWorkspaces.js +86 -0
  911. package/dist/workspaces/useShellWorkspaces.js.map +7 -0
  912. package/dist/workspaces/workspace-users.js +65 -0
  913. package/dist/workspaces/workspace-users.js.map +7 -0
  914. package/package.json +4 -4
  915. package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
  916. package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
  917. package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
  918. package/dist/annotations/freeze/index.d.cts +0 -205
  919. package/dist/annotations/index.d.cts +0 -360
  920. package/dist/artifacts/index.d.cts +0 -476
  921. package/dist/artifacts/redline-core.d.cts +0 -39
  922. package/dist/bundle-YNOX7VIL.js +0 -5
  923. package/dist/bundle-YNOX7VIL.js.map +0 -1
  924. package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
  925. package/dist/calls/livekit/index.d.cts +0 -280
  926. package/dist/chunk-47CCGUWR.js.map +0 -1
  927. package/dist/chunk-4FL3X3LA.js +0 -2057
  928. package/dist/chunk-4FL3X3LA.js.map +0 -1
  929. package/dist/chunk-6QNBSXCE.js +0 -271
  930. package/dist/chunk-6QNBSXCE.js.map +0 -1
  931. package/dist/chunk-74N436VK.js.map +0 -1
  932. package/dist/chunk-APZZQZ6P.js +0 -147
  933. package/dist/chunk-APZZQZ6P.js.map +0 -1
  934. package/dist/chunk-BF5KW5ZI.js.map +0 -1
  935. package/dist/chunk-DPYBZDJB.js.map +0 -1
  936. package/dist/chunk-DZKRL5H3.js +0 -2766
  937. package/dist/chunk-DZKRL5H3.js.map +0 -1
  938. package/dist/chunk-HDCRPPBW.js +0 -75
  939. package/dist/chunk-HDCRPPBW.js.map +0 -1
  940. package/dist/chunk-L2IPPTVC.js +0 -20
  941. package/dist/chunk-L2IPPTVC.js.map +0 -1
  942. package/dist/chunk-LSU4UPS5.js +0 -1011
  943. package/dist/chunk-LSU4UPS5.js.map +0 -1
  944. package/dist/chunk-NIKPG4PW.js +0 -1128
  945. package/dist/chunk-NIKPG4PW.js.map +0 -1
  946. package/dist/chunk-NNAJLY6B.js +0 -4974
  947. package/dist/chunk-NNAJLY6B.js.map +0 -1
  948. package/dist/chunk-OYPKKHXY.js +0 -559
  949. package/dist/chunk-OYPKKHXY.js.map +0 -1
  950. package/dist/chunk-PTOP7OHG.js.map +0 -1
  951. package/dist/chunk-QMY2JKBI.js +0 -246
  952. package/dist/chunk-QMY2JKBI.js.map +0 -1
  953. package/dist/chunk-SN5YV6FF.js +0 -11
  954. package/dist/chunk-SN5YV6FF.js.map +0 -1
  955. package/dist/chunk-SSXFVWCT.js.map +0 -1
  956. package/dist/chunk-T3USOSVN.js.map +0 -1
  957. package/dist/chunk-T4CLW3DN.js +0 -2560
  958. package/dist/chunk-T4CLW3DN.js.map +0 -1
  959. package/dist/chunk-UW2SGTI5.js.map +0 -1
  960. package/dist/chunk-VSCU7K4V.js.map +0 -1
  961. package/dist/chunk-WL2Y2T47.js.map +0 -1
  962. package/dist/chunk-WUTL62MC.js.map +0 -1
  963. package/dist/chunk-XWPLOFDN.js +0 -644
  964. package/dist/chunk-XWPLOFDN.js.map +0 -1
  965. package/dist/chunk-Y3MTRA7D.js +0 -97
  966. package/dist/chunk-Y3MTRA7D.js.map +0 -1
  967. package/dist/chunk-YNNAJJ5Z.js.map +0 -1
  968. package/dist/chunk-ZM6N7YZH.js.map +0 -1
  969. package/dist/document-tools/core.d.cts +0 -883
  970. package/dist/document-tools/index.d.cts +0 -90
  971. package/dist/index.d-LArLnpI8.d.cts +0 -2036
  972. package/dist/index.d-oR5FKZpJ.d.cts +0 -579
  973. package/dist/index.d.cts +0 -15923
  974. package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
  975. package/dist/model.d-CNtRWKVK.d.cts +0 -110
  976. package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
  977. package/dist/shell/index.d.cts +0 -6
  978. package/dist/store.d-GADDvC7w.d.cts +0 -35
  979. package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
  980. package/dist/ui/index.d.cts +0 -26
  981. package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
  982. package/dist/viewers/PdfViewer.d.cts +0 -9
  983. package/dist/viewers/index.d.cts +0 -262
@@ -0,0 +1,270 @@
1
+ import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
2
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { identityErrorCode } from "@arbidocs/sdk/browser";
4
+ import { useAccountClient } from "./client.js";
5
+ import { arbiQueryKeys } from "../hooks.js";
6
+ import { mountDiditVerification } from "./didit.js";
7
+ function problemOf(error, fallback) {
8
+ const code = identityErrorCode(error) ?? error?.code;
9
+ const message = error instanceof Error && error.message ? error.message : fallback;
10
+ return { code: typeof code === "string" ? code : void 0, message };
11
+ }
12
+ function identityStepFor(status) {
13
+ if (!status) return "pay";
14
+ if (["name_mismatch", "in_review", "verified"].includes(status.state)) return "result";
15
+ if (status.state === "declined") return status.attempts_left > 0 ? "result" : "pay";
16
+ if (status.state === "in_progress" || status.attempts_left > 0) return "verify";
17
+ return "pay";
18
+ }
19
+ function formatIdentityPrice(status) {
20
+ let amount;
21
+ try {
22
+ amount = new Intl.NumberFormat("en-GB", {
23
+ style: "currency",
24
+ currency: status.currency
25
+ }).format(status.price_pence / 100);
26
+ } catch {
27
+ amount = `${(status.price_pence / 100).toFixed(2)} ${status.currency}`;
28
+ }
29
+ return `${amount} incl. VAT`;
30
+ }
31
+ function useIdentityVerificationFlow(api, {
32
+ enabled = true,
33
+ onVerifiedChange,
34
+ onNameAccepted,
35
+ formatPrice = formatIdentityPrice
36
+ } = {}) {
37
+ const qc = useQueryClient();
38
+ const apiRef = useRef(api);
39
+ apiRef.current = api;
40
+ const query = useQuery({
41
+ queryKey: arbiQueryKeys.identity(),
42
+ queryFn: () => apiRef.current.status(),
43
+ enabled,
44
+ staleTime: 6e4
45
+ });
46
+ const status = query.data;
47
+ const [isOpen, setIsOpen] = useState(false);
48
+ const [step, setStep] = useState("pay");
49
+ const [busy, setBusy] = useState(null);
50
+ const [problem, setProblem] = useState(null);
51
+ const [paymentUrl, setPaymentUrl] = useState(null);
52
+ const [sessionUrl, setSessionUrl] = useState(null);
53
+ const [container, setContainer] = useState(null);
54
+ const [embedFailed, setEmbedFailed] = useState(false);
55
+ const verifyContainerId = `didit-${useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
56
+ const lastVerified = useRef(void 0);
57
+ const apply = useCallback(
58
+ (next) => {
59
+ qc.setQueryData(arbiQueryKeys.identity(), next);
60
+ if (lastVerified.current !== void 0 && lastVerified.current !== next.verified) {
61
+ onVerifiedChange?.(next.verified);
62
+ }
63
+ lastVerified.current = next.verified;
64
+ return next;
65
+ },
66
+ [qc, onVerifiedChange]
67
+ );
68
+ useEffect(() => {
69
+ if (status && lastVerified.current === void 0) lastVerified.current = status.verified;
70
+ }, [status]);
71
+ const run = useCallback(
72
+ async (kind, fallback, fn) => {
73
+ setBusy(kind);
74
+ setProblem(null);
75
+ try {
76
+ return await fn();
77
+ } catch (e) {
78
+ setProblem(problemOf(e, fallback));
79
+ return void 0;
80
+ } finally {
81
+ setBusy(null);
82
+ }
83
+ },
84
+ []
85
+ );
86
+ const isOpenRef = useRef(false);
87
+ const closeRef = useRef(() => {
88
+ });
89
+ const startVerifyRef = useRef(async () => {
90
+ });
91
+ const refresh = useCallback(async () => {
92
+ const next = await run(
93
+ "refresh",
94
+ "Could not read the verification result",
95
+ () => apiRef.current.refresh()
96
+ );
97
+ if (!next) return;
98
+ apply(next);
99
+ if (next.state === "in_progress") return;
100
+ setSessionUrl(null);
101
+ const nextStep = next.state === "declined" ? "result" : identityStepFor(next);
102
+ if (nextStep === "verify" && isOpenRef.current) void startVerifyRef.current();
103
+ else setStep(nextStep);
104
+ }, [run, apply]);
105
+ const refreshedOnLoad = useRef(false);
106
+ useEffect(() => {
107
+ if (refreshedOnLoad.current || !status) return;
108
+ refreshedOnLoad.current = true;
109
+ if (status.state === "in_progress" || status.state === "in_review") void refresh();
110
+ }, [status, refresh]);
111
+ const startVerify = useCallback(async () => {
112
+ setStep("verify");
113
+ setEmbedFailed(false);
114
+ const url = await run(
115
+ "start",
116
+ "Could not start identity verification",
117
+ () => apiRef.current.startSession()
118
+ );
119
+ if (url) {
120
+ setSessionUrl(url);
121
+ return;
122
+ }
123
+ setStep("pay");
124
+ }, [run]);
125
+ startVerifyRef.current = startVerify;
126
+ useEffect(() => {
127
+ if (!isOpen || step !== "verify" || !sessionUrl || !container || embedFailed) return;
128
+ let teardown;
129
+ let cancelled = false;
130
+ mountDiditVerification({
131
+ url: sessionUrl,
132
+ containerId: container.id,
133
+ onResult: (result) => {
134
+ if (result.type === "failed" && result.error?.type === "cameraAccessDenied") {
135
+ setEmbedFailed(true);
136
+ return;
137
+ }
138
+ if (result.type === "cancelled") {
139
+ closeRef.current();
140
+ return;
141
+ }
142
+ void refresh();
143
+ }
144
+ }).then((stop) => {
145
+ if (cancelled) stop();
146
+ else teardown = stop;
147
+ }).catch(() => setEmbedFailed(true));
148
+ return () => {
149
+ cancelled = true;
150
+ teardown?.();
151
+ };
152
+ }, [isOpen, step, sessionUrl, container, embedFailed, refresh]);
153
+ const [waitingInTab, setWaitingInTab] = useState(false);
154
+ useEffect(() => {
155
+ if (!waitingInTab || typeof window === "undefined") return;
156
+ const onFocus = () => void refresh();
157
+ window.addEventListener("focus", onFocus);
158
+ return () => window.removeEventListener("focus", onFocus);
159
+ }, [waitingInTab, refresh]);
160
+ const open = useCallback(() => {
161
+ isOpenRef.current = true;
162
+ setProblem(null);
163
+ setPaymentUrl(status?.pending_payment_url ?? null);
164
+ const first = identityStepFor(status);
165
+ setStep(first);
166
+ setIsOpen(true);
167
+ if (first === "verify") void startVerify();
168
+ }, [status, startVerify]);
169
+ const close = useCallback(() => {
170
+ isOpenRef.current = false;
171
+ setIsOpen(false);
172
+ setSessionUrl(null);
173
+ setWaitingInTab(false);
174
+ setEmbedFailed(false);
175
+ setProblem(null);
176
+ }, []);
177
+ closeRef.current = close;
178
+ const pay = useCallback(async () => {
179
+ const result = await run(
180
+ "pay",
181
+ "Payment could not be completed",
182
+ () => apiRef.current.purchase()
183
+ );
184
+ if (!result) return;
185
+ if (result.status === "requires_action") {
186
+ setPaymentUrl(result.payment_url ?? null);
187
+ return;
188
+ }
189
+ setPaymentUrl(null);
190
+ void query.refetch();
191
+ void startVerify();
192
+ }, [run, query, startVerify]);
193
+ const acceptName = useCallback(async () => {
194
+ const offered = status;
195
+ const next = await run(
196
+ "accept",
197
+ "Could not change your name",
198
+ () => apiRef.current.acceptName()
199
+ );
200
+ if (!next) return;
201
+ apply(next);
202
+ if (offered?.document_given_name) {
203
+ onNameAccepted?.({
204
+ givenName: offered.document_given_name,
205
+ familyName: offered.document_family_name ?? null
206
+ });
207
+ }
208
+ }, [run, apply, status, onNameAccepted]);
209
+ const remove = useCallback(async () => {
210
+ const next = await run(
211
+ "remove",
212
+ "Could not remove the verification",
213
+ () => apiRef.current.remove()
214
+ );
215
+ if (next) apply(next);
216
+ }, [run, apply]);
217
+ const price = useMemo(() => status ? formatPrice(status) : null, [status, formatPrice]);
218
+ return {
219
+ status,
220
+ isLoading: query.isLoading,
221
+ price,
222
+ isOpen,
223
+ open,
224
+ close,
225
+ step,
226
+ busy,
227
+ problem,
228
+ paymentUrl,
229
+ pay: () => void pay(),
230
+ recheckPayment: () => void startVerify(),
231
+ verifyContainerId,
232
+ verifyContainerRef: setContainer,
233
+ embedFailed,
234
+ openInNewTab: () => {
235
+ if (!sessionUrl || typeof window === "undefined") return;
236
+ window.open(sessionUrl, "_blank", "noopener");
237
+ setWaitingInTab(true);
238
+ },
239
+ checkResult: () => void refresh(),
240
+ retry: () => void startVerify(),
241
+ acceptName: () => void acceptName(),
242
+ keepName: close,
243
+ remove: () => void remove()
244
+ };
245
+ }
246
+ function useIdentityVerification(options = {}) {
247
+ const { client, enabled } = useAccountClient();
248
+ const qc = useQueryClient();
249
+ const { onVerifiedChange, onNameAccepted, formatPrice } = options;
250
+ return useIdentityVerificationFlow(client.identity, {
251
+ enabled,
252
+ formatPrice,
253
+ onVerifiedChange: (verified) => {
254
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() });
255
+ onVerifiedChange?.(verified);
256
+ },
257
+ onNameAccepted: (name) => {
258
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() });
259
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
260
+ onNameAccepted?.(name);
261
+ }
262
+ });
263
+ }
264
+ export {
265
+ formatIdentityPrice,
266
+ identityStepFor,
267
+ useIdentityVerification,
268
+ useIdentityVerificationFlow
269
+ };
270
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/identity.ts"],
4
+ "sourcesContent": ["/**\n * Identity verification: the optional, paid ID check behind the verified tick (Pro plans only).\n *\n * Two layers, like `profile.ts`. `useIdentityVerificationFlow` owns the dialog's state and takes\n * the backend calls as functions, so an app with its own API layer (ARBI-frontend) binds the same\n * `IdentityVerificationCard` / `IdentityVerificationDialog` blocks without a provider.\n * `useIdentityVerification` binds it to the SDK (`arbi.identity`).\n *\n * Steps: pay the one-time fee (charged to the user's Pro project card) \u2192 verify inside Didit's\n * embedded frame \u2192 result (verified, declined, in review, or the name on the document differs from\n * the account name, offered as the new name). No webhooks: completing Didit's flow calls `refresh`.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { identityErrorCode } from '@arbidocs/sdk/browser'\nimport { useAccountClient } from './client'\nimport { arbiQueryKeys } from '../hooks'\nimport { mountDiditVerification } from './didit'\nimport type {\n IdentityBusy,\n IdentityProblem,\n IdentityPurchase,\n IdentityStatus,\n IdentityStep,\n IdentityVerificationFlow,\n} from './identity-types'\n\nexport type {\n IdentityBusy,\n IdentityProblem,\n IdentityPurchase,\n IdentityState,\n IdentityStatus,\n IdentityStep,\n IdentityVerificationFlow,\n} from './identity-types'\n\n/** The backend calls of the flow, as functions (see the module comment). */\nexport interface IdentityVerificationApi {\n status: () => Promise<IdentityStatus>\n purchase: () => Promise<IdentityPurchase>\n /** The Didit session URL. */\n startSession: () => Promise<string>\n refresh: () => Promise<IdentityStatus>\n acceptName: () => Promise<IdentityStatus>\n remove: () => Promise<IdentityStatus>\n}\n\nexport interface UseIdentityVerificationFlowOptions {\n /** Load the status (default true; e.g. false while signed out). */\n enabled?: boolean\n /** The tick changed (granted, renamed away, removed): update the host's copy of the user. */\n onVerifiedChange?: (verified: boolean) => void\n /** The account name became the name on the document. */\n onNameAccepted?: (name: { givenName: string; familyName: string | null }) => void\n /** The host's price format (e.g. its billing helpers); default `formatIdentityPrice`. */\n formatPrice?: (status: IdentityStatus) => string\n}\n\nfunction problemOf(error: unknown, fallback: string): IdentityProblem {\n const code = identityErrorCode(error) ?? (error as { code?: unknown } | null)?.code\n const message = error instanceof Error && error.message ? error.message : fallback\n return { code: typeof code === 'string' ? code : undefined, message }\n}\n\n/** Which step the dialog opens on for a status. */\nexport function identityStepFor(status: IdentityStatus | undefined): IdentityStep {\n if (!status) return 'pay'\n if (['name_mismatch', 'in_review', 'verified'].includes(status.state)) return 'result'\n if (status.state === 'declined') return status.attempts_left > 0 ? 'result' : 'pay'\n if (status.state === 'in_progress' || status.attempts_left > 0) return 'verify'\n return 'pay'\n}\n\n/** \"\u00A35.00 incl. VAT\": the fee is quoted including UK VAT. */\nexport function formatIdentityPrice(status: IdentityStatus): string {\n let amount: string\n try {\n amount = new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: status.currency,\n }).format(status.price_pence / 100)\n } catch {\n amount = `${(status.price_pence / 100).toFixed(2)} ${status.currency}`\n }\n return `${amount} incl. VAT`\n}\n\n/** The identity verification dialog's state, bound to the backend calls in `api`. */\nexport function useIdentityVerificationFlow(\n api: IdentityVerificationApi,\n {\n enabled = true,\n onVerifiedChange,\n onNameAccepted,\n formatPrice = formatIdentityPrice,\n }: UseIdentityVerificationFlowOptions = {}\n): IdentityVerificationFlow {\n const qc = useQueryClient()\n const apiRef = useRef(api)\n apiRef.current = api\n const query = useQuery({\n queryKey: arbiQueryKeys.identity(),\n queryFn: () => apiRef.current.status(),\n enabled,\n staleTime: 60_000,\n })\n const status = query.data\n\n const [isOpen, setIsOpen] = useState(false)\n const [step, setStep] = useState<IdentityStep>('pay')\n const [busy, setBusy] = useState<IdentityBusy>(null)\n const [problem, setProblem] = useState<IdentityProblem | null>(null)\n const [paymentUrl, setPaymentUrl] = useState<string | null>(null)\n const [sessionUrl, setSessionUrl] = useState<string | null>(null)\n const [container, setContainer] = useState<HTMLElement | null>(null)\n const [embedFailed, setEmbedFailed] = useState(false)\n const verifyContainerId = `didit-${useId().replace(/[^a-zA-Z0-9_-]/g, '')}`\n\n const lastVerified = useRef<boolean | undefined>(undefined)\n const apply = useCallback(\n (next: IdentityStatus) => {\n qc.setQueryData(arbiQueryKeys.identity(), next)\n if (lastVerified.current !== undefined && lastVerified.current !== next.verified) {\n onVerifiedChange?.(next.verified)\n }\n lastVerified.current = next.verified\n return next\n },\n [qc, onVerifiedChange]\n )\n useEffect(() => {\n if (status && lastVerified.current === undefined) lastVerified.current = status.verified\n }, [status])\n\n const run = useCallback(\n async <T>(kind: Exclude<IdentityBusy, null>, fallback: string, fn: () => Promise<T>) => {\n setBusy(kind)\n setProblem(null)\n try {\n return await fn()\n } catch (e) {\n setProblem(problemOf(e, fallback))\n return undefined\n } finally {\n setBusy(null)\n }\n },\n []\n )\n\n const isOpenRef = useRef(false)\n const closeRef = useRef<() => void>(() => {})\n const startVerifyRef = useRef<() => Promise<void>>(async () => {})\n\n const refresh = useCallback(async () => {\n const next = await run('refresh', 'Could not read the verification result', () =>\n apiRef.current.refresh()\n )\n if (!next) return\n apply(next)\n if (next.state === 'in_progress') return\n setSessionUrl(null)\n const nextStep = next.state === 'declined' ? 'result' : identityStepFor(next)\n // An abandoned or expired session (state none, attempts left): open a fresh one.\n if (nextStep === 'verify' && isOpenRef.current) void startVerifyRef.current()\n else setStep(nextStep)\n }, [run, apply])\n\n // A check left open (closed tab, reload, manual review): ask for its result once on load.\n const refreshedOnLoad = useRef(false)\n useEffect(() => {\n if (refreshedOnLoad.current || !status) return\n refreshedOnLoad.current = true\n if (status.state === 'in_progress' || status.state === 'in_review') void refresh()\n }, [status, refresh])\n\n const startVerify = useCallback(async () => {\n setStep('verify')\n setEmbedFailed(false)\n const url = await run('start', 'Could not start identity verification', () =>\n apiRef.current.startSession()\n )\n if (url) {\n setSessionUrl(url)\n return\n }\n // Still unpaid (a 3-D Secure payment not confirmed yet): back to the payment step.\n setStep('pay')\n }, [run])\n startVerifyRef.current = startVerify\n\n // Mount Didit once the session is open and its host element is on screen.\n useEffect(() => {\n if (!isOpen || step !== 'verify' || !sessionUrl || !container || embedFailed) return\n let teardown: (() => void) | undefined\n let cancelled = false\n mountDiditVerification({\n url: sessionUrl,\n containerId: container.id,\n onResult: (result) => {\n if (result.type === 'failed' && result.error?.type === 'cameraAccessDenied') {\n setEmbedFailed(true)\n return\n }\n if (result.type === 'cancelled') {\n closeRef.current()\n return\n }\n void refresh()\n },\n })\n .then((stop) => {\n if (cancelled) stop()\n else teardown = stop\n })\n .catch(() => setEmbedFailed(true))\n return () => {\n cancelled = true\n teardown?.()\n }\n }, [isOpen, step, sessionUrl, container, embedFailed, refresh])\n\n // Verifying in another tab: look for the result when the user comes back.\n const [waitingInTab, setWaitingInTab] = useState(false)\n useEffect(() => {\n if (!waitingInTab || typeof window === 'undefined') return\n const onFocus = () => void refresh()\n window.addEventListener('focus', onFocus)\n return () => window.removeEventListener('focus', onFocus)\n }, [waitingInTab, refresh])\n\n const open = useCallback(() => {\n isOpenRef.current = true\n setProblem(null)\n setPaymentUrl(status?.pending_payment_url ?? null)\n const first = identityStepFor(status)\n setStep(first)\n setIsOpen(true)\n if (first === 'verify') void startVerify()\n }, [status, startVerify])\n\n const close = useCallback(() => {\n isOpenRef.current = false\n setIsOpen(false)\n setSessionUrl(null)\n setWaitingInTab(false)\n setEmbedFailed(false)\n setProblem(null)\n }, [])\n closeRef.current = close\n\n const pay = useCallback(async () => {\n const result = await run('pay', 'Payment could not be completed', () =>\n apiRef.current.purchase()\n )\n if (!result) return\n if (result.status === 'requires_action') {\n setPaymentUrl(result.payment_url ?? null)\n return\n }\n setPaymentUrl(null)\n void query.refetch()\n void startVerify()\n }, [run, query, startVerify])\n\n const acceptName = useCallback(async () => {\n const offered = status\n const next = await run('accept', 'Could not change your name', () =>\n apiRef.current.acceptName()\n )\n if (!next) return\n apply(next)\n if (offered?.document_given_name) {\n onNameAccepted?.({\n givenName: offered.document_given_name,\n familyName: offered.document_family_name ?? null,\n })\n }\n }, [run, apply, status, onNameAccepted])\n\n const remove = useCallback(async () => {\n const next = await run('remove', 'Could not remove the verification', () =>\n apiRef.current.remove()\n )\n if (next) apply(next)\n }, [run, apply])\n\n const price = useMemo(() => (status ? formatPrice(status) : null), [status, formatPrice])\n\n return {\n status,\n isLoading: query.isLoading,\n price,\n isOpen,\n open,\n close,\n step,\n busy,\n problem,\n paymentUrl,\n pay: () => void pay(),\n recheckPayment: () => void startVerify(),\n verifyContainerId,\n verifyContainerRef: setContainer,\n embedFailed,\n openInNewTab: () => {\n if (!sessionUrl || typeof window === 'undefined') return\n window.open(sessionUrl, '_blank', 'noopener')\n setWaitingInTab(true)\n },\n checkResult: () => void refresh(),\n retry: () => void startVerify(),\n acceptName: () => void acceptName(),\n keepName: close,\n remove: () => void remove(),\n }\n}\n\n// \u2500\u2500 Bound \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\u2500\u2500\u2500\u2500\n\n/**\n * The identity verification flow over the account client in scope; the profile query follows the\n * tick and name.\n */\nexport function useIdentityVerification(\n options: Omit<UseIdentityVerificationFlowOptions, 'enabled'> = {}\n): IdentityVerificationFlow {\n const { client, enabled } = useAccountClient()\n const qc = useQueryClient()\n const { onVerifiedChange, onNameAccepted, formatPrice } = options\n return useIdentityVerificationFlow(client.identity, {\n enabled,\n formatPrice,\n onVerifiedChange: (verified) => {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() })\n onVerifiedChange?.(verified)\n },\n onNameAccepted: (name) => {\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.profile() })\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n onNameAccepted?.(name)\n },\n })\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,93 @@
1
+ import {
2
+ useProfile,
3
+ useUpdateProfile,
4
+ toProfileView,
5
+ useNameEditor,
6
+ useAvatarCrop,
7
+ MAX_AVATAR_FILE_BYTES
8
+ } from "./profile.js";
9
+ import {
10
+ useRequestEmailChange,
11
+ useConfirmEmailChange,
12
+ useEmailChange
13
+ } from "./email.js";
14
+ import {
15
+ usePasswordChange,
16
+ usePasswordChangeForm,
17
+ DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES
18
+ } from "./password.js";
19
+ import { useUserSettings, useUpdateUserSettings } from "./settings.js";
20
+ import { useDismissedTips } from "./dismissed-tips.js";
21
+ import {
22
+ useNotificationPreferences,
23
+ toNotificationPreferences
24
+ } from "./notifications.js";
25
+ import {
26
+ useWorkspaceNotificationLevel,
27
+ useFollowThread
28
+ } from "./relevance.js";
29
+ import { useSessions, useTerminateSession, useSignOut, useCurrentSessionId } from "./sessions.js";
30
+ import {
31
+ arbiAccountClient,
32
+ useAccountClient
33
+ } from "./client.js";
34
+ import {
35
+ useDeleteAccount,
36
+ useDeleteAccountFlow,
37
+ parseDeleteAccountBlockers
38
+ } from "./delete.js";
39
+ import {
40
+ useIdentityVerification,
41
+ useIdentityVerificationFlow,
42
+ identityStepFor,
43
+ formatIdentityPrice
44
+ } from "./identity.js";
45
+ import { mountDiditVerification } from "./didit.js";
46
+ import { downloadRecoveryFile } from "./recovery.js";
47
+ import {
48
+ useEntitlements,
49
+ useInvalidateEntitlements,
50
+ useIsEntitled,
51
+ entitlementRefusal
52
+ } from "./entitlements.js";
53
+ export {
54
+ DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES,
55
+ MAX_AVATAR_FILE_BYTES,
56
+ arbiAccountClient,
57
+ downloadRecoveryFile,
58
+ entitlementRefusal,
59
+ formatIdentityPrice,
60
+ identityStepFor,
61
+ mountDiditVerification,
62
+ parseDeleteAccountBlockers,
63
+ toNotificationPreferences,
64
+ toProfileView,
65
+ useAccountClient,
66
+ useAvatarCrop,
67
+ useConfirmEmailChange,
68
+ useCurrentSessionId,
69
+ useDeleteAccount,
70
+ useDeleteAccountFlow,
71
+ useDismissedTips,
72
+ useEmailChange,
73
+ useEntitlements,
74
+ useFollowThread,
75
+ useIdentityVerification,
76
+ useIdentityVerificationFlow,
77
+ useInvalidateEntitlements,
78
+ useIsEntitled,
79
+ useNameEditor,
80
+ useNotificationPreferences,
81
+ usePasswordChange,
82
+ usePasswordChangeForm,
83
+ useProfile,
84
+ useRequestEmailChange,
85
+ useSessions,
86
+ useSignOut,
87
+ useTerminateSession,
88
+ useUpdateProfile,
89
+ useUpdateUserSettings,
90
+ useUserSettings,
91
+ useWorkspaceNotificationLevel
92
+ };
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/index.ts"],
4
+ "sourcesContent": ["export {\n useProfile,\n useUpdateProfile,\n toProfileView,\n useNameEditor,\n useAvatarCrop,\n MAX_AVATAR_FILE_BYTES,\n type ProfileView,\n type UpdateProfileVars,\n type UseNameEditorOptions,\n type NameEditor,\n type UseAvatarCropOptions,\n type AvatarCrop,\n type AvatarFileProblem,\n} from './profile'\nexport {\n useRequestEmailChange,\n useConfirmEmailChange,\n useEmailChange,\n type UseEmailChangeOptions,\n type EmailChange,\n} from './email'\nexport {\n usePasswordChange,\n usePasswordChangeForm,\n DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES,\n type PasswordChangeVars,\n type PasswordChangeFormMessages,\n type UsePasswordChangeFormOptions,\n type PasswordChangeForm,\n} from './password'\nexport { useUserSettings, useUpdateUserSettings, type UserSettingsPatch } from './settings'\nexport { useDismissedTips } from './dismissed-tips'\nexport {\n useNotificationPreferences,\n toNotificationPreferences,\n type EmailPreferences,\n type NotificationPreferencesModel,\n} from './notifications'\nexport {\n useWorkspaceNotificationLevel,\n useFollowThread,\n type WorkspaceNotificationLevel,\n type RelevancePatch,\n type FollowSaveCallbacks,\n} from './relevance'\nexport { useSessions, useTerminateSession, useSignOut, useCurrentSessionId } from './sessions'\nexport {\n arbiAccountClient,\n useAccountClient,\n type AccountClient,\n type AccountClientContextValue,\n type AccountSession,\n type AccountSignOutOptions,\n} from './client'\nexport {\n useDeleteAccount,\n useDeleteAccountFlow,\n parseDeleteAccountBlockers,\n type DeleteAccountBlocker,\n type UseDeleteAccountFlowOptions,\n type DeleteAccountFlow,\n} from './delete'\nexport {\n useIdentityVerification,\n useIdentityVerificationFlow,\n identityStepFor,\n formatIdentityPrice,\n type IdentityVerificationApi,\n type IdentityVerificationFlow,\n type UseIdentityVerificationFlowOptions,\n type IdentityStep,\n type IdentityBusy,\n type IdentityProblem,\n type IdentityStatus,\n type IdentityState,\n type IdentityPurchase,\n} from './identity'\nexport { mountDiditVerification, type MountDiditOptions } from './didit'\nexport { downloadRecoveryFile } from './recovery'\nexport {\n useEntitlements,\n useInvalidateEntitlements,\n useIsEntitled,\n entitlementRefusal,\n type FeatureEntitlements,\n type EntitledFeature,\n type FeatureRefusal,\n} from './entitlements'\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP,SAAS,iBAAiB,6BAAqD;AAC/E,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AACP,SAAS,aAAa,qBAAqB,YAAY,2BAA2B;AAClF;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAUK;AACP,SAAS,8BAAsD;AAC/D,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;",
6
+ "names": []
7
+ }
@@ -0,0 +1,59 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
3
+ import { useArbi } from "../useArbi.js";
4
+ import { arbiQueryKeys } from "../hooks.js";
5
+ import { useUserSettings } from "./settings.js";
6
+ function toNotificationPreferences(stored, keys) {
7
+ const checked = Object.fromEntries(keys.map((key) => [key, stored?.[key] ?? true]));
8
+ return {
9
+ masterChecked: keys.some((key) => checked[key]),
10
+ checked,
11
+ masterPatch: (value) => Object.fromEntries(keys.map((key) => [key, value])),
12
+ categoryPatch: (key, value) => ({ [key]: value })
13
+ };
14
+ }
15
+ function useNotificationPreferences(keys, options) {
16
+ const arbi = useArbi();
17
+ const qc = useQueryClient();
18
+ const settings = useUserSettings(options);
19
+ const stored = settings.data?.email_notifications;
20
+ const save = useMutation({
21
+ mutationFn: (patch) => arbi.settings.update({ email_notifications: patch }),
22
+ onMutate: async (patch) => {
23
+ await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() });
24
+ const previous = qc.getQueryData(arbiQueryKeys.userSettings());
25
+ qc.setQueryData(
26
+ arbiQueryKeys.userSettings(),
27
+ (old) => old ? { ...old, email_notifications: { ...old.email_notifications, ...patch } } : old
28
+ );
29
+ return { previous };
30
+ },
31
+ onError: (_err, _patch, context) => {
32
+ qc.setQueryData(arbiQueryKeys.userSettings(), context?.previous);
33
+ },
34
+ onSettled: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() })
35
+ });
36
+ const model = useMemo(() => toNotificationPreferences(stored, keys), [stored, keys]);
37
+ const setAll = useCallback(
38
+ (value) => save.mutate(model.masterPatch(value)),
39
+ [save, model]
40
+ );
41
+ const setCategory = useCallback(
42
+ (key, value) => save.mutate(model.categoryPatch(key, value)),
43
+ [save, model]
44
+ );
45
+ return {
46
+ ...model,
47
+ isLoading: settings.isLoading,
48
+ isSaving: save.isPending,
49
+ /** The master switch handler: every category on or off. */
50
+ setAll,
51
+ /** One category's handler. */
52
+ setCategory
53
+ };
54
+ }
55
+ export {
56
+ toNotificationPreferences,
57
+ useNotificationPreferences
58
+ };
59
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/notifications.ts"],
4
+ "sourcesContent": ["/**\n * Notification preferences: which email categories the user wants (the `email_notifications`\n * record of the user settings). All default on. The master switch on `NotificationCategoryList`\n * is \"on while at least one category is on\" and writes every category at once.\n */\n\nimport { useCallback, useMemo } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useArbi } from '../useArbi'\nimport { arbiQueryKeys } from '../hooks'\nimport { useUserSettings } from './settings'\n\n/** Category key to on/off, e.g. `{ messages: true, product_updates: false }`. */\nexport type EmailPreferences = Record<string, boolean>\n\n// \u2500\u2500 Pure core \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\nexport interface NotificationPreferencesModel {\n /** Master switch: on while at least one category is on. */\n masterChecked: boolean\n /** Each category's state (`true` when the record says nothing: the default). */\n checked: Record<string, boolean>\n /** The PATCH body for the master switch: every category set to `value`. */\n masterPatch: (value: boolean) => EmailPreferences\n /** The PATCH body for one category. */\n categoryPatch: (key: string, value: boolean) => EmailPreferences\n}\n\n/** Derive the switch states from the stored record and the list of category keys. */\nexport function toNotificationPreferences(\n stored: EmailPreferences | null | undefined,\n keys: readonly string[]\n): NotificationPreferencesModel {\n const checked = Object.fromEntries(keys.map((key) => [key, stored?.[key] ?? true]))\n return {\n masterChecked: keys.some((key) => checked[key]),\n checked,\n masterPatch: (value) => Object.fromEntries(keys.map((key) => [key, value])),\n categoryPatch: (key, value) => ({ [key]: value }),\n }\n}\n\n// \u2500\u2500 SDK-bound 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\n\n/**\n * The email notification preferences and the save. `save` writes the given keys (a patch,\n * merged by the server) and updates the cached settings straight away, so the switches do not\n * wait for the round trip; a failed write rolls back.\n */\nexport function useNotificationPreferences(\n keys: readonly string[],\n options?: { enabled?: boolean }\n) {\n const arbi = useArbi()\n const qc = useQueryClient()\n const settings = useUserSettings(options)\n const stored = settings.data?.email_notifications as EmailPreferences | undefined\n\n const save = useMutation({\n mutationFn: (patch: EmailPreferences) =>\n arbi.settings.update({ email_notifications: patch } as never),\n onMutate: async (patch) => {\n await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() })\n const previous = qc.getQueryData(arbiQueryKeys.userSettings())\n qc.setQueryData(arbiQueryKeys.userSettings(), (old: typeof settings.data) =>\n old ? { ...old, email_notifications: { ...old.email_notifications, ...patch } } : old\n )\n return { previous }\n },\n onError: (_err, _patch, context) => {\n qc.setQueryData(arbiQueryKeys.userSettings(), context?.previous)\n },\n onSettled: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() }),\n })\n\n const model = useMemo(() => toNotificationPreferences(stored, keys), [stored, keys])\n const setAll = useCallback(\n (value: boolean) => save.mutate(model.masterPatch(value)),\n [save, model]\n )\n const setCategory = useCallback(\n (key: string, value: boolean) => save.mutate(model.categoryPatch(key, value)),\n [save, model]\n )\n\n return {\n ...model,\n isLoading: settings.isLoading,\n isSaving: save.isPending,\n /** The master switch handler: every category on or off. */\n setAll,\n /** One category's handler. */\n setCategory,\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,aAAa,eAAe;AACrC,SAAS,aAAa,sBAAsB;AAC5C,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAmBzB,SAAS,0BACd,QACA,MAC8B;AAC9B,QAAM,UAAU,OAAO,YAAY,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;AAClF,SAAO;AAAA,IACL,eAAe,KAAK,KAAK,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAAA,IAC9C;AAAA,IACA,aAAa,CAAC,UAAU,OAAO,YAAY,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC;AAAA,IAC1E,eAAe,CAAC,KAAK,WAAW,EAAE,CAAC,GAAG,GAAG,MAAM;AAAA,EACjD;AACF;AASO,SAAS,2BACd,MACA,SACA;AACA,QAAM,OAAO,QAAQ;AACrB,QAAM,KAAK,eAAe;AAC1B,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,SAAS,SAAS,MAAM;AAE9B,QAAM,OAAO,YAAY;AAAA,IACvB,YAAY,CAAC,UACX,KAAK,SAAS,OAAO,EAAE,qBAAqB,MAAM,CAAU;AAAA,IAC9D,UAAU,OAAO,UAAU;AACzB,YAAM,GAAG,cAAc,EAAE,UAAU,cAAc,aAAa,EAAE,CAAC;AACjE,YAAM,WAAW,GAAG,aAAa,cAAc,aAAa,CAAC;AAC7D,SAAG;AAAA,QAAa,cAAc,aAAa;AAAA,QAAG,CAAC,QAC7C,MAAM,EAAE,GAAG,KAAK,qBAAqB,EAAE,GAAG,IAAI,qBAAqB,GAAG,MAAM,EAAE,IAAI;AAAA,MACpF;AACA,aAAO,EAAE,SAAS;AAAA,IACpB;AAAA,IACA,SAAS,CAAC,MAAM,QAAQ,YAAY;AAClC,SAAG,aAAa,cAAc,aAAa,GAAG,SAAS,QAAQ;AAAA,IACjE;AAAA,IACA,WAAW,MAAM,GAAG,kBAAkB,EAAE,UAAU,cAAc,aAAa,EAAE,CAAC;AAAA,EAClF,CAAC;AAED,QAAM,QAAQ,QAAQ,MAAM,0BAA0B,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC;AACnF,QAAM,SAAS;AAAA,IACb,CAAC,UAAmB,KAAK,OAAO,MAAM,YAAY,KAAK,CAAC;AAAA,IACxD,CAAC,MAAM,KAAK;AAAA,EACd;AACA,QAAM,cAAc;AAAA,IAClB,CAAC,KAAa,UAAmB,KAAK,OAAO,MAAM,cAAc,KAAK,KAAK,CAAC;AAAA,IAC5E,CAAC,MAAM,KAAK;AAAA,EACd;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,SAAS;AAAA,IACpB,UAAU,KAAK;AAAA;AAAA,IAEf;AAAA;AAAA,IAEA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,103 @@
1
+ import { useCallback, useMemo, useState } from "react";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { passwordChangeErrorMessage } from "@arbidocs/client";
4
+ import { useAccountClient } from "./client.js";
5
+ function usePasswordChange() {
6
+ const { client } = useAccountClient();
7
+ return useMutation({
8
+ mutationFn: (vars) => client.changePassword(vars)
9
+ });
10
+ }
11
+ const DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES = {
12
+ required: "All fields are required",
13
+ mismatch: "New passwords do not match",
14
+ sameAsCurrent: "New password must be different from current password",
15
+ wrongCurrent: "Current password is incorrect.",
16
+ wrongRecoveryKey: "Recovery key did not match this account. Try a different recovery file."
17
+ };
18
+ function usePasswordChangeForm({
19
+ recoveryMode = false,
20
+ getUnmetRequirement,
21
+ submit,
22
+ onClose,
23
+ onRecoveryComplete,
24
+ messages
25
+ }) {
26
+ const m = useMemo(() => ({ ...DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, ...messages }), [messages]);
27
+ const [currentPassword, setCurrentPassword] = useState("");
28
+ const [newPassword, setNewPassword] = useState("");
29
+ const [confirmPassword, setConfirmPassword] = useState("");
30
+ const [error, setError] = useState(null);
31
+ const [isProcessing, setIsProcessing] = useState(false);
32
+ const [isChanged, setIsChanged] = useState(false);
33
+ const clear = useCallback(() => {
34
+ setCurrentPassword("");
35
+ setNewPassword("");
36
+ setConfirmPassword("");
37
+ }, []);
38
+ const isSubmitDisabled = isProcessing || !recoveryMode && !currentPassword || !newPassword || !confirmPassword || getUnmetRequirement(newPassword) !== null || newPassword !== confirmPassword;
39
+ const onSubmit = useCallback(() => {
40
+ setError(null);
41
+ if (!recoveryMode && !currentPassword || !newPassword || !confirmPassword) {
42
+ return setError(m.required);
43
+ }
44
+ if (newPassword !== confirmPassword) return setError(m.mismatch);
45
+ const unmet = getUnmetRequirement(newPassword);
46
+ if (unmet !== null) return setError(unmet);
47
+ if (!recoveryMode && currentPassword === newPassword) return setError(m.sameAsCurrent);
48
+ setIsProcessing(true);
49
+ void submit({ newPassword, currentPassword: recoveryMode ? void 0 : currentPassword }).then(() => {
50
+ clear();
51
+ if (recoveryMode) {
52
+ onClose();
53
+ onRecoveryComplete?.();
54
+ } else {
55
+ setIsChanged(true);
56
+ }
57
+ }).catch((e) => {
58
+ const message = passwordChangeErrorMessage(e);
59
+ const wrongCurrent = /invalid signature|current password|401/i.test(message);
60
+ setError(wrongCurrent ? recoveryMode ? m.wrongRecoveryKey : m.wrongCurrent : message);
61
+ }).finally(() => setIsProcessing(false));
62
+ }, [
63
+ recoveryMode,
64
+ currentPassword,
65
+ newPassword,
66
+ confirmPassword,
67
+ getUnmetRequirement,
68
+ submit,
69
+ clear,
70
+ onClose,
71
+ onRecoveryComplete,
72
+ m
73
+ ]);
74
+ return {
75
+ currentPassword,
76
+ onCurrentPasswordChange: setCurrentPassword,
77
+ newPassword,
78
+ onNewPasswordChange: setNewPassword,
79
+ confirmPassword,
80
+ onConfirmPasswordChange: setConfirmPassword,
81
+ error,
82
+ isProcessing,
83
+ isSubmitDisabled,
84
+ onSubmit,
85
+ isChanged,
86
+ onCancel: () => {
87
+ clear();
88
+ setError(null);
89
+ setIsChanged(false);
90
+ onClose();
91
+ },
92
+ onDone: () => {
93
+ setIsChanged(false);
94
+ onClose();
95
+ }
96
+ };
97
+ }
98
+ export {
99
+ DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES,
100
+ usePasswordChange,
101
+ usePasswordChangeForm
102
+ };
103
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/password.ts"],
4
+ "sourcesContent": ["/**\n * Password change: a new master password for the same account identity.\n *\n * The password only wraps the identity keypair, so a change is one request that re-encrypts nothing\n * and leaves the recovery key as it was (see `Arbi.account.changePassword`). `usePasswordChange` is\n * the SDK-bound mutation. `usePasswordChangeForm` is the controller behind `PasswordChangeDialog`:\n * fields, validation, error wording and the success state. It takes the submit as a function, so an\n * app without an `arbi` in its host binds the same dialog.\n */\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { passwordChangeErrorMessage } from '@arbidocs/client'\nimport { useAccountClient } from './client'\n\n// \u2500\u2500 SDK-bound hook \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\nexport interface PasswordChangeVars {\n newPassword: string\n /** Omit in recovery mode (after signing in with a recovery key). */\n currentPassword?: string\n}\n\n/** Change (or, in recovery mode, set) the master password through the account client in scope. */\nexport function usePasswordChange() {\n const { client } = useAccountClient()\n return useMutation({\n mutationFn: (vars: PasswordChangeVars): Promise<void> => client.changePassword(vars),\n })\n}\n\n// \u2500\u2500 Controller (no SDK) \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\nexport interface PasswordChangeFormMessages {\n required: string\n mismatch: string\n sameAsCurrent: string\n wrongCurrent: string\n wrongRecoveryKey: string\n}\n\nexport const DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES: PasswordChangeFormMessages = {\n required: 'All fields are required',\n mismatch: 'New passwords do not match',\n sameAsCurrent: 'New password must be different from current password',\n wrongCurrent: 'Current password is incorrect.',\n wrongRecoveryKey: 'Recovery key did not match this account. Try a different recovery file.',\n}\n\nexport interface UsePasswordChangeFormOptions {\n /** After recovery with a key: no current password is asked for. */\n recoveryMode?: boolean\n /** The host's password policy: the first unmet requirement, or `null` when the password is fine. */\n getUnmetRequirement: (password: string) => string | null\n /** Do the change. */\n submit: (vars: PasswordChangeVars) => Promise<void>\n /** The dialog should close (cancel, or done). */\n onClose: () => void\n /** Recovery finished: continue into the app. Recovery closes itself, with no success screen. */\n onRecoveryComplete?: () => void\n messages?: Partial<PasswordChangeFormMessages>\n}\n\nexport interface PasswordChangeForm {\n currentPassword: string\n onCurrentPasswordChange: (value: string) => void\n newPassword: string\n onNewPasswordChange: (value: string) => void\n confirmPassword: string\n onConfirmPasswordChange: (value: string) => void\n error: string | null\n isProcessing: boolean\n isSubmitDisabled: boolean\n onSubmit: () => void\n /** The change went through (normal mode): the dialog shows its success state. */\n isChanged: boolean\n /** Cancel and clear the form. */\n onCancel: () => void\n /** Leave the success screen. */\n onDone: () => void\n}\n\n/** The state machine of `PasswordChangeDialog`; spread it into the dialog's props. */\nexport function usePasswordChangeForm({\n recoveryMode = false,\n getUnmetRequirement,\n submit,\n onClose,\n onRecoveryComplete,\n messages,\n}: UsePasswordChangeFormOptions): PasswordChangeForm {\n const m = useMemo(() => ({ ...DEFAULT_PASSWORD_CHANGE_FORM_MESSAGES, ...messages }), [messages])\n const [currentPassword, setCurrentPassword] = useState('')\n const [newPassword, setNewPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isProcessing, setIsProcessing] = useState(false)\n const [isChanged, setIsChanged] = useState(false)\n\n const clear = useCallback(() => {\n setCurrentPassword('')\n setNewPassword('')\n setConfirmPassword('')\n }, [])\n\n const isSubmitDisabled =\n isProcessing ||\n (!recoveryMode && !currentPassword) ||\n !newPassword ||\n !confirmPassword ||\n getUnmetRequirement(newPassword) !== null ||\n newPassword !== confirmPassword\n\n const onSubmit = useCallback(() => {\n setError(null)\n if ((!recoveryMode && !currentPassword) || !newPassword || !confirmPassword) {\n return setError(m.required)\n }\n if (newPassword !== confirmPassword) return setError(m.mismatch)\n const unmet = getUnmetRequirement(newPassword)\n if (unmet !== null) return setError(unmet)\n if (!recoveryMode && currentPassword === newPassword) return setError(m.sameAsCurrent)\n\n setIsProcessing(true)\n void submit({ newPassword, currentPassword: recoveryMode ? undefined : currentPassword })\n .then(() => {\n clear()\n if (recoveryMode) {\n onClose()\n onRecoveryComplete?.()\n } else {\n setIsChanged(true)\n }\n })\n .catch((e: unknown) => {\n const message = passwordChangeErrorMessage(e)\n const wrongCurrent = /invalid signature|current password|401/i.test(message)\n setError(wrongCurrent ? (recoveryMode ? m.wrongRecoveryKey : m.wrongCurrent) : message)\n })\n .finally(() => setIsProcessing(false))\n }, [\n recoveryMode,\n currentPassword,\n newPassword,\n confirmPassword,\n getUnmetRequirement,\n submit,\n clear,\n onClose,\n onRecoveryComplete,\n m,\n ])\n\n return {\n currentPassword,\n onCurrentPasswordChange: setCurrentPassword,\n newPassword,\n onNewPasswordChange: setNewPassword,\n confirmPassword,\n onConfirmPasswordChange: setConfirmPassword,\n error,\n isProcessing,\n isSubmitDisabled,\n onSubmit,\n isChanged,\n onCancel: () => {\n clear()\n setError(null)\n setIsChanged(false)\n onClose()\n },\n onDone: () => {\n setIsChanged(false)\n onClose()\n },\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }