@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,63 @@
1
+ import { useCallback } from "react";
2
+ import { useArbi } from "../useArbi.js";
3
+ import { useUploadUrls } from "./documents-writes.js";
4
+ import { useDocumentsSupport } from "./support.js";
5
+ import { extractZipFile, UPLOAD_MAX_FILE_SIZE } from "./upload-files.js";
6
+ function isZipUrl(url) {
7
+ try {
8
+ return new URL(url).pathname.toLowerCase().endsWith(".zip");
9
+ } catch {
10
+ return url.toLowerCase().endsWith(".zip");
11
+ }
12
+ }
13
+ function useUploadFromUrls() {
14
+ const arbi = useArbi();
15
+ const { mutateAsync: uploadUrls } = useUploadUrls();
16
+ const { extractZip = extractZipFile } = useDocumentsSupport();
17
+ return useCallback(
18
+ async ({
19
+ urls,
20
+ shared,
21
+ configExtId,
22
+ workspaceId: named
23
+ }) => {
24
+ const workspaceId = named ?? arbi.getWorkspaceId();
25
+ const zipUrls = urls.filter(isZipUrl);
26
+ const others = urls.filter((url) => !isZipUrl(url));
27
+ const zipFiles = [];
28
+ const oversizedInZips = [];
29
+ const failedZipUrls = [];
30
+ await Promise.all(
31
+ zipUrls.map(async (url) => {
32
+ try {
33
+ const response = await fetch(url);
34
+ if (!response.ok) throw new Error(`HTTP ${response.status}`);
35
+ const name = decodeURIComponent(new URL(url).pathname.split("/").pop() || "") || "archive.zip";
36
+ const zip = new File([await response.blob()], name, { type: "application/zip" });
37
+ const { extractedFiles, skippedLargeFiles } = await extractZip(
38
+ zip,
39
+ UPLOAD_MAX_FILE_SIZE
40
+ );
41
+ zipFiles.push(...extractedFiles);
42
+ oversizedInZips.push(...skippedLargeFiles);
43
+ } catch {
44
+ failedZipUrls.push(url);
45
+ }
46
+ })
47
+ );
48
+ const result = others.length ? await uploadUrls({ urls: others, shared, configExtId, workspaceId }) : {};
49
+ return {
50
+ docIds: result.doc_ext_ids ?? [],
51
+ skipped: result.skipped ?? [],
52
+ zipFiles,
53
+ oversizedInZips,
54
+ failedZipUrls
55
+ };
56
+ },
57
+ [arbi, uploadUrls, extractZip]
58
+ );
59
+ }
60
+ export {
61
+ useUploadFromUrls
62
+ };
63
+ //# sourceMappingURL=useUploadFromUrls.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/documents/useUploadFromUrls.ts"],
4
+ "sourcesContent": ["/**\n * Add documents from web addresses to a workspace (default: the one open when it is called, named on\n * the request so a switch while a zip archive is fetched cannot move them). A zip archive's address is fetched here\n * and opened into its files, handed back to be uploaded like chosen files (the server cannot open\n * one); every other address is fetched by the server.\n */\n\nimport { useCallback } from 'react'\nimport { useArbi } from '../useArbi'\nimport { useUploadUrls } from './documents-writes'\nimport { useDocumentsSupport } from './support'\nimport { extractZipFile, UPLOAD_MAX_FILE_SIZE } from './upload-files'\n\nexport interface UploadFromUrlsInput {\n urls: string[]\n shared: boolean\n configExtId?: string | null\n /** The workspace the documents go to. Default: the one open when this is called. */\n workspaceId?: string | null\n}\n\nexport interface UploadFromUrlsResult {\n /** The documents the server made. */\n docIds: string[]\n /** Addresses the server did not take, and why. */\n skipped: { file_name: string; reason: string }[]\n /** The files of the zip archives, to upload like chosen files. */\n zipFiles: File[]\n /** Files inside the archives too large to take. */\n oversizedInZips: string[]\n /** Archive addresses that could not be fetched or opened. */\n failedZipUrls: string[]\n}\n\nfunction isZipUrl(url: string): boolean {\n try {\n return new URL(url).pathname.toLowerCase().endsWith('.zip')\n } catch {\n return url.toLowerCase().endsWith('.zip')\n }\n}\n\nexport function useUploadFromUrls() {\n const arbi = useArbi()\n const { mutateAsync: uploadUrls } = useUploadUrls()\n const { extractZip = extractZipFile } = useDocumentsSupport()\n return useCallback(\n async ({\n urls,\n shared,\n configExtId,\n workspaceId: named,\n }: UploadFromUrlsInput): Promise<UploadFromUrlsResult> => {\n const workspaceId = named ?? arbi.getWorkspaceId()\n const zipUrls = urls.filter(isZipUrl)\n const others = urls.filter((url) => !isZipUrl(url))\n const zipFiles: File[] = []\n const oversizedInZips: string[] = []\n const failedZipUrls: string[] = []\n await Promise.all(\n zipUrls.map(async (url) => {\n try {\n const response = await fetch(url)\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const name =\n decodeURIComponent(new URL(url).pathname.split('/').pop() || '') || 'archive.zip'\n const zip = new File([await response.blob()], name, { type: 'application/zip' })\n const { extractedFiles, skippedLargeFiles } = await extractZip(\n zip,\n UPLOAD_MAX_FILE_SIZE\n )\n zipFiles.push(...extractedFiles)\n oversizedInZips.push(...skippedLargeFiles)\n } catch {\n failedZipUrls.push(url)\n }\n })\n )\n const result = others.length\n ? ((await uploadUrls({ urls: others, shared, configExtId, workspaceId })) as {\n doc_ext_ids?: string[]\n skipped?: { file_name: string; reason: string }[]\n })\n : {}\n return {\n docIds: result.doc_ext_ids ?? [],\n skipped: result.skipped ?? [],\n zipFiles,\n oversizedInZips,\n failedZipUrls,\n }\n },\n [arbi, uploadUrls, extractZip]\n )\n}\n"],
5
+ "mappings": "AAOA,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AACpC,SAAS,gBAAgB,4BAA4B;AAuBrD,SAAS,SAAS,KAAsB;AACtC,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,EAAE,SAAS,YAAY,EAAE,SAAS,MAAM;AAAA,EAC5D,QAAQ;AACN,WAAO,IAAI,YAAY,EAAE,SAAS,MAAM;AAAA,EAC1C;AACF;AAEO,SAAS,oBAAoB;AAClC,QAAM,OAAO,QAAQ;AACrB,QAAM,EAAE,aAAa,WAAW,IAAI,cAAc;AAClD,QAAM,EAAE,aAAa,eAAe,IAAI,oBAAoB;AAC5D,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACf,MAA0D;AACxD,YAAM,cAAc,SAAS,KAAK,eAAe;AACjD,YAAM,UAAU,KAAK,OAAO,QAAQ;AACpC,YAAM,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC;AAClD,YAAM,WAAmB,CAAC;AAC1B,YAAM,kBAA4B,CAAC;AACnC,YAAM,gBAA0B,CAAC;AACjC,YAAM,QAAQ;AAAA,QACZ,QAAQ,IAAI,OAAO,QAAQ;AACzB,cAAI;AACF,kBAAM,WAAW,MAAM,MAAM,GAAG;AAChC,gBAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,EAAE;AAC3D,kBAAM,OACJ,mBAAmB,IAAI,IAAI,GAAG,EAAE,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,KAAK;AACtE,kBAAM,MAAM,IAAI,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/E,kBAAM,EAAE,gBAAgB,kBAAkB,IAAI,MAAM;AAAA,cAClD;AAAA,cACA;AAAA,YACF;AACA,qBAAS,KAAK,GAAG,cAAc;AAC/B,4BAAgB,KAAK,GAAG,iBAAiB;AAAA,UAC3C,QAAQ;AACN,0BAAc,KAAK,GAAG;AAAA,UACxB;AAAA,QACF,CAAC;AAAA,MACH;AACA,YAAM,SAAS,OAAO,SAChB,MAAM,WAAW,EAAE,MAAM,QAAQ,QAAQ,aAAa,YAAY,CAAC,IAIrE,CAAC;AACL,aAAO;AAAA,QACL,QAAQ,OAAO,eAAe,CAAC;AAAA,QAC/B,SAAS,OAAO,WAAW,CAAC;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,MAAM,YAAY,UAAU;AAAA,EAC/B;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,62 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ const ELAPSED_TICK_MS = 200;
3
+ function useVideoRecorder(stream) {
4
+ const [state, setState] = useState("idle");
5
+ const [elapsedMs, setElapsedMs] = useState(0);
6
+ const [blob, setBlob] = useState(null);
7
+ const [mimeType, setMimeType] = useState(null);
8
+ const mediaRecorderRef = useRef(null);
9
+ const chunksRef = useRef([]);
10
+ const startedAtRef = useRef(0);
11
+ const tickRef = useRef(null);
12
+ const stateRef = useRef("idle");
13
+ stateRef.current = state;
14
+ const stopTicking = useCallback(() => {
15
+ if (tickRef.current !== null) clearInterval(tickRef.current);
16
+ tickRef.current = null;
17
+ }, []);
18
+ useEffect(() => stopTicking, [stopTicking]);
19
+ const start = useCallback(() => {
20
+ if (!stream || stateRef.current === "recording") return;
21
+ const mt = MediaRecorder.isTypeSupported("video/webm") ? "video/webm" : "video/mp4";
22
+ const recorder = new MediaRecorder(stream, { mimeType: mt });
23
+ chunksRef.current = [];
24
+ recorder.ondataavailable = (e) => {
25
+ if (e.data.size > 0) chunksRef.current.push(e.data);
26
+ };
27
+ mediaRecorderRef.current = recorder;
28
+ setMimeType(mt);
29
+ setBlob(null);
30
+ startedAtRef.current = performance.now();
31
+ setElapsedMs(0);
32
+ recorder.start();
33
+ setState("recording");
34
+ tickRef.current = setInterval(() => {
35
+ setElapsedMs(performance.now() - startedAtRef.current);
36
+ }, ELAPSED_TICK_MS);
37
+ }, [stream]);
38
+ const stop = useCallback(() => {
39
+ const recorder = mediaRecorderRef.current;
40
+ if (!recorder || recorder.state === "inactive") return;
41
+ const finalElapsed = performance.now() - startedAtRef.current;
42
+ stopTicking();
43
+ recorder.onstop = () => {
44
+ const finalBlob = chunksRef.current.length ? new Blob(chunksRef.current, { type: recorder.mimeType }) : null;
45
+ setBlob(finalBlob);
46
+ setElapsedMs(finalElapsed);
47
+ setState("stopped");
48
+ };
49
+ recorder.stop();
50
+ }, [stopTicking]);
51
+ const reset = useCallback(() => {
52
+ setState("idle");
53
+ setBlob(null);
54
+ setElapsedMs(0);
55
+ setMimeType(null);
56
+ }, []);
57
+ return { state, elapsedMs, blob, mimeType, start, stop, reset };
58
+ }
59
+ export {
60
+ useVideoRecorder
61
+ };
62
+ //# sourceMappingURL=useVideoRecorder.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/documents/useVideoRecorder.ts"],
4
+ "sourcesContent": ["/**\n * useVideoRecorder\n *\n * MediaRecorder lifecycle for video capture, layered on top of an\n * already-live camera `MediaStream` (see useCameraStream \u2014 this hook does\n * NOT call getUserMedia itself, so the same stream stays open across a\n * stop()/reset() \"record again\" without re-prompting for permission).\n *\n * Deliberately simpler than useAudioRecorder: no pause/resume (tap-to-start,\n * tap-to-stop is the whole interaction \u2014 see VideoCapture) and no\n * level meter (there's a live video preview instead; a bar-graph loudness\n * meter would be redundant chrome on top of it).\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type VideoRecorderState = 'idle' | 'recording' | 'stopped'\n\nexport interface UseVideoRecorderResult {\n state: VideoRecorderState\n /** Recorded duration so far (ms). Frozen at its final value once stopped. */\n elapsedMs: number\n /** The finished recording. Only set once state === 'stopped'. */\n blob: Blob | null\n /** The MediaRecorder MIME type used (e.g. 'video/webm'). */\n mimeType: string | null\n start: () => void\n stop: () => void\n /** Back to idle: clears blob/elapsedMs, ready to record again on the same stream. */\n reset: () => void\n}\n\nconst ELAPSED_TICK_MS = 200\n\n/** @param stream The live camera stream to record \u2014 null while the camera\n * hasn't started yet; start() is a no-op until it's set. */\nexport function useVideoRecorder(stream: MediaStream | null): UseVideoRecorderResult {\n const [state, setState] = useState<VideoRecorderState>('idle')\n const [elapsedMs, setElapsedMs] = useState(0)\n const [blob, setBlob] = useState<Blob | null>(null)\n const [mimeType, setMimeType] = useState<string | null>(null)\n\n const mediaRecorderRef = useRef<MediaRecorder | null>(null)\n const chunksRef = useRef<Blob[]>([])\n const startedAtRef = useRef(0)\n const tickRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const stateRef = useRef<VideoRecorderState>('idle')\n stateRef.current = state\n\n const stopTicking = useCallback(() => {\n if (tickRef.current !== null) clearInterval(tickRef.current)\n tickRef.current = null\n }, [])\n\n useEffect(() => stopTicking, [stopTicking])\n\n const start = useCallback(() => {\n if (!stream || stateRef.current === 'recording') return\n const mt = MediaRecorder.isTypeSupported('video/webm') ? 'video/webm' : 'video/mp4'\n const recorder = new MediaRecorder(stream, { mimeType: mt })\n chunksRef.current = []\n recorder.ondataavailable = (e) => {\n if (e.data.size > 0) chunksRef.current.push(e.data)\n }\n mediaRecorderRef.current = recorder\n setMimeType(mt)\n setBlob(null)\n startedAtRef.current = performance.now()\n setElapsedMs(0)\n recorder.start()\n setState('recording')\n tickRef.current = setInterval(() => {\n setElapsedMs(performance.now() - startedAtRef.current)\n }, ELAPSED_TICK_MS)\n }, [stream])\n\n const stop = useCallback(() => {\n const recorder = mediaRecorderRef.current\n if (!recorder || recorder.state === 'inactive') return\n const finalElapsed = performance.now() - startedAtRef.current\n stopTicking()\n recorder.onstop = () => {\n const finalBlob = chunksRef.current.length\n ? new Blob(chunksRef.current, { type: recorder.mimeType })\n : null\n setBlob(finalBlob)\n setElapsedMs(finalElapsed)\n setState('stopped')\n }\n recorder.stop()\n }, [stopTicking])\n\n const reset = useCallback(() => {\n setState('idle')\n setBlob(null)\n setElapsedMs(0)\n setMimeType(null)\n }, [])\n\n return { state, elapsedMs, blob, mimeType, start, stop, reset }\n}\n"],
5
+ "mappings": "AAcA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AAkBzD,MAAM,kBAAkB;AAIjB,SAAS,iBAAiB,QAAoD;AACnF,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA6B,MAAM;AAC7D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAClD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAE5D,QAAM,mBAAmB,OAA6B,IAAI;AAC1D,QAAM,YAAY,OAAe,CAAC,CAAC;AACnC,QAAM,eAAe,OAAO,CAAC;AAC7B,QAAM,UAAU,OAA8C,IAAI;AAClE,QAAM,WAAW,OAA2B,MAAM;AAClD,WAAS,UAAU;AAEnB,QAAM,cAAc,YAAY,MAAM;AACpC,QAAI,QAAQ,YAAY,KAAM,eAAc,QAAQ,OAAO;AAC3D,YAAQ,UAAU;AAAA,EACpB,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM,aAAa,CAAC,WAAW,CAAC;AAE1C,QAAM,QAAQ,YAAY,MAAM;AAC9B,QAAI,CAAC,UAAU,SAAS,YAAY,YAAa;AACjD,UAAM,KAAK,cAAc,gBAAgB,YAAY,IAAI,eAAe;AACxE,UAAM,WAAW,IAAI,cAAc,QAAQ,EAAE,UAAU,GAAG,CAAC;AAC3D,cAAU,UAAU,CAAC;AACrB,aAAS,kBAAkB,CAAC,MAAM;AAChC,UAAI,EAAE,KAAK,OAAO,EAAG,WAAU,QAAQ,KAAK,EAAE,IAAI;AAAA,IACpD;AACA,qBAAiB,UAAU;AAC3B,gBAAY,EAAE;AACd,YAAQ,IAAI;AACZ,iBAAa,UAAU,YAAY,IAAI;AACvC,iBAAa,CAAC;AACd,aAAS,MAAM;AACf,aAAS,WAAW;AACpB,YAAQ,UAAU,YAAY,MAAM;AAClC,mBAAa,YAAY,IAAI,IAAI,aAAa,OAAO;AAAA,IACvD,GAAG,eAAe;AAAA,EACpB,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,OAAO,YAAY,MAAM;AAC7B,UAAM,WAAW,iBAAiB;AAClC,QAAI,CAAC,YAAY,SAAS,UAAU,WAAY;AAChD,UAAM,eAAe,YAAY,IAAI,IAAI,aAAa;AACtD,gBAAY;AACZ,aAAS,SAAS,MAAM;AACtB,YAAM,YAAY,UAAU,QAAQ,SAChC,IAAI,KAAK,UAAU,SAAS,EAAE,MAAM,SAAS,SAAS,CAAC,IACvD;AACJ,cAAQ,SAAS;AACjB,mBAAa,YAAY;AACzB,eAAS,SAAS;AAAA,IACpB;AACA,aAAS,KAAK;AAAA,EAChB,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,QAAQ,YAAY,MAAM;AAC9B,aAAS,MAAM;AACf,YAAQ,IAAI;AACZ,iBAAa,CAAC;AACd,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,OAAO,WAAW,MAAM,UAAU,OAAO,MAAM,MAAM;AAChE;",
6
+ "names": []
7
+ }
@@ -0,0 +1,61 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { ArbiBotHeadIcon } from "../icons/ArbiBotHeadIcon.js";
3
+ import { cn } from "../lib/utils.js";
4
+ function AgentBadge({ className }) {
5
+ return /* @__PURE__ */ jsxs(
6
+ "span",
7
+ {
8
+ "data-testid": "agent-badge",
9
+ className: cn(
10
+ "inline-flex shrink-0 items-center gap-1 rounded-full border border-ai-accent/50",
11
+ "bg-ai-accent-soft px-2 py-0.5 text-xs font-bold uppercase tracking-wider text-ai-accent",
12
+ className
13
+ ),
14
+ children: [
15
+ /* @__PURE__ */ jsx(ArbiBotHeadIcon, { size: 14, className: "text-ai-accent" }),
16
+ "Agent"
17
+ ]
18
+ }
19
+ );
20
+ }
21
+ const PRESENCE_WORDS = {
22
+ connected: "Online",
23
+ connecting: "Connecting",
24
+ disconnected: "Offline",
25
+ error: "Connection problem",
26
+ hidden: null
27
+ };
28
+ function PresenceLabel({
29
+ status,
30
+ className
31
+ }) {
32
+ if (!status) return null;
33
+ const word = PRESENCE_WORDS[status];
34
+ if (!word) return null;
35
+ const online = status === "connected";
36
+ return /* @__PURE__ */ jsxs(
37
+ "span",
38
+ {
39
+ "data-testid": "presence-label",
40
+ className: cn("inline-flex shrink-0 items-center gap-1 text-xs", className),
41
+ children: [
42
+ /* @__PURE__ */ jsx(
43
+ "span",
44
+ {
45
+ className: cn(
46
+ "size-1.5 rounded-full",
47
+ online ? "bg-status-online" : "bg-muted-foreground/50"
48
+ ),
49
+ "aria-hidden": "true"
50
+ }
51
+ ),
52
+ /* @__PURE__ */ jsx("span", { className: online ? "font-medium text-status-online" : "text-muted-foreground", children: word })
53
+ ]
54
+ }
55
+ );
56
+ }
57
+ export {
58
+ AgentBadge,
59
+ PresenceLabel
60
+ };
61
+ //# sourceMappingURL=AgentMarkers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/entities/AgentMarkers.tsx"],
4
+ "sourcesContent": ["/**\n * The two things you need to know about a correspondent before you write to\n * them: whether it is an agent, and whether it is here.\n *\n * Both live beside {@link UserEntity} rather than in any one feature, because\n * an agent has to look like an agent wherever it appears \u2014 a conversation row,\n * a thread header, a members table. Splitting the mark per surface is how you\n * end up with three of them.\n */\n\nimport { ArbiBotHeadIcon } from '../icons/ArbiBotHeadIcon'\nimport { cn } from '../lib/utils'\nimport type { PresenceDisplayStatus } from './UserEntity'\n\n/**\n * \"AGENT\" stamp for an `agt-` peer.\n *\n * `UserEntity` already marks agents with a dashed ring and a bot icon, but that\n * is a detail you have to know to read. An agent is a different KIND of\n * correspondent \u2014 it acts on someone's behalf, and what you send it may be\n * acted on rather than read \u2014 so it also gets a label you cannot miss.\n */\nexport function AgentBadge({ className }: { className?: string }) {\n return (\n <span\n data-testid=\"agent-badge\"\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded-full border border-ai-accent/50',\n 'bg-ai-accent-soft px-2 py-0.5 text-xs font-bold uppercase tracking-wider text-ai-accent',\n className\n )}\n >\n <ArbiBotHeadIcon size={14} className=\"text-ai-accent\" />\n Agent\n </span>\n )\n}\n\n/** Wording for each presence state \u2014 `hidden` deliberately says nothing. */\nconst PRESENCE_WORDS: Record<PresenceDisplayStatus, string | null> = {\n connected: 'Online',\n connecting: 'Connecting',\n disconnected: 'Offline',\n error: 'Connection problem',\n hidden: null,\n}\n\n/**\n * Presence in words rather than a coloured dot alone.\n *\n * `status` is *resolved* by the app, exactly as {@link UserEntity} expects it,\n * and `undefined` renders nothing at all. That default matters: a consumer that\n * has not wired a WebSocket provider has no presence information, and labelling\n * every one of its contacts \"Offline\" would be stating something we do not\n * know. Whether absence of a signal means offline is a claim only the app can\n * make, so the app makes it by resolving to `disconnected`.\n */\nexport function PresenceLabel({\n status,\n className,\n}: {\n status?: PresenceDisplayStatus\n className?: string\n}) {\n if (!status) return null\n const word = PRESENCE_WORDS[status]\n if (!word) return null\n\n const online = status === 'connected'\n return (\n <span\n data-testid=\"presence-label\"\n className={cn('inline-flex shrink-0 items-center gap-1 text-xs', className)}\n >\n <span\n className={cn(\n 'size-1.5 rounded-full',\n online ? 'bg-status-online' : 'bg-muted-foreground/50'\n )}\n aria-hidden=\"true\"\n />\n <span className={online ? 'font-medium text-status-online' : 'text-muted-foreground'}>\n {word}\n </span>\n </span>\n )\n}\n"],
5
+ "mappings": "AAwBI,SAQE,KARF;AAdJ,SAAS,uBAAuB;AAChC,SAAS,UAAU;AAWZ,SAAS,WAAW,EAAE,UAAU,GAA2B;AAChE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,4BAAC,mBAAgB,MAAM,IAAI,WAAU,kBAAiB;AAAA,QAAE;AAAA;AAAA;AAAA,EAE1D;AAEJ;AAGA,MAAM,iBAA+D;AAAA,EACnE,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AACV;AAYO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGG;AACD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,OAAO,eAAe,MAAM;AAClC,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,SAAS,WAAW;AAC1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW,GAAG,mDAAmD,SAAS;AAAA,MAE1E;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,SAAS,qBAAqB;AAAA,YAChC;AAAA,YACA,eAAY;AAAA;AAAA,QACd;AAAA,QACA,oBAAC,UAAK,WAAW,SAAS,mCAAmC,yBAC1D,gBACH;AAAA;AAAA;AAAA,EACF;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,125 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Eye, FolderOpen } from "lucide-react";
3
+ import { EntityPill } from "./EntityPill.js";
4
+ import { AudIcon } from "../icons/AudIcon.js";
5
+ import { DocIcon } from "../icons/DocIcon.js";
6
+ import { EmlIcon } from "../icons/EmlIcon.js";
7
+ import { HtmlIcon } from "../icons/HtmlIcon.js";
8
+ import { ImgIcon } from "../icons/ImgIcon.js";
9
+ import { PdfIcon } from "../icons/PdfIcon.js";
10
+ import { TxtIcon } from "../icons/TxtIcon.js";
11
+ import { VidIcon } from "../icons/VidIcon.js";
12
+ import { XlsIcon } from "../icons/XlsIcon.js";
13
+ import { cn } from "../lib/utils.js";
14
+ function getDocumentTitle(document, defaultValue = "") {
15
+ if (!document) return defaultValue;
16
+ return document.doc_metadata?.title || document.file_name || defaultValue;
17
+ }
18
+ const IMAGE_FILE_TYPES = /* @__PURE__ */ new Set(["png", "jpg", "jpeg", "gif", "bmp", "tiff", "webp"]);
19
+ function isImageDocument(document) {
20
+ return !!document?.file_type && IMAGE_FILE_TYPES.has(document.file_type.toLowerCase());
21
+ }
22
+ const MAX_LABEL_CHARS = 30;
23
+ function clampLabel(text) {
24
+ return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}\u2026` : text;
25
+ }
26
+ const IMAGE_EXTENSIONS = /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "gif", "bmp", "tiff", "tif", "webp"]);
27
+ const VIDEO_EXTENSIONS = /* @__PURE__ */ new Set(["mp4", "mpeg", "mpg", "webm", "mov", "avi", "mkv"]);
28
+ const AUDIO_EXTENSIONS = /* @__PURE__ */ new Set(["mp3", "wav", "m4a", "aac", "ogg", "flac"]);
29
+ const EMAIL_EXTENSIONS = /* @__PURE__ */ new Set(["eml", "msg"]);
30
+ const DOCX_EXTENSIONS = /* @__PURE__ */ new Set(["doc", "docx", "odt", "rtf"]);
31
+ const XLSX_EXTENSIONS = /* @__PURE__ */ new Set(["xls", "xlsx", "csv", "ods"]);
32
+ const HTML_EXTENSIONS = /* @__PURE__ */ new Set(["html", "htm", "mhtml"]);
33
+ const TEXT_EXTENSIONS = /* @__PURE__ */ new Set([
34
+ "txt",
35
+ "text",
36
+ "md",
37
+ "markdown",
38
+ "log",
39
+ "json",
40
+ "xml",
41
+ "yaml",
42
+ "yml"
43
+ ]);
44
+ function getDocIcon(fileName, iconSize = 14) {
45
+ const ext = fileName?.split(".").pop()?.toLowerCase();
46
+ if (ext && VIDEO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(VidIcon, { size: iconSize, className: "flex-shrink-0" });
47
+ if (ext && AUDIO_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(AudIcon, { size: iconSize, className: "flex-shrink-0" });
48
+ if (ext && IMAGE_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(ImgIcon, { size: iconSize, className: "flex-shrink-0" });
49
+ if (ext && EMAIL_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(EmlIcon, { size: iconSize, className: "flex-shrink-0" });
50
+ if (ext && DOCX_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(DocIcon, { size: iconSize, className: "flex-shrink-0" });
51
+ if (ext && XLSX_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(XlsIcon, { size: iconSize, className: "flex-shrink-0" });
52
+ if (ext && HTML_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(HtmlIcon, { size: iconSize, className: "flex-shrink-0" });
53
+ if (ext && TEXT_EXTENSIONS.has(ext)) return /* @__PURE__ */ jsx(TxtIcon, { size: iconSize, className: "flex-shrink-0" });
54
+ return /* @__PURE__ */ jsx(PdfIcon, { size: iconSize, className: "flex-shrink-0" });
55
+ }
56
+ function DocumentEntity({
57
+ doc,
58
+ icon,
59
+ size = "sm",
60
+ labelMaxWidth,
61
+ labelClassName,
62
+ onClick,
63
+ onIconClick,
64
+ viewing,
65
+ iconBadge,
66
+ status,
67
+ actions,
68
+ tooltipContent,
69
+ className,
70
+ fullWidth,
71
+ noClamp,
72
+ "data-testid": testId
73
+ }) {
74
+ const title = getDocumentTitle(doc);
75
+ const ext = doc.file_name?.split(".").pop()?.toLowerCase();
76
+ const iconSize = size === "md" ? 16 : 14;
77
+ const eyeSizeClass = size === "md" ? "h-4 w-4" : "h-3.5 w-3.5";
78
+ const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize);
79
+ const displayIcon = viewing || iconBadge ? /* @__PURE__ */ jsxs("span", { className: "relative inline-flex flex-shrink-0 items-center justify-center", children: [
80
+ viewing ? /* @__PURE__ */ jsx(Eye, { className: cn("text-primary-foreground", eyeSizeClass) }) : baseIcon,
81
+ iconBadge
82
+ ] }) : baseIcon;
83
+ const defaultTooltip = /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 text-xs max-w-[440px]", children: [
84
+ doc.folder && // `flex-wrap` so a deep folder path wraps WITHIN the balloon instead of
85
+ // spilling out of it (each path segment is atomic and wraps as a unit;
86
+ // `min-w-0` + `break-all` lets a single over-long segment break too).
87
+ /* @__PURE__ */ jsxs("span", { className: "flex flex-wrap items-center gap-0.5 text-muted-foreground", children: [
88
+ /* @__PURE__ */ jsx(FolderOpen, { className: "h-3 w-3 text-yellow-600 shrink-0" }),
89
+ doc.folder.split("/").map((part, i, arr) => /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-0.5", children: [
90
+ i > 0 && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/50 mx-0.5", children: "/" }),
91
+ /* @__PURE__ */ jsx("span", { className: `break-all ${i < arr.length - 1 ? "text-muted-foreground/70" : ""}`, children: part })
92
+ ] }, i))
93
+ ] }),
94
+ /* @__PURE__ */ jsxs("span", { className: "font-medium break-words", children: [
95
+ title,
96
+ ext ? `.${ext}` : ""
97
+ ] })
98
+ ] });
99
+ return /* @__PURE__ */ jsx(
100
+ EntityPill,
101
+ {
102
+ icon: displayIcon,
103
+ size,
104
+ label: fullWidth || noClamp ? title : clampLabel(title),
105
+ labelMaxWidth: labelMaxWidth ?? "max-w-[140px]",
106
+ labelClassName,
107
+ secondaryText: status,
108
+ fullWidth,
109
+ onClick,
110
+ onIconClick,
111
+ moreContent: actions,
112
+ className,
113
+ highlight: viewing,
114
+ "data-testid": testId,
115
+ tooltipContent: tooltipContent ?? defaultTooltip
116
+ }
117
+ );
118
+ }
119
+ export {
120
+ DocumentEntity,
121
+ getDocIcon,
122
+ getDocumentTitle,
123
+ isImageDocument
124
+ };
125
+ //# sourceMappingURL=DocumentEntity.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/entities/DocumentEntity.tsx"],
4
+ "sourcesContent": ["/**\n * DocumentEntity Component\n *\n * Displays a document as a compact entity pill with file-type icon and name.\n * Promoted from the ARBI app and DECOUPLED from the app store/API: it renders\n * purely from the `doc` prop and optional `onClick`/`onIconClick` callbacks.\n */\n\nimport React from 'react'\nimport { Eye, FolderOpen } from 'lucide-react'\nimport { EntityPill, type EntitySize } from './EntityPill'\nimport { AudIcon } from '../icons/AudIcon'\nimport { DocIcon } from '../icons/DocIcon'\nimport { EmlIcon } from '../icons/EmlIcon'\nimport { HtmlIcon } from '../icons/HtmlIcon'\nimport { ImgIcon } from '../icons/ImgIcon'\nimport { PdfIcon } from '../icons/PdfIcon'\nimport { TxtIcon } from '../icons/TxtIcon'\nimport { VidIcon } from '../icons/VidIcon'\nimport { XlsIcon } from '../icons/XlsIcon'\nimport { cn } from '../lib/utils'\n\n/** Minimal, decoupled document shape the pill needs. Structurally compatible\n * with the SDK's `DocResponse` (from `useDocuments`), but no dependency on it \u2014\n * a consumer can pass any object with these fields. */\nexport interface DocumentLike {\n file_name?: string | null\n folder?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\n/** Title of a document: `doc_metadata.title`, falling back to `file_name`. */\nexport function getDocumentTitle(\n document: DocumentLike | null | undefined,\n defaultValue = ''\n): string {\n if (!document) return defaultValue\n return document.doc_metadata?.title || document.file_name || defaultValue\n}\n\nconst IMAGE_FILE_TYPES = new Set(['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'webp'])\n\n/**\n * Whether a document is an image (upload or AI-generated): pages and tokens are text-document\n * concepts, never meaningful for an image, whatever the stored value.\n */\nexport function isImageDocument(\n document: { file_type?: string | null } | null | undefined\n): boolean {\n return !!document?.file_type && IMAGE_FILE_TYPES.has(document.file_type.toLowerCase())\n}\n\n/** Hard cap on the pill's visible label. The full name still shows in the hover\n * tooltip; the pill stays compact so the trailing \u22EE menu never gets pushed. */\nconst MAX_LABEL_CHARS = 30\n\nfunction clampLabel(text: string): string {\n return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}\u2026` : text\n}\n\nconst IMAGE_EXTENSIONS = new Set(['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'tif', 'webp'])\nconst VIDEO_EXTENSIONS = new Set(['mp4', 'mpeg', 'mpg', 'webm', 'mov', 'avi', 'mkv'])\nconst AUDIO_EXTENSIONS = new Set(['mp3', 'wav', 'm4a', 'aac', 'ogg', 'flac'])\nconst EMAIL_EXTENSIONS = new Set(['eml', 'msg'])\nconst DOCX_EXTENSIONS = new Set(['doc', 'docx', 'odt', 'rtf'])\nconst XLSX_EXTENSIONS = new Set(['xls', 'xlsx', 'csv', 'ods'])\nconst HTML_EXTENSIONS = new Set(['html', 'htm', 'mhtml'])\nconst TEXT_EXTENSIONS = new Set([\n 'txt',\n 'text',\n 'md',\n 'markdown',\n 'log',\n 'json',\n 'xml',\n 'yaml',\n 'yml',\n])\n\n/**\n * The file-type glyph for a document, by extension.\n *\n * Exported because a document is recognisable by its icon before its name \u2014 any\n * surface that lists documents (the entity pill here, the workspace home's\n * Documents card) has to draw the same PDF/image/audio/video/email glyph, or\n * the same file looks like two different things in two places.\n */\nexport function getDocIcon(fileName?: string | null, iconSize = 14): React.ReactNode {\n const ext = fileName?.split('.').pop()?.toLowerCase()\n if (ext && VIDEO_EXTENSIONS.has(ext)) return <VidIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && AUDIO_EXTENSIONS.has(ext)) return <AudIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && IMAGE_EXTENSIONS.has(ext)) return <ImgIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && EMAIL_EXTENSIONS.has(ext)) return <EmlIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && DOCX_EXTENSIONS.has(ext)) return <DocIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && XLSX_EXTENSIONS.has(ext)) return <XlsIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && HTML_EXTENSIONS.has(ext)) return <HtmlIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && TEXT_EXTENSIONS.has(ext)) return <TxtIcon size={iconSize} className=\"flex-shrink-0\" />\n // Unrecognised or missing extension (e.g. a display title): most uploads are PDFs.\n return <PdfIcon size={iconSize} className=\"flex-shrink-0\" />\n}\n\nexport interface DocumentEntityProps {\n doc: DocumentLike\n /** Override the default file-type icon */\n icon?: React.ReactNode\n /** `sm` (default) for inline/compact contexts, `md` for a larger pill (e.g. the documents\n * grid's primary name column). */\n size?: Extract<EntitySize, 'sm' | 'md'>\n /** Override default label max width */\n labelMaxWidth?: string\n /** Extra classes on the label text (e.g. a heavier weight on a card face). */\n labelClassName?: string\n /** Click handler for the whole pill */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for the icon only */\n onIconClick?: (e: React.MouseEvent) => void\n /** When true, the file-type icon is replaced by a pinned Eye \u2014 marks the\n * document that is currently open/being viewed. */\n viewing?: boolean\n /** Small overlay pinned to the icon's corner (e.g. an \"available offline\" pip). */\n iconBadge?: React.ReactNode\n /** Small content right after the name, inside the click area (e.g. a status glyph). */\n status?: React.ReactNode\n /** Trailing control rendered outside the click area (e.g. a \u22EF actions menu). */\n actions?: React.ReactNode\n /** When true, the pill fills the available width and the name truncates via\n * CSS so the trailing \u22EF menu pins to the right edge. */\n fullWidth?: boolean\n /** Render the WHOLE title (skip the 30-char `clampLabel` string cut) while\n * keeping the normal content-width layout \u2014 for callers that want the full\n * name to show/wrap (via a `labelClassName`) without `fullWidth`'s w-full.\n * `fullWidth` already implies this. */\n noClamp?: boolean\n /** Override the default folder/title hover tooltip. */\n tooltipContent?: React.ReactNode\n className?: string\n /** Forwarded to the pill so a surface can address this document's chip. */\n 'data-testid'?: string\n}\n\nexport function DocumentEntity({\n doc,\n icon,\n size = 'sm',\n labelMaxWidth,\n labelClassName,\n onClick,\n onIconClick,\n viewing,\n iconBadge,\n status,\n actions,\n tooltipContent,\n className,\n fullWidth,\n noClamp,\n 'data-testid': testId,\n}: DocumentEntityProps) {\n const title = getDocumentTitle(doc)\n const ext = doc.file_name?.split('.').pop()?.toLowerCase()\n const iconSize = size === 'md' ? 16 : 14\n const eyeSizeClass = size === 'md' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n\n const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize)\n const displayIcon =\n viewing || iconBadge ? (\n <span className=\"relative inline-flex flex-shrink-0 items-center justify-center\">\n {viewing ? <Eye className={cn('text-primary-foreground', eyeSizeClass)} /> : baseIcon}\n {iconBadge}\n </span>\n ) : (\n baseIcon\n )\n\n const defaultTooltip = (\n <div className=\"flex flex-col gap-1 text-xs max-w-[440px]\">\n {doc.folder && (\n // `flex-wrap` so a deep folder path wraps WITHIN the balloon instead of\n // spilling out of it (each path segment is atomic and wraps as a unit;\n // `min-w-0` + `break-all` lets a single over-long segment break too).\n <span className=\"flex flex-wrap items-center gap-0.5 text-muted-foreground\">\n <FolderOpen className=\"h-3 w-3 text-yellow-600 shrink-0\" />\n {doc.folder.split('/').map((part, i, arr) => (\n <span key={i} className=\"flex min-w-0 items-center gap-0.5\">\n {i > 0 && <span className=\"text-muted-foreground/50 mx-0.5\">/</span>}\n <span className={`break-all ${i < arr.length - 1 ? 'text-muted-foreground/70' : ''}`}>\n {part}\n </span>\n </span>\n ))}\n </span>\n )}\n <span className=\"font-medium break-words\">\n {title}\n {ext ? `.${ext}` : ''}\n </span>\n </div>\n )\n\n return (\n <EntityPill\n icon={displayIcon}\n size={size}\n label={fullWidth || noClamp ? title : clampLabel(title)}\n labelMaxWidth={labelMaxWidth ?? 'max-w-[140px]'}\n labelClassName={labelClassName}\n secondaryText={status}\n fullWidth={fullWidth}\n onClick={onClick}\n onIconClick={onIconClick}\n moreContent={actions}\n className={className}\n highlight={viewing}\n data-testid={testId}\n tooltipContent={tooltipContent ?? defaultTooltip}\n />\n )\n}\n"],
5
+ "mappings": "AAyF+C,cA6EzC,YA7EyC;AAhF/C,SAAS,KAAK,kBAAkB;AAChC,SAAS,kBAAmC;AAC5C,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,UAAU;AAYZ,SAAS,iBACd,UACA,eAAe,IACP;AACR,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,SAAS,cAAc,SAAS,SAAS,aAAa;AAC/D;AAEA,MAAM,mBAAmB,oBAAI,IAAI,CAAC,OAAO,OAAO,QAAQ,OAAO,OAAO,QAAQ,MAAM,CAAC;AAM9E,SAAS,gBACd,UACS;AACT,SAAO,CAAC,CAAC,UAAU,aAAa,iBAAiB,IAAI,SAAS,UAAU,YAAY,CAAC;AACvF;AAIA,MAAM,kBAAkB;AAExB,SAAS,WAAW,MAAsB;AACxC,SAAO,KAAK,SAAS,kBAAkB,GAAG,KAAK,MAAM,GAAG,eAAe,EAAE,QAAQ,CAAC,WAAM;AAC1F;AAEA,MAAM,mBAAmB,oBAAI,IAAI,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM,CAAC;AAC5F,MAAM,mBAAmB,oBAAI,IAAI,CAAC,OAAO,QAAQ,OAAO,QAAQ,OAAO,OAAO,KAAK,CAAC;AACpF,MAAM,mBAAmB,oBAAI,IAAI,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,CAAC;AAC5E,MAAM,mBAAmB,oBAAI,IAAI,CAAC,OAAO,KAAK,CAAC;AAC/C,MAAM,kBAAkB,oBAAI,IAAI,CAAC,OAAO,QAAQ,OAAO,KAAK,CAAC;AAC7D,MAAM,kBAAkB,oBAAI,IAAI,CAAC,OAAO,QAAQ,OAAO,KAAK,CAAC;AAC7D,MAAM,kBAAkB,oBAAI,IAAI,CAAC,QAAQ,OAAO,OAAO,CAAC;AACxD,MAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAUM,SAAS,WAAW,UAA0B,WAAW,IAAqB;AACnF,QAAM,MAAM,UAAU,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY;AACpD,MAAI,OAAO,iBAAiB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAChG,MAAI,OAAO,iBAAiB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAChG,MAAI,OAAO,iBAAiB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAChG,MAAI,OAAO,iBAAiB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAChG,MAAI,OAAO,gBAAgB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAC/F,MAAI,OAAO,gBAAgB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAC/F,MAAI,OAAO,gBAAgB,IAAI,GAAG,EAAG,QAAO,oBAAC,YAAS,MAAM,UAAU,WAAU,iBAAgB;AAChG,MAAI,OAAO,gBAAgB,IAAI,GAAG,EAAG,QAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAE/F,SAAO,oBAAC,WAAQ,MAAM,UAAU,WAAU,iBAAgB;AAC5D;AAyCO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAwB;AACtB,QAAM,QAAQ,iBAAiB,GAAG;AAClC,QAAM,MAAM,IAAI,WAAW,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY;AACzD,QAAM,WAAW,SAAS,OAAO,KAAK;AACtC,QAAM,eAAe,SAAS,OAAO,YAAY;AAEjD,QAAM,WAAW,QAAQ,WAAW,IAAI,WAAW,QAAQ;AAC3D,QAAM,cACJ,WAAW,YACT,qBAAC,UAAK,WAAU,kEACb;AAAA,cAAU,oBAAC,OAAI,WAAW,GAAG,2BAA2B,YAAY,GAAG,IAAK;AAAA,IAC5E;AAAA,KACH,IAEA;AAGJ,QAAM,iBACJ,qBAAC,SAAI,WAAU,6CACZ;AAAA,QAAI;AAAA;AAAA;AAAA,IAIH,qBAAC,UAAK,WAAU,6DACd;AAAA,0BAAC,cAAW,WAAU,oCAAmC;AAAA,MACxD,IAAI,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,QACnC,qBAAC,UAAa,WAAU,qCACrB;AAAA,YAAI,KAAK,oBAAC,UAAK,WAAU,mCAAkC,eAAC;AAAA,QAC7D,oBAAC,UAAK,WAAW,aAAa,IAAI,IAAI,SAAS,IAAI,6BAA6B,EAAE,IAC/E,gBACH;AAAA,WAJS,CAKX,CACD;AAAA,OACH;AAAA,IAEF,qBAAC,UAAK,WAAU,2BACb;AAAA;AAAA,MACA,MAAM,IAAI,GAAG,KAAK;AAAA,OACrB;AAAA,KACF;AAGF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN;AAAA,MACA,OAAO,aAAa,UAAU,QAAQ,WAAW,KAAK;AAAA,MACtD,eAAe,iBAAiB;AAAA,MAChC;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA,WAAW;AAAA,MACX,eAAa;AAAA,MACb,gBAAgB,kBAAkB;AAAA;AAAA,EACpC;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,250 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { MoreVertical } from "lucide-react";
4
+ import { cn } from "../lib/utils.js";
5
+ import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip.js";
6
+ const EntityPill = forwardRef(function EntityPill2({
7
+ icon,
8
+ label,
9
+ secondaryText,
10
+ size = "sm",
11
+ shape = "rounded",
12
+ className,
13
+ style,
14
+ labelMaxWidth = "max-w-[320px]",
15
+ labelClassName,
16
+ fullWidth = false,
17
+ highlight = false,
18
+ onClick,
19
+ onIconClick,
20
+ onMoreClick,
21
+ moreContent,
22
+ href,
23
+ disabled = false,
24
+ tooltipContent,
25
+ "data-testid": testId
26
+ }, ref) {
27
+ const shapeClass = shape === "pill" ? "rounded-full" : "rounded-md";
28
+ const sizeClasses = size === "md" ? "gap-1.5 px-1.5 py-0.5" : "gap-1 px-1";
29
+ const textSizeClass = size === "md" ? "text-base" : "text-sm";
30
+ const baseClasses = cn(
31
+ "group/pill items-center",
32
+ fullWidth ? "flex w-full" : "inline-flex",
33
+ sizeClasses,
34
+ shapeClass,
35
+ "border border-transparent",
36
+ "transition-colors",
37
+ className
38
+ );
39
+ const interactiveClasses = "relative cursor-pointer hover:bg-muted pointer-coarse:after:absolute pointer-coarse:after:inset-x-0 pointer-coarse:after:-inset-y-3 pointer-coarse:after:content-['']";
40
+ const disabledClasses = "cursor-default opacity-60";
41
+ const highlightClasses = "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground";
42
+ const mainContent = /* @__PURE__ */ jsxs(Fragment, { children: [
43
+ onIconClick ? /* @__PURE__ */ jsx(
44
+ "span",
45
+ {
46
+ role: "button",
47
+ tabIndex: 0,
48
+ className: "flex-shrink-0 cursor-pointer hover:opacity-70 transition-opacity",
49
+ onClick: (e) => {
50
+ e.stopPropagation();
51
+ onIconClick(e);
52
+ },
53
+ children: icon
54
+ }
55
+ ) : icon,
56
+ /* @__PURE__ */ jsx(
57
+ "span",
58
+ {
59
+ className: cn(
60
+ textSizeClass,
61
+ "font-medium truncate leading-tight min-w-0",
62
+ labelMaxWidth,
63
+ labelClassName
64
+ ),
65
+ children: label
66
+ }
67
+ ),
68
+ secondaryText && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground flex-shrink-0 leading-none", children: secondaryText })
69
+ ] });
70
+ const tooltipWrap = (content, tip, side = "bottom", triggerClassName, triggerProps) => /* @__PURE__ */ jsxs(Tooltip, { children: [
71
+ /* @__PURE__ */ jsx(
72
+ TooltipTrigger,
73
+ {
74
+ onFocusCapture: (e) => e.stopPropagation(),
75
+ className: triggerClassName,
76
+ ...triggerProps,
77
+ children: content
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsx(TooltipContent, { side, className: "p-2", children: tip })
81
+ ] });
82
+ const mainAreaClass = cn("inline-flex items-center gap-1", fullWidth && "min-w-0 flex-1");
83
+ const mainAreaTouchClass = cn(
84
+ mainAreaClass,
85
+ (onClick || href) && !disabled && "relative pointer-coarse:after:absolute pointer-coarse:after:inset-x-0 pointer-coarse:after:-inset-y-3 pointer-coarse:after:content-['']"
86
+ );
87
+ if (onMoreClick || moreContent) {
88
+ let mainArea;
89
+ if (tooltipContent) {
90
+ mainArea = tooltipWrap(
91
+ mainContent,
92
+ tooltipContent,
93
+ "bottom",
94
+ cn(mainAreaTouchClass, disabled && "opacity-60"),
95
+ {
96
+ type: "button",
97
+ onClick: href ? onClick : disabled ? void 0 : onClick,
98
+ disabled: disabled || void 0
99
+ }
100
+ );
101
+ } else if (href) {
102
+ mainArea = /* @__PURE__ */ jsx(
103
+ "a",
104
+ {
105
+ href,
106
+ target: "_blank",
107
+ rel: "noopener noreferrer",
108
+ className: mainAreaTouchClass,
109
+ onClick,
110
+ children: mainContent
111
+ }
112
+ );
113
+ } else if (onClick) {
114
+ mainArea = /* @__PURE__ */ jsx(
115
+ "button",
116
+ {
117
+ type: "button",
118
+ onClick: disabled ? void 0 : onClick,
119
+ disabled,
120
+ className: cn(
121
+ "relative inline-flex items-center gap-1 pointer-coarse:after:absolute pointer-coarse:after:inset-x-0 pointer-coarse:after:-inset-y-3 pointer-coarse:after:content-['']",
122
+ disabled && "opacity-60"
123
+ ),
124
+ children: mainContent
125
+ }
126
+ );
127
+ } else {
128
+ mainArea = /* @__PURE__ */ jsx("span", { className: mainAreaTouchClass, children: mainContent });
129
+ }
130
+ const moreArea = moreContent ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 leading-none", children: moreContent }) : tooltipWrap(
131
+ /* @__PURE__ */ jsx(MoreVertical, { className: "w-3.5 h-3.5" }),
132
+ "Click for more",
133
+ "bottom",
134
+ "flex-shrink-0 leading-none text-muted-foreground hover:text-foreground",
135
+ {
136
+ type: "button",
137
+ onClick: (e) => {
138
+ e.stopPropagation();
139
+ onMoreClick?.(e);
140
+ }
141
+ }
142
+ );
143
+ return /* @__PURE__ */ jsxs(
144
+ "span",
145
+ {
146
+ ref,
147
+ className: cn(
148
+ baseClasses,
149
+ (onClick || href) && !disabled && "cursor-pointer hover:bg-muted",
150
+ highlight && highlightClasses
151
+ ),
152
+ style,
153
+ "data-testid": testId,
154
+ children: [
155
+ mainArea,
156
+ moreArea
157
+ ]
158
+ }
159
+ );
160
+ }
161
+ if (tooltipContent) {
162
+ if (href) {
163
+ return tooltipWrap(
164
+ /* @__PURE__ */ jsx(
165
+ "a",
166
+ {
167
+ href,
168
+ target: "_blank",
169
+ rel: "noopener noreferrer",
170
+ className: mainAreaClass,
171
+ onClick,
172
+ children: mainContent
173
+ }
174
+ ),
175
+ tooltipContent,
176
+ "bottom",
177
+ cn(baseClasses, interactiveClasses),
178
+ { "data-testid": testId, style }
179
+ );
180
+ }
181
+ return tooltipWrap(
182
+ mainContent,
183
+ tooltipContent,
184
+ "bottom",
185
+ cn(
186
+ baseClasses,
187
+ onClick && !disabled ? interactiveClasses : "",
188
+ disabled ? disabledClasses : "",
189
+ highlight && highlightClasses
190
+ ),
191
+ {
192
+ type: "button",
193
+ ref,
194
+ onClick: onClick && !disabled ? onClick : void 0,
195
+ disabled: disabled || void 0,
196
+ "data-testid": testId,
197
+ style
198
+ }
199
+ );
200
+ }
201
+ if (href) {
202
+ return /* @__PURE__ */ jsx(
203
+ "a",
204
+ {
205
+ ref,
206
+ href,
207
+ target: "_blank",
208
+ rel: "noopener noreferrer",
209
+ className: cn(baseClasses, interactiveClasses),
210
+ style,
211
+ "data-testid": testId,
212
+ onClick,
213
+ children: mainContent
214
+ }
215
+ );
216
+ }
217
+ if (onClick) {
218
+ return /* @__PURE__ */ jsx(
219
+ "button",
220
+ {
221
+ ref,
222
+ type: "button",
223
+ onClick: disabled ? void 0 : onClick,
224
+ disabled,
225
+ className: cn(
226
+ baseClasses,
227
+ disabled ? disabledClasses : interactiveClasses,
228
+ highlight && highlightClasses
229
+ ),
230
+ style,
231
+ "data-testid": testId,
232
+ children: mainContent
233
+ }
234
+ );
235
+ }
236
+ return /* @__PURE__ */ jsx(
237
+ "span",
238
+ {
239
+ ref,
240
+ className: cn(baseClasses, highlight && highlightClasses),
241
+ style,
242
+ "data-testid": testId,
243
+ children: mainContent
244
+ }
245
+ );
246
+ });
247
+ export {
248
+ EntityPill
249
+ };
250
+ //# sourceMappingURL=EntityPill.js.map