@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,116 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { arbiQueryKeys } from "../hooks.js";
4
+ import { useAccountClient } from "./client.js";
5
+ function toProfileView(profile) {
6
+ return {
7
+ ...profile,
8
+ fullName: [profile.givenName, profile.familyName].map((part) => part?.trim()).filter(Boolean).join(" ")
9
+ };
10
+ }
11
+ function useProfile(options) {
12
+ const { client, enabled } = useAccountClient();
13
+ const qc = useQueryClient();
14
+ useEffect(
15
+ () => client.onProfileChange(() => qc.setQueryData(arbiQueryKeys.profile(), client.profile())),
16
+ [client, qc]
17
+ );
18
+ return useQuery({
19
+ queryKey: arbiQueryKeys.profile(),
20
+ queryFn: () => client.profile(),
21
+ enabled: (options?.enabled ?? true) && enabled,
22
+ staleTime: Infinity
23
+ });
24
+ }
25
+ function useUpdateProfile() {
26
+ const { client } = useAccountClient();
27
+ const qc = useQueryClient();
28
+ return useMutation({
29
+ mutationFn: async (vars) => {
30
+ await client.updateProfile(vars);
31
+ return client.profile();
32
+ },
33
+ onSuccess: (profile) => {
34
+ qc.setQueryData(arbiQueryKeys.profile(), profile);
35
+ void qc.invalidateQueries({ queryKey: arbiQueryKeys.identity() });
36
+ return qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() });
37
+ }
38
+ });
39
+ }
40
+ function useNameEditor({ givenName, familyName, save }) {
41
+ const [isEditing, setIsEditing] = useState(false);
42
+ const [given, setGiven] = useState("");
43
+ const [family, setFamily] = useState("");
44
+ const [isSaving, setIsSaving] = useState(false);
45
+ const [error, setError] = useState(null);
46
+ const onStartEdit = useCallback(() => {
47
+ setGiven(givenName ?? "");
48
+ setFamily(familyName ?? "");
49
+ setError(null);
50
+ setIsEditing(true);
51
+ }, [givenName, familyName]);
52
+ const onSave = useCallback(() => {
53
+ const trimmedGiven = given.trim();
54
+ if (!trimmedGiven) return;
55
+ setIsSaving(true);
56
+ setError(null);
57
+ void Promise.resolve().then(() => save({ givenName: trimmedGiven, familyName: family.trim() })).then(() => setIsEditing(false)).catch((e) => setError(e)).finally(() => setIsSaving(false));
58
+ }, [given, family, save]);
59
+ return {
60
+ isEditing,
61
+ givenName: given,
62
+ familyName: family,
63
+ onGivenNameChange: setGiven,
64
+ onFamilyNameChange: setFamily,
65
+ onStartEdit,
66
+ onSave,
67
+ onCancel: () => setIsEditing(false),
68
+ isSaving,
69
+ error
70
+ };
71
+ }
72
+ const MAX_AVATAR_FILE_BYTES = 5 * 1024 * 1024;
73
+ function useAvatarCrop({
74
+ upload,
75
+ onProblem,
76
+ maxBytes = MAX_AVATAR_FILE_BYTES
77
+ }) {
78
+ const [pendingImage, setPendingImage] = useState(null);
79
+ const [isUploading, setIsUploading] = useState(false);
80
+ const onFileChosen = useCallback(
81
+ (file) => {
82
+ if (!file.type.startsWith("image/")) return onProblem?.("not-image");
83
+ if (file.size > maxBytes) return onProblem?.("too-large");
84
+ const reader = new FileReader();
85
+ reader.onload = () => setPendingImage(reader.result);
86
+ reader.onerror = () => onProblem?.("unreadable");
87
+ reader.readAsDataURL(file);
88
+ },
89
+ [maxBytes, onProblem]
90
+ );
91
+ const onCropComplete = useCallback(
92
+ (result) => {
93
+ setPendingImage(null);
94
+ setIsUploading(true);
95
+ void Promise.resolve().then(() => upload(result.dataUrl)).catch(() => {
96
+ }).finally(() => setIsUploading(false));
97
+ },
98
+ [upload]
99
+ );
100
+ return {
101
+ onFileChosen,
102
+ pendingImage,
103
+ onCropComplete,
104
+ onCropCancel: () => setPendingImage(null),
105
+ isUploading
106
+ };
107
+ }
108
+ export {
109
+ MAX_AVATAR_FILE_BYTES,
110
+ toProfileView,
111
+ useAvatarCrop,
112
+ useNameEditor,
113
+ useProfile,
114
+ useUpdateProfile
115
+ };
116
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/profile.ts"],
4
+ "sourcesContent": ["/**\n * Profile: the signed-in user's name and picture.\n *\n * Two layers, like the rest of the package. The bound hooks (`useProfile`, `useUpdateProfile`) go\n * through the account client in scope (`useAccountClient`: the host configuration's `account`, else\n * one on its `arbi`). The controllers (`useNameEditor`, `useAvatarCrop`) own only the form\n * state and take the save as a function, so an app that has its own API layer (ARBI-frontend)\n * binds the same `ProfileCard` / `AvatarPicker` parts without a provider.\n */\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport type { LoginProfile } from '@arbidocs/sdk/browser'\nimport { arbiQueryKeys } from '../hooks'\nimport { useAccountClient } from './client'\n\n// \u2500\u2500 View model \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 ProfileView {\n givenName: string\n familyName: string | null\n picture: string | null\n email: string\n /** The sign-in provider manages the email (it cannot be changed here). */\n isSso: boolean\n /** Verified tick: passed an ID check under this name, not expired. */\n isIdentityVerified?: boolean\n /** Given and family name joined; empty while the profile has no name. */\n fullName: string\n}\n\n/** The profile as the UI reads it. `fullName` is the profile name, never the email. */\nexport function toProfileView(profile: LoginProfile): ProfileView {\n return {\n ...profile,\n fullName: [profile.givenName, profile.familyName]\n .map((part) => part?.trim())\n .filter(Boolean)\n .join(' '),\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/** The signed-in user's profile; `null` when the session has none (restored without a login). */\nexport function useProfile(options?: { enabled?: boolean }) {\n const { client, enabled } = useAccountClient()\n const qc = useQueryClient()\n // The profile changes outside these hooks too (another tab, an ID check, a re-login).\n useEffect(\n () => client.onProfileChange(() => qc.setQueryData(arbiQueryKeys.profile(), client.profile())),\n [client, qc]\n )\n return useQuery({\n queryKey: arbiQueryKeys.profile(),\n queryFn: (): ProfileView | null => client.profile(),\n enabled: (options?.enabled ?? true) && enabled,\n staleTime: Infinity,\n })\n}\n\nexport interface UpdateProfileVars {\n givenName?: string\n /** `''` clears it. */\n familyName?: string\n /** A data URL or URL; `''` clears it (the backend caps it at 100 KB). */\n picture?: string\n}\n\n/**\n * Save the name and/or picture (PATCH /v1/user/profile). The profile query is updated in place and\n * the workspace list (member rows carry the name) is refreshed, so every surface follows.\n */\nexport function useUpdateProfile() {\n const { client } = useAccountClient()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: async (vars: UpdateProfileVars) => {\n await client.updateProfile(vars)\n return client.profile()\n },\n onSuccess: (profile) => {\n qc.setQueryData(arbiQueryKeys.profile(), profile)\n // A rename can drop (or restore) the verified tick.\n void qc.invalidateQueries({ queryKey: arbiQueryKeys.identity() })\n return qc.invalidateQueries({ queryKey: arbiQueryKeys.workspaces() })\n },\n })\n}\n\n// \u2500\u2500 Controllers (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\n\nexport interface UseNameEditorOptions {\n givenName: string | null | undefined\n familyName: string | null | undefined\n /** Persist the new name. Reject to keep the editor open (see `error`). */\n save: (name: { givenName: string; familyName: string }) => Promise<unknown> | unknown\n}\n\nexport interface NameEditor {\n isEditing: boolean\n givenName: string\n familyName: string\n onGivenNameChange: (value: string) => void\n onFamilyNameChange: (value: string) => void\n onStartEdit: () => void\n onSave: () => void\n onCancel: () => void\n isSaving: boolean\n /** The last failed save. */\n error: unknown\n}\n\n/**\n * State of the inline name editor of `ProfileCard`: start edit (seeded from the current name),\n * save (trimmed; a blank given name is not saved), cancel. Spread it into `ProfileCard`'s `name`\n * with `display`.\n */\nexport function useNameEditor({ givenName, familyName, save }: UseNameEditorOptions): NameEditor {\n const [isEditing, setIsEditing] = useState(false)\n const [given, setGiven] = useState('')\n const [family, setFamily] = useState('')\n const [isSaving, setIsSaving] = useState(false)\n const [error, setError] = useState<unknown>(null)\n\n const onStartEdit = useCallback(() => {\n setGiven(givenName ?? '')\n setFamily(familyName ?? '')\n setError(null)\n setIsEditing(true)\n }, [givenName, familyName])\n\n const onSave = useCallback(() => {\n const trimmedGiven = given.trim()\n if (!trimmedGiven) return\n setIsSaving(true)\n setError(null)\n void Promise.resolve()\n .then(() => save({ givenName: trimmedGiven, familyName: family.trim() }))\n .then(() => setIsEditing(false))\n .catch((e: unknown) => setError(e))\n .finally(() => setIsSaving(false))\n }, [given, family, save])\n\n return {\n isEditing,\n givenName: given,\n familyName: family,\n onGivenNameChange: setGiven,\n onFamilyNameChange: setFamily,\n onStartEdit,\n onSave,\n onCancel: () => setIsEditing(false),\n isSaving,\n error,\n }\n}\n\n/** Largest picture file accepted before cropping. */\nexport const MAX_AVATAR_FILE_BYTES = 5 * 1024 * 1024\n\nexport type AvatarFileProblem = 'not-image' | 'too-large' | 'unreadable'\n\nexport interface UseAvatarCropOptions {\n /** Persist the cropped picture (a data URL). */\n upload: (dataUrl: string) => Promise<unknown> | unknown\n /** Report a rejected file or a failed read; default is silent (the picker just does not open). */\n onProblem?: (problem: AvatarFileProblem) => void\n maxBytes?: number\n}\n\nexport interface AvatarCrop {\n /** Pass to `AvatarPicker.onFileChosen`. */\n onFileChosen: (file: File) => void\n /** The chosen image awaiting a crop (a data URL), else `null`. */\n pendingImage: string | null\n /** Pass to the crop dialog's `onComplete`. */\n onCropComplete: (result: { dataUrl: string }) => void\n onCropCancel: () => void\n isUploading: boolean\n}\n\n/**\n * The choose, validate, crop, upload sequence behind `AvatarPicker`: the picker hands over a file,\n * this checks it (image, size) and reads it for the crop dialog, then uploads the cropped data URL.\n */\nexport function useAvatarCrop({\n upload,\n onProblem,\n maxBytes = MAX_AVATAR_FILE_BYTES,\n}: UseAvatarCropOptions): AvatarCrop {\n const [pendingImage, setPendingImage] = useState<string | null>(null)\n const [isUploading, setIsUploading] = useState(false)\n\n const onFileChosen = useCallback(\n (file: File) => {\n if (!file.type.startsWith('image/')) return onProblem?.('not-image')\n if (file.size > maxBytes) return onProblem?.('too-large')\n const reader = new FileReader()\n reader.onload = () => setPendingImage(reader.result as string)\n reader.onerror = () => onProblem?.('unreadable')\n reader.readAsDataURL(file)\n },\n [maxBytes, onProblem]\n )\n\n const onCropComplete = useCallback(\n (result: { dataUrl: string }) => {\n setPendingImage(null)\n setIsUploading(true)\n void Promise.resolve()\n .then(() => upload(result.dataUrl))\n .catch(() => {\n // The host's `upload` reports its own failure; the picker just stops spinning.\n })\n .finally(() => setIsUploading(false))\n },\n [upload]\n )\n\n return {\n onFileChosen,\n pendingImage,\n onCropComplete,\n onCropCancel: () => setPendingImage(null),\n isUploading,\n }\n}\n"],
5
+ "mappings": "AAUA,SAAS,aAAa,WAAW,gBAAgB;AACjD,SAAS,aAAa,UAAU,sBAAsB;AAEtD,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AAkB1B,SAAS,cAAc,SAAoC;AAChE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,CAAC,QAAQ,WAAW,QAAQ,UAAU,EAC7C,IAAI,CAAC,SAAS,MAAM,KAAK,CAAC,EAC1B,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,EACb;AACF;AAKO,SAAS,WAAW,SAAiC;AAC1D,QAAM,EAAE,QAAQ,QAAQ,IAAI,iBAAiB;AAC7C,QAAM,KAAK,eAAe;AAE1B;AAAA,IACE,MAAM,OAAO,gBAAgB,MAAM,GAAG,aAAa,cAAc,QAAQ,GAAG,OAAO,QAAQ,CAAC,CAAC;AAAA,IAC7F,CAAC,QAAQ,EAAE;AAAA,EACb;AACA,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,QAAQ;AAAA,IAChC,SAAS,MAA0B,OAAO,QAAQ;AAAA,IAClD,UAAU,SAAS,WAAW,SAAS;AAAA,IACvC,WAAW;AAAA,EACb,CAAC;AACH;AAcO,SAAS,mBAAmB;AACjC,QAAM,EAAE,OAAO,IAAI,iBAAiB;AACpC,QAAM,KAAK,eAAe;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY,OAAO,SAA4B;AAC7C,YAAM,OAAO,cAAc,IAAI;AAC/B,aAAO,OAAO,QAAQ;AAAA,IACxB;AAAA,IACA,WAAW,CAAC,YAAY;AACtB,SAAG,aAAa,cAAc,QAAQ,GAAG,OAAO;AAEhD,WAAK,GAAG,kBAAkB,EAAE,UAAU,cAAc,SAAS,EAAE,CAAC;AAChE,aAAO,GAAG,kBAAkB,EAAE,UAAU,cAAc,WAAW,EAAE,CAAC;AAAA,IACtE;AAAA,EACF,CAAC;AACH;AA8BO,SAAS,cAAc,EAAE,WAAW,YAAY,KAAK,GAAqC;AAC/F,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkB,IAAI;AAEhD,QAAM,cAAc,YAAY,MAAM;AACpC,aAAS,aAAa,EAAE;AACxB,cAAU,cAAc,EAAE;AAC1B,aAAS,IAAI;AACb,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAC,WAAW,UAAU,CAAC;AAE1B,QAAM,SAAS,YAAY,MAAM;AAC/B,UAAM,eAAe,MAAM,KAAK;AAChC,QAAI,CAAC,aAAc;AACnB,gBAAY,IAAI;AAChB,aAAS,IAAI;AACb,SAAK,QAAQ,QAAQ,EAClB,KAAK,MAAM,KAAK,EAAE,WAAW,cAAc,YAAY,OAAO,KAAK,EAAE,CAAC,CAAC,EACvE,KAAK,MAAM,aAAa,KAAK,CAAC,EAC9B,MAAM,CAAC,MAAe,SAAS,CAAC,CAAC,EACjC,QAAQ,MAAM,YAAY,KAAK,CAAC;AAAA,EACrC,GAAG,CAAC,OAAO,QAAQ,IAAI,CAAC;AAExB,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,UAAU,MAAM,aAAa,KAAK;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAGO,MAAM,wBAAwB,IAAI,OAAO;AA2BzC,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAqC;AACnC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAwB,IAAI;AACpE,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AAEpD,QAAM,eAAe;AAAA,IACnB,CAAC,SAAe;AACd,UAAI,CAAC,KAAK,KAAK,WAAW,QAAQ,EAAG,QAAO,YAAY,WAAW;AACnE,UAAI,KAAK,OAAO,SAAU,QAAO,YAAY,WAAW;AACxD,YAAM,SAAS,IAAI,WAAW;AAC9B,aAAO,SAAS,MAAM,gBAAgB,OAAO,MAAgB;AAC7D,aAAO,UAAU,MAAM,YAAY,YAAY;AAC/C,aAAO,cAAc,IAAI;AAAA,IAC3B;AAAA,IACA,CAAC,UAAU,SAAS;AAAA,EACtB;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,WAAgC;AAC/B,sBAAgB,IAAI;AACpB,qBAAe,IAAI;AACnB,WAAK,QAAQ,QAAQ,EAClB,KAAK,MAAM,OAAO,OAAO,OAAO,CAAC,EACjC,MAAM,MAAM;AAAA,MAEb,CAAC,EACA,QAAQ,MAAM,eAAe,KAAK,CAAC;AAAA,IACxC;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,MAAM,gBAAgB,IAAI;AAAA,IACxC;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ import { createRecoveryFile } from "@arbidocs/client";
2
+ import { downloadBlob } from "../document-tools/environment.js";
3
+ async function downloadRecoveryFile(params) {
4
+ const file = await createRecoveryFile({
5
+ ...params,
6
+ origin: params.origin ?? window.location.origin
7
+ });
8
+ downloadBlob(new Blob([file.html], { type: "text/html" }), file.filename);
9
+ }
10
+ export {
11
+ downloadRecoveryFile
12
+ };
13
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/recovery.ts"],
4
+ "sourcesContent": ["/**\n * Saving the account's recovery key in the browser: the recovery file (`createRecoveryFile` of\n * `@arbidocs/client`, a one-link HTML page) downloaded for the current origin.\n */\n\nimport { createRecoveryFile, type RecoveryKeyParams } from '@arbidocs/client'\nimport { downloadBlob } from '../document-tools/environment'\n\n/** Download the recovery file. `origin` defaults to the page's own; `auth0Sub` SSO-wraps the key. */\nexport async function downloadRecoveryFile(\n params: Omit<RecoveryKeyParams, 'origin'> & { origin?: string }\n): Promise<void> {\n const file = await createRecoveryFile({\n ...params,\n origin: params.origin ?? window.location.origin,\n })\n downloadBlob(new Blob([file.html], { type: 'text/html' }), file.filename)\n}\n"],
5
+ "mappings": "AAKA,SAAS,0BAAkD;AAC3D,SAAS,oBAAoB;AAG7B,eAAsB,qBACpB,QACe;AACf,QAAM,OAAO,MAAM,mBAAmB;AAAA,IACpC,GAAG;AAAA,IACH,QAAQ,OAAO,UAAU,OAAO,SAAS;AAAA,EAC3C,CAAC;AACD,eAAa,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,MAAM,YAAY,CAAC,GAAG,KAAK,QAAQ;AAC1E;",
6
+ "names": []
7
+ }
@@ -0,0 +1,82 @@
1
+ import { useCallback } from "react";
2
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
3
+ import { settings as settingsOps } from "@arbidocs/sdk/browser";
4
+ import { useArbi } from "../useArbi.js";
5
+ import { arbiQueryKeys } from "../hooks.js";
6
+ import { useUserSettings } from "./settings.js";
7
+ function useRelevanceSave() {
8
+ const arbi = useArbi();
9
+ const qc = useQueryClient();
10
+ return useMutation({
11
+ mutationFn: (patch) => arbi.settings.update(patch),
12
+ onMutate: async (patch) => {
13
+ await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() });
14
+ const previous = qc.getQueryData(arbiQueryKeys.userSettings());
15
+ qc.setQueryData(
16
+ arbiQueryKeys.userSettings(),
17
+ (old) => old ? { ...old, ...patch } : old
18
+ );
19
+ return { previous };
20
+ },
21
+ onError: (_err, _patch, context) => {
22
+ qc.setQueryData(arbiQueryKeys.userSettings(), context?.previous);
23
+ },
24
+ onSettled: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() })
25
+ });
26
+ }
27
+ function useWorkspaceNotificationLevel(workspaceId, options) {
28
+ const qc = useQueryClient();
29
+ const settings = useUserSettings(options);
30
+ const save = useRelevanceSave();
31
+ const level = workspaceId ? settingsOps.workspaceNotificationLevel(settings.data, workspaceId) : "default";
32
+ const setLevel = useCallback(
33
+ (next) => {
34
+ if (!workspaceId) return;
35
+ const current = qc.getQueryData(arbiQueryKeys.userSettings()) ?? settings.data;
36
+ save.mutate(settingsOps.workspaceLevelPatch(current, workspaceId, next));
37
+ },
38
+ [qc, save, settings.data, workspaceId]
39
+ );
40
+ return {
41
+ level,
42
+ setLevel,
43
+ isLoading: settings.isLoading,
44
+ isSaving: save.isPending,
45
+ error: save.error
46
+ };
47
+ }
48
+ function useFollowThread(conversationId, options) {
49
+ const qc = useQueryClient();
50
+ const settings = useUserSettings(options);
51
+ const save = useRelevanceSave();
52
+ const following = !!conversationId && !!settings.data?.followed_threads?.includes(conversationId);
53
+ const setFollowing = useCallback(
54
+ (on, callbacks) => {
55
+ if (!conversationId) return;
56
+ const current = qc.getQueryData(arbiQueryKeys.userSettings()) ?? settings.data;
57
+ save.mutate(
58
+ {
59
+ followed_threads: settingsOps.withMembership(
60
+ current?.followed_threads,
61
+ conversationId,
62
+ on
63
+ )
64
+ },
65
+ callbacks
66
+ );
67
+ },
68
+ [qc, save, settings.data, conversationId]
69
+ );
70
+ return {
71
+ following,
72
+ setFollowing,
73
+ isLoading: settings.isLoading,
74
+ isSaving: save.isPending,
75
+ error: save.error
76
+ };
77
+ }
78
+ export {
79
+ useFollowThread,
80
+ useWorkspaceNotificationLevel
81
+ };
82
+ //# sourceMappingURL=relevance.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/relevance.ts"],
4
+ "sourcesContent": ["/**\n * Follow and mute: the relevance lists of the user settings. A workspace member is pushed only what\n * concerns them (a mention, an assignment, a reply in a thread they take part in). Following a\n * workspace or a thread opts in to everything from it; muting a workspace silences it, mentions\n * included. Everything else is in the workspace's activity feed.\n *\n * The server takes each list whole: a save sends the full new list, worked out from the cached\n * settings, and updates the cache straight away; a failed write rolls back.\n */\n\nimport { useCallback } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { settings as settingsOps } from '@arbidocs/sdk/browser'\nimport { useArbi } from '../useArbi'\nimport { arbiQueryKeys } from '../hooks'\nimport { useUserSettings } from './settings'\n\n/** `default` (what names or involves you), `following` (everything) or `muted` (nothing). */\nexport type WorkspaceNotificationLevel = settingsOps.WorkspaceNotificationLevel\n\n/** The lists a follow or mute write may send. */\nexport interface RelevancePatch {\n muted_workspaces?: string[]\n followed_workspaces?: string[]\n followed_threads?: string[]\n}\n\ntype Settings = NonNullable<ReturnType<typeof useUserSettings>['data']>\n\n/** A write of some of the lists, applied to the cached settings at once. */\nfunction useRelevanceSave() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (patch: RelevancePatch) => arbi.settings.update(patch),\n onMutate: async (patch) => {\n await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() })\n const previous = qc.getQueryData<Settings>(arbiQueryKeys.userSettings())\n qc.setQueryData<Settings>(arbiQueryKeys.userSettings(), (old) =>\n old ? { ...old, ...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\n/**\n * How much of a workspace reaches the user: `default`, `following` (everything) or `muted`\n * (nothing). `setLevel` moves the workspace between the two lists in one write.\n */\nexport function useWorkspaceNotificationLevel(\n workspaceId: string | null | undefined,\n options?: { enabled?: boolean }\n) {\n const qc = useQueryClient()\n const settings = useUserSettings(options)\n const save = useRelevanceSave()\n const level = workspaceId\n ? settingsOps.workspaceNotificationLevel(settings.data, workspaceId)\n : 'default'\n const setLevel = useCallback(\n (next: WorkspaceNotificationLevel) => {\n if (!workspaceId) return\n const current = qc.getQueryData<Settings>(arbiQueryKeys.userSettings()) ?? settings.data\n save.mutate(settingsOps.workspaceLevelPatch(current, workspaceId, next))\n },\n [qc, save, settings.data, workspaceId]\n )\n return {\n level,\n setLevel,\n isLoading: settings.isLoading,\n isSaving: save.isPending,\n error: save.error,\n }\n}\n\n/** What the host does once a follow switch is saved or refused (e.g. a toast: nothing else shows). */\nexport interface FollowSaveCallbacks {\n onSuccess?: () => void\n onError?: (error: Error) => void\n}\n\n/** Whether the user follows a thread (pushed everything in it), and the switch. */\nexport function useFollowThread(\n conversationId: string | null | undefined,\n options?: { enabled?: boolean }\n) {\n const qc = useQueryClient()\n const settings = useUserSettings(options)\n const save = useRelevanceSave()\n const following = !!conversationId && !!settings.data?.followed_threads?.includes(conversationId)\n const setFollowing = useCallback(\n (on: boolean, callbacks?: FollowSaveCallbacks) => {\n if (!conversationId) return\n const current = qc.getQueryData<Settings>(arbiQueryKeys.userSettings()) ?? settings.data\n save.mutate(\n {\n followed_threads: settingsOps.withMembership(\n current?.followed_threads,\n conversationId,\n on\n ),\n },\n callbacks\n )\n },\n [qc, save, settings.data, conversationId]\n )\n return {\n following,\n setFollowing,\n isLoading: settings.isLoading,\n isSaving: save.isPending,\n error: save.error,\n }\n}\n"],
5
+ "mappings": "AAUA,SAAS,mBAAmB;AAC5B,SAAS,aAAa,sBAAsB;AAC5C,SAAS,YAAY,mBAAmB;AACxC,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAehC,SAAS,mBAAmB;AAC1B,QAAM,OAAO,QAAQ;AACrB,QAAM,KAAK,eAAe;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,UAA0B,KAAK,SAAS,OAAO,KAAK;AAAA,IACjE,UAAU,OAAO,UAAU;AACzB,YAAM,GAAG,cAAc,EAAE,UAAU,cAAc,aAAa,EAAE,CAAC;AACjE,YAAM,WAAW,GAAG,aAAuB,cAAc,aAAa,CAAC;AACvE,SAAG;AAAA,QAAuB,cAAc,aAAa;AAAA,QAAG,CAAC,QACvD,MAAM,EAAE,GAAG,KAAK,GAAG,MAAM,IAAI;AAAA,MAC/B;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;AACH;AAMO,SAAS,8BACd,aACA,SACA;AACA,QAAM,KAAK,eAAe;AAC1B,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,QAAQ,cACV,YAAY,2BAA2B,SAAS,MAAM,WAAW,IACjE;AACJ,QAAM,WAAW;AAAA,IACf,CAAC,SAAqC;AACpC,UAAI,CAAC,YAAa;AAClB,YAAM,UAAU,GAAG,aAAuB,cAAc,aAAa,CAAC,KAAK,SAAS;AACpF,WAAK,OAAO,YAAY,oBAAoB,SAAS,aAAa,IAAI,CAAC;AAAA,IACzE;AAAA,IACA,CAAC,IAAI,MAAM,SAAS,MAAM,WAAW;AAAA,EACvC;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW,SAAS;AAAA,IACpB,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,EACd;AACF;AASO,SAAS,gBACd,gBACA,SACA;AACA,QAAM,KAAK,eAAe;AAC1B,QAAM,WAAW,gBAAgB,OAAO;AACxC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,YAAY,CAAC,CAAC,kBAAkB,CAAC,CAAC,SAAS,MAAM,kBAAkB,SAAS,cAAc;AAChG,QAAM,eAAe;AAAA,IACnB,CAAC,IAAa,cAAoC;AAChD,UAAI,CAAC,eAAgB;AACrB,YAAM,UAAU,GAAG,aAAuB,cAAc,aAAa,CAAC,KAAK,SAAS;AACpF,WAAK;AAAA,QACH;AAAA,UACE,kBAAkB,YAAY;AAAA,YAC5B,SAAS;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,IAAI,MAAM,SAAS,MAAM,cAAc;AAAA,EAC1C;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW,SAAS;AAAA,IACpB,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,EACd;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,37 @@
1
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { arbiQueryKeys } from "../hooks.js";
3
+ import { useAccountClient } from "./client.js";
4
+ function useSessions(options) {
5
+ const { client, enabled } = useAccountClient();
6
+ return useQuery({
7
+ queryKey: arbiQueryKeys.sessions(),
8
+ queryFn: () => client.listSessions(),
9
+ enabled: (options?.enabled ?? true) && enabled
10
+ });
11
+ }
12
+ function useTerminateSession() {
13
+ const { client } = useAccountClient();
14
+ const qc = useQueryClient();
15
+ return useMutation({
16
+ mutationFn: (sessionId) => client.terminateSession(sessionId),
17
+ onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.sessions() })
18
+ });
19
+ }
20
+ function useSignOut() {
21
+ const { client } = useAccountClient();
22
+ const qc = useQueryClient();
23
+ return useMutation({
24
+ mutationFn: (options = {}) => client.signOut(options),
25
+ onSettled: () => qc.clear()
26
+ });
27
+ }
28
+ function useCurrentSessionId() {
29
+ return useAccountClient().client.currentSessionId();
30
+ }
31
+ export {
32
+ useCurrentSessionId,
33
+ useSessions,
34
+ useSignOut,
35
+ useTerminateSession
36
+ };
37
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/sessions.ts"],
4
+ "sourcesContent": ["/**\n * Sessions: the list, end one, sign out, and tell which listed session is this device's. All\n * through the account client in scope (`useAccountClient`).\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { arbiQueryKeys } from '../hooks'\nimport { useAccountClient, type AccountSignOutOptions } from './client'\n\n/** The user's active sessions (devices and agents). */\nexport function useSessions(options?: { enabled?: boolean }) {\n const { client, enabled } = useAccountClient()\n return useQuery({\n queryKey: arbiQueryKeys.sessions(),\n queryFn: () => client.listSessions(),\n enabled: (options?.enabled ?? true) && enabled,\n })\n}\n\n/** End one of the user's sessions at once (not this device's: that is a sign-out). */\nexport function useTerminateSession() {\n const { client } = useAccountClient()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (sessionId: string) => client.terminateSession(sessionId),\n onSuccess: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.sessions() }),\n })\n}\n\n/** Sign out of this device, or (`everywhere`) of every device, this one included. */\nexport function useSignOut() {\n const { client } = useAccountClient()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (options: AccountSignOutOptions = {}) => client.signOut(options),\n onSettled: () => qc.clear(),\n })\n}\n\n/** The id this device's session carries in the `useSessions` list, or `null`. */\nexport function useCurrentSessionId(): string | null {\n return useAccountClient().client.currentSessionId()\n}\n"],
5
+ "mappings": "AAKA,SAAS,aAAa,UAAU,sBAAsB;AACtD,SAAS,qBAAqB;AAC9B,SAAS,wBAAoD;AAGtD,SAAS,YAAY,SAAiC;AAC3D,QAAM,EAAE,QAAQ,QAAQ,IAAI,iBAAiB;AAC7C,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,SAAS;AAAA,IACjC,SAAS,MAAM,OAAO,aAAa;AAAA,IACnC,UAAU,SAAS,WAAW,SAAS;AAAA,EACzC,CAAC;AACH;AAGO,SAAS,sBAAsB;AACpC,QAAM,EAAE,OAAO,IAAI,iBAAiB;AACpC,QAAM,KAAK,eAAe;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,cAAsB,OAAO,iBAAiB,SAAS;AAAA,IACpE,WAAW,MAAM,GAAG,kBAAkB,EAAE,UAAU,cAAc,SAAS,EAAE,CAAC;AAAA,EAC9E,CAAC;AACH;AAGO,SAAS,aAAa;AAC3B,QAAM,EAAE,OAAO,IAAI,iBAAiB;AACpC,QAAM,KAAK,eAAe;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,UAAiC,CAAC,MAAM,OAAO,QAAQ,OAAO;AAAA,IAC3E,WAAW,MAAM,GAAG,MAAM;AAAA,EAC5B,CAAC;AACH;AAGO,SAAS,sBAAqC;AACnD,SAAO,iBAAiB,EAAE,OAAO,iBAAiB;AACpD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,39 @@
1
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { useArbi } from "../useArbi.js";
3
+ import { arbiQueryKeys } from "../hooks.js";
4
+ function useUserSettings(options) {
5
+ const arbi = useArbi();
6
+ return useQuery({
7
+ queryKey: arbiQueryKeys.userSettings(),
8
+ queryFn: () => arbi.settings.get(),
9
+ // Edited about once a month, and every write here patches the cache: no refetch on each mount.
10
+ staleTime: 30 * 60 * 1e3,
11
+ refetchOnMount: options?.refetchOnMount,
12
+ enabled: (options?.enabled ?? true) && arbi.isLoggedIn
13
+ });
14
+ }
15
+ function useUpdateUserSettings() {
16
+ const arbi = useArbi();
17
+ const qc = useQueryClient();
18
+ return useMutation({
19
+ mutationFn: (patch) => arbi.settings.update(patch),
20
+ onMutate: async (patch) => {
21
+ await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() });
22
+ const previous = qc.getQueryData(arbiQueryKeys.userSettings());
23
+ qc.setQueryData(
24
+ arbiQueryKeys.userSettings(),
25
+ (old) => old ? { ...old, ...patch } : old
26
+ );
27
+ return { previous };
28
+ },
29
+ onError: (_err, _patch, context) => {
30
+ qc.setQueryData(arbiQueryKeys.userSettings(), context?.previous);
31
+ },
32
+ onSettled: () => qc.invalidateQueries({ queryKey: arbiQueryKeys.userSettings() })
33
+ });
34
+ }
35
+ export {
36
+ useUpdateUserSettings,
37
+ useUserSettings
38
+ };
39
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/settings.ts"],
4
+ "sourcesContent": ["/**\n * The user's settings record (flags, pins, preferences, notification choices) and its writes.\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport type { components } from '@arbidocs/client'\nimport { useArbi } from '../useArbi'\nimport { arbiQueryKeys } from '../hooks'\n\n/** A PATCH of the user settings: only the fields given change (lists are sent whole). */\nexport type UserSettingsPatch = components['schemas']['UserSettingsUpdate']\n\n/** The user's settings record (flags, pins, notification preferences). */\nexport function useUserSettings(options?: {\n enabled?: boolean\n refetchOnMount?: boolean | 'always'\n}) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.userSettings(),\n queryFn: () => arbi.settings.get(),\n // Edited about once a month, and every write here patches the cache: no refetch on each mount.\n staleTime: 30 * 60 * 1000,\n refetchOnMount: options?.refetchOnMount,\n enabled: (options?.enabled ?? true) && arbi.isLoggedIn,\n })\n}\n\n/**\n * Write some of the user settings. The cached record takes the patch straight away, so a switch\n * does not wait for the round trip; a failed write rolls it back.\n */\nexport function useUpdateUserSettings() {\n const arbi = useArbi()\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (patch: UserSettingsPatch) => arbi.settings.update(patch),\n onMutate: async (patch) => {\n await qc.cancelQueries({ queryKey: arbiQueryKeys.userSettings() })\n const previous = qc.getQueryData(arbiQueryKeys.userSettings())\n qc.setQueryData(arbiQueryKeys.userSettings(), (old: object | undefined) =>\n old ? { ...old, ...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"],
5
+ "mappings": "AAIA,SAAS,aAAa,UAAU,sBAAsB;AAEtD,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAMvB,SAAS,gBAAgB,SAG7B;AACD,QAAM,OAAO,QAAQ;AACrB,SAAO,SAAS;AAAA,IACd,UAAU,cAAc,aAAa;AAAA,IACrC,SAAS,MAAM,KAAK,SAAS,IAAI;AAAA;AAAA,IAEjC,WAAW,KAAK,KAAK;AAAA,IACrB,gBAAgB,SAAS;AAAA,IACzB,UAAU,SAAS,WAAW,SAAS,KAAK;AAAA,EAC9C,CAAC;AACH;AAMO,SAAS,wBAAwB;AACtC,QAAM,OAAO,QAAQ;AACrB,QAAM,KAAK,eAAe;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC,UAA6B,KAAK,SAAS,OAAO,KAAK;AAAA,IACpE,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,GAAG,MAAM,IAAI;AAAA,MAC/B;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;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ function isTableViewOf(view, workspaceId, table) {
2
+ return view.workspace === workspaceId && (view.table ?? null) === table;
3
+ }
4
+ function viewsOfTable(all, workspaceId, table) {
5
+ if (!workspaceId) return [];
6
+ const byName = /* @__PURE__ */ new Map();
7
+ for (const view of all ?? []) {
8
+ if (isTableViewOf(view, workspaceId, table)) byName.set(view.name, view);
9
+ }
10
+ return [...byName.values()];
11
+ }
12
+ export {
13
+ isTableViewOf,
14
+ viewsOfTable
15
+ };
16
+ //# sourceMappingURL=table-views.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/account/table-views.ts"],
4
+ "sourcesContent": ["/**\n * Saved table views in the user settings (`tableviews`): one array holding the views of every\n * table, keyed by workspace and table. A view without `table` belongs to the workspace's documents\n * table; one with `table` to that database (`dbs-\u2026`). The grids write them (blocks' `useTableViews`);\n * a chart over a database reads a view's columns.\n */\nimport type { components } from '@arbidocs/client'\n\nexport type TableView = components['schemas']['TableView']\n\n/** The table a view belongs to: a database id, or `null` for the documents table. */\nexport type TableViewTable = string | null\n\n/** Whether `view` is one of `table`'s views in the workspace. */\nexport function isTableViewOf(view: TableView, workspaceId: string, table: TableViewTable) {\n return view.workspace === workspaceId && (view.table ?? null) === table\n}\n\n/** The views of one table, one per name (the last one stored wins). */\nexport function viewsOfTable(\n all: readonly TableView[] | null | undefined,\n workspaceId: string | null | undefined,\n table: TableViewTable\n): TableView[] {\n if (!workspaceId) return []\n const byName = new Map<string, TableView>()\n for (const view of all ?? []) {\n if (isTableViewOf(view, workspaceId, table)) byName.set(view.name, view)\n }\n return [...byName.values()]\n}\n"],
5
+ "mappings": "AAcO,SAAS,cAAc,MAAiB,aAAqB,OAAuB;AACzF,SAAO,KAAK,cAAc,gBAAgB,KAAK,SAAS,UAAU;AACpE;AAGO,SAAS,aACd,KACA,aACA,OACa;AACb,MAAI,CAAC,YAAa,QAAO,CAAC;AAC1B,QAAM,SAAS,oBAAI,IAAuB;AAC1C,aAAW,QAAQ,OAAO,CAAC,GAAG;AAC5B,QAAI,cAAc,MAAM,aAAa,KAAK,EAAG,QAAO,IAAI,KAAK,MAAM,IAAI;AAAA,EACzE;AACA,SAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC5B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,83 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Sparkles, Loader2, AlertTriangle, Copy, Check, ShieldCheck } from "lucide-react";
4
+ import { cn } from "../lib/utils.js";
5
+ import { AiMarkdown } from "./AiMarkdown.js";
6
+ function AiAnswer({
7
+ status,
8
+ text,
9
+ stepCount,
10
+ error,
11
+ className,
12
+ emptyHint,
13
+ groundedNote = "Grounded in the live workspace \xB7 verify citations before relying on it",
14
+ runningHint = "Reading the documents\u2026",
15
+ testId = "ai-answer"
16
+ }) {
17
+ const [copied, setCopied] = useState(false);
18
+ const running = status === "running";
19
+ const hasText = text.trim().length > 0;
20
+ const copy = async () => {
21
+ await navigator.clipboard.writeText(text);
22
+ setCopied(true);
23
+ setTimeout(() => setCopied(false), 1600);
24
+ };
25
+ if (status === "idle" && !hasText) {
26
+ return emptyHint ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground", className), "data-testid": `${testId}-empty`, children: emptyHint }) : null;
27
+ }
28
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-3", className), "data-testid": testId, "data-status": status, children: [
29
+ running && /* @__PURE__ */ jsxs(
30
+ "div",
31
+ {
32
+ className: "flex items-center gap-2 text-xs font-medium text-ai-accent",
33
+ "data-testid": `${testId}-thinking`,
34
+ children: [
35
+ /* @__PURE__ */ jsx(Loader2, { className: "size-3.5 animate-spin" }),
36
+ stepCount && stepCount > 0 ? `Working \u2014 ${stepCount} step${stepCount === 1 ? "" : "s"}\u2026` : "Thinking\u2026"
37
+ ]
38
+ }
39
+ ),
40
+ status === "error" && !hasText && /* @__PURE__ */ jsxs(
41
+ "div",
42
+ {
43
+ className: "flex items-start gap-2 rounded-lg border border-destructive/30 bg-destructive/5 p-3 text-sm text-destructive",
44
+ "data-testid": `${testId}-error`,
45
+ children: [
46
+ /* @__PURE__ */ jsx(AlertTriangle, { className: "mt-0.5 size-4 shrink-0" }),
47
+ /* @__PURE__ */ jsx("span", { children: error ?? "The assistant request failed." })
48
+ ]
49
+ }
50
+ ),
51
+ hasText && /* @__PURE__ */ jsxs(Fragment, { children: [
52
+ /* @__PURE__ */ jsx(AiMarkdown, { isStreaming: running, children: text }),
53
+ !running && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-t border-border pt-2.5", children: [
54
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground", children: [
55
+ /* @__PURE__ */ jsx(ShieldCheck, { className: "size-3.5 text-ai-accent" }),
56
+ groundedNote
57
+ ] }),
58
+ /* @__PURE__ */ jsxs(
59
+ "button",
60
+ {
61
+ type: "button",
62
+ onClick: copy,
63
+ className: "inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground",
64
+ "data-testid": `${testId}-copy`,
65
+ children: [
66
+ copied ? /* @__PURE__ */ jsx(Check, { className: "size-3.5 text-ai-accent" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3.5" }),
67
+ copied ? "Copied" : "Copy"
68
+ ]
69
+ }
70
+ )
71
+ ] })
72
+ ] }),
73
+ running && !hasText && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-sm text-muted-foreground", children: [
74
+ /* @__PURE__ */ jsx(Sparkles, { className: "size-4 animate-pulse text-ai-accent" }),
75
+ " ",
76
+ runningHint
77
+ ] })
78
+ ] });
79
+ }
80
+ export {
81
+ AiAnswer
82
+ };
83
+ //# sourceMappingURL=AiAnswer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ai/AiAnswer.tsx"],
4
+ "sourcesContent": ["import { useState } from 'react'\nimport { Sparkles, Loader2, AlertTriangle, Copy, Check, ShieldCheck } from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport type { AiTaskStatus } from './engine'\nimport { AiMarkdown } from './AiMarkdown'\n\n/**\n * Renders the live state of a single agentic task: streaming tokens, a \"thinking\"\n * indicator with the running step count, errors, and a grounded/cited footer with\n * copy-to-clipboard. Shared by every AI feature so streaming looks identical\n * everywhere. Copy is customisable via `groundedNote` / `runningHint`.\n */\nexport function AiAnswer({\n status,\n text,\n stepCount,\n error,\n className,\n emptyHint,\n groundedNote = 'Grounded in the live workspace \u00B7 verify citations before relying on it',\n runningHint = 'Reading the documents\u2026',\n testId = 'ai-answer',\n}: {\n status: AiTaskStatus\n text: string\n stepCount?: number\n error?: string | null\n className?: string\n emptyHint?: string\n groundedNote?: string\n runningHint?: string\n testId?: string\n}) {\n const [copied, setCopied] = useState(false)\n const running = status === 'running'\n const hasText = text.trim().length > 0\n\n const copy = async () => {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 1600)\n }\n\n if (status === 'idle' && !hasText) {\n return emptyHint ? (\n <p className={cn('text-sm text-muted-foreground', className)} data-testid={`${testId}-empty`}>\n {emptyHint}\n </p>\n ) : null\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId} data-status={status}>\n {running && (\n <div\n className=\"flex items-center gap-2 text-xs font-medium text-ai-accent\"\n data-testid={`${testId}-thinking`}\n >\n <Loader2 className=\"size-3.5 animate-spin\" />\n {stepCount && stepCount > 0\n ? `Working \u2014 ${stepCount} step${stepCount === 1 ? '' : 's'}\u2026`\n : 'Thinking\u2026'}\n </div>\n )}\n\n {status === 'error' && !hasText && (\n <div\n className=\"flex items-start gap-2 rounded-lg border border-destructive/30 bg-destructive/5 p-3 text-sm text-destructive\"\n data-testid={`${testId}-error`}\n >\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />\n <span>{error ?? 'The assistant request failed.'}</span>\n </div>\n )}\n\n {hasText && (\n <>\n <AiMarkdown isStreaming={running}>{text}</AiMarkdown>\n {!running && (\n <div className=\"flex items-center justify-between border-t border-border pt-2.5\">\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <ShieldCheck className=\"size-3.5 text-ai-accent\" />\n {groundedNote}\n </span>\n <button\n type=\"button\"\n onClick={copy}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={`${testId}-copy`}\n >\n {copied ? (\n <Check className=\"size-3.5 text-ai-accent\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n )}\n </>\n )}\n\n {running && !hasText && (\n <div className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <Sparkles className=\"size-4 animate-pulse text-ai-accent\" /> {runningHint}\n </div>\n )}\n </div>\n )\n}\n"],
5
+ "mappings": "AA6CM,SA+BE,UA/BF,KASE,YATF;AA7CN,SAAS,gBAAgB;AACzB,SAAS,UAAU,SAAS,eAAe,MAAM,OAAO,mBAAmB;AAC3E,SAAS,UAAU;AAEnB,SAAS,kBAAkB;AAQpB,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,cAAc;AAAA,EACd,SAAS;AACX,GAUG;AACD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,UAAU,WAAW;AAC3B,QAAM,UAAU,KAAK,KAAK,EAAE,SAAS;AAErC,QAAM,OAAO,YAAY;AACvB,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,cAAU,IAAI;AACd,eAAW,MAAM,UAAU,KAAK,GAAG,IAAI;AAAA,EACzC;AAEA,MAAI,WAAW,UAAU,CAAC,SAAS;AACjC,WAAO,YACL,oBAAC,OAAE,WAAW,GAAG,iCAAiC,SAAS,GAAG,eAAa,GAAG,MAAM,UACjF,qBACH,IACE;AAAA,EACN;AAEA,SACE,qBAAC,SAAI,WAAW,GAAG,aAAa,SAAS,GAAG,eAAa,QAAQ,eAAa,QAC3E;AAAA,eACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAa,GAAG,MAAM;AAAA,QAEtB;AAAA,8BAAC,WAAQ,WAAU,yBAAwB;AAAA,UAC1C,aAAa,YAAY,IACtB,kBAAa,SAAS,QAAQ,cAAc,IAAI,KAAK,GAAG,WACxD;AAAA;AAAA;AAAA,IACN;AAAA,IAGD,WAAW,WAAW,CAAC,WACtB;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAa,GAAG,MAAM;AAAA,QAEtB;AAAA,8BAAC,iBAAc,WAAU,0BAAyB;AAAA,UAClD,oBAAC,UAAM,mBAAS,iCAAgC;AAAA;AAAA;AAAA,IAClD;AAAA,IAGD,WACC,iCACE;AAAA,0BAAC,cAAW,aAAa,SAAU,gBAAK;AAAA,MACvC,CAAC,WACA,qBAAC,SAAI,WAAU,mEACb;AAAA,6BAAC,UAAK,WAAU,kEACd;AAAA,8BAAC,eAAY,WAAU,2BAA0B;AAAA,UAChD;AAAA,WACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACV,eAAa,GAAG,MAAM;AAAA,YAErB;AAAA,uBACC,oBAAC,SAAM,WAAU,2BAA0B,IAE3C,oBAAC,QAAK,WAAU,YAAW;AAAA,cAE5B,SAAS,WAAW;AAAA;AAAA;AAAA,QACvB;AAAA,SACF;AAAA,OAEJ;AAAA,IAGD,WAAW,CAAC,WACX,qBAAC,SAAI,WAAU,2DACb;AAAA,0BAAC,YAAS,WAAU,uCAAsC;AAAA,MAAE;AAAA,MAAE;AAAA,OAChE;AAAA,KAEJ;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,40 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { MarkdownRenderer } from "./MarkdownRenderer.js";
3
+ const AI_COMPONENTS = {
4
+ a: (p) => /* @__PURE__ */ jsx(
5
+ "a",
6
+ {
7
+ className: "text-ai-accent underline underline-offset-2",
8
+ target: "_blank",
9
+ rel: "noopener noreferrer",
10
+ ...p
11
+ }
12
+ ),
13
+ // Redline marks: deletions in red strike, <ins>/<mark> additions accented.
14
+ del: (p) => /* @__PURE__ */ jsx("del", { className: "rounded bg-destructive/10 text-destructive decoration-destructive/60", ...p }),
15
+ ins: (p) => /* @__PURE__ */ jsx("ins", { className: "rounded bg-ai-accent-soft px-0.5 text-ai-accent no-underline", ...p }),
16
+ mark: (p) => /* @__PURE__ */ jsx("mark", { className: "rounded bg-ai-accent-soft px-0.5 text-ai-accent", ...p }),
17
+ thead: (p) => /* @__PURE__ */ jsx("thead", { className: "bg-secondary/60", ...p })
18
+ };
19
+ function AiMarkdown({
20
+ children,
21
+ className,
22
+ isStreaming,
23
+ allowHtml
24
+ }) {
25
+ return /* @__PURE__ */ jsx(
26
+ MarkdownRenderer,
27
+ {
28
+ className: className ?? "text-sm",
29
+ components: AI_COMPONENTS,
30
+ isStreaming,
31
+ allowHtml,
32
+ testId: "ai-markdown",
33
+ children
34
+ }
35
+ );
36
+ }
37
+ export {
38
+ AiMarkdown
39
+ };
40
+ //# sourceMappingURL=AiMarkdown.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ai/AiMarkdown.tsx"],
4
+ "sourcesContent": ["import type { Components } from 'react-markdown'\nimport { MarkdownRenderer } from './MarkdownRenderer'\n\n/**\n * Renders agent output in the shared house style, layered with the AI-branded and\n * redline-specific overrides on top of the kit's {@link MarkdownRenderer}: accent\n * links and `<del>`/`<ins>`/`<mark>` as tracked-changes (deletions red-strike,\n * insertions accented). Everything else \u2014 headings, lists, GFM tables, fenced\n * code blocks, blockquotes, safe links \u2014 comes from the shared renderer, so AI\n * answers, chat messages and parsed documents all look identical.\n *\n * Token-neutral: shadcn semantic tokens plus the kit's `ai-accent` contract.\n */\nconst AI_COMPONENTS: Partial<Components> = {\n a: (p) => (\n <a\n className=\"text-ai-accent underline underline-offset-2\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...p}\n />\n ),\n // Redline marks: deletions in red strike, <ins>/<mark> additions accented.\n del: (p) => (\n <del className=\"rounded bg-destructive/10 text-destructive decoration-destructive/60\" {...p} />\n ),\n ins: (p) => (\n <ins className=\"rounded bg-ai-accent-soft px-0.5 text-ai-accent no-underline\" {...p} />\n ),\n mark: (p) => <mark className=\"rounded bg-ai-accent-soft px-0.5 text-ai-accent\" {...p} />,\n thead: (p) => <thead className=\"bg-secondary/60\" {...p} />,\n}\n\nexport function AiMarkdown({\n children,\n className,\n isStreaming,\n allowHtml,\n}: {\n children: string\n className?: string\n isStreaming?: boolean\n /** See {@link MarkdownRenderer}: false keeps inline HTML as text. */\n allowHtml?: boolean\n}) {\n return (\n <MarkdownRenderer\n className={className ?? 'text-sm'}\n components={AI_COMPONENTS}\n isStreaming={isStreaming}\n allowHtml={allowHtml}\n testId=\"ai-markdown\"\n >\n {children}\n </MarkdownRenderer>\n )\n}\n"],
5
+ "mappings": "AAeI;AAdJ,SAAS,wBAAwB;AAYjC,MAAM,gBAAqC;AAAA,EACzC,GAAG,CAAC,MACF;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,QAAO;AAAA,MACP,KAAI;AAAA,MACH,GAAG;AAAA;AAAA,EACN;AAAA;AAAA,EAGF,KAAK,CAAC,MACJ,oBAAC,SAAI,WAAU,wEAAwE,GAAG,GAAG;AAAA,EAE/F,KAAK,CAAC,MACJ,oBAAC,SAAI,WAAU,gEAAgE,GAAG,GAAG;AAAA,EAEvF,MAAM,CAAC,MAAM,oBAAC,UAAK,WAAU,mDAAmD,GAAG,GAAG;AAAA,EACtF,OAAO,CAAC,MAAM,oBAAC,WAAM,WAAU,mBAAmB,GAAG,GAAG;AAC1D;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,aAAa;AAAA,MACxB,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,QAAO;AAAA,MAEN;AAAA;AAAA,EACH;AAEJ;",
6
+ "names": []
7
+ }