@arbidocs/blocks 0.4.159 → 0.4.161

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 (334) hide show
  1. package/README.md +48 -9
  2. package/dist/{ConnectedNativeDocxComparison-R6RU5TZE.cjs → ConnectedNativeDocxComparison-GLHOGUP6.cjs} +12 -11
  3. package/dist/{ConnectedNativeDocxComparison-R6RU5TZE.cjs.map → ConnectedNativeDocxComparison-GLHOGUP6.cjs.map} +1 -1
  4. package/dist/{ConnectedNativeDocxComparison-XMZ5KLD4.js → ConnectedNativeDocxComparison-LKIMKOTA.js} +11 -10
  5. package/dist/{ConnectedStreamedWordArtifact-IXRJ7MUE.js.map → ConnectedNativeDocxComparison-LKIMKOTA.js.map} +1 -1
  6. package/dist/{ConnectedNativeDocxEditor-NGUK2AX6.js → ConnectedNativeDocxEditor-6LNYWZ3P.js} +10 -9
  7. package/dist/{ConnectedNativeDocxEditor-NGUK2AX6.js.map → ConnectedNativeDocxEditor-6LNYWZ3P.js.map} +1 -1
  8. package/dist/{ConnectedNativeDocxEditor-LBATSM3M.cjs → ConnectedNativeDocxEditor-M3UGWL6K.cjs} +12 -11
  9. package/dist/{ConnectedNativeDocxEditor-LBATSM3M.cjs.map → ConnectedNativeDocxEditor-M3UGWL6K.cjs.map} +1 -1
  10. package/dist/{ConnectedStreamedWordArtifact-IXRJ7MUE.js → ConnectedStreamedWordArtifact-432HT7DK.js} +11 -10
  11. package/dist/{ConnectedNativeDocxComparison-XMZ5KLD4.js.map → ConnectedStreamedWordArtifact-432HT7DK.js.map} +1 -1
  12. package/dist/{ConnectedStreamedWordArtifact-CWFR6A37.cjs → ConnectedStreamedWordArtifact-COEXL5IT.cjs} +12 -11
  13. package/dist/ConnectedStreamedWordArtifact-COEXL5IT.cjs.map +1 -0
  14. package/dist/{FactTextEditor-YESAU2IJ.js → FactTextEditor-ABKKJOCY.js} +2 -2
  15. package/dist/FactTextEditor-ABKKJOCY.js.map +1 -0
  16. package/dist/{FactTextEditor-YUPBCTXK.cjs → FactTextEditor-GYN5RHJT.cjs} +2 -2
  17. package/dist/FactTextEditor-GYN5RHJT.cjs.map +1 -0
  18. package/dist/{WorkspaceTableView-EYLEUZZT.cjs → WorkspaceTableView-AQTF5F6T.cjs} +6 -5
  19. package/dist/WorkspaceTableView-AQTF5F6T.cjs.map +1 -0
  20. package/dist/{WorkspaceTableView-DWUE4VQF.js → WorkspaceTableView-PTB5BPVA.js} +4 -3
  21. package/dist/WorkspaceTableView-PTB5BPVA.js.map +1 -0
  22. package/dist/agents/index.cjs +263 -263
  23. package/dist/agents/index.js +6 -6
  24. package/dist/agents/skills/skillLibrary.d.ts +1 -1
  25. package/dist/{chunk-FPHTSNOE.js → chunk-2AKIMCDD.js} +3 -3
  26. package/dist/{chunk-FPHTSNOE.js.map → chunk-2AKIMCDD.js.map} +1 -1
  27. package/dist/{chunk-YNMO3DSR.js → chunk-2AMYT2HQ.js} +3 -3
  28. package/dist/{chunk-YNMO3DSR.js.map → chunk-2AMYT2HQ.js.map} +1 -1
  29. package/dist/{chunk-MSFQDELO.cjs → chunk-3CUORKDL.cjs} +4 -4
  30. package/dist/{chunk-MSFQDELO.cjs.map → chunk-3CUORKDL.cjs.map} +1 -1
  31. package/dist/{chunk-MNG7N6M2.js → chunk-3PQIWOTZ.js} +122 -57
  32. package/dist/chunk-3PQIWOTZ.js.map +1 -0
  33. package/dist/chunk-5C7DRQQE.cjs +1891 -0
  34. package/dist/chunk-5C7DRQQE.cjs.map +1 -0
  35. package/dist/{chunk-F57LNUSZ.js → chunk-5NWY3FXQ.js} +24 -57
  36. package/dist/chunk-5NWY3FXQ.js.map +1 -0
  37. package/dist/{chunk-ISHFVKVU.js → chunk-5WLORPGX.js} +4 -4
  38. package/dist/{chunk-ISHFVKVU.js.map → chunk-5WLORPGX.js.map} +1 -1
  39. package/dist/{chunk-FAXXN7KI.cjs → chunk-5Y6V7F6W.cjs} +53 -4
  40. package/dist/chunk-5Y6V7F6W.cjs.map +1 -0
  41. package/dist/{chunk-6QAAIDQQ.cjs → chunk-6UTIAHQG.cjs} +60 -60
  42. package/dist/{chunk-6QAAIDQQ.cjs.map → chunk-6UTIAHQG.cjs.map} +1 -1
  43. package/dist/{chunk-KCSIX7CY.js → chunk-6XIXNH26.js} +3 -3
  44. package/dist/{chunk-KCSIX7CY.js.map → chunk-6XIXNH26.js.map} +1 -1
  45. package/dist/{chunk-YBJ4QGNH.cjs → chunk-ANLTECZ6.cjs} +8 -8
  46. package/dist/{chunk-YBJ4QGNH.cjs.map → chunk-ANLTECZ6.cjs.map} +1 -1
  47. package/dist/{chunk-Q2XGM372.cjs → chunk-AR6A2PMV.cjs} +4 -4
  48. package/dist/{chunk-Q2XGM372.cjs.map → chunk-AR6A2PMV.cjs.map} +1 -1
  49. package/dist/{chunk-KBO75NLM.cjs → chunk-AYJZRBHG.cjs} +7 -7
  50. package/dist/{chunk-KBO75NLM.cjs.map → chunk-AYJZRBHG.cjs.map} +1 -1
  51. package/dist/{chunk-FM3IRQJW.cjs → chunk-AYKE6USO.cjs} +12 -12
  52. package/dist/chunk-AYKE6USO.cjs.map +1 -0
  53. package/dist/chunk-BGJZVJJM.cjs +63 -0
  54. package/dist/chunk-BGJZVJJM.cjs.map +1 -0
  55. package/dist/{chunk-ECW2R2KF.cjs → chunk-BPL5RLNN.cjs} +27 -27
  56. package/dist/{chunk-ECW2R2KF.cjs.map → chunk-BPL5RLNN.cjs.map} +1 -1
  57. package/dist/{chunk-CNHUJRQ4.cjs → chunk-EFEFLBRM.cjs} +21 -55
  58. package/dist/chunk-EFEFLBRM.cjs.map +1 -0
  59. package/dist/{chunk-ETZ5A3GU.js → chunk-EVO2UNX3.js} +3 -3
  60. package/dist/chunk-EVO2UNX3.js.map +1 -0
  61. package/dist/{chunk-P6RIBIVN.js → chunk-FMJGVAWX.js} +8 -9
  62. package/dist/chunk-FMJGVAWX.js.map +1 -0
  63. package/dist/chunk-H5542IOD.cjs +108 -0
  64. package/dist/chunk-H5542IOD.cjs.map +1 -0
  65. package/dist/{chunk-VF5EUAIV.js → chunk-H7PHANI4.js} +3 -3
  66. package/dist/chunk-H7PHANI4.js.map +1 -0
  67. package/dist/chunk-HQJL7FSY.js +58 -0
  68. package/dist/chunk-HQJL7FSY.js.map +1 -0
  69. package/dist/{chunk-OFV3PRF2.cjs → chunk-HRDVQERS.cjs} +7 -7
  70. package/dist/{chunk-OFV3PRF2.cjs.map → chunk-HRDVQERS.cjs.map} +1 -1
  71. package/dist/{chunk-3VULDTNL.cjs → chunk-HUNX4CQG.cjs} +4 -4
  72. package/dist/chunk-HUNX4CQG.cjs.map +1 -0
  73. package/dist/{chunk-2BHDRVVL.cjs → chunk-I6I34FDU.cjs} +38 -37
  74. package/dist/chunk-I6I34FDU.cjs.map +1 -0
  75. package/dist/chunk-IWVOZREF.js +12 -0
  76. package/dist/chunk-IWVOZREF.js.map +1 -0
  77. package/dist/chunk-J7YHBMBB.js +1834 -0
  78. package/dist/chunk-J7YHBMBB.js.map +1 -0
  79. package/dist/{chunk-SDOEHEJP.js → chunk-JMQLTMJ7.js} +53 -5
  80. package/dist/chunk-JMQLTMJ7.js.map +1 -0
  81. package/dist/{chunk-TF7HN5EU.js → chunk-JNE2XEXD.js} +12 -12
  82. package/dist/chunk-JNE2XEXD.js.map +1 -0
  83. package/dist/{chunk-QKR5LWDO.js → chunk-K7CZFNJ2.js} +7 -7
  84. package/dist/{chunk-QKR5LWDO.js.map → chunk-K7CZFNJ2.js.map} +1 -1
  85. package/dist/{chunk-4RPBUMHB.cjs → chunk-KMZO5W6D.cjs} +4 -4
  86. package/dist/chunk-KMZO5W6D.cjs.map +1 -0
  87. package/dist/{chunk-FTZ45WHY.js → chunk-KNCJSPXV.js} +5020 -4014
  88. package/dist/chunk-KNCJSPXV.js.map +1 -0
  89. package/dist/{chunk-3OCNUKGX.js → chunk-KQWC4YBX.js} +3 -3
  90. package/dist/{chunk-3OCNUKGX.js.map → chunk-KQWC4YBX.js.map} +1 -1
  91. package/dist/{chunk-TC3RQNEX.cjs → chunk-L4KWTDFE.cjs} +5 -5
  92. package/dist/chunk-L4KWTDFE.cjs.map +1 -0
  93. package/dist/{chunk-VTTZZ4FN.js → chunk-LH3JAZ33.js} +5 -5
  94. package/dist/chunk-LH3JAZ33.js.map +1 -0
  95. package/dist/{chunk-P2YM67Y5.cjs → chunk-LQYPOWKN.cjs} +14 -21
  96. package/dist/chunk-LQYPOWKN.cjs.map +1 -0
  97. package/dist/{chunk-RATEAOKT.js → chunk-NOXGEQQR.js} +7 -13
  98. package/dist/chunk-NOXGEQQR.js.map +1 -0
  99. package/dist/{chunk-NPLGB4LI.cjs → chunk-NUAC5GTQ.cjs} +5115 -4077
  100. package/dist/chunk-NUAC5GTQ.cjs.map +1 -0
  101. package/dist/chunk-NYECCTB3.js +101 -0
  102. package/dist/chunk-NYECCTB3.js.map +1 -0
  103. package/dist/{chunk-GC2FSPSQ.cjs → chunk-O5E3NKPI.cjs} +128 -58
  104. package/dist/chunk-O5E3NKPI.cjs.map +1 -0
  105. package/dist/{chunk-SZOFGU7W.js → chunk-O5XREO7H.js} +3 -3
  106. package/dist/{chunk-SZOFGU7W.js.map → chunk-O5XREO7H.js.map} +1 -1
  107. package/dist/{chunk-OOU4QLRK.cjs → chunk-OHCYJFV2.cjs} +9 -9
  108. package/dist/{chunk-OOU4QLRK.cjs.map → chunk-OHCYJFV2.cjs.map} +1 -1
  109. package/dist/{chunk-DEPF5LQI.js → chunk-OKRYNQPH.js} +3 -3
  110. package/dist/chunk-OKRYNQPH.js.map +1 -0
  111. package/dist/{chunk-KFMRBZQK.js → chunk-PCL7IEZO.js} +21 -20
  112. package/dist/chunk-PCL7IEZO.js.map +1 -0
  113. package/dist/chunk-RFB7B6XG.cjs +169 -0
  114. package/dist/chunk-RFB7B6XG.cjs.map +1 -0
  115. package/dist/{chunk-SZSJGZSO.js → chunk-SQQU3WRB.js} +714 -5
  116. package/dist/chunk-SQQU3WRB.js.map +1 -0
  117. package/dist/{chunk-OALEDG67.cjs → chunk-TNESYDBR.cjs} +5 -5
  118. package/dist/{chunk-OALEDG67.cjs.map → chunk-TNESYDBR.cjs.map} +1 -1
  119. package/dist/chunk-TTS353W2.js +163 -0
  120. package/dist/chunk-TTS353W2.js.map +1 -0
  121. package/dist/{chunk-CROGFB46.cjs → chunk-U7OUZHBH.cjs} +753 -2
  122. package/dist/chunk-U7OUZHBH.cjs.map +1 -0
  123. package/dist/{chunk-BQ77KSXU.js → chunk-UORU5S7Y.js} +3 -3
  124. package/dist/{chunk-BQ77KSXU.js.map → chunk-UORU5S7Y.js.map} +1 -1
  125. package/dist/{chunk-FYZXDZM7.js → chunk-VFF76GTB.js} +4 -4
  126. package/dist/{chunk-FYZXDZM7.js.map → chunk-VFF76GTB.js.map} +1 -1
  127. package/dist/{chunk-E4H5H2C3.cjs → chunk-VYTK2WJB.cjs} +4 -4
  128. package/dist/{chunk-E4H5H2C3.cjs.map → chunk-VYTK2WJB.cjs.map} +1 -1
  129. package/dist/{chunk-XI37A7HH.js → chunk-WKSP73RU.js} +3 -3
  130. package/dist/{chunk-XI37A7HH.js.map → chunk-WKSP73RU.js.map} +1 -1
  131. package/dist/chunk-WP4VIOOA.cjs +15 -0
  132. package/dist/chunk-WP4VIOOA.cjs.map +1 -0
  133. package/dist/{chunk-YF3QUHKN.cjs → chunk-X3XPXEIM.cjs} +14 -15
  134. package/dist/chunk-X3XPXEIM.cjs.map +1 -0
  135. package/dist/{chunk-VZPFYZZU.cjs → chunk-Z2HEBOA3.cjs} +8 -8
  136. package/dist/{chunk-VZPFYZZU.cjs.map → chunk-Z2HEBOA3.cjs.map} +1 -1
  137. package/dist/{chunk-Q7CQYYZW.cjs → chunk-ZMYW5M75.cjs} +5 -5
  138. package/dist/chunk-ZMYW5M75.cjs.map +1 -0
  139. package/dist/{chunk-7UENVUA6.js → chunk-ZW2AWACP.js} +3 -3
  140. package/dist/{chunk-7UENVUA6.js.map → chunk-ZW2AWACP.js.map} +1 -1
  141. package/dist/citations/index.cjs +10 -10
  142. package/dist/citations/index.js +2 -2
  143. package/dist/collaboration/contacts/contact-form.d.ts +47 -0
  144. package/dist/collaboration/contacts/index.d.ts +3 -1
  145. package/dist/collaboration/contacts/invite-plan.d.ts +46 -0
  146. package/dist/collaboration/contacts/parseEmails.d.ts +7 -0
  147. package/dist/collaboration/index.cjs +163 -83
  148. package/dist/collaboration/index.js +2 -2
  149. package/dist/components/ActionLink.d.ts +1 -1
  150. package/dist/components/TeamGrid.d.ts +1 -1
  151. package/dist/components/editorial/{ProfileCard.d.ts → EditorialProfileCard.d.ts} +2 -2
  152. package/dist/components/editorial/index.d.ts +1 -1
  153. package/dist/connect/docx.cjs +14 -13
  154. package/dist/connect/docx.d.ts +1 -1
  155. package/dist/connect/docx.js +10 -9
  156. package/dist/connect/index.cjs +22097 -14743
  157. package/dist/connect/index.cjs.map +1 -1
  158. package/dist/connect/index.d.ts +11 -7
  159. package/dist/connect/index.js +15203 -7912
  160. package/dist/connect/index.js.map +1 -1
  161. package/dist/connect/viewer.cjs +83 -138
  162. package/dist/connect/viewer.cjs.map +1 -1
  163. package/dist/connect/viewer.d.ts +3 -2
  164. package/dist/connect/viewer.js +25 -82
  165. package/dist/connect/viewer.js.map +1 -1
  166. package/dist/connection/ConnectedSettings.d.ts +3 -2
  167. package/dist/connection/ConnectionProvider.d.ts +5 -4
  168. package/dist/connection/StreamedArtifact.d.ts +1 -1
  169. package/dist/connection/billing/index.d.ts +3 -3
  170. package/dist/connection/billing/support.d.ts +4 -7
  171. package/dist/connection/contacts/ConnectedAddContacts.d.ts +9 -0
  172. package/dist/connection/contacts/ConnectedContactCardForm.d.ts +11 -0
  173. package/dist/connection/contacts/ConnectedContactToggle.d.ts +16 -0
  174. package/dist/connection/contacts/ConnectedContactsDirectory.d.ts +10 -0
  175. package/dist/connection/contacts/ImportVcf.d.ts +29 -0
  176. package/dist/connection/contacts/index.d.ts +5 -0
  177. package/dist/connection/defaultHost.d.ts +9 -0
  178. package/dist/connection/docx/ConnectedNativeDocxEditor.d.ts +3 -3
  179. package/dist/connection/docx/support.d.ts +10 -9
  180. package/dist/connection/files/bulk/ConnectedFilesBulkActions.d.ts +22 -0
  181. package/dist/connection/files/bulk/useDocumentBulkActions.d.ts +19 -0
  182. package/dist/connection/files/explorer/FileTiles.d.ts +6 -3
  183. package/dist/connection/files/fields/ConnectedBulkTagEditor.d.ts +16 -0
  184. package/dist/connection/files/fields/ConnectedFieldsEditor.d.ts +40 -0
  185. package/dist/connection/files/fields/ConnectedFieldsManager.d.ts +33 -0
  186. package/dist/connection/files/fields/ConnectedTagEditorDialog.d.ts +20 -0
  187. package/dist/connection/files/fields/ConnectedTagForm.d.ts +54 -0
  188. package/dist/connection/files/fields/DocumentFieldParts.d.ts +33 -0
  189. package/dist/connection/files/fields/DocumentUser.d.ts +11 -0
  190. package/dist/connection/files/fields/documentField.d.ts +48 -0
  191. package/dist/connection/files/fields/useFieldWrites.d.ts +20 -0
  192. package/dist/connection/files/fields/useFieldsApply.d.ts +49 -0
  193. package/dist/connection/files/fields/useMemberLookup.d.ts +3 -0
  194. package/dist/connection/files/grid/ConnectedTagEntity.d.ts +19 -0
  195. package/dist/connection/files/grid/cells.d.ts +85 -0
  196. package/dist/connection/files/grid/documentColumns.d.ts +66 -0
  197. package/dist/connection/files/grid/documentGridBus.d.ts +48 -0
  198. package/dist/connection/files/grid/documentStatus.d.ts +43 -0
  199. package/dist/connection/files/grid/familyMeta.d.ts +21 -0
  200. package/dist/connection/files/grid/tagColumn.d.ts +23 -0
  201. package/dist/connection/files/grid/useDocumentGridSync.d.ts +48 -0
  202. package/dist/connection/files/grid/useDocumentTable.d.ts +30 -0
  203. package/dist/connection/files/index.d.ts +36 -2
  204. package/dist/connection/files/move/ConnectedMoveToFolder.d.ts +31 -0
  205. package/dist/connection/files/page/ConnectedFilesPage.d.ts +86 -0
  206. package/dist/connection/files/page/DocumentsFilterBarActions.d.ts +39 -0
  207. package/dist/connection/files/page/DocumentsUploadButton.d.ts +25 -0
  208. package/dist/connection/files/page/PersistedGridView.d.ts +6 -0
  209. package/dist/connection/files/page/ProgressiveLoadingChip.d.ts +12 -0
  210. package/dist/connection/files/page/useDocumentNavigation.d.ts +20 -0
  211. package/dist/connection/files/review/ConnectedAiReview.d.ts +40 -0
  212. package/dist/connection/files/review/reviewProgress.d.ts +2 -0
  213. package/dist/connection/files/store.d.ts +96 -0
  214. package/dist/connection/files/useDocumentFilters.d.ts +54 -0
  215. package/dist/connection/files/views/ViewSelector.d.ts +33 -0
  216. package/dist/connection/files/views/tableViews.d.ts +22 -0
  217. package/dist/connection/files/views/useTableViews.d.ts +22 -0
  218. package/dist/connection/mail/ConnectedMailbox.d.ts +2 -2
  219. package/dist/connection/messenger/ChatAttachments.d.ts +15 -0
  220. package/dist/connection/messenger/ConnectedChatThread.d.ts +21 -0
  221. package/dist/connection/messenger/ConnectedGroupMembers.d.ts +20 -0
  222. package/dist/connection/messenger/ConnectedMessenger.d.ts +52 -0
  223. package/dist/connection/messenger/index.d.ts +6 -0
  224. package/dist/connection/messenger/types.d.ts +103 -0
  225. package/dist/connection/messenger/useMessengerRows.d.ts +19 -0
  226. package/dist/connection/tags/ConnectedTagsPage.d.ts +2 -35
  227. package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +19 -2
  228. package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +1 -1
  229. package/dist/connection/viewer/support.d.ts +21 -15
  230. package/dist/connection/workspaceData.d.ts +134 -8
  231. package/dist/facts/index.cjs +3 -3
  232. package/dist/facts/index.js +2 -2
  233. package/dist/files/bulk/BulkActionsBar.d.ts +9 -5
  234. package/dist/files/cells/DocumentNameCell.d.ts +4 -2
  235. package/dist/files/cells/MultiSelectCellEditor.d.ts +13 -0
  236. package/dist/files/cells/RelatedDocsCell.d.ts +2 -1
  237. package/dist/files/cells/index.d.ts +1 -0
  238. package/dist/files/documentColumns.d.ts +15 -0
  239. package/dist/files/folders/DocumentsFolderButton.d.ts +26 -0
  240. package/dist/files/folders/FolderTreePicker.d.ts +16 -0
  241. package/dist/files/folders/index.d.ts +2 -0
  242. package/dist/files/index.cjs +430 -434
  243. package/dist/files/index.d.ts +4 -1
  244. package/dist/files/index.js +5 -5
  245. package/dist/files/navigator/DocumentSearchList.d.ts +19 -0
  246. package/dist/files/navigator/ExplorerFileNavigator.d.ts +23 -0
  247. package/dist/files/navigator/NavDocumentPicker.d.ts +15 -0
  248. package/dist/files/navigator/NavigatorPickerBar.d.ts +26 -0
  249. package/dist/files/navigator/index.d.ts +5 -0
  250. package/dist/files/navigator/types.d.ts +7 -0
  251. package/dist/files/tags/BulkTagEditor.d.ts +2 -1
  252. package/dist/files/tags/index.d.ts +0 -2
  253. package/dist/files/visibility.d.ts +6 -5
  254. package/dist/home/StartTiles.d.ts +1 -1
  255. package/dist/home/index.cjs +30 -30
  256. package/dist/home/index.js +5 -5
  257. package/dist/index.cjs +684 -694
  258. package/dist/index.cjs.map +1 -1
  259. package/dist/index.d.ts +2 -1
  260. package/dist/index.js +22 -134
  261. package/dist/index.js.map +1 -1
  262. package/dist/provider/{BlocksProvider.d.ts → environment.d.ts} +8 -10
  263. package/dist/provider/host.d.ts +44 -0
  264. package/dist/retrieval/index.cjs +4 -4
  265. package/dist/retrieval/index.js +2 -2
  266. package/dist/shell/index.cjs +44 -44
  267. package/dist/shell/index.js +3 -3
  268. package/dist/shell/types.d.ts +1 -1
  269. package/dist/site/index.cjs +61 -61
  270. package/dist/site/index.js +2 -2
  271. package/dist/studio/index.cjs +86 -87
  272. package/dist/studio/index.cjs.map +1 -1
  273. package/dist/studio/index.js +15 -16
  274. package/dist/studio/index.js.map +1 -1
  275. package/dist/workflow-canvas/index.cjs +28 -27
  276. package/dist/workflow-canvas/index.cjs.map +1 -1
  277. package/dist/workflow-canvas/index.js +11 -10
  278. package/dist/workflow-canvas/index.js.map +1 -1
  279. package/dist/workspaces/WorkspaceCard.d.ts +1 -1
  280. package/dist/workspaces/index.cjs +20 -20
  281. package/dist/workspaces/index.js +4 -4
  282. package/node_modules/@arbidocs/coedit/package.json +1 -1
  283. package/package.json +5 -5
  284. package/dist/ConnectedStreamedWordArtifact-CWFR6A37.cjs.map +0 -1
  285. package/dist/FactTextEditor-YESAU2IJ.js.map +0 -1
  286. package/dist/FactTextEditor-YUPBCTXK.cjs.map +0 -1
  287. package/dist/WorkspaceTableView-DWUE4VQF.js.map +0 -1
  288. package/dist/WorkspaceTableView-EYLEUZZT.cjs.map +0 -1
  289. package/dist/chunk-2BHDRVVL.cjs.map +0 -1
  290. package/dist/chunk-3VULDTNL.cjs.map +0 -1
  291. package/dist/chunk-4RPBUMHB.cjs.map +0 -1
  292. package/dist/chunk-5ZIYPZYE.js +0 -2748
  293. package/dist/chunk-5ZIYPZYE.js.map +0 -1
  294. package/dist/chunk-6I6CVX5G.cjs +0 -22
  295. package/dist/chunk-6I6CVX5G.cjs.map +0 -1
  296. package/dist/chunk-7NL6WJER.cjs +0 -682
  297. package/dist/chunk-7NL6WJER.cjs.map +0 -1
  298. package/dist/chunk-CB4TIDEX.cjs +0 -54
  299. package/dist/chunk-CB4TIDEX.cjs.map +0 -1
  300. package/dist/chunk-CNHUJRQ4.cjs.map +0 -1
  301. package/dist/chunk-CROGFB46.cjs.map +0 -1
  302. package/dist/chunk-DEPF5LQI.js.map +0 -1
  303. package/dist/chunk-ETZ5A3GU.js.map +0 -1
  304. package/dist/chunk-EYJMMGXF.js +0 -19
  305. package/dist/chunk-EYJMMGXF.js.map +0 -1
  306. package/dist/chunk-F57LNUSZ.js.map +0 -1
  307. package/dist/chunk-FAXXN7KI.cjs.map +0 -1
  308. package/dist/chunk-FM3IRQJW.cjs.map +0 -1
  309. package/dist/chunk-FTZ45WHY.js.map +0 -1
  310. package/dist/chunk-GC2FSPSQ.cjs.map +0 -1
  311. package/dist/chunk-KDLX5AA7.js +0 -49
  312. package/dist/chunk-KDLX5AA7.js.map +0 -1
  313. package/dist/chunk-KFMRBZQK.js.map +0 -1
  314. package/dist/chunk-MNG7N6M2.js.map +0 -1
  315. package/dist/chunk-NPLGB4LI.cjs.map +0 -1
  316. package/dist/chunk-P2YM67Y5.cjs.map +0 -1
  317. package/dist/chunk-P6RIBIVN.js.map +0 -1
  318. package/dist/chunk-Q7CQYYZW.cjs.map +0 -1
  319. package/dist/chunk-QJFJ5JBF.cjs +0 -2838
  320. package/dist/chunk-QJFJ5JBF.cjs.map +0 -1
  321. package/dist/chunk-RATEAOKT.js.map +0 -1
  322. package/dist/chunk-SDOEHEJP.js.map +0 -1
  323. package/dist/chunk-SZSJGZSO.js.map +0 -1
  324. package/dist/chunk-TC3RQNEX.cjs.map +0 -1
  325. package/dist/chunk-TF7HN5EU.js.map +0 -1
  326. package/dist/chunk-VF5EUAIV.js.map +0 -1
  327. package/dist/chunk-VTTZZ4FN.js.map +0 -1
  328. package/dist/chunk-WK6FVIF7.js +0 -654
  329. package/dist/chunk-WK6FVIF7.js.map +0 -1
  330. package/dist/chunk-YF3QUHKN.cjs.map +0 -1
  331. package/dist/connection/ArbiAppProvider.d.ts +0 -16
  332. package/dist/connection/files/support.d.ts +0 -40
  333. package/dist/files/tags/DocTagPopover.d.ts +0 -113
  334. package/dist/files/tags/TagManager.d.ts +0 -54
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/ExportParts.tsx","../src/files/TransferParts.tsx","../src/files/ViewerChrome.tsx","../src/files/ViewerControlBar.tsx","../src/files/HtmlViewerParts.tsx","../src/files/doc-labels.tsx","../src/files/ViewerParts.tsx","../src/files/TagPassagePanel.tsx","../src/files/page/FilesPageTitle.tsx","../src/files/import/ImportParts.tsx","../src/files/import/TaskSection.tsx","../src/files/cells/BulkLabelSelect.tsx","../src/files/DocStatusIcon.tsx"],"names":["jsxs","jsx","RadioGroup","RadioGroupItem","Label","AlertTriangle","Button","cn","Fragment","HtmlPassage","Share2","Download","X","Check","StickyNote","Loader2","ChevronRight","Progress","useState","Badge","Tooltip","TooltipTrigger","TooltipContent","CheckCircle","Hourglass"],"mappings":"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","file":"chunk-J7YHBMBB.js","sourcesContent":["import type { ReactNode } from 'react'\nimport {\n AlertTriangle,\n CheckCircle2,\n Copy,\n Download,\n FolderInput,\n Users,\n XCircle,\n} from 'lucide-react'\nimport {\n Badge,\n Button,\n Label,\n RadioGroup,\n RadioGroupItem,\n ScrollArea,\n cn,\n} from '@arbidocs/react/ui'\nimport { ModalSection, ModalSectionTitle } from '../settings/ModalScaffold'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the export parts. Pass a partial `labels` to translate or reword. */\nexport interface ExportLabels {\n export: string\n selected: (count: number) => string\n exportMethod: string\n downloadToComputer: string\n downloadDescription: string\n copyToWorkspace: string\n copyDescription: string\n moveToWorkspace: string\n moveDescription: string\n exportColumns: string\n columnsVisible: string\n columnsAll: string\n columnsFiles: string\n columnsHelp: string\n selectTargetWorkspace: string\n noOtherWorkspaces: string\n member: string\n members: string\n result: string\n noItemDetail: string\n done: string\n cancel: string\n}\n\nexport const DEFAULT_EXPORT_LABELS: ExportLabels = {\n export: 'Export, copy or move',\n selected: (count) => `${count} selected`,\n exportMethod: 'Where to',\n downloadToComputer: 'Download as files',\n downloadDescription:\n 'A ZIP with the files (every version), one data file per kind (JSON) and a manifest',\n copyToWorkspace: 'Copy to another workspace',\n copyDescription: 'Re-encrypted for the target workspace; nothing changes here',\n moveToWorkspace: 'Move to another workspace',\n moveDescription: 'Copied first, then removed from here — only what you may delete here',\n exportColumns: 'Document table (index.csv)',\n columnsVisible: 'Visible columns (from current table view)',\n columnsAll: 'All columns (including hidden)',\n columnsFiles: 'None (files and data only)',\n columnsHelp: 'Which document columns go into index.csv',\n selectTargetWorkspace: 'Select Target Workspace',\n noOtherWorkspaces: 'No other workspaces available',\n member: 'member',\n members: 'members',\n result: 'Result',\n noItemDetail: 'The server returned no per-item detail.',\n done: 'Done',\n cancel: 'Cancel',\n}\n\n// ── Header ──────────────────────────────────────────────────────────────────────────────────\n\nexport interface ExportModalTitleProps {\n /** Workspace crumb (icon + name); omit when there is no current workspace. */\n workspace?: { icon: ReactNode; name: string }\n /** Icon and plural noun of what is exported (the selection count badge hides at 0). */\n entityIcon: ReactNode\n entityPlural: string\n selectedCount: number\n labels?: Partial<ExportLabels>\n}\n\n/** `Workspace / Chats / Export [3 selected]` for the Export dialog title. */\nexport function ExportModalTitle({\n workspace,\n entityIcon,\n entityPlural,\n selectedCount,\n labels,\n}: ExportModalTitleProps) {\n const l = { ...DEFAULT_EXPORT_LABELS, ...labels }\n return (\n <div className=\"flex min-w-0 flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span>{l.export}</span>\n {selectedCount > 0 && (\n <Badge className=\"bg-accent px-2.5 py-0.5 text-accent-foreground hover:bg-accent\">\n <span className=\"font-semibold\">{l.selected(selectedCount)}</span>\n </Badge>\n )}\n </div>\n {workspace && (\n <div className=\"flex min-w-0 items-center gap-1.5 text-sm font-normal text-muted-foreground\">\n <span className=\"shrink-0\">{workspace.icon}</span>\n <span className=\"truncate\" title={workspace.name}>\n {workspace.name}\n </span>\n <span aria-hidden=\"true\">/</span>\n <span className=\"shrink-0\">{entityIcon}</span>\n <span className=\"truncate\">{entityPlural}</span>\n </div>\n )}\n </div>\n )\n}\n\n// ── Destination chooser ─────────────────────────────────────────────────────────────────────\n\nexport type ExportMode = 'download' | 'copy' | 'move'\nexport type ExportColumnsMode = 'visible' | 'all' | 'files'\n\nexport interface ExportMethodChooserProps {\n mode: ExportMode\n onModeChange: (mode: ExportMode) => void\n columnsMode: ExportColumnsMode\n onColumnsModeChange: (mode: ExportColumnsMode) => void\n /** Offer the index.csv columns picker under \"Download\" (when documents are involved). */\n showColumns?: boolean\n /** Why \"Move\" is unavailable (e.g. a guest cannot remove anything here); disables it. */\n moveDisabledReason?: string\n labels?: Partial<ExportLabels>\n /** Overrides the columns select test id (default `export-columns-selector`). */\n columnsTestId?: string\n}\n\n/** Download as files, copy to another workspace, or move there — with the CSV columns picker. */\nexport function ExportMethodChooser({\n mode,\n onModeChange,\n columnsMode,\n onColumnsModeChange,\n showColumns = true,\n moveDisabledReason,\n labels,\n columnsTestId,\n}: ExportMethodChooserProps) {\n const l = { ...DEFAULT_EXPORT_LABELS, ...labels }\n const card =\n 'flex cursor-pointer items-start space-x-3 rounded-lg bg-muted p-4 transition-colors hover:bg-accent'\n const options: {\n value: ExportMode\n icon: typeof Download\n title: string\n description: string\n disabledReason?: string\n }[] = [\n {\n value: 'download',\n icon: Download,\n title: l.downloadToComputer,\n description: l.downloadDescription,\n },\n { value: 'copy', icon: Copy, title: l.copyToWorkspace, description: l.copyDescription },\n {\n value: 'move',\n icon: FolderInput,\n title: l.moveToWorkspace,\n description: moveDisabledReason ?? l.moveDescription,\n disabledReason: moveDisabledReason,\n },\n ]\n return (\n <ModalSection>\n <ModalSectionTitle>{l.exportMethod}</ModalSectionTitle>\n <RadioGroup\n value={mode}\n onValueChange={(v) => onModeChange(v as ExportMode)}\n className=\"space-y-3\"\n >\n {options.map((option) => {\n const Icon = option.icon\n const disabled = !!option.disabledReason\n return (\n <div\n key={option.value}\n className={cn(card, disabled && 'cursor-not-allowed opacity-60 hover:bg-muted')}\n >\n <RadioGroupItem\n value={option.value}\n id={`export-mode-${option.value}`}\n className=\"mt-1\"\n disabled={disabled}\n />\n <div className=\"flex-1\" onClick={() => !disabled && onModeChange(option.value)}>\n <Label\n htmlFor={`export-mode-${option.value}`}\n className=\"flex cursor-pointer items-center gap-2 font-medium\"\n >\n <Icon className=\"size-4\" />\n {option.title}\n </Label>\n <p className=\"mt-1 text-sm text-muted-foreground\">{option.description}</p>\n {option.value === 'download' && mode === 'download' && showColumns && (\n <div className=\"mt-3\" onClick={(e) => e.stopPropagation()}>\n <label className=\"text-sm font-medium text-foreground\">{l.exportColumns}</label>\n <select\n value={columnsMode}\n onChange={(e) => onColumnsModeChange(e.target.value as ExportColumnsMode)}\n className=\"mt-1.5 w-full rounded-md border border-input bg-background px-3 py-2 text-sm pointer-coarse:min-h-11\"\n data-testid={testIdOr(columnsTestId, { testId: 'export-columns-selector' })}\n >\n <option value=\"visible\">{l.columnsVisible}</option>\n <option value=\"all\">{l.columnsAll}</option>\n <option value=\"files\">{l.columnsFiles}</option>\n </select>\n <p className=\"mt-1.5 text-sm text-muted-foreground\">{l.columnsHelp}</p>\n </div>\n )}\n </div>\n </div>\n )\n })}\n </RadioGroup>\n </ModalSection>\n )\n}\n\n// ── Target workspace picker ─────────────────────────────────────────────────────────────────\n\nexport interface ExportWorkspaceOption {\n id: string\n name: string\n description?: string | null\n memberCount: number\n /** Workspace icon (32px). */\n icon: ReactNode\n /** Member avatars (the host decides which and how many). */\n members?: ReactNode\n}\n\nexport interface ExportWorkspacePickerProps {\n workspaces: ExportWorkspaceOption[]\n selectedId: string | null\n onSelect: (id: string) => void\n labels?: Partial<ExportLabels>\n /** Replaces the whole `export-workspace-<id>` id. */\n testId?: (id: string) => string\n}\n\n/** Pick the workspace to export into. */\nexport function ExportWorkspacePicker({\n workspaces,\n selectedId,\n onSelect,\n labels,\n testId,\n}: ExportWorkspacePickerProps) {\n const l = { ...DEFAULT_EXPORT_LABELS, ...labels }\n return (\n <ModalSection>\n <ModalSectionTitle>{l.selectTargetWorkspace}</ModalSectionTitle>\n <ScrollArea className=\"h-[300px] rounded-lg bg-muted\">\n <div className=\"space-y-2 p-2\">\n {workspaces.length === 0 ? (\n <p className=\"py-4 text-center text-sm text-muted-foreground\">{l.noOtherWorkspaces}</p>\n ) : (\n workspaces.map((w) => (\n <button\n key={w.id}\n type=\"button\"\n onClick={() => onSelect(w.id)}\n aria-pressed={selectedId === w.id}\n data-testid={testIdOr(testId?.(w.id), { testId: `export-workspace-${w.id}` })}\n className={cn(\n 'w-full rounded-lg p-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selectedId === w.id\n ? 'bg-accent ring-1 ring-primary/40'\n : 'bg-background hover:bg-accent/60'\n )}\n >\n <div className=\"mb-2 flex items-start gap-3\">\n {w.icon}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate font-medium\">{w.name}</div>\n {w.description && (\n <div className=\"mt-0.5 truncate text-sm text-muted-foreground\">\n {w.description}\n </div>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between border-t border-border pt-2\">\n <div className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <Users className=\"size-3\" />\n <span>\n {w.memberCount} {w.memberCount === 1 ? l.member : l.members}\n </span>\n </div>\n {w.members}\n </div>\n </button>\n ))\n )}\n </div>\n </ScrollArea>\n </ModalSection>\n )\n}\n\n// ── Results report ──────────────────────────────────────────────────────────────────────────\n\nexport interface ExportResultRowView {\n id: string\n tone: 'success' | 'warning' | 'error'\n name: string\n /** User-facing kind, e.g. \"Document\". */\n kind: string\n detail?: string\n}\n\nconst RESULT_ICON = { success: CheckCircle2, warning: AlertTriangle, error: XCircle } as const\nconst RESULT_ICON_CLASS = {\n success: 'text-green-text',\n warning: 'text-yellow-text',\n error: 'text-red-text',\n} as const\n\nexport interface ExportResultsReportProps {\n /** One-line outcome, e.g. \"Exported 3 documents. 1 failed.\" */\n summary: string\n /** Failures first, then warnings, then clean rows (the host orders them). */\n rows: ExportResultRowView[]\n onDone: () => void\n labels?: Partial<ExportLabels>\n testIds?: Partial<ExportResultsTestIds>\n}\n\nexport interface ExportResultsTestIds {\n root: string\n summary: string\n done: string\n /** Replaces the whole `export-result-<id>` id. */\n row: (id: string) => string\n}\n\n/**\n * Per-item outcome list. A batch can come back part-succeeded, with warnings that are not\n * failures, so every item that did not cleanly succeed is named with its reason.\n */\nexport function ExportResultsReport({\n summary,\n rows,\n onDone,\n labels,\n testIds,\n}: ExportResultsReportProps) {\n const l = { ...DEFAULT_EXPORT_LABELS, ...labels }\n return (\n <ModalSection data-testid={testIdOr(testIds?.root, { testId: 'export-results' })}>\n <ModalSectionTitle>{l.result}</ModalSectionTitle>\n <p\n className=\"text-sm text-muted-foreground\"\n data-testid={testIdOr(testIds?.summary, { testId: 'export-results-summary' })}\n >\n {summary}\n </p>\n <ScrollArea className=\"mt-3 h-[280px] rounded-lg bg-muted\">\n <div className=\"space-y-1 p-2\">\n {rows.map((row) => {\n const Icon = RESULT_ICON[row.tone]\n return (\n <div\n key={row.id}\n className=\"flex items-start gap-2 rounded-md px-2 py-1.5\"\n data-testid={testIdOr(testIds?.row?.(row.id), {\n testId: `export-result-${row.id}`,\n })}\n >\n <Icon className={cn('mt-0.5 size-4 shrink-0', RESULT_ICON_CLASS[row.tone])} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate text-sm\">{row.name}</span>\n <span className=\"shrink-0 text-xs uppercase tracking-wide text-muted-foreground\">\n {row.kind}\n </span>\n </div>\n {row.detail && (\n <p className=\"mt-0.5 break-words text-sm text-muted-foreground\">{row.detail}</p>\n )}\n </div>\n </div>\n )\n })}\n {rows.length === 0 && (\n <p className=\"py-4 text-center text-sm text-muted-foreground\">{l.noItemDetail}</p>\n )}\n </div>\n </ScrollArea>\n <div className=\"mt-4 flex justify-end\">\n <Button\n onClick={onDone}\n data-testid={testIdOr(testIds?.done, { testId: 'export-results-done-button' })}\n >\n {l.done}\n </Button>\n </div>\n </ModalSection>\n )\n}\n\n// ── Footer ──────────────────────────────────────────────────────────────────────────────────\n\nexport interface ExportFooterProps {\n onCancel?: () => void\n onSubmit: () => void\n submitLabel: string\n submitDisabled: boolean\n labels?: Partial<ExportLabels>\n testIds?: Partial<{ cancel: string; submit: string }>\n}\n\n/** Sticky Cancel + the ONE primary Export button. */\nexport function ExportFooter({\n onCancel,\n onSubmit,\n submitLabel,\n submitDisabled,\n labels,\n testIds,\n}: ExportFooterProps) {\n const l = { ...DEFAULT_EXPORT_LABELS, ...labels }\n return (\n <div className=\"sticky bottom-0 flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border bg-background p-4\">\n <Button\n variant=\"outline\"\n onClick={onCancel}\n data-testid={testIdOr(testIds?.cancel, { testId: 'export-cancel-button' })}\n >\n {l.cancel}\n </Button>\n <Button\n onClick={onSubmit}\n disabled={submitDisabled}\n data-testid={testIdOr(testIds?.submit, { testId: 'export-submit-button' })}\n >\n {submitLabel}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle, Info, Loader2, RotateCcw } from 'lucide-react'\nimport {\n Button,\n Checkbox,\n Label,\n Progress,\n RadioGroup,\n RadioGroupItem,\n cn,\n} from '@arbidocs/react/ui'\nimport { ModalSection, ModalSectionTitle } from '../settings/ModalScaffold'\n\n/**\n * The \"what\" half of the Export / copy / move dialog: scope, entity types,\n * cited documents, conflicts; plus the plan summary, the job's progress and the\n * resume banner. The \"where\" half (destination, target workspace, results) is\n * in `ExportParts`. Presentational only — the host resolves scope into counts.\n */\n\nexport interface TransferLabels {\n what: string\n scopeSelection: (count: number) => string\n scopeLabel: string\n scopeAll: string\n chooseLabel: string\n include: string\n references: string\n referencesInclude: string\n referencesLink: string\n referencesHelp: string\n conflicts: string\n conflictSkip: string\n conflictKeepBoth: string\n summary: string\n summaryLoading: string\n hide: string\n cancelJob: string\n resume: string\n}\n\nexport const DEFAULT_TRANSFER_LABELS: TransferLabels = {\n what: 'What',\n scopeSelection: (count) => `The ${count} selected`,\n scopeLabel: 'Everything with a label',\n scopeAll: 'Everything in this workspace',\n chooseLabel: 'Label',\n include: 'Include',\n references: 'Documents they cite',\n referencesInclude: 'Bring them along',\n referencesLink: 'Leave them here (the citation keeps pointing here)',\n referencesHelp: 'Notes, conversations and automations can cite documents outside your selection.',\n conflicts: 'Already in the target',\n conflictSkip: 'Skip it (same-named file or automation, identical note)',\n conflictKeepBoth: 'Keep both — the copy is renamed \"name (2)\"',\n summary: 'This will include',\n summaryLoading: 'Working out what is included…',\n hide: 'Close — it keeps going',\n cancelJob: 'Stop',\n resume: 'Resume',\n}\n\n// ── Scope ───────────────────────────────────────────────────────────────────────────────────\n\nexport type TransferScopeChoice = 'selection' | 'label' | 'all'\n\nexport interface TransferLabelOption {\n id: string\n name: string\n}\n\nexport interface TransferScopeChooserProps {\n scope: TransferScopeChoice\n onScopeChange: (scope: TransferScopeChoice) => void\n /** How many items the dialog was opened with; 0 hides \"selected\". */\n selectedCount: number\n labelOptions: TransferLabelOption[]\n labelId: string | null\n onLabelChange: (id: string) => void\n labels?: Partial<TransferLabels>\n}\n\n/** Selected items, everything with one label, or everything. */\nexport function TransferScopeChooser({\n scope,\n onScopeChange,\n selectedCount,\n labelOptions,\n labelId,\n onLabelChange,\n labels,\n}: TransferScopeChooserProps) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n const choices: {\n value: TransferScopeChoice\n title: string\n hidden?: boolean\n disabled?: boolean\n }[] = [\n { value: 'selection', title: l.scopeSelection(selectedCount), hidden: selectedCount === 0 },\n { value: 'label', title: l.scopeLabel, disabled: labelOptions.length === 0 },\n { value: 'all', title: l.scopeAll },\n ]\n return (\n <ModalSection data-testid=\"transfer-scope\">\n <ModalSectionTitle>{l.what}</ModalSectionTitle>\n <RadioGroup\n value={scope}\n onValueChange={(v) => onScopeChange(v as TransferScopeChoice)}\n className=\"space-y-2\"\n >\n {choices\n .filter((c) => !c.hidden)\n .map((c) => (\n <div key={c.value} className=\"flex items-center gap-3\">\n <RadioGroupItem\n value={c.value}\n id={`transfer-scope-${c.value}`}\n disabled={c.disabled}\n data-testid={`transfer-scope-${c.value}`}\n />\n <Label htmlFor={`transfer-scope-${c.value}`} className=\"cursor-pointer\">\n {c.title}\n </Label>\n {c.value === 'label' && scope === 'label' && (\n <select\n aria-label={l.chooseLabel}\n value={labelId ?? ''}\n onChange={(e) => onLabelChange(e.target.value)}\n className=\"min-w-0 flex-1 rounded-md border border-input bg-background px-2 py-1 text-sm pointer-coarse:min-h-11\"\n data-testid=\"transfer-scope-label-select\"\n >\n {labelOptions.map((option) => (\n <option key={option.id} value={option.id}>\n {option.name}\n </option>\n ))}\n </select>\n )}\n </div>\n ))}\n </RadioGroup>\n </ModalSection>\n )\n}\n\n// ── Entity types ────────────────────────────────────────────────────────────────────────────\n\nexport interface TransferKindOption {\n kind: string\n label: string\n /** What the current scope holds of this kind; undefined while counting. */\n count?: number\n}\n\nexport interface TransferKindsPickerProps {\n options: TransferKindOption[]\n selected: string[]\n onToggle: (kind: string, checked: boolean) => void\n labels?: Partial<TransferLabels>\n}\n\n/** One checkbox per entity type, each with what the scope holds of it. */\nexport function TransferKindsPicker({\n options,\n selected,\n onToggle,\n labels,\n}: TransferKindsPickerProps) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n return (\n <ModalSection data-testid=\"transfer-kinds\">\n <ModalSectionTitle>{l.include}</ModalSectionTitle>\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {options.map((option) => {\n const id = `transfer-kind-${option.kind}`\n return (\n <div\n key={option.kind}\n className=\"flex items-center gap-2 rounded-md bg-muted px-3 py-2\"\n >\n <Checkbox\n id={id}\n checked={selected.includes(option.kind)}\n onCheckedChange={(checked) => onToggle(option.kind, checked === true)}\n data-testid={id}\n />\n <Label htmlFor={id} className=\"flex-1 cursor-pointer\">\n {option.label}\n </Label>\n {option.count !== undefined && (\n <span\n className=\"text-sm tabular-nums text-muted-foreground\"\n data-testid={`${id}-count`}\n >\n {option.count}\n </span>\n )}\n </div>\n )\n })}\n </div>\n </ModalSection>\n )\n}\n\n// ── Two small choices ───────────────────────────────────────────────────────────────────────\n\ninterface ChoiceRowsProps<T extends string> {\n title: string\n value: T\n onChange: (value: T) => void\n choices: { value: T; title: string }[]\n help?: ReactNode\n testId: string\n}\n\nfunction ChoiceRows<T extends string>({\n title,\n value,\n onChange,\n choices,\n help,\n testId,\n}: ChoiceRowsProps<T>) {\n return (\n <ModalSection data-testid={testId}>\n <ModalSectionTitle>{title}</ModalSectionTitle>\n {help && <p className=\"mb-2 text-sm text-muted-foreground\">{help}</p>}\n <RadioGroup value={value} onValueChange={(v) => onChange(v as T)} className=\"space-y-2\">\n {choices.map((c) => (\n <div key={c.value} className=\"flex items-center gap-3\">\n <RadioGroupItem\n value={c.value}\n id={`${testId}-${c.value}`}\n data-testid={`${testId}-${c.value}`}\n />\n <Label htmlFor={`${testId}-${c.value}`} className=\"cursor-pointer\">\n {c.title}\n </Label>\n </div>\n ))}\n </RadioGroup>\n </ModalSection>\n )\n}\n\nexport type TransferReferencesChoice = 'include' | 'link'\n\nexport function TransferReferencesChooser({\n value,\n onChange,\n labels,\n}: {\n value: TransferReferencesChoice\n onChange: (value: TransferReferencesChoice) => void\n labels?: Partial<TransferLabels>\n}) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n return (\n <ChoiceRows\n title={l.references}\n help={l.referencesHelp}\n value={value}\n onChange={onChange}\n testId=\"transfer-references\"\n choices={[\n { value: 'include', title: l.referencesInclude },\n { value: 'link', title: l.referencesLink },\n ]}\n />\n )\n}\n\nexport type TransferConflictChoice = 'skip' | 'keep_both'\n\nexport function TransferConflictChooser({\n value,\n onChange,\n labels,\n}: {\n value: TransferConflictChoice\n onChange: (value: TransferConflictChoice) => void\n labels?: Partial<TransferLabels>\n}) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n return (\n <ChoiceRows\n title={l.conflicts}\n value={value}\n onChange={onChange}\n testId=\"transfer-conflict\"\n choices={[\n { value: 'skip', title: l.conflictSkip },\n { value: 'keep_both', title: l.conflictKeepBoth },\n ]}\n />\n )\n}\n\n// ── Plan summary ────────────────────────────────────────────────────────────────────────────\n\nexport interface TransferPlanSummaryProps {\n /** e.g. \"12 documents (5 older versions and 3 attachments come with them)\". */\n lines: string[]\n /** What will NOT be kept as-is: dropped links, dangling citations, items that stay. */\n warnings: string[]\n isLoading?: boolean\n labels?: Partial<TransferLabels>\n}\n\nexport function TransferPlanSummary({\n lines,\n warnings,\n isLoading,\n labels,\n}: TransferPlanSummaryProps) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n return (\n <ModalSection data-testid=\"transfer-plan-summary\">\n <ModalSectionTitle>{l.summary}</ModalSectionTitle>\n {isLoading && lines.length === 0 ? (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" />\n {l.summaryLoading}\n </p>\n ) : (\n <ul className=\"space-y-1 text-sm\">\n {lines.map((line) => (\n <li key={line} className=\"flex items-start gap-2\">\n <Info className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span>{line}</span>\n </li>\n ))}\n </ul>\n )}\n {warnings.length > 0 && (\n <ul className=\"mt-2 space-y-1 text-sm\" data-testid=\"transfer-plan-warnings\">\n {warnings.map((warning) => (\n <li key={warning} className=\"flex items-start gap-2\">\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0 text-yellow-text\" />\n <span>{warning}</span>\n </li>\n ))}\n </ul>\n )}\n </ModalSection>\n )\n}\n\n// ── Progress + resume ───────────────────────────────────────────────────────────────────────\n\nexport interface TransferProgressViewProps {\n title: string\n processed: number\n total: number\n /** \"Copying\", \"Linking\", \"Removing from this workspace\" … */\n phaseLabel: string\n onHide?: () => void\n onCancel?: () => void\n isCancelling?: boolean\n labels?: Partial<TransferLabels>\n}\n\nexport function TransferProgressView({\n title,\n processed,\n total,\n phaseLabel,\n onHide,\n onCancel,\n isCancelling,\n labels,\n}: TransferProgressViewProps) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n const percent = total > 0 ? Math.min(100, Math.round((processed / total) * 100)) : 0\n return (\n <ModalSection data-testid=\"transfer-progress\">\n <ModalSectionTitle>{title}</ModalSectionTitle>\n <Progress value={percent} className=\"h-2\" />\n <p className=\"mt-2 text-sm text-muted-foreground\" data-testid=\"transfer-progress-text\">\n {phaseLabel} · {processed} / {total}\n </p>\n <div className=\"mt-4 flex justify-end gap-2\">\n {onCancel && (\n <Button\n variant=\"outline\"\n onClick={onCancel}\n disabled={isCancelling}\n data-testid=\"transfer-cancel-button\"\n >\n {l.cancelJob}\n </Button>\n )}\n {onHide && (\n <Button onClick={onHide} data-testid=\"transfer-hide-button\">\n {l.hide}\n </Button>\n )}\n </div>\n </ModalSection>\n )\n}\n\nexport function TransferResumeBanner({\n message,\n onResume,\n isResuming,\n labels,\n}: {\n message: string\n onResume: () => void\n isResuming?: boolean\n labels?: Partial<TransferLabels>\n}) {\n const l = { ...DEFAULT_TRANSFER_LABELS, ...labels }\n return (\n <div\n className={cn('flex items-center gap-3 rounded-lg bg-muted p-3 text-sm')}\n data-testid=\"transfer-resume-banner\"\n >\n <AlertTriangle className=\"size-4 shrink-0 text-yellow-text\" />\n <span className=\"flex-1\">{message}</span>\n <Button\n size=\"sm\"\n onClick={onResume}\n disabled={isResuming}\n data-testid=\"transfer-resume-button\"\n >\n <RotateCcw className=\"size-4\" />\n {l.resume}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport {\n Check,\n ChevronLeft,\n ChevronRight,\n Crop,\n GitCompare,\n ImagePlus,\n Loader2,\n Pencil,\n Share2,\n X,\n ZoomIn,\n} from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the viewer chrome and parts. Pass a partial `labels` to translate or reword. */\nexport interface ViewerLabels {\n shared: string\n useAsReference: string\n useAsReferenceTitle: string\n crop: string\n cropTitle: string\n previousPage: string\n nextPage: string\n /** The zoom button's accessible name; `level` is the current zoom, e.g. \"150%\". */\n zoom: (level: string) => string\n pageInput: string\n pageOfTitle: string\n pageOf: (page: number, total: number) => string\n previewUnavailable: string\n cannotPreview: (extension: string) => string\n downloadToOpen: string\n download: string\n}\n\nexport const DEFAULT_VIEWER_LABELS: ViewerLabels = {\n shared: 'Shared',\n useAsReference: 'Use as reference',\n useAsReferenceTitle: 'Use as reference for a new image generation',\n crop: 'Crop',\n cropTitle: 'Crop and save as a new version',\n previousPage: 'Previous page',\n nextPage: 'Next page',\n zoom: (level) => `Zoom ${level}. Click to zoom in further, then back to fit the page width.`,\n pageInput: 'Page number input',\n pageOfTitle: 'Click to go to page',\n pageOf: (page, total) => `Page ${page} of ${total}. Click to navigate.`,\n previewUnavailable: 'Preview not available',\n cannotPreview: (extension) => `${extension} files cannot be previewed in the browser.`,\n downloadToOpen: 'Download to open',\n download: 'Download',\n}\n\nexport interface ViewerFrameTestIds {\n root: string\n compareRow: string\n /** Replaces the whole `document-viewer-content-<id>` id. */\n content: string\n}\n\n// ── Frame ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface ViewerFrameProps {\n /** The sticky top bar (tabs + title + actions). */\n header: ReactNode\n /** \"Comparing against...\" chips, shown on their own row under the header when set. */\n compareRow?: ReactNode\n /** Document id; the content area's test id is `document-viewer-content-{id}`. */\n contentId: string\n children: ReactNode\n /** Rendered after the content area (modals owned by the viewer, e.g. crop). */\n footer?: ReactNode\n frameRef?: React.Ref<HTMLDivElement>\n className?: string\n testIds?: Partial<ViewerFrameTestIds>\n}\n\n/** The document viewer shell: sticky header, optional compare row, scrolling content. */\nexport const ViewerFrame = ({\n header,\n compareRow,\n contentId,\n children,\n footer,\n frameRef,\n className,\n testIds,\n}: ViewerFrameProps) => (\n <div\n ref={frameRef}\n className={cn('flex h-full w-full flex-col', className)}\n data-slot=\"viewer-frame\"\n data-testid={testIdOr(testIds?.root, { testId: 'document-viewer' })}\n >\n <div className=\"sticky top-0 z-10 bg-background\">\n {header}\n {compareRow && (\n <div\n className=\"flex flex-wrap items-center gap-1.5 border-t border-border px-3 py-1.5\"\n data-testid={testIdOr(testIds?.compareRow, { testId: 'compare-indicator-row' })}\n >\n {compareRow}\n </div>\n )}\n </div>\n <div\n className=\"flex-1 overflow-hidden\"\n data-testid={testIdOr(testIds?.content, { testId: `document-viewer-content-${contentId}` })}\n >\n {children}\n </div>\n {footer}\n </div>\n)\n\n/** Centered muted status line for loading / error states inside the viewer. */\nexport function ViewerMessage({ children, testId }: { children: ReactNode; testId?: string }) {\n return (\n <div className=\"flex h-full items-center justify-center\" data-testid={testId}>\n <div className=\"text-sm text-muted-foreground\">{children}</div>\n </div>\n )\n}\n\n// ── Title ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface ViewerTitleProps {\n title: string\n /** Shows the small shared marker. */\n shared?: boolean\n /** e.g. \"v3\". */\n versionLabel?: string | null\n /** Let the pill shrink (live artifacts share the row with more controls). */\n shrink?: boolean\n labels?: Partial<ViewerLabels>\n /** Overrides the shared-marker test id (default `document-title-shared-indicator`). */\n sharedTestId?: string\n}\n\n/** Read-only document name (plain text, no fill) with the shared marker and version label. */\nexport function ViewerTitle({\n title,\n shared,\n versionLabel,\n shrink,\n labels,\n sharedTestId,\n}: ViewerTitleProps) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n return (\n <span\n className={cn(\n 'inline-flex min-w-0 items-center gap-1.5 px-1 py-1 text-sm font-medium',\n shrink ? 'shrink' : 'shrink-0'\n )}\n title={title}\n >\n <span className=\"truncate\">{title}</span>\n {shared && (\n <span\n title={l.shared}\n className=\"flex shrink-0 items-center\"\n data-testid={testIdOr(sharedTestId, { testId: 'document-title-shared-indicator' })}\n >\n <Share2 aria-label={l.shared} className=\"size-3.5 text-muted-foreground\" />\n </span>\n )}\n {versionLabel && (\n <span className=\"shrink-0 text-xs font-normal text-muted-foreground\">{versionLabel}</span>\n )}\n </span>\n )\n}\n\n// ── Actions ─────────────────────────────────────────────────────────────────────────────────\n\nexport interface ViewerImageActionsProps {\n compact: boolean\n /** Start a generation from the image. Omitted: not offered. */\n onUseAsReference?: () => void\n onCrop: () => void\n labels?: Partial<ViewerLabels>\n testIds?: Partial<{ useAsReference: string; crop: string }>\n}\n\n/** Image-only actions: feed it into a new generation, or crop it into a new version. */\nexport function ViewerImageActions({\n compact,\n onUseAsReference,\n onCrop,\n labels,\n testIds,\n}: ViewerImageActionsProps) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n const size = compact ? 'icon' : 'sm'\n return (\n <>\n {onUseAsReference && (\n <Button\n onClick={onUseAsReference}\n variant=\"outline\"\n size={size}\n title={l.useAsReferenceTitle}\n aria-label={l.useAsReference}\n data-testid={testIdOr(testIds?.useAsReference, {\n testId: 'image-use-as-reference-button',\n })}\n className=\"pointer-coarse:min-h-11\"\n >\n <ImagePlus className=\"size-4\" />\n {!compact && <span className=\"ml-1\">{l.useAsReference}</span>}\n </Button>\n )}\n <Button\n onClick={onCrop}\n variant=\"outline\"\n size={size}\n title={l.cropTitle}\n aria-label={l.crop}\n data-testid={testIdOr(testIds?.crop, { testId: 'image-crop-button' })}\n className=\"pointer-coarse:min-h-11\"\n >\n <Crop className=\"size-4\" />\n {!compact && <span className=\"ml-1\">{l.crop}</span>}\n </Button>\n </>\n )\n}\n\n// ── PDF page navigation ─────────────────────────────────────────────────────────────────────\n\nexport interface PdfPageNavProps {\n canPrev: boolean\n canNext: boolean\n onPrev: () => void\n onNext: () => void\n /** The \"3 / 12\" counter between the arrows (the host owns its editing behaviour). */\n counter: ReactNode\n labels?: Partial<ViewerLabels>\n testIds?: Partial<{ overlay: string; prev: string; next: string }>\n}\n\n/** Floating prev / counter / next control over a rendered PDF. */\nexport function PdfPageNav({\n canPrev,\n canNext,\n onPrev,\n onNext,\n counter,\n labels,\n testIds,\n}: PdfPageNavProps) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n return (\n <div\n className=\"absolute bottom-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1 rounded-lg border border-border bg-background/95 px-2 py-1.5 shadow-lg backdrop-blur\"\n data-testid={testIdOr(testIds?.overlay, { testId: 'pdf-page-nav-overlay' })}\n >\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 pointer-coarse:size-11\"\n onClick={onPrev}\n disabled={!canPrev}\n aria-label={l.previousPage}\n data-testid={testIdOr(testIds?.prev, { testId: 'pdf-page-nav-prev' })}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n {counter}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 pointer-coarse:size-11\"\n onClick={onNext}\n disabled={!canNext}\n aria-label={l.nextPage}\n data-testid={testIdOr(testIds?.next, { testId: 'pdf-page-nav-next' })}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n )\n}\n\n// ── Zoom ────────────────────────────────────────────────────────────────────────────────────\n\nexport interface ViewerZoomControlProps {\n /** Multiplier of the fit-width size (1 = fit width). */\n zoom: number\n /** Steps to the next zoom level (and back to fit width after the last). */\n onCycle: () => void\n labels?: Partial<ViewerLabels>\n testIds?: Partial<{ button: string; level: string }>\n}\n\n/**\n * The viewer's zoom button, on every pointer: a docked panel on a desktop screen still leaves the\n * text too small to read, so mouse users need a way to enlarge it too. It stays quiet at fit width\n * and shows the level once zoomed; pinch and double-tap work alongside it.\n */\nexport function ViewerZoomControl({ zoom, onCycle, labels, testIds }: ViewerZoomControlProps) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n const level = `${Math.round(zoom * 100)}%`\n const isZoomed = Math.abs(zoom - 1) > 0.02\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onCycle}\n title={`Zoom ${level}`}\n aria-label={l.zoom(level)}\n data-testid={testIdOr(testIds?.button, { testId: 'viewer-zoom-button' })}\n className=\"absolute right-3 bottom-4 z-10 h-9 min-w-9 items-center justify-center gap-1 rounded-full border border-border bg-background/95 px-2 shadow-md backdrop-blur pointer-coarse:h-11 pointer-coarse:min-w-11 pointer-coarse:px-2.5\"\n >\n <ZoomIn className=\"size-4\" />\n {isZoomed && (\n <span\n className=\"text-xs font-medium tabular-nums\"\n data-testid={testIdOr(testIds?.level, { testId: 'viewer-zoom-level' })}\n >\n {level}\n </span>\n )}\n </Button>\n )\n}\n","import type { ReactElement, ReactNode } from 'react'\n\nexport interface ViewerControlBarProps {\n /** The viewer body. It scrolls in the space above the bar, never underneath it. */\n children: ReactNode\n /** Page and zoom controls. Without them no bar is drawn and the body fills the pane. */\n controls?: ReactNode\n}\n\n/**\n * Lays the viewer's page and zoom controls in a bar of their own below the body. The body stops\n * above the bar, so the controls never sit over the text being read, even while the reader pauses.\n */\nexport function ViewerControlBar({ children, controls }: ViewerControlBarProps): ReactElement {\n // The body keeps the same place in the tree whether or not a bar is drawn, so it isn't\n // remounted (and loses its scroll position) when the page count arrives.\n return (\n // It fills what its pane leaves below any bars above it (a ViewerPane is a column), never\n // the pane's whole height: that would push the body past the pane by the bars' height.\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className=\"relative min-h-0 flex-1\">{children}</div>\n {controls && (\n <div\n data-testid=\"viewer-control-bar\"\n className=\"relative h-22 shrink-0 border-t border-border bg-background\"\n >\n {controls}\n </div>\n )}\n </div>\n )\n}\n","import { memo } from 'react'\nimport type { ReactNode, Ref } from 'react'\nimport { Share2, StickyNote, Tags } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the parsed viewer parts. Pass a partial `labels` to translate or reword. */\nexport interface HtmlViewerLabels {\n viewerRegion: string\n pageOfTotal: (page: number, total: number) => string\n documentContent: string\n page: (n: number) => string\n noContent: string\n noContentDescription: string\n citedSuffix: string\n previousCited: string\n nextCited: string\n previousLabelPassage: string\n nextLabelPassage: string\n sharedWithMembers: string\n privateToYou: string\n shared: string\n private: string\n}\n\nexport const DEFAULT_HTML_VIEWER_LABELS: HtmlViewerLabels = {\n viewerRegion: 'Parsed document viewer',\n pageOfTotal: (page, total) => `Page ${page} of ${total}`,\n documentContent: 'Document content',\n page: (n) => `Page ${n}`,\n noContent: 'No Content Available',\n noContentDescription: 'This document has not been parsed yet or contains no content',\n citedSuffix: 'cited',\n previousCited: 'Previous cited passage',\n nextCited: 'Next cited passage',\n previousLabelPassage: 'Previous passage with this label',\n nextLabelPassage: 'Next passage with this label',\n sharedWithMembers: 'Shared with workspace members',\n privateToYou: 'Private to you',\n shared: 'Shared',\n private: 'Private',\n}\n\n// ── Surface + pages ─────────────────────────────────────────────────────────────────────────\n\nexport interface HtmlViewerRootProps {\n children: ReactNode\n className?: string\n}\n\n/** Positioning context for the parsed viewer: overlays (tag bar, cited stepper) sit on it. */\nexport function HtmlViewerRoot({ children, className }: HtmlViewerRootProps) {\n return (\n <div className={cn('relative h-full w-full', className)} data-slot=\"html-viewer\">\n {children}\n </div>\n )\n}\n\nexport interface HtmlViewerSurfaceProps {\n children: ReactNode\n surfaceRef?: Ref<HTMLDivElement>\n /** Hidden (kept mounted) while the translation comparison table is showing. */\n hidden?: boolean\n onMouseUp?: () => void\n className?: string\n labels?: Partial<HtmlViewerLabels>\n /** Overrides the root test id (default `parsed-viewer`). */\n testId?: string\n}\n\n/** The scrolling canvas the page sheets stack on. */\nexport function HtmlViewerSurface({\n children,\n surfaceRef,\n hidden,\n onMouseUp,\n className,\n labels,\n testId,\n}: HtmlViewerSurfaceProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div\n ref={surfaceRef}\n className={cn(\n 'flex h-full w-full flex-col items-center overflow-y-auto bg-muted p-4 pb-20',\n hidden && 'hidden',\n className\n )}\n role=\"region\"\n aria-label={l.viewerRegion}\n data-slot=\"html-viewer-surface\"\n // Two-finger gestures belong to the host's text zoom, not to the browser's bitmap zoom.\n style={{ touchAction: 'pan-x pan-y' }}\n data-testid={testIdOr(testId, { testId: 'parsed-viewer' })}\n onMouseUp={onMouseUp}\n >\n {children}\n </div>\n )\n}\n\nexport interface HtmlPageProps {\n /** 1-based page number, null for unpaginated content. */\n pageNumber: number | null\n totalPages: number\n /** False renders a sized placeholder (lazy pages). */\n isRendered: boolean\n /** Placeholder height in px when not rendered. */\n placeholderHeight: number\n /** Text size multiplier: the font size changes and the text reflows inside the page width. */\n zoom?: number\n children?: ReactNode\n labels?: Partial<HtmlViewerLabels>\n}\n\n/** One page sheet: numbered header, content, or a lightweight placeholder while off-screen. */\nexport function HtmlPage({\n pageNumber,\n totalPages,\n isRendered,\n placeholderHeight,\n zoom = 1,\n children,\n labels,\n}: HtmlPageProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div\n id={pageNumber ? `page-${pageNumber}` : undefined}\n data-page-number={pageNumber ?? undefined}\n data-slot=\"html-page\"\n className={cn(\n // shrink-0: a page is a flex item of the scrolling surface and must never be squeezed.\n 'mb-6 w-full max-w-4xl shrink-0',\n isRendered && 'rounded-lg border border-border bg-background p-8'\n )}\n role=\"article\"\n aria-label={pageNumber ? l.pageOfTotal(pageNumber, totalPages) : l.documentContent}\n >\n {isRendered ? (\n <>\n {pageNumber ? (\n <div className=\"mb-4 flex items-center justify-center border-b border-border pb-4\">\n <div className=\"text-sm font-medium text-muted-foreground\">{l.page(pageNumber)}</div>\n </div>\n ) : null}\n <div\n className=\"prose prose-sm max-w-none prose-p:my-0 prose-headings:my-0 [&_img]:max-w-full [&_pre]:overflow-x-auto [&_table]:block [&_table]:max-w-full [&_table]:overflow-x-auto\"\n // The page text inherits this size (1rem at 100%), so this one value scales it and reflows.\n style={zoom === 1 ? undefined : { fontSize: `${zoom}rem` }}\n >\n {children}\n </div>\n </>\n ) : (\n <div\n className=\"flex items-center justify-center rounded-md border border-border bg-muted\"\n style={{ height: placeholderHeight }}\n >\n {pageNumber ? (\n <div className=\"text-sm text-muted-foreground\">{l.page(pageNumber)}</div>\n ) : null}\n </div>\n )}\n </div>\n )\n}\n\n/** Shown when a parsed document has no chunks. */\nexport function HtmlViewerEmpty({ labels }: { labels?: Partial<HtmlViewerLabels> }) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n <div className=\"text-center\">\n <p className=\"mb-2 text-base font-medium\">{l.noContent}</p>\n <p className=\"text-sm\">{l.noContentDescription}</p>\n </div>\n </div>\n )\n}\n\n// ── Passage ─────────────────────────────────────────────────────────────────────────────────\n\nexport type PassageHighlight = 'light' | 'strong'\n\nexport interface HtmlPassageProps {\n /** Passage (chunk) id: the element id, deep-link and scroll target. */\n chunkId?: string\n /** Yellow wash: `strong` = selected/being read, `light` = listed or search hit. */\n highlight?: PassageHighlight\n /** Marks a search hit for e2e (`highlighted-chunk`). */\n isHit?: boolean\n /** Overrides the hit test id (default `highlighted-chunk`). */\n hitTestId?: string\n /** Part of a contiguous selected run; the run is drawn as one block. */\n isSelected?: boolean\n runIsStart?: boolean\n runIsEnd?: boolean\n /** Citation mode: the passage toggles on click. */\n isClickable?: boolean\n /** Click on the passage; `extend` is true when shift was held (range select). */\n onSelect?: (extend: boolean) => void\n /** The passage carries labels; `tagMark` draws them. */\n isTagged?: boolean\n /** Colour of the label currently being walked, when it marks this passage. */\n activeTagColor?: string\n /** Citation run marker, shown once at the first member of a run. */\n runMarker?: ReactNode\n /** Label stripes in the margin (a `LabelMark`): always visible, one menu. */\n tagMark?: ReactNode\n /**\n * The passage's reference mark (a `PassageMark`): quiet text in the margin whose menu carries\n * every passage action. Faint on hover/focus, always faintly visible on touch.\n */\n mark?: ReactNode\n /** The passage text. */\n children: ReactNode\n}\n\n/** One parsed passage: highlight states, label stripes, run marker, reference label, actions. */\nexport const HtmlPassage = memo(function HtmlPassage({\n chunkId,\n highlight,\n isHit,\n hitTestId,\n isSelected,\n runIsStart,\n runIsEnd,\n isClickable,\n onSelect,\n isTagged,\n activeTagColor,\n runMarker,\n tagMark,\n mark,\n children,\n}: HtmlPassageProps) {\n const hasId = !!chunkId\n // A selected run is one block: round only its first top and last bottom.\n const rounding = !isSelected\n ? 'rounded'\n : [runIsStart ? 'rounded-t' : 'rounded-t-none', runIsEnd ? 'rounded-b' : 'rounded-b-none'].join(\n ' '\n )\n return (\n <div\n id={chunkId}\n data-slot=\"html-passage\"\n data-chunk-id={chunkId}\n data-run-start={(isSelected && runIsStart) || undefined}\n data-tagged={isTagged || undefined}\n data-tag-active={activeTagColor ? true : undefined}\n data-testid={isHit ? testIdOr(hitTestId, { testId: 'highlighted-chunk' }) : null}\n onClick={\n hasId && onSelect\n ? (e) => {\n // A mark or its menu is its own target; it must not also select the passage.\n if ((e.target as HTMLElement).closest('[data-slot=\"mark\"], [data-slot=\"mark-menu\"]'))\n return\n onSelect(e.shiftKey)\n }\n : undefined\n }\n className={cn(\n 'group relative block px-1 py-0.5',\n rounding,\n highlight === 'strong'\n ? 'bg-ai-soft text-foreground ring-1 ring-ai-accent/40'\n : highlight === 'light'\n ? 'bg-ai-soft/60 text-foreground hover:bg-ai-soft'\n : hasId && 'hover:bg-muted/50',\n hasId && isClickable && 'cursor-pointer select-none'\n )}\n // The active label washes its passages in its own (dynamic) colour, kept faint.\n style={\n activeTagColor && !highlight\n ? {\n backgroundColor: `${activeTagColor}22`,\n boxShadow: `inset 3px 0 0 0 ${activeTagColor}`,\n }\n : undefined\n }\n >\n {children}\n\n {tagMark && <span className=\"absolute -left-3 top-1.5 z-10\">{tagMark}</span>}\n\n {runMarker ? (\n <span className=\"absolute -top-2.5 left-1 z-10\" data-run-marker>\n {runMarker}\n </span>\n ) : null}\n\n {mark && (\n <span className=\"absolute -top-2.5 right-0 z-10 opacity-0 transition-opacity duration-200 group-hover:opacity-100 group-focus-within:opacity-100 pointer-coarse:opacity-70 [&:has([aria-expanded=true])]:opacity-100\">\n {mark}\n </span>\n )}\n </div>\n )\n})\n\n// ── Steppers ────────────────────────────────────────────────────────────────────────────────\n\nexport interface PassageStepperProps {\n /** 1-based position. */\n position: number\n total: number\n onStep: (delta: number) => void\n /** Test id of the stepper (none by default). */\n testId?: string\n className?: string\n prevLabel: string\n nextLabel: string\n /** Text after the count, e.g. \"cited\". */\n suffix?: string\n}\n\nconst stepButton =\n 'px-1 text-muted-foreground hover:text-foreground pointer-coarse:min-h-11 pointer-coarse:min-w-11'\n\n/** Compact \"3/9 cited\" prev/next stepper overlaid on the document. */\nexport function PassageStepper({\n position,\n total,\n onStep,\n testId,\n className,\n prevLabel,\n nextLabel,\n suffix,\n}: PassageStepperProps) {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background/95 px-1.5 py-0.5',\n className\n )}\n data-slot=\"passage-stepper\"\n data-testid={testId}\n >\n <button\n type=\"button\"\n onClick={() => onStep(-1)}\n aria-label={prevLabel}\n className={stepButton}\n >\n ‹\n </button>\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {Math.min(position, total)}/{total}\n {suffix ? ` ${suffix}` : ''}\n </span>\n <button type=\"button\" onClick={() => onStep(1)} aria-label={nextLabel} className={stepButton}>\n ›\n </button>\n </span>\n )\n}\n\n/** Overlay placement for the cited-passages stepper (top centre of the viewer). */\nexport function CitedRunNav({\n labels,\n testId,\n ...props\n}: Omit<PassageStepperProps, 'prevLabel' | 'nextLabel' | 'testId' | 'suffix'> & {\n labels?: Partial<HtmlViewerLabels>\n /** Overrides the stepper test id (default `note-run-nav`). */\n testId?: string\n}) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n return (\n <div className=\"absolute left-1/2 top-2 z-20 -translate-x-1/2\" data-slot=\"cited-run-nav\">\n <PassageStepper\n {...props}\n suffix={l.citedSuffix}\n prevLabel={l.previousCited}\n nextLabel={l.nextCited}\n testId={testIdOr(testId, { testId: 'note-run-nav' })}\n />\n </div>\n )\n}\n\n// ── Label bar ───────────────────────────────────────────────────────────────────────────────\n\nexport interface DocTagChipView {\n id: string\n name: string\n /** Fill colour (dynamic, per label). */\n color: string\n /** Passages the label marks; 0 = applies to the whole document. */\n passageCount: number\n hasNote: boolean\n title: string\n}\n\nexport interface DocTagBarProps {\n chips: DocTagChipView[]\n /** Document visibility mark on the far right; null/undefined omits it. */\n visibility?: 'shared' | 'private' | null\n /** Passage stepping over the active label's passages (parsed view only). */\n step?: { position: number; total: number; onStep: (delta: number) => void }\n /** The label currently washing its passages (parsed view only). */\n activeId?: string | null\n /** When given, chips are toggles: pick a label to mark its passages, pick it again to clear. */\n onSelect?: (id: string | null) => void\n labels?: Partial<HtmlViewerLabels>\n testIds?: Partial<DocTagBarTestIds>\n}\n\nexport interface DocTagBarTestIds {\n root: string\n nav: string\n visibility: string\n /** Replaces the whole `doc-tag-chip-<id>` id. */\n chip: (id: string) => string\n}\n\n/**\n * The document's labels along the top of a viewer: chips (toggles when `onSelect` is given, else\n * read-only marks), optional passage stepper for the active label, and the shared/private mark.\n * Draws nothing when it has nothing to say.\n */\nexport function DocTagBar({\n chips,\n visibility,\n step,\n activeId = null,\n onSelect,\n labels,\n testIds,\n}: DocTagBarProps) {\n const l = { ...DEFAULT_HTML_VIEWER_LABELS, ...labels }\n if (chips.length === 0 && !visibility) return null\n return (\n <div\n className=\"absolute left-2 right-2 top-2 z-20 flex flex-wrap items-center gap-1\"\n data-slot=\"doc-tag-bar\"\n data-testid={testIdOr(testIds?.root, { testId: 'doc-tag-bar' })}\n >\n {chips.map((c) => {\n const isActive = c.id === activeId\n const content = (\n <>\n <Tags className=\"size-3 shrink-0\" />\n {c.name}\n {c.passageCount > 0 && (\n <span className=\"tabular-nums opacity-90\">{c.passageCount}</span>\n )}\n {c.hasNote && <StickyNote className=\"size-3 opacity-90\" />}\n </>\n )\n const chipClass =\n 'inline-flex items-center gap-1.5 rounded-full border border-transparent px-2 py-0.5 text-xs text-white'\n return onSelect ? (\n <button\n key={c.id}\n type=\"button\"\n // Picking the active chip again clears it: the way back to the plain document.\n onClick={() => onSelect(isActive ? null : c.id)}\n aria-pressed={isActive}\n title={c.title}\n data-testid={testIdOr(testIds?.chip?.(c.id), { testId: `doc-tag-chip-${c.id}` })}\n data-active={isActive || undefined}\n className={cn(chipClass, 'cursor-pointer', !isActive && 'opacity-70 hover:opacity-100')}\n style={{ backgroundColor: c.color }}\n >\n {content}\n </button>\n ) : (\n <span\n key={c.id}\n title={c.title}\n data-testid={testIdOr(testIds?.chip?.(c.id), { testId: `doc-tag-chip-${c.id}` })}\n className={chipClass}\n style={{ backgroundColor: c.color }}\n >\n {content}\n </span>\n )\n })}\n\n {step && step.total > 0 && (\n <PassageStepper\n className=\"ml-1\"\n position={step.position}\n total={step.total}\n onStep={step.onStep}\n testId={testIdOr(testIds?.nav, { testId: 'doc-tag-nav' })}\n prevLabel={l.previousLabelPassage}\n nextLabel={l.nextLabelPassage}\n />\n )}\n\n {visibility && (\n <span\n title={visibility === 'shared' ? l.sharedWithMembers : l.privateToYou}\n data-testid={testIdOr(testIds?.visibility, { testId: 'doc-visibility-chip' })}\n className={cn(\n 'ml-auto inline-flex shrink-0 items-center gap-1.5 rounded-full px-2 py-0.5 text-xs',\n visibility === 'shared'\n ? 'bg-accent text-accent-foreground'\n : 'bg-muted text-muted-foreground'\n )}\n >\n <Share2 className=\"size-3 shrink-0\" />\n {visibility === 'shared' ? l.shared : l.private}\n </span>\n )}\n </div>\n )\n}\n","/**\n * A document's labels as the viewer's label bar shows them: one entry per doctag with the passages\n * it marks in THIS document, and the bar itself (`DocumentLabelBar`). Chips mark which labels the\n * document carries and, in the text view (`onSelect`), toggle the active label; the stepper walks\n * the active label's passages (the PDF mounts the bar read-only, without either).\n */\n\nimport { useMemo } from 'react'\nimport type { components } from '@arbidocs/client'\nimport { getEntityColor } from '@arbidocs/react/ui'\nimport { DocTagBar, type DocTagChipView } from './HtmlViewerParts'\n\ntype Tag = Pick<components['schemas']['TagResponse'], 'external_id' | 'name'>\ntype ScopedTag = Pick<\n components['schemas']['TagResponse'],\n 'kind' | 'doctag_count' | 'facttag_count'\n>\n\n/**\n * A label of the documents' vocabulary: a plain label (not an issue, entity or saved search) used\n * on documents, or not used anywhere yet (a label used only on facts belongs to the facts').\n */\nexport function isDocumentLabel(tag: ScopedTag): boolean {\n if (tag.kind !== 'label') return false\n const onDocs = (tag.doctag_count ?? 0) > 0\n const onFacts = (tag.facttag_count ?? 0) > 0\n return onDocs || !onFacts\n}\ntype DocTag = Pick<components['schemas']['DocTagResponse'], 'tag_ext_id' | 'note' | 'citations'>\n\nexport interface DocTagSummary {\n tagExtId: string\n name: string\n /** Passages in THIS document carrying the label. */\n chunkIds: string[]\n hasNote: boolean\n}\n\n/** One entry per doctag on the document, in workspace-tag order. */\nexport function summariseDocTags(\n doctags: readonly DocTag[],\n workspaceTags: readonly Tag[]\n): DocTagSummary[] {\n const byTag = new Map(doctags.map((dt) => [dt.tag_ext_id, dt]))\n return workspaceTags\n .filter((t) => byTag.has(t.external_id))\n .map((t) => {\n const dt = byTag.get(t.external_id)!\n return {\n tagExtId: t.external_id,\n name: t.name,\n chunkIds: (dt.citations ?? []).flatMap((d) => (d.chunks ?? []).map((c) => c.chunk_id)),\n hasNote: !!dt.note,\n }\n })\n}\n\nexport interface DocumentLabelBarProps {\n summaries: DocTagSummary[]\n activeTagExtId?: string | null\n /** Position within the active label's passages, 0-based. */\n cursor?: number\n /** When given, chips toggle the active label (text view only). */\n onSelect?: (tagExtId: string | null) => void\n onStep?: (delta: number) => void\n}\n\nexport function DocumentLabelBar({\n summaries,\n activeTagExtId = null,\n cursor = 0,\n onSelect,\n onStep,\n}: DocumentLabelBarProps) {\n const chips = useMemo<DocTagChipView[]>(\n () =>\n summaries.map((s) => {\n const marked = s.chunkIds.length\n return {\n id: s.tagExtId,\n name: s.name,\n color: getEntityColor(s.tagExtId, 'medium'),\n passageCount: marked,\n hasNote: s.hasNote,\n title: marked\n ? `${s.name} — ${marked} passage${marked === 1 ? '' : 's'}${s.hasNote ? ', annotated' : ''}`\n : `${s.name} — applies to the document, no passages marked`,\n }\n }),\n [summaries]\n )\n const active = summaries.find((s) => s.tagExtId === activeTagExtId)\n return (\n <DocTagBar\n chips={chips}\n activeId={activeTagExtId}\n onSelect={onSelect}\n step={\n onStep && active && active.chunkIds.length > 0\n ? { position: cursor + 1, total: active.chunkIds.length, onStep }\n : undefined\n }\n />\n )\n}\n","import { useRef, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { ArrowLeftRight, Download, Eye, EyeOff, X } from 'lucide-react'\nimport {\n Button,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport { DEFAULT_VIEWER_LABELS, type ViewerLabels } from './ViewerChrome'\n\n// ── Tabs ────────────────────────────────────────────────────────────────────────────────────\n\nexport interface ViewerTab {\n id: string\n icon: ReactNode\n /** Tooltip and accessible name. */\n tooltip: string\n /** Visible text next to the icon, for tabs whose icon alone is not self-explanatory. */\n label?: string\n /** Overrides the tab test id (default `<id>-tab`). */\n testId?: string\n}\n\nexport interface ViewerTabBarProps {\n tabs: ViewerTab[]\n activeId: string\n onChange: (id: string) => void\n className?: string\n}\n\n/** Underline tab strip for the viewer's formats (PDF, DOCX, Source, Versions, HTML...). */\nexport function ViewerTabBar({ tabs, activeId, onChange, className }: ViewerTabBarProps) {\n return (\n <TooltipProvider>\n <div className={cn('flex shrink-0 items-center', className)} role=\"group\">\n {tabs.map((tab) => {\n const isActive = tab.id === activeId\n return (\n <Tooltip key={tab.id}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => onChange(tab.id)}\n aria-label={tab.tooltip}\n aria-pressed={isActive}\n data-testid={testIdOr(tab.testId, { testId: `${tab.id}-tab` })}\n className={cn(\n 'shrink-0 border-b-2 px-3 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n tab.label && 'inline-flex items-center gap-1.5 text-sm',\n isActive\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:border-border hover:text-foreground'\n )}\n >\n {tab.icon}\n {tab.label && <span>{tab.label}</span>}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">{tab.tooltip}</TooltipContent>\n </Tooltip>\n )\n })}\n </div>\n </TooltipProvider>\n )\n}\n\n// ── Page counter ────────────────────────────────────────────────────────────────────────────\n\nexport interface ViewerPageCounterProps {\n page: number\n total: number\n /** Called with a valid 1..total page typed into the counter. */\n onGoTo: (page: number) => void\n labels?: Partial<ViewerLabels>\n}\n\n/** \"3 / 12\": click the number to type a page; Enter or blur commits, Escape cancels. */\nexport function ViewerPageCounter({ page, total, onGoTo, labels }: ViewerPageCounterProps) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n const [isEditing, setIsEditing] = useState(false)\n const [input, setInput] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n if (total <= 0) return null\n\n const commit = () => {\n const n = parseInt(input, 10)\n if (!isNaN(n) && n >= 1 && n <= total) onGoTo(n)\n setIsEditing(false)\n }\n\n return (\n <div className=\"flex shrink-0 items-center gap-1 rounded-md bg-muted px-2 py-1\">\n {isEditing ? (\n <input\n ref={inputRef}\n autoFocus\n type=\"text\"\n value={input}\n onFocus={(e) => e.currentTarget.select()}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commit()\n else if (e.key === 'Escape') setIsEditing(false)\n }}\n onBlur={commit}\n className=\"w-8 rounded border border-border bg-background px-1 py-0.5 text-center text-sm font-medium focus:outline-none\"\n aria-label={l.pageInput}\n />\n ) : (\n <button\n type=\"button\"\n onClick={() => {\n setInput(String(page))\n setIsEditing(true)\n }}\n className=\"min-w-[2rem] cursor-text rounded border border-border bg-background px-1 py-0.5 text-sm font-medium transition-colors hover:bg-muted pointer-coarse:min-h-11 pointer-coarse:min-w-11\"\n title={l.pageOfTitle}\n aria-label={l.pageOf(page, total)}\n >\n {page}\n </button>\n )}\n <span className=\"text-sm text-muted-foreground\">/ {total}</span>\n </div>\n )\n}\n\n// ── Fallbacks ───────────────────────────────────────────────────────────────────────────────\n\n/** A format that cannot be previewed in the browser: offer the original instead. */\nexport function ViewerPreviewUnavailable({\n extension,\n onDownload,\n labels,\n}: {\n extension: string\n onDownload: () => void\n labels?: Partial<ViewerLabels>\n}) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-4 p-8 text-center\">\n <div className=\"text-4xl text-muted-foreground\" aria-hidden>\n 📄\n </div>\n <div>\n <p className=\"mb-1 font-medium\">{l.previewUnavailable}</p>\n <p className=\"mb-4 text-sm text-muted-foreground\">{l.cannotPreview(extension)}</p>\n <Button variant=\"outline\" size=\"sm\" onClick={onDownload}>\n <Download className=\"mr-2 size-4\" />\n {l.downloadToOpen}\n </Button>\n </div>\n </div>\n )\n}\n\n/** The file failed to load: say so and offer the download instead. */\nexport function ViewerLoadError({\n message,\n onDownload,\n labels,\n testId,\n}: {\n message: string\n onDownload: () => void\n labels?: Partial<ViewerLabels>\n /** Overrides the root test id (default `pdf-load-error`). */\n testId?: string\n}) {\n const l = { ...DEFAULT_VIEWER_LABELS, ...labels }\n return (\n <div\n className=\"flex h-full flex-col items-center justify-center gap-3 p-8 text-center\"\n data-testid={testIdOr(testId, { testId: 'pdf-load-error' })}\n >\n <p className=\"text-sm text-muted-foreground\">{message}</p>\n <Button variant=\"outline\" size=\"sm\" onClick={onDownload}>\n <Download className=\"mr-2 size-4\" />\n {l.download}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Check, ChevronRight, Loader2, StickyNote, X } from 'lucide-react'\nimport { Button, Textarea, cn } from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../chat/test-id'\n\n/** Every fixed string of the panel. Pass a partial `labels` to translate or reword. */\nexport interface TagPassagePanelLabels {\n title: string\n page: (n: number) => string\n close: string\n empty: string\n viewTagged: string\n notePlaceholder: string\n cancel: string\n save: string\n addNote: string\n createField: string\n}\n\nexport const DEFAULT_TAG_PASSAGE_PANEL_LABELS: TagPassagePanelLabels = {\n title: 'Tag Passage',\n page: (n) => `Page ${n}`,\n close: 'Close',\n empty: 'No tags available. Create one to start tagging passages.',\n viewTagged: 'View all passages with this tag',\n notePlaceholder: 'Add a note for this tag...',\n cancel: 'Cancel',\n save: 'Save',\n addNote: 'Add note...',\n createField: '+ Create new field',\n}\n\nexport interface TagPassagePanelTestIds {\n root: string\n close: string\n viewTagged: string\n /** Prefix of each label's row, `<prefix>-<tag id>`. */\n row: string\n}\n\nexport interface PassageTagRowView {\n id: string\n /** Fill colour of the checkbox (dynamic, per label). */\n color: string\n isApplied: boolean\n /** The tag badge (host renders its entity). */\n badge: ReactNode\n /** The saved note on this passage's application of the tag. */\n note?: string | null\n}\n\nexport interface PassageTagGroupView {\n id: string\n title: string\n tags: PassageTagRowView[]\n}\n\nexport interface TagPassagePanelProps {\n pageNumber?: number\n /** Truncated passage text shown under the header. */\n preview: string\n groups: PassageTagGroupView[]\n /** No tags exist yet (shows the empty state). */\n isEmpty: boolean\n isBusy: boolean\n /** The tag whose note is open for editing, and its draft. */\n editingNoteTagId: string | null\n noteValue: string\n onNoteChange: (value: string) => void\n onToggle: (tagId: string) => void\n onViewTagged?: (tagId: string) => void\n onStartNote: (tagId: string) => void\n onSaveNote: (tagId: string) => void\n onCancelNote: () => void\n /** Start a new label or field. Omitted: not offered. */\n onCreate?: () => void\n onClose: () => void\n labels?: Partial<TagPassagePanelLabels>\n /** Overrides for the test ids (defaults keep the current ids). */\n testIds?: Partial<TagPassagePanelTestIds>\n}\n\n/** Side panel to apply labels (and per-passage notes) to one passage of a document. */\nexport function TagPassagePanel({\n pageNumber,\n preview,\n groups,\n isEmpty,\n isBusy,\n editingNoteTagId,\n noteValue,\n onNoteChange,\n onToggle,\n onViewTagged,\n onStartNote,\n onSaveNote,\n onCancelNote,\n onCreate,\n onClose,\n labels,\n testIds,\n}: TagPassagePanelProps) {\n const l = { ...DEFAULT_TAG_PASSAGE_PANEL_LABELS, ...labels }\n return (\n <div\n className=\"fixed right-0 top-0 z-50 flex h-full w-80 max-w-full flex-col border-l border-border bg-background shadow-lg\"\n data-slot=\"tag-passage-panel\"\n data-testid={testIdOr(testIds?.root, { testId: 'chunk-tag-panel' })}\n >\n <div className=\"flex items-center justify-between border-b border-border p-4\">\n <div>\n <h3 className=\"text-sm font-semibold\">{l.title}</h3>\n {pageNumber && (\n <span className=\"text-sm text-muted-foreground\">{l.page(pageNumber)}</span>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n aria-label={l.close}\n className=\"pointer-coarse:size-11\"\n data-testid={testIdOr(testIds?.close, { testId: 'chunk-tag-panel-close' })}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n\n <div className=\"border-b border-border bg-muted p-4\">\n <p className=\"line-clamp-4 text-sm text-muted-foreground\">{preview}</p>\n </div>\n\n <div className=\"flex-1 overflow-y-auto\">\n {isEmpty ? (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">{l.empty}</div>\n ) : (\n <div className=\"py-2\">\n {groups.map((group) => (\n <div key={group.id} className=\"mb-2\">\n <div className=\"bg-muted px-4 py-2 text-sm font-medium uppercase tracking-wider text-muted-foreground\">\n {group.title}\n </div>\n {group.tags.map((tag) => {\n const hasNote = !!tag.note\n const isEditing = editingNoteTagId === tag.id\n return (\n <div\n key={tag.id}\n className=\"border-b border-border last:border-b-0\"\n data-testid={prefixedTestId(testIds?.row, tag.id, {\n testId: `chunk-tag-row-${tag.id}`,\n })}\n >\n <div className=\"flex items-center transition-colors hover:bg-muted\">\n <button\n onClick={() => onToggle(tag.id)}\n disabled={isBusy}\n className=\"flex flex-1 items-center gap-3 px-4 py-3 disabled:opacity-50 pointer-coarse:min-h-11\"\n >\n <div\n className=\"flex size-5 shrink-0 items-center justify-center rounded border-2\"\n style={{\n borderColor: tag.color,\n backgroundColor: tag.isApplied ? tag.color : 'transparent',\n }}\n >\n {tag.isApplied && (\n <Check className=\"size-3 text-white\" strokeWidth={3} />\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {tag.badge}\n {hasNote && !isEditing && (\n <StickyNote className=\"size-3.5 text-muted-foreground\" />\n )}\n </div>\n {isBusy && <Loader2 className=\"size-4 shrink-0 animate-spin\" />}\n </button>\n\n {tag.isApplied && onViewTagged && (\n <button\n onClick={() => onViewTagged(tag.id)}\n className=\"mr-3 shrink-0 rounded p-1 hover:bg-muted pointer-coarse:min-h-11 pointer-coarse:min-w-11\"\n title={l.viewTagged}\n data-testid={testIdOr(testIds?.viewTagged, {\n testId: 'view-tagged-chunks-button',\n })}\n >\n <ChevronRight className=\"size-4 text-muted-foreground\" />\n </button>\n )}\n </div>\n\n {tag.isApplied && (\n <div className=\"px-4 pb-3\">\n {isEditing ? (\n <div className=\"space-y-2\">\n <Textarea\n value={noteValue}\n onChange={(e) => onNoteChange(e.target.value)}\n placeholder={l.notePlaceholder}\n className=\"min-h-[60px] text-sm\"\n autoFocus\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={onCancelNote}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => onSaveNote(tag.id)}\n disabled={isBusy}\n >\n {l.save}\n </Button>\n </div>\n </div>\n ) : (\n <button\n onClick={() => onStartNote(tag.id)}\n className={cn(\n 'w-full rounded-md bg-muted px-2 py-1.5 text-left text-sm pointer-coarse:min-h-11',\n hasNote ? 'text-foreground' : 'text-muted-foreground'\n )}\n >\n {tag.note || l.addNote}\n </button>\n )}\n </div>\n )}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {onCreate && (\n <div className=\"border-t border-border p-4\">\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\" onClick={onCreate}>\n {l.createField}\n </Button>\n </div>\n )}\n </div>\n )\n}\n","import { Loader2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface FilesPageTitleProps {\n /** Page name (default \"Files\"). */\n label?: string\n /** Number of files after filtering. */\n count: number\n /** Filters are narrowing the list: the count is \"of the filtered set\". */\n isFiltered?: boolean\n /** The workspace is still indexing files. */\n isProcessing?: boolean\n /** Makes the title a button (e.g. back to the last file view from Smart Search). */\n onClick?: () => void\n /** Word shown after the count while filtered (default \"filtered\"). */\n filteredLabel?: string\n className?: string\n /** Overrides the title test id (default `documents-tab`). */\n testId?: string\n /** Overrides the count test id (default `tab-count`). */\n countTestId?: string\n}\n\n/**\n * The Files page title: \"Files\" with the file count as a quiet pill. Replaces the old single\n * header tab; it is the page's heading, so the one primary action (Add) can sit opposite it.\n */\nexport function FilesPageTitle({\n label = 'Files',\n count,\n isFiltered,\n isProcessing,\n onClick,\n filteredLabel = 'filtered',\n className,\n testId,\n countTestId,\n}: FilesPageTitleProps) {\n const body = (\n <>\n <span>{label}</span>\n <span\n data-testid={testIdOr(countTestId, { testId: 'tab-count' })}\n className=\"inline-flex h-6 min-w-6 items-center justify-center rounded-full bg-muted px-2 text-xs font-medium tabular-nums text-muted-foreground\"\n >\n {count}\n </span>\n {isFiltered && (\n <span className=\"text-xs font-normal text-muted-foreground\">{filteredLabel}</span>\n )}\n {isProcessing && (\n <Loader2 className=\"size-3.5 animate-spin text-muted-foreground\" aria-hidden />\n )}\n </>\n )\n const classes = cn(\n 'inline-flex min-w-0 items-center gap-2 text-xl font-semibold leading-8 text-foreground',\n className\n )\n return (\n <h1 data-slot=\"files-page-title\" className=\"m-0 min-w-0 font-semibold\">\n {onClick ? (\n <button\n type=\"button\"\n onClick={onClick}\n data-testid={testIdOr(testId, { testId: 'documents-tab' })}\n className={cn(\n classes,\n 'rounded-md pointer-coarse:-mx-2 pointer-coarse:min-h-11 pointer-coarse:px-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n )}\n >\n {body}\n </button>\n ) : (\n <span data-testid={testIdOr(testId, { testId: 'documents-tab' })} className={classes}>\n {body}\n </span>\n )}\n </h1>\n )\n}\n","import type { ComponentProps, ReactNode } from 'react'\nimport { ExternalLink, Loader2, RefreshCw, Settings, Square, Unplug } from 'lucide-react'\nimport { Button, Progress, cn } from '@arbidocs/react/ui'\n\n/** Every fixed string of the import parts. Pass a partial `labels` to translate or reword. */\nexport interface ImportLabels {\n stop: string\n stopping: string\n importNow: string\n settings: string\n importingOf: (processed: number, total: number, noun: string) => string\n importing: (processed: number, noun: string) => string\n foldersSelected: (count: number) => string\n folders: (names: string) => string\n moreFolders: (count: number) => string\n connect: string\n reconnect: string\n reconnecting: string\n disconnect: string\n disconnecting: string\n /** Shown under a family that needs re-consent; `reconnect` is rendered bold inside it. */\n reconnectHint: (reconnectLabel: ReactNode) => ReactNode\n}\n\nexport const DEFAULT_IMPORT_LABELS: ImportLabels = {\n stop: 'Stop',\n stopping: 'Stopping…',\n importNow: 'Import now',\n settings: 'Settings',\n importingOf: (processed, total, noun) => `Importing ${processed} of ${total} ${noun}…`,\n importing: (processed, noun) => `Importing ${processed} ${noun}…`,\n foldersSelected: (count) => `Folders: ${count} selected`,\n folders: (names) => `Folders: ${names}`,\n moreFolders: (count) => ` +${count} more`,\n connect: 'Connect',\n reconnect: 'Reconnect',\n reconnecting: 'Reconnecting…',\n disconnect: 'Disconnect',\n disconnecting: 'Disconnecting…',\n reconnectHint: (reconnectLabel) => (\n <>\n Couldn’t reach this account. Click {reconnectLabel} — if it keeps happening, log out and back\n in to refresh the connection.\n </>\n ),\n}\n\n/** Divided list of provider rows inside a family section. */\nexport function ImportList({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div data-slot=\"import-list\" className={cn('divide-y divide-border', className)} {...props} />\n )\n}\n\nexport interface ImportRowProps {\n /** Brand mark, already sized by the caller. */\n logo: ReactNode\n name: ReactNode\n /** Right-aligned actions on the top line. */\n actions?: ReactNode\n /** Detail rows below the top line (summary, progress, handoff, dialogs). */\n children?: ReactNode\n testId?: string\n className?: string\n}\n\n/** One provider row: logo + name + actions, with detail content beneath. */\nexport function ImportRow({ logo, name, actions, children, testId, className }: ImportRowProps) {\n return (\n <div data-slot=\"import-row\" data-testid={testId} className={cn('py-3', className)}>\n <div className=\"flex items-center gap-2.5\">\n {logo}\n <div className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\">{name}</div>\n {actions}\n </div>\n {children}\n </div>\n )\n}\n\n/** Muted explanatory text aligned under the provider name. */\nexport function ImportHint({ className, ...props }: ComponentProps<'p'>) {\n return (\n <p\n data-slot=\"import-hint\"\n className={cn('ml-[34px] mt-1 text-xs text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\n/** Compact CTA used on provider rows (Reconnect, Enable...). */\nexport function ImportActionButton({\n className,\n children,\n variant = 'outline',\n ...props\n}: Omit<ComponentProps<typeof Button>, 'size'>) {\n return (\n <Button\n variant={variant}\n size=\"sm\"\n className={cn('ml-auto h-7 shrink-0 gap-1.5 pointer-coarse:h-11', className)}\n data-slot=\"import-action\"\n {...props}\n >\n <ExternalLink className=\"h-3.5 w-3.5\" />\n {children}\n </Button>\n )\n}\n\nexport interface ImportRunActionsProps {\n isRunning: boolean\n isStopping?: boolean\n /** A sync request is in flight. */\n isBusy?: boolean\n importDisabled?: boolean\n importTitle?: string\n onImport: () => void\n onStop: () => void\n onSettings: () => void\n settingsLabel: string\n importButton?: { testId?: string }\n settingsButton?: { testId?: string }\n stopButton?: { testId?: string }\n labels?: Partial<ImportLabels>\n}\n\n/** \"Import now\" + settings gear, or \"Stop\" while a run is active. */\nexport function ImportRunActions({\n isRunning,\n isStopping,\n isBusy,\n importDisabled,\n importTitle,\n onImport,\n onStop,\n onSettings,\n settingsLabel,\n importButton,\n settingsButton,\n stopButton,\n labels,\n}: ImportRunActionsProps) {\n const l = { ...DEFAULT_IMPORT_LABELS, ...labels }\n if (isRunning) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto h-7 gap-1.5 pointer-coarse:h-11\"\n onClick={onStop}\n disabled={isStopping}\n data-testid={stopButton?.testId}\n >\n <Square className=\"h-3 w-3\" />\n {isStopping ? l.stopping : l.stop}\n </Button>\n )\n }\n return (\n <div className=\"ml-auto flex shrink-0 items-center gap-1.5\">\n <Button\n variant=\"default\"\n size=\"sm\"\n className=\"h-7 gap-1.5 pointer-coarse:h-11\"\n onClick={onImport}\n disabled={isBusy || importDisabled}\n data-testid={importButton?.testId}\n title={importTitle}\n >\n {isBusy ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <RefreshCw className=\"h-3.5 w-3.5\" />\n )}\n {l.importNow}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 gap-1.5 px-2 text-muted-foreground pointer-coarse:h-11\"\n onClick={onSettings}\n disabled={isBusy}\n aria-label={settingsLabel}\n data-testid={settingsButton?.testId}\n >\n <Settings className=\"h-4 w-4\" />\n {l.settings}\n </Button>\n </div>\n )\n}\n\nexport interface ImportSummaryProps {\n /** Left column, under the name. */\n children: ReactNode\n /** Right column (pending count, folders). */\n aside?: ReactNode\n className?: string\n}\n\n/** Two-column detail block under a provider row. */\nexport function ImportSummary({ children, aside, className }: ImportSummaryProps) {\n return (\n <div\n data-slot=\"import-summary\"\n className={cn('mt-2.5 flex items-start justify-between gap-3', className)}\n >\n <div className=\"ml-[34px] text-sm leading-snug text-muted-foreground\">{children}</div>\n {aside}\n </div>\n )\n}\n\n/** Right-aligned muted aside of an `ImportSummary`. */\nexport function ImportAside({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"import-aside\"\n className={cn(\n 'min-w-0 max-w-[55%] text-right text-sm leading-snug text-muted-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nexport interface ImportProgressProps {\n processed: number\n total?: number | null\n /** Plural noun, e.g. \"emails\". */\n noun: string\n testId?: string\n labels?: Partial<ImportLabels>\n}\n\n/** Live run progress: bar when the total is known, plus a running count. */\nexport function ImportProgress({ processed, total, noun, testId, labels }: ImportProgressProps) {\n const l = { ...DEFAULT_IMPORT_LABELS, ...labels }\n const known = total != null && total > 0\n return (\n <div data-slot=\"import-progress\" className=\"mt-2 space-y-1\" data-testid={testId}>\n {known && (\n <Progress value={Math.min(100, Math.round((processed / total) * 100))} className=\"h-1.5\" />\n )}\n <div className=\"text-right text-sm leading-snug text-muted-foreground\">\n {known ? l.importingOf(processed, total, noun) : l.importing(processed, noun)}\n </div>\n </div>\n )\n}\n\nconst FOLDER_SUMMARY_LIMIT = 3\n\nexport interface FolderSummaryProps {\n /** One entry per selected folder; undefined when its name is not known (counted, never shown). */\n names: (string | undefined)[]\n testId?: string\n labels?: Partial<ImportLabels>\n}\n\n/** The first few synced folder names, then \"+N more\" (all in the tooltip). */\nexport function FolderSummary({ names, testId, labels }: FolderSummaryProps) {\n const l = { ...DEFAULT_IMPORT_LABELS, ...labels }\n const known = names.filter((n): n is string => !!n)\n if (known.length === 0) {\n return <div data-testid={testId}>{l.foldersSelected(names.length)}</div>\n }\n const shown = known.slice(0, FOLDER_SUMMARY_LIMIT)\n const hidden = names.length - shown.length\n return (\n <div className=\"break-words\" title={known.join(', ')} data-testid={testId}>\n {l.folders(shown.join(', '))}\n {hidden > 0 && <span className=\"whitespace-nowrap\">{l.moreFolders(hidden)}</span>}\n </div>\n )\n}\n\nexport type ImportFamilyActionKind = 'connect' | 'reconnect' | 'disconnect'\n\nexport interface ImportFamilySectionProps {\n label: string\n /** Connected account shown next to the label. */\n identity?: string | null\n /** The single family action: Connect when disconnected, Reconnect when re-consent is due. */\n action: ImportFamilyActionKind\n isActionPending?: boolean\n onAction: () => void\n testId?: string\n actionButton?: { testId?: string }\n children: ReactNode\n labels?: Partial<ImportLabels>\n}\n\n/** A provider family (Microsoft / Google): header with one action, then its rows. */\nexport function ImportFamilySection({\n label,\n identity,\n action,\n isActionPending,\n onAction,\n testId,\n actionButton,\n children,\n labels,\n}: ImportFamilySectionProps) {\n const l = { ...DEFAULT_IMPORT_LABELS, ...labels }\n const [idle, pending] = {\n connect: [l.connect, l.connect],\n reconnect: [l.reconnect, l.reconnecting],\n disconnect: [l.disconnect, l.disconnecting],\n }[action]\n const Icon = action === 'disconnect' ? Unplug : ExternalLink\n const isPending = action !== 'connect' && !!isActionPending\n return (\n <section data-slot=\"import-family\" data-testid={testId}>\n <div className=\"mb-1 flex items-center gap-2\">\n <h3 className=\"min-w-0 truncate text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n {label}\n {identity && (\n <span className=\"ml-1.5 text-sm font-normal normal-case tracking-normal\">\n ({identity})\n </span>\n )}\n </h3>\n <Button\n variant={action === 'disconnect' ? 'ghost' : 'outline'}\n size=\"sm\"\n className={cn(\n 'h-6 shrink-0 gap-1 px-2 text-xs pointer-coarse:h-11',\n action === 'disconnect' && 'text-muted-foreground [&:hover]:text-destructive'\n )}\n onClick={onAction}\n disabled={isPending}\n data-testid={actionButton?.testId}\n >\n <Icon className=\"h-3 w-3\" />\n {isPending ? pending : idle}\n </Button>\n </div>\n {action === 'reconnect' && (\n <p className=\"mb-1 text-xs text-muted-foreground\">\n {l.reconnectHint(<span className=\"font-medium\">{l.reconnect}</span>)}\n </p>\n )}\n {children}\n </section>\n )\n}\n\n/** Stack of family sections. */\nexport function ImportPanel({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"import-panel\" className={cn('space-y-5', className)} {...props} />\n}\n","import { useState } from 'react'\nimport type { ReactNode } from 'react'\nimport {\n AlertCircle,\n CheckCircle,\n ChevronRight,\n CircleSlash,\n Hourglass,\n LoaderCircle,\n} from 'lucide-react'\nimport { Badge, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A distinct glyph + colour per processing status (active spins while busy). */\nconst STATUS_ICONS = {\n active: { Icon: LoaderCircle, color: 'text-blue-text', spin: true },\n queued: { Icon: Hourglass, color: 'text-yellow-text', spin: false },\n failed: { Icon: AlertCircle, color: 'text-red-text', spin: false },\n skipped: { Icon: CircleSlash, color: 'text-muted-foreground', spin: false },\n completed: { Icon: CheckCircle, color: 'text-green-text', spin: false },\n} as const\n\nexport type TaskSectionStatus = keyof typeof STATUS_ICONS\n\nexport interface TaskSectionProps {\n title: string\n count: number\n status: TaskSectionStatus\n /** Explanation of what the status means, shown on the heading tooltip. */\n tooltip?: string\n headerAction?: ReactNode\n defaultExpanded?: boolean\n /** The task list; rendered only while the section has items and is expanded. */\n children?: ReactNode\n testIds?: Partial<{ root: string; toggle: string }>\n}\n\n/**\n * Collapsible processing-status section. Empty sections show a muted, inert heading;\n * only sections with items expand.\n */\nexport function TaskSection({\n title,\n count,\n status,\n tooltip,\n headerAction,\n defaultExpanded = true,\n children,\n testIds,\n}: TaskSectionProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n const hasItems = count > 0\n const { Icon, color, spin } = STATUS_ICONS[status]\n\n const headingInner = (\n <div className=\"flex items-center gap-2\">\n <Icon className={cn('h-4 w-4', color, hasItems ? spin && 'animate-spin' : 'opacity-50')} />\n <span className=\"whitespace-nowrap\">{title}</span>\n <Badge variant=\"outline\" className=\"badge-count ml-2 border-border\">\n {count}\n </Badge>\n </div>\n )\n\n const heading = tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{headingInner}</TooltipTrigger>\n <TooltipContent className=\"max-w-xs\">{tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n headingInner\n )\n\n return (\n <div data-slot=\"task-section\" data-testid={testIdOr(testIds?.root, { testId: 'task-section' })}>\n <div className=\"mb-3 flex items-center justify-between\">\n {hasItems ? (\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n className=\"flex cursor-pointer items-center gap-2 text-left font-medium transition-colors hover:text-primary pointer-coarse:min-h-11\"\n data-testid={testIdOr(testIds?.toggle, { testId: 'task-section-toggle' })}\n >\n <ChevronRight\n className={cn('h-4 w-4 transition-transform', isExpanded && 'rotate-90')}\n />\n {heading}\n </button>\n ) : (\n <div className=\"flex items-center gap-2 font-medium text-muted-foreground\">\n <ChevronRight className=\"h-4 w-4 flex-shrink-0\" />\n {heading}\n </div>\n )}\n {headerAction}\n </div>\n {hasItems && isExpanded && children}\n </div>\n )\n}\n","import { SquareCheckBig } from 'lucide-react'\nimport { Button, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { LabelPickerList, type LabelOption } from './LabelMultiSelect'\n\n/** Shared bulk label control: mixed labels apply to all; checked labels remove from all. */\nexport function BulkLabelSelectView({\n options,\n appliedIds,\n mixedIds,\n onToggle,\n onCreate,\n disabled,\n isCompact,\n}: {\n options: LabelOption[]\n appliedIds: ReadonlySet<string>\n mixedIds?: ReadonlySet<string>\n onToggle: (id: string) => void\n onCreate?: (name: string) => void\n disabled?: boolean\n isCompact?: boolean\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={disabled}\n className=\"h-7 gap-1.5 px-2 text-yellow-text hover:text-yellow-text hover:bg-yellow-bg border-yellow-border\"\n data-testid=\"bulk-label-button\"\n aria-label=\"Labels\"\n >\n <SquareCheckBig className=\"size-4\" />\n {!isCompact && <span>Labels</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[220px] p-0\" align=\"start\" side=\"top\" sideOffset={4}>\n <LabelPickerList\n options={options}\n appliedIds={appliedIds}\n mixedIds={mixedIds}\n onToggle={onToggle}\n onCreate={onCreate}\n />\n </PopoverContent>\n </Popover>\n )\n}\n","import {\n AlertTriangle,\n CheckCircle,\n FileX,\n Hourglass,\n Loader2,\n type LucideIcon,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { FailedStageIcon } from './FailedStageIcon'\n\nexport interface DocStatusIconProps {\n /** Document processing status (case-insensitive); unknown / empty renders nothing. */\n status?: string | null\n /** Activating the glyph (click, Enter, Space) e.g. opens the status details. */\n onClick?: () => void\n /** Where a failed document's processing stopped (the failed glyph differs per stage). */\n failedStage?: string | null\n /** Why it failed, added to the failed glyph's title. */\n errorMessage?: string | null\n className?: string\n}\n\nconst STATUS: Record<string, { Icon: LucideIcon; title: string; tone: string; spin?: boolean }> = {\n completed: { Icon: CheckCircle, title: 'Ready', tone: 'text-green-text' },\n empty: { Icon: FileX, title: 'Empty', tone: 'text-yellow-text' },\n 'low-content': { Icon: AlertTriangle, title: 'Low Content', tone: 'text-yellow-text' },\n processing: { Icon: Loader2, title: 'Indexing', tone: 'text-muted-foreground', spin: true },\n queued: { Icon: Hourglass, title: 'Queued', tone: 'text-yellow-text' },\n}\n\n/** Compact status glyph of a document row (ready, empty, low content, indexing, queued, failed). */\nexport function DocStatusIcon({\n status,\n onClick,\n failedStage,\n errorMessage,\n className,\n}: DocStatusIconProps) {\n if (!status) return null\n const key = status.toLowerCase()\n if (key === 'failed') {\n return (\n <FailedStageIcon\n stage={failedStage}\n errorMessage={errorMessage}\n className={cn('size-3 text-red-text', onClick && 'cursor-pointer', className)}\n onClick={\n onClick\n ? (e) => {\n e.stopPropagation()\n onClick()\n }\n : undefined\n }\n />\n )\n }\n const entry = STATUS[key]\n if (!entry) return null\n const { Icon } = entry\n const glyph = (\n <Icon className={cn('size-3', entry.tone, entry.spin && 'animate-spin', className)} />\n )\n if (!onClick) {\n return (\n <span title={entry.title} data-slot=\"doc-status-icon\" data-status={key}>\n {glyph}\n </span>\n )\n }\n return (\n <button\n type=\"button\"\n title={entry.title}\n aria-label={entry.title}\n data-slot=\"doc-status-icon\"\n data-status={key}\n onClick={(e) => {\n e.stopPropagation()\n onClick()\n }}\n className=\"cursor-pointer rounded hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {glyph}\n </button>\n )\n}\n"]}
@@ -1,10 +1,58 @@
1
1
  "use client";
2
2
  import { CellHoverIcon } from './chunk-M4S75AEJ.js';
3
+ import { Check, Minus, PencilLine, ChevronLeft, ChevronRight } from 'lucide-react';
4
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
5
  import { memo, useState, useRef, useEffect, useMemo } from 'react';
4
- import { Check, Minus, PencilLine } from 'lucide-react';
5
6
  import { Popover, PopoverTrigger, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '@arbidocs/react/ui';
6
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
7
 
8
+ function RowNavigatorControls({
9
+ total,
10
+ currentIndex,
11
+ onGo,
12
+ testId,
13
+ itemLabel = "row",
14
+ keepWhenEmpty = false
15
+ }) {
16
+ if (total === 0 && !keepWhenEmpty) return null;
17
+ return /* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-0.5", "data-testid": `${testId}-nav`, children: [
18
+ /* @__PURE__ */ jsx(
19
+ "button",
20
+ {
21
+ type: "button",
22
+ "aria-label": `Previous ${itemLabel}`,
23
+ "data-testid": `${testId}-nav-prev`,
24
+ disabled: total === 0 || currentIndex === null || currentIndex <= 0,
25
+ onClick: () => onGo((currentIndex ?? 0) - 1),
26
+ className: "rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0",
27
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
28
+ }
29
+ ),
30
+ /* @__PURE__ */ jsxs(
31
+ "span",
32
+ {
33
+ className: "whitespace-nowrap tabular-nums text-sm font-light text-muted-foreground",
34
+ "data-testid": `${testId}-nav-position`,
35
+ children: [
36
+ currentIndex !== null ? currentIndex + 1 : "\u2013",
37
+ " / ",
38
+ total > 0 ? total : "\u2013"
39
+ ]
40
+ }
41
+ ),
42
+ /* @__PURE__ */ jsx(
43
+ "button",
44
+ {
45
+ type: "button",
46
+ "aria-label": `Next ${itemLabel}`,
47
+ "data-testid": `${testId}-nav-next`,
48
+ disabled: total === 0 || currentIndex !== null && currentIndex >= total - 1,
49
+ onClick: () => onGo(currentIndex === null ? 0 : currentIndex + 1),
50
+ className: "rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0",
51
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
52
+ }
53
+ )
54
+ ] });
55
+ }
8
56
  var CHIP_ROW_H = 24;
9
57
  var CHIP_GAP = 4;
10
58
  function labelChipClampHeight(rowHeight) {
@@ -203,6 +251,6 @@ var LabelMultiSelectView = memo(function LabelMultiSelectView2({
203
251
  ] });
204
252
  });
205
253
 
206
- export { DEFAULT_LABEL_MULTI_SELECT_LABELS, LabelMultiSelectView, LabelPickerList, labelChipClampHeight };
207
- //# sourceMappingURL=chunk-SDOEHEJP.js.map
208
- //# sourceMappingURL=chunk-SDOEHEJP.js.map
254
+ export { DEFAULT_LABEL_MULTI_SELECT_LABELS, LabelMultiSelectView, LabelPickerList, RowNavigatorControls, labelChipClampHeight };
255
+ //# sourceMappingURL=chunk-JMQLTMJ7.js.map
256
+ //# sourceMappingURL=chunk-JMQLTMJ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/RowNavigatorControls.tsx","../src/files/cells/LabelMultiSelect.tsx"],"names":["jsxs","jsx","LabelMultiSelectView"],"mappings":"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","file":"chunk-JMQLTMJ7.js","sourcesContent":["/**\n * RowNavigatorControls\n *\n * The bare ‹ n / N › stepper shared by every list navigator — the Files table\n * (GridRowNavigator, over AG Grid's displayed rows) and the Files gallery\n * (ExplorerFileNavigator, over the explorer's displayed tiles). Presentation\n * only: the owner resolves what \"current\" and \"total\" mean and what stepping\n * does, so the two surfaces stay pixel-identical while their sources differ.\n */\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\n\nexport interface RowNavigatorControlsProps {\n /** Rows currently displayed. Renders nothing at 0. */\n total: number\n /** Zero-based position of the open row, or null for \"– / N\". */\n currentIndex: number | null\n /** Step to a zero-based index (already clamped by the caller if it cares). */\n onGo: (index: number) => void\n /** Prefix for every `data-testid` this control emits. */\n testId: string\n /** Noun for the buttons' aria-labels (\"Previous fact\" / \"Next document\"). */\n itemLabel?: string\n /**\n * Render a disabled \"– / –\" stepper instead of nothing when there is nothing\n * to step through. The gallery keeps it so a folder-only view doesn't drop a\n * control out of the toolbar (and shift everything left) on every folder hop;\n * the table, whose empty state replaces the whole grid, hides it.\n */\n keepWhenEmpty?: boolean\n}\n\nexport function RowNavigatorControls({\n total,\n currentIndex,\n onGo,\n testId,\n itemLabel = 'row',\n keepWhenEmpty = false,\n}: RowNavigatorControlsProps) {\n if (total === 0 && !keepWhenEmpty) return null\n\n return (\n <span className=\"flex shrink-0 items-center gap-0.5\" data-testid={`${testId}-nav`}>\n <button\n type=\"button\"\n aria-label={`Previous ${itemLabel}`}\n data-testid={`${testId}-nav-prev`}\n disabled={total === 0 || currentIndex === null || currentIndex <= 0}\n onClick={() => onGo((currentIndex ?? 0) - 1)}\n className=\"rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <span\n className=\"whitespace-nowrap tabular-nums text-sm font-light text-muted-foreground\"\n data-testid={`${testId}-nav-position`}\n >\n {currentIndex !== null ? currentIndex + 1 : '–'} / {total > 0 ? total : '–'}\n </span>\n <button\n type=\"button\"\n aria-label={`Next ${itemLabel}`}\n data-testid={`${testId}-nav-next`}\n disabled={total === 0 || (currentIndex !== null && currentIndex >= total - 1)}\n onClick={() => onGo(currentIndex === null ? 0 : currentIndex + 1)}\n className=\"rounded p-0.5 text-muted-foreground enabled:hover:bg-accent enabled:hover:text-foreground disabled:opacity-30 pointer-coarse:size-11! shrink-0\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </span>\n )\n}\n","import { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport { Check, Minus, PencilLine } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@arbidocs/react/ui'\nimport { CellHoverIcon } from './HoverIconCell'\n\n/** Chip row metrics (px): a chip is 24px tall with a 4px gap, as in the Facts labels cell. */\nconst CHIP_ROW_H = 24\nconst CHIP_GAP = 4\n\n/** Max height of the chip container: whole chip rows that fit `rowHeight`, never half a row. */\nexport function labelChipClampHeight(rowHeight: number): number {\n const rows = Math.max(1, Math.floor((rowHeight + CHIP_GAP) / (CHIP_ROW_H + CHIP_GAP)))\n return CHIP_ROW_H * rows + CHIP_GAP * (rows - 1)\n}\n\n/** One label a document can carry. `color` is any CSS colour (the host derives it from the id). */\nexport interface LabelOption {\n id: string\n name: string\n color: string\n}\n\n/** Every fixed string of the label picker. */\nexport interface LabelMultiSelectLabels {\n searchPlaceholder: string\n noLabels: string\n create: (name: string) => string\n editLabel: string\n}\n\nexport const DEFAULT_LABEL_MULTI_SELECT_LABELS: LabelMultiSelectLabels = {\n searchPlaceholder: 'Search or create...',\n noLabels: 'No labels yet',\n create: (name) => `Create “${name}”`,\n editLabel: 'Edit field',\n}\n\nexport interface LabelMultiSelectViewProps {\n options: LabelOption[]\n /** Ids of the labels applied to the row. */\n appliedIds: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label named `name` and apply it (the host decides what a non-member may do). */\n onCreate: (name: string) => void\n /** Opens the label editor; omit to hide the per-option edit button. */\n onEditLabels?: () => void\n /** The grid row height: clamps the chips to the rows that fully fit, with an ellipsis. */\n rowHeight?: number\n labels?: Partial<LabelMultiSelectLabels>\n}\n\nconst CHECK_BOX = 'flex shrink-0 items-center justify-center rounded border-2'\n\nexport interface LabelPickerListProps {\n options: LabelOption[]\n appliedIds: ReadonlySet<string>\n mixedIds?: ReadonlySet<string>\n onToggle: (id: string) => void\n /** Create a label named `name`; omit to hide \"Create ...\" (the picker only toggles). */\n onCreate?: (name: string) => void\n /**\n * Further ways to create from the typed name, each its own row under \"Create ...\" (e.g. one per\n * kind of tag). Enter still runs `onCreate`.\n */\n moreCreates?: { label: (name: string) => string; onCreate: (name: string) => void }[]\n /** Opens the label editor; omit to hide the per-option edit button. */\n onEditLabels?: () => void\n labels?: Partial<LabelMultiSelectLabels>\n}\n\n/**\n * Searchable list of labels with check boxes: type to filter, Enter (or the \"Create ...\" row, shown\n * whenever the typed name is not a label yet, below any labels that partly match it) creates it. Used by the grid cell and the document form field.\n */\nexport function LabelPickerList({\n options,\n appliedIds,\n mixedIds,\n onToggle,\n onCreate,\n moreCreates,\n onEditLabels,\n labels,\n}: LabelPickerListProps) {\n const l = useMemo(() => ({ ...DEFAULT_LABEL_MULTI_SELECT_LABELS, ...labels }), [labels])\n const [search, setSearch] = useState('')\n const trimmed = search.trim()\n const matchesExisting = options.some((o) => o.name.toLowerCase() === trimmed.toLowerCase())\n\n const create = () => {\n onCreate?.(trimmed)\n setSearch('')\n }\n\n return (\n <Command shouldFilter>\n <CommandInput\n placeholder={l.searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && onCreate && trimmed && !matchesExisting) {\n e.preventDefault()\n create()\n }\n }}\n />\n <CommandList>\n {/* Nothing matches and nothing to create: say so. A new name is offered below instead. */}\n {!(trimmed && onCreate) && (\n <CommandEmpty>\n <span className=\"text-muted-foreground\">{l.noLabels}</span>\n </CommandEmpty>\n )}\n <CommandGroup>\n {options.map((o) => {\n const isApplied = appliedIds.has(o.id)\n const isMixed = mixedIds?.has(o.id)\n return (\n <CommandItem\n key={o.id}\n value={o.name}\n onSelect={() => onToggle(o.id)}\n onPointerDown={(e) => e.preventDefault()}\n className=\"group/label cursor-pointer\"\n data-testid={`label-select-${o.id}`}\n >\n <span\n className={`mr-2 size-4 ${CHECK_BOX} ${isApplied ? '' : 'bg-background'}`}\n style={{\n borderColor: o.color,\n backgroundColor: isApplied ? o.color : undefined,\n }}\n >\n {isApplied && <Check className=\"size-3 text-white\" strokeWidth={3} />}\n {isMixed && <Minus className=\"size-3\" style={{ color: o.color }} />}\n </span>\n <span className=\"flex-1 text-sm\">{o.name}</span>\n {onEditLabels && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onEditLabels()\n }}\n onPointerDown={(e) => e.preventDefault()}\n className=\"shrink-0 rounded p-0.5 opacity-0 hover:bg-muted focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover/label:opacity-100 group-data-[selected=true]/label:opacity-100 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center pointer-coarse:opacity-100\"\n title={l.editLabel}\n aria-label={l.editLabel}\n >\n <PencilLine className=\"size-3 text-muted-foreground\" />\n </button>\n )}\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n {trimmed && onCreate && !matchesExisting && (\n <div className=\"border-t border-border p-1\" data-slot=\"label-picker-create\">\n {[{ label: l.create, onCreate }, ...(moreCreates ?? [])].map((c, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n c.onCreate(trimmed)\n setSearch('')\n }}\n onPointerDown={(e) => e.preventDefault()}\n className=\"w-full cursor-pointer rounded px-2 py-1.5 text-left text-sm text-primary hover:bg-accent pointer-coarse:min-h-11\"\n >\n {c.label(trimmed)}\n </button>\n ))}\n </div>\n )}\n </Command>\n )\n}\n\n/**\n * Labels column cell: applied labels as bordered chips; click (or Enter) opens a popover to\n * toggle labels or type a new name and press Enter to create it. Empty cells show a pencil on\n * hover, keyboard focus and touch.\n */\nexport const LabelMultiSelectView = memo(function LabelMultiSelectView({\n options,\n appliedIds,\n onToggle,\n onCreate,\n onEditLabels,\n rowHeight = 52,\n labels,\n}: LabelMultiSelectViewProps) {\n const [open, setOpen] = useState(false)\n\n const applied = options.filter((o) => appliedIds.has(o.id))\n const maxHeight = labelChipClampHeight(rowHeight)\n const chipsRef = useRef<HTMLDivElement>(null)\n const [hasOverflow, setHasOverflow] = useState(false)\n useEffect(() => {\n const el = chipsRef.current\n if (!el) return\n const measure = () => setHasOverflow(el.scrollHeight > el.clientHeight + 1)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n return () => ro.disconnect()\n }, [appliedIds, maxHeight, options])\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"label-multi-select\"\n // No vertical clip/padding: at the minimum row height an `overflow-hidden` button would\n // crop the pills. The chip container is clamped to whole chip rows instead.\n className=\"group relative flex h-full w-full min-w-0 cursor-pointer items-center gap-1 pr-4 text-left hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n {applied.length === 0 ? (\n <span className=\"flex-1\">\n <CellHoverIcon />\n </span>\n ) : (\n <>\n <div\n ref={chipsRef}\n className=\"flex min-w-0 flex-1 flex-wrap content-start gap-1 overflow-hidden\"\n style={{ maxHeight }}\n data-testid=\"label-multi-select-chips\"\n >\n {applied.map((o) => (\n <span\n key={o.id}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium\"\n title={o.name}\n style={{ borderColor: o.color }}\n >\n <span\n className=\"flex size-3.5 shrink-0 items-center justify-center rounded\"\n style={{ backgroundColor: o.color }}\n >\n <Check className=\"size-2.5 text-white\" strokeWidth={3} />\n </span>\n <span className=\"max-w-[80px] truncate\">{o.name}</span>\n </span>\n ))}\n </div>\n {hasOverflow && (\n <span\n className=\"pointer-events-none absolute bottom-0.5 right-0.5 text-xs font-semibold leading-none text-muted-foreground\"\n aria-hidden\n data-testid=\"label-multi-select-overflow\"\n >\n …\n </span>\n )}\n </>\n )}\n </button>\n </PopoverTrigger>\n {open && (\n <PopoverContent className=\"w-[360px] p-0\" align=\"start\" side=\"bottom\" sideOffset={4}>\n <LabelPickerList\n options={options}\n appliedIds={appliedIds}\n onToggle={onToggle}\n onCreate={onCreate}\n onEditLabels={onEditLabels}\n labels={labels}\n />\n </PopoverContent>\n )}\n </Popover>\n )\n})\n"]}
@@ -1,7 +1,8 @@
1
1
  "use client";
2
- import { useBlocksEnvironment } from './chunk-F57LNUSZ.js';
2
+ import { ArbiHost } from './chunk-IWVOZREF.js';
3
+ import { useBlocksEnvironment } from './chunk-5NWY3FXQ.js';
3
4
  import { createContext, useState, useRef, useEffect, useCallback, useMemo, useContext } from 'react';
4
- import { ArbiSessionStateProvider, useArbi, useArbiSessionStore, useArbiSessionState, AccountClientProvider, arbiAccountClient, toProfileView } from '@arbidocs/react';
5
+ import { useArbi, useArbiSessionStore, useArbiSessionState, arbiAccountClient, toProfileView } from '@arbidocs/react';
5
6
  import { jsx } from 'react/jsx-runtime';
6
7
 
7
8
  var ConnectionContext = createContext(null);
@@ -47,12 +48,6 @@ function userFromProfile(profile, externalId) {
47
48
  function ConnectionProvider({
48
49
  config,
49
50
  children
50
- }) {
51
- return /* @__PURE__ */ jsx(ArbiSessionStateProvider, { children: /* @__PURE__ */ jsx(SessionConnectionProvider, { config, children }) });
52
- }
53
- function SessionConnectionProvider({
54
- config,
55
- children
56
51
  }) {
57
52
  const arbi = useArbi();
58
53
  const session = useArbiSessionStore();
@@ -227,7 +222,12 @@ function SessionConnectionProvider({
227
222
  ]
228
223
  );
229
224
  const account = useConnectionAccount(arbi, user, logout);
230
- return /* @__PURE__ */ jsx(ConnectionContext.Provider, { value, children: /* @__PURE__ */ jsx(AccountClientProvider, { client: account, enabled: status === "authenticated", children }) });
225
+ const authenticated = status === "authenticated";
226
+ const host = useMemo(
227
+ () => ({ account: { client: account, useEnabled: () => authenticated } }),
228
+ [account, authenticated]
229
+ );
230
+ return /* @__PURE__ */ jsx(ConnectionContext.Provider, { value, children: /* @__PURE__ */ jsx(ArbiHost, { config: host, children }) });
231
231
  }
232
232
  function useConnectionAccount(arbi, user, logout) {
233
233
  const userRef = useRef(user);
@@ -277,7 +277,7 @@ function useConnectionAccount(arbi, user, logout) {
277
277
  }
278
278
  function useConnection() {
279
279
  const ctx = useContext(ConnectionContext);
280
- if (!ctx) throw new Error("useConnection must be used within ConnectionProvider");
280
+ if (!ctx) throw new Error("useConnection needs the sign-in layer of `defaultHost` above it");
281
281
  return ctx;
282
282
  }
283
283
  var isAuthenticated = (s) => s === "demo" || s === "authenticated";
@@ -317,5 +317,5 @@ function useConnectedWorkspace() {
317
317
  }
318
318
 
319
319
  export { ConnectionProvider, SESSION_EXPIRED_MESSAGE, isAuthenticated, useConnectedWorkspace, useConnection };
320
- //# sourceMappingURL=chunk-TF7HN5EU.js.map
321
- //# sourceMappingURL=chunk-TF7HN5EU.js.map
320
+ //# sourceMappingURL=chunk-JNE2XEXD.js.map
321
+ //# sourceMappingURL=chunk-JNE2XEXD.js.map