@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
@@ -1,1128 +0,0 @@
1
- import { installPdfjsPolyfills } from './chunk-PTOP7OHG.js';
2
- import { isEffectiveRedaction, parseLayer } from './chunk-T3USOSVN.js';
3
- import { rgb, PDFDocument, StandardFonts, PDFName, PDFHexString, EncryptedPDFError, BlendMode, degrees } from 'pdf-lib';
4
- import qrcode from 'qrcode-generator';
5
-
6
- // src/annotations/freeze/coords.ts
7
- function normaliseRotation(angle) {
8
- const a = (Math.round(angle / 90) * 90 % 360 + 360) % 360;
9
- return a;
10
- }
11
- function displayedSize(g) {
12
- return g.rotation === 90 || g.rotation === 270 ? { width: g.height, height: g.width } : { width: g.width, height: g.height };
13
- }
14
- function displayedToUser(g, dx, dy) {
15
- switch (g.rotation) {
16
- case 0:
17
- return { x: g.x + dx, y: g.y + g.height - dy };
18
- case 90:
19
- return { x: g.x + dy, y: g.y + dx };
20
- case 180:
21
- return { x: g.x + g.width - dx, y: g.y + dy };
22
- case 270:
23
- return { x: g.x + g.width - dy, y: g.y + g.height - dx };
24
- }
25
- }
26
- function normToUserRect(g, r) {
27
- const size = displayedSize(g);
28
- const a = displayedToUser(g, r.x * size.width, r.y * size.height);
29
- const b = displayedToUser(g, (r.x + r.w) * size.width, (r.y + r.h) * size.height);
30
- return {
31
- x: Math.min(a.x, b.x),
32
- y: Math.min(a.y, b.y),
33
- width: Math.abs(b.x - a.x),
34
- height: Math.abs(b.y - a.y)
35
- };
36
- }
37
-
38
- // src/annotations/freeze/hash.ts
39
- async function sha256Hex(bytes) {
40
- const copy = new Uint8Array(bytes.byteLength);
41
- copy.set(bytes);
42
- const digest = await globalThis.crypto.subtle.digest("SHA-256", copy.buffer);
43
- return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, "0")).join("");
44
- }
45
- function canonicalJson(value) {
46
- if (Array.isArray(value)) return `[${value.map(canonicalJson).join(",")}]`;
47
- if (value && typeof value === "object") {
48
- const entries = Object.entries(value).filter(([, v]) => v !== void 0).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
49
- return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(",")}}`;
50
- }
51
- return JSON.stringify(value);
52
- }
53
- function layerFingerprint(layer) {
54
- return {
55
- ...layer,
56
- annotations: layer.annotations.map((a) => {
57
- return a.kind === "redaction" ? { ...a, text: void 0 } : a;
58
- })
59
- };
60
- }
61
- var hashLayer = (layer) => sha256Hex(new TextEncoder().encode(canonicalJson(layerFingerprint(layer))));
62
-
63
- // src/annotations/freeze/types.ts
64
- var ENCRYPTED_MESSAGE = "This PDF is password-protected, so a copy cannot be frozen from it. Remove the protection first.";
65
- var FreezeError = class extends Error {
66
- code;
67
- constructor(code, message) {
68
- super(message);
69
- this.name = "FreezeError";
70
- this.code = code;
71
- }
72
- };
73
-
74
- // src/annotations/freeze/vector.ts
75
- var HIGHLIGHT_OPACITY = 0.7;
76
- var MARKER_SIZE_PT = 12;
77
- var MARKER_COLOR = "#ffd43b";
78
- var MARKER_BORDER = "#7a5c00";
79
- var CAP_HEIGHT = 0.72;
80
- function hexToRgb(hex) {
81
- const n = parseInt(hex.slice(1), 16);
82
- return rgb((n >> 16 & 255) / 255, (n >> 8 & 255) / 255, (n & 255) / 255);
83
- }
84
- function pageGeometry(page) {
85
- const media = page.getMediaBox();
86
- const crop = page.getCropBox();
87
- const x1 = Math.max(media.x, crop.x);
88
- const y1 = Math.max(media.y, crop.y);
89
- const x2 = Math.min(media.x + media.width, crop.x + crop.width);
90
- const y2 = Math.min(media.y + media.height, crop.y + crop.height);
91
- const usable = x2 > x1 && y2 > y1;
92
- return {
93
- x: usable ? x1 : media.x,
94
- y: usable ? y1 : media.y,
95
- width: usable ? x2 - x1 : media.width,
96
- height: usable ? y2 - y1 : media.height,
97
- rotation: normaliseRotation(page.getRotation().angle)
98
- };
99
- }
100
- function numberComments(marks) {
101
- const comments = marks.filter((a) => a.kind === "comment").sort(
102
- (a, b) => a.page - b.page || a.rect.y - b.rect.y || a.rect.x - b.rect.x || (a.id < b.id ? -1 : 1)
103
- );
104
- return new Map(comments.map((c, i) => [c.id, i + 1]));
105
- }
106
- var TextSanitiser = class {
107
- supported;
108
- replaced = /* @__PURE__ */ new Set();
109
- constructor(font) {
110
- this.supported = new Set(font.getCharacterSet());
111
- }
112
- clean(text) {
113
- let out = "";
114
- for (const ch of text) {
115
- const cp = ch.codePointAt(0);
116
- if (this.supported.has(cp)) out += ch;
117
- else {
118
- out += "?";
119
- this.replaced.add(ch);
120
- }
121
- }
122
- return out;
123
- }
124
- supports(text) {
125
- for (const ch of text) if (!this.supported.has(ch.codePointAt(0))) return false;
126
- return true;
127
- }
128
- };
129
- async function createVectorContext(doc, marks, comments) {
130
- const regular = await doc.embedFont(StandardFonts.Helvetica);
131
- const bold = await doc.embedFont(StandardFonts.HelveticaBold);
132
- const images = /* @__PURE__ */ new Map();
133
- for (const a of marks)
134
- if (a.kind === "stamp" && a.image) images.set(a.id, await doc.embedPng(a.image));
135
- return {
136
- doc,
137
- images,
138
- regular,
139
- bold,
140
- numbers: numberComments(marks),
141
- comments,
142
- sanitiser: new TextSanitiser(regular)
143
- };
144
- }
145
- function drawHighlight(page, g, a) {
146
- for (const r of a.rects) {
147
- const u = normToUserRect(g, r);
148
- page.drawRectangle({
149
- x: u.x,
150
- y: u.y,
151
- width: u.width,
152
- height: u.height,
153
- color: hexToRgb(a.color),
154
- opacity: HIGHLIGHT_OPACITY,
155
- blendMode: BlendMode.Multiply
156
- });
157
- }
158
- }
159
- function drawBox(page, g, a) {
160
- const u = normToUserRect(g, a.rect);
161
- page.drawRectangle({
162
- x: u.x,
163
- y: u.y,
164
- width: u.width,
165
- height: u.height,
166
- borderColor: hexToRgb(a.color),
167
- borderWidth: a.strokeWidth,
168
- borderOpacity: 1,
169
- opacity: 0
170
- });
171
- }
172
- function fitFontSize(font, text, widthPt, heightPt) {
173
- const probe = font.widthOfTextAtSize(text || " ", 100);
174
- const byWidth = probe > 0 ? widthPt * 0.9 * 100 / probe : heightPt;
175
- return Math.max(1, Math.min(heightPt * 0.6, byWidth));
176
- }
177
- function drawCentredText(page, g, font, text, box, size, color) {
178
- const textWidth = font.widthOfTextAtSize(text, size);
179
- const dx = box.x + (box.w - textWidth) / 2;
180
- const dy = box.y + box.h / 2 + size * CAP_HEIGHT / 2;
181
- const origin = displayedToUser(g, dx, dy);
182
- page.drawText(text, { x: origin.x, y: origin.y, size, font, color, rotate: degrees(g.rotation) });
183
- }
184
- function drawStamp(page, g, a, ctx) {
185
- const picture = ctx.images.get(a.id);
186
- if (picture) {
187
- const u2 = normToUserRect(g, a.rect);
188
- const scale = Math.min(u2.width / picture.width, u2.height / picture.height);
189
- const w = picture.width * scale;
190
- const h = picture.height * scale;
191
- page.drawImage(picture, {
192
- x: u2.x + (u2.width - w) / 2,
193
- y: u2.y + (u2.height - h) / 2,
194
- width: w,
195
- height: h
196
- });
197
- return;
198
- }
199
- if (!ctx.sanitiser.supports(a.label)) {
200
- throw new FreezeError(
201
- "unsupported-text",
202
- `Stamp "${a.label}" uses characters a vector stamp cannot draw; freeze as an image instead`
203
- );
204
- }
205
- const u = normToUserRect(g, a.rect);
206
- const color = hexToRgb(a.color);
207
- page.drawRectangle({
208
- x: u.x,
209
- y: u.y,
210
- width: u.width,
211
- height: u.height,
212
- borderColor: color,
213
- borderWidth: 2,
214
- opacity: 0,
215
- borderOpacity: 1
216
- });
217
- const size = displayedSize(g);
218
- const box = {
219
- x: a.rect.x * size.width,
220
- y: a.rect.y * size.height,
221
- w: a.rect.w * size.width,
222
- h: a.rect.h * size.height
223
- };
224
- const fontSize = fitFontSize(ctx.bold, a.label, box.w, box.h);
225
- drawCentredText(page, g, ctx.bold, a.label, box, fontSize, color);
226
- }
227
- function drawCommentMarker(page, g, a, ctx) {
228
- const n = ctx.numbers.get(a.id);
229
- if (n === void 0) return;
230
- const size = displayedSize(g);
231
- const box = {
232
- x: Math.min(a.rect.x * size.width, size.width - MARKER_SIZE_PT),
233
- y: Math.min(a.rect.y * size.height, size.height - MARKER_SIZE_PT),
234
- w: MARKER_SIZE_PT,
235
- h: MARKER_SIZE_PT
236
- };
237
- const u = normToUserRect(g, {
238
- x: box.x / size.width,
239
- y: box.y / size.height,
240
- w: box.w / size.width,
241
- h: box.h / size.height
242
- });
243
- page.drawRectangle({
244
- x: u.x,
245
- y: u.y,
246
- width: u.width,
247
- height: u.height,
248
- color: hexToRgb(MARKER_COLOR),
249
- borderColor: hexToRgb(MARKER_BORDER),
250
- borderWidth: 0.75
251
- });
252
- drawCentredText(page, g, ctx.bold, String(n), box, 7, hexToRgb(MARKER_BORDER));
253
- }
254
- function drawVectorMark(page, a, ctx) {
255
- const g = pageGeometry(page);
256
- switch (a.kind) {
257
- case "highlight":
258
- return drawHighlight(page, g, a);
259
- case "box":
260
- return drawBox(page, g, a);
261
- case "stamp":
262
- return drawStamp(page, g, a, ctx);
263
- case "comment":
264
- return ctx.comments === "omit" ? void 0 : drawCommentMarker(page, g, a, ctx);
265
- case "redaction":
266
- throw new Error("redactions are never drawn as vectors");
267
- }
268
- }
269
- function wrap(font, text, size, maxWidth) {
270
- const lines = [];
271
- for (const paragraph of text.split(/\r?\n/)) {
272
- let line = "";
273
- for (const word of paragraph.split(/\s+/).filter(Boolean)) {
274
- const candidate = line ? `${line} ${word}` : word;
275
- if (font.widthOfTextAtSize(candidate, size) <= maxWidth || !line) line = candidate;
276
- else {
277
- lines.push(line);
278
- line = word;
279
- }
280
- }
281
- lines.push(line);
282
- }
283
- return lines;
284
- }
285
- function appendCommentAppendix(ctx, comments, pageSize2) {
286
- if (comments.length === 0) return;
287
- const { doc, regular, bold, sanitiser } = ctx;
288
- const margin = 54;
289
- const lineHeight = 13;
290
- const maxWidth = pageSize2[0] - margin * 2;
291
- let page = doc.addPage(pageSize2);
292
- let y = pageSize2[1] - margin;
293
- const ensure = (needed) => {
294
- if (y - needed < margin) {
295
- page = doc.addPage(pageSize2);
296
- y = pageSize2[1] - margin;
297
- }
298
- };
299
- const line = (text, font, size, indent = 0) => {
300
- ensure(lineHeight);
301
- page.drawText(sanitiser.clean(text), {
302
- x: margin + indent,
303
- y: y - size,
304
- size,
305
- font,
306
- color: rgb(0.1, 0.1, 0.1)
307
- });
308
- y -= lineHeight;
309
- };
310
- line("Comments", bold, 14);
311
- y -= 6;
312
- const ordered = [...comments].sort(
313
- (a, b) => (ctx.numbers.get(a.id) ?? 0) - (ctx.numbers.get(b.id) ?? 0)
314
- );
315
- for (const c of ordered) {
316
- ensure(lineHeight * 3);
317
- line(
318
- `[${ctx.numbers.get(c.id)}] Page ${c.page} - ${c.author}${c.resolved ? " (resolved)" : ""}`,
319
- bold,
320
- 10
321
- );
322
- for (const l of wrap(regular, sanitiser.clean(c.body), 10, maxWidth - 12))
323
- line(l, regular, 10, 12);
324
- for (const r of c.replies) {
325
- line(`${r.author}:`, bold, 9, 24);
326
- for (const l of wrap(regular, sanitiser.clean(r.body), 9, maxWidth - 36))
327
- line(l, regular, 9, 36);
328
- }
329
- y -= 8;
330
- }
331
- }
332
-
333
- // src/annotations/freeze/raster.ts
334
- var MAX_PAGE_PIXELS = 36e6;
335
- var MARKER_FILL = "#ffd43b";
336
- var MARKER_INK = "#7a5c00";
337
- function browserCanvasFactory() {
338
- return (width, height) => {
339
- if (typeof OffscreenCanvas !== "undefined") {
340
- const canvas2 = new OffscreenCanvas(width, height);
341
- const ctx2 = canvas2.getContext("2d");
342
- return {
343
- canvas: canvas2,
344
- ctx: ctx2,
345
- async encode(format, quality) {
346
- const blob = await canvas2.convertToBlob({ type: `image/${format}`, quality });
347
- return new Uint8Array(await blob.arrayBuffer());
348
- },
349
- release() {
350
- canvas2.width = 0;
351
- canvas2.height = 0;
352
- }
353
- };
354
- }
355
- const canvas = document.createElement("canvas");
356
- canvas.width = width;
357
- canvas.height = height;
358
- const ctx = canvas.getContext("2d");
359
- return {
360
- canvas,
361
- ctx,
362
- encode(format, quality) {
363
- return new Promise((resolve, reject) => {
364
- canvas.toBlob(
365
- (blob) => {
366
- if (!blob) return reject(new Error("canvas could not be encoded"));
367
- void blob.arrayBuffer().then((buf) => resolve(new Uint8Array(buf)), reject);
368
- },
369
- `image/${format}`,
370
- quality
371
- );
372
- });
373
- },
374
- release() {
375
- canvas.width = 0;
376
- canvas.height = 0;
377
- }
378
- };
379
- };
380
- }
381
- async function createPdfJsRasterizer(pdfjs, data, canvases, options = {}) {
382
- installPdfjsPolyfills();
383
- const task = pdfjs.getDocument({
384
- data: data.slice(),
385
- password: options.password,
386
- ...options.documentOptions
387
- });
388
- let doc;
389
- try {
390
- doc = await task.promise;
391
- } catch (error) {
392
- await task.destroy().catch(() => {
393
- });
394
- if (error?.name === "PasswordException") {
395
- throw new FreezeError("encrypted", ENCRYPTED_MESSAGE);
396
- }
397
- throw error;
398
- }
399
- return {
400
- numPages: doc.numPages,
401
- async renderPage(pageNumber, dpi) {
402
- const page = await doc.getPage(pageNumber);
403
- try {
404
- const base = page.getViewport({ scale: 1 });
405
- let scale = dpi / 72;
406
- const pixels = base.width * scale * (base.height * scale);
407
- if (pixels > MAX_PAGE_PIXELS) scale *= Math.sqrt(MAX_PAGE_PIXELS / pixels);
408
- const viewport = page.getViewport({ scale });
409
- const widthPx = Math.max(1, Math.ceil(viewport.width));
410
- const heightPx = Math.max(1, Math.ceil(viewport.height));
411
- const handle = canvases(widthPx, heightPx);
412
- handle.ctx.fillStyle = "#ffffff";
413
- handle.ctx.fillRect(0, 0, widthPx, heightPx);
414
- await page.render({ canvasContext: handle.ctx, canvas: handle.canvas, viewport }).promise;
415
- return {
416
- widthPt: base.width,
417
- heightPt: base.height,
418
- widthPx,
419
- heightPx,
420
- dpi: scale * 72,
421
- ctx: handle.ctx,
422
- encode: handle.encode,
423
- release: handle.release
424
- };
425
- } finally {
426
- page.cleanup();
427
- }
428
- },
429
- destroy: () => task.destroy()
430
- };
431
- }
432
- function burnMarks(page, marks, options) {
433
- const { ctx } = page;
434
- const w = page.widthPx;
435
- const h = page.heightPx;
436
- const pxPerPt = page.widthPx / page.widthPt;
437
- ctx.save();
438
- for (const a of marks) {
439
- if (a.kind === "highlight") {
440
- ctx.globalCompositeOperation = "multiply";
441
- ctx.globalAlpha = HIGHLIGHT_OPACITY;
442
- ctx.fillStyle = a.color;
443
- for (const r of a.rects) ctx.fillRect(r.x * w, r.y * h, r.w * w, r.h * h);
444
- ctx.globalCompositeOperation = "source-over";
445
- ctx.globalAlpha = 1;
446
- }
447
- }
448
- for (const a of marks) {
449
- if (a.kind === "box") {
450
- ctx.strokeStyle = a.color;
451
- ctx.lineWidth = a.strokeWidth * pxPerPt;
452
- ctx.strokeRect(a.rect.x * w, a.rect.y * h, a.rect.w * w, a.rect.h * h);
453
- } else if (a.kind === "stamp" && options.images?.get(a.id)) {
454
- const picture = options.images.get(a.id);
455
- const box = { x: a.rect.x * w, y: a.rect.y * h, w: a.rect.w * w, h: a.rect.h * h };
456
- const scale = Math.min(box.w / picture.width, box.h / picture.height);
457
- const dw = picture.width * scale;
458
- const dh = picture.height * scale;
459
- ctx.drawImage(picture, box.x + (box.w - dw) / 2, box.y + (box.h - dh) / 2, dw, dh);
460
- } else if (a.kind === "stamp") {
461
- drawStampOnCanvas(
462
- ctx,
463
- a.label,
464
- a.color,
465
- { x: a.rect.x * w, y: a.rect.y * h, w: a.rect.w * w, h: a.rect.h * h },
466
- pxPerPt
467
- );
468
- } else if (a.kind === "comment" && options.comments !== "omit") {
469
- drawMarkerOnCanvas(ctx, a, options.numbers.get(a.id), w, h, pxPerPt);
470
- }
471
- }
472
- for (const a of marks) {
473
- if (!isEffectiveRedaction(a)) continue;
474
- const pad = options.paddingPt * pxPerPt;
475
- a.rects.forEach((r, i) => {
476
- const x0 = Math.max(0, Math.floor(r.x * w - pad));
477
- const y0 = Math.max(0, Math.floor(r.y * h - pad));
478
- const x1 = Math.min(w, Math.ceil((r.x + r.w) * w + pad));
479
- const y1 = Math.min(h, Math.ceil((r.y + r.h) * h + pad));
480
- ctx.fillStyle = "#000000";
481
- ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
482
- if (options.labels && i === 0)
483
- drawLabel(ctx, "[REDACTED]", { x: x0, y: y0, w: x1 - x0, h: y1 - y0 });
484
- });
485
- }
486
- ctx.restore();
487
- }
488
- function drawStampOnCanvas(ctx, label, color, box, pxPerPt) {
489
- ctx.strokeStyle = color;
490
- ctx.lineWidth = 2 * pxPerPt;
491
- ctx.strokeRect(box.x, box.y, box.w, box.h);
492
- ctx.fillStyle = color;
493
- ctx.textAlign = "center";
494
- ctx.textBaseline = "middle";
495
- ctx.font = "bold 100px Helvetica, Arial, sans-serif";
496
- const probe = ctx.measureText(label).width;
497
- const size = Math.max(1, Math.min(box.h * 0.6, probe > 0 ? box.w * 0.9 * 100 / probe : box.h));
498
- ctx.font = `bold ${size}px Helvetica, Arial, sans-serif`;
499
- ctx.fillText(label, box.x + box.w / 2, box.y + box.h / 2);
500
- }
501
- function drawMarkerOnCanvas(ctx, a, n, w, h, pxPerPt) {
502
- if (n === void 0) return;
503
- const size = MARKER_SIZE_PT * pxPerPt;
504
- const x = Math.min(a.rect.x * w, w - size);
505
- const y = Math.min(a.rect.y * h, h - size);
506
- ctx.fillStyle = MARKER_FILL;
507
- ctx.fillRect(x, y, size, size);
508
- ctx.strokeStyle = MARKER_INK;
509
- ctx.lineWidth = 0.75 * pxPerPt;
510
- ctx.strokeRect(x, y, size, size);
511
- ctx.fillStyle = MARKER_INK;
512
- ctx.textAlign = "center";
513
- ctx.textBaseline = "middle";
514
- ctx.font = `bold ${7 * pxPerPt}px Helvetica, Arial, sans-serif`;
515
- ctx.fillText(String(n), x + size / 2, y + size / 2);
516
- }
517
- function drawLabel(ctx, text, box) {
518
- const size = Math.min(box.h * 0.7, 14);
519
- if (size < 6) return;
520
- ctx.font = `${size}px Helvetica, Arial, sans-serif`;
521
- const width = ctx.measureText(text).width;
522
- if (width > box.w - 4) return;
523
- ctx.fillStyle = "#ffffff";
524
- ctx.textAlign = "center";
525
- ctx.textBaseline = "middle";
526
- ctx.fillText(text, box.x + box.w / 2, box.y + box.h / 2);
527
- }
528
-
529
- // src/annotations/freeze/freeze.ts
530
- var DEFAULT_DPI = 200;
531
- var DEFAULT_JPEG_QUALITY = 0.92;
532
- var DEFAULT_REDACTION_PADDING_PT = 1.5;
533
- var MIN_DPI = 72;
534
- var MAX_DPI = 600;
535
- var FALLBACK_PAGE = [595.28, 841.89];
536
- var PROVENANCE_KEY = "ArbiProvenance";
537
- var KINDS = ["highlight", "box", "comment", "stamp", "redaction"];
538
- async function freezePdf(original, rawLayer, options) {
539
- const layer = parseLayer(rawLayer);
540
- const now = options.now ?? (/* @__PURE__ */ new Date()).toISOString();
541
- const comments = options.comments ?? "omit";
542
- const dpi = options.dpi ?? DEFAULT_DPI;
543
- if (!(dpi >= MIN_DPI && dpi <= MAX_DPI)) {
544
- throw new FreezeError("invalid-option", `dpi must be between ${MIN_DPI} and ${MAX_DPI}`);
545
- }
546
- const redactions = layer.annotations.filter(isEffectiveRedaction);
547
- const pending = redactions.filter((r) => r.status === "pending");
548
- if (pending.length > 0 && (options.pendingRedactions ?? "error") === "error") {
549
- throw new FreezeError(
550
- "pending-redactions",
551
- `${pending.length} redaction mark(s) have not been approved or rejected`
552
- );
553
- }
554
- const marks = layer.annotations.filter((a) => a.kind !== "redaction" || isEffectiveRedaction(a));
555
- const modeApplied = redactions.length > 0 ? "image" : options.mode;
556
- const [originalSha256, layerSha256] = await Promise.all([sha256Hex(original), hashLayer(layer)]);
557
- const warnings = [];
558
- if (redactions.length > 0 && comments !== "omit" && marks.some((a) => a.kind === "comment")) {
559
- warnings.push(
560
- "Comments are included in a document with redactions and may repeat redacted text"
561
- );
562
- }
563
- let built;
564
- if (modeApplied === "image") {
565
- built = await freezeAsImage(marks, options, comments, dpi, now, warnings);
566
- } else {
567
- built = await freezeAsVector(original, marks, comments, now, warnings);
568
- }
569
- const provenance = {
570
- schema: 1,
571
- derivedFrom: layer.documentId,
572
- originalSha256,
573
- layerSha256,
574
- modeRequested: options.mode,
575
- modeApplied,
576
- ...modeApplied !== options.mode ? { modeChangedBecause: "redactions-present" } : {},
577
- frozenAt: now,
578
- frozenBy: options.author,
579
- pages: built.pages,
580
- ...built.dpi === void 0 ? {} : { dpi: built.dpi },
581
- counts: countKinds(marks),
582
- redactions: summariseRedactions(redactions)
583
- };
584
- setProvenance(built.doc, provenance);
585
- return { bytes: await built.doc.save(), provenance, warnings };
586
- }
587
- function countKinds(marks) {
588
- const counts = Object.fromEntries(KINDS.map((k) => [k, 0]));
589
- for (const a of marks) counts[a.kind]++;
590
- return counts;
591
- }
592
- function summariseRedactions(redactions) {
593
- const reasons = {};
594
- const pages = /* @__PURE__ */ new Set();
595
- for (const r of redactions) {
596
- if (r.kind !== "redaction") continue;
597
- pages.add(r.page);
598
- reasons[r.reason] = (reasons[r.reason] ?? 0) + 1;
599
- }
600
- return { count: redactions.length, pages: [...pages].sort((a, b) => a - b), reasons };
601
- }
602
- function checkPages(marks, pages) {
603
- for (const a of marks) {
604
- if (a.page > pages) {
605
- throw new FreezeError(
606
- "page-out-of-range",
607
- `mark ${a.id} is on page ${a.page}; the document has ${pages}`
608
- );
609
- }
610
- }
611
- }
612
- function checkAborted(signal) {
613
- if (signal?.aborted) throw new DOMException("Freeze aborted", "AbortError");
614
- }
615
- async function loadPdfDocument(bytes) {
616
- try {
617
- return await PDFDocument.load(bytes);
618
- } catch (error) {
619
- if (error instanceof EncryptedPDFError || /is encrypted/i.test(error?.message ?? "")) {
620
- throw new FreezeError("encrypted", ENCRYPTED_MESSAGE);
621
- }
622
- throw new FreezeError("invalid-pdf", `The PDF could not be read: ${error.message}`);
623
- }
624
- }
625
- async function freezeAsVector(original, marks, comments, now, warnings) {
626
- const doc = await loadPdfDocument(original);
627
- const pages = doc.getPages();
628
- checkPages(marks, pages.length);
629
- const ctx = await createVectorContext(doc, marks, comments);
630
- for (const a of marks) drawVectorMark(pages[a.page - 1], a, ctx);
631
- if (comments === "appendix") {
632
- const first = pages[0] ? displayedSize(pageGeometry(pages[0])) : void 0;
633
- const size = first ? [first.width, first.height] : FALLBACK_PAGE;
634
- appendCommentAppendix(
635
- ctx,
636
- marks.filter((a) => a.kind === "comment"),
637
- size
638
- );
639
- }
640
- reportReplaced(ctx.sanitiser, warnings);
641
- doc.setProducer("ARBI");
642
- doc.setModificationDate(new Date(now));
643
- return { doc, pages: pages.length };
644
- }
645
- async function freezeAsImage(marks, options, comments, dpi, now, warnings) {
646
- const rasterizer = options.rasterizer;
647
- if (!rasterizer) {
648
- throw new FreezeError("rasterizer-required", "Image freeze needs a page rasterizer");
649
- }
650
- try {
651
- checkPages(marks, rasterizer.numPages);
652
- const out = await PDFDocument.create();
653
- out.setProducer("ARBI");
654
- out.setCreator("ARBI");
655
- out.setCreationDate(new Date(now));
656
- out.setModificationDate(new Date(now));
657
- const numbers = numberComments(marks);
658
- const format = options.imageFormat ?? "jpeg";
659
- const quality = options.jpegQuality ?? DEFAULT_JPEG_QUALITY;
660
- const burn = {
661
- paddingPt: options.redactionPaddingPt ?? DEFAULT_REDACTION_PADDING_PT,
662
- labels: options.redactionLabels ?? true,
663
- comments,
664
- numbers,
665
- images: await stampImages(marks)
666
- };
667
- const ocrFont = options.ocr ? await out.embedFont(StandardFonts.Helvetica) : void 0;
668
- const ocrSanitiser = ocrFont ? new TextSanitiser(ocrFont) : void 0;
669
- let lowestDpi = dpi;
670
- let firstSize;
671
- for (let n = 1; n <= rasterizer.numPages; n++) {
672
- checkAborted(options.signal);
673
- const page = await rasterizer.renderPage(n, dpi);
674
- try {
675
- burnMarks(
676
- page,
677
- marks.filter((a) => a.page === n),
678
- burn
679
- );
680
- const bytes = await page.encode(format, quality);
681
- const image = format === "png" ? await out.embedPng(bytes) : await out.embedJpg(bytes);
682
- const outPage = out.addPage([page.widthPt, page.heightPt]);
683
- outPage.drawImage(image, { x: 0, y: 0, width: page.widthPt, height: page.heightPt });
684
- lowestDpi = Math.min(lowestDpi, page.dpi);
685
- firstSize ??= [page.widthPt, page.heightPt];
686
- if (options.ocr && ocrFont && ocrSanitiser) {
687
- const words = await options.ocr({
688
- pageNumber: n,
689
- bytes,
690
- format,
691
- widthPx: page.widthPx,
692
- heightPx: page.heightPx
693
- });
694
- drawInvisibleText(outPage, words, page.widthPt, page.heightPt, ocrFont, ocrSanitiser);
695
- }
696
- } finally {
697
- page.release();
698
- }
699
- options.onProgress?.(n, rasterizer.numPages);
700
- }
701
- if (comments === "appendix") {
702
- const ctx = await createVectorContext(out, marks, comments);
703
- appendCommentAppendix(
704
- ctx,
705
- marks.filter((a) => a.kind === "comment"),
706
- firstSize ?? FALLBACK_PAGE
707
- );
708
- reportReplaced(ctx.sanitiser, warnings);
709
- }
710
- return { doc: out, pages: rasterizer.numPages, dpi: Math.round(lowestDpi) };
711
- } finally {
712
- await rasterizer.destroy();
713
- }
714
- }
715
- function drawInvisibleText(page, words, widthPt, heightPt, font, sanitiser) {
716
- for (const w of words) {
717
- if (!w.text || !sanitiser.supports(w.text)) continue;
718
- const size = Math.max(1, w.h * heightPt * 0.8);
719
- page.drawText(w.text, {
720
- x: w.x * widthPt,
721
- y: heightPt - (w.y + w.h) * heightPt,
722
- size,
723
- font,
724
- color: rgb(0, 0, 0),
725
- opacity: 0
726
- });
727
- }
728
- }
729
- function reportReplaced(sanitiser, warnings) {
730
- if (sanitiser.replaced.size > 0) {
731
- warnings.push(
732
- `${sanitiser.replaced.size} character(s) in comments cannot be drawn by the built-in font and were replaced with "?"`
733
- );
734
- }
735
- }
736
- function setProvenance(doc, provenance) {
737
- const info = doc.context.lookup(doc.context.trailerInfo.Info);
738
- if (!info || !("set" in info)) throw new Error("document has no info dictionary");
739
- info.set(
740
- PDFName.of(PROVENANCE_KEY),
741
- PDFHexString.fromText(JSON.stringify(provenance))
742
- );
743
- }
744
- async function readProvenance(bytes) {
745
- const doc = await PDFDocument.load(bytes);
746
- const info = doc.context.lookup(doc.context.trailerInfo.Info);
747
- if (!info || !("get" in info)) return null;
748
- const value = info.get(PDFName.of(PROVENANCE_KEY));
749
- if (!(value instanceof PDFHexString)) return null;
750
- return JSON.parse(value.decodeText());
751
- }
752
- async function stampImages(marks) {
753
- const out = /* @__PURE__ */ new Map();
754
- if (typeof createImageBitmap !== "function") return out;
755
- for (const a of marks) {
756
- if (a.kind !== "stamp" || !a.image) continue;
757
- const raw = atob(a.image);
758
- const bytes = new Uint8Array(raw.length);
759
- for (let i = 0; i < raw.length; i++) bytes[i] = raw.charCodeAt(i);
760
- out.set(a.id, await createImageBitmap(new Blob([bytes], { type: "image/png" })));
761
- }
762
- return out;
763
- }
764
- var EDGE_MARGIN_PT = 18;
765
- var BATES_FONT_SIZE_PT = 9;
766
- var QR_SIZE_PT = 56;
767
- var QR_QUIET_MODULES = 2;
768
- var PLATE_PADDING_PT = 2;
769
- function batesLabel(options, index) {
770
- const digits = options.digits ?? 6;
771
- const number = String(Math.floor((options.start ?? 1) + index)).padStart(digits, "0");
772
- return `${options.prefix ?? ""}${number}`;
773
- }
774
- function validateBates(options) {
775
- const { start = 1, digits = 6 } = options;
776
- if (!Number.isInteger(start) || start < 0) {
777
- throw new FreezeError("invalid-option", "Bates start must be a whole number, 0 or more");
778
- }
779
- if (!Number.isInteger(digits) || digits < 1 || digits > 12) {
780
- throw new FreezeError("invalid-option", "Bates digits must be a whole number from 1 to 12");
781
- }
782
- }
783
- function plateOrigin(g, corner, w, h) {
784
- const size = displayedSize(g);
785
- return {
786
- x: corner.endsWith("left") ? EDGE_MARGIN_PT : size.width - EDGE_MARGIN_PT - w,
787
- y: corner.startsWith("top") ? EDGE_MARGIN_PT : size.height - EDGE_MARGIN_PT - h
788
- };
789
- }
790
- function drawPlate(page, g, box) {
791
- const size = displayedSize(g);
792
- const u = normToUserRect(g, {
793
- x: box.x / size.width,
794
- y: box.y / size.height,
795
- w: box.w / size.width,
796
- h: box.h / size.height
797
- });
798
- page.drawRectangle({ x: u.x, y: u.y, width: u.width, height: u.height, color: rgb(1, 1, 1) });
799
- }
800
- function drawBatesLabel(page, label, font, corner) {
801
- const g = pageGeometry(page);
802
- const textWidth = font.widthOfTextAtSize(label, BATES_FONT_SIZE_PT);
803
- const w = textWidth + PLATE_PADDING_PT * 2;
804
- const h = BATES_FONT_SIZE_PT + PLATE_PADDING_PT * 2;
805
- const { x, y } = plateOrigin(g, corner, w, h);
806
- drawPlate(page, g, { x, y, w, h });
807
- const origin = displayedToUser(
808
- g,
809
- x + PLATE_PADDING_PT,
810
- y + PLATE_PADDING_PT + BATES_FONT_SIZE_PT * 0.8
811
- );
812
- page.drawText(label, {
813
- x: origin.x,
814
- y: origin.y,
815
- size: BATES_FONT_SIZE_PT,
816
- font,
817
- color: rgb(0, 0, 0),
818
- rotate: degrees(g.rotation)
819
- });
820
- }
821
- function buildQr(text) {
822
- try {
823
- const qr = qrcode(0, "M");
824
- qr.addData(text, "Byte");
825
- qr.make();
826
- return { modules: qr.getModuleCount(), isDark: (r, c) => qr.isDark(r, c) };
827
- } catch (error) {
828
- throw new FreezeError(
829
- "invalid-option",
830
- `The QR link could not be encoded: ${error.message}`
831
- );
832
- }
833
- }
834
- function drawQr(page, qr, corner) {
835
- const g = pageGeometry(page);
836
- const total = qr.modules + QR_QUIET_MODULES * 2;
837
- const module = QR_SIZE_PT / total;
838
- const { x, y } = plateOrigin(g, corner, QR_SIZE_PT, QR_SIZE_PT);
839
- drawPlate(page, g, { x, y, w: QR_SIZE_PT, h: QR_SIZE_PT });
840
- const size = displayedSize(g);
841
- for (let row = 0; row < qr.modules; row++) {
842
- let col = 0;
843
- while (col < qr.modules) {
844
- if (!qr.isDark(row, col)) {
845
- col++;
846
- continue;
847
- }
848
- const startCol = col;
849
- while (col < qr.modules && qr.isDark(row, col)) col++;
850
- const u = normToUserRect(g, {
851
- x: (x + (QR_QUIET_MODULES + startCol) * module) / size.width,
852
- y: (y + (QR_QUIET_MODULES + row) * module) / size.height,
853
- w: (col - startCol) * module / size.width,
854
- h: module / size.height
855
- });
856
- page.drawRectangle({
857
- x: u.x,
858
- y: u.y,
859
- width: u.width,
860
- height: u.height,
861
- color: rgb(0, 0, 0)
862
- });
863
- }
864
- }
865
- }
866
- var A4 = [595.28, 841.89];
867
- var MARGIN = 54;
868
- var LINE = 13;
869
- var TEXT = rgb(0.1, 0.1, 0.1);
870
- var MUTED = rgb(0.4, 0.4, 0.4);
871
- async function insertIndexPages(doc, entries, options) {
872
- const regular = await doc.embedFont(StandardFonts.Helvetica);
873
- const bold = await doc.embedFont(StandardFonts.HelveticaBold);
874
- const sanitiser = new TextSanitiser(regular);
875
- const [width, height] = options.size ?? A4;
876
- const columns = {
877
- number: MARGIN,
878
- name: MARGIN + 28,
879
- range: width - MARGIN - 190,
880
- pages: width - MARGIN - 30
881
- };
882
- const nameWidth = columns.range - columns.name - 12;
883
- let inserted = 0;
884
- let page;
885
- let y = 0;
886
- const newPage = () => {
887
- page = doc.insertPage(inserted++, [width, height]);
888
- y = height - MARGIN;
889
- };
890
- const text = (value, x, font, size, color = TEXT) => page.drawText(sanitiser.clean(value), { x, y: y - size, size, font, color });
891
- const header = () => {
892
- text("#", columns.number, bold, 9, MUTED);
893
- text("Document", columns.name, bold, 9, MUTED);
894
- text("Bates range", columns.range, bold, 9, MUTED);
895
- text("Pages", columns.pages, bold, 9, MUTED);
896
- y -= LINE + 4;
897
- };
898
- newPage();
899
- text("Production index", MARGIN, bold, 16);
900
- y -= 24;
901
- const first = entries[0]?.firstLabel;
902
- const last = entries[entries.length - 1]?.lastLabel;
903
- const total = entries.reduce((n, e) => n + e.pages, 0);
904
- const summary = [
905
- `${entries.length} document${entries.length === 1 ? "" : "s"}, ${total} page${total === 1 ? "" : "s"}`,
906
- first && last ? `${first} to ${last}` : "",
907
- `produced ${options.producedAt.slice(0, 10)}`,
908
- options.producedBy ? `by ${options.producedBy}` : ""
909
- ].filter(Boolean).join(", ");
910
- text(summary, MARGIN, regular, 10, MUTED);
911
- y -= LINE + 10;
912
- header();
913
- const rangeWidth = columns.pages - columns.range - 8;
914
- entries.forEach((entry, i) => {
915
- const lines = wrap(regular, sanitiser.clean(entry.name), 10, nameWidth);
916
- const single = entry.firstLabel === entry.lastLabel ? entry.firstLabel : `${entry.firstLabel} - ${entry.lastLabel}`;
917
- const range = regular.widthOfTextAtSize(sanitiser.clean(single), 10) <= rangeWidth ? [single] : [`${entry.firstLabel} -`, entry.lastLabel];
918
- const rows = Math.max(lines.length, range.length);
919
- if (y - rows * LINE < MARGIN) {
920
- newPage();
921
- header();
922
- }
923
- const top = y;
924
- text(String(i + 1), columns.number, regular, 10);
925
- text(String(entry.pages), columns.pages, regular, 10);
926
- range.forEach((line, n) => {
927
- y = top - n * LINE;
928
- text(line, columns.range, regular, 10);
929
- });
930
- lines.forEach((line, n) => {
931
- y = top - n * LINE;
932
- text(line, columns.name, regular, 10);
933
- });
934
- y = top - rows * LINE - 4;
935
- });
936
- return inserted;
937
- }
938
-
939
- // src/annotations/freeze/bundle.ts
940
- var BUNDLE_KEY = "ArbiBundle";
941
- var DEFAULT_QR_CORNER = "bottom-left";
942
- var DEFAULT_BATES_CORNER = "bottom-right";
943
- function checkAborted2(signal) {
944
- if (signal?.aborted) throw new DOMException("Bundle aborted", "AbortError");
945
- }
946
- function outputName(name, used) {
947
- const base = (name.replace(/\.pdf$/i, "").replace(/[\\/:*?"<>|]+/g, "_").trim() || "document") + ".pdf";
948
- let candidate = base;
949
- for (let n = 2; used.has(candidate); n++) candidate = base.replace(/\.pdf$/, `-${n}.pdf`);
950
- used.add(candidate);
951
- return candidate;
952
- }
953
- function validate(items, options) {
954
- if (items.length === 0)
955
- throw new FreezeError("invalid-option", "A bundle needs at least one document");
956
- validateBates(options.bates);
957
- if (options.qr) {
958
- const missing = items.find((i) => !i.qrUrl);
959
- if (missing) {
960
- throw new FreezeError("invalid-option", `"${missing.name}" has no link for its QR code`);
961
- }
962
- }
963
- const corner = options.bates.corner ?? DEFAULT_BATES_CORNER;
964
- if (options.qr && (options.qrCorner ?? DEFAULT_QR_CORNER) === corner) {
965
- throw new FreezeError(
966
- "invalid-option",
967
- "The Bates label and the QR code need different corners"
968
- );
969
- }
970
- }
971
- async function stampPages(doc, items, firstIndex, options) {
972
- const font = await doc.embedFont(StandardFonts.Helvetica);
973
- const sanitiser = new TextSanitiser(font);
974
- const label = batesLabel(options.bates, firstIndex);
975
- if (!sanitiser.supports(label)) {
976
- throw new FreezeError(
977
- "unsupported-text",
978
- `Bates prefix "${options.bates.prefix}" uses characters the built-in font cannot draw`
979
- );
980
- }
981
- const pages = doc.getPages();
982
- const corner = options.bates.corner ?? DEFAULT_BATES_CORNER;
983
- let at = 0;
984
- for (const item of items) {
985
- const qr = options.qr && item.qrUrl ? buildQr(item.qrUrl) : void 0;
986
- for (let p = 0; p < item.pages; p++, at++) {
987
- const page = pages[at];
988
- drawBatesLabel(page, batesLabel(options.bates, firstIndex + at), font, corner);
989
- if (qr) drawQr(page, qr, options.qrCorner ?? DEFAULT_QR_CORNER);
990
- }
991
- }
992
- }
993
- function setBundleRecord(doc, record) {
994
- const info = doc.context.lookup(doc.context.trailerInfo.Info);
995
- if (!info || !("set" in info)) return;
996
- info.set(
997
- PDFName.of(BUNDLE_KEY),
998
- PDFHexString.fromText(JSON.stringify(record))
999
- );
1000
- }
1001
- async function buildBundle(items, options) {
1002
- validate(items, options);
1003
- const now = options.now ?? (/* @__PURE__ */ new Date()).toISOString();
1004
- const used = /* @__PURE__ */ new Set();
1005
- const files = [];
1006
- const index = [];
1007
- const loaded = [];
1008
- for (const item of items) {
1009
- checkAborted2(options.signal);
1010
- const doc = await loadPdfDocument(item.bytes);
1011
- loaded.push({ item, doc, pages: doc.getPageCount() });
1012
- }
1013
- if (options.layout === "merged") {
1014
- const out = await PDFDocument.create();
1015
- out.setProducer("ARBI");
1016
- out.setCreator("ARBI");
1017
- out.setCreationDate(new Date(now));
1018
- out.setModificationDate(new Date(now));
1019
- const provenance = {};
1020
- for (const { item, doc } of loaded) {
1021
- checkAborted2(options.signal);
1022
- for (const page of await out.copyPages(doc, doc.getPageIndices())) out.addPage(page);
1023
- provenance[item.documentId] = await readProvenance(item.bytes).catch(() => null);
1024
- }
1025
- await stampPages(
1026
- out,
1027
- loaded.map(({ item, pages }) => ({ pages, qrUrl: item.qrUrl })),
1028
- 0,
1029
- options
1030
- );
1031
- const file = outputName(options.mergedName ?? "production.pdf", used);
1032
- let first2 = 0;
1033
- for (const { item, pages } of loaded) {
1034
- index.push({
1035
- documentId: item.documentId,
1036
- name: item.name,
1037
- file,
1038
- pages,
1039
- firstLabel: batesLabel(options.bates, first2),
1040
- lastLabel: batesLabel(options.bates, first2 + pages - 1)
1041
- });
1042
- first2 += pages;
1043
- }
1044
- const indexPages2 = options.indexPage ? await insertIndexPages(out, index, {
1045
- size: pageSize(loaded[0].doc),
1046
- producedAt: now,
1047
- producedBy: options.author
1048
- }) : 0;
1049
- setBundleRecord(out, {
1050
- schema: 1,
1051
- producedAt: now,
1052
- ...indexPages2 ? { indexPages: indexPages2 } : {},
1053
- ...options.author ? { producedBy: options.author } : {},
1054
- layout: "merged",
1055
- items: index.map((e) => ({
1056
- documentId: e.documentId,
1057
- name: e.name,
1058
- pages: e.pages,
1059
- firstLabel: e.firstLabel,
1060
- lastLabel: e.lastLabel,
1061
- frozen: provenance[e.documentId] ?? null
1062
- }))
1063
- });
1064
- const total = first2;
1065
- files.push({
1066
- name: file,
1067
- bytes: await out.save(),
1068
- pages: total + indexPages2,
1069
- firstLabel: batesLabel(options.bates, 0),
1070
- lastLabel: batesLabel(options.bates, total - 1)
1071
- });
1072
- options.onProgress?.(loaded.length, loaded.length);
1073
- return { files, index, indexPages: indexPages2 };
1074
- }
1075
- let first = 0;
1076
- for (const [n, { item, doc, pages }] of loaded.entries()) {
1077
- checkAborted2(options.signal);
1078
- await stampPages(doc, [{ pages, qrUrl: item.qrUrl }], first, options);
1079
- doc.setModificationDate(new Date(now));
1080
- const file = outputName(item.name, used);
1081
- const entry = {
1082
- documentId: item.documentId,
1083
- name: item.name,
1084
- file,
1085
- pages,
1086
- firstLabel: batesLabel(options.bates, first),
1087
- lastLabel: batesLabel(options.bates, first + pages - 1)
1088
- };
1089
- index.push(entry);
1090
- files.push({
1091
- name: file,
1092
- bytes: await doc.save(),
1093
- pages,
1094
- firstLabel: entry.firstLabel,
1095
- lastLabel: entry.lastLabel
1096
- });
1097
- first += pages;
1098
- options.onProgress?.(n + 1, loaded.length);
1099
- }
1100
- if (!options.indexPage) return { files, index, indexPages: 0 };
1101
- const cover = await PDFDocument.create();
1102
- cover.setProducer("ARBI");
1103
- cover.setCreator("ARBI");
1104
- cover.setCreationDate(new Date(now));
1105
- const indexPages = await insertIndexPages(cover, index, {
1106
- size: pageSize(loaded[0].doc),
1107
- producedAt: now,
1108
- producedBy: options.author
1109
- });
1110
- files.unshift({
1111
- name: outputName("index.pdf", used),
1112
- bytes: await cover.save(),
1113
- pages: indexPages,
1114
- firstLabel: "",
1115
- lastLabel: ""
1116
- });
1117
- return { files, index, indexPages };
1118
- }
1119
- function pageSize(doc) {
1120
- const page = doc.getPage(0);
1121
- const { width, height } = page.getSize();
1122
- const turned = page.getRotation().angle % 180 !== 0;
1123
- return turned ? [height, width] : [width, height];
1124
- }
1125
-
1126
- export { DEFAULT_DPI, FreezeError, MAX_PAGE_PIXELS, batesLabel, browserCanvasFactory, buildBundle, burnMarks, createPdfJsRasterizer, freezePdf, readProvenance };
1127
- //# sourceMappingURL=chunk-NIKPG4PW.js.map
1128
- //# sourceMappingURL=chunk-NIKPG4PW.js.map