@arbidocs/blocks 0.4.159 → 0.4.160
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.
- package/README.md +48 -9
- package/dist/{ConnectedNativeDocxComparison-R6RU5TZE.cjs → ConnectedNativeDocxComparison-GLHOGUP6.cjs} +12 -11
- package/dist/{ConnectedNativeDocxComparison-R6RU5TZE.cjs.map → ConnectedNativeDocxComparison-GLHOGUP6.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-XMZ5KLD4.js → ConnectedNativeDocxComparison-LKIMKOTA.js} +11 -10
- package/dist/{ConnectedStreamedWordArtifact-IXRJ7MUE.js.map → ConnectedNativeDocxComparison-LKIMKOTA.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-NGUK2AX6.js → ConnectedNativeDocxEditor-6LNYWZ3P.js} +10 -9
- package/dist/{ConnectedNativeDocxEditor-NGUK2AX6.js.map → ConnectedNativeDocxEditor-6LNYWZ3P.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-LBATSM3M.cjs → ConnectedNativeDocxEditor-M3UGWL6K.cjs} +12 -11
- package/dist/{ConnectedNativeDocxEditor-LBATSM3M.cjs.map → ConnectedNativeDocxEditor-M3UGWL6K.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-IXRJ7MUE.js → ConnectedStreamedWordArtifact-432HT7DK.js} +11 -10
- package/dist/{ConnectedNativeDocxComparison-XMZ5KLD4.js.map → ConnectedStreamedWordArtifact-432HT7DK.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-CWFR6A37.cjs → ConnectedStreamedWordArtifact-COEXL5IT.cjs} +12 -11
- package/dist/ConnectedStreamedWordArtifact-COEXL5IT.cjs.map +1 -0
- package/dist/{FactTextEditor-YESAU2IJ.js → FactTextEditor-ABKKJOCY.js} +2 -2
- package/dist/FactTextEditor-ABKKJOCY.js.map +1 -0
- package/dist/{FactTextEditor-YUPBCTXK.cjs → FactTextEditor-GYN5RHJT.cjs} +2 -2
- package/dist/FactTextEditor-GYN5RHJT.cjs.map +1 -0
- package/dist/{WorkspaceTableView-EYLEUZZT.cjs → WorkspaceTableView-AQTF5F6T.cjs} +6 -5
- package/dist/WorkspaceTableView-AQTF5F6T.cjs.map +1 -0
- package/dist/{WorkspaceTableView-DWUE4VQF.js → WorkspaceTableView-PTB5BPVA.js} +4 -3
- package/dist/WorkspaceTableView-PTB5BPVA.js.map +1 -0
- package/dist/agents/index.cjs +263 -263
- package/dist/agents/index.js +6 -6
- package/dist/agents/skills/skillLibrary.d.ts +1 -1
- package/dist/{chunk-FPHTSNOE.js → chunk-2AKIMCDD.js} +3 -3
- package/dist/{chunk-FPHTSNOE.js.map → chunk-2AKIMCDD.js.map} +1 -1
- package/dist/{chunk-YNMO3DSR.js → chunk-2AMYT2HQ.js} +3 -3
- package/dist/{chunk-YNMO3DSR.js.map → chunk-2AMYT2HQ.js.map} +1 -1
- package/dist/{chunk-MSFQDELO.cjs → chunk-3CUORKDL.cjs} +4 -4
- package/dist/{chunk-MSFQDELO.cjs.map → chunk-3CUORKDL.cjs.map} +1 -1
- package/dist/{chunk-MNG7N6M2.js → chunk-3PQIWOTZ.js} +122 -57
- package/dist/chunk-3PQIWOTZ.js.map +1 -0
- package/dist/chunk-5C7DRQQE.cjs +1891 -0
- package/dist/chunk-5C7DRQQE.cjs.map +1 -0
- package/dist/{chunk-F57LNUSZ.js → chunk-5NWY3FXQ.js} +24 -57
- package/dist/chunk-5NWY3FXQ.js.map +1 -0
- package/dist/{chunk-ISHFVKVU.js → chunk-5WLORPGX.js} +4 -4
- package/dist/{chunk-ISHFVKVU.js.map → chunk-5WLORPGX.js.map} +1 -1
- package/dist/{chunk-FAXXN7KI.cjs → chunk-5Y6V7F6W.cjs} +53 -4
- package/dist/chunk-5Y6V7F6W.cjs.map +1 -0
- package/dist/{chunk-6QAAIDQQ.cjs → chunk-6UTIAHQG.cjs} +60 -60
- package/dist/{chunk-6QAAIDQQ.cjs.map → chunk-6UTIAHQG.cjs.map} +1 -1
- package/dist/{chunk-KCSIX7CY.js → chunk-6XIXNH26.js} +3 -3
- package/dist/{chunk-KCSIX7CY.js.map → chunk-6XIXNH26.js.map} +1 -1
- package/dist/{chunk-YBJ4QGNH.cjs → chunk-ANLTECZ6.cjs} +8 -8
- package/dist/{chunk-YBJ4QGNH.cjs.map → chunk-ANLTECZ6.cjs.map} +1 -1
- package/dist/{chunk-Q2XGM372.cjs → chunk-AR6A2PMV.cjs} +4 -4
- package/dist/{chunk-Q2XGM372.cjs.map → chunk-AR6A2PMV.cjs.map} +1 -1
- package/dist/{chunk-KBO75NLM.cjs → chunk-AYJZRBHG.cjs} +7 -7
- package/dist/{chunk-KBO75NLM.cjs.map → chunk-AYJZRBHG.cjs.map} +1 -1
- package/dist/{chunk-FM3IRQJW.cjs → chunk-AYKE6USO.cjs} +12 -12
- package/dist/chunk-AYKE6USO.cjs.map +1 -0
- package/dist/chunk-BGJZVJJM.cjs +63 -0
- package/dist/chunk-BGJZVJJM.cjs.map +1 -0
- package/dist/{chunk-ECW2R2KF.cjs → chunk-BPL5RLNN.cjs} +27 -27
- package/dist/{chunk-ECW2R2KF.cjs.map → chunk-BPL5RLNN.cjs.map} +1 -1
- package/dist/{chunk-CNHUJRQ4.cjs → chunk-EFEFLBRM.cjs} +21 -55
- package/dist/chunk-EFEFLBRM.cjs.map +1 -0
- package/dist/{chunk-ETZ5A3GU.js → chunk-EVO2UNX3.js} +3 -3
- package/dist/chunk-EVO2UNX3.js.map +1 -0
- package/dist/{chunk-P6RIBIVN.js → chunk-FMJGVAWX.js} +8 -9
- package/dist/chunk-FMJGVAWX.js.map +1 -0
- package/dist/chunk-H5542IOD.cjs +108 -0
- package/dist/chunk-H5542IOD.cjs.map +1 -0
- package/dist/{chunk-VF5EUAIV.js → chunk-H7PHANI4.js} +3 -3
- package/dist/chunk-H7PHANI4.js.map +1 -0
- package/dist/chunk-HQJL7FSY.js +58 -0
- package/dist/chunk-HQJL7FSY.js.map +1 -0
- package/dist/{chunk-OFV3PRF2.cjs → chunk-HRDVQERS.cjs} +7 -7
- package/dist/{chunk-OFV3PRF2.cjs.map → chunk-HRDVQERS.cjs.map} +1 -1
- package/dist/{chunk-3VULDTNL.cjs → chunk-HUNX4CQG.cjs} +4 -4
- package/dist/chunk-HUNX4CQG.cjs.map +1 -0
- package/dist/{chunk-2BHDRVVL.cjs → chunk-I6I34FDU.cjs} +38 -37
- package/dist/chunk-I6I34FDU.cjs.map +1 -0
- package/dist/chunk-IWVOZREF.js +12 -0
- package/dist/chunk-IWVOZREF.js.map +1 -0
- package/dist/chunk-J7YHBMBB.js +1834 -0
- package/dist/chunk-J7YHBMBB.js.map +1 -0
- package/dist/{chunk-SDOEHEJP.js → chunk-JMQLTMJ7.js} +53 -5
- package/dist/chunk-JMQLTMJ7.js.map +1 -0
- package/dist/{chunk-TF7HN5EU.js → chunk-JNE2XEXD.js} +12 -12
- package/dist/chunk-JNE2XEXD.js.map +1 -0
- package/dist/{chunk-QKR5LWDO.js → chunk-K7CZFNJ2.js} +7 -7
- package/dist/{chunk-QKR5LWDO.js.map → chunk-K7CZFNJ2.js.map} +1 -1
- package/dist/{chunk-4RPBUMHB.cjs → chunk-KMZO5W6D.cjs} +4 -4
- package/dist/chunk-KMZO5W6D.cjs.map +1 -0
- package/dist/{chunk-FTZ45WHY.js → chunk-KNCJSPXV.js} +5020 -4014
- package/dist/chunk-KNCJSPXV.js.map +1 -0
- package/dist/{chunk-3OCNUKGX.js → chunk-KQWC4YBX.js} +3 -3
- package/dist/{chunk-3OCNUKGX.js.map → chunk-KQWC4YBX.js.map} +1 -1
- package/dist/{chunk-TC3RQNEX.cjs → chunk-L4KWTDFE.cjs} +5 -5
- package/dist/chunk-L4KWTDFE.cjs.map +1 -0
- package/dist/{chunk-VTTZZ4FN.js → chunk-LH3JAZ33.js} +5 -5
- package/dist/chunk-LH3JAZ33.js.map +1 -0
- package/dist/{chunk-P2YM67Y5.cjs → chunk-LQYPOWKN.cjs} +14 -21
- package/dist/chunk-LQYPOWKN.cjs.map +1 -0
- package/dist/{chunk-RATEAOKT.js → chunk-NOXGEQQR.js} +7 -13
- package/dist/chunk-NOXGEQQR.js.map +1 -0
- package/dist/{chunk-NPLGB4LI.cjs → chunk-NUAC5GTQ.cjs} +5115 -4077
- package/dist/chunk-NUAC5GTQ.cjs.map +1 -0
- package/dist/chunk-NYECCTB3.js +101 -0
- package/dist/chunk-NYECCTB3.js.map +1 -0
- package/dist/{chunk-GC2FSPSQ.cjs → chunk-O5E3NKPI.cjs} +128 -58
- package/dist/chunk-O5E3NKPI.cjs.map +1 -0
- package/dist/{chunk-SZOFGU7W.js → chunk-O5XREO7H.js} +3 -3
- package/dist/{chunk-SZOFGU7W.js.map → chunk-O5XREO7H.js.map} +1 -1
- package/dist/{chunk-OOU4QLRK.cjs → chunk-OHCYJFV2.cjs} +9 -9
- package/dist/{chunk-OOU4QLRK.cjs.map → chunk-OHCYJFV2.cjs.map} +1 -1
- package/dist/{chunk-DEPF5LQI.js → chunk-OKRYNQPH.js} +3 -3
- package/dist/chunk-OKRYNQPH.js.map +1 -0
- package/dist/{chunk-KFMRBZQK.js → chunk-PCL7IEZO.js} +21 -20
- package/dist/chunk-PCL7IEZO.js.map +1 -0
- package/dist/chunk-RFB7B6XG.cjs +169 -0
- package/dist/chunk-RFB7B6XG.cjs.map +1 -0
- package/dist/{chunk-SZSJGZSO.js → chunk-SQQU3WRB.js} +714 -5
- package/dist/chunk-SQQU3WRB.js.map +1 -0
- package/dist/{chunk-OALEDG67.cjs → chunk-TNESYDBR.cjs} +5 -5
- package/dist/{chunk-OALEDG67.cjs.map → chunk-TNESYDBR.cjs.map} +1 -1
- package/dist/chunk-TTS353W2.js +163 -0
- package/dist/chunk-TTS353W2.js.map +1 -0
- package/dist/{chunk-CROGFB46.cjs → chunk-U7OUZHBH.cjs} +753 -2
- package/dist/chunk-U7OUZHBH.cjs.map +1 -0
- package/dist/{chunk-BQ77KSXU.js → chunk-UORU5S7Y.js} +3 -3
- package/dist/{chunk-BQ77KSXU.js.map → chunk-UORU5S7Y.js.map} +1 -1
- package/dist/{chunk-FYZXDZM7.js → chunk-VFF76GTB.js} +4 -4
- package/dist/{chunk-FYZXDZM7.js.map → chunk-VFF76GTB.js.map} +1 -1
- package/dist/{chunk-E4H5H2C3.cjs → chunk-VYTK2WJB.cjs} +4 -4
- package/dist/{chunk-E4H5H2C3.cjs.map → chunk-VYTK2WJB.cjs.map} +1 -1
- package/dist/{chunk-XI37A7HH.js → chunk-WKSP73RU.js} +3 -3
- package/dist/{chunk-XI37A7HH.js.map → chunk-WKSP73RU.js.map} +1 -1
- package/dist/chunk-WP4VIOOA.cjs +15 -0
- package/dist/chunk-WP4VIOOA.cjs.map +1 -0
- package/dist/{chunk-YF3QUHKN.cjs → chunk-X3XPXEIM.cjs} +14 -15
- package/dist/chunk-X3XPXEIM.cjs.map +1 -0
- package/dist/{chunk-VZPFYZZU.cjs → chunk-Z2HEBOA3.cjs} +8 -8
- package/dist/{chunk-VZPFYZZU.cjs.map → chunk-Z2HEBOA3.cjs.map} +1 -1
- package/dist/{chunk-Q7CQYYZW.cjs → chunk-ZMYW5M75.cjs} +5 -5
- package/dist/chunk-ZMYW5M75.cjs.map +1 -0
- package/dist/{chunk-7UENVUA6.js → chunk-ZW2AWACP.js} +3 -3
- package/dist/{chunk-7UENVUA6.js.map → chunk-ZW2AWACP.js.map} +1 -1
- package/dist/citations/index.cjs +10 -10
- package/dist/citations/index.js +2 -2
- package/dist/collaboration/contacts/contact-form.d.ts +47 -0
- package/dist/collaboration/contacts/index.d.ts +3 -1
- package/dist/collaboration/contacts/invite-plan.d.ts +46 -0
- package/dist/collaboration/contacts/parseEmails.d.ts +7 -0
- package/dist/collaboration/index.cjs +163 -83
- package/dist/collaboration/index.js +2 -2
- package/dist/components/ActionLink.d.ts +1 -1
- package/dist/components/TeamGrid.d.ts +1 -1
- package/dist/components/editorial/{ProfileCard.d.ts → EditorialProfileCard.d.ts} +2 -2
- package/dist/components/editorial/index.d.ts +1 -1
- package/dist/connect/docx.cjs +14 -13
- package/dist/connect/docx.d.ts +1 -1
- package/dist/connect/docx.js +10 -9
- package/dist/connect/index.cjs +22053 -14708
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +11 -7
- package/dist/connect/index.js +15193 -7911
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +86 -141
- package/dist/connect/viewer.cjs.map +1 -1
- package/dist/connect/viewer.d.ts +3 -2
- package/dist/connect/viewer.js +28 -85
- package/dist/connect/viewer.js.map +1 -1
- package/dist/connection/ConnectedSettings.d.ts +3 -2
- package/dist/connection/ConnectionProvider.d.ts +5 -4
- package/dist/connection/StreamedArtifact.d.ts +1 -1
- package/dist/connection/billing/index.d.ts +3 -3
- package/dist/connection/billing/support.d.ts +4 -7
- package/dist/connection/contacts/ConnectedAddContacts.d.ts +9 -0
- package/dist/connection/contacts/ConnectedContactCardForm.d.ts +11 -0
- package/dist/connection/contacts/ConnectedContactToggle.d.ts +16 -0
- package/dist/connection/contacts/ConnectedContactsDirectory.d.ts +10 -0
- package/dist/connection/contacts/ImportVcf.d.ts +29 -0
- package/dist/connection/contacts/index.d.ts +5 -0
- package/dist/connection/defaultHost.d.ts +9 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.d.ts +3 -3
- package/dist/connection/docx/support.d.ts +10 -9
- package/dist/connection/files/bulk/ConnectedFilesBulkActions.d.ts +22 -0
- package/dist/connection/files/bulk/useDocumentBulkActions.d.ts +19 -0
- package/dist/connection/files/explorer/FileTiles.d.ts +6 -3
- package/dist/connection/files/fields/ConnectedBulkTagEditor.d.ts +16 -0
- package/dist/connection/files/fields/ConnectedFieldsEditor.d.ts +40 -0
- package/dist/connection/files/fields/ConnectedFieldsManager.d.ts +33 -0
- package/dist/connection/files/fields/ConnectedTagEditorDialog.d.ts +20 -0
- package/dist/connection/files/fields/ConnectedTagForm.d.ts +54 -0
- package/dist/connection/files/fields/DocumentFieldParts.d.ts +33 -0
- package/dist/connection/files/fields/DocumentUser.d.ts +11 -0
- package/dist/connection/files/fields/documentField.d.ts +48 -0
- package/dist/connection/files/fields/useFieldWrites.d.ts +20 -0
- package/dist/connection/files/fields/useFieldsApply.d.ts +49 -0
- package/dist/connection/files/fields/useMemberLookup.d.ts +3 -0
- package/dist/connection/files/grid/ConnectedTagEntity.d.ts +19 -0
- package/dist/connection/files/grid/cells.d.ts +85 -0
- package/dist/connection/files/grid/documentColumns.d.ts +66 -0
- package/dist/connection/files/grid/documentGridBus.d.ts +48 -0
- package/dist/connection/files/grid/documentStatus.d.ts +43 -0
- package/dist/connection/files/grid/familyMeta.d.ts +21 -0
- package/dist/connection/files/grid/tagColumn.d.ts +23 -0
- package/dist/connection/files/grid/useDocumentGridSync.d.ts +48 -0
- package/dist/connection/files/grid/useDocumentTable.d.ts +30 -0
- package/dist/connection/files/index.d.ts +36 -2
- package/dist/connection/files/move/ConnectedMoveToFolder.d.ts +31 -0
- package/dist/connection/files/page/ConnectedFilesPage.d.ts +86 -0
- package/dist/connection/files/page/DocumentsFilterBarActions.d.ts +39 -0
- package/dist/connection/files/page/DocumentsUploadButton.d.ts +25 -0
- package/dist/connection/files/page/PersistedGridView.d.ts +6 -0
- package/dist/connection/files/page/ProgressiveLoadingChip.d.ts +12 -0
- package/dist/connection/files/page/useDocumentNavigation.d.ts +20 -0
- package/dist/connection/files/review/ConnectedAiReview.d.ts +40 -0
- package/dist/connection/files/review/reviewProgress.d.ts +2 -0
- package/dist/connection/files/store.d.ts +96 -0
- package/dist/connection/files/useDocumentFilters.d.ts +54 -0
- package/dist/connection/files/views/ViewSelector.d.ts +33 -0
- package/dist/connection/files/views/tableViews.d.ts +22 -0
- package/dist/connection/files/views/useTableViews.d.ts +22 -0
- package/dist/connection/mail/ConnectedMailbox.d.ts +2 -2
- package/dist/connection/messenger/ChatAttachments.d.ts +15 -0
- package/dist/connection/messenger/ConnectedChatThread.d.ts +21 -0
- package/dist/connection/messenger/ConnectedGroupMembers.d.ts +20 -0
- package/dist/connection/messenger/ConnectedMessenger.d.ts +52 -0
- package/dist/connection/messenger/index.d.ts +6 -0
- package/dist/connection/messenger/types.d.ts +103 -0
- package/dist/connection/messenger/useMessengerRows.d.ts +19 -0
- package/dist/connection/tags/ConnectedTagsPage.d.ts +2 -35
- package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +19 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +1 -1
- package/dist/connection/viewer/support.d.ts +21 -15
- package/dist/connection/workspaceData.d.ts +134 -8
- package/dist/facts/index.cjs +3 -3
- package/dist/facts/index.js +2 -2
- package/dist/files/bulk/BulkActionsBar.d.ts +9 -5
- package/dist/files/cells/DocumentNameCell.d.ts +4 -2
- package/dist/files/cells/MultiSelectCellEditor.d.ts +13 -0
- package/dist/files/cells/RelatedDocsCell.d.ts +2 -1
- package/dist/files/cells/index.d.ts +1 -0
- package/dist/files/documentColumns.d.ts +15 -0
- package/dist/files/folders/DocumentsFolderButton.d.ts +26 -0
- package/dist/files/folders/FolderTreePicker.d.ts +16 -0
- package/dist/files/folders/index.d.ts +2 -0
- package/dist/files/index.cjs +430 -434
- package/dist/files/index.d.ts +4 -1
- package/dist/files/index.js +5 -5
- package/dist/files/navigator/DocumentSearchList.d.ts +19 -0
- package/dist/files/navigator/ExplorerFileNavigator.d.ts +23 -0
- package/dist/files/navigator/NavDocumentPicker.d.ts +15 -0
- package/dist/files/navigator/NavigatorPickerBar.d.ts +26 -0
- package/dist/files/navigator/index.d.ts +5 -0
- package/dist/files/navigator/types.d.ts +7 -0
- package/dist/files/tags/BulkTagEditor.d.ts +2 -1
- package/dist/files/tags/index.d.ts +0 -2
- package/dist/files/visibility.d.ts +6 -5
- package/dist/home/StartTiles.d.ts +1 -1
- package/dist/home/index.cjs +30 -30
- package/dist/home/index.js +5 -5
- package/dist/index.cjs +684 -694
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +22 -134
- package/dist/index.js.map +1 -1
- package/dist/provider/{BlocksProvider.d.ts → environment.d.ts} +8 -10
- package/dist/provider/host.d.ts +44 -0
- package/dist/retrieval/index.cjs +4 -4
- package/dist/retrieval/index.js +2 -2
- package/dist/shell/index.cjs +44 -44
- package/dist/shell/index.js +3 -3
- package/dist/shell/types.d.ts +1 -1
- package/dist/site/index.cjs +61 -61
- package/dist/site/index.js +2 -2
- package/dist/studio/index.cjs +86 -87
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +15 -16
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +28 -27
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +11 -10
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workspaces/WorkspaceCard.d.ts +1 -1
- package/dist/workspaces/index.cjs +20 -20
- package/dist/workspaces/index.js +4 -4
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-CWFR6A37.cjs.map +0 -1
- package/dist/FactTextEditor-YESAU2IJ.js.map +0 -1
- package/dist/FactTextEditor-YUPBCTXK.cjs.map +0 -1
- package/dist/WorkspaceTableView-DWUE4VQF.js.map +0 -1
- package/dist/WorkspaceTableView-EYLEUZZT.cjs.map +0 -1
- package/dist/chunk-2BHDRVVL.cjs.map +0 -1
- package/dist/chunk-3VULDTNL.cjs.map +0 -1
- package/dist/chunk-4RPBUMHB.cjs.map +0 -1
- package/dist/chunk-5ZIYPZYE.js +0 -2748
- package/dist/chunk-5ZIYPZYE.js.map +0 -1
- package/dist/chunk-6I6CVX5G.cjs +0 -22
- package/dist/chunk-6I6CVX5G.cjs.map +0 -1
- package/dist/chunk-7NL6WJER.cjs +0 -682
- package/dist/chunk-7NL6WJER.cjs.map +0 -1
- package/dist/chunk-CB4TIDEX.cjs +0 -54
- package/dist/chunk-CB4TIDEX.cjs.map +0 -1
- package/dist/chunk-CNHUJRQ4.cjs.map +0 -1
- package/dist/chunk-CROGFB46.cjs.map +0 -1
- package/dist/chunk-DEPF5LQI.js.map +0 -1
- package/dist/chunk-ETZ5A3GU.js.map +0 -1
- package/dist/chunk-EYJMMGXF.js +0 -19
- package/dist/chunk-EYJMMGXF.js.map +0 -1
- package/dist/chunk-F57LNUSZ.js.map +0 -1
- package/dist/chunk-FAXXN7KI.cjs.map +0 -1
- package/dist/chunk-FM3IRQJW.cjs.map +0 -1
- package/dist/chunk-FTZ45WHY.js.map +0 -1
- package/dist/chunk-GC2FSPSQ.cjs.map +0 -1
- package/dist/chunk-KDLX5AA7.js +0 -49
- package/dist/chunk-KDLX5AA7.js.map +0 -1
- package/dist/chunk-KFMRBZQK.js.map +0 -1
- package/dist/chunk-MNG7N6M2.js.map +0 -1
- package/dist/chunk-NPLGB4LI.cjs.map +0 -1
- package/dist/chunk-P2YM67Y5.cjs.map +0 -1
- package/dist/chunk-P6RIBIVN.js.map +0 -1
- package/dist/chunk-Q7CQYYZW.cjs.map +0 -1
- package/dist/chunk-QJFJ5JBF.cjs +0 -2838
- package/dist/chunk-QJFJ5JBF.cjs.map +0 -1
- package/dist/chunk-RATEAOKT.js.map +0 -1
- package/dist/chunk-SDOEHEJP.js.map +0 -1
- package/dist/chunk-SZSJGZSO.js.map +0 -1
- package/dist/chunk-TC3RQNEX.cjs.map +0 -1
- package/dist/chunk-TF7HN5EU.js.map +0 -1
- package/dist/chunk-VF5EUAIV.js.map +0 -1
- package/dist/chunk-VTTZZ4FN.js.map +0 -1
- package/dist/chunk-WK6FVIF7.js +0 -654
- package/dist/chunk-WK6FVIF7.js.map +0 -1
- package/dist/chunk-YF3QUHKN.cjs.map +0 -1
- package/dist/connection/ArbiAppProvider.d.ts +0 -16
- package/dist/connection/files/support.d.ts +0 -40
- package/dist/files/tags/DocTagPopover.d.ts +0 -113
- 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","Badge","Download","Copy","FolderInput","ModalSection","ModalSectionTitle","RadioGroup","cn","RadioGroupItem","Label","testIdOr","ScrollArea","Users","CheckCircle2","AlertTriangle","XCircle","Button","Checkbox","Loader2","Info","Progress","RotateCcw","Share2","Fragment","ImagePlus","Crop","ChevronLeft","ChevronRight","ZoomIn","memo","HtmlPassage","Tags","StickyNote","useMemo","getEntityColor","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","useState","useRef","X","prefixedTestId","Check","Textarea","ExternalLink","Square","RefreshCw","Settings","Unplug","LoaderCircle","Hourglass","AlertCircle","CircleSlash","CheckCircle","Popover","PopoverTrigger","SquareCheckBig","PopoverContent","LabelPickerList","FileX","FailedStageIcon"],"mappings":"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","file":"chunk-5C7DRQQE.cjs","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,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { ModalScaffold } from './chunk-TX2ZICS7.js';
|
|
3
|
-
import {
|
|
3
|
+
import { useSyncExternalStore, useState } from 'react';
|
|
4
4
|
import { Info, AlertCircle } from 'lucide-react';
|
|
5
5
|
import { Button } from '@arbidocs/react/ui';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
|
-
import { notify } from '@arbidocs/react/shell';
|
|
7
|
+
import { useHostConfigRecord, notify } from '@arbidocs/react/shell';
|
|
8
8
|
|
|
9
9
|
var UNMOUNT_DELAY_MS = 300;
|
|
10
10
|
function PromptDialog({
|
|
@@ -44,7 +44,7 @@ function PromptDialog({
|
|
|
44
44
|
}
|
|
45
45
|
function choiceDialog(request2) {
|
|
46
46
|
if (typeof document === "undefined") return Promise.resolve(null);
|
|
47
|
-
return new Promise((
|
|
47
|
+
return new Promise((resolve2) => {
|
|
48
48
|
const container = document.createElement("div");
|
|
49
49
|
document.body.appendChild(container);
|
|
50
50
|
let settled = false;
|
|
@@ -53,7 +53,7 @@ function choiceDialog(request2) {
|
|
|
53
53
|
const onSettle = (value) => {
|
|
54
54
|
if (settled) return;
|
|
55
55
|
settled = true;
|
|
56
|
-
|
|
56
|
+
resolve2(value);
|
|
57
57
|
setTimeout(() => {
|
|
58
58
|
root.unmount();
|
|
59
59
|
container.remove();
|
|
@@ -126,60 +126,27 @@ var defaultEnvironment = {
|
|
|
126
126
|
openProject: noop,
|
|
127
127
|
openWorkspace: noop
|
|
128
128
|
};
|
|
129
|
-
var
|
|
130
|
-
function
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
openProject,
|
|
142
|
-
openWorkspace
|
|
143
|
-
}) {
|
|
144
|
-
const parent = useContext(BlocksContext);
|
|
145
|
-
const value = useMemo(
|
|
146
|
-
() => ({
|
|
147
|
-
linkComponent: linkComponent ?? parent.linkComponent,
|
|
148
|
-
navigate: navigate ?? parent.navigate,
|
|
149
|
-
notify: notify ?? parent.notify,
|
|
150
|
-
confirm: confirm ?? parent.confirm,
|
|
151
|
-
choose: choose ?? parent.choose,
|
|
152
|
-
runtimeConfig: runtimeConfig ?? parent.runtimeConfig,
|
|
153
|
-
openDocument: openDocument ?? parent.openDocument,
|
|
154
|
-
openConversation: openConversation ?? parent.openConversation,
|
|
155
|
-
openSettings: openSettings ? (section) => {
|
|
156
|
-
requestSettingsSection(section);
|
|
157
|
-
openSettings(section);
|
|
158
|
-
} : parent.openSettings,
|
|
159
|
-
openProject: openProject ?? parent.openProject,
|
|
160
|
-
openWorkspace: openWorkspace ?? parent.openWorkspace
|
|
161
|
-
}),
|
|
162
|
-
[
|
|
163
|
-
parent,
|
|
164
|
-
linkComponent,
|
|
165
|
-
navigate,
|
|
166
|
-
notify,
|
|
167
|
-
confirm,
|
|
168
|
-
choose,
|
|
169
|
-
runtimeConfig,
|
|
170
|
-
openDocument,
|
|
171
|
-
openConversation,
|
|
172
|
-
openSettings,
|
|
173
|
-
openProject,
|
|
174
|
-
openWorkspace
|
|
175
|
-
]
|
|
176
|
-
);
|
|
177
|
-
return /* @__PURE__ */ jsx(BlocksContext.Provider, { value, children });
|
|
129
|
+
var resolved = /* @__PURE__ */ new WeakMap();
|
|
130
|
+
function resolve(environment) {
|
|
131
|
+
const { openSettings } = environment;
|
|
132
|
+
return {
|
|
133
|
+
...defaultEnvironment,
|
|
134
|
+
...environment,
|
|
135
|
+
// The section is recorded for `ConnectedSettingsPage` before the host shows its settings.
|
|
136
|
+
openSettings: openSettings ? (section) => {
|
|
137
|
+
requestSettingsSection(section);
|
|
138
|
+
openSettings(section);
|
|
139
|
+
} : defaultEnvironment.openSettings
|
|
140
|
+
};
|
|
178
141
|
}
|
|
179
142
|
function useBlocksEnvironment() {
|
|
180
|
-
|
|
143
|
+
const environment = useHostConfigRecord().environment;
|
|
144
|
+
if (!environment) return defaultEnvironment;
|
|
145
|
+
let value = resolved.get(environment);
|
|
146
|
+
if (!value) resolved.set(environment, value = resolve(environment));
|
|
147
|
+
return value;
|
|
181
148
|
}
|
|
182
149
|
|
|
183
|
-
export {
|
|
184
|
-
//# sourceMappingURL=chunk-
|
|
185
|
-
//# sourceMappingURL=chunk-
|
|
150
|
+
export { requestSettingsSection, useBlocksEnvironment, useRequestedSettingsSection };
|
|
151
|
+
//# sourceMappingURL=chunk-5NWY3FXQ.js.map
|
|
152
|
+
//# sourceMappingURL=chunk-5NWY3FXQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider/dialogs.tsx","../src/provider/settings-section.ts","../src/provider/environment.ts"],"names":["request","resolve","notifyStore"],"mappings":"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","file":"chunk-5NWY3FXQ.js","sourcesContent":["/**\n * Promise-based prompt dialogs — the blocks replacement for `window.confirm` / `window.alert`.\n * Each call mounts its own short-lived React root, so it works from any event handler with no\n * dialog host in the tree. Hosts reach these through `useBlocksEnvironment().confirm` / `.choose`\n * (the defaults), which lets an app swap in its own dialogs without touching callers.\n *\n * For a confirmation with a loading state, render the declarative {@link ConfirmDialog} instead.\n */\nimport { useState, type ReactElement } from 'react'\nimport { AlertCircle, Info } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\ntype ChoiceVariant = 'default' | 'destructive' | 'outline'\n\nexport interface PromptChoice<T extends string> {\n label: string\n value: T\n variant?: ChoiceVariant\n}\n\n/** A dialog offering arbitrary choices (e.g. Overwrite / Skip / Cancel). */\nexport interface ChoiceRequest<T extends string> {\n message: string\n title?: string\n choices: PromptChoice<T>[]\n icon?: 'alert' | 'info'\n /** Dialog test id; each button is `${testId}-${value}-button`. Default `choice-modal`. */\n testId?: string\n}\n\n/**\n * `confirm` — Cancel / Confirm (destructive); `yesno` — No / Yes; `alert` — a single OK\n * (resolves true once acknowledged).\n */\nexport type ConfirmKind = 'confirm' | 'yesno' | 'alert'\n\nexport interface ConfirmRequest {\n message: string\n /** Default: \"Alert\" for `alert`, else \"Confirm\". */\n title?: string\n kind?: ConfirmKind\n}\n\n/** Close animation length before the root is unmounted. */\nconst UNMOUNT_DELAY_MS = 300\n\nfunction PromptDialog<T extends string>({\n request,\n onSettle,\n}: {\n request: ChoiceRequest<T>\n onSettle: (value: T | null) => void\n}): ReactElement {\n const [open, setOpen] = useState(true)\n const { message, title = 'Confirm', choices, icon = 'alert', testId = 'choice-modal' } = request\n const settle = (value: T | null) => {\n setOpen(false)\n onSettle(value)\n }\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => {\n if (!next) settle(null)\n }}\n title={title}\n icon={\n icon === 'info' ? (\n <Info className=\"h-5 w-5 text-blue-text\" aria-hidden=\"true\" />\n ) : (\n <AlertCircle className=\"h-5 w-5\" aria-hidden=\"true\" />\n )\n }\n description={<span className=\"whitespace-pre-line\">{message}</span>}\n showDescription\n testId={testId}\n >\n <ModalScaffold.Footer>\n {choices.map((choice) => (\n <Button\n key={choice.value}\n variant={choice.variant ?? 'default'}\n onClick={() => settle(choice.value)}\n data-testid={`${testId}-${choice.value.toLowerCase()}-button`}\n >\n {choice.label}\n </Button>\n ))}\n </ModalScaffold.Footer>\n </ModalScaffold>\n )\n}\n\n/** Show a choice dialog; resolves with the chosen `value`, or `null` when dismissed. */\nexport function choiceDialog<T extends string>(request: ChoiceRequest<T>): Promise<T | null> {\n if (typeof document === 'undefined') return Promise.resolve(null)\n return new Promise((resolve) => {\n const container = document.createElement('div')\n document.body.appendChild(container)\n let settled = false\n void import('react-dom/client').then(({ createRoot }) => {\n const root = createRoot(container)\n const onSettle = (value: T | null) => {\n if (settled) return\n settled = true\n resolve(value)\n setTimeout(() => {\n root.unmount()\n container.remove()\n }, UNMOUNT_DELAY_MS)\n }\n root.render(<PromptDialog request={request} onSettle={onSettle} />)\n })\n })\n}\n\nconst CONFIRM_CHOICES: Record<\n ConfirmKind,\n PromptChoice<'confirm' | 'cancel' | 'yes' | 'no' | 'ok'>[]\n> = {\n confirm: [\n { label: 'Cancel', value: 'cancel', variant: 'outline' },\n { label: 'Confirm', value: 'confirm', variant: 'destructive' },\n ],\n yesno: [\n { label: 'No', value: 'no', variant: 'outline' },\n { label: 'Yes', value: 'yes' },\n ],\n alert: [{ label: 'OK', value: 'ok' }],\n}\n\nconst CONFIRM_TEST_ID: Record<ConfirmKind, string> = {\n confirm: 'confirmation-modal',\n yesno: 'yes-no-modal',\n alert: 'alert-modal',\n}\n\n/** Show a confirmation; resolves true on Confirm / Yes / OK, false on cancel or dismissal. */\nexport async function confirmDialog(request: ConfirmRequest): Promise<boolean> {\n const kind = request.kind ?? 'confirm'\n const choice = await choiceDialog({\n message: request.message,\n title: request.title ?? (kind === 'alert' ? 'Alert' : 'Confirm'),\n choices: CONFIRM_CHOICES[kind],\n icon: kind === 'alert' ? 'info' : 'alert',\n testId: CONFIRM_TEST_ID[kind],\n })\n return choice === 'confirm' || choice === 'yes' || choice === 'ok'\n}\n","/**\n * The settings section asked for last, so `openSettings(section)` opens that section in every host.\n *\n * `BlocksEnvironment.openSettings` records the section here before the host shows its settings\n * (a panel, a route); a `ConnectedSettingsPage` without its own `section` prop opens at it and\n * follows every later request, even one for the section asked for before. A host that keeps the\n * open section itself (`section` + `onSectionChange`) routes `openSettings` to its own state.\n */\nimport { useSyncExternalStore } from 'react'\n\nexport interface SettingsSectionRequest {\n section: string\n /** Increases with every request, so asking again for the same section is a new request. */\n seq: number\n}\n\nlet request: SettingsSectionRequest | undefined\nconst listeners = new Set<() => void>()\n\n/** Ask for a settings section; no section asks for none (the page stays where it is). */\nexport function requestSettingsSection(section?: string): void {\n if (!section) return\n request = { section, seq: (request?.seq ?? 0) + 1 }\n listeners.forEach((listener) => listener())\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\nconst snapshot = () => request\n\n/** The last settings-section request (`undefined` until there is one). */\nexport function useRequestedSettingsSection(): SettingsSectionRequest | undefined {\n return useSyncExternalStore(subscribe, snapshot, snapshot)\n}\n","import type { ReactNode } from 'react'\nimport {\n notify as notifyStore,\n useHostConfigRecord,\n type NotifyOptions,\n type NotifyVariant,\n} from '@arbidocs/react/shell'\nimport type { BlockLinkComponent } from '../components/blockLink'\nimport { choiceDialog, confirmDialog, type ChoiceRequest, type ConfirmRequest } from './dialogs'\nimport { requestSettingsSection } from './settings-section'\n\n/** What blocks need from the host's runtime configuration (the app's `config.json`). */\nexport interface BlocksRuntimeConfig {\n /** Origin of the ARBI API; `''` means the page's own origin. */\n apiBaseUrl: string\n /** The deployment's domain, e.g. `www.arbidocs.com` (deep links, key derivation, labels). */\n deploymentDomain: string\n}\n\nexport interface OpenDocumentOptions {\n /** 1-based page to scroll to. */\n page?: number\n /** Passage (chunk) to highlight. */\n passageId?: string\n}\n\n/**\n * The only way blocks reach the host app's environment: the host configuration's `environment`\n * (`<ArbiHost config={{ environment: { navigate, notify, … } }}>`). Blocks never import a router, a\n * toast library or an app store; the host gives what it has, and every field has a safe default so\n * a block renders correctly with no host at all. A nested host overrides only the fields it gives\n * and inherits the rest.\n */\nexport interface BlocksEnvironment {\n /** Router-aware link (keeps navigation in-SPA). Default: a plain `<a href>`. */\n linkComponent?: BlockLinkComponent\n /** Imperative navigation for buttons and keyboard shortcuts. Default: `window.location.assign`. */\n navigate: (href: string) => void\n /** Surface a transient message (and record it in the notification centre). Default: the shared\n * `@arbidocs/react` notify store, rendered by its `<Toaster/>`. */\n notify: (message: ReactNode, kind?: NotifyVariant, options?: NotifyOptions) => void\n /** Ask the user to confirm. Default: the blocks prompt dialog. */\n confirm: (request: ConfirmRequest) => Promise<boolean>\n /** Ask the user to pick one of several choices; `null` when dismissed. Default: the blocks\n * prompt dialog. */\n choose: <T extends string>(request: ChoiceRequest<T>) => Promise<T | null>\n /** Deployment configuration. Default: same-origin API on the page's own host. */\n runtimeConfig: BlocksRuntimeConfig\n /** Open a document (optionally at a page / passage) wherever the host shows documents.\n * Default: no-op. */\n openDocument: (documentId: string, options?: OpenDocumentOptions) => void\n /** Open a conversation thread, optionally scrolled to a message. Default: no-op. */\n openConversation: (conversationId: string, options?: { messageId?: string }) => void\n /**\n * Open the user's settings, optionally at a section (a `ConnectedSettingsPage` section id).\n * The section is always recorded for `ConnectedSettingsPage` first (`requestSettingsSection`);\n * the host's handler then shows its settings. Default: only that record.\n */\n openSettings: (section?: string) => void\n /** Open a project. Default: no-op. */\n openProject: (projectId: string) => void\n /**\n * Show a workspace (its own page). Under `defaultHost`'s sign-in layer the kits select it first\n * (`useConnectedWorkspace().openWorkspace`); a host that keeps its own session switches to it\n * here. `name` is for the host's messages. Default: no-op.\n */\n openWorkspace: (workspaceId: string, options?: { name?: string }) => void\n}\n\nconst noop = () => {}\n\nconst defaultEnvironment: BlocksEnvironment = {\n navigate: (href) => {\n if (typeof window !== 'undefined') window.location.assign(href)\n },\n notify: (message, kind = 'info', options) => {\n notifyStore[kind](message, options)\n },\n confirm: confirmDialog,\n choose: choiceDialog,\n runtimeConfig: {\n apiBaseUrl: '',\n deploymentDomain: typeof window !== 'undefined' ? window.location.host : '',\n },\n openDocument: noop,\n openConversation: noop,\n openSettings: requestSettingsSection,\n openProject: noop,\n openWorkspace: noop,\n}\n\nconst resolved = new WeakMap<object, BlocksEnvironment>()\n\nfunction resolve(environment: Partial<BlocksEnvironment>): BlocksEnvironment {\n const { openSettings } = environment\n return {\n ...defaultEnvironment,\n ...environment,\n // The section is recorded for `ConnectedSettingsPage` before the host shows its settings.\n openSettings: openSettings\n ? (section?: string) => {\n requestSettingsSection(section)\n openSettings(section)\n }\n : defaultEnvironment.openSettings,\n }\n}\n\n/** The host's environment, every field filled in (the defaults where the host gives none). */\nexport function useBlocksEnvironment(): BlocksEnvironment {\n const environment = useHostConfigRecord().environment as Partial<BlocksEnvironment> | undefined\n if (!environment) return defaultEnvironment\n let value = resolved.get(environment)\n if (!value) resolved.set(environment, (value = resolve(environment)))\n return value\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Callout } from './chunk-UJE32SST.js';
|
|
3
|
-
import { SectionHeader, EmptyStrip } from './chunk-
|
|
4
|
-
import { ActionLink } from './chunk-
|
|
3
|
+
import { SectionHeader, EmptyStrip } from './chunk-UORU5S7Y.js';
|
|
4
|
+
import { ActionLink } from './chunk-H7PHANI4.js';
|
|
5
5
|
import { cn, Button } from '@arbidocs/react/ui';
|
|
6
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
7
|
import { Plus } from 'lucide-react';
|
|
@@ -300,5 +300,5 @@ function RecentList({
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
export { CreateTile, DASHBOARD_QUIET_ACTION_CLASS, DashboardAction, DashboardBand, DashboardColumns, DashboardRoot, FactMark, FactsStrip, HomeCenteredColumn, HomeCenteredScroll, HomeFrame, HomeLoadError, HomeMain, RecentList };
|
|
303
|
-
//# sourceMappingURL=chunk-
|
|
304
|
-
//# sourceMappingURL=chunk-
|
|
303
|
+
//# sourceMappingURL=chunk-5WLORPGX.js.map
|
|
304
|
+
//# sourceMappingURL=chunk-5WLORPGX.js.map
|