@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,96 @@
1
+ import { useMemo } from "react";
2
+ import { useArbiHost } from "../host/config.js";
3
+ import { clearSealedDrafts } from "../session/drafts.js";
4
+ import { clearChatArtifacts } from "../chat/chat-artifacts.js";
5
+ import { wipeOfflineMail } from "../mail/offline/wipe.js";
6
+ import { toProfileView } from "./profile.js";
7
+ function arbiProfile(arbi) {
8
+ const profile = arbi.user.profile();
9
+ return profile ? toProfileView(profile) : null;
10
+ }
11
+ function arbiAccountClient(arbi, overrides = {}) {
12
+ return {
13
+ profile: () => arbiProfile(arbi),
14
+ onProfileChange: (listener) => arbi.user.onProfileChange(() => listener()),
15
+ updateProfile: async (vars) => {
16
+ await arbi.profile.update({
17
+ ...vars.givenName !== void 0 && { given_name: vars.givenName.trim() },
18
+ ...vars.familyName !== void 0 && { family_name: vars.familyName.trim() },
19
+ ...vars.picture !== void 0 && { picture: vars.picture }
20
+ });
21
+ },
22
+ requestEmailChange: (newEmail) => arbi.account.requestEmailChange(newEmail),
23
+ confirmEmailChange: async (newEmail, code) => {
24
+ await arbi.account.confirmEmailChange(newEmail, code);
25
+ },
26
+ changePassword: (vars) => arbi.account.changePassword(vars),
27
+ listSessions: () => arbi.sessions.list(),
28
+ currentSessionId: () => arbi.sessions.currentId(),
29
+ terminateSession: (sessionId) => arbi.sessions.terminate(sessionId),
30
+ signOut: async ({ everywhere } = {}) => {
31
+ try {
32
+ if (everywhere) await arbi.sessions.logoutAll();
33
+ else await arbi.logout();
34
+ } finally {
35
+ clearSealedDrafts();
36
+ clearChatArtifacts();
37
+ await wipeOfflineMail().catch(() => {
38
+ });
39
+ }
40
+ },
41
+ requestDeletion: () => arbi.account.requestDeletion(),
42
+ identity: {
43
+ status: () => arbi.identity.status(),
44
+ purchase: () => arbi.identity.purchase(),
45
+ startSession: () => arbi.identity.startSession(),
46
+ refresh: () => arbi.identity.refresh(),
47
+ acceptName: () => arbi.identity.acceptName(),
48
+ remove: () => arbi.identity.remove()
49
+ },
50
+ ...overrides
51
+ };
52
+ }
53
+ const NO_ACCOUNT_ERROR = "The account needs an <ArbiHost> with `account` or an `arbi`";
54
+ const refuse = () => Promise.reject(new Error(NO_ACCOUNT_ERROR));
55
+ const NO_ACCOUNT = {
56
+ client: {
57
+ profile: () => null,
58
+ onProfileChange: () => () => {
59
+ },
60
+ updateProfile: refuse,
61
+ requestEmailChange: refuse,
62
+ confirmEmailChange: refuse,
63
+ changePassword: refuse,
64
+ listSessions: refuse,
65
+ currentSessionId: () => null,
66
+ terminateSession: refuse,
67
+ signOut: refuse,
68
+ requestDeletion: refuse,
69
+ identity: {
70
+ status: refuse,
71
+ purchase: refuse,
72
+ startSession: refuse,
73
+ refresh: refuse,
74
+ acceptName: refuse,
75
+ remove: refuse
76
+ }
77
+ },
78
+ enabled: false
79
+ };
80
+ const ALWAYS = () => true;
81
+ function useAccountClient() {
82
+ const { account, arbi } = useArbiHost();
83
+ const fallback = useMemo(() => arbi ? arbiAccountClient(arbi) : null, [arbi]);
84
+ const useEnabled = account?.useEnabled ?? ALWAYS;
85
+ const enabled = useEnabled();
86
+ const client = account?.client;
87
+ const provided = useMemo(() => client ? { client, enabled } : null, [client, enabled]);
88
+ if (provided) return provided;
89
+ if (!arbi || !fallback) return NO_ACCOUNT;
90
+ return { client: fallback, enabled: arbi.isLoggedIn };
91
+ }
92
+ export {
93
+ arbiAccountClient,
94
+ useAccountClient
95
+ };
96
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/client.tsx"],
4
+ "sourcesContent": ["/**\n * The account client the account hooks and the settings blocks talk to.\n *\n * An {@link AccountClient} is the signed-in user's account: profile, email, password, sessions,\n * sign-out, deletion and the ID check. {@link arbiAccountClient} builds the default one from an\n * `Arbi` (used when the host configuration has no `account`). A host with its own session and API\n * client (ARBI-frontend) gives its own as the host configuration's `account`, as it does for `mail`.\n */\n\nimport { useMemo } from 'react'\nimport type { components } from '@arbidocs/client'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { useArbiHost } from '../host/config'\nimport { clearSealedDrafts } from '../session/drafts'\nimport { clearChatArtifacts } from '../chat/chat-artifacts'\nimport { wipeOfflineMail } from '../mail/offline/wipe'\nimport type { IdentityVerificationApi } from './identity'\nimport type { PasswordChangeVars } from './password'\nimport { toProfileView, type ProfileView, type UpdateProfileVars } from './profile'\n\nexport type AccountSession = components['schemas']['SessionInfoResponse']\n\nexport interface AccountSignOutOptions {\n /** End every session on the server first, this device's included. */\n everywhere?: boolean\n /** Why: a person's choice, or the account was just closed. */\n reason?: 'manual' | 'account-deleted'\n}\n\nexport interface AccountClient {\n /** The signed-in user's profile; `null` when there is none. */\n profile(): ProfileView | null\n /** Be told when {@link profile} changes. Returns the unsubscribe. */\n onProfileChange(listener: () => void): () => void\n /** Save the name and/or picture; the profile follows. */\n updateProfile(vars: UpdateProfileVars): Promise<void>\n /** Send the verification code to the new address (not for SSO accounts). */\n requestEmailChange(newEmail: string): Promise<void>\n /** Confirm the new address with the emailed code; the profile follows. */\n confirmEmailChange(newEmail: string, code: string): Promise<void>\n /** Change (or, in recovery mode, set) the master password. */\n changePassword(vars: PasswordChangeVars): Promise<void>\n /** Available only when the deployment permits local sign-in. */\n requestSsoDisconnectCode?(newEmail: string): Promise<void>\n disconnectSso?(vars: { newEmail: string; code?: string; password: string }): Promise<void>\n listSessions(): Promise<AccountSession[]>\n /** The id this device's session is listed under, or `null`. */\n currentSessionId(): string | null\n /** End one of the user's sessions at once (not this device's: that is {@link signOut}). */\n terminateSession(sessionId: string): Promise<void>\n /** Sign this device out of the host (and, `everywhere`, every other session first). */\n signOut(options?: AccountSignOutOptions): Promise<void>\n /** Close the account. Rejects with the backend's refusal when something blocks it. */\n requestDeletion(): Promise<unknown>\n /** The ID check behind the verified tick. */\n identity: IdentityVerificationApi\n}\n\nexport interface AccountClientContextValue {\n client: AccountClient\n /** Account reads run only while this is true (signed in). */\n enabled: boolean\n}\n\nfunction arbiProfile(arbi: Arbi): ProfileView | null {\n const profile = arbi.user.profile()\n return profile ? toProfileView(profile) : null\n}\n\n/**\n * The account client over an `Arbi`. `overrides` replace any of its calls: a host that keeps its\n * own signed-in state passes `signOut` (and `profile`) so the SDK and the host stay in step.\n */\nexport function arbiAccountClient(\n arbi: Arbi,\n overrides: Partial<AccountClient> = {}\n): AccountClient {\n return {\n profile: () => arbiProfile(arbi),\n onProfileChange: (listener) => arbi.user.onProfileChange(() => listener()),\n updateProfile: async (vars) => {\n await arbi.profile.update({\n ...(vars.givenName !== undefined && { given_name: vars.givenName.trim() }),\n ...(vars.familyName !== undefined && { family_name: vars.familyName.trim() }),\n ...(vars.picture !== undefined && { picture: vars.picture }),\n })\n },\n requestEmailChange: (newEmail) => arbi.account.requestEmailChange(newEmail),\n confirmEmailChange: async (newEmail, code) => {\n await arbi.account.confirmEmailChange(newEmail, code)\n },\n changePassword: (vars) => arbi.account.changePassword(vars),\n listSessions: () => arbi.sessions.list(),\n currentSessionId: () => arbi.sessions.currentId(),\n terminateSession: (sessionId) => arbi.sessions.terminate(sessionId),\n signOut: async ({ everywhere } = {}) => {\n try {\n if (everywhere) await arbi.sessions.logoutAll()\n else await arbi.logout()\n } finally {\n // The drafts and mail kept on the device never outlive the session.\n clearSealedDrafts()\n clearChatArtifacts()\n await wipeOfflineMail().catch(() => {})\n }\n },\n requestDeletion: () => arbi.account.requestDeletion(),\n identity: {\n status: () => arbi.identity.status(),\n purchase: () => arbi.identity.purchase(),\n startSession: () => arbi.identity.startSession(),\n refresh: () => arbi.identity.refresh(),\n acceptName: () => arbi.identity.acceptName(),\n remove: () => arbi.identity.remove(),\n },\n ...overrides,\n }\n}\n\nconst NO_ACCOUNT_ERROR = 'The account needs an <ArbiHost> with `account` or an `arbi`'\nconst refuse = () => Promise.reject(new Error(NO_ACCOUNT_ERROR))\n\nconst NO_ACCOUNT: AccountClientContextValue = {\n client: {\n profile: () => null,\n onProfileChange: () => () => {},\n updateProfile: refuse,\n requestEmailChange: refuse,\n confirmEmailChange: refuse,\n changePassword: refuse,\n listSessions: refuse,\n currentSessionId: () => null,\n terminateSession: refuse,\n signOut: refuse,\n requestDeletion: refuse,\n identity: {\n status: refuse,\n purchase: refuse,\n startSession: refuse,\n refresh: refuse,\n acceptName: refuse,\n remove: refuse,\n },\n },\n enabled: false,\n}\n\nconst ALWAYS = () => true\n\n/**\n * The account client in scope: the host configuration's `account`, else one on its `arbi` session\n * (`arbiAccountClient`).\n */\nexport function useAccountClient(): AccountClientContextValue {\n const { account, arbi } = useArbiHost()\n const fallback = useMemo(() => (arbi ? arbiAccountClient(arbi) : null), [arbi])\n // The host's hook is fixed for its configuration's life.\n const useEnabled = account?.useEnabled ?? ALWAYS\n const enabled = useEnabled()\n const client = account?.client\n const provided = useMemo(() => (client ? { client, enabled } : null), [client, enabled])\n if (provided) return provided\n // Neither: reads stay off and writes are refused rather than breaking the screen.\n if (!arbi || !fallback) return NO_ACCOUNT\n return { client: fallback, enabled: arbi.isLoggedIn }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,70 @@
1
+ import { useCallback, useState } from "react";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { useAccountClient } from "./client.js";
4
+ function parseDeleteAccountBlockers(error) {
5
+ const body = error?.apiError ?? error;
6
+ const detail = body?.detail;
7
+ if (detail === "active_subscription") return [{ type: "active_subscription" }];
8
+ if (detail && typeof detail === "object") {
9
+ const d = detail;
10
+ if (d.reason === "workspace_members" && Array.isArray(d.workspaces)) {
11
+ return [{ type: "workspace_members", workspaces: d.workspaces.map(String) }];
12
+ }
13
+ }
14
+ return [];
15
+ }
16
+ function useDeleteAccount() {
17
+ const { client } = useAccountClient();
18
+ return useMutation({ mutationFn: () => client.requestDeletion() });
19
+ }
20
+ function useDeleteAccountFlow({
21
+ userEmail,
22
+ remove,
23
+ onClose,
24
+ onDeleted,
25
+ onError
26
+ }) {
27
+ const [step, setStep] = useState("warning");
28
+ const [confirmEmail, setConfirmEmail] = useState("");
29
+ const [blockers, setBlockers] = useState([]);
30
+ const [isDeleting, setIsDeleting] = useState(false);
31
+ const close = useCallback(() => {
32
+ setStep("warning");
33
+ setConfirmEmail("");
34
+ setBlockers([]);
35
+ onClose();
36
+ }, [onClose]);
37
+ const onSubmit = useCallback(() => {
38
+ if (confirmEmail.toLowerCase() !== userEmail.toLowerCase()) return;
39
+ setIsDeleting(true);
40
+ void Promise.resolve().then(remove).then(() => {
41
+ close();
42
+ onDeleted();
43
+ }).catch((error) => {
44
+ const found = parseDeleteAccountBlockers(error);
45
+ if (found.length > 0) {
46
+ setBlockers(found);
47
+ setStep("warning");
48
+ } else {
49
+ onError?.(error);
50
+ }
51
+ }).finally(() => setIsDeleting(false));
52
+ }, [confirmEmail, userEmail, remove, close, onDeleted, onError]);
53
+ return {
54
+ step,
55
+ blockers,
56
+ confirmEmail,
57
+ onConfirmEmailChange: setConfirmEmail,
58
+ onContinue: () => setStep("confirm"),
59
+ onBack: () => setStep("warning"),
60
+ isDeleting,
61
+ onSubmit,
62
+ onClose: close
63
+ };
64
+ }
65
+ export {
66
+ parseDeleteAccountBlockers,
67
+ useDeleteAccount,
68
+ useDeleteAccountFlow
69
+ };
70
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/delete.ts"],
4
+ "sourcesContent": ["/**\n * Delete account: the two-step flow behind `DeleteAccountDialog` and the backend's refusals.\n * The backend closes the account (soft delete) unless the user still has an active subscription\n * or is the sole admin of a workspace with other members; the refusal names which.\n */\n\nimport { useCallback, useState } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { useAccountClient } from './client'\n\n/** Why an account cannot be closed yet. */\nexport type DeleteAccountBlocker =\n { type: 'active_subscription' } | { type: 'workspace_members'; workspaces: string[] }\n\n/** Read the blockers out of a failed deletion; an empty list means it failed for another reason. */\nexport function parseDeleteAccountBlockers(error: unknown): DeleteAccountBlocker[] {\n const body = (error as { apiError?: unknown } | null)?.apiError ?? error\n const detail = (body as { detail?: unknown } | null)?.detail\n if (detail === 'active_subscription') return [{ type: 'active_subscription' }]\n if (detail && typeof detail === 'object') {\n const d = detail as { reason?: unknown; workspaces?: unknown }\n if (d.reason === 'workspace_members' && Array.isArray(d.workspaces)) {\n return [{ type: 'workspace_members', workspaces: d.workspaces.map(String) }]\n }\n }\n return []\n}\n\n/** Close the account (the account client in scope). The caller signs out afterwards. */\nexport function useDeleteAccount() {\n const { client } = useAccountClient()\n return useMutation({ mutationFn: () => client.requestDeletion() })\n}\n\nexport interface UseDeleteAccountFlowOptions {\n userEmail: string\n /** Close the account. Reject with the backend's error to surface blockers. */\n remove: () => Promise<unknown> | unknown\n /** The dialog should close. */\n onClose: () => void\n /** The account is closed (sign the user out of the app). */\n onDeleted: () => void\n /** A failure that is not a blocker. */\n onError?: (error: unknown) => void\n}\n\nexport interface DeleteAccountFlow {\n step: 'warning' | 'confirm'\n blockers: DeleteAccountBlocker[]\n confirmEmail: string\n onConfirmEmailChange: (value: string) => void\n onContinue: () => void\n onBack: () => void\n isDeleting: boolean\n onSubmit: () => void\n onClose: () => void\n}\n\n/** Step, typed-email confirmation and blockers of `DeleteAccountDialog`. */\nexport function useDeleteAccountFlow({\n userEmail,\n remove,\n onClose,\n onDeleted,\n onError,\n}: UseDeleteAccountFlowOptions): DeleteAccountFlow {\n const [step, setStep] = useState<'warning' | 'confirm'>('warning')\n const [confirmEmail, setConfirmEmail] = useState('')\n const [blockers, setBlockers] = useState<DeleteAccountBlocker[]>([])\n const [isDeleting, setIsDeleting] = useState(false)\n\n const close = useCallback(() => {\n setStep('warning')\n setConfirmEmail('')\n setBlockers([])\n onClose()\n }, [onClose])\n\n const onSubmit = useCallback(() => {\n if (confirmEmail.toLowerCase() !== userEmail.toLowerCase()) return\n setIsDeleting(true)\n void Promise.resolve()\n .then(remove)\n .then(() => {\n close()\n onDeleted()\n })\n .catch((error: unknown) => {\n const found = parseDeleteAccountBlockers(error)\n if (found.length > 0) {\n setBlockers(found)\n setStep('warning')\n } else {\n onError?.(error)\n }\n })\n .finally(() => setIsDeleting(false))\n }, [confirmEmail, userEmail, remove, close, onDeleted, onError])\n\n return {\n step,\n blockers,\n confirmEmail,\n onConfirmEmailChange: setConfirmEmail,\n onContinue: () => setStep('confirm'),\n onBack: () => setStep('warning'),\n isDeleting,\n onSubmit,\n onClose: close,\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,aAAa,gBAAgB;AACtC,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAO1B,SAAS,2BAA2B,OAAwC;AACjF,QAAM,OAAQ,OAAyC,YAAY;AACnE,QAAM,SAAU,MAAsC;AACtD,MAAI,WAAW,sBAAuB,QAAO,CAAC,EAAE,MAAM,sBAAsB,CAAC;AAC7E,MAAI,UAAU,OAAO,WAAW,UAAU;AACxC,UAAM,IAAI;AACV,QAAI,EAAE,WAAW,uBAAuB,MAAM,QAAQ,EAAE,UAAU,GAAG;AACnE,aAAO,CAAC,EAAE,MAAM,qBAAqB,YAAY,EAAE,WAAW,IAAI,MAAM,EAAE,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAGO,SAAS,mBAAmB;AACjC,QAAM,EAAE,OAAO,IAAI,iBAAiB;AACpC,SAAO,YAAY,EAAE,YAAY,MAAM,OAAO,gBAAgB,EAAE,CAAC;AACnE;AA2BO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmD;AACjD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgC,SAAS;AACjE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,EAAE;AACnD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiC,CAAC,CAAC;AACnE,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAElD,QAAM,QAAQ,YAAY,MAAM;AAC9B,YAAQ,SAAS;AACjB,oBAAgB,EAAE;AAClB,gBAAY,CAAC,CAAC;AACd,YAAQ;AAAA,EACV,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,WAAW,YAAY,MAAM;AACjC,QAAI,aAAa,YAAY,MAAM,UAAU,YAAY,EAAG;AAC5D,kBAAc,IAAI;AAClB,SAAK,QAAQ,QAAQ,EAClB,KAAK,MAAM,EACX,KAAK,MAAM;AACV,YAAM;AACN,gBAAU;AAAA,IACZ,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,YAAM,QAAQ,2BAA2B,KAAK;AAC9C,UAAI,MAAM,SAAS,GAAG;AACpB,oBAAY,KAAK;AACjB,gBAAQ,SAAS;AAAA,MACnB,OAAO;AACL,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF,CAAC,EACA,QAAQ,MAAM,cAAc,KAAK,CAAC;AAAA,EACvC,GAAG,CAAC,cAAc,WAAW,QAAQ,OAAO,WAAW,OAAO,CAAC;AAE/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,sBAAsB;AAAA,IACtB,YAAY,MAAM,QAAQ,SAAS;AAAA,IACnC,QAAQ,MAAM,QAAQ,SAAS;AAAA,IAC/B;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EACX;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,34 @@
1
+ let sdkPromise = null;
2
+ function loadDidit() {
3
+ sdkPromise ??= import("@didit-protocol/sdk-web").then((m) => m.DiditSdk);
4
+ sdkPromise.catch(() => {
5
+ sdkPromise = null;
6
+ });
7
+ return sdkPromise;
8
+ }
9
+ async function mountDiditVerification({
10
+ url,
11
+ containerId,
12
+ onResult
13
+ }) {
14
+ const Sdk = await loadDidit();
15
+ const sdk = Sdk.shared;
16
+ sdk.onComplete = onResult;
17
+ await sdk.startVerification({
18
+ url,
19
+ configuration: {
20
+ embedded: true,
21
+ embeddedContainerId: containerId,
22
+ showCloseButton: false,
23
+ closeModalOnComplete: true
24
+ }
25
+ });
26
+ return () => {
27
+ sdk.onComplete = void 0;
28
+ sdk.destroy();
29
+ };
30
+ }
31
+ export {
32
+ mountDiditVerification
33
+ };
34
+ //# sourceMappingURL=didit.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/didit.ts"],
4
+ "sourcesContent": ["/**\n * Didit's web SDK, loaded only when a verification starts (like the app loads Stripe), and run\n * embedded in a host element. ID capture, liveness and face match all happen inside Didit's frame.\n */\n\nimport type { DiditSdk, VerificationResult } from '@didit-protocol/sdk-web'\n\nlet sdkPromise: Promise<typeof DiditSdk> | null = null\n\nfunction loadDidit(): Promise<typeof DiditSdk> {\n sdkPromise ??= import('@didit-protocol/sdk-web').then((m) => m.DiditSdk)\n // A failed chunk load may succeed on the next attempt.\n sdkPromise.catch(() => {\n sdkPromise = null\n })\n return sdkPromise\n}\n\nexport interface MountDiditOptions {\n /** The Didit session URL from the backend. */\n url: string\n /** Id of the element the verification renders into; it must have a height. */\n containerId: string\n /** The user finished, cancelled or the flow failed (`cameraAccessDenied`, `sessionExpired`, \u2026). */\n onResult: (result: VerificationResult) => void\n}\n\n/** Start the embedded verification. Resolves with a teardown; rejects if the SDK can't load. */\nexport async function mountDiditVerification({\n url,\n containerId,\n onResult,\n}: MountDiditOptions): Promise<() => void> {\n const Sdk = await loadDidit()\n const sdk = Sdk.shared\n sdk.onComplete = onResult\n await sdk.startVerification({\n url,\n configuration: {\n embedded: true,\n embeddedContainerId: containerId,\n showCloseButton: false,\n closeModalOnComplete: true,\n },\n })\n return () => {\n sdk.onComplete = undefined\n sdk.destroy()\n }\n}\n"],
5
+ "mappings": "AAOA,IAAI,aAA8C;AAElD,SAAS,YAAsC;AAC7C,iBAAe,OAAO,yBAAyB,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ;AAEvE,aAAW,MAAM,MAAM;AACrB,iBAAa;AAAA,EACf,CAAC;AACD,SAAO;AACT;AAYA,eAAsB,uBAAuB;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,MAAM,MAAM,UAAU;AAC5B,QAAM,MAAM,IAAI;AAChB,MAAI,aAAa;AACjB,QAAM,IAAI,kBAAkB;AAAA,IAC1B;AAAA,IACA,eAAe;AAAA,MACb,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,IACxB;AAAA,EACF,CAAC;AACD,SAAO,MAAM;AACX,QAAI,aAAa;AACjB,QAAI,QAAQ;AAAA,EACd;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,33 @@
1
+ import { useCallback } from "react";
2
+ import { useQueryClient } from "@tanstack/react-query";
3
+ import { arbiQueryKeys } from "../hooks.js";
4
+ import { useUserSettings, useUpdateUserSettings } from "./settings.js";
5
+ function useDismissedTips() {
6
+ const queryClient = useQueryClient();
7
+ const { data: userSettings } = useUserSettings();
8
+ const { mutate: updateUserSettings } = useUpdateUserSettings();
9
+ const loaded = userSettings !== void 0;
10
+ const dismissed = userSettings?.dismissed_tips ?? [];
11
+ const dismissTip = useCallback(
12
+ (code) => {
13
+ const key = arbiQueryKeys.userSettings();
14
+ const current = queryClient.getQueryData(key);
15
+ if (!current) return;
16
+ const list = current.dismissed_tips ?? [];
17
+ if (list.includes(code)) return;
18
+ const next = [...list, code];
19
+ queryClient.setQueryData(key, { ...current, dismissed_tips: next });
20
+ updateUserSettings({ dismissed_tips: next });
21
+ },
22
+ [queryClient, updateUserSettings]
23
+ );
24
+ const resetTips = useCallback(() => {
25
+ if (dismissed.length === 0) return;
26
+ updateUserSettings({ dismissed_tips: [] });
27
+ }, [dismissed.length, updateUserSettings]);
28
+ return { dismissed, loaded, dismissTip, resetTips };
29
+ }
30
+ export {
31
+ useDismissedTips
32
+ };
33
+ //# sourceMappingURL=dismissed-tips.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/dismissed-tips.ts"],
4
+ "sourcesContent": ["/**\n * Per-user \"don't show this tip again\" state, persisted in the `dismissed_tips`\n * user setting (a list of tip codes). Backed by the server so it's durable and\n * cross-device. The settings PATCH merge is shallow, so we always send the\n * whole list.\n *\n * Because the whole list is sent, a write must start from the list the server\n * has: nothing is written until the settings have loaded (an empty list before\n * then is \"not known yet\", and sending it would wipe every saved code), and each\n * write starts from the cached list as it is at that moment and updates the cache\n * at once, so two codes recorded in the same tick both survive.\n *\n * This is distinct from the `show_hints` lightbulb, which is the master on/off\n * for the whole tips bar \u2014 dismissing individual tips doesn't touch it, and\n * toggling it back on doesn't un-dismiss anything (otherwise \"don't show again\"\n * wouldn't stick). \"Reset tips\" (Settings \u203A Privacy) clears the list.\n */\n\nimport { useCallback } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { arbiQueryKeys } from '../hooks'\nimport { useUserSettings, useUpdateUserSettings } from './settings'\n\ntype DismissedTipsSettings = { dismissed_tips?: string[] | null }\n\n/** The tip codes the user hid, and the writes that keep the saved list whole. */\nexport function useDismissedTips() {\n const queryClient = useQueryClient()\n const { data: userSettings } = useUserSettings()\n const { mutate: updateUserSettings } = useUpdateUserSettings()\n\n const loaded = userSettings !== undefined\n const dismissed = userSettings?.dismissed_tips ?? []\n\n const dismissTip = useCallback(\n (code: string) => {\n const key = arbiQueryKeys.userSettings()\n const current = queryClient.getQueryData<DismissedTipsSettings>(key)\n if (!current) return\n const list = current.dismissed_tips ?? []\n if (list.includes(code)) return\n const next = [...list, code]\n queryClient.setQueryData<DismissedTipsSettings>(key, { ...current, dismissed_tips: next })\n updateUserSettings({ dismissed_tips: next })\n },\n [queryClient, updateUserSettings]\n )\n\n const resetTips = useCallback(() => {\n if (dismissed.length === 0) return\n updateUserSettings({ dismissed_tips: [] })\n }, [dismissed.length, updateUserSettings])\n\n return { dismissed, loaded, dismissTip, resetTips }\n}\n"],
5
+ "mappings": "AAkBA,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB,6BAA6B;AAKhD,SAAS,mBAAmB;AACjC,QAAM,cAAc,eAAe;AACnC,QAAM,EAAE,MAAM,aAAa,IAAI,gBAAgB;AAC/C,QAAM,EAAE,QAAQ,mBAAmB,IAAI,sBAAsB;AAE7D,QAAM,SAAS,iBAAiB;AAChC,QAAM,YAAY,cAAc,kBAAkB,CAAC;AAEnD,QAAM,aAAa;AAAA,IACjB,CAAC,SAAiB;AAChB,YAAM,MAAM,cAAc,aAAa;AACvC,YAAM,UAAU,YAAY,aAAoC,GAAG;AACnE,UAAI,CAAC,QAAS;AACd,YAAM,OAAO,QAAQ,kBAAkB,CAAC;AACxC,UAAI,KAAK,SAAS,IAAI,EAAG;AACzB,YAAM,OAAO,CAAC,GAAG,MAAM,IAAI;AAC3B,kBAAY,aAAoC,KAAK,EAAE,GAAG,SAAS,gBAAgB,KAAK,CAAC;AACzF,yBAAmB,EAAE,gBAAgB,KAAK,CAAC;AAAA,IAC7C;AAAA,IACA,CAAC,aAAa,kBAAkB;AAAA,EAClC;AAEA,QAAM,YAAY,YAAY,MAAM;AAClC,QAAI,UAAU,WAAW,EAAG;AAC5B,uBAAmB,EAAE,gBAAgB,CAAC,EAAE,CAAC;AAAA,EAC3C,GAAG,CAAC,UAAU,QAAQ,kBAAkB,CAAC;AAEzC,SAAO,EAAE,WAAW,QAAQ,YAAY,UAAU;AACpD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,84 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
3
+ import { arbiQueryKeys } from "../hooks.js";
4
+ import { useAccountClient } from "./client.js";
5
+ function useRequestEmailChange() {
6
+ const { client } = useAccountClient();
7
+ return useMutation({
8
+ mutationFn: (newEmail) => client.requestEmailChange(newEmail)
9
+ });
10
+ }
11
+ function useConfirmEmailChange() {
12
+ const { client } = useAccountClient();
13
+ const qc = useQueryClient();
14
+ return useMutation({
15
+ mutationFn: ({ newEmail, code }) => client.confirmEmailChange(newEmail, code),
16
+ onSuccess: () => qc.setQueryData(arbiQueryKeys.profile(), client.profile())
17
+ });
18
+ }
19
+ function useEmailChange({
20
+ requestCode,
21
+ confirm,
22
+ cooldownSeconds: cooldownLength = 30
23
+ }) {
24
+ const [isOpen, setIsOpen] = useState(false);
25
+ const [step, setStep] = useState("enter");
26
+ const [newEmail, setNewEmail] = useState("");
27
+ const [code, setCode] = useState("");
28
+ const [cooldown, setCooldown] = useState(0);
29
+ const [isSending, setIsSending] = useState(false);
30
+ const [isConfirming, setIsConfirming] = useState(false);
31
+ const [error, setError] = useState(null);
32
+ useEffect(() => {
33
+ if (cooldown <= 0) return;
34
+ const timer = setTimeout(() => setCooldown((c) => c - 1), 1e3);
35
+ return () => clearTimeout(timer);
36
+ }, [cooldown]);
37
+ const reset = useCallback(() => {
38
+ setIsOpen(false);
39
+ setStep("enter");
40
+ setNewEmail("");
41
+ setCode("");
42
+ setError(null);
43
+ }, []);
44
+ const onSendCode = useCallback(() => {
45
+ const email = newEmail.trim();
46
+ if (!email) return;
47
+ setIsSending(true);
48
+ setError(null);
49
+ void Promise.resolve().then(() => requestCode(email)).then(() => {
50
+ setStep("verify");
51
+ setCooldown(cooldownLength);
52
+ }).catch((e) => setError(e)).finally(() => setIsSending(false));
53
+ }, [newEmail, requestCode, cooldownLength]);
54
+ const onConfirm = useCallback(() => {
55
+ const email = newEmail.trim();
56
+ const entered = code.trim();
57
+ if (!email || !entered) return;
58
+ setIsConfirming(true);
59
+ setError(null);
60
+ void Promise.resolve().then(() => confirm({ newEmail: email, code: entered })).then(reset).catch((e) => setError(e)).finally(() => setIsConfirming(false));
61
+ }, [newEmail, code, confirm, reset]);
62
+ return {
63
+ isOpen,
64
+ onStart: () => setIsOpen(true),
65
+ step,
66
+ newEmail,
67
+ onNewEmailChange: setNewEmail,
68
+ onSendCode,
69
+ isSending,
70
+ code,
71
+ onCodeChange: setCode,
72
+ onConfirm,
73
+ isConfirming,
74
+ cooldownSeconds: cooldown,
75
+ onCancel: reset,
76
+ error
77
+ };
78
+ }
79
+ export {
80
+ useConfirmEmailChange,
81
+ useEmailChange,
82
+ useRequestEmailChange
83
+ };
84
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/email.ts"],
4
+ "sourcesContent": ["/**\n * Email change: ask for a code at the new address, confirm it. The SDK-bound mutations and the\n * `ProfileCard` flow controller (cooldown on re-sending the code) are separate, as in `profile.ts`.\n */\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { arbiQueryKeys } from '../hooks'\nimport { useAccountClient } from './client'\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/** Send the 3-word verification code to the new address (not for SSO accounts). */\nexport function useRequestEmailChange() {\n const { client } = useAccountClient()\n return useMutation({\n mutationFn: (newEmail: string) => client.requestEmailChange(newEmail),\n })\n}\n\n/** Confirm the new address with the emailed code; the profile query shows the new email. */\nexport function useConfirmEmailChange() {\n const { client } = useAccountClient()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: ({ newEmail, code }: { newEmail: string; code: string }) =>\n client.confirmEmailChange(newEmail, code),\n onSuccess: () => qc.setQueryData(arbiQueryKeys.profile(), client.profile()),\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 UseEmailChangeOptions {\n /** Send a code to `newEmail`. */\n requestCode: (newEmail: string) => Promise<unknown> | unknown\n /** Confirm `newEmail` with `code`. Resolve to finish the flow. */\n confirm: (args: { newEmail: string; code: string }) => Promise<unknown> | unknown\n /** Seconds before another code may be requested. Default 30. */\n cooldownSeconds?: number\n}\n\nexport interface EmailChange {\n /** The flow is open: `ProfileCard` hides the plain email row. */\n isOpen: boolean\n onStart: () => void\n step: 'enter' | 'verify'\n newEmail: string\n onNewEmailChange: (value: string) => void\n onSendCode: () => void\n isSending: boolean\n code: string\n onCodeChange: (value: string) => void\n onConfirm: () => void\n isConfirming: boolean\n cooldownSeconds: number\n onCancel: () => void\n /** The last failed send or confirm. */\n error: unknown\n}\n\n/** The two-step email-change flow of `ProfileCard`: enter address, verify code. */\nexport function useEmailChange({\n requestCode,\n confirm,\n cooldownSeconds: cooldownLength = 30,\n}: UseEmailChangeOptions): EmailChange {\n const [isOpen, setIsOpen] = useState(false)\n const [step, setStep] = useState<'enter' | 'verify'>('enter')\n const [newEmail, setNewEmail] = useState('')\n const [code, setCode] = useState('')\n const [cooldown, setCooldown] = useState(0)\n const [isSending, setIsSending] = useState(false)\n const [isConfirming, setIsConfirming] = useState(false)\n const [error, setError] = useState<unknown>(null)\n\n useEffect(() => {\n if (cooldown <= 0) return\n const timer = setTimeout(() => setCooldown((c) => c - 1), 1000)\n return () => clearTimeout(timer)\n }, [cooldown])\n\n const reset = useCallback(() => {\n setIsOpen(false)\n setStep('enter')\n setNewEmail('')\n setCode('')\n setError(null)\n }, [])\n\n const onSendCode = useCallback(() => {\n const email = newEmail.trim()\n if (!email) return\n setIsSending(true)\n setError(null)\n void Promise.resolve()\n .then(() => requestCode(email))\n .then(() => {\n setStep('verify')\n setCooldown(cooldownLength)\n })\n .catch((e: unknown) => setError(e))\n .finally(() => setIsSending(false))\n }, [newEmail, requestCode, cooldownLength])\n\n const onConfirm = useCallback(() => {\n const email = newEmail.trim()\n const entered = code.trim()\n if (!email || !entered) return\n setIsConfirming(true)\n setError(null)\n void Promise.resolve()\n .then(() => confirm({ newEmail: email, code: entered }))\n .then(reset)\n .catch((e: unknown) => setError(e))\n .finally(() => setIsConfirming(false))\n }, [newEmail, code, confirm, reset])\n\n return {\n isOpen,\n onStart: () => setIsOpen(true),\n step,\n newEmail,\n onNewEmailChange: setNewEmail,\n onSendCode,\n isSending,\n code,\n onCodeChange: setCode,\n onConfirm,\n isConfirming,\n cooldownSeconds: cooldown,\n onCancel: reset,\n error,\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,47 @@
1
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { useArbiHost } from "../host/config.js";
3
+ import { arbiQueryKeys } from "../hooks.js";
4
+ function useEntitlements() {
5
+ const { arbi } = useArbiHost();
6
+ return useQuery({
7
+ queryKey: arbiQueryKeys.entitlements(),
8
+ queryFn: () => arbi.account.entitlements(),
9
+ enabled: !!arbi?.isLoggedIn,
10
+ // A plan change shows on the next read; the API enforces it at once either way.
11
+ staleTime: 5 * 60 * 1e3
12
+ });
13
+ }
14
+ function useInvalidateEntitlements() {
15
+ const qc = useQueryClient();
16
+ return () => qc.invalidateQueries({ queryKey: arbiQueryKeys.entitlements() });
17
+ }
18
+ function useIsEntitled(feature) {
19
+ const { data } = useEntitlements();
20
+ return data?.[feature] === true;
21
+ }
22
+ function entitlementRefusal(reason) {
23
+ switch (reason) {
24
+ case "external_user":
25
+ return {
26
+ title: "Not available for external users",
27
+ description: "Mail, Calendar and hosting calls are for members of the firm. You can still join calls others host."
28
+ };
29
+ case "not_entitled":
30
+ return {
31
+ title: "Not available on this account",
32
+ description: "Mail, Calendar and hosting calls are not available on this account."
33
+ };
34
+ default:
35
+ return {
36
+ title: "Available on Pro",
37
+ description: "Mail, Calendar and hosting calls come with a Pro plan. You can still join calls others host."
38
+ };
39
+ }
40
+ }
41
+ export {
42
+ entitlementRefusal,
43
+ useEntitlements,
44
+ useInvalidateEntitlements,
45
+ useIsEntitled
46
+ };
47
+ //# sourceMappingURL=entitlements.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/entitlements.ts"],
4
+ "sourcesContent": ["/**\n * Feature entitlements: native mail, the calendar and hosting calls are paid features (Pro on the hosted\n * service; internal users on a Box). Joining a call someone else hosts is never gated. The API refuses gated\n * routes with 403 and the same `reason`, so a UI hides what the API would refuse.\n */\n\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport type { account } from '@arbidocs/sdk/browser'\nimport { useArbiHost } from '../host/config'\nimport { arbiQueryKeys } from '../hooks'\n\nexport type FeatureEntitlements = account.FeatureEntitlements\nexport type EntitledFeature = account.EntitledFeature\nexport type FeatureRefusal = account.FeatureRefusal\n\n/**\n * The person's entitlements; `data` is undefined until known (treat that as not entitled), and\n * stays so under a host with no `arbi` (e.g. one that brings only its own mail client).\n */\nexport function useEntitlements() {\n const { arbi } = useArbiHost()\n return useQuery({\n queryKey: arbiQueryKeys.entitlements(),\n queryFn: () => arbi!.account.entitlements(),\n enabled: !!arbi?.isLoggedIn,\n // A plan change shows on the next read; the API enforces it at once either way.\n staleTime: 5 * 60 * 1000,\n })\n}\n\n/**\n * Read the entitlements again: after something that changes them (Pro bought, a plan change), so\n * the paid pages open at once instead of waiting out the cached copy.\n */\nexport function useInvalidateEntitlements(): () => Promise<void> {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: arbiQueryKeys.entitlements() })\n}\n\n/** Whether the person may use `feature` (false while unknown, so nothing the API would refuse flashes up). */\nexport function useIsEntitled(feature: EntitledFeature): boolean {\n const { data } = useEntitlements()\n return data?.[feature] === true\n}\n\n/** Why the paid features are off, in the words a UI shows. */\nexport function entitlementRefusal(reason: FeatureRefusal | null | undefined): {\n title: string\n description: string\n} {\n switch (reason) {\n case 'external_user':\n return {\n title: 'Not available for external users',\n description:\n 'Mail, Calendar and hosting calls are for members of the firm. You can still join calls others host.',\n }\n case 'not_entitled':\n return {\n title: 'Not available on this account',\n description: 'Mail, Calendar and hosting calls are not available on this account.',\n }\n default:\n return {\n title: 'Available on Pro',\n description:\n 'Mail, Calendar and hosting calls come with a Pro plan. You can still join calls others host.',\n }\n }\n}\n"],
5
+ "mappings": "AAMA,SAAS,UAAU,sBAAsB;AAEzC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAUvB,SAAS,kBAAkB;AAChC,QAAM,EAAE,KAAK,IAAI,YAAY;AAC7B,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,aAAa;AAAA,IACrC,SAAS,MAAM,KAAM,QAAQ,aAAa;AAAA,IAC1C,SAAS,CAAC,CAAC,MAAM;AAAA;AAAA,IAEjB,WAAW,IAAI,KAAK;AAAA,EACtB,CAAC;AACH;AAMO,SAAS,4BAAiD;AAC/D,QAAM,KAAK,eAAe;AAC1B,SAAO,MAAM,GAAG,kBAAkB,EAAE,UAAU,cAAc,aAAa,EAAE,CAAC;AAC9E;AAGO,SAAS,cAAc,SAAmC;AAC/D,QAAM,EAAE,KAAK,IAAI,gBAAgB;AACjC,SAAO,OAAO,OAAO,MAAM;AAC7B;AAGO,SAAS,mBAAmB,QAGjC;AACA,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,IACF;AACE,aAAO;AAAA,QACL,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,EACJ;AACF;",
6
+ "names": []
7
+ }