@arbidocs/blocks 0.4.159 → 0.4.161
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +22097 -14743
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +11 -7
- package/dist/connect/index.js +15203 -7912
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +83 -138
- package/dist/connect/viewer.cjs.map +1 -1
- package/dist/connect/viewer.d.ts +3 -2
- package/dist/connect/viewer.js +25 -82
- 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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocumentsFilterBarActions
|
|
3
|
+
*
|
|
4
|
+
* Right-hand action cluster rendered inside DocumentsFilterBar. Content
|
|
5
|
+
* depends on the active Documents view:
|
|
6
|
+
* - grid / navigator: saved-views selector, row density control, viewer toggle
|
|
7
|
+
* - explorer: new-folder button, sort controls, tile-size zoom
|
|
8
|
+
*
|
|
9
|
+
* Kept out of Documents.tsx purely to shrink that file — this component
|
|
10
|
+
* owns no state of its own, it's a pass-through view for page-level state.
|
|
11
|
+
*/
|
|
12
|
+
import type { GridApi } from 'ag-grid-community';
|
|
13
|
+
import type { ExplorerSort } from '../../../files/folders';
|
|
14
|
+
import type { GridDocument as Doc } from '../grid/documentColumns';
|
|
15
|
+
import { type LoadableTableView } from '../views/ViewSelector';
|
|
16
|
+
type DocumentsViewMode = 'grid' | 'explorer' | 'navigator';
|
|
17
|
+
export interface DocumentsFilterBarActionsProps {
|
|
18
|
+
isModal: boolean;
|
|
19
|
+
documentsViewMode: DocumentsViewMode;
|
|
20
|
+
getGridApi: () => GridApi<Doc> | null;
|
|
21
|
+
defaultVisibleColumns: string[];
|
|
22
|
+
onApplyView: (columns: string[], gridApi?: GridApi<Doc>) => void;
|
|
23
|
+
onLoadView: (view: LoadableTableView, gridApi: GridApi<Doc>) => void;
|
|
24
|
+
explorerTileSize: number;
|
|
25
|
+
onExplorerTileSizeChange: (size: number) => void;
|
|
26
|
+
documentsRowHeight: number;
|
|
27
|
+
onDocumentsRowHeightChange: (height: number) => void;
|
|
28
|
+
currentDocument: Doc | null;
|
|
29
|
+
isDocumentViewerEnabled: boolean;
|
|
30
|
+
onToggleDocumentViewer: (docId: string) => void;
|
|
31
|
+
explorerSort: ExplorerSort;
|
|
32
|
+
onExplorerSortChange: (sort: ExplorerSort) => void;
|
|
33
|
+
explorerSortReversed: boolean;
|
|
34
|
+
onExplorerSortReversedChange: (reversed: boolean) => void;
|
|
35
|
+
/** Changes whenever the grid's saved state does (the saved-views menu recomputes). */
|
|
36
|
+
gridStateVersion: unknown;
|
|
37
|
+
}
|
|
38
|
+
export declare function DocumentsFilterBarActions({ isModal, documentsViewMode, getGridApi, defaultVisibleColumns, onApplyView, onLoadView, explorerTileSize, onExplorerTileSizeChange, documentsRowHeight, onDocumentsRowHeightChange, currentDocument, isDocumentViewerEnabled, onToggleDocumentViewer, explorerSort, onExplorerSortChange, explorerSortReversed, onExplorerSortReversedChange, gridStateVersion, }: DocumentsFilterBarActionsProps): import("react").JSX.Element | null;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocumentsUploadButton
|
|
3
|
+
*
|
|
4
|
+
* Binding for the page's primary "Add" action: maps upload sources + permissions to the blocks
|
|
5
|
+
* `FilesAddMenu`. Disabled with an explanatory tooltip for guests / non-members.
|
|
6
|
+
*/
|
|
7
|
+
import type { UploadSource } from '../upload/ConnectedUploadDropzone';
|
|
8
|
+
export interface DocumentsUploadButtonProps {
|
|
9
|
+
isCompact: boolean;
|
|
10
|
+
canUpload: boolean;
|
|
11
|
+
isGuest: boolean;
|
|
12
|
+
/** Called with the chosen source when a dropdown item is selected. */
|
|
13
|
+
onSelectSource: (source: UploadSource) => void;
|
|
14
|
+
/** Opens the "Email this workspace" modal (mail it in later, vs adding now). Absent: not offered. */
|
|
15
|
+
onEmailWorkspace?: () => void;
|
|
16
|
+
/** Starts a blank, frontend-only draft in the Document Viewer. Absent: not offered. */
|
|
17
|
+
onCreateNew?: () => void;
|
|
18
|
+
/** Takes a photo into a new document. Absent: not offered. */
|
|
19
|
+
onTakePhoto?: () => void;
|
|
20
|
+
/** Trigger height. `sm` is a thinner button; defaults to the standard size. */
|
|
21
|
+
size?: 'default' | 'sm';
|
|
22
|
+
/** Extra classes on the trigger button, e.g. to shrink it in a card header. */
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function DocumentsUploadButton({ isCompact, canUpload, isGuest, onSelectSource, onEmailWorkspace, onCreateNew, onTakePhoto, size, className, }: DocumentsUploadButtonProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The core `GridView` with its column state (order, widths, sort) kept on this device, per grid
|
|
3
|
+
* id: the files page's default grid for a host that keeps no grid state of its own.
|
|
4
|
+
*/
|
|
5
|
+
import { type GridViewProps } from '../../../files/GridView';
|
|
6
|
+
export declare function PersistedGridView<T>(props: GridViewProps<T>): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subtle "Loading documents list..." indicator shown while the progressive
|
|
3
|
+
* document loader is appending pages. Rendered centered in the TabHeader.
|
|
4
|
+
*
|
|
5
|
+
* Hidden once the loader has finished (all pages done).
|
|
6
|
+
*
|
|
7
|
+
* The user can still interact with the table while loading continues; the
|
|
8
|
+
* indicator just surfaces that a background fetch is extending the list.
|
|
9
|
+
* Document count itself is shown elsewhere (TabHeader badge), so this
|
|
10
|
+
* component deliberately doesn't repeat it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function ProgressiveLoadingChip(): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useDocumentNavigation Hook
|
|
3
|
+
*
|
|
4
|
+
* Provides navigation controls and download functionality for document navigation.
|
|
5
|
+
*/
|
|
6
|
+
type Doc = {
|
|
7
|
+
external_id: string;
|
|
8
|
+
};
|
|
9
|
+
interface UseDocumentNavigationProps<D extends Doc> {
|
|
10
|
+
currentDoc: D | null;
|
|
11
|
+
documents: D[];
|
|
12
|
+
onNavigate: (docId: string) => void;
|
|
13
|
+
}
|
|
14
|
+
interface UseDocumentNavigationResult {
|
|
15
|
+
currentIndex: number;
|
|
16
|
+
handlePrevious: () => void;
|
|
17
|
+
handleNext: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function useDocumentNavigation<D extends Doc>({ currentDoc, documents, onNavigate, }: UseDocumentNavigationProps<D>): UseDocumentNavigationResult;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AiReviewModal — the "AI Review" flow.
|
|
3
|
+
*
|
|
4
|
+
* You write what you want to know in one prompt; the modal creates an
|
|
5
|
+
* Annotation field (named after the question), runs the AI across the selected
|
|
6
|
+
* documents, shows each answer as it lands, and surfaces the new column in the
|
|
7
|
+
* grid. No tag editor, no separate field-name step.
|
|
8
|
+
*
|
|
9
|
+
* The active run (field + the docs it ran over) is held in the store, so the
|
|
10
|
+
* "annotation run finished" toast can re-open this modal on its results even after
|
|
11
|
+
* you've closed it. (Applying existing tags lives in the Tags sidebar.)
|
|
12
|
+
*
|
|
13
|
+
* The Tags page opens the same flow for one kind (`kind`): a new tag is created as that kind,
|
|
14
|
+
* and the picker offers only tags of it. With a tag open there (`tag`), the modal starts on that
|
|
15
|
+
* tag with its saved instruction, and running it saves the edited question back to the tag.
|
|
16
|
+
*/
|
|
17
|
+
import { type TagKind } from '@arbidocs/sdk/browser';
|
|
18
|
+
import { type WorkspaceDocument } from '@arbidocs/react';
|
|
19
|
+
import type { GridApi } from 'ag-grid-community';
|
|
20
|
+
type Doc = WorkspaceDocument;
|
|
21
|
+
export interface ConnectedAiReviewProps {
|
|
22
|
+
open: boolean;
|
|
23
|
+
onOpenChange: (open: boolean) => void;
|
|
24
|
+
/** The documents to review (the current bulk selection). */
|
|
25
|
+
documents: Doc[];
|
|
26
|
+
getGridApi: () => GridApi | null;
|
|
27
|
+
/** Make the new field visible in the grid (same handler the panel uses). */
|
|
28
|
+
onReorderColumns: (visibleIds: string[], gridApi?: GridApi) => void;
|
|
29
|
+
/** Review tags of this kind only: the picker offers them, and a new one is created as it. */
|
|
30
|
+
kind?: Extract<TagKind, 'label' | 'annotation' | 'issue'>;
|
|
31
|
+
/** Start on this tag, its saved instruction in the prompt. */
|
|
32
|
+
tag?: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
};
|
|
36
|
+
/** `documents` is the whole workspace, not a selection (shapes the subtitle). */
|
|
37
|
+
allDocuments?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function ConnectedAiReview({ open, onOpenChange, documents, getGridApi, onReorderColumns, kind, tag: startTag, allDocuments, }: ConnectedAiReviewProps): import("react").JSX.Element;
|
|
40
|
+
export {};
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* documents, so a new one is a placeholder until something is moved into it), per workspace, for
|
|
4
4
|
* the session (kept in `sessionStorage`, so a reload keeps them).
|
|
5
5
|
*/
|
|
6
|
+
import type { GridState } from 'ag-grid-community';
|
|
7
|
+
import type { ExplorerFolder } from '../../files/folders/folderPaths';
|
|
6
8
|
interface FilesState {
|
|
7
9
|
/** Placeholder folder paths per workspace. */
|
|
8
10
|
pendingFolders: Readonly<Record<string, readonly string[]>>;
|
|
@@ -24,4 +26,98 @@ export declare const useFilesStore: import("zustand").UseBoundStore<Omit<import(
|
|
|
24
26
|
}>;
|
|
25
27
|
/** A workspace's placeholder folders. */
|
|
26
28
|
export declare function usePendingFolders(workspaceId: string | null | undefined): readonly string[];
|
|
29
|
+
/** How the files page shows the documents: a table, the explorer, review one by one, or search. */
|
|
30
|
+
export type FilesViewMode = 'grid' | 'explorer' | 'navigator' | 'search';
|
|
31
|
+
interface FilesPrefsState {
|
|
32
|
+
/** The documents list's tri-state filters (filter id → include / exclude / off). */
|
|
33
|
+
documentFilters: Readonly<Record<string, 'include' | 'exclude' | null>>;
|
|
34
|
+
setDocumentFilters: (filters: Record<string, 'include' | 'exclude' | null>) => void;
|
|
35
|
+
/** The files page's view. */
|
|
36
|
+
viewMode: FilesViewMode;
|
|
37
|
+
setViewMode: (mode: FilesViewMode) => void;
|
|
38
|
+
/** The table's row height (density). */
|
|
39
|
+
rowHeight: number;
|
|
40
|
+
setRowHeight: (height: number) => void;
|
|
41
|
+
}
|
|
42
|
+
/** The Files kits' preferences, kept on this device (`localStorage`) across sessions. */
|
|
43
|
+
export declare const useFilesPrefs: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<FilesPrefsState>, "setState" | "persist"> & {
|
|
44
|
+
setState(partial: FilesPrefsState | Partial<FilesPrefsState> | ((state: FilesPrefsState) => FilesPrefsState | Partial<FilesPrefsState>), replace?: false | undefined): unknown;
|
|
45
|
+
setState(state: FilesPrefsState | ((state: FilesPrefsState) => FilesPrefsState), replace: true): unknown;
|
|
46
|
+
persist: {
|
|
47
|
+
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<FilesPrefsState, unknown, unknown>>) => void;
|
|
48
|
+
clearStorage: () => void;
|
|
49
|
+
rehydrate: () => Promise<void> | void;
|
|
50
|
+
hasHydrated: () => boolean;
|
|
51
|
+
onHydrate: (fn: (state: FilesPrefsState) => void) => () => void;
|
|
52
|
+
onFinishHydration: (fn: (state: FilesPrefsState) => void) => () => void;
|
|
53
|
+
getOptions: () => Partial<import("zustand/middleware").PersistOptions<FilesPrefsState, unknown, unknown>>;
|
|
54
|
+
};
|
|
55
|
+
}>;
|
|
56
|
+
/** An AI review run: the fields, the documents, and which of them the server finished. */
|
|
57
|
+
export interface AiReviewRun {
|
|
58
|
+
tags: {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
}[];
|
|
62
|
+
docIds: string[];
|
|
63
|
+
/** The documents the server finished (a finished cell with no value will not fill). */
|
|
64
|
+
finishedDocIds?: string[];
|
|
65
|
+
/** It replaces values already there: a cell shows its new value only once finished. */
|
|
66
|
+
replacing?: boolean;
|
|
67
|
+
}
|
|
68
|
+
interface AiReviewState {
|
|
69
|
+
/** The AI review dialog is open. */
|
|
70
|
+
open: boolean;
|
|
71
|
+
/** The run on screen, kept after closing so "View results" can bring the answers back. */
|
|
72
|
+
run: AiReviewRun | null;
|
|
73
|
+
setOpen: (open: boolean) => void;
|
|
74
|
+
setRun: (run: AiReviewRun | null) => void;
|
|
75
|
+
/** The server finished these documents of the run (with or without a value). */
|
|
76
|
+
markFinished: (docIds: string[]) => void;
|
|
77
|
+
}
|
|
78
|
+
/** The AI review dialog and its run, reachable from outside React (a finished-run notice). */
|
|
79
|
+
export declare const useAiReviewStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AiReviewState>>;
|
|
80
|
+
interface GridStatesState {
|
|
81
|
+
/** AG Grid's saved state (columns, widths, sort) per grid id. */
|
|
82
|
+
gridStates: Readonly<Record<string, GridState>>;
|
|
83
|
+
setGridState: (gridId: string, state: GridState) => void;
|
|
84
|
+
}
|
|
85
|
+
/** The Files grids' saved state, kept on this device, for hosts that keep none of their own. */
|
|
86
|
+
export declare const useFilesGridStates: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<GridStatesState>, "setState" | "persist"> & {
|
|
87
|
+
setState(partial: GridStatesState | Partial<GridStatesState> | ((state: GridStatesState) => GridStatesState | Partial<GridStatesState>), replace?: false | undefined): unknown;
|
|
88
|
+
setState(state: GridStatesState | ((state: GridStatesState) => GridStatesState), replace: true): unknown;
|
|
89
|
+
persist: {
|
|
90
|
+
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<GridStatesState, unknown, unknown>>) => void;
|
|
91
|
+
clearStorage: () => void;
|
|
92
|
+
rehydrate: () => Promise<void> | void;
|
|
93
|
+
hasHydrated: () => boolean;
|
|
94
|
+
onHydrate: (fn: (state: GridStatesState) => void) => () => void;
|
|
95
|
+
onFinishHydration: (fn: (state: GridStatesState) => void) => () => void;
|
|
96
|
+
getOptions: () => Partial<import("zustand/middleware").PersistOptions<GridStatesState, unknown, unknown>>;
|
|
97
|
+
};
|
|
98
|
+
}>;
|
|
99
|
+
/** A document the Delete confirmation asks about. */
|
|
100
|
+
export interface DeleteRequestDocument {
|
|
101
|
+
external_id: string;
|
|
102
|
+
file_name?: string | null;
|
|
103
|
+
doc_metadata?: {
|
|
104
|
+
title?: string | null;
|
|
105
|
+
} | null;
|
|
106
|
+
}
|
|
107
|
+
interface FilesDialogsState {
|
|
108
|
+
/** Move the selection (or `folder`) to a folder. */
|
|
109
|
+
move: {
|
|
110
|
+
folder: ExplorerFolder | null;
|
|
111
|
+
} | null;
|
|
112
|
+
openMove: (folder?: ExplorerFolder | null) => void;
|
|
113
|
+
closeMove: () => void;
|
|
114
|
+
/** Edit the selection's labels and fields. */
|
|
115
|
+
bulkTagsOpen: boolean;
|
|
116
|
+
setBulkTagsOpen: (open: boolean) => void;
|
|
117
|
+
/** Confirm deleting one document. */
|
|
118
|
+
deleteRequest: DeleteRequestDocument | null;
|
|
119
|
+
requestDelete: (doc: DeleteRequestDocument | null) => void;
|
|
120
|
+
}
|
|
121
|
+
/** The files page's dialogs, also opened from outside it (commands, the viewer's related files). */
|
|
122
|
+
export declare const useFilesDialogs: import("zustand").UseBoundStore<import("zustand").StoreApi<FilesDialogsState>>;
|
|
27
123
|
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useDocumentsFilters Hook
|
|
3
|
+
*
|
|
4
|
+
* Manages document filter state, options, and groups for the Documents page.
|
|
5
|
+
* Uses the shared useFilters hook for core filtering logic.
|
|
6
|
+
*
|
|
7
|
+
* Includes a binary "source filter" toggle (Uploaded vs Generated) that
|
|
8
|
+
* pre-filters documents before tri-state filters are applied, and a
|
|
9
|
+
* hierarchical folder tree with prefix matching.
|
|
10
|
+
*/
|
|
11
|
+
import { type WorkspaceDocument } from '@arbidocs/react';
|
|
12
|
+
import type { TagResponse } from '@arbidocs/sdk/browser';
|
|
13
|
+
import type { TriState, TriStateGroup, TriStateOption } from '../../settings/TriStateFilterMenu';
|
|
14
|
+
type Doc = WorkspaceDocument;
|
|
15
|
+
type Tag = TagResponse;
|
|
16
|
+
/** A filter of the documents list, with what it matches. */
|
|
17
|
+
export type DocumentFilterOption<T extends string = string> = TriStateOption<T> & {
|
|
18
|
+
/** A label's colour (chips). */
|
|
19
|
+
color?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Keep the oldest of each set of documents with the same content (exact duplicates). */
|
|
22
|
+
export declare function deduplicateByContentHash<T extends {
|
|
23
|
+
content_hash?: string | null;
|
|
24
|
+
created_at: string;
|
|
25
|
+
}>(items: T[]): T[];
|
|
26
|
+
export type DocumentFilterId = 'source_uploaded' | 'source_generated' | 'shared' | 'in_chat' | 'available_offline' | 'uploaded_by_me' | 'updated_last_week' | 'duplicates' | 'parent_child' | 'indexing_complete' | 'indexing_failed' | 'indexing_in_progress' | `folder:${string}` | string;
|
|
27
|
+
export type SearchFieldId = 'title' | 'file_name' | 'folder' | 'doc_author' | 'doc_subject' | 'doc_nature' | 'doc_date' | 'status' | 'file_type' | 'content_hash' | 'custom_fields' | 'external_id';
|
|
28
|
+
export declare const SEARCH_FIELD_OPTIONS: {
|
|
29
|
+
value: SearchFieldId;
|
|
30
|
+
label: string;
|
|
31
|
+
}[];
|
|
32
|
+
export declare const DEFAULT_SEARCH_FIELDS: SearchFieldId[];
|
|
33
|
+
interface UseDocumentFiltersParams<D extends Doc> {
|
|
34
|
+
documents: D[];
|
|
35
|
+
allTags: Tag[];
|
|
36
|
+
/** The documents in the open conversation (the "In Chat" filter). */
|
|
37
|
+
inConversationDocuments: ReadonlyArray<{
|
|
38
|
+
docId: string;
|
|
39
|
+
} | undefined>;
|
|
40
|
+
searchQuery?: string;
|
|
41
|
+
searchFields?: SearchFieldId[];
|
|
42
|
+
}
|
|
43
|
+
export declare function useDocumentFilters<D extends Doc>({ documents, allTags, inConversationDocuments, searchQuery, searchFields, }: UseDocumentFiltersParams<D>): {
|
|
44
|
+
documentFilters: Map<string, TriState>;
|
|
45
|
+
setDocumentFilters: (next: Map<DocumentFilterId, TriState>) => void;
|
|
46
|
+
folderPath: string[];
|
|
47
|
+
setFolderPath: (path: string[]) => void;
|
|
48
|
+
filteredDocuments: D[];
|
|
49
|
+
documentFilterOptions: DocumentFilterOption<string>[];
|
|
50
|
+
documentFilterGroups: TriStateGroup<string>[];
|
|
51
|
+
hasActiveFilters: boolean;
|
|
52
|
+
clearFilters: () => void;
|
|
53
|
+
};
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewSelector: data binding for the saved-views popover (UI lives in
|
|
3
|
+
* `@arbidocs/blocks` `ViewSelectorMenu`).
|
|
4
|
+
*
|
|
5
|
+
* Lives in the Documents page TabHeader. Derives the active view from the actual grid column
|
|
6
|
+
* state.
|
|
7
|
+
*/
|
|
8
|
+
import type { GridApi } from 'ag-grid-community';
|
|
9
|
+
import type { SavedGridView } from '../../../files/views/gridViews';
|
|
10
|
+
import type { GridDocument as Doc } from '../grid/documentColumns';
|
|
11
|
+
/** A view as loaded: a saved TableView, or a built-in carrying its pin instruction
|
|
12
|
+
* (`pinned_left`: which columns to pin left; [] = unpin everything). Saved views never
|
|
13
|
+
* carry it (the schema doesn't store pinning), so loading them leaves pins alone. */
|
|
14
|
+
export type LoadableTableView = SavedGridView;
|
|
15
|
+
interface ViewSelectorProps {
|
|
16
|
+
getGridApi: () => GridApi<Doc> | null;
|
|
17
|
+
defaultColumns: string[];
|
|
18
|
+
/** Live column toggle (visibility/order only) — does not touch zoom/row height. */
|
|
19
|
+
onApplyView: (columns: string[], gridApi: GridApi<Doc>) => void;
|
|
20
|
+
/** Restore a full saved view: columns + widths + Gallery zoom + row height
|
|
21
|
+
* (+ pinning, for built-ins that specify it). */
|
|
22
|
+
onLoadView: (view: LoadableTableView, gridApi: GridApi<Doc>) => void;
|
|
23
|
+
/** Current Gallery tile size + table row height, captured when saving a view. */
|
|
24
|
+
currentTileSize: number;
|
|
25
|
+
currentRowHeight: number;
|
|
26
|
+
/** Baseline for the built-in Default view, so deviations flip to "Unsaved".
|
|
27
|
+
* (Row-height baselines live on the built-in views themselves.) */
|
|
28
|
+
defaultTileSize: number;
|
|
29
|
+
/** Changes whenever the grid's saved state does: the current view is recomputed. */
|
|
30
|
+
stateVersion: unknown;
|
|
31
|
+
}
|
|
32
|
+
export declare function ViewSelector({ getGridApi, defaultColumns, onApplyView, onLoadView, currentTileSize, currentRowHeight, defaultTileSize, stateVersion, }: ViewSelectorProps): import("react").JSX.Element;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Saved table views in user settings (`tableviews`): one array holding the views of every table
|
|
3
|
+
* the user has saved one for, keyed by workspace and table. A view without `table` belongs to the
|
|
4
|
+
* workspace's documents (Files) table; one with `table` belongs to that database's grid
|
|
5
|
+
* (`dbs-…`). Settings are written whole, so every change keeps the other tables' views.
|
|
6
|
+
*/
|
|
7
|
+
import type { components } from '@arbidocs/client';
|
|
8
|
+
import type { SavedGridView } from '../../../files/views/gridViews';
|
|
9
|
+
export type TableView = components['schemas']['TableView'];
|
|
10
|
+
/** The table a view belongs to: a database id, or `null` for the documents table. */
|
|
11
|
+
export type TableViewTable = string | null;
|
|
12
|
+
/** The views of one table, one per name (the last one stored wins). */
|
|
13
|
+
export declare function viewsOfTable(all: TableView[] | null | undefined, workspaceId: string | null | undefined, table: TableViewTable): TableView[];
|
|
14
|
+
/** All views with `view` stored for this table (replacing one of the same name). */
|
|
15
|
+
export declare function withTableView(all: TableView[] | null | undefined, view: SavedGridView, workspaceId: string, table: TableViewTable): TableView[];
|
|
16
|
+
/** All views without this table's view named `name`. */
|
|
17
|
+
export declare function withoutTableView(all: TableView[] | null | undefined, name: string, workspaceId: string, table: TableViewTable): TableView[];
|
|
18
|
+
/**
|
|
19
|
+
* All views with `views` added to this table, skipping names it already has (a view already on
|
|
20
|
+
* the server wins). Used to move views kept in this browser into settings.
|
|
21
|
+
*/
|
|
22
|
+
export declare function withMissingTableViews(all: TableView[] | null | undefined, views: SavedGridView[], workspaceId: string, table: TableViewTable): TableView[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SavedGridView } from '../../../files/views/gridViews';
|
|
2
|
+
import { type TableViewTable } from './tableViews';
|
|
3
|
+
export declare function useTableViews(table: TableViewTable): {
|
|
4
|
+
savedViews: {
|
|
5
|
+
workspace: string;
|
|
6
|
+
table?: string | null;
|
|
7
|
+
name: string;
|
|
8
|
+
columns: string[];
|
|
9
|
+
column_widths?: {
|
|
10
|
+
[key: string]: number;
|
|
11
|
+
} | null;
|
|
12
|
+
tile_size?: number | null;
|
|
13
|
+
row_height?: number | null;
|
|
14
|
+
}[];
|
|
15
|
+
/** Settings and workspace are known: views can be written without losing any. */
|
|
16
|
+
ready: boolean;
|
|
17
|
+
workspaceId: string | null;
|
|
18
|
+
saveView: (view: SavedGridView) => Promise<void>;
|
|
19
|
+
deleteView: (name: string) => Promise<void>;
|
|
20
|
+
importViews: (views: SavedGridView[]) => Promise<void>;
|
|
21
|
+
isSaving: boolean;
|
|
22
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The whole mail screen bound to the mail client in scope (`
|
|
3
|
-
* `
|
|
2
|
+
* The whole mail screen bound to the mail client in scope (the host config's `mail`, else the
|
|
3
|
+
* host `arbi`'s session): first-run setup or the accounts, the folder picker and filter, the message
|
|
4
4
|
* list, the reader and the composer.
|
|
5
5
|
*
|
|
6
6
|
* The host owns navigation: it can ask for a draft (`draftId`), a folder (`folder`) or a new message
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A chat message's attached files, rendered inside its bubble.
|
|
3
|
+
*
|
|
4
|
+
* Images are fetched, decrypted and previewed inline from a blob URL that is revoked when the
|
|
5
|
+
* preview unmounts. Other files are a chip (name + size) that fetches and decrypts on click and
|
|
6
|
+
* saves the result. Decryption happens in the browser with the key from the message's manifest;
|
|
7
|
+
* the server only ever hands over ciphertext.
|
|
8
|
+
*/
|
|
9
|
+
import { type ChatAttachmentFile } from '@arbidocs/react';
|
|
10
|
+
export interface ChatAttachmentListProps {
|
|
11
|
+
files: ChatAttachmentFile[];
|
|
12
|
+
/** Set when the message has attachments whose manifest could not be decrypted. */
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function ChatAttachmentList({ files, error }: ChatAttachmentListProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One open chat thread — direct (a person, a self-chat, or my personal agent), group or meeting.
|
|
3
|
+
*
|
|
4
|
+
* Container-agnostic: a messenger frames it. Every message is end-to-end encrypted under the chat
|
|
5
|
+
* key (`arbi.chats`); files are encrypted with their own keys and travel in a manifest under the
|
|
6
|
+
* same chat key. A chat has no assistant — the one exception is the direct chat with my own agent
|
|
7
|
+
* (the PA chat), which carries the selected workspace and records workspace switches as
|
|
8
|
+
* context-only notes. A host draws more kinds of message (a call's) with `host.ThreadHistory`.
|
|
9
|
+
*/
|
|
10
|
+
import { type ChatResponse, type DmUser } from '@arbidocs/react';
|
|
11
|
+
import type { MessengerHost } from './types';
|
|
12
|
+
export interface ConnectedChatThreadProps {
|
|
13
|
+
/** The chat to show; null for a peer never messaged (the direct chat is created on send). */
|
|
14
|
+
chat: ChatResponse | null;
|
|
15
|
+
/** The other party of a direct chat (myself for a self-chat); unset for a group. */
|
|
16
|
+
peer?: DmUser | null;
|
|
17
|
+
host?: MessengerHost;
|
|
18
|
+
/** Called after a message is sent. */
|
|
19
|
+
onMessageSent?: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function ConnectedChatThread({ chat, peer, host, onMessageSent, }: ConnectedChatThreadProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A group's people: rename it, add people, remove someone (owners) or leave.
|
|
3
|
+
*
|
|
4
|
+
* Removing or leaving changes who holds the key: the server marks the chat `rotation_required`
|
|
5
|
+
* and a remaining member's client seals a fresh key to exactly the people left (done right after
|
|
6
|
+
* a removal, and by whoever is online after a leave), so the departed can't read on.
|
|
7
|
+
*/
|
|
8
|
+
import { type ChatResponse } from '@arbidocs/react';
|
|
9
|
+
import type { MessengerHost } from './types';
|
|
10
|
+
export interface ConnectedGroupMembersProps {
|
|
11
|
+
chat: ChatResponse;
|
|
12
|
+
/** The decrypted title, if any. */
|
|
13
|
+
title: string | null;
|
|
14
|
+
open: boolean;
|
|
15
|
+
onOpenChange: (open: boolean) => void;
|
|
16
|
+
/** Called after I leave, so the caller can close the thread. */
|
|
17
|
+
onLeft?: () => void;
|
|
18
|
+
host?: MessengerHost;
|
|
19
|
+
}
|
|
20
|
+
export declare function ConnectedGroupMembers({ chat, title, open, onOpenChange, onLeft, host, }: ConnectedGroupMembersProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The chats messenger for a side panel: the list of chats OR one thread, never both.
|
|
3
|
+
*
|
|
4
|
+
* - nothing open → the chat rows fill the panel, "+ Invite", "New group" (and the host's
|
|
5
|
+
* list actions, e.g. "New call") first
|
|
6
|
+
* - one open → the thread fills it under a static identity header
|
|
7
|
+
*
|
|
8
|
+
* A row is a direct chat (a person, myself, or my agent), a group or a meeting chat, plus the
|
|
9
|
+
* people I can message and have no chat with yet. Rows are the shared <ConversationList>; the
|
|
10
|
+
* thread is <ConnectedChatThread>. Which conversation is open is the host's (its tabs).
|
|
11
|
+
*/
|
|
12
|
+
import { type ReactNode } from 'react';
|
|
13
|
+
import { type ChatResponse, type DmConversation, type DmUser } from '@arbidocs/react';
|
|
14
|
+
import type { MessengerHost } from './types';
|
|
15
|
+
/** Tri-state filters (a host's filter menu), keyed by what they select for. */
|
|
16
|
+
export type MessengerFilters = ReadonlyMap<string, 'include' | 'exclude' | null>;
|
|
17
|
+
/** A row as the list shows it: a chat row, or a host's extra row (e.g. an invitation). */
|
|
18
|
+
type ListRow = DmConversation & {
|
|
19
|
+
chat?: ChatResponse | null;
|
|
20
|
+
};
|
|
21
|
+
export interface ConnectedMessengerProps {
|
|
22
|
+
/** The open conversation (`usr-`/`agt-` peer or `cht-` chat), or null to show the list. */
|
|
23
|
+
activeId: string | null;
|
|
24
|
+
/** Open a conversation (a row was picked, or a group was just created). */
|
|
25
|
+
onOpen: (id: string) => void;
|
|
26
|
+
/** Close a conversation (I left its group). */
|
|
27
|
+
onClose?: (id: string) => void;
|
|
28
|
+
/** People to offer a conversation with although we have no chat yet (contacts, my agents). */
|
|
29
|
+
people?: DmUser[];
|
|
30
|
+
/** Rows after the chats that are not conversations yet, e.g. pending invitations. */
|
|
31
|
+
extraRows?: DmConversation[];
|
|
32
|
+
/**
|
|
33
|
+
* Narrow the rows. Built in: `unread`, `muted`, `agents`, `meetings`; `rowFilters` adds more.
|
|
34
|
+
* `include` keeps only matching rows, `exclude` drops them.
|
|
35
|
+
*/
|
|
36
|
+
filters?: MessengerFilters;
|
|
37
|
+
/** More filters by id (e.g. invitations by their status). */
|
|
38
|
+
rowFilters?: Record<string, (row: ListRow) => boolean>;
|
|
39
|
+
/** Shows "Add a contact by email" first in the list. */
|
|
40
|
+
onInvite?: () => void;
|
|
41
|
+
/** More calls to action after "New group" (e.g. "New call"). */
|
|
42
|
+
listActions?: ReactNode;
|
|
43
|
+
/** Controls in a direct conversation's header. `addPeople` starts a group with the peer. */
|
|
44
|
+
directActions?: (peer: DmUser, context: {
|
|
45
|
+
addPeople?: () => void;
|
|
46
|
+
}) => ReactNode;
|
|
47
|
+
/** Controls in a group's header, before the members button. */
|
|
48
|
+
groupActions?: (chat: ChatResponse, title: string | null) => ReactNode;
|
|
49
|
+
host?: MessengerHost;
|
|
50
|
+
}
|
|
51
|
+
export declare function ConnectedMessenger({ activeId, onOpen, onClose, people, extraRows, filters, rowFilters, onInvite, listActions, directActions, groupActions, host, }: ConnectedMessengerProps): import("react").JSX.Element;
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ConnectedMessenger, type ConnectedMessengerProps, type MessengerFilters, } from './ConnectedMessenger';
|
|
2
|
+
export { ConnectedChatThread, type ConnectedChatThreadProps } from './ConnectedChatThread';
|
|
3
|
+
export { ConnectedGroupMembers, type ConnectedGroupMembersProps } from './ConnectedGroupMembers';
|
|
4
|
+
export { ChatAttachmentList, type ChatAttachmentListProps } from './ChatAttachments';
|
|
5
|
+
export { useMessengerRows, groupFallbackName } from './useMessengerRows';
|
|
6
|
+
export type { ChatHistoryProps, ChatPeoplePickerProps, ChatThreadItem, MessengerHost, MessengerRow, MessengerUserVariant, } from './types';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a host adds to the messenger kit. Every field is optional: without any, the kit runs on
|
|
3
|
+
* `@arbidocs/react` alone (plain avatars, plain text). The ARBI app fills them
|
|
4
|
+
* with its own presence-aware avatars, markdown, calls and contact actions. These are the
|
|
5
|
+
* messenger's part of the planned single host configuration (ARBI-frontend#1660).
|
|
6
|
+
*/
|
|
7
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
8
|
+
import type { ChatResponse, ChatThreadMessage, DmConversation, DmUser } from '@arbidocs/react';
|
|
9
|
+
import { type PresenceDisplayStatus } from '@arbidocs/react/ui';
|
|
10
|
+
import type { components } from '@arbidocs/client';
|
|
11
|
+
export type NotificationResponse = components['schemas']['NotificationResponse'];
|
|
12
|
+
/**
|
|
13
|
+
* How a person is drawn: a row or header `avatar`, a `small-avatar` (a group's stacked faces), the
|
|
14
|
+
* `author` pill above someone's run of messages, or a `member` of a group's member list.
|
|
15
|
+
*/
|
|
16
|
+
export type MessengerUserVariant = 'avatar' | 'small-avatar' | 'author' | 'member';
|
|
17
|
+
/** One message of a thread with its place in it (from `annotateThread`). */
|
|
18
|
+
export interface ChatThreadItem {
|
|
19
|
+
message: ChatThreadMessage;
|
|
20
|
+
isFirstOfDay: boolean;
|
|
21
|
+
isLastOfRun: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Everything a thread's history knows, for a host that draws more kinds of message (calls,
|
|
25
|
+
* transcripts, recordings) around the kit's own. `renderItem` draws a message the kit's way.
|
|
26
|
+
*/
|
|
27
|
+
export interface ChatHistoryProps {
|
|
28
|
+
chat: ChatResponse | null;
|
|
29
|
+
/** The thread's messages, oldest first (optimistic ones included). */
|
|
30
|
+
messages: ChatThreadMessage[];
|
|
31
|
+
/** The messages with their day and run boundaries. */
|
|
32
|
+
items: ChatThreadItem[];
|
|
33
|
+
/** Draws one item the kit's way (separator, author pill, bubble, note). */
|
|
34
|
+
renderItem: (item: ChatThreadItem, index: number) => ReactNode;
|
|
35
|
+
/** "Load earlier messages", when there are older ones. */
|
|
36
|
+
loadOlder: ReactNode;
|
|
37
|
+
/** A member (or former member) by id. */
|
|
38
|
+
memberById: (userExtId: string | null | undefined) => DmUser | undefined;
|
|
39
|
+
/** A member's display name; "Former member" when unknown. */
|
|
40
|
+
senderName: (userExtId: string | null | undefined) => string;
|
|
41
|
+
/** Me. */
|
|
42
|
+
myExtId: string | null;
|
|
43
|
+
/** The host's time format (`MessengerHost.formatTime`). */
|
|
44
|
+
formatTime: (iso: string) => string;
|
|
45
|
+
/** The day separator's label. */
|
|
46
|
+
formatDay: (iso: string) => string;
|
|
47
|
+
}
|
|
48
|
+
/** The props of the host's people picker (new group, add people to a chat). */
|
|
49
|
+
export interface ChatPeoplePickerProps {
|
|
50
|
+
open: boolean;
|
|
51
|
+
onOpenChange: (open: boolean) => void;
|
|
52
|
+
/**
|
|
53
|
+
* `new-group`: a fresh group (≥2 people, optional title). `from-direct`: "Add people" in a direct
|
|
54
|
+
* chat starts a NEW group with the peer (a direct chat never grows). `add-members`: add people
|
|
55
|
+
* to an existing group.
|
|
56
|
+
*/
|
|
57
|
+
mode: 'new-group' | 'from-direct' | 'add-members';
|
|
58
|
+
/** Always included and not removable (the direct peer for `from-direct`). */
|
|
59
|
+
fixed?: DmUser[];
|
|
60
|
+
/** Already members, so not offered (`add-members`). */
|
|
61
|
+
excludeIds?: string[];
|
|
62
|
+
/** Create or add. Resolves when done; a rejection keeps the picker open. */
|
|
63
|
+
onSubmit: (people: DmUser[], title: string | null) => Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
export interface MessengerHost {
|
|
66
|
+
/** Draw a person. Default: the kit's initials avatar / plain name. */
|
|
67
|
+
renderUser?: (user: DmUser | null, variant: MessengerUserVariant) => ReactNode;
|
|
68
|
+
/** Render a message's text. Default: plain text. */
|
|
69
|
+
renderMessageBody?: (text: string, context: {
|
|
70
|
+
workspaceId: string | null;
|
|
71
|
+
}) => ReactNode;
|
|
72
|
+
/** A message's time (on the last bubble of a run). Default: "Today, 14:05". */
|
|
73
|
+
formatTime?: (iso: string) => string;
|
|
74
|
+
/** A day separator's label. Default: "Today", "Yesterday", "Mar 3". */
|
|
75
|
+
formatDay?: (iso: string) => string;
|
|
76
|
+
/** Someone's presence, for the open conversation's header. Omit to show none. */
|
|
77
|
+
presenceOf?: (userExtId: string) => PresenceDisplayStatus | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Personal Assistant chat: make sure the workspace my agent will act in can be used (its key
|
|
80
|
+
* is at hand). Resolves false when it cannot. Default: always ready.
|
|
81
|
+
*/
|
|
82
|
+
prepareAgentWorkspace?: (workspaceId: string) => Promise<boolean>;
|
|
83
|
+
/** Open the thread my agent is working in (its workspace may need opening first). */
|
|
84
|
+
openAgentThread?: (workspaceId: string, conversationId: string) => void;
|
|
85
|
+
/** Review a pending workspace access request from the open conversation's peer. */
|
|
86
|
+
onReviewAccessRequest?: (request: NotificationResponse) => void;
|
|
87
|
+
/** A meeting chat's call key, sealed to people added to it. Without it they cannot be added. */
|
|
88
|
+
meetingCallKey?: (chat: ChatResponse) => Promise<Uint8Array | null>;
|
|
89
|
+
/** The people picker for groups. Without one, groups can't be created or grown here. */
|
|
90
|
+
PeoplePicker?: ComponentType<ChatPeoplePickerProps>;
|
|
91
|
+
/**
|
|
92
|
+
* Draws a thread's history around the kit's items, e.g. a call's transcript and recordings.
|
|
93
|
+
* Default: the kit's items only.
|
|
94
|
+
*/
|
|
95
|
+
ThreadHistory?: ComponentType<ChatHistoryProps>;
|
|
96
|
+
}
|
|
97
|
+
/** A messenger row: the conversation, and the chat behind it (none yet for a new contact). */
|
|
98
|
+
export type MessengerRow = DmConversation & {
|
|
99
|
+
id: string;
|
|
100
|
+
chat: ChatResponse | null;
|
|
101
|
+
/** Members other than me (the peer for a direct chat; empty for a self-chat). */
|
|
102
|
+
others: DmUser[];
|
|
103
|
+
};
|