@arbidocs/react 0.5.111 → 0.5.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (972) hide show
  1. package/dist/account/client.js +96 -0
  2. package/dist/account/client.js.map +7 -0
  3. package/dist/account/delete.js +70 -0
  4. package/dist/account/delete.js.map +7 -0
  5. package/dist/account/didit.js +34 -0
  6. package/dist/account/didit.js.map +7 -0
  7. package/dist/account/dismissed-tips.js +33 -0
  8. package/dist/account/dismissed-tips.js.map +7 -0
  9. package/dist/account/email.js +84 -0
  10. package/dist/account/email.js.map +7 -0
  11. package/dist/account/entitlements.js +47 -0
  12. package/dist/account/entitlements.js.map +7 -0
  13. package/dist/account/identity.js +270 -0
  14. package/dist/account/identity.js.map +7 -0
  15. package/dist/account/index.js +93 -0
  16. package/dist/account/index.js.map +7 -0
  17. package/dist/account/notifications.js +59 -0
  18. package/dist/account/notifications.js.map +7 -0
  19. package/dist/account/password.js +103 -0
  20. package/dist/account/password.js.map +7 -0
  21. package/dist/account/profile.js +116 -0
  22. package/dist/account/profile.js.map +7 -0
  23. package/dist/account/recovery.js +13 -0
  24. package/dist/account/recovery.js.map +7 -0
  25. package/dist/account/relevance.js +82 -0
  26. package/dist/account/relevance.js.map +7 -0
  27. package/dist/account/sessions.js +37 -0
  28. package/dist/account/sessions.js.map +7 -0
  29. package/dist/account/settings.js +39 -0
  30. package/dist/account/settings.js.map +7 -0
  31. package/dist/account/table-views.js +16 -0
  32. package/dist/account/table-views.js.map +7 -0
  33. package/dist/ai/AiAnswer.js +83 -0
  34. package/dist/ai/AiAnswer.js.map +7 -0
  35. package/dist/ai/AiMarkdown.js +40 -0
  36. package/dist/ai/AiMarkdown.js.map +7 -0
  37. package/dist/ai/ArtifactCanvas.js +193 -0
  38. package/dist/ai/ArtifactCanvas.js.map +7 -0
  39. package/dist/ai/CitationRenderer.js +413 -0
  40. package/dist/ai/CitationRenderer.js.map +7 -0
  41. package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
  42. package/dist/ai/MarkdownRenderer.js.map +7 -0
  43. package/dist/ai/MessageArtifactCard.js +75 -0
  44. package/dist/ai/MessageArtifactCard.js.map +7 -0
  45. package/dist/ai/PassageCard.js +79 -0
  46. package/dist/ai/PassageCard.js.map +7 -0
  47. package/dist/ai/engine.js +110 -0
  48. package/dist/ai/engine.js.map +7 -0
  49. package/dist/ai/index.js +63 -0
  50. package/dist/ai/index.js.map +7 -0
  51. package/dist/ai/markdown-base-components.js +37 -0
  52. package/dist/ai/markdown-base-components.js.map +7 -0
  53. package/dist/ai/markdown-streaming-context.js +6 -0
  54. package/dist/ai/markdown-streaming-context.js.map +7 -0
  55. package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
  56. package/dist/ai/normalize-citations.js.map +7 -0
  57. package/dist/ai/redline.js +41 -0
  58. package/dist/ai/redline.js.map +7 -0
  59. package/dist/ai/split-markdown-blocks.js +40 -0
  60. package/dist/ai/split-markdown-blocks.js.map +7 -0
  61. package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
  62. package/dist/ai/stored-markdown.js.map +7 -0
  63. package/dist/annotations/AnnotationPageOverlay.js +807 -0
  64. package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
  65. package/dist/annotations/AnnotationToolbar.js +398 -0
  66. package/dist/annotations/AnnotationToolbar.js.map +7 -0
  67. package/dist/annotations/FreezeDialog.js +170 -0
  68. package/dist/annotations/FreezeDialog.js.map +7 -0
  69. package/dist/annotations/ProductionDialog.js +354 -0
  70. package/dist/annotations/ProductionDialog.js.map +7 -0
  71. package/dist/annotations/controller.js +49 -0
  72. package/dist/annotations/controller.js.map +7 -0
  73. package/dist/annotations/freeze/browser.js +21 -0
  74. package/dist/annotations/freeze/browser.js.map +7 -0
  75. package/dist/annotations/freeze/bundle.js +201 -0
  76. package/dist/annotations/freeze/bundle.js.map +7 -0
  77. package/dist/annotations/freeze/coords.js +37 -0
  78. package/dist/annotations/freeze/coords.js.map +7 -0
  79. package/dist/annotations/freeze/freeze.js +261 -0
  80. package/dist/annotations/freeze/freeze.js.map +7 -0
  81. package/dist/annotations/freeze/hash.js +28 -0
  82. package/dist/annotations/freeze/hash.js.map +7 -0
  83. package/dist/annotations/freeze/index-page.js +78 -0
  84. package/dist/annotations/freeze/index-page.js.map +7 -0
  85. package/dist/annotations/freeze/index.js +28 -22
  86. package/dist/annotations/freeze/index.js.map +7 -1
  87. package/dist/annotations/freeze/raster.js +208 -0
  88. package/dist/annotations/freeze/raster.js.map +7 -0
  89. package/dist/annotations/freeze/stamp.js +117 -0
  90. package/dist/annotations/freeze/stamp.js.map +7 -0
  91. package/dist/annotations/freeze/types.js +14 -0
  92. package/dist/annotations/freeze/types.js.map +7 -0
  93. package/dist/annotations/freeze/vector.js +283 -0
  94. package/dist/annotations/freeze/vector.js.map +7 -0
  95. package/dist/annotations/geometry.js +81 -0
  96. package/dist/annotations/geometry.js.map +7 -0
  97. package/dist/annotations/index.js +125 -6
  98. package/dist/annotations/index.js.map +7 -1
  99. package/dist/annotations/merge.js +53 -0
  100. package/dist/annotations/merge.js.map +7 -0
  101. package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
  102. package/dist/annotations/model.js.map +7 -0
  103. package/dist/annotations/overlay-geometry.js +41 -0
  104. package/dist/annotations/overlay-geometry.js.map +7 -0
  105. package/dist/annotations/redaction-log.js +33 -0
  106. package/dist/annotations/redaction-log.js.map +7 -0
  107. package/dist/annotations/selection-marks.js +122 -0
  108. package/dist/annotations/selection-marks.js.map +7 -0
  109. package/dist/annotations/state.js +140 -0
  110. package/dist/annotations/state.js.map +7 -0
  111. package/dist/annotations/store.js +49 -0
  112. package/dist/annotations/store.js.map +7 -0
  113. package/dist/annotations/useAnnotationLayer.js +306 -0
  114. package/dist/annotations/useAnnotationLayer.js.map +7 -0
  115. package/dist/annotations/useAnnotationShortcuts.js +31 -0
  116. package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
  117. package/dist/annotations/useTextSelectionMarks.js +100 -0
  118. package/dist/annotations/useTextSelectionMarks.js.map +7 -0
  119. package/dist/artifacts/artifact-kind.js +19 -0
  120. package/dist/artifacts/artifact-kind.js.map +7 -0
  121. package/dist/artifacts/index.js +89 -571
  122. package/dist/artifacts/index.js.map +7 -1
  123. package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
  124. package/dist/artifacts/normalize-markdown.js.map +7 -0
  125. package/dist/artifacts/redline-core.js +12 -3
  126. package/dist/artifacts/redline-core.js.map +7 -1
  127. package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
  128. package/dist/artifacts/redline-diff.js.map +7 -0
  129. package/dist/artifacts/redline-engine.js +14 -0
  130. package/dist/artifacts/redline-engine.js.map +7 -0
  131. package/dist/artifacts/renderArtifactMarkdown.js +9 -0
  132. package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
  133. package/dist/artifacts/useArtifactEditSession.js +183 -0
  134. package/dist/artifacts/useArtifactEditSession.js.map +7 -0
  135. package/dist/artifacts/useArtifactSession.js +173 -0
  136. package/dist/artifacts/useArtifactSession.js.map +7 -0
  137. package/dist/artifacts/useArtifactSource.js +16 -0
  138. package/dist/artifacts/useArtifactSource.js.map +7 -0
  139. package/dist/artifacts/useArtifactText.js +78 -0
  140. package/dist/artifacts/useArtifactText.js.map +7 -0
  141. package/dist/artifacts/useRedline.js +65 -0
  142. package/dist/artifacts/useRedline.js.map +7 -0
  143. package/dist/artifacts/useStreamedArtifact.js +74 -0
  144. package/dist/artifacts/useStreamedArtifact.js.map +7 -0
  145. package/dist/artifacts/versions.js +68 -0
  146. package/dist/artifacts/versions.js.map +7 -0
  147. package/dist/billing.js +200 -0
  148. package/dist/billing.js.map +7 -0
  149. package/dist/boot-timeout.js +19 -0
  150. package/dist/boot-timeout.js.map +7 -0
  151. package/dist/calendar/accounts.js +213 -0
  152. package/dist/calendar/accounts.js.map +7 -0
  153. package/dist/calendar/hooks.js +409 -0
  154. package/dist/calendar/hooks.js.map +7 -0
  155. package/dist/calendar/index.js +31 -0
  156. package/dist/calendar/index.js.map +7 -0
  157. package/dist/calendar/keys.js +5 -0
  158. package/dist/calendar/keys.js.map +7 -0
  159. package/dist/calendar/offline/outbox.js +231 -0
  160. package/dist/calendar/offline/outbox.js.map +7 -0
  161. package/dist/calendar/offline/runtime.js +109 -0
  162. package/dist/calendar/offline/runtime.js.map +7 -0
  163. package/dist/calendar/offline/support.js +41 -0
  164. package/dist/calendar/offline/support.js.map +7 -0
  165. package/dist/calendar/support.js +34 -0
  166. package/dist/calendar/support.js.map +7 -0
  167. package/dist/calls/actions.js +226 -0
  168. package/dist/calls/actions.js.map +7 -0
  169. package/dist/calls/events.js +138 -0
  170. package/dist/calls/events.js.map +7 -0
  171. package/dist/calls/gate.js +19 -0
  172. package/dist/calls/gate.js.map +7 -0
  173. package/dist/calls/hooks.js +115 -0
  174. package/dist/calls/hooks.js.map +7 -0
  175. package/dist/calls/in-call-chat.js +132 -0
  176. package/dist/calls/in-call-chat.js.map +7 -0
  177. package/dist/calls/index.js +24 -0
  178. package/dist/calls/index.js.map +7 -0
  179. package/dist/calls/keys.js +17 -0
  180. package/dist/calls/keys.js.map +7 -0
  181. package/dist/calls/livekit/index.js +6 -958
  182. package/dist/calls/livekit/index.js.map +7 -1
  183. package/dist/calls/livekit/room.js +98 -0
  184. package/dist/calls/livekit/room.js.map +7 -0
  185. package/dist/calls/livekit/useCallRecorder.js +219 -0
  186. package/dist/calls/livekit/useCallRecorder.js.map +7 -0
  187. package/dist/calls/livekit/useCallTranscriber.js +309 -0
  188. package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
  189. package/dist/calls/livekit/useHostMuteNotice.js +29 -0
  190. package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
  191. package/dist/calls/livekit/useInCallChat.js +161 -0
  192. package/dist/calls/livekit/useInCallChat.js.map +7 -0
  193. package/dist/calls/livekit/useWebinar.js +239 -0
  194. package/dist/calls/livekit/useWebinar.js.map +7 -0
  195. package/dist/calls/meeting-chat.js +149 -0
  196. package/dist/calls/meeting-chat.js.map +7 -0
  197. package/dist/calls/moderation.js +50 -0
  198. package/dist/calls/moderation.js.map +7 -0
  199. package/dist/calls/open-meeting-chat.js +29 -0
  200. package/dist/calls/open-meeting-chat.js.map +7 -0
  201. package/dist/calls/read-only.js +24 -0
  202. package/dist/calls/read-only.js.map +7 -0
  203. package/dist/calls/recording-media.js +218 -0
  204. package/dist/calls/recording-media.js.map +7 -0
  205. package/dist/calls/recording-playback.js +260 -0
  206. package/dist/calls/recording-playback.js.map +7 -0
  207. package/dist/calls/recording.js +268 -0
  208. package/dist/calls/recording.js.map +7 -0
  209. package/dist/calls/save-to-thread.js +80 -0
  210. package/dist/calls/save-to-thread.js.map +7 -0
  211. package/dist/calls/session.js +134 -0
  212. package/dist/calls/session.js.map +7 -0
  213. package/dist/calls/transcript-format.js +147 -0
  214. package/dist/calls/transcript-format.js.map +7 -0
  215. package/dist/calls/transcription.js +101 -0
  216. package/dist/calls/transcription.js.map +7 -0
  217. package/dist/calls/webinar.js +71 -0
  218. package/dist/calls/webinar.js.map +7 -0
  219. package/dist/charge-watch.js +71 -0
  220. package/dist/charge-watch.js.map +7 -0
  221. package/dist/chat/ChatBubble.js +146 -0
  222. package/dist/chat/ChatBubble.js.map +7 -0
  223. package/dist/chat/ConversationScope.js +30 -0
  224. package/dist/chat/ConversationScope.js.map +7 -0
  225. package/dist/chat/active-config.js +20 -0
  226. package/dist/chat/active-config.js.map +7 -0
  227. package/dist/chat/agent-chat-owner.js +25 -0
  228. package/dist/chat/agent-chat-owner.js.map +7 -0
  229. package/dist/chat/chat-artifacts.js +64 -0
  230. package/dist/chat/chat-artifacts.js.map +7 -0
  231. package/dist/chat/citations.js +32 -0
  232. package/dist/chat/citations.js.map +7 -0
  233. package/dist/chat/config-model.js +10 -0
  234. package/dist/chat/config-model.js.map +7 -0
  235. package/dist/chat/conversation-cache.js +676 -0
  236. package/dist/chat/conversation-cache.js.map +7 -0
  237. package/dist/chat/conversation-events.js +57 -0
  238. package/dist/chat/conversation-events.js.map +7 -0
  239. package/dist/chat/conversation-mentions.js +58 -0
  240. package/dist/chat/conversation-mentions.js.map +7 -0
  241. package/dist/chat/conversation-workspace.js +58 -0
  242. package/dist/chat/conversation-workspace.js.map +7 -0
  243. package/dist/chat/mentions.js +116 -0
  244. package/dist/chat/mentions.js.map +7 -0
  245. package/dist/chat/open-document.js +106 -0
  246. package/dist/chat/open-document.js.map +7 -0
  247. package/dist/chat/orphaned.js +44 -0
  248. package/dist/chat/orphaned.js.map +7 -0
  249. package/dist/chat/pendingFirstTurn.js +30 -0
  250. package/dist/chat/pendingFirstTurn.js.map +7 -0
  251. package/dist/chat/reply-target.js +12 -0
  252. package/dist/chat/reply-target.js.map +7 -0
  253. package/dist/chat/run-finished.js +28 -0
  254. package/dist/chat/run-finished.js.map +7 -0
  255. package/dist/chat/run-state.js +91 -0
  256. package/dist/chat/run-state.js.map +7 -0
  257. package/dist/chat/stream-handlers.js +419 -0
  258. package/dist/chat/stream-handlers.js.map +7 -0
  259. package/dist/chat/thread-binding.js +76 -0
  260. package/dist/chat/thread-binding.js.map +7 -0
  261. package/dist/chat/thread-document.js +53 -0
  262. package/dist/chat/thread-document.js.map +7 -0
  263. package/dist/chat/turn-control.js +79 -0
  264. package/dist/chat/turn-control.js.map +7 -0
  265. package/dist/chat/useAgentRunControl.js +36 -0
  266. package/dist/chat/useAgentRunControl.js.map +7 -0
  267. package/dist/chat/useAnswerAgentQuestion.js +19 -0
  268. package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
  269. package/dist/chat/useAskAgain.js +32 -0
  270. package/dist/chat/useAskAgain.js.map +7 -0
  271. package/dist/chat/useAutoSendDraft.js +17 -0
  272. package/dist/chat/useAutoSendDraft.js.map +7 -0
  273. package/dist/chat/useBranchNavigation.js +97 -0
  274. package/dist/chat/useBranchNavigation.js.map +7 -0
  275. package/dist/chat/useConnectRunStream.js +169 -0
  276. package/dist/chat/useConnectRunStream.js.map +7 -0
  277. package/dist/chat/useConversation.js +431 -0
  278. package/dist/chat/useConversation.js.map +7 -0
  279. package/dist/chat/useConversationActions.js +662 -0
  280. package/dist/chat/useConversationActions.js.map +7 -0
  281. package/dist/chat/useConversationData.js +143 -0
  282. package/dist/chat/useConversationData.js.map +7 -0
  283. package/dist/chat/useConversationDocuments.js +41 -0
  284. package/dist/chat/useConversationDocuments.js.map +7 -0
  285. package/dist/chat/useConversationSettings.js +78 -0
  286. package/dist/chat/useConversationSettings.js.map +7 -0
  287. package/dist/chat/useConversationTurn.js +31 -0
  288. package/dist/chat/useConversationTurn.js.map +7 -0
  289. package/dist/chat/useConversationWorkspace.js +12 -0
  290. package/dist/chat/useConversationWorkspace.js.map +7 -0
  291. package/dist/chat/useDeleteMessage.js +15 -0
  292. package/dist/chat/useDeleteMessage.js.map +7 -0
  293. package/dist/chat/useDocumentAutoAdd.js +73 -0
  294. package/dist/chat/useDocumentAutoAdd.js.map +7 -0
  295. package/dist/chat/useMessageTimer.js +39 -0
  296. package/dist/chat/useMessageTimer.js.map +7 -0
  297. package/dist/chat/useThinkingContent.js +67 -0
  298. package/dist/chat/useThinkingContent.js.map +7 -0
  299. package/dist/chat/useThreadDocument.js +61 -0
  300. package/dist/chat/useThreadDocument.js.map +7 -0
  301. package/dist/chat/workflow-run-titles.js +50 -0
  302. package/dist/chat/workflow-run-titles.js.map +7 -0
  303. package/dist/config/config-hooks.js +209 -0
  304. package/dist/config/config-hooks.js.map +7 -0
  305. package/dist/connectivity.js +72 -0
  306. package/dist/connectivity.js.map +7 -0
  307. package/dist/connectors/hooks.js +263 -0
  308. package/dist/connectors/hooks.js.map +7 -0
  309. package/dist/connectors/index.js +28 -0
  310. package/dist/connectors/index.js.map +7 -0
  311. package/dist/contacts.js +100 -0
  312. package/dist/contacts.js.map +7 -0
  313. package/dist/conversation-list.js +65 -0
  314. package/dist/conversation-list.js.map +7 -0
  315. package/dist/databases.js +195 -0
  316. package/dist/databases.js.map +7 -0
  317. package/dist/datasets/aggregate.js +281 -0
  318. package/dist/datasets/aggregate.js.map +7 -0
  319. package/dist/datasets/index.js +122 -0
  320. package/dist/datasets/index.js.map +7 -0
  321. package/dist/datasets/members.js +27 -0
  322. package/dist/datasets/members.js.map +7 -0
  323. package/dist/datasets/panel.js +44 -0
  324. package/dist/datasets/panel.js.map +7 -0
  325. package/dist/datasets/registry.js +47 -0
  326. package/dist/datasets/registry.js.map +7 -0
  327. package/dist/datasets/rows-source.js +44 -0
  328. package/dist/datasets/rows-source.js.map +7 -0
  329. package/dist/datasets/sources/activity.js +83 -0
  330. package/dist/datasets/sources/activity.js.map +7 -0
  331. package/dist/datasets/sources/conversations.js +74 -0
  332. package/dist/datasets/sources/conversations.js.map +7 -0
  333. package/dist/datasets/sources/database.js +209 -0
  334. package/dist/datasets/sources/database.js.map +7 -0
  335. package/dist/datasets/sources/documents.js +93 -0
  336. package/dist/datasets/sources/documents.js.map +7 -0
  337. package/dist/datasets/sources/facts.js +56 -0
  338. package/dist/datasets/sources/facts.js.map +7 -0
  339. package/dist/datasets/sources/projects.js +117 -0
  340. package/dist/datasets/sources/projects.js.map +7 -0
  341. package/dist/datasets/sources/tags.js +67 -0
  342. package/dist/datasets/sources/tags.js.map +7 -0
  343. package/dist/datasets/sources/usage.js +268 -0
  344. package/dist/datasets/sources/usage.js.map +7 -0
  345. package/dist/datasets/sources/workflows.js +91 -0
  346. package/dist/datasets/sources/workflows.js.map +7 -0
  347. package/dist/datasets/sources/workspaces.js +67 -0
  348. package/dist/datasets/sources/workspaces.js.map +7 -0
  349. package/dist/datasets/store.js +194 -0
  350. package/dist/datasets/store.js.map +7 -0
  351. package/dist/datasets/types.js +14 -0
  352. package/dist/datasets/types.js.map +7 -0
  353. package/dist/directmessages/ConversationList.js +148 -0
  354. package/dist/directmessages/ConversationList.js.map +7 -0
  355. package/dist/directmessages/DateSeparator.js +8 -0
  356. package/dist/directmessages/DateSeparator.js.map +7 -0
  357. package/dist/directmessages/DmAvatar.js +29 -0
  358. package/dist/directmessages/DmAvatar.js.map +7 -0
  359. package/dist/directmessages/DmComposer.js +201 -0
  360. package/dist/directmessages/DmComposer.js.map +7 -0
  361. package/dist/directmessages/arrivals.js +29 -0
  362. package/dist/directmessages/arrivals.js.map +7 -0
  363. package/dist/directmessages/chat-cache.js +192 -0
  364. package/dist/directmessages/chat-cache.js.map +7 -0
  365. package/dist/directmessages/grouping.js +26 -0
  366. package/dist/directmessages/grouping.js.map +7 -0
  367. package/dist/directmessages/index.js +81 -0
  368. package/dist/directmessages/index.js.map +7 -0
  369. package/dist/directmessages/useChats.js +266 -0
  370. package/dist/directmessages/useChats.js.map +7 -0
  371. package/dist/directmessages/utils.js +23 -0
  372. package/dist/directmessages/utils.js.map +7 -0
  373. package/dist/document-tools/can-annotate.js +7 -0
  374. package/dist/document-tools/can-annotate.js.map +7 -0
  375. package/dist/document-tools/core.js +218 -12
  376. package/dist/document-tools/core.js.map +7 -1
  377. package/dist/document-tools/document-pdf.js +76 -0
  378. package/dist/document-tools/document-pdf.js.map +7 -0
  379. package/dist/document-tools/environment.js +136 -0
  380. package/dist/document-tools/environment.js.map +7 -0
  381. package/dist/document-tools/file-shares.js +112 -0
  382. package/dist/document-tools/file-shares.js.map +7 -0
  383. package/dist/document-tools/frozen-copy.js +27 -0
  384. package/dist/document-tools/frozen-copy.js.map +7 -0
  385. package/dist/document-tools/index.js +26 -148
  386. package/dist/document-tools/index.js.map +7 -1
  387. package/dist/document-tools/markup-download.js +51 -0
  388. package/dist/document-tools/markup-download.js.map +7 -0
  389. package/dist/document-tools/markup-store.js +138 -0
  390. package/dist/document-tools/markup-store.js.map +7 -0
  391. package/dist/document-tools/markup-transfer.js +88 -0
  392. package/dist/document-tools/markup-transfer.js.map +7 -0
  393. package/dist/document-tools/production.js +147 -0
  394. package/dist/document-tools/production.js.map +7 -0
  395. package/dist/document-tools/saved-signature.js +90 -0
  396. package/dist/document-tools/saved-signature.js.map +7 -0
  397. package/dist/document-tools/signature-requests.js +310 -0
  398. package/dist/document-tools/signature-requests.js.map +7 -0
  399. package/dist/document-tools/signing.js +127 -0
  400. package/dist/document-tools/signing.js.map +7 -0
  401. package/dist/document-tools/useDocumentBytes.js +38 -0
  402. package/dist/document-tools/useDocumentBytes.js.map +7 -0
  403. package/dist/document-tools/useDocumentMarkup.js +154 -0
  404. package/dist/document-tools/useDocumentMarkup.js.map +7 -0
  405. package/dist/document-tools/useIsOnline.js +13 -0
  406. package/dist/document-tools/useIsOnline.js.map +7 -0
  407. package/dist/document-tools/verification.js +60 -0
  408. package/dist/document-tools/verification.js.map +7 -0
  409. package/dist/documents/DocumentReview.js +220 -0
  410. package/dist/documents/DocumentReview.js.map +7 -0
  411. package/dist/documents/DraftTitleControls.js +41 -0
  412. package/dist/documents/DraftTitleControls.js.map +7 -0
  413. package/dist/documents/InlineMicButton.js +90 -0
  414. package/dist/documents/InlineMicButton.js.map +7 -0
  415. package/dist/documents/MicRecordingOverlay.js +29 -0
  416. package/dist/documents/MicRecordingOverlay.js.map +7 -0
  417. package/dist/documents/MicWaveformIndicator.js +68 -0
  418. package/dist/documents/MicWaveformIndicator.js.map +7 -0
  419. package/dist/documents/PhotoCapture.js +120 -0
  420. package/dist/documents/PhotoCapture.js.map +7 -0
  421. package/dist/documents/VideoCapture.js +129 -0
  422. package/dist/documents/VideoCapture.js.map +7 -0
  423. package/dist/documents/VoiceNoteRecorder.js +166 -0
  424. package/dist/documents/VoiceNoteRecorder.js.map +7 -0
  425. package/dist/documents/audio-segmenter.js +63 -0
  426. package/dist/documents/audio-segmenter.js.map +7 -0
  427. package/dist/documents/capture-frame.js +21 -0
  428. package/dist/documents/capture-frame.js.map +7 -0
  429. package/dist/documents/chunked-recorder.js +190 -0
  430. package/dist/documents/chunked-recorder.js.map +7 -0
  431. package/dist/documents/document-download.js +53 -0
  432. package/dist/documents/document-download.js.map +7 -0
  433. package/dist/documents/document-fields.js +109 -0
  434. package/dist/documents/document-fields.js.map +7 -0
  435. package/dist/documents/documents-cache.js +110 -0
  436. package/dist/documents/documents-cache.js.map +7 -0
  437. package/dist/documents/documents-data.js +128 -0
  438. package/dist/documents/documents-data.js.map +7 -0
  439. package/dist/documents/documents-loader.js +113 -0
  440. package/dist/documents/documents-loader.js.map +7 -0
  441. package/dist/documents/documents-writes.js +448 -0
  442. package/dist/documents/documents-writes.js.map +7 -0
  443. package/dist/documents/format-elapsed.js +10 -0
  444. package/dist/documents/format-elapsed.js.map +7 -0
  445. package/dist/documents/has-video-track.js +26 -0
  446. package/dist/documents/has-video-track.js.map +7 -0
  447. package/dist/documents/index.js +266 -0
  448. package/dist/documents/index.js.map +7 -0
  449. package/dist/documents/media-error.js +18 -0
  450. package/dist/documents/media-error.js.map +7 -0
  451. package/dist/documents/offline-documents.js +160 -0
  452. package/dist/documents/offline-documents.js.map +7 -0
  453. package/dist/documents/pending-sync.js +210 -0
  454. package/dist/documents/pending-sync.js.map +7 -0
  455. package/dist/documents/processing-live.js +122 -0
  456. package/dist/documents/processing-live.js.map +7 -0
  457. package/dist/documents/processing-order.js +59 -0
  458. package/dist/documents/processing-order.js.map +7 -0
  459. package/dist/documents/processing-settle.js +21 -0
  460. package/dist/documents/processing-settle.js.map +7 -0
  461. package/dist/documents/related-documents.js +133 -0
  462. package/dist/documents/related-documents.js.map +7 -0
  463. package/dist/documents/support.js +29 -0
  464. package/dist/documents/support.js.map +7 -0
  465. package/dist/documents/upload-files.js +169 -0
  466. package/dist/documents/upload-files.js.map +7 -0
  467. package/dist/documents/useAudioRecorder.js +315 -0
  468. package/dist/documents/useAudioRecorder.js.map +7 -0
  469. package/dist/documents/useCameraStream.js +35 -0
  470. package/dist/documents/useCameraStream.js.map +7 -0
  471. package/dist/documents/useDocumentThumbnails.js +71 -0
  472. package/dist/documents/useDocumentThumbnails.js.map +7 -0
  473. package/dist/documents/useDownloadDocuments.js +90 -0
  474. package/dist/documents/useDownloadDocuments.js.map +7 -0
  475. package/dist/documents/usePassageQuotes.js +37 -0
  476. package/dist/documents/usePassageQuotes.js.map +7 -0
  477. package/dist/documents/useUploadFiles.js +165 -0
  478. package/dist/documents/useUploadFiles.js.map +7 -0
  479. package/dist/documents/useUploadFromUrls.js +63 -0
  480. package/dist/documents/useUploadFromUrls.js.map +7 -0
  481. package/dist/documents/useVideoRecorder.js +62 -0
  482. package/dist/documents/useVideoRecorder.js.map +7 -0
  483. package/dist/entities/AgentMarkers.js +61 -0
  484. package/dist/entities/AgentMarkers.js.map +7 -0
  485. package/dist/entities/DocumentEntity.js +125 -0
  486. package/dist/entities/DocumentEntity.js.map +7 -0
  487. package/dist/entities/EntityPill.js +250 -0
  488. package/dist/entities/EntityPill.js.map +7 -0
  489. package/dist/entities/ProjectEntity.js +61 -0
  490. package/dist/entities/ProjectEntity.js.map +7 -0
  491. package/dist/entities/ShieldIcon.js +49 -0
  492. package/dist/entities/ShieldIcon.js.map +7 -0
  493. package/dist/entities/TagEntity.js +79 -0
  494. package/dist/entities/TagEntity.js.map +7 -0
  495. package/dist/entities/ThreadVisibilityIcon.js +15 -0
  496. package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
  497. package/dist/entities/UserEntity.js +211 -0
  498. package/dist/entities/UserEntity.js.map +7 -0
  499. package/dist/entities/VerifiedBadge.js +19 -0
  500. package/dist/entities/VerifiedBadge.js.map +7 -0
  501. package/dist/entities/agent-avatar-colors.js +26 -0
  502. package/dist/entities/agent-avatar-colors.js.map +7 -0
  503. package/dist/entities/colors.js +64 -0
  504. package/dist/entities/colors.js.map +7 -0
  505. package/dist/entities/file-type.js +151 -0
  506. package/dist/entities/file-type.js.map +7 -0
  507. package/dist/entities/index.js +100 -0
  508. package/dist/entities/index.js.map +7 -0
  509. package/dist/entities/media-type.js +61 -0
  510. package/dist/entities/media-type.js.map +7 -0
  511. package/dist/entities/registry.js +385 -0
  512. package/dist/entities/registry.js.map +7 -0
  513. package/dist/entities/status.js +43 -0
  514. package/dist/entities/status.js.map +7 -0
  515. package/dist/entities/tag-kinds.js +23 -0
  516. package/dist/entities/tag-kinds.js.map +7 -0
  517. package/dist/entities/tag-types.js +44 -0
  518. package/dist/entities/tag-types.js.map +7 -0
  519. package/dist/entities/vocabulary.js +12 -0
  520. package/dist/entities/vocabulary.js.map +7 -0
  521. package/dist/entity-extraction.js +25 -0
  522. package/dist/entity-extraction.js.map +7 -0
  523. package/dist/facts-search.js +57 -0
  524. package/dist/facts-search.js.map +7 -0
  525. package/dist/facts.js +69 -0
  526. package/dist/facts.js.map +7 -0
  527. package/dist/hooks.js +320 -0
  528. package/dist/hooks.js.map +7 -0
  529. package/dist/host/ArbiHost.js +24 -0
  530. package/dist/host/ArbiHost.js.map +7 -0
  531. package/dist/host/assistant-copy.js +54 -0
  532. package/dist/host/assistant-copy.js.map +7 -0
  533. package/dist/host/config.js +9 -0
  534. package/dist/host/config.js.map +7 -0
  535. package/dist/host/context.js +10 -0
  536. package/dist/host/context.js.map +7 -0
  537. package/dist/host/features.js +144 -0
  538. package/dist/host/features.js.map +7 -0
  539. package/dist/host/index.js +12 -0
  540. package/dist/host/index.js.map +7 -0
  541. package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
  542. package/dist/host/merge.js.map +7 -0
  543. package/dist/house-template.js +40 -0
  544. package/dist/house-template.js.map +7 -0
  545. package/dist/icons/AppleIcon.js +25 -0
  546. package/dist/icons/AppleIcon.js.map +7 -0
  547. package/dist/icons/ArbiBotHeadIcon.js +46 -0
  548. package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
  549. package/dist/icons/ArbiIcon.js +24 -0
  550. package/dist/icons/ArbiIcon.js.map +7 -0
  551. package/dist/icons/AudIcon.js +56 -0
  552. package/dist/icons/AudIcon.js.map +7 -0
  553. package/dist/icons/ClaudeIcon.js +28 -0
  554. package/dist/icons/ClaudeIcon.js.map +7 -0
  555. package/dist/icons/DocIcon.js +56 -0
  556. package/dist/icons/DocIcon.js.map +7 -0
  557. package/dist/icons/EmlIcon.js +57 -0
  558. package/dist/icons/EmlIcon.js.map +7 -0
  559. package/dist/icons/FireworksIcon.js +47 -0
  560. package/dist/icons/FireworksIcon.js.map +7 -0
  561. package/dist/icons/GeminiIcon.js +37 -0
  562. package/dist/icons/GeminiIcon.js.map +7 -0
  563. package/dist/icons/GitHubIcon.js +32 -0
  564. package/dist/icons/GitHubIcon.js.map +7 -0
  565. package/dist/icons/GoogleIcon.js +53 -0
  566. package/dist/icons/GoogleIcon.js.map +7 -0
  567. package/dist/icons/HtmlIcon.js +56 -0
  568. package/dist/icons/HtmlIcon.js.map +7 -0
  569. package/dist/icons/ImgIcon.js +56 -0
  570. package/dist/icons/ImgIcon.js.map +7 -0
  571. package/dist/icons/LinkedInIcon.js +25 -0
  572. package/dist/icons/LinkedInIcon.js.map +7 -0
  573. package/dist/icons/OpenAIIcon.js +28 -0
  574. package/dist/icons/OpenAIIcon.js.map +7 -0
  575. package/dist/icons/PdfIcon.js +56 -0
  576. package/dist/icons/PdfIcon.js.map +7 -0
  577. package/dist/icons/ProviderIcon.js +42 -0
  578. package/dist/icons/ProviderIcon.js.map +7 -0
  579. package/dist/icons/TxtIcon.js +56 -0
  580. package/dist/icons/TxtIcon.js.map +7 -0
  581. package/dist/icons/VidIcon.js +56 -0
  582. package/dist/icons/VidIcon.js.map +7 -0
  583. package/dist/icons/XlsIcon.js +56 -0
  584. package/dist/icons/XlsIcon.js.map +7 -0
  585. package/dist/icons/arbi-mark.js +5 -0
  586. package/dist/icons/arbi-mark.js.map +7 -0
  587. package/dist/icons/colors.js +31 -0
  588. package/dist/icons/colors.js.map +7 -0
  589. package/dist/icons/file-type.js +105 -0
  590. package/dist/icons/file-type.js.map +7 -0
  591. package/dist/icons/index.js +55 -0
  592. package/dist/icons/index.js.map +7 -0
  593. package/dist/imagecrop/ImageCropModal.js +56 -0
  594. package/dist/imagecrop/ImageCropModal.js.map +7 -0
  595. package/dist/imagecrop/ImageCropper.js +100 -0
  596. package/dist/imagecrop/ImageCropper.js.map +7 -0
  597. package/dist/imagecrop/cropImage.js +43 -0
  598. package/dist/imagecrop/cropImage.js.map +7 -0
  599. package/dist/imagecrop/index.js +13 -0
  600. package/dist/imagecrop/index.js.map +7 -0
  601. package/dist/index.js +702 -17116
  602. package/dist/index.js.map +7 -1
  603. package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
  604. package/dist/lazy-chunk.js.map +7 -0
  605. package/dist/lib/collision-padding.js +13 -0
  606. package/dist/lib/collision-padding.js.map +7 -0
  607. package/dist/lib/format-friendly-date.js +55 -0
  608. package/dist/lib/format-friendly-date.js.map +7 -0
  609. package/dist/lib/format-relative-time.js +52 -0
  610. package/dist/lib/format-relative-time.js.map +7 -0
  611. package/dist/lib/markdown-to-text.js +35 -0
  612. package/dist/lib/markdown-to-text.js.map +7 -0
  613. package/dist/lib/toast-interaction.js +9 -0
  614. package/dist/lib/toast-interaction.js.map +7 -0
  615. package/dist/lib/utils.js +9 -0
  616. package/dist/lib/utils.js.map +7 -0
  617. package/dist/mail/client.js +103 -0
  618. package/dist/mail/client.js.map +7 -0
  619. package/dist/mail/document-attachment.js +38 -0
  620. package/dist/mail/document-attachment.js.map +7 -0
  621. package/dist/mail/filing.js +132 -0
  622. package/dist/mail/filing.js.map +7 -0
  623. package/dist/mail/hooks.js +393 -0
  624. package/dist/mail/hooks.js.map +7 -0
  625. package/dist/mail/index.js +120 -0
  626. package/dist/mail/index.js.map +7 -0
  627. package/dist/mail/offline/changes.js +258 -0
  628. package/dist/mail/offline/changes.js.map +7 -0
  629. package/dist/mail/offline/confirm-sign-out.js +37 -0
  630. package/dist/mail/offline/confirm-sign-out.js.map +7 -0
  631. package/dist/mail/offline/crypto.js +26 -0
  632. package/dist/mail/offline/crypto.js.map +7 -0
  633. package/dist/mail/offline/drafts.js +69 -0
  634. package/dist/mail/offline/drafts.js.map +7 -0
  635. package/dist/mail/offline/hooks.js +104 -0
  636. package/dist/mail/offline/hooks.js.map +7 -0
  637. package/dist/mail/offline/index.js +48 -0
  638. package/dist/mail/offline/index.js.map +7 -0
  639. package/dist/mail/offline/live.js +233 -0
  640. package/dist/mail/offline/live.js.map +7 -0
  641. package/dist/mail/offline/mailbox.js +191 -0
  642. package/dist/mail/offline/mailbox.js.map +7 -0
  643. package/dist/mail/offline/outbox.js +167 -0
  644. package/dist/mail/offline/outbox.js.map +7 -0
  645. package/dist/mail/offline/reads.js +159 -0
  646. package/dist/mail/offline/reads.js.map +7 -0
  647. package/dist/mail/offline/runtime.js +100 -0
  648. package/dist/mail/offline/runtime.js.map +7 -0
  649. package/dist/mail/offline/settings.js +84 -0
  650. package/dist/mail/offline/settings.js.map +7 -0
  651. package/dist/mail/offline/store.js +29 -0
  652. package/dist/mail/offline/store.js.map +7 -0
  653. package/dist/mail/offline/sync.js +251 -0
  654. package/dist/mail/offline/sync.js.map +7 -0
  655. package/dist/mail/offline/wipe.js +19 -0
  656. package/dist/mail/offline/wipe.js.map +7 -0
  657. package/dist/mail/thread-keys.js +53 -0
  658. package/dist/mail/thread-keys.js.map +7 -0
  659. package/dist/mail/threads.js +71 -0
  660. package/dist/mail/threads.js.map +7 -0
  661. package/dist/mail/useMailClient.js +42 -0
  662. package/dist/mail/useMailClient.js.map +7 -0
  663. package/dist/model-connections.js +58 -0
  664. package/dist/model-connections.js.map +7 -0
  665. package/dist/notifications/ActivityFeed.js +70 -0
  666. package/dist/notifications/ActivityFeed.js.map +7 -0
  667. package/dist/notifications/NotificationBell.js +200 -0
  668. package/dist/notifications/NotificationBell.js.map +7 -0
  669. package/dist/notifications/Toaster.js +24 -0
  670. package/dist/notifications/Toaster.js.map +7 -0
  671. package/dist/notifications/activity-types.js +65 -0
  672. package/dist/notifications/activity-types.js.map +7 -0
  673. package/dist/notifications/bell.js +24 -0
  674. package/dist/notifications/bell.js.map +7 -0
  675. package/dist/notifications/calendar-notifications.js +79 -0
  676. package/dist/notifications/calendar-notifications.js.map +7 -0
  677. package/dist/notifications/index.js +108 -0
  678. package/dist/notifications/index.js.map +7 -0
  679. package/dist/notifications/live.js +28 -0
  680. package/dist/notifications/live.js.map +7 -0
  681. package/dist/notifications/notification-types.js +127 -0
  682. package/dist/notifications/notification-types.js.map +7 -0
  683. package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
  684. package/dist/notifications/notify-store.js.map +7 -0
  685. package/dist/notifications/server-notifications.js +452 -0
  686. package/dist/notifications/server-notifications.js.map +7 -0
  687. package/dist/notifications/useNotifications.js +34 -0
  688. package/dist/notifications/useNotifications.js.map +7 -0
  689. package/dist/offline-store/network.js +11 -0
  690. package/dist/offline-store/network.js.map +7 -0
  691. package/dist/offline-store/store.js +136 -0
  692. package/dist/offline-store/store.js.map +7 -0
  693. package/dist/offline-store/wipe.js +8 -0
  694. package/dist/offline-store/wipe.js.map +7 -0
  695. package/dist/offline.js +58 -0
  696. package/dist/offline.js.map +7 -0
  697. package/dist/people.js +122 -0
  698. package/dist/people.js.map +7 -0
  699. package/dist/projects.js +30 -0
  700. package/dist/projects.js.map +7 -0
  701. package/dist/query-client.js +63 -0
  702. package/dist/query-client.js.map +7 -0
  703. package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
  704. package/dist/query-keys.js.map +7 -0
  705. package/dist/query-persist.js +66 -0
  706. package/dist/query-persist.js.map +7 -0
  707. package/dist/queued-writes.js +59 -0
  708. package/dist/queued-writes.js.map +7 -0
  709. package/dist/remote-control.js +67 -0
  710. package/dist/remote-control.js.map +7 -0
  711. package/dist/search/index.js +23 -0
  712. package/dist/search/index.js.map +7 -0
  713. package/dist/search/session.js +58 -0
  714. package/dist/search/session.js.map +7 -0
  715. package/dist/search/useSemanticSearch.js +82 -0
  716. package/dist/search/useSemanticSearch.js.map +7 -0
  717. package/dist/session/chat.js +512 -0
  718. package/dist/session/chat.js.map +7 -0
  719. package/dist/session/documents.js +196 -0
  720. package/dist/session/documents.js.map +7 -0
  721. package/dist/session/drafts.js +103 -0
  722. package/dist/session/drafts.js.map +7 -0
  723. package/dist/session/index.js +123 -0
  724. package/dist/session/index.js.map +7 -0
  725. package/dist/session/layout.js +339 -0
  726. package/dist/session/layout.js.map +7 -0
  727. package/dist/session/persist.js +106 -0
  728. package/dist/session/persist.js.map +7 -0
  729. package/dist/session/session-hooks.js +53 -0
  730. package/dist/session/session-hooks.js.map +7 -0
  731. package/dist/session/signed-in.js +36 -0
  732. package/dist/session/signed-in.js.map +7 -0
  733. package/dist/session/store.js +166 -0
  734. package/dist/session/store.js.map +7 -0
  735. package/dist/session/thread-tabs.js +121 -0
  736. package/dist/session/thread-tabs.js.map +7 -0
  737. package/dist/session/ui-state-storage.js +76 -0
  738. package/dist/session/ui-state-storage.js.map +7 -0
  739. package/dist/session/workspace.js +77 -0
  740. package/dist/session/workspace.js.map +7 -0
  741. package/dist/shell/index.js +43 -10
  742. package/dist/shell/index.js.map +7 -1
  743. package/dist/skill-pack.js +111 -0
  744. package/dist/skill-pack.js.map +7 -0
  745. package/dist/storage.js +186 -0
  746. package/dist/storage.js.map +7 -0
  747. package/dist/support/index.js +35 -0
  748. package/dist/support/index.js.map +7 -0
  749. package/dist/tags.js +204 -0
  750. package/dist/tags.js.map +7 -0
  751. package/dist/ui/DebouncedInput.js +109 -0
  752. package/dist/ui/DebouncedInput.js.map +7 -0
  753. package/dist/ui/DictateContext.js +8 -0
  754. package/dist/ui/DictateContext.js.map +7 -0
  755. package/dist/ui/IconToggle.js +79 -0
  756. package/dist/ui/IconToggle.js.map +7 -0
  757. package/dist/ui/VerifiedToggle.js +38 -0
  758. package/dist/ui/VerifiedToggle.js.map +7 -0
  759. package/dist/ui/VisibilityToggle.js +103 -0
  760. package/dist/ui/VisibilityToggle.js.map +7 -0
  761. package/dist/ui/avatar.js +40 -0
  762. package/dist/ui/avatar.js.map +7 -0
  763. package/dist/ui/badge.js +28 -0
  764. package/dist/ui/badge.js.map +7 -0
  765. package/dist/ui/button.js +48 -0
  766. package/dist/ui/button.js.map +7 -0
  767. package/dist/ui/card.js +90 -0
  768. package/dist/ui/card.js.map +7 -0
  769. package/dist/ui/checkbox.js +22 -0
  770. package/dist/ui/checkbox.js.map +7 -0
  771. package/dist/ui/collapsible.js +10 -0
  772. package/dist/ui/collapsible.js.map +7 -0
  773. package/dist/ui/command.js +103 -0
  774. package/dist/ui/command.js.map +7 -0
  775. package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
  776. package/dist/ui/dialog.js.map +7 -0
  777. package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
  778. package/dist/ui/dropdown-menu.js.map +7 -0
  779. package/dist/ui/hover-card.js +36 -0
  780. package/dist/ui/hover-card.js.map +7 -0
  781. package/dist/ui/index.js +290 -10
  782. package/dist/ui/index.js.map +7 -1
  783. package/dist/ui/input.js +65 -0
  784. package/dist/ui/input.js.map +7 -0
  785. package/dist/ui/label.js +16 -0
  786. package/dist/ui/label.js.map +7 -0
  787. package/dist/ui/mark-menu.js +300 -0
  788. package/dist/ui/mark-menu.js.map +7 -0
  789. package/dist/ui/popover.js +40 -0
  790. package/dist/ui/popover.js.map +7 -0
  791. package/dist/ui/portal-container.js +17 -0
  792. package/dist/ui/portal-container.js.map +7 -0
  793. package/dist/ui/progress.js +24 -0
  794. package/dist/ui/progress.js.map +7 -0
  795. package/dist/ui/radio-group.js +29 -0
  796. package/dist/ui/radio-group.js.map +7 -0
  797. package/dist/ui/scroll-area.js +39 -0
  798. package/dist/ui/scroll-area.js.map +7 -0
  799. package/dist/ui/select.js +130 -0
  800. package/dist/ui/select.js.map +7 -0
  801. package/dist/ui/separator.js +23 -0
  802. package/dist/ui/separator.js.map +7 -0
  803. package/dist/ui/slider.js +23 -0
  804. package/dist/ui/slider.js.map +7 -0
  805. package/dist/ui/switch.js +28 -0
  806. package/dist/ui/switch.js.map +7 -0
  807. package/dist/ui/table.js +75 -0
  808. package/dist/ui/table.js.map +7 -0
  809. package/dist/ui/tabs.js +48 -0
  810. package/dist/ui/tabs.js.map +7 -0
  811. package/dist/ui/textarea.js +63 -0
  812. package/dist/ui/textarea.js.map +7 -0
  813. package/dist/ui/toggle-group.js +43 -0
  814. package/dist/ui/toggle-group.js.map +7 -0
  815. package/dist/ui/toggle.js +40 -0
  816. package/dist/ui/toggle.js.map +7 -0
  817. package/dist/ui/tooltip.js +215 -0
  818. package/dist/ui/tooltip.js.map +7 -0
  819. package/dist/usage-metered.js +8 -0
  820. package/dist/usage-metered.js.map +7 -0
  821. package/dist/useArbi.js +16 -0
  822. package/dist/useArbi.js.map +7 -0
  823. package/dist/useInstallSkillPack.js +81 -0
  824. package/dist/useInstallSkillPack.js.map +7 -0
  825. package/dist/usermenu/UserMenu.js +188 -0
  826. package/dist/usermenu/UserMenu.js.map +7 -0
  827. package/dist/usermenu/index.js +5 -0
  828. package/dist/usermenu/index.js.map +7 -0
  829. package/dist/users/index.js +15 -0
  830. package/dist/users/index.js.map +7 -0
  831. package/dist/users/user-display.js +60 -0
  832. package/dist/users/user-display.js.map +7 -0
  833. package/dist/viewers/AudioViewer.js +23 -0
  834. package/dist/viewers/AudioViewer.js.map +7 -0
  835. package/dist/viewers/DocxViewer.js +81 -0
  836. package/dist/viewers/DocxViewer.js.map +7 -0
  837. package/dist/viewers/ImageViewer.js +31 -0
  838. package/dist/viewers/ImageViewer.js.map +7 -0
  839. package/dist/viewers/PdfViewer.js +19 -3
  840. package/dist/viewers/PdfViewer.js.map +7 -1
  841. package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
  842. package/dist/viewers/PdfViewerImpl.js.map +7 -0
  843. package/dist/viewers/VideoViewer.js +31 -0
  844. package/dist/viewers/VideoViewer.js.map +7 -0
  845. package/dist/viewers/XlsxViewer.js +102 -0
  846. package/dist/viewers/XlsxViewer.js.map +7 -0
  847. package/dist/viewers/index.js +61 -271
  848. package/dist/viewers/index.js.map +7 -1
  849. package/dist/viewers/page-scroll.js +59 -0
  850. package/dist/viewers/page-scroll.js.map +7 -0
  851. package/dist/viewers/pdf-viewer-constants.js +9 -0
  852. package/dist/viewers/pdf-viewer-constants.js.map +7 -0
  853. package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
  854. package/dist/viewers/pdfjs-polyfills.js.map +7 -0
  855. package/dist/viewers/selection-runs.js +38 -0
  856. package/dist/viewers/selection-runs.js.map +7 -0
  857. package/dist/viewers/usePageIntersectionObserver.js +68 -0
  858. package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
  859. package/dist/viewers/useProcessedChunks.js +58 -0
  860. package/dist/viewers/useProcessedChunks.js.map +7 -0
  861. package/dist/viewers/viewer-zoom.js +163 -0
  862. package/dist/viewers/viewer-zoom.js.map +7 -0
  863. package/dist/websocket/ArbiWebSocketProvider.js +207 -0
  864. package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
  865. package/dist/websocket/context.js +14 -0
  866. package/dist/websocket/context.js.map +7 -0
  867. package/dist/websocket/hooks.js +30 -0
  868. package/dist/websocket/hooks.js.map +7 -0
  869. package/dist/websocket/index.js +22 -0
  870. package/dist/websocket/index.js.map +7 -0
  871. package/dist/websocket/live-updates.js +38 -0
  872. package/dist/websocket/live-updates.js.map +7 -0
  873. package/dist/websocket/reconnect.js +13 -0
  874. package/dist/websocket/reconnect.js.map +7 -0
  875. package/dist/websocket/store.js +58 -0
  876. package/dist/websocket/store.js.map +7 -0
  877. package/dist/workforce.js +607 -0
  878. package/dist/workforce.js.map +7 -0
  879. package/dist/workspaces/access-request.js +35 -0
  880. package/dist/workspaces/access-request.js.map +7 -0
  881. package/dist/workspaces/archive.js +59 -0
  882. package/dist/workspaces/archive.js.map +7 -0
  883. package/dist/workspaces/current.js +20 -0
  884. package/dist/workspaces/current.js.map +7 -0
  885. package/dist/workspaces/delete-workspaces.js +15 -0
  886. package/dist/workspaces/delete-workspaces.js.map +7 -0
  887. package/dist/workspaces/export-archive.js +40 -0
  888. package/dist/workspaces/export-archive.js.map +7 -0
  889. package/dist/workspaces/index.js +99 -0
  890. package/dist/workspaces/index.js.map +7 -0
  891. package/dist/workspaces/settings.js +45 -0
  892. package/dist/workspaces/settings.js.map +7 -0
  893. package/dist/workspaces/shell-workspaces.js +49 -0
  894. package/dist/workspaces/shell-workspaces.js.map +7 -0
  895. package/dist/workspaces/switch.js +234 -0
  896. package/dist/workspaces/switch.js.map +7 -0
  897. package/dist/workspaces/transfer.js +170 -0
  898. package/dist/workspaces/transfer.js.map +7 -0
  899. package/dist/workspaces/useShellWorkspaces.js +86 -0
  900. package/dist/workspaces/useShellWorkspaces.js.map +7 -0
  901. package/dist/workspaces/workspace-users.js +65 -0
  902. package/dist/workspaces/workspace-users.js.map +7 -0
  903. package/package.json +4 -4
  904. package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
  905. package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
  906. package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
  907. package/dist/annotations/freeze/index.d.cts +0 -205
  908. package/dist/annotations/index.d.cts +0 -360
  909. package/dist/artifacts/index.d.cts +0 -476
  910. package/dist/artifacts/redline-core.d.cts +0 -39
  911. package/dist/bundle-YNOX7VIL.js +0 -5
  912. package/dist/bundle-YNOX7VIL.js.map +0 -1
  913. package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
  914. package/dist/calls/livekit/index.d.cts +0 -280
  915. package/dist/chunk-47CCGUWR.js.map +0 -1
  916. package/dist/chunk-4FL3X3LA.js +0 -2057
  917. package/dist/chunk-4FL3X3LA.js.map +0 -1
  918. package/dist/chunk-6QNBSXCE.js +0 -271
  919. package/dist/chunk-6QNBSXCE.js.map +0 -1
  920. package/dist/chunk-74N436VK.js.map +0 -1
  921. package/dist/chunk-APZZQZ6P.js +0 -147
  922. package/dist/chunk-APZZQZ6P.js.map +0 -1
  923. package/dist/chunk-BF5KW5ZI.js.map +0 -1
  924. package/dist/chunk-DPYBZDJB.js.map +0 -1
  925. package/dist/chunk-DZKRL5H3.js +0 -2766
  926. package/dist/chunk-DZKRL5H3.js.map +0 -1
  927. package/dist/chunk-HDCRPPBW.js +0 -75
  928. package/dist/chunk-HDCRPPBW.js.map +0 -1
  929. package/dist/chunk-L2IPPTVC.js +0 -20
  930. package/dist/chunk-L2IPPTVC.js.map +0 -1
  931. package/dist/chunk-LSU4UPS5.js +0 -1011
  932. package/dist/chunk-LSU4UPS5.js.map +0 -1
  933. package/dist/chunk-NIKPG4PW.js +0 -1128
  934. package/dist/chunk-NIKPG4PW.js.map +0 -1
  935. package/dist/chunk-NNAJLY6B.js +0 -4974
  936. package/dist/chunk-NNAJLY6B.js.map +0 -1
  937. package/dist/chunk-OYPKKHXY.js +0 -559
  938. package/dist/chunk-OYPKKHXY.js.map +0 -1
  939. package/dist/chunk-PTOP7OHG.js.map +0 -1
  940. package/dist/chunk-QMY2JKBI.js +0 -246
  941. package/dist/chunk-QMY2JKBI.js.map +0 -1
  942. package/dist/chunk-SN5YV6FF.js +0 -11
  943. package/dist/chunk-SN5YV6FF.js.map +0 -1
  944. package/dist/chunk-SSXFVWCT.js.map +0 -1
  945. package/dist/chunk-T3USOSVN.js.map +0 -1
  946. package/dist/chunk-T4CLW3DN.js +0 -2560
  947. package/dist/chunk-T4CLW3DN.js.map +0 -1
  948. package/dist/chunk-UW2SGTI5.js.map +0 -1
  949. package/dist/chunk-VSCU7K4V.js.map +0 -1
  950. package/dist/chunk-WL2Y2T47.js.map +0 -1
  951. package/dist/chunk-WUTL62MC.js.map +0 -1
  952. package/dist/chunk-XWPLOFDN.js +0 -644
  953. package/dist/chunk-XWPLOFDN.js.map +0 -1
  954. package/dist/chunk-Y3MTRA7D.js +0 -97
  955. package/dist/chunk-Y3MTRA7D.js.map +0 -1
  956. package/dist/chunk-YNNAJJ5Z.js.map +0 -1
  957. package/dist/chunk-ZM6N7YZH.js.map +0 -1
  958. package/dist/document-tools/core.d.cts +0 -883
  959. package/dist/document-tools/index.d.cts +0 -90
  960. package/dist/index.d-LArLnpI8.d.cts +0 -2036
  961. package/dist/index.d-oR5FKZpJ.d.cts +0 -579
  962. package/dist/index.d.cts +0 -15923
  963. package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
  964. package/dist/model.d-CNtRWKVK.d.cts +0 -110
  965. package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
  966. package/dist/shell/index.d.cts +0 -6
  967. package/dist/store.d-GADDvC7w.d.cts +0 -35
  968. package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
  969. package/dist/ui/index.d.cts +0 -26
  970. package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
  971. package/dist/viewers/PdfViewer.d.cts +0 -9
  972. package/dist/viewers/index.d.cts +0 -262
@@ -0,0 +1,195 @@
1
+ import { useCallback } from "react";
2
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { useArbi } from "./useArbi.js";
4
+ import { arbiQueryKeys } from "./query-keys.js";
5
+ const DATABASE_ROWS_PAGE = 1e3;
6
+ const DATABASE_RELATION_PICK_LIMIT = 50;
7
+ function invalidateRelatedRows(queryClient, databaseId, includeSelf) {
8
+ return queryClient.invalidateQueries({
9
+ queryKey: arbiQueryKeys.databaseRows(),
10
+ // ['arbi', 'databases', 'rows', workspaceId, databaseId, params]
11
+ predicate: (query) => includeSelf || query.queryKey[4] !== databaseId
12
+ });
13
+ }
14
+ function sameWorkspace(queryKey, workspaceId) {
15
+ return !!queryKey && queryKey[3] === workspaceId;
16
+ }
17
+ function useInvalidate() {
18
+ const queryClient = useQueryClient();
19
+ return {
20
+ list: () => queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseList() }),
21
+ rows: () => Promise.all([
22
+ queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseRows() }),
23
+ queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseAggregate() })
24
+ ]),
25
+ all: () => queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databases() })
26
+ };
27
+ }
28
+ function openWorkspaceId(arbi) {
29
+ return arbi.hasWorkspace ? arbi.getWorkspaceId() : "";
30
+ }
31
+ function useDatabases() {
32
+ const arbi = useArbi();
33
+ const workspaceId = openWorkspaceId(arbi);
34
+ return useQuery({
35
+ queryKey: arbiQueryKeys.databaseList(workspaceId),
36
+ queryFn: () => arbi.readInWorkspace(workspaceId, () => arbi.databases.list()),
37
+ enabled: !!workspaceId,
38
+ staleTime: 1e3 * 30
39
+ });
40
+ }
41
+ function useDatabase(databaseId, options) {
42
+ const arbi = useArbi();
43
+ const workspaceId = options?.workspaceId ?? openWorkspaceId(arbi);
44
+ return useQuery({
45
+ queryKey: arbiQueryKeys.database(workspaceId, databaseId ?? ""),
46
+ queryFn: () => arbi.databases.get(databaseId),
47
+ enabled: !!workspaceId && Boolean(databaseId),
48
+ staleTime: 1e3 * 30
49
+ });
50
+ }
51
+ function useDatabaseRows(databaseId, q, options) {
52
+ const arbi = useArbi();
53
+ const workspaceId = options?.workspaceId ?? openWorkspaceId(arbi);
54
+ const query = { q: q.trim() || void 0, limit: DATABASE_ROWS_PAGE };
55
+ return useQuery({
56
+ queryKey: arbiQueryKeys.databaseRows(workspaceId, databaseId ?? "", query),
57
+ queryFn: () => arbi.databases.rows(databaseId, query),
58
+ enabled: !!workspaceId && Boolean(databaseId),
59
+ staleTime: 1e3 * 15,
60
+ // What was shown stays while the next search loads, never another workspace's rows.
61
+ placeholderData: (previous, previousQuery) => sameWorkspace(previousQuery?.queryKey, workspaceId) ? previous : void 0
62
+ });
63
+ }
64
+ function useDatabaseAggregate(databaseId, request, options) {
65
+ const arbi = useArbi();
66
+ const workspaceId = options?.workspaceId ?? openWorkspaceId(arbi);
67
+ return useQuery({
68
+ queryKey: arbiQueryKeys.databaseAggregate(workspaceId, databaseId ?? "", request),
69
+ queryFn: () => arbi.databases.aggregate(databaseId, request),
70
+ enabled: (options?.enabled ?? true) && !!workspaceId && Boolean(databaseId),
71
+ staleTime: 1e3 * 15,
72
+ placeholderData: (previous, previousQuery) => sameWorkspace(previousQuery?.queryKey, workspaceId) ? previous : void 0
73
+ });
74
+ }
75
+ function useSearchDatabaseRows() {
76
+ const arbi = useArbi();
77
+ return useCallback(
78
+ (databaseId, q) => arbi.databases.rows(databaseId, { q: q.trim() || void 0, limit: DATABASE_RELATION_PICK_LIMIT }).then((page) => page.rows),
79
+ [arbi]
80
+ );
81
+ }
82
+ function useCreateDatabase() {
83
+ const arbi = useArbi();
84
+ const invalidate = useInvalidate();
85
+ return useMutation({
86
+ mutationFn: (body) => arbi.databases.create(body),
87
+ onSuccess: () => invalidate.list()
88
+ });
89
+ }
90
+ function useUpdateDatabase() {
91
+ const arbi = useArbi();
92
+ const invalidate = useInvalidate();
93
+ return useMutation({
94
+ mutationFn: ({ databaseId, patch }) => arbi.databases.update(databaseId, patch),
95
+ onSuccess: () => invalidate.all()
96
+ });
97
+ }
98
+ function useDeleteDatabase() {
99
+ const arbi = useArbi();
100
+ const invalidate = useInvalidate();
101
+ return useMutation({
102
+ mutationFn: (databaseId) => arbi.databases.delete(databaseId),
103
+ onSuccess: () => invalidate.list()
104
+ });
105
+ }
106
+ function useAddDatabaseRows() {
107
+ const arbi = useArbi();
108
+ const invalidate = useInvalidate();
109
+ return useMutation({
110
+ mutationFn: ({
111
+ databaseId,
112
+ rows
113
+ }) => arbi.databases.addRows(databaseId, rows),
114
+ onSuccess: () => Promise.all([invalidate.rows(), invalidate.list()])
115
+ });
116
+ }
117
+ function useUpdateDatabaseRow() {
118
+ const arbi = useArbi();
119
+ const queryClient = useQueryClient();
120
+ const workspaceId = openWorkspaceId(arbi);
121
+ return useMutation({
122
+ mutationFn: ({
123
+ databaseId,
124
+ rowId,
125
+ values
126
+ }) => arbi.databases.updateRow(databaseId, rowId, values),
127
+ onSuccess: (saved, { databaseId, values }) => {
128
+ queryClient.setQueriesData(
129
+ { queryKey: arbiQueryKeys.databaseRows() },
130
+ (page) => page && { ...page, rows: page.rows.map((row) => row.id === saved.id ? saved : row) }
131
+ );
132
+ const database = queryClient.getQueryData(
133
+ arbiQueryKeys.database(workspaceId, databaseId)
134
+ );
135
+ const selfLinked = !database?.columns || database.columns.some(
136
+ (column) => column.id in (values ?? {}) && column.type === "relation" && column.relation?.database_id === databaseId
137
+ );
138
+ void invalidateRelatedRows(queryClient, databaseId, selfLinked);
139
+ void queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseAggregate() });
140
+ },
141
+ onError: () => {
142
+ void queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseRows() });
143
+ }
144
+ });
145
+ }
146
+ function useDeleteDatabaseRows() {
147
+ const arbi = useArbi();
148
+ const invalidate = useInvalidate();
149
+ return useMutation({
150
+ mutationFn: ({ databaseId, ids }) => arbi.databases.deleteRows(databaseId, ids),
151
+ onSuccess: () => Promise.all([invalidate.rows(), invalidate.list()])
152
+ });
153
+ }
154
+ function useImportDatabase() {
155
+ const arbi = useArbi();
156
+ const invalidate = useInvalidate();
157
+ return useMutation({
158
+ mutationFn: ({ file, name }) => arbi.databases.import(file, name),
159
+ onSuccess: () => invalidate.list()
160
+ });
161
+ }
162
+ function useImportDatabaseRows() {
163
+ const arbi = useArbi();
164
+ const invalidate = useInvalidate();
165
+ return useMutation({
166
+ mutationFn: ({ databaseId, file }) => arbi.databases.importRows(databaseId, file),
167
+ onSuccess: () => invalidate.all()
168
+ });
169
+ }
170
+ function useExportDatabase() {
171
+ const arbi = useArbi();
172
+ return useCallback(
173
+ (databaseId, format) => arbi.databases.export(databaseId, format),
174
+ [arbi]
175
+ );
176
+ }
177
+ export {
178
+ DATABASE_RELATION_PICK_LIMIT,
179
+ DATABASE_ROWS_PAGE,
180
+ useAddDatabaseRows,
181
+ useCreateDatabase,
182
+ useDatabase,
183
+ useDatabaseAggregate,
184
+ useDatabaseRows,
185
+ useDatabases,
186
+ useDeleteDatabase,
187
+ useDeleteDatabaseRows,
188
+ useExportDatabase,
189
+ useImportDatabase,
190
+ useImportDatabaseRows,
191
+ useSearchDatabaseRows,
192
+ useUpdateDatabase,
193
+ useUpdateDatabaseRow
194
+ };
195
+ //# sourceMappingURL=databases.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/databases.ts"],
4
+ "sourcesContent": ["/**\n * Databases: user-defined tables of the open workspace (a client database, billing records),\n * encrypted under the workspace key like facts. The list also carries databases of public\n * workspaces, which come back `editable: false` (read here, edited from their own workspace).\n *\n * Reads are keyed by the one key factory (`arbiQueryKeys.database*`); every write keeps those\n * entries current.\n */\n\nimport { useCallback } from 'react'\nimport { useMutation, useQuery, useQueryClient, type QueryClient } from '@tanstack/react-query'\nimport type {\n Database,\n DatabaseColumnWrite,\n DatabaseImportResult,\n DatabaseRow,\n DatabaseRowPage,\n} from '@arbidocs/sdk/browser'\nimport type { components } from '@arbidocs/client'\nimport { useArbi } from './useArbi'\nimport { arbiQueryKeys } from './query-keys'\n\nexport type { Database, DatabaseColumnWrite, DatabaseImportResult, DatabaseRow, DatabaseRowPage }\nexport type { DatabaseColumn } from '@arbidocs/sdk/browser'\n\ntype DatabaseCreate = components['schemas']['DatabaseCreate']\ntype DatabaseUpdate = components['schemas']['DatabaseUpdate']\ntype DatabaseRowValues = components['schemas']['DatabaseRowWrite']['values']\nexport type DatabaseAggregateRequest = components['schemas']['DatabaseAggregateRequest']\nexport type DatabaseAggregateResult = components['schemas']['DatabaseAggregateResult']\n\n/** The most rows the grid loads at once (the API's page limit). Search runs on the server. */\nexport const DATABASE_ROWS_PAGE = 1000\n\n/** The most rows a relation cell's picker lists for one search. */\nexport const DATABASE_RELATION_PICK_LIMIT = 50\n\n/**\n * After a relation cell changes, other databases' rows can have changed with it (the paired column\n * of a two-way relation, lookups and rollups reading through it): refetch them when next shown.\n * The edited database's own rows are left alone (the grid already holds the server's answer)\n * unless the relation links it to itself.\n */\nfunction invalidateRelatedRows(queryClient: QueryClient, databaseId: string, includeSelf: boolean) {\n return queryClient.invalidateQueries({\n queryKey: arbiQueryKeys.databaseRows(),\n // ['arbi', 'databases', 'rows', workspaceId, databaseId, params]\n predicate: (query) => includeSelf || query.queryKey[4] !== databaseId,\n })\n}\n\n/** Whether a cached key (`['arbi', 'databases', kind, workspaceId, \u2026]`) is this workspace's. */\nfunction sameWorkspace(queryKey: readonly unknown[] | undefined, workspaceId: string): boolean {\n return !!queryKey && queryKey[3] === workspaceId\n}\n\nfunction useInvalidate() {\n const queryClient = useQueryClient()\n return {\n list: () => queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseList() }),\n rows: () =>\n Promise.all([\n queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseRows() }),\n queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseAggregate() }),\n ]),\n all: () => queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databases() }),\n }\n}\n\n/** The open workspace's id, or '' with none open. */\nfunction openWorkspaceId(arbi: ReturnType<typeof useArbi>): string {\n return arbi.hasWorkspace ? arbi.getWorkspaceId() : ''\n}\n\n/**\n * The open workspace's databases, then those of public workspaces (read-only here). Kept per\n * workspace, and read only while that workspace stays open on the server (the list is the open\n * workspace's there): a read that crosses a switch is dropped, never cached as the other's.\n */\nexport function useDatabases() {\n const arbi = useArbi()\n const workspaceId = openWorkspaceId(arbi)\n return useQuery({\n queryKey: arbiQueryKeys.databaseList(workspaceId),\n queryFn: () => arbi.readInWorkspace(workspaceId, () => arbi.databases.list()),\n enabled: !!workspaceId,\n staleTime: 1000 * 30,\n })\n}\n\n/** `workspaceId`: the database's own workspace (a by-id read acts there), else the open one. */\nexport function useDatabase(databaseId: string | null, options?: { workspaceId?: string }) {\n const arbi = useArbi()\n const workspaceId = options?.workspaceId ?? openWorkspaceId(arbi)\n return useQuery({\n queryKey: arbiQueryKeys.database(workspaceId, databaseId ?? ''),\n queryFn: () => arbi.databases.get(databaseId as string),\n enabled: !!workspaceId && Boolean(databaseId),\n staleTime: 1000 * 30,\n })\n}\n\n/** A database's rows: searched (any cell) on the server, the first `DATABASE_ROWS_PAGE`. */\nexport function useDatabaseRows(\n databaseId: string | null,\n q: string,\n options?: { workspaceId?: string }\n) {\n const arbi = useArbi()\n const workspaceId = options?.workspaceId ?? openWorkspaceId(arbi)\n const query = { q: q.trim() || undefined, limit: DATABASE_ROWS_PAGE }\n return useQuery({\n queryKey: arbiQueryKeys.databaseRows(workspaceId, databaseId ?? '', query),\n queryFn: () => arbi.databases.rows(databaseId as string, query),\n enabled: !!workspaceId && Boolean(databaseId),\n staleTime: 1000 * 15,\n // What was shown stays while the next search loads, never another workspace's rows.\n placeholderData: (previous, previousQuery) =>\n sameWorkspace(previousQuery?.queryKey, workspaceId) ? previous : undefined,\n })\n}\n\n/**\n * A database's rows grouped and measured on the server (over every row): the labels and series a\n * chart or a metric tile draws. Row writes here refresh it.\n */\nexport function useDatabaseAggregate(\n databaseId: string | null,\n request: Partial<DatabaseAggregateRequest>,\n options?: { enabled?: boolean; workspaceId?: string }\n) {\n const arbi = useArbi()\n const workspaceId = options?.workspaceId ?? openWorkspaceId(arbi)\n return useQuery({\n queryKey: arbiQueryKeys.databaseAggregate(workspaceId, databaseId ?? '', request),\n queryFn: () => arbi.databases.aggregate(databaseId as string, request),\n enabled: (options?.enabled ?? true) && !!workspaceId && Boolean(databaseId),\n staleTime: 1000 * 15,\n placeholderData: (previous, previousQuery) =>\n sameWorkspace(previousQuery?.queryKey, workspaceId) ? previous : undefined,\n })\n}\n\n/**\n * Search a database's rows (any cell, on the server) for a relation cell's picker. Read once per\n * search rather than cached: the picker debounces its typing.\n */\nexport function useSearchDatabaseRows() {\n const arbi = useArbi()\n return useCallback(\n (databaseId: string, q: string): Promise<DatabaseRow[]> =>\n arbi.databases\n .rows(databaseId, { q: q.trim() || undefined, limit: DATABASE_RELATION_PICK_LIMIT })\n .then((page) => page.rows),\n [arbi]\n )\n}\n\nexport function useCreateDatabase() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: (body: DatabaseCreate) => arbi.databases.create(body),\n onSuccess: () => invalidate.list(),\n })\n}\n\n/** Rename, describe, or change columns (`columns` is the full new list). */\nexport function useUpdateDatabase() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: ({ databaseId, patch }: { databaseId: string; patch: DatabaseUpdate }) =>\n arbi.databases.update(databaseId, patch),\n onSuccess: () => invalidate.all(),\n })\n}\n\nexport function useDeleteDatabase() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: (databaseId: string) => arbi.databases.delete(databaseId),\n onSuccess: () => invalidate.list(),\n })\n}\n\nexport function useAddDatabaseRows() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: ({\n databaseId,\n rows,\n }: {\n databaseId: string\n rows: { values: DatabaseRowValues }[]\n }) => arbi.databases.addRows(databaseId, rows),\n onSuccess: () => Promise.all([invalidate.rows(), invalidate.list()]),\n })\n}\n\n/**\n * Change cells of one row (`null` empties a cell). The server's (normalised) row replaces the row in\n * every cached page of rows. Other databases are marked stale for relation/lookups/rollups;\n * the edited database is re-read for a self-relation or unknown column metadata. Failed edits\n * re-read rows to reconcile.\n */\nexport function useUpdateDatabaseRow() {\n const arbi = useArbi()\n const queryClient = useQueryClient()\n const workspaceId = openWorkspaceId(arbi)\n return useMutation({\n mutationFn: ({\n databaseId,\n rowId,\n values,\n }: {\n databaseId: string\n rowId: string\n values: DatabaseRowValues\n }) => arbi.databases.updateRow(databaseId, rowId, values),\n onSuccess: (saved, { databaseId, values }) => {\n queryClient.setQueriesData<DatabaseRowPage>(\n { queryKey: arbiQueryKeys.databaseRows() },\n (page) =>\n page && { ...page, rows: page.rows.map((row) => (row.id === saved.id ? saved : row)) }\n )\n const database = queryClient.getQueryData<Database>(\n arbiQueryKeys.database(workspaceId, databaseId)\n )\n const selfLinked =\n !database?.columns ||\n database.columns.some(\n (column) =>\n column.id in (values ?? {}) &&\n column.type === 'relation' &&\n column.relation?.database_id === databaseId\n )\n void invalidateRelatedRows(queryClient, databaseId, selfLinked)\n // Every chart over a database can read through the edited cell (relations, lookups).\n void queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseAggregate() })\n },\n onError: () => {\n void queryClient.invalidateQueries({ queryKey: arbiQueryKeys.databaseRows() })\n },\n })\n}\n\nexport function useDeleteDatabaseRows() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: ({ databaseId, ids }: { databaseId: string; ids: string[] }) =>\n arbi.databases.deleteRows(databaseId, ids),\n onSuccess: () => Promise.all([invalidate.rows(), invalidate.list()]),\n })\n}\n\n/** Create a database from a .csv / .xlsx file (column types are inferred). */\nexport function useImportDatabase() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: ({ file, name }: { file: File; name?: string }) =>\n arbi.databases.import(file, name),\n onSuccess: () => invalidate.list(),\n })\n}\n\n/** Append a spreadsheet's rows; headers match column names, unknown ones become new columns. */\nexport function useImportDatabaseRows() {\n const arbi = useArbi()\n const invalidate = useInvalidate()\n return useMutation({\n mutationFn: ({ databaseId, file }: { databaseId: string; file: File }) =>\n arbi.databases.importRows(databaseId, file),\n onSuccess: () => invalidate.all(),\n })\n}\n\n/** Download a database as .xlsx or .csv. */\nexport function useExportDatabase() {\n const arbi = useArbi()\n return useCallback(\n (databaseId: string, format: 'csv' | 'xlsx') => arbi.databases.export(databaseId, format),\n [arbi]\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,281 @@
1
+ import {
2
+ AGGREGATE_FIELDS
3
+ } from "./types.js";
4
+ const EMPTY_GROUP_LABEL = "(empty)";
5
+ const MAX_SERIES = 12;
6
+ const DEFAULT_LIMIT = 50;
7
+ const pad = (n) => String(n).padStart(2, "0");
8
+ function asDay(value) {
9
+ if (typeof value !== "string" || value.length < 10) return null;
10
+ const day = /* @__PURE__ */ new Date(`${value.slice(0, 10)}T00:00:00Z`);
11
+ return Number.isNaN(day.getTime()) ? null : day;
12
+ }
13
+ function isoWeek(day) {
14
+ const d = new Date(day);
15
+ const weekday = d.getUTCDay() || 7;
16
+ d.setUTCDate(d.getUTCDate() + 4 - weekday);
17
+ const yearStart = Date.UTC(d.getUTCFullYear(), 0, 1);
18
+ return [d.getUTCFullYear(), Math.ceil(((d.getTime() - yearStart) / 864e5 + 1) / 7)];
19
+ }
20
+ function bucketOf(value, bucket) {
21
+ const day = asDay(value);
22
+ if (!day) return null;
23
+ const y = day.getUTCFullYear();
24
+ const m = day.getUTCMonth() + 1;
25
+ switch (bucket) {
26
+ case "day":
27
+ return `${y}-${pad(m)}-${pad(day.getUTCDate())}`;
28
+ case "week": {
29
+ const [wy, w] = isoWeek(day);
30
+ return `${wy}-W${pad(w)}`;
31
+ }
32
+ case "quarter":
33
+ return `${y}-Q${Math.floor((m - 1) / 3) + 1}`;
34
+ case "year":
35
+ return String(y);
36
+ default:
37
+ return `${y}-${pad(m)}`;
38
+ }
39
+ }
40
+ function bucketStart(key, bucket) {
41
+ const parts = key.match(/^(\d{4})(?:-(W|Q)?(\d{1,2}))?(?:-(\d{2}))?$/);
42
+ if (!parts) return null;
43
+ const year = Number(parts[1]);
44
+ const n = Number(parts[3] ?? 1);
45
+ switch (bucket) {
46
+ case "day":
47
+ return asDay(key);
48
+ case "week": {
49
+ const jan4 = new Date(Date.UTC(year, 0, 4));
50
+ const monday = new Date(jan4);
51
+ monday.setUTCDate(jan4.getUTCDate() - ((jan4.getUTCDay() || 7) - 1) + (n - 1) * 7);
52
+ return monday;
53
+ }
54
+ case "quarter":
55
+ return new Date(Date.UTC(year, (n - 1) * 3, 1));
56
+ case "year":
57
+ return new Date(Date.UTC(year, 0, 1));
58
+ default:
59
+ return new Date(Date.UTC(year, n - 1, 1));
60
+ }
61
+ }
62
+ function nextBucket(day, bucket) {
63
+ const d = new Date(day);
64
+ if (bucket === "day") d.setUTCDate(d.getUTCDate() + 1);
65
+ else if (bucket === "week") d.setUTCDate(d.getUTCDate() + 7);
66
+ else if (bucket === "month") d.setUTCMonth(d.getUTCMonth() + 1);
67
+ else if (bucket === "quarter") d.setUTCMonth(d.getUTCMonth() + 3);
68
+ else d.setUTCFullYear(d.getUTCFullYear() + 1);
69
+ return d;
70
+ }
71
+ function bucketRange(first, last, bucket, max = 500) {
72
+ const start = bucketStart(first, bucket);
73
+ const end = bucketStart(last, bucket);
74
+ if (!start || !end || start > end) return null;
75
+ const keys = [];
76
+ for (let d = start; d <= end && keys.length <= max; d = nextBucket(d, bucket)) {
77
+ keys.push(bucketOf(d.toISOString(), bucket));
78
+ }
79
+ return keys.length > max ? null : keys;
80
+ }
81
+ const isEmpty = (value) => value === null || value === void 0 || value === "" || Array.isArray(value) && !value.length;
82
+ function groupKeys(value, field, bucket) {
83
+ if (isEmpty(value)) return [""];
84
+ if (Array.isArray(value)) {
85
+ return [...new Set(value.map((v) => groupKeys(v, field, bucket)[0]))];
86
+ }
87
+ if (field.type === "date") return [bucketOf(value, bucket) ?? ""];
88
+ if (typeof value === "boolean") return [value ? "Yes" : "No"];
89
+ return [String(value)];
90
+ }
91
+ const lower = (v) => String(v).toLowerCase();
92
+ function compare(value, filter, field) {
93
+ const empty = isEmpty(value);
94
+ if (filter.op === "empty") return empty;
95
+ if (filter.op === "not_empty") return !empty;
96
+ if (Array.isArray(value)) {
97
+ const values = value;
98
+ if (filter.op === "contains")
99
+ return values.some((v) => lower(v).includes(lower(filter.value ?? "")));
100
+ if (filter.op === "eq" || filter.op === "neq") {
101
+ const hit = values.some((v) => lower(v) === lower(filter.value));
102
+ return filter.op === "eq" ? hit : !hit;
103
+ }
104
+ return false;
105
+ }
106
+ const same = typeof value === "string" ? lower(value) === lower(filter.value) : value === filter.value;
107
+ if (filter.op === "eq") return same;
108
+ if (filter.op === "neq") return !same;
109
+ if (filter.op === "contains") return !empty && lower(value).includes(lower(filter.value ?? ""));
110
+ if (empty || filter.value === null || filter.value === void 0) return false;
111
+ const [a, b] = field.type === "number" ? [Number(value), Number(filter.value)] : [String(value).slice(0, 19), String(filter.value).slice(0, 19)];
112
+ return { gt: a > b, gte: a >= b, lt: a < b, lte: a <= b }[filter.op];
113
+ }
114
+ function recordsOf(dataset, query) {
115
+ const rows = filterRows(dataset.rows, dataset.fields, query.filters);
116
+ const order = query.orderBy;
117
+ const field = order && dataset.fields.find((f) => f.id === order.field);
118
+ if (order && field) {
119
+ const dir = order.direction === "desc" ? -1 : 1;
120
+ const key = (v) => Array.isArray(v) ? v.join(", ") : v;
121
+ rows.sort((a, b) => {
122
+ const x = key(a[field.id]);
123
+ const y = key(b[field.id]);
124
+ if (isEmpty(x) || isEmpty(y)) return isEmpty(x) === isEmpty(y) ? 0 : isEmpty(x) ? 1 : -1;
125
+ if (typeof x === "number" && typeof y === "number") return dir * (x - y);
126
+ return dir * String(x).localeCompare(String(y));
127
+ });
128
+ }
129
+ return {
130
+ fields: dataset.fields,
131
+ rows: query.limit ? rows.slice(0, query.limit) : rows,
132
+ totalRows: rows.length,
133
+ truncated: !!query.limit && rows.length > query.limit
134
+ };
135
+ }
136
+ function filterRows(rows, fields, filters = []) {
137
+ if (!filters.length) return [...rows];
138
+ const byId = new Map(fields.map((f) => [f.id, f]));
139
+ return rows.filter(
140
+ (row) => filters.every((filter) => {
141
+ const field = byId.get(filter.field);
142
+ return field ? compare(row[filter.field], filter, field) : false;
143
+ })
144
+ );
145
+ }
146
+ function measure(values, op, countRows) {
147
+ if (op === "count") return countRows ? values.length : values.filter((v) => !isEmpty(v)).length;
148
+ const numbers = values.filter((v) => typeof v === "number" && Number.isFinite(v));
149
+ if (!numbers.length) return null;
150
+ if (op === "sum") return numbers.reduce((a, b) => a + b, 0);
151
+ if (op === "avg") return numbers.reduce((a, b) => a + b, 0) / numbers.length;
152
+ return op === "min" ? Math.min(...numbers) : Math.max(...numbers);
153
+ }
154
+ function measureLabel(op, field) {
155
+ return field ? `${op} of ${field.label}` : "count";
156
+ }
157
+ const labelOf = (key) => key === "" ? EMPTY_GROUP_LABEL : key;
158
+ function aggregateFields(fields, query) {
159
+ const byId = new Map(fields.map((f) => [f.id, f]));
160
+ const group = query.groupBy ? byId.get(query.groupBy) : void 0;
161
+ const split = query.splitBy ? byId.get(query.splitBy) : void 0;
162
+ const op = query.measure?.op ?? "count";
163
+ const value = query.measure?.field ? byId.get(query.measure.field) : void 0;
164
+ return [
165
+ { id: AGGREGATE_FIELDS.group, label: group?.label ?? "All", type: "string" },
166
+ { id: AGGREGATE_FIELDS.key, label: group?.label ?? "All", type: "string" },
167
+ ...split ? [{ id: AGGREGATE_FIELDS.series, label: split.label, type: "string" }] : [],
168
+ {
169
+ id: AGGREGATE_FIELDS.value,
170
+ label: measureLabel(op, value),
171
+ type: "number",
172
+ ...value?.unit && op !== "count" ? { unit: value.unit } : {}
173
+ }
174
+ ];
175
+ }
176
+ function aggregateDataset(dataset, query) {
177
+ const byId = new Map(dataset.fields.map((f) => [f.id, f]));
178
+ const group = query.groupBy ? byId.get(query.groupBy) : void 0;
179
+ const split = query.splitBy ? byId.get(query.splitBy) : void 0;
180
+ const op = query.measure?.op ?? "count";
181
+ const valueField = query.measure?.field ? byId.get(query.measure.field) : void 0;
182
+ const bucket = query.bucket ?? "month";
183
+ const fields = aggregateFields(dataset.fields, query);
184
+ if (op !== "count" && valueField?.type !== "number") {
185
+ throw new Error(`${op} needs a number field`);
186
+ }
187
+ const rows = filterRows(dataset.rows, dataset.fields, query.filters);
188
+ const cells = /* @__PURE__ */ new Map();
189
+ for (const row of rows) {
190
+ const groups = group ? groupKeys(row[group.id], group, bucket) : ["All"];
191
+ const splits = split ? groupKeys(row[split.id], split, bucket) : [""];
192
+ const value = valueField ? row[valueField.id] ?? null : 1;
193
+ for (const g of groups) {
194
+ const bySplit = cells.get(g) ?? /* @__PURE__ */ new Map();
195
+ cells.set(g, bySplit);
196
+ for (const s of splits) bySplit.set(s, [...bySplit.get(s) ?? [], value]);
197
+ }
198
+ }
199
+ const countRows = !valueField;
200
+ const totals = new Map(
201
+ [...cells].map(([g, bySplit]) => [g, measure([...bySplit.values()].flat(), op, countRows)])
202
+ );
203
+ const byLabel = (a, b) => a === "" ? 1 : b === "" ? -1 : a.localeCompare(b);
204
+ const byValue = (dir) => (a, b) => a === "" !== (b === "") ? a === "" ? 1 : -1 : dir * ((totals.get(a) ?? 0) - (totals.get(b) ?? 0)) || byLabel(a, b);
205
+ const sort = query.sort ?? (group?.type === "date" ? "label" : "value-desc");
206
+ const keys = [...cells.keys()].sort(
207
+ sort === "label" ? byLabel : byValue(sort === "value-asc" ? 1 : -1)
208
+ );
209
+ const limit = query.limit ?? DEFAULT_LIMIT;
210
+ const kept = keys.slice(0, limit);
211
+ let splitKeys = [""];
212
+ if (split) {
213
+ const splitTotals = /* @__PURE__ */ new Map();
214
+ for (const g of kept) {
215
+ for (const [s, values] of cells.get(g) ?? []) {
216
+ splitTotals.set(s, (splitTotals.get(s) ?? 0) + (measure(values, op, countRows) ?? 0));
217
+ }
218
+ }
219
+ splitKeys = [...splitTotals.keys()].sort(
220
+ (a, b) => a === "" !== (b === "") ? a === "" ? 1 : -1 : (splitTotals.get(b) ?? 0) - (splitTotals.get(a) ?? 0) || byLabel(a, b)
221
+ ).slice(0, MAX_SERIES);
222
+ }
223
+ const out = [];
224
+ for (const g of kept) {
225
+ for (const s of splitKeys) {
226
+ const values = cells.get(g)?.get(s);
227
+ out.push({
228
+ [AGGREGATE_FIELDS.group]: labelOf(g),
229
+ [AGGREGATE_FIELDS.key]: g,
230
+ ...split ? { [AGGREGATE_FIELDS.series]: labelOf(s) } : {},
231
+ [AGGREGATE_FIELDS.value]: values ? measure(values, op, countRows) : null
232
+ });
233
+ }
234
+ }
235
+ return { fields, rows: out, totalRows: rows.length, truncated: keys.length > limit };
236
+ }
237
+ function fillTimeGaps(dataset, bucket) {
238
+ const keyId = AGGREGATE_FIELDS.key;
239
+ const keys = [...new Set(dataset.rows.map((r) => String(r[keyId] ?? "")))].filter(Boolean);
240
+ if (keys.length < 2) return dataset;
241
+ const sorted = [...keys].sort();
242
+ const range = bucketRange(sorted[0], sorted[sorted.length - 1], bucket);
243
+ if (!range || range.length === keys.length) return dataset;
244
+ const hasSeries = dataset.fields.some((f) => f.id === AGGREGATE_FIELDS.series);
245
+ const seriesLabels = hasSeries ? [...new Set(dataset.rows.map((r) => String(r[AGGREGATE_FIELDS.series])))] : [null];
246
+ const byKey = /* @__PURE__ */ new Map();
247
+ for (const row of dataset.rows) {
248
+ const k = String(row[keyId] ?? "");
249
+ byKey.set(k, [...byKey.get(k) ?? [], row]);
250
+ }
251
+ const rows = [];
252
+ for (const k of range) {
253
+ const existing = byKey.get(k);
254
+ if (existing) rows.push(...existing);
255
+ else {
256
+ for (const s of seriesLabels) {
257
+ rows.push({
258
+ [AGGREGATE_FIELDS.group]: k,
259
+ [keyId]: k,
260
+ ...hasSeries ? { [AGGREGATE_FIELDS.series]: s } : {},
261
+ [AGGREGATE_FIELDS.value]: null
262
+ });
263
+ }
264
+ }
265
+ }
266
+ rows.push(...byKey.get("") ?? []);
267
+ return { ...dataset, rows };
268
+ }
269
+ export {
270
+ EMPTY_GROUP_LABEL,
271
+ MAX_SERIES,
272
+ aggregateDataset,
273
+ aggregateFields,
274
+ bucketOf,
275
+ bucketRange,
276
+ fillTimeGaps,
277
+ filterRows,
278
+ measureLabel,
279
+ recordsOf
280
+ };
281
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/datasets/aggregate.ts"],
4
+ "sourcesContent": ["/**\n * Grouping and measuring a dataset in the browser, for sources whose rows are already loaded\n * (documents, threads, projects, AI usage). The rules are the server's database aggregation\n * (`POST /v1/databases/{id}/aggregate`), so a panel reads the same whichever side measured it:\n * empty cells group as \"(empty)\", a multi-valued cell counts in each of its values' groups, date\n * groups run chronologically and others by value, at most {@link MAX_SERIES} series.\n */\nimport {\n AGGREGATE_FIELDS,\n type AggregateOp,\n type Dataset,\n type DatasetField,\n type DatasetFilter,\n type DatasetQuery,\n type DatasetRow,\n type DatasetValue,\n type TimeBucket,\n} from './types'\n\n/** The label of the group of empty cells. */\nexport const EMPTY_GROUP_LABEL = '(empty)'\n\n/** The most series a split keeps (the largest). */\nexport const MAX_SERIES = 12\n\nconst DEFAULT_LIMIT = 50\n\nconst pad = (n: number) => String(n).padStart(2, '0')\n\n/** A date value as a UTC day, or null. */\nfunction asDay(value: DatasetValue | undefined): Date | null {\n if (typeof value !== 'string' || value.length < 10) return null\n const day = new Date(`${value.slice(0, 10)}T00:00:00Z`)\n return Number.isNaN(day.getTime()) ? null : day\n}\n\n/** ISO 8601 week-numbering year and week of a UTC day. */\nfunction isoWeek(day: Date): [number, number] {\n const d = new Date(day)\n const weekday = d.getUTCDay() || 7\n d.setUTCDate(d.getUTCDate() + 4 - weekday)\n const yearStart = Date.UTC(d.getUTCFullYear(), 0, 1)\n return [d.getUTCFullYear(), Math.ceil(((d.getTime() - yearStart) / 86_400_000 + 1) / 7)]\n}\n\n/** The bucket key of a date (`2026-06-12`, `2026-W24`, `2026-06`, `2026-Q2`, `2026`), or null. */\nexport function bucketOf(value: DatasetValue | undefined, bucket: TimeBucket): string | null {\n const day = asDay(value)\n if (!day) return null\n const y = day.getUTCFullYear()\n const m = day.getUTCMonth() + 1\n switch (bucket) {\n case 'day':\n return `${y}-${pad(m)}-${pad(day.getUTCDate())}`\n case 'week': {\n const [wy, w] = isoWeek(day)\n return `${wy}-W${pad(w)}`\n }\n case 'quarter':\n return `${y}-Q${Math.floor((m - 1) / 3) + 1}`\n case 'year':\n return String(y)\n default:\n return `${y}-${pad(m)}`\n }\n}\n\n/** The first day of a bucket key, or null. */\nfunction bucketStart(key: string, bucket: TimeBucket): Date | null {\n const parts = key.match(/^(\\d{4})(?:-(W|Q)?(\\d{1,2}))?(?:-(\\d{2}))?$/)\n if (!parts) return null\n const year = Number(parts[1])\n const n = Number(parts[3] ?? 1)\n switch (bucket) {\n case 'day':\n return asDay(key)\n case 'week': {\n // Monday of ISO week 1 is the Monday on or before 4 January.\n const jan4 = new Date(Date.UTC(year, 0, 4))\n const monday = new Date(jan4)\n monday.setUTCDate(jan4.getUTCDate() - ((jan4.getUTCDay() || 7) - 1) + (n - 1) * 7)\n return monday\n }\n case 'quarter':\n return new Date(Date.UTC(year, (n - 1) * 3, 1))\n case 'year':\n return new Date(Date.UTC(year, 0, 1))\n default:\n return new Date(Date.UTC(year, n - 1, 1))\n }\n}\n\nfunction nextBucket(day: Date, bucket: TimeBucket): Date {\n const d = new Date(day)\n if (bucket === 'day') d.setUTCDate(d.getUTCDate() + 1)\n else if (bucket === 'week') d.setUTCDate(d.getUTCDate() + 7)\n else if (bucket === 'month') d.setUTCMonth(d.getUTCMonth() + 1)\n else if (bucket === 'quarter') d.setUTCMonth(d.getUTCMonth() + 3)\n else d.setUTCFullYear(d.getUTCFullYear() + 1)\n return d\n}\n\n/** Every bucket key from `first` to `last` (at most `max`; null when the keys are not buckets). */\nexport function bucketRange(\n first: string,\n last: string,\n bucket: TimeBucket,\n max = 500\n): string[] | null {\n const start = bucketStart(first, bucket)\n const end = bucketStart(last, bucket)\n if (!start || !end || start > end) return null\n const keys: string[] = []\n for (let d = start; d <= end && keys.length <= max; d = nextBucket(d, bucket)) {\n keys.push(bucketOf(d.toISOString(), bucket) as string)\n }\n return keys.length > max ? null : keys\n}\n\nconst isEmpty = (value: DatasetValue | undefined) =>\n value === null || value === undefined || value === '' || (Array.isArray(value) && !value.length)\n\n/** The groups a cell puts its row in: one, or one per value of a list; `''` when empty. */\nfunction groupKeys(\n value: DatasetValue | undefined,\n field: DatasetField,\n bucket: TimeBucket\n): string[] {\n if (isEmpty(value)) return ['']\n if (Array.isArray(value)) {\n return [...new Set(value.map((v) => groupKeys(v, field, bucket)[0]))]\n }\n if (field.type === 'date') return [bucketOf(value as DatasetValue, bucket) ?? '']\n if (typeof value === 'boolean') return [value ? 'Yes' : 'No']\n return [String(value)]\n}\n\nconst lower = (v: unknown) => String(v).toLowerCase()\n\nfunction compare(value: DatasetValue | undefined, filter: DatasetFilter, field: DatasetField) {\n const empty = isEmpty(value)\n if (filter.op === 'empty') return empty\n if (filter.op === 'not_empty') return !empty\n if (Array.isArray(value)) {\n const values = value as readonly string[]\n if (filter.op === 'contains')\n return values.some((v) => lower(v).includes(lower(filter.value ?? '')))\n if (filter.op === 'eq' || filter.op === 'neq') {\n const hit = values.some((v) => lower(v) === lower(filter.value))\n return filter.op === 'eq' ? hit : !hit\n }\n return false\n }\n const same =\n typeof value === 'string' ? lower(value) === lower(filter.value) : value === filter.value\n if (filter.op === 'eq') return same\n if (filter.op === 'neq') return !same\n if (filter.op === 'contains') return !empty && lower(value).includes(lower(filter.value ?? ''))\n if (empty || filter.value === null || filter.value === undefined) return false\n const [a, b] =\n field.type === 'number'\n ? [Number(value), Number(filter.value)]\n : [String(value).slice(0, 19), String(filter.value).slice(0, 19)]\n return { gt: a > b, gte: a >= b, lt: a < b, lte: a <= b }[filter.op]\n}\n\n/** The records of a query: those that pass its filters, in its order, at most its limit. */\nexport function recordsOf(dataset: Dataset, query: DatasetQuery): Dataset {\n const rows = filterRows(dataset.rows, dataset.fields, query.filters)\n const order = query.orderBy\n const field = order && dataset.fields.find((f) => f.id === order.field)\n if (order && field) {\n const dir = order.direction === 'desc' ? -1 : 1\n const key = (v: DatasetValue | undefined) => (Array.isArray(v) ? v.join(', ') : v)\n rows.sort((a, b) => {\n const x = key(a[field.id])\n const y = key(b[field.id])\n if (isEmpty(x) || isEmpty(y)) return isEmpty(x) === isEmpty(y) ? 0 : isEmpty(x) ? 1 : -1\n if (typeof x === 'number' && typeof y === 'number') return dir * (x - y)\n return dir * String(x).localeCompare(String(y))\n })\n }\n return {\n fields: dataset.fields,\n rows: query.limit ? rows.slice(0, query.limit) : rows,\n totalRows: rows.length,\n truncated: !!query.limit && rows.length > query.limit,\n }\n}\n\n/** The rows that pass every filter (a filter on an unknown field passes nothing). */\nexport function filterRows(\n rows: readonly DatasetRow[],\n fields: readonly DatasetField[],\n filters: readonly DatasetFilter[] = []\n): DatasetRow[] {\n if (!filters.length) return [...rows]\n const byId = new Map(fields.map((f) => [f.id, f]))\n return rows.filter((row) =>\n filters.every((filter) => {\n const field = byId.get(filter.field)\n return field ? compare(row[filter.field], filter, field) : false\n })\n )\n}\n\nfunction measure(values: DatasetValue[], op: AggregateOp, countRows: boolean): number | null {\n if (op === 'count') return countRows ? values.length : values.filter((v) => !isEmpty(v)).length\n const numbers = values.filter((v): v is number => typeof v === 'number' && Number.isFinite(v))\n if (!numbers.length) return null\n if (op === 'sum') return numbers.reduce((a, b) => a + b, 0)\n if (op === 'avg') return numbers.reduce((a, b) => a + b, 0) / numbers.length\n return op === 'min' ? Math.min(...numbers) : Math.max(...numbers)\n}\n\n/** \"count\", \"sum of Amount\": the value field's label. */\nexport function measureLabel(op: AggregateOp, field?: DatasetField): string {\n return field ? `${op} of ${field.label}` : 'count'\n}\n\nconst labelOf = (key: string) => (key === '' ? EMPTY_GROUP_LABEL : key)\n\n/** The fields of an aggregated dataset. */\nexport function aggregateFields(\n fields: readonly DatasetField[],\n query: DatasetQuery\n): DatasetField[] {\n const byId = new Map(fields.map((f) => [f.id, f]))\n const group = query.groupBy ? byId.get(query.groupBy) : undefined\n const split = query.splitBy ? byId.get(query.splitBy) : undefined\n const op = query.measure?.op ?? 'count'\n const value = query.measure?.field ? byId.get(query.measure.field) : undefined\n return [\n { id: AGGREGATE_FIELDS.group, label: group?.label ?? 'All', type: 'string' },\n { id: AGGREGATE_FIELDS.key, label: group?.label ?? 'All', type: 'string' },\n ...(split\n ? [{ id: AGGREGATE_FIELDS.series, label: split.label, type: 'string' as const }]\n : []),\n {\n id: AGGREGATE_FIELDS.value,\n label: measureLabel(op, value),\n type: 'number',\n ...(value?.unit && op !== 'count' ? { unit: value.unit } : {}),\n },\n ]\n}\n\n/**\n * Group the rows that pass the filters and measure each group: a long-form dataset with the fields\n * `AGGREGATE_FIELDS` (one row per group, or per group and series with `splitBy`).\n */\nexport function aggregateDataset(dataset: Dataset, query: DatasetQuery): Dataset {\n const byId = new Map(dataset.fields.map((f) => [f.id, f]))\n const group = query.groupBy ? byId.get(query.groupBy) : undefined\n const split = query.splitBy ? byId.get(query.splitBy) : undefined\n const op = query.measure?.op ?? 'count'\n const valueField = query.measure?.field ? byId.get(query.measure.field) : undefined\n const bucket = query.bucket ?? 'month'\n const fields = aggregateFields(dataset.fields, query)\n if (op !== 'count' && valueField?.type !== 'number') {\n throw new Error(`${op} needs a number field`)\n }\n\n const rows = filterRows(dataset.rows, dataset.fields, query.filters)\n const cells = new Map<string, Map<string, DatasetValue[]>>()\n for (const row of rows) {\n const groups = group ? groupKeys(row[group.id], group, bucket) : ['All']\n const splits = split ? groupKeys(row[split.id], split, bucket) : ['']\n const value = valueField ? (row[valueField.id] ?? null) : 1\n for (const g of groups) {\n const bySplit = cells.get(g) ?? new Map<string, DatasetValue[]>()\n cells.set(g, bySplit)\n for (const s of splits) bySplit.set(s, [...(bySplit.get(s) ?? []), value])\n }\n }\n\n const countRows = !valueField\n const totals = new Map(\n [...cells].map(([g, bySplit]) => [g, measure([...bySplit.values()].flat(), op, countRows)])\n )\n const byLabel = (a: string, b: string) => (a === '' ? 1 : b === '' ? -1 : a.localeCompare(b))\n const byValue = (dir: 1 | -1) => (a: string, b: string) =>\n (a === '') !== (b === '')\n ? a === ''\n ? 1\n : -1\n : dir * ((totals.get(a) ?? 0) - (totals.get(b) ?? 0)) || byLabel(a, b)\n const sort = query.sort ?? (group?.type === 'date' ? 'label' : 'value-desc')\n const keys = [...cells.keys()].sort(\n sort === 'label' ? byLabel : byValue(sort === 'value-asc' ? 1 : -1)\n )\n const limit = query.limit ?? DEFAULT_LIMIT\n const kept = keys.slice(0, limit)\n\n let splitKeys = ['']\n if (split) {\n const splitTotals = new Map<string, number>()\n for (const g of kept) {\n for (const [s, values] of cells.get(g) ?? []) {\n splitTotals.set(s, (splitTotals.get(s) ?? 0) + (measure(values, op, countRows) ?? 0))\n }\n }\n splitKeys = [...splitTotals.keys()]\n .sort((a, b) =>\n (a === '') !== (b === '')\n ? a === ''\n ? 1\n : -1\n : (splitTotals.get(b) ?? 0) - (splitTotals.get(a) ?? 0) || byLabel(a, b)\n )\n .slice(0, MAX_SERIES)\n }\n\n const out: DatasetRow[] = []\n for (const g of kept) {\n for (const s of splitKeys) {\n const values = cells.get(g)?.get(s)\n out.push({\n [AGGREGATE_FIELDS.group]: labelOf(g),\n [AGGREGATE_FIELDS.key]: g,\n ...(split ? { [AGGREGATE_FIELDS.series]: labelOf(s) } : {}),\n [AGGREGATE_FIELDS.value]: values ? measure(values, op, countRows) : null,\n })\n }\n }\n return { fields, rows: out, totalRows: rows.length, truncated: keys.length > limit }\n}\n\n/**\n * Add the missing date buckets between the first and last group of an aggregated dataset (value\n * `null`), so a trend over time has no silent gaps. Datasets whose keys are not buckets, or that\n * would grow beyond a few hundred groups, come back unchanged.\n */\nexport function fillTimeGaps(dataset: Dataset, bucket: TimeBucket): Dataset {\n const keyId = AGGREGATE_FIELDS.key\n const keys = [...new Set(dataset.rows.map((r) => String(r[keyId] ?? '')))].filter(Boolean)\n if (keys.length < 2) return dataset\n const sorted = [...keys].sort()\n const range = bucketRange(sorted[0], sorted[sorted.length - 1], bucket)\n if (!range || range.length === keys.length) return dataset\n const hasSeries = dataset.fields.some((f) => f.id === AGGREGATE_FIELDS.series)\n const seriesLabels = hasSeries\n ? [...new Set(dataset.rows.map((r) => String(r[AGGREGATE_FIELDS.series])))]\n : [null]\n const byKey = new Map<string, DatasetRow[]>()\n for (const row of dataset.rows) {\n const k = String(row[keyId] ?? '')\n byKey.set(k, [...(byKey.get(k) ?? []), row])\n }\n const rows: DatasetRow[] = []\n for (const k of range) {\n const existing = byKey.get(k)\n if (existing) rows.push(...existing)\n else {\n for (const s of seriesLabels) {\n rows.push({\n [AGGREGATE_FIELDS.group]: k,\n [keyId]: k,\n ...(hasSeries ? { [AGGREGATE_FIELDS.series]: s } : {}),\n [AGGREGATE_FIELDS.value]: null,\n })\n }\n }\n }\n // Rows without a date (the \"(empty)\" group) stay last.\n rows.push(...(byKey.get('') ?? []))\n return { ...dataset, rows }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }