@arbidocs/blocks 0.5.71 → 0.5.72
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/dist/{ConnectedCallDock-73TOAFLY.js → ConnectedCallDock-33L35X2R.js} +9 -9
- package/dist/{ConnectedCallDock-73TOAFLY.js.map → ConnectedCallDock-33L35X2R.js.map} +1 -1
- package/dist/{ConnectedCallDock-NTS42APL.cjs → ConnectedCallDock-XLTQU3GL.cjs} +18 -18
- package/dist/{ConnectedCallDock-NTS42APL.cjs.map → ConnectedCallDock-XLTQU3GL.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-O5VPJXKW.js → ConnectedCallRoom-HCKM5R5I.js} +9 -9
- package/dist/{ConnectedCallRoom-O5VPJXKW.js.map → ConnectedCallRoom-HCKM5R5I.js.map} +1 -1
- package/dist/{ConnectedCallRoom-NGBBLFLU.cjs → ConnectedCallRoom-K25HUW5S.cjs} +10 -10
- package/dist/{ConnectedCallRoom-NGBBLFLU.cjs.map → ConnectedCallRoom-K25HUW5S.cjs.map} +1 -1
- package/dist/{ConnectedDocumentViewer-HEIYCETC.cjs → ConnectedDocumentViewer-4L4X6BYZ.cjs} +30 -30
- package/dist/{ConnectedDocumentViewer-HEIYCETC.cjs.map → ConnectedDocumentViewer-4L4X6BYZ.cjs.map} +1 -1
- package/dist/{ConnectedDocumentViewer-37JW6Z3N.js → ConnectedDocumentViewer-ZZPWWB7E.js} +29 -29
- package/dist/{ConnectedDocumentViewer-37JW6Z3N.js.map → ConnectedDocumentViewer-ZZPWWB7E.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-W6QMSY6U.js → ConnectedNativeDocxComparison-4RZOON6M.js} +16 -16
- package/dist/ConnectedNativeDocxComparison-4RZOON6M.js.map +1 -0
- package/dist/{ConnectedNativeDocxComparison-S4QT72BV.cjs → ConnectedNativeDocxComparison-4UCHWK7X.cjs} +17 -17
- package/dist/ConnectedNativeDocxComparison-4UCHWK7X.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-MOXHTFQC.cjs → ConnectedNativeDocxEditor-3PMWL67U.cjs} +17 -17
- package/dist/ConnectedNativeDocxEditor-3PMWL67U.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-U7NTXOKU.js → ConnectedNativeDocxEditor-PA4PE4JV.js} +15 -15
- package/dist/ConnectedNativeDocxEditor-PA4PE4JV.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-K34QLUS2.js → ConnectedStreamedWordArtifact-SXLJJGXE.js} +16 -16
- package/dist/ConnectedStreamedWordArtifact-SXLJJGXE.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-KTRHQRWU.cjs → ConnectedStreamedWordArtifact-ZAM6EDLB.cjs} +17 -17
- package/dist/ConnectedStreamedWordArtifact-ZAM6EDLB.cjs.map +1 -0
- package/dist/{DocumentReviewCard-7PY4I2HO.cjs → DocumentReviewCard-NZ3BUZ2T.cjs} +20 -20
- package/dist/{DocumentReviewCard-7PY4I2HO.cjs.map → DocumentReviewCard-NZ3BUZ2T.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-AKSTGWFK.js → DocumentReviewCard-ONMJV6WZ.js} +15 -15
- package/dist/{DocumentReviewCard-AKSTGWFK.js.map → DocumentReviewCard-ONMJV6WZ.js.map} +1 -1
- package/dist/{WorkspaceTableView-6SZ7C6HB.cjs → WorkspaceTableView-IC2AA4OL.cjs} +11 -11
- package/dist/{WorkspaceTableView-6SZ7C6HB.cjs.map → WorkspaceTableView-IC2AA4OL.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-KVMAUWQK.js → WorkspaceTableView-TWBUABRG.js} +9 -9
- package/dist/{WorkspaceTableView-KVMAUWQK.js.map → WorkspaceTableView-TWBUABRG.js.map} +1 -1
- package/dist/agents/index.cjs +383 -383
- package/dist/agents/index.js +17 -17
- package/dist/calendar/index.cjs +116 -116
- package/dist/calendar/index.js +1 -1
- package/dist/calls/index.cjs +135 -135
- package/dist/calls/index.js +11 -11
- package/dist/chat/index.cjs +4 -4
- package/dist/chat/index.js +4 -4
- package/dist/{chunk-EKAWH2B6.cjs → chunk-2J774QEH.cjs} +14 -14
- package/dist/{chunk-EKAWH2B6.cjs.map → chunk-2J774QEH.cjs.map} +1 -1
- package/dist/{chunk-BMSBLD64.js → chunk-2UVWKD4T.js} +5 -5
- package/dist/{chunk-BMSBLD64.js.map → chunk-2UVWKD4T.js.map} +1 -1
- package/dist/{chunk-WGXRLGD3.cjs → chunk-3JZLWFZ5.cjs} +7 -7
- package/dist/{chunk-WGXRLGD3.cjs.map → chunk-3JZLWFZ5.cjs.map} +1 -1
- package/dist/{chunk-55VN4XPB.cjs → chunk-5NRG47P2.cjs} +62 -62
- package/dist/{chunk-55VN4XPB.cjs.map → chunk-5NRG47P2.cjs.map} +1 -1
- package/dist/{chunk-O4HUGETL.cjs → chunk-6BYFHKHA.cjs} +3 -3
- package/dist/{chunk-O4HUGETL.cjs.map → chunk-6BYFHKHA.cjs.map} +1 -1
- package/dist/{chunk-QNKWEA5O.js → chunk-6IZF6SWO.js} +3 -3
- package/dist/{chunk-QNKWEA5O.js.map → chunk-6IZF6SWO.js.map} +1 -1
- package/dist/{chunk-OI4DL2DX.js → chunk-6JQU4FMW.js} +3 -3
- package/dist/{chunk-OI4DL2DX.js.map → chunk-6JQU4FMW.js.map} +1 -1
- package/dist/{chunk-NBJSPURO.js → chunk-6WSHS5XV.js} +7 -7
- package/dist/{chunk-NBJSPURO.js.map → chunk-6WSHS5XV.js.map} +1 -1
- package/dist/{chunk-LYQNG4P3.js → chunk-7ASLVC6T.js} +3 -3
- package/dist/{chunk-LYQNG4P3.js.map → chunk-7ASLVC6T.js.map} +1 -1
- package/dist/{chunk-ZQEBUHRH.cjs → chunk-7OAK2GYN.cjs} +13 -13
- package/dist/{chunk-ZQEBUHRH.cjs.map → chunk-7OAK2GYN.cjs.map} +1 -1
- package/dist/{chunk-ZZTH27G7.js → chunk-7OBYAN4F.js} +4 -4
- package/dist/{chunk-ZZTH27G7.js.map → chunk-7OBYAN4F.js.map} +1 -1
- package/dist/{chunk-PBIFISDD.js → chunk-7P24MJQN.js} +3 -3
- package/dist/{chunk-PBIFISDD.js.map → chunk-7P24MJQN.js.map} +1 -1
- package/dist/{chunk-FZWFMKIB.js → chunk-7P6PSBFC.js} +4 -4
- package/dist/{chunk-FZWFMKIB.js.map → chunk-7P6PSBFC.js.map} +1 -1
- package/dist/{chunk-27H4JAB7.cjs → chunk-7Z73I4LD.cjs} +19 -19
- package/dist/{chunk-27H4JAB7.cjs.map → chunk-7Z73I4LD.cjs.map} +1 -1
- package/dist/{chunk-BTEUZ6FC.cjs → chunk-A4GBLPJS.cjs} +5 -5
- package/dist/{chunk-BTEUZ6FC.cjs.map → chunk-A4GBLPJS.cjs.map} +1 -1
- package/dist/{chunk-U56BM4MK.js → chunk-AMY36AMO.js} +3 -3
- package/dist/{chunk-U56BM4MK.js.map → chunk-AMY36AMO.js.map} +1 -1
- package/dist/{chunk-EOSIWQUL.cjs → chunk-ATYAGH4O.cjs} +19 -19
- package/dist/{chunk-EOSIWQUL.cjs.map → chunk-ATYAGH4O.cjs.map} +1 -1
- package/dist/{chunk-E5RN3LWS.js → chunk-AWVGKHJT.js} +2 -2
- package/dist/{chunk-E5RN3LWS.js.map → chunk-AWVGKHJT.js.map} +1 -1
- package/dist/{chunk-YODI75ZC.js → chunk-BHCD5JSO.js} +3 -3
- package/dist/{chunk-YODI75ZC.js.map → chunk-BHCD5JSO.js.map} +1 -1
- package/dist/{chunk-HN7NF3AQ.cjs → chunk-BIMADSE5.cjs} +4 -4
- package/dist/{chunk-HN7NF3AQ.cjs.map → chunk-BIMADSE5.cjs.map} +1 -1
- package/dist/{chunk-IPX2NFIH.cjs → chunk-BWX7SNY6.cjs} +3 -3
- package/dist/{chunk-IPX2NFIH.cjs.map → chunk-BWX7SNY6.cjs.map} +1 -1
- package/dist/{chunk-IFFASSRV.js → chunk-C2SEFISX.js} +4 -4
- package/dist/{chunk-IFFASSRV.js.map → chunk-C2SEFISX.js.map} +1 -1
- package/dist/{chunk-QK546T4C.cjs → chunk-CKNUL4LM.cjs} +3 -3
- package/dist/{chunk-QK546T4C.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
- package/dist/{chunk-Y4MZHJCW.cjs → chunk-CN2VDV4N.cjs} +64 -64
- package/dist/{chunk-Y4MZHJCW.cjs.map → chunk-CN2VDV4N.cjs.map} +1 -1
- package/dist/{chunk-HZ5O4VDK.js → chunk-CTCA4XY3.js} +3 -3
- package/dist/{chunk-HZ5O4VDK.js.map → chunk-CTCA4XY3.js.map} +1 -1
- package/dist/{chunk-KNOSLLTC.js → chunk-DAS5CYH5.js} +3 -3
- package/dist/{chunk-KNOSLLTC.js.map → chunk-DAS5CYH5.js.map} +1 -1
- package/dist/{chunk-ZXW6WFZG.cjs → chunk-DIFSVXCF.cjs} +3 -3
- package/dist/{chunk-ZXW6WFZG.cjs.map → chunk-DIFSVXCF.cjs.map} +1 -1
- package/dist/{chunk-LUYAKW3Z.cjs → chunk-DKRDLKTI.cjs} +23 -23
- package/dist/{chunk-LUYAKW3Z.cjs.map → chunk-DKRDLKTI.cjs.map} +1 -1
- package/dist/{chunk-ZL3NVXR4.cjs → chunk-DPNMBX5A.cjs} +4 -4
- package/dist/{chunk-ZL3NVXR4.cjs.map → chunk-DPNMBX5A.cjs.map} +1 -1
- package/dist/{chunk-NJE4MYKX.js → chunk-DQOMV275.js} +13 -13
- package/dist/{chunk-NJE4MYKX.js.map → chunk-DQOMV275.js.map} +1 -1
- package/dist/{chunk-F3KZGBFI.js → chunk-DTIEENXG.js} +3 -3
- package/dist/{chunk-F3KZGBFI.js.map → chunk-DTIEENXG.js.map} +1 -1
- package/dist/{chunk-5RZLH4B3.cjs → chunk-DUUXZH5G.cjs} +3 -3
- package/dist/{chunk-5RZLH4B3.cjs.map → chunk-DUUXZH5G.cjs.map} +1 -1
- package/dist/{chunk-73JJMC5R.js → chunk-F3EJPRQP.js} +15 -15
- package/dist/{chunk-73JJMC5R.js.map → chunk-F3EJPRQP.js.map} +1 -1
- package/dist/{chunk-RGPKW6KQ.cjs → chunk-FVDJTOS2.cjs} +4 -4
- package/dist/{chunk-RGPKW6KQ.cjs.map → chunk-FVDJTOS2.cjs.map} +1 -1
- package/dist/{chunk-YRMDBSAV.cjs → chunk-FWB7RZHR.cjs} +32 -32
- package/dist/{chunk-YRMDBSAV.cjs.map → chunk-FWB7RZHR.cjs.map} +1 -1
- package/dist/{chunk-5IFKVRLE.js → chunk-GNLIBW6M.js} +8 -8
- package/dist/{chunk-5IFKVRLE.js.map → chunk-GNLIBW6M.js.map} +1 -1
- package/dist/{chunk-MUKCL2AS.js → chunk-I5W4EHUQ.js} +4 -4
- package/dist/{chunk-MUKCL2AS.js.map → chunk-I5W4EHUQ.js.map} +1 -1
- package/dist/{chunk-IJBJXJ4H.cjs → chunk-JI6BZ2FR.cjs} +35 -35
- package/dist/{chunk-IJBJXJ4H.cjs.map → chunk-JI6BZ2FR.cjs.map} +1 -1
- package/dist/{chunk-OQ7W7RTP.js → chunk-KNJI4KQY.js} +3 -3
- package/dist/{chunk-OQ7W7RTP.js.map → chunk-KNJI4KQY.js.map} +1 -1
- package/dist/{chunk-IRFIZKZQ.js → chunk-KSKVTBG5.js} +3 -3
- package/dist/{chunk-IRFIZKZQ.js.map → chunk-KSKVTBG5.js.map} +1 -1
- package/dist/{chunk-CJDWEQAR.js → chunk-L6ALK4JG.js} +4 -4
- package/dist/{chunk-CJDWEQAR.js.map → chunk-L6ALK4JG.js.map} +1 -1
- package/dist/{chunk-B2IL3QUO.js → chunk-LBYEDQO3.js} +3 -3
- package/dist/{chunk-B2IL3QUO.js.map → chunk-LBYEDQO3.js.map} +1 -1
- package/dist/{chunk-PDHCKRNL.js → chunk-LHTOBPYB.js} +14 -14
- package/dist/{chunk-PDHCKRNL.js.map → chunk-LHTOBPYB.js.map} +1 -1
- package/dist/{chunk-SQJNSWDG.js → chunk-LIW6ZZGB.js} +3 -3
- package/dist/{chunk-SQJNSWDG.js.map → chunk-LIW6ZZGB.js.map} +1 -1
- package/dist/{chunk-BS4JCHHX.cjs → chunk-LUDFEAFF.cjs} +9 -9
- package/dist/{chunk-BS4JCHHX.cjs.map → chunk-LUDFEAFF.cjs.map} +1 -1
- package/dist/{chunk-Z4VOVUU7.js → chunk-MO4BLJE5.js} +3 -3
- package/dist/{chunk-Z4VOVUU7.js.map → chunk-MO4BLJE5.js.map} +1 -1
- package/dist/{chunk-7NMNAM53.cjs → chunk-N5DZF52H.cjs} +4 -4
- package/dist/{chunk-7NMNAM53.cjs.map → chunk-N5DZF52H.cjs.map} +1 -1
- package/dist/{chunk-GRFFA54I.cjs → chunk-NCJB5K6L.cjs} +67 -67
- package/dist/{chunk-GRFFA54I.cjs.map → chunk-NCJB5K6L.cjs.map} +1 -1
- package/dist/{chunk-M42XWNS6.cjs → chunk-NFISYFEW.cjs} +3 -3
- package/dist/{chunk-M42XWNS6.cjs.map → chunk-NFISYFEW.cjs.map} +1 -1
- package/dist/{chunk-CYDICJAS.js → chunk-NIG663YY.js} +3 -3
- package/dist/{chunk-CYDICJAS.js.map → chunk-NIG663YY.js.map} +1 -1
- package/dist/{chunk-5FXFYTAQ.cjs → chunk-OAYQ7P34.cjs} +27 -27
- package/dist/{chunk-5FXFYTAQ.cjs.map → chunk-OAYQ7P34.cjs.map} +1 -1
- package/dist/{chunk-TOST5RP2.js → chunk-OKB2L6IJ.js} +7 -7
- package/dist/{chunk-TOST5RP2.js.map → chunk-OKB2L6IJ.js.map} +1 -1
- package/dist/{chunk-EG3BB32W.cjs → chunk-PGRMIC5C.cjs} +5 -5
- package/dist/{chunk-EG3BB32W.cjs.map → chunk-PGRMIC5C.cjs.map} +1 -1
- package/dist/{chunk-XF5W3YZA.cjs → chunk-PIN3V2AH.cjs} +54 -54
- package/dist/{chunk-XF5W3YZA.cjs.map → chunk-PIN3V2AH.cjs.map} +1 -1
- package/dist/{chunk-QJRROKUE.cjs → chunk-PPMSDZ57.cjs} +5 -5
- package/dist/{chunk-QJRROKUE.cjs.map → chunk-PPMSDZ57.cjs.map} +1 -1
- package/dist/{chunk-OGMA5DXW.cjs → chunk-PQK2JBRX.cjs} +3 -3
- package/dist/{chunk-OGMA5DXW.cjs.map → chunk-PQK2JBRX.cjs.map} +1 -1
- package/dist/{chunk-ERASDZ45.js → chunk-QIB2277F.js} +3 -3
- package/dist/{chunk-ERASDZ45.js.map → chunk-QIB2277F.js.map} +1 -1
- package/dist/{chunk-S4F24VZE.cjs → chunk-RDNMY67B.cjs} +7 -7
- package/dist/{chunk-S4F24VZE.cjs.map → chunk-RDNMY67B.cjs.map} +1 -1
- package/dist/{chunk-ES5NQJO5.js → chunk-RUCM3QJT.js} +5 -5
- package/dist/{chunk-ES5NQJO5.js.map → chunk-RUCM3QJT.js.map} +1 -1
- package/dist/{chunk-JBL4PPEE.cjs → chunk-SW7BCXB5.cjs} +4 -4
- package/dist/{chunk-JBL4PPEE.cjs.map → chunk-SW7BCXB5.cjs.map} +1 -1
- package/dist/{chunk-OV36ANDQ.js → chunk-SZXN6WRA.js} +3 -3
- package/dist/{chunk-OV36ANDQ.js.map → chunk-SZXN6WRA.js.map} +1 -1
- package/dist/{chunk-TY4LIT2W.cjs → chunk-TDP3VUN5.cjs} +11 -11
- package/dist/{chunk-TY4LIT2W.cjs.map → chunk-TDP3VUN5.cjs.map} +1 -1
- package/dist/{chunk-GHOY7A7P.js → chunk-TQ37QK52.js} +3 -3
- package/dist/{chunk-GHOY7A7P.js.map → chunk-TQ37QK52.js.map} +1 -1
- package/dist/{chunk-TBMJ575G.js → chunk-TVIZVARF.js} +4 -4
- package/dist/{chunk-TBMJ575G.js.map → chunk-TVIZVARF.js.map} +1 -1
- package/dist/{chunk-WBKORBG7.cjs → chunk-V7W3MT3P.cjs} +3 -3
- package/dist/{chunk-WBKORBG7.cjs.map → chunk-V7W3MT3P.cjs.map} +1 -1
- package/dist/{chunk-SGOMPLJA.js → chunk-VBZBUFXC.js} +14 -14
- package/dist/{chunk-SGOMPLJA.js.map → chunk-VBZBUFXC.js.map} +1 -1
- package/dist/{chunk-2VH2PT3J.js → chunk-VUV3FCTJ.js} +3 -3
- package/dist/{chunk-2VH2PT3J.js.map → chunk-VUV3FCTJ.js.map} +1 -1
- package/dist/{chunk-LM7DVT7C.cjs → chunk-W3PSIIMN.cjs} +2 -2
- package/dist/{chunk-LM7DVT7C.cjs.map → chunk-W3PSIIMN.cjs.map} +1 -1
- package/dist/{chunk-HEMWXPNQ.cjs → chunk-WDBA4RK3.cjs} +3 -3
- package/dist/{chunk-HEMWXPNQ.cjs.map → chunk-WDBA4RK3.cjs.map} +1 -1
- package/dist/{chunk-CHZQBHTR.cjs → chunk-X2VBA4XG.cjs} +3 -3
- package/dist/{chunk-CHZQBHTR.cjs.map → chunk-X2VBA4XG.cjs.map} +1 -1
- package/dist/{chunk-CTMGXYJ4.cjs → chunk-YWDWH5NT.cjs} +3 -3
- package/dist/{chunk-CTMGXYJ4.cjs.map → chunk-YWDWH5NT.cjs.map} +1 -1
- package/dist/{chunk-64DMXUYS.js → chunk-ZFD53IT4.js} +3 -3
- package/dist/{chunk-64DMXUYS.js.map → chunk-ZFD53IT4.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/docx.cjs +23 -23
- package/dist/connect/docx.js +19 -19
- package/dist/connect/index.cjs +1173 -1173
- package/dist/connect/index.js +82 -82
- package/dist/connect/viewer.cjs +28 -28
- package/dist/connect/viewer.js +27 -27
- package/dist/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/document-tools/index.cjs +17 -17
- package/dist/document-tools/index.js +2 -2
- package/dist/embed/index.cjs +39 -39
- package/dist/embed/index.js +35 -35
- package/dist/facts/index.cjs +49 -49
- package/dist/facts/index.js +6 -6
- package/dist/files/index.cjs +227 -227
- package/dist/files/index.js +7 -7
- package/dist/home/index.cjs +31 -31
- package/dist/home/index.js +4 -4
- package/dist/index.cjs +1822 -1822
- package/dist/index.js +52 -52
- package/dist/settings/index.cjs +158 -158
- package/dist/settings/index.js +4 -4
- package/dist/shell/index.cjs +113 -113
- package/dist/shell/index.js +9 -9
- package/dist/site/index.cjs +22 -22
- package/dist/site/index.js +2 -2
- package/dist/studio/index.cjs +21 -21
- package/dist/studio/index.js +18 -18
- package/dist/workflow-canvas/index.cjs +61 -61
- package/dist/workflow-canvas/index.js +37 -37
- package/dist/workspaces/index.cjs +20 -20
- package/dist/workspaces/index.js +3 -3
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedNativeDocxComparison-S4QT72BV.cjs.map +0 -1
- package/dist/ConnectedNativeDocxComparison-W6QMSY6U.js.map +0 -1
- package/dist/ConnectedNativeDocxEditor-MOXHTFQC.cjs.map +0 -1
- package/dist/ConnectedNativeDocxEditor-U7NTXOKU.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-K34QLUS2.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-KTRHQRWU.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useConnection } from './chunk-RE67IM5B.js';
|
|
3
2
|
import { AssistantDock } from './chunk-Z2JWE65L.js';
|
|
3
|
+
import { useConnection } from './chunk-RE67IM5B.js';
|
|
4
4
|
import { useCallback } from 'react';
|
|
5
5
|
import { useAiTask, useWorkspaceDocs as useWorkspaceDocs$1, useSemanticSearch as useSemanticSearch$1, useWorkspaceUsers, buildMentionCandidates, useConversation, ConversationScope } from '@arbidocs/react';
|
|
6
6
|
export { redlineStats, textToArtifact, toRedlineMarkdown } from '@arbidocs/react';
|
|
@@ -61,5 +61,5 @@ function ScopedAssistantDock(props) {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export { ConnectedAssistantDock, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs };
|
|
64
|
-
//# sourceMappingURL=chunk-
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
64
|
+
//# sourceMappingURL=chunk-NIG663YY.js.map
|
|
65
|
+
//# sourceMappingURL=chunk-NIG663YY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/ai.tsx"],"names":["useKitAiTask","useKitWorkspaceDocs","useKitSemanticSearch"],"mappings":";;;;;;;AAkCO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,aAAA,EAAc;AAC1C,EAAA,MAAM,OAAOA,SAAA,EAAa;AAC1B,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AACpB,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,QAAA,EAAkB,MAAA,EAAkB,IAAA,KACnC,OAAO,QAAA,EAAU,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,iBAAiB,CAAA;AAAA,IAC7E,CAAC,QAAQ,eAAe;AAAA,GAC1B;AACA,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAA,EAAI;AACxB;AAGO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,aAAA,EAAc;AAC3D,EAAA,OAAOC,kBAAA,CAAoB,eAAe,mBAAmB,CAAA;AAC/D;AAGO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,aAAA,EAAc;AAC1C,EAAA,OAAOC,oBAAqB,EAAC,EAAG,EAAE,KAAA,EAAO,iBAAiB,CAAA;AAC5D;AAQO,SAAS,iBACd,OAAA,EAC8D;AAC9D,EAAA,MAAM,EAAE,aAAa,mBAAA,EAAqB,eAAA,EAAiB,MAAM,MAAA,EAAQ,mBAAA,KACvE,aAAA,EAAc;AAChB,EAAA,MAAM,OAAO,WAAA,IAAe,mBAAA;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,EAAC,EAAE,GAAI,kBAAkB,IAAA,EAAM;AAAA,IACrD,OAAA,EAAS,MAAA,KAAW,eAAA,IAAmB,CAAC,CAAC,IAAA;AAAA,IACzC,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,sBAAA;AAAA,IACxB,MAAA,KAAW,eAAA,GAAkB,OAAA,GAAU,EAAC;AAAA,IACxC,IAAA,EAAM;AAAA,GACR;AACA,EAAA,MAAM,OAAO,eAAA,CAAgB;AAAA,IAC3B,GAAG,OAAA;AAAA,IACH,WAAA,EAAa,IAAA;AAAA,IACb,KAAA,EAAO,SAAS,KAAA,IAAS;AAAA,GAC1B,CAAA;AACD,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,iBAAA;AAAA,IACA,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,GAAI,QAAQ,QAAA,GACR;AAAA,QACE,WAAW,CAAC,CAAC,MAAM,UAAA,IAAc,OAAA,CAAQ,aAAa,IAAA,CAAK,UAAA;AAAA,QAC3D,YACE,OAAA,CAAQ,QAAA,KAAa,IAAA,EAAM,UAAA,GACvB,MAAM,IAAA,IAAQ,IAAA,EAAM,KAAA,GACpB,iBAAA,CAAkB,KAAK,CAAC,SAAA,KAAc,UAAU,EAAA,KAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAAA,UAElF;AAAC,KACP,CAAE;AAAA,GACJ;AACF;AAOO,SAAS,uBAAuB,KAAA,EAAyC;AAC9E,EAAA,2BACG,iBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,mBAAA,EAAA,EAAqB,GAAG,OAAO,CAAA,EAClC,CAAA;AAEJ;AAEA,SAAS,oBAAoB,KAAA,EAAyC;AACpE,EAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,EAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAe,GAAG,KAAA,EAAO,IAAA,EAAY,CAAA;AAC/C","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/ai.tsx"],"names":["useKitAiTask","useKitWorkspaceDocs","useKitSemanticSearch"],"mappings":";;;;;;;AAkCO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,aAAA,EAAc;AAC1C,EAAA,MAAM,OAAOA,SAAA,EAAa;AAC1B,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AACpB,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,QAAA,EAAkB,MAAA,EAAkB,IAAA,KACnC,OAAO,QAAA,EAAU,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,iBAAiB,CAAA;AAAA,IAC7E,CAAC,QAAQ,eAAe;AAAA,GAC1B;AACA,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAA,EAAI;AACxB;AAGO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,aAAA,EAAc;AAC3D,EAAA,OAAOC,kBAAA,CAAoB,eAAe,mBAAmB,CAAA;AAC/D;AAGO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,aAAA,EAAc;AAC1C,EAAA,OAAOC,oBAAqB,EAAC,EAAG,EAAE,KAAA,EAAO,iBAAiB,CAAA;AAC5D;AAQO,SAAS,iBACd,OAAA,EAC8D;AAC9D,EAAA,MAAM,EAAE,aAAa,mBAAA,EAAqB,eAAA,EAAiB,MAAM,MAAA,EAAQ,mBAAA,KACvE,aAAA,EAAc;AAChB,EAAA,MAAM,OAAO,WAAA,IAAe,mBAAA;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,EAAC,EAAE,GAAI,kBAAkB,IAAA,EAAM;AAAA,IACrD,OAAA,EAAS,MAAA,KAAW,eAAA,IAAmB,CAAC,CAAC,IAAA;AAAA,IACzC,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,sBAAA;AAAA,IACxB,MAAA,KAAW,eAAA,GAAkB,OAAA,GAAU,EAAC;AAAA,IACxC,IAAA,EAAM;AAAA,GACR;AACA,EAAA,MAAM,OAAO,eAAA,CAAgB;AAAA,IAC3B,GAAG,OAAA;AAAA,IACH,WAAA,EAAa,IAAA;AAAA,IACb,KAAA,EAAO,SAAS,KAAA,IAAS;AAAA,GAC1B,CAAA;AACD,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,iBAAA;AAAA,IACA,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,GAAI,QAAQ,QAAA,GACR;AAAA,QACE,WAAW,CAAC,CAAC,MAAM,UAAA,IAAc,OAAA,CAAQ,aAAa,IAAA,CAAK,UAAA;AAAA,QAC3D,YACE,OAAA,CAAQ,QAAA,KAAa,IAAA,EAAM,UAAA,GACvB,MAAM,IAAA,IAAQ,IAAA,EAAM,KAAA,GACpB,iBAAA,CAAkB,KAAK,CAAC,SAAA,KAAc,UAAU,EAAA,KAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAAA,UAElF;AAAC,KACP,CAAE;AAAA,GACJ;AACF;AAOO,SAAS,uBAAuB,KAAA,EAAyC;AAC9E,EAAA,2BACG,iBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,mBAAA,EAAA,EAAqB,GAAG,OAAO,CAAA,EAClC,CAAA;AAEJ;AAEA,SAAS,oBAAoB,KAAA,EAAyC;AACpE,EAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,EAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAe,GAAG,KAAA,EAAO,IAAA,EAAY,CAAA;AAC/C","file":"chunk-NIG663YY.js","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useConversation,\n useWorkspaceUsers,\n buildMentionCandidates,\n ConversationScope,\n type ArbiConversation,\n type UseConversationOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '@arbidocs/react/shell'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents (all of them) and return the top matching passages. */\nexport function useSemanticSearch() {\n const { assistantConfig } = useConnection()\n return useKitSemanticSearch([], { model: assistantConfig })\n}\n\n/**\n * The chat engine for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`. It works on the open conversation of the session in\n * scope (wrap a second chat on the page in `ConversationScope`).\n */\nexport function useConnectedChat(\n options?: Omit<UseConversationOptions, 'workspaceId'>\n): ArbiConversation & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n // The engine's own candidates: what the composer inserts is what a send routes on.\n const mentionCandidates = buildMentionCandidates(\n status === 'authenticated' ? members : [],\n user?.externalId\n )\n const chat = useConversation({\n ...options,\n workspaceId: wsId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n fromOther: !!user?.externalId && message.authorId !== user.externalId,\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Its chat keeps its own open conversation (and\n * survives closing the dock).\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n return (\n <ConversationScope>\n <ScopedAssistantDock {...props} />\n </ConversationScope>\n )\n}\n\nfunction ScopedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkJI6BZ2FR_cjs = require('./chunk-JI6BZ2FR.cjs');
|
|
5
|
+
var chunkPPMSDZ57_cjs = require('./chunk-PPMSDZ57.cjs');
|
|
6
6
|
var chunkTMX7YFVM_cjs = require('./chunk-TMX7YFVM.cjs');
|
|
7
7
|
var react$1 = require('react');
|
|
8
8
|
var react = require('@arbidocs/react');
|
|
@@ -86,14 +86,14 @@ function ConnectedTagEntity({
|
|
|
86
86
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Created:" }),
|
|
87
87
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: ui.formatFriendlyDate(tag.created_at) }),
|
|
88
88
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "by" }),
|
|
89
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkJI6BZ2FR_cjs.UserAvatar, { user: creator ?? void 0 })
|
|
90
90
|
] }),
|
|
91
91
|
tag.updated_at && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
92
92
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Updated:" }),
|
|
93
93
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: ui.formatFriendlyDate(tag.updated_at) }),
|
|
94
94
|
updater && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
95
95
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "by" }),
|
|
96
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
96
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkJI6BZ2FR_cjs.UserAvatar, { user: updater })
|
|
97
97
|
] })
|
|
98
98
|
] })
|
|
99
99
|
] })
|
|
@@ -115,8 +115,8 @@ function FolderPicker({
|
|
|
115
115
|
value,
|
|
116
116
|
onSelect
|
|
117
117
|
}) {
|
|
118
|
-
const folders =
|
|
119
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
const folders = chunkJI6BZ2FR_cjs.useDocumentFolders(documents, value);
|
|
119
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FolderCommandList, { folders, value, onSelect, showRemove: !!value });
|
|
120
120
|
}
|
|
121
121
|
function RelatedDocuments({
|
|
122
122
|
doc,
|
|
@@ -128,7 +128,7 @@ function RelatedDocuments({
|
|
|
128
128
|
}) {
|
|
129
129
|
const viewingDocumentId = react.useOpenViewerDocumentId();
|
|
130
130
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
131
|
-
|
|
131
|
+
chunkJI6BZ2FR_cjs.RelatedDocumentsCell,
|
|
132
132
|
{
|
|
133
133
|
currentDoc: doc,
|
|
134
134
|
related,
|
|
@@ -151,9 +151,9 @@ function DocTagAttribution({ doctag }) {
|
|
|
151
151
|
updater && `Updated ${ui.formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`
|
|
152
152
|
].filter((line) => !!line);
|
|
153
153
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
-
|
|
154
|
+
chunkPPMSDZ57_cjs.FieldAttribution,
|
|
155
155
|
{
|
|
156
|
-
avatar: /* @__PURE__ */ jsxRuntime.jsx(
|
|
156
|
+
avatar: /* @__PURE__ */ jsxRuntime.jsx(chunkJI6BZ2FR_cjs.DocumentUser, { user: lastUser, tooltip: false }),
|
|
157
157
|
date: ui.formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at),
|
|
158
158
|
lines
|
|
159
159
|
}
|
|
@@ -181,7 +181,7 @@ function LabelsCombobox({
|
|
|
181
181
|
else if (!appliedTagIds.has(existing.external_id)) onToggle(existing);
|
|
182
182
|
};
|
|
183
183
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
184
|
-
|
|
184
|
+
chunkPPMSDZ57_cjs.FieldLabelsSelect,
|
|
185
185
|
{
|
|
186
186
|
options,
|
|
187
187
|
appliedIds: appliedTagIds,
|
|
@@ -203,15 +203,15 @@ var METADATA_FIELDS = {
|
|
|
203
203
|
};
|
|
204
204
|
var INPUT_CLASS = "text-sm bg-muted/40 focus:bg-background transition-colors";
|
|
205
205
|
var READ_ONLY_FIELDS = {
|
|
206
|
-
file_name: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
207
|
-
status: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
208
|
-
n_pages: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
209
|
-
created_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
210
|
-
updated_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
211
|
-
file_type: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
212
|
-
file_size: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
213
|
-
doc_id: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
214
|
-
content_hash: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
206
|
+
file_name: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "strong", children: doc.file_name || "N/A" }),
|
|
207
|
+
status: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", children: doc.status || "N/A" }),
|
|
208
|
+
n_pages: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", children: doc.n_pages || "N/A" }),
|
|
209
|
+
created_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", children: doc.created_at ? ui.formatFriendlyDate(doc.created_at) : "N/A" }),
|
|
210
|
+
updated_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", children: doc.updated_at ? ui.formatFriendlyDate(doc.updated_at) : "N/A" }),
|
|
211
|
+
file_type: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", children: ui.friendlyFileType(doc.file_type, doc.file_name) }),
|
|
212
|
+
file_size: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", children: doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : "N/A" }),
|
|
213
|
+
doc_id: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", isMono: true, children: doc.external_id || "N/A" }),
|
|
214
|
+
content_hash: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { tone: "muted", isMono: true, isTruncated: true, children: doc.content_hash || "N/A" })
|
|
215
215
|
};
|
|
216
216
|
function documentFieldContent(options) {
|
|
217
217
|
const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options;
|
|
@@ -234,16 +234,16 @@ function documentFieldContent(options) {
|
|
|
234
234
|
placeholder: `Add ${getColumnLabel(columnId).toLowerCase()}\u2026`,
|
|
235
235
|
className: INPUT_CLASS
|
|
236
236
|
}
|
|
237
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
237
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldValue, { children: metadata(doc) || "N/A" })
|
|
238
238
|
);
|
|
239
239
|
}
|
|
240
240
|
const readOnly = READ_ONLY_FIELDS[columnId];
|
|
241
241
|
if (readOnly) return standard(readOnly(doc));
|
|
242
|
-
if (columnId === "created_by") return standard(/* @__PURE__ */ jsxRuntime.jsx(
|
|
242
|
+
if (columnId === "created_by") return standard(/* @__PURE__ */ jsxRuntime.jsx(chunkJI6BZ2FR_cjs.DocumentUser, { user: options.creator }));
|
|
243
243
|
if (columnId === "folder") {
|
|
244
244
|
return standard(
|
|
245
245
|
canEdit ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
-
|
|
246
|
+
chunkPPMSDZ57_cjs.FieldFolderSelect,
|
|
247
247
|
{
|
|
248
248
|
folder: doc.folder,
|
|
249
249
|
picker: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -255,7 +255,7 @@ function documentFieldContent(options) {
|
|
|
255
255
|
}
|
|
256
256
|
)
|
|
257
257
|
}
|
|
258
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
258
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldFolderValue, { folder: doc.folder })
|
|
259
259
|
);
|
|
260
260
|
}
|
|
261
261
|
if (columnId === "related") {
|
|
@@ -298,7 +298,7 @@ function documentFieldContent(options) {
|
|
|
298
298
|
let value;
|
|
299
299
|
if (tag.tag_type.type === "select") {
|
|
300
300
|
value = /* @__PURE__ */ jsxRuntime.jsx(
|
|
301
|
-
|
|
301
|
+
chunkPPMSDZ57_cjs.FieldNativeSelect,
|
|
302
302
|
{
|
|
303
303
|
value: doctag?.note || "",
|
|
304
304
|
options: tag.tag_type.options,
|
|
@@ -332,12 +332,12 @@ function documentFieldContent(options) {
|
|
|
332
332
|
return {
|
|
333
333
|
label: tag.name,
|
|
334
334
|
tag,
|
|
335
|
-
children: doctag ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
335
|
+
children: doctag ? /* @__PURE__ */ jsxRuntime.jsx(chunkPPMSDZ57_cjs.FieldWithAttribution, { attribution: /* @__PURE__ */ jsxRuntime.jsx(DocTagAttribution, { doctag }), children: value }) : value
|
|
336
336
|
};
|
|
337
337
|
}
|
|
338
338
|
|
|
339
339
|
exports.ConnectedTagEntity = ConnectedTagEntity;
|
|
340
340
|
exports.documentFieldContent = documentFieldContent;
|
|
341
341
|
exports.useMemberLookup = useMemberLookup;
|
|
342
|
-
//# sourceMappingURL=chunk-
|
|
343
|
-
//# sourceMappingURL=chunk-
|
|
342
|
+
//# sourceMappingURL=chunk-OAYQ7P34.cjs.map
|
|
343
|
+
//# sourceMappingURL=chunk-OAYQ7P34.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/files/fields/useMemberLookup.ts","../src/connection/files/grid/ConnectedTagEntity.tsx","../src/connection/files/fields/DocumentFieldParts.tsx","../src/connection/files/fields/documentField.tsx"],"names":["useWorkspaceUsers","useCallback","useTags","useMemo","getTagTypeIcon","getEntityColor","jsxs","EntityTooltip","jsx","EntityTooltipHeader","getTagTypeLabel","Badge","VisibilityToggle","formatFriendlyDate","UserAvatar","Fragment","SharedTagEntity","useDocumentFolders","FolderCommandList","useOpenViewerDocumentId","RelatedDocumentsCell","FieldAttribution","DocumentUser","FieldLabelsSelect","getDocumentTitle","formatDocDate","getDocumentDate","FieldValue","friendlyFileType","DebouncedInput","value","FieldFolderSelect","FieldFolderValue","isLabelTag","tag","isAnnotationTag","FieldNativeSelect","Textarea","FieldWithAttribution"],"mappings":"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","file":"chunk-5FXFYTAQ.cjs","sourcesContent":["import { useCallback } from 'react'\nimport { useWorkspaceUsers, type DocumentPerson } from '@arbidocs/react'\n\n/** Finds a workspace member by id (undefined for anyone else, or no id). */\nexport function useMemberLookup(): (\n userId: string | null | undefined\n) => DocumentPerson | undefined {\n const { data: members = [] } = useWorkspaceUsers()\n return useCallback(\n (userId) => (userId ? members.find((m) => m.user.external_id === userId)?.user : undefined),\n [members]\n )\n}\n","/**\n * A label or field as a pill, with the rich hover card: its type, how many documents carry it, who\n * can see it (a toggle for its owner), and who created and last changed it. The pill itself is the\n * shared `TagEntity` of `@arbidocs/react/ui`; this adds what it reads from the session.\n */\n\nimport { useMemo } from 'react'\nimport { useTags, useWorkspaceUsers } from '@arbidocs/react'\nimport type { TagResponse } from '@arbidocs/sdk/browser'\nimport {\n Badge,\n formatFriendlyDate,\n getEntityColor,\n getTagTypeIcon,\n getTagTypeLabel,\n TagEntity as SharedTagEntity,\n VisibilityToggle,\n} from '@arbidocs/react/ui'\nimport { EntityTooltip, EntityTooltipHeader } from '../../../components/EntityTooltip'\nimport { UserAvatar } from './cells'\n\nexport interface ConnectedTagEntityProps {\n tag: TagResponse\n size?: 'sm' | 'md' | 'lg'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Whether to show the detailed tooltip (default: true) */\n showTooltip?: boolean\n /** Whether current user can edit this tag (owner) */\n canEdit?: boolean\n /** Callback when edit is requested (clicking visibility toggle as owner) */\n onEditClick?: () => void\n}\n\nexport function ConnectedTagEntity({\n tag,\n size = 'md',\n className = '',\n onClick,\n showTooltip = true,\n canEdit = false,\n onEditClick,\n}: ConnectedTagEntityProps) {\n // Get fresh tag data from React Query cache for accurate doctag_count\n const { data: workspaceTags } = useTags()\n\n // The workspace's members: who created and last changed it.\n const { data: members = [] } = useWorkspaceUsers()\n const byId = (id: string | null | undefined) =>\n id ? members.find((m) => m.user.external_id === id)?.user : undefined\n\n // Look up fresh tag from query cache, fall back to prop if not found\n const freshTag = useMemo(() => {\n if (!workspaceTags) return tag\n const found = workspaceTags.find((t) => t.external_id === tag.external_id)\n return found || tag\n }, [workspaceTags, tag])\n\n // Look up creator and updater from the people you know\n const creator = byId(tag.created_by_ext_id) ?? null\n const updater = byId(tag.updated_by_ext_id) ?? null\n\n const Icon = getTagTypeIcon(tag.tag_type.type)\n const tagColor = getEntityColor(tag.external_id, 'medium')\n\n // Handle visibility toggle click for owner\n const handleVisibilityToggle = () => {\n if (canEdit && onEditClick) {\n onEditClick()\n }\n }\n\n // Rich, store-coupled tooltip — injected into the shared pill.\n const tooltipContent = showTooltip ? (\n <EntityTooltip>\n <EntityTooltipHeader\n lead={\n <span\n className=\"inline-flex items-center justify-center rounded-md text-white p-1\"\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={16} />\n </span>\n }\n title={tag.name}\n />\n\n <div className=\"flex flex-col gap-1.5 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Type:</span>\n <span>{getTagTypeLabel(tag.tag_type.type)}</span>\n </div>\n\n {/* Files count - use freshTag for accurate count */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Documents:</span>\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] justify-center\">\n {freshTag.doctag_count ?? 0}\n </Badge>\n </div>\n\n {/* Visibility with toggle */}\n <div className=\"flex items-center gap-2\">\n <VisibilityToggle\n items={freshTag}\n onToggle={handleVisibilityToggle}\n disabled={!canEdit}\n showLabel={false}\n showTooltip={canEdit}\n tooltipActive=\"Click to edit\"\n tooltipInactive=\"Click to edit\"\n />\n <span className=\"text-muted-foreground\">{freshTag.shared ? 'Shared' : 'Private'}</span>\n </div>\n\n {/* Created at/by */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Created:</span>\n <span>{formatFriendlyDate(tag.created_at)}</span>\n <span className=\"text-muted-foreground\">by</span>\n <UserAvatar user={creator ?? undefined} />\n </div>\n\n {/* Updated at/by */}\n {tag.updated_at && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Updated:</span>\n <span>{formatFriendlyDate(tag.updated_at)}</span>\n {updater && (\n <>\n <span className=\"text-muted-foreground\">by</span>\n <UserAvatar user={updater} />\n </>\n )}\n </div>\n )}\n </div>\n </EntityTooltip>\n ) : undefined\n\n return (\n <SharedTagEntity\n tag={{ ...tag, color: tagColor }}\n size={size}\n className={className}\n onClick={onClick}\n showTooltip={showTooltip}\n tooltipContent={tooltipContent}\n />\n )\n}\n","/**\n * The parts of the review form's fields: the folder picker, the related documents, who last set a\n * value, and the labels picker.\n */\n\nimport { useMemo } from 'react'\nimport type { TagResponse } from '@arbidocs/sdk/browser'\nimport { useOpenViewerDocumentId, type RelatedDocs, type WorkspaceDocument } from '@arbidocs/react'\nimport { formatFriendlyDate, getEntityColor } from '@arbidocs/react/ui'\nimport { FieldAttribution, FieldLabelsSelect } from '../../../files/FieldParts'\nimport type { LabelOption } from '../../../files/cells/LabelMultiSelect'\nimport { FolderCommandList } from '../../../files/FolderPicker'\nimport { RelatedDocumentsCell, useDocumentFolders } from '../grid/cells'\nimport { DocumentUser } from './DocumentUser'\nimport { useMemberLookup } from './useMemberLookup'\n\ntype DocTag = NonNullable<WorkspaceDocument['doctags']>[number]\n\n/** The workspace's folders to move the document to. */\nexport function FolderPicker({\n documents,\n value,\n onSelect,\n}: {\n documents: WorkspaceDocument[]\n value: string | null | undefined\n onSelect: (folder: string | null) => void\n}) {\n const folders = useDocumentFolders(documents, value)\n return (\n <FolderCommandList folders={folders} value={value} onSelect={onSelect} showRemove={!!value} />\n )\n}\n\n/** The related documents, the one open in the viewer marked. */\nexport function RelatedDocuments({\n doc,\n related,\n onOpen,\n onDelete,\n canDelete,\n onCompare,\n}: {\n doc: WorkspaceDocument\n related: RelatedDocs<WorkspaceDocument>\n onOpen?: (docId: string) => void\n onDelete?: (docId: string) => void\n canDelete?: (doc: WorkspaceDocument) => boolean\n onCompare?: (docId: string, otherDocId: string) => void\n}) {\n const viewingDocumentId = useOpenViewerDocumentId()\n return (\n <RelatedDocumentsCell\n currentDoc={doc}\n related={related}\n viewingDocumentId={viewingDocumentId}\n onDocumentClick={(id) => onOpen?.(id)}\n onDelete={(other) => onDelete?.(other.external_id)}\n canDelete={canDelete}\n onCompare={onCompare}\n />\n )\n}\n\n/** Who last set a value, and when: shown on hover. */\nexport function DocTagAttribution({ doctag }: { doctag: DocTag }) {\n const memberById = useMemberLookup()\n const creator = memberById(doctag.created_by_ext_id)\n const updater =\n doctag.updated_by_ext_id && doctag.updated_by_ext_id !== doctag.created_by_ext_id\n ? memberById(doctag.updated_by_ext_id)\n : undefined\n const lastUser = updater || creator\n if (!lastUser) return null\n const lines = [\n creator &&\n `Created ${formatFriendlyDate(doctag.created_at)} by ${creator.given_name || creator.email}`,\n updater &&\n `Updated ${formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`,\n ].filter((line): line is string => !!line)\n return (\n <FieldAttribution\n avatar={<DocumentUser user={lastUser} tooltip={false} />}\n date={formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at)}\n lines={lines}\n />\n )\n}\n\n/** The labels as a picker: toggle one, or create one by name and apply it. */\nexport function LabelsCombobox({\n labelTags,\n appliedTagIds,\n onToggle,\n onCreateAndApply,\n}: {\n labelTags: TagResponse[]\n appliedTagIds: ReadonlySet<string>\n onToggle: (tag: TagResponse) => void\n onCreateAndApply?: (name: string) => void\n}) {\n const options: LabelOption[] = useMemo(\n () =>\n labelTags.map((t) => ({\n id: t.external_id,\n name: t.name,\n color: getEntityColor(t.external_id, 'medium'),\n })),\n [labelTags]\n )\n\n // An existing label of that name (any case) is applied rather than made again.\n const handleCreate = (name: string) => {\n const trimmed = name.trim()\n if (!trimmed) return\n const existing = labelTags.find((t) => t.name.toLowerCase() === trimmed.toLowerCase())\n if (!existing) onCreateAndApply?.(trimmed)\n else if (!appliedTagIds.has(existing.external_id)) onToggle(existing)\n }\n\n return (\n <FieldLabelsSelect\n options={options}\n appliedIds={appliedTagIds}\n onToggle={(id) => {\n const tag = labelTags.find((t) => t.external_id === id)\n if (tag) onToggle(tag)\n }}\n onCreate={onCreateAndApply ? handleCreate : undefined}\n />\n )\n}\n","/**\n * One field of a document as the review form shows it (a column of the documents table, one per\n * row): its label, icon and the value, editable where the table's column is. Standard fields,\n * metadata, the folder, related documents, the labels and each annotation (with who last set it).\n */\n\nimport type { ElementType, ReactNode } from 'react'\nimport { isAnnotationTag, isLabelTag, type TagResponse } from '@arbidocs/sdk/browser'\nimport type { DocumentPerson, RelatedDocs, WorkspaceDocument } from '@arbidocs/react'\nimport {\n DebouncedInput,\n formatFriendlyDate,\n friendlyFileType,\n Textarea,\n formatDocDate,\n getDocumentDate,\n getDocumentTitle,\n} from '@arbidocs/react/ui'\nimport {\n FieldFolderSelect,\n FieldFolderValue,\n FieldNativeSelect,\n FieldValue,\n FieldWithAttribution,\n} from '../../../files/FieldParts'\nimport { DocumentUser } from './DocumentUser'\nimport {\n DocTagAttribution,\n FolderPicker,\n LabelsCombobox,\n RelatedDocuments,\n} from './DocumentFieldParts'\n\ntype DocTag = NonNullable<WorkspaceDocument['doctags']>[number]\nexport type DocTagCitations = NonNullable<DocTag['citations']> | null\n\n/** A field as the form lays it out. */\nexport interface DocumentFieldContent {\n label: string\n icon?: ReactNode\n /** The annotation the field is (its pill is shown as the label). */\n tag?: TagResponse\n children: ReactNode\n}\n\nexport interface DocumentFieldOptions {\n /** The column (a standard field's id, or an annotation's tag id). */\n columnId: string\n doc: WorkspaceDocument\n canEdit: boolean\n workspaceTags: TagResponse[]\n /** The workspace's documents (the folders to pick from). */\n allDocuments?: WorkspaceDocument[]\n /** Who uploaded the document. */\n creator?: DocumentPerson\n getColumnLabel: (colId: string) => string\n getColumnIcon: (colId: string) => ElementType | undefined\n isColumnEditable: (colId: string) => boolean\n onUpdateDocumentField: (field: string, value: unknown) => void\n onUpdateTagValue: (tag: TagResponse, value: string | boolean) => void\n onUpdateTagWithCitations: (tag: TagResponse, note: string, citations: DocTagCitations) => void\n /** Create a label and apply it (the labels picker). Absent: the picker only toggles. */\n onCreateAndApplyLabel?: (name: string) => void\n /** The document's related documents (email family, copies, duplicates, similar). */\n relatedDocs?: RelatedDocs<WorkspaceDocument>\n /** Open a related document. */\n onOpenDocument?: (docId: string) => void\n /** Delete a related document (asks first). */\n onDeleteDocument?: (docId: string) => void\n canDeleteRelatedDocument?: (doc: WorkspaceDocument) => boolean\n /** Compare with a similar document. Absent: not offered. */\n onCompareDocuments?: (docId: string, otherDocId: string) => void\n}\n\n/** The document metadata a field edits as text. */\nconst METADATA_FIELDS: Record<string, (doc: WorkspaceDocument) => string> = {\n title: (doc) => getDocumentTitle(doc),\n doc_nature: (doc) => doc.doc_metadata?.doc_nature || '',\n doc_author: (doc) => doc.doc_metadata?.doc_author || '',\n doc_subject: (doc) => doc.doc_metadata?.doc_subject || '',\n // As the table shows it: with the time when the value has one (emails).\n doc_date: (doc) => formatDocDate(getDocumentDate(doc)),\n}\n\nconst INPUT_CLASS = 'text-sm bg-muted/40 focus:bg-background transition-colors'\n\n/** A read-only standard field: its value (muted unless said otherwise). */\nconst READ_ONLY_FIELDS: Record<string, (doc: WorkspaceDocument) => ReactNode> = {\n file_name: (doc) => <FieldValue tone=\"strong\">{doc.file_name || 'N/A'}</FieldValue>,\n status: (doc) => <FieldValue tone=\"muted\">{doc.status || 'N/A'}</FieldValue>,\n n_pages: (doc) => <FieldValue tone=\"muted\">{doc.n_pages || 'N/A'}</FieldValue>,\n created_at: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.created_at ? formatFriendlyDate(doc.created_at) : 'N/A'}\n </FieldValue>\n ),\n updated_at: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.updated_at ? formatFriendlyDate(doc.updated_at) : 'N/A'}\n </FieldValue>\n ),\n file_type: (doc) => (\n <FieldValue tone=\"muted\">{friendlyFileType(doc.file_type, doc.file_name)}</FieldValue>\n ),\n file_size: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : 'N/A'}\n </FieldValue>\n ),\n doc_id: (doc) => (\n <FieldValue tone=\"muted\" isMono>\n {doc.external_id || 'N/A'}\n </FieldValue>\n ),\n content_hash: (doc) => (\n <FieldValue tone=\"muted\" isMono isTruncated>\n {doc.content_hash || 'N/A'}\n </FieldValue>\n ),\n}\n\n/** The field of `columnId`, or null when the document has none to show there. */\nexport function documentFieldContent(options: DocumentFieldOptions): DocumentFieldContent | null {\n const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options\n const Icon = getColumnIcon(columnId)\n const standard = (children: ReactNode): DocumentFieldContent => ({\n label: getColumnLabel(columnId),\n icon: Icon ? <Icon size={14} /> : undefined,\n children,\n })\n\n const metadata = METADATA_FIELDS[columnId]\n if (metadata) {\n const editable = options.isColumnEditable(columnId) && canEdit\n return standard(\n editable ? (\n <DebouncedInput\n value={metadata(doc)}\n onChange={(value) => options.onUpdateDocumentField(columnId, value)}\n multiline={true}\n placeholder={`Add ${getColumnLabel(columnId).toLowerCase()}…`}\n className={INPUT_CLASS}\n />\n ) : (\n <FieldValue>{metadata(doc) || 'N/A'}</FieldValue>\n )\n )\n }\n\n const readOnly = READ_ONLY_FIELDS[columnId]\n if (readOnly) return standard(readOnly(doc))\n\n if (columnId === 'created_by') return standard(<DocumentUser user={options.creator} />)\n\n if (columnId === 'folder') {\n return standard(\n canEdit ? (\n <FieldFolderSelect\n folder={doc.folder}\n picker={\n <FolderPicker\n documents={options.allDocuments ?? []}\n value={doc.folder}\n onSelect={(folder) => options.onUpdateDocumentField('folder', folder)}\n />\n }\n />\n ) : (\n <FieldFolderValue folder={doc.folder} />\n )\n )\n }\n\n if (columnId === 'related') {\n const related = options.relatedDocs\n if (!related) return null\n return standard(\n <RelatedDocuments\n doc={doc}\n related={related}\n onOpen={options.onOpenDocument}\n onDelete={options.onDeleteDocument}\n canDelete={options.canDeleteRelatedDocument}\n onCompare={options.onCompareDocuments}\n />\n )\n }\n\n if (columnId === 'all_tags') {\n // The labels (and issues), toggled in place.\n const labelTags = workspaceTags.filter(isLabelTag)\n const appliedIds = new Set(\n (doc.doctags ?? [])\n .filter((dt) => labelTags.some((t) => t.external_id === dt.tag_ext_id))\n .map((dt) => dt.tag_ext_id)\n )\n return standard(\n <LabelsCombobox\n labelTags={labelTags}\n appliedTagIds={appliedIds}\n onToggle={(tag) => options.onUpdateTagValue(tag, !appliedIds.has(tag.external_id))}\n onCreateAndApply={options.onCreateAndApplyLabel}\n />\n )\n }\n\n // An annotation (a label is a value of the Labels field, not a field of its own).\n const tag = workspaceTags.find((t) => t.external_id === columnId)\n if (!tag || !isAnnotationTag(tag)) return null\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n let value: ReactNode\n if (tag.tag_type.type === 'select') {\n value = (\n <FieldNativeSelect\n value={doctag?.note || ''}\n options={tag.tag_type.options}\n onChange={(next) => options.onUpdateTagValue(tag, next)}\n ariaLabel={tag.name}\n />\n )\n } else if (tag.tag_type.type === 'number') {\n value = (\n <DebouncedInput\n type=\"number\"\n value={doctag?.note || ''}\n onChange={(next) => options.onUpdateTagValue(tag, next)}\n placeholder={`Add ${tag.name.toLowerCase()}…`}\n className={INPUT_CLASS}\n />\n )\n } else {\n // A plain note: a value's citations come from generation and are kept as they are.\n value = (\n <Textarea\n value={doctag?.note || ''}\n onChange={(e) =>\n options.onUpdateTagWithCitations(tag, e.target.value, doctag?.citations ?? null)\n }\n placeholder=\"Add a note...\"\n rows={2}\n className={INPUT_CLASS}\n />\n )\n }\n\n return {\n label: tag.name,\n tag,\n children: doctag ? (\n <FieldWithAttribution attribution={<DocTagAttribution doctag={doctag} />}>\n {value}\n </FieldWithAttribution>\n ) : (\n value\n ),\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/files/fields/useMemberLookup.ts","../src/connection/files/grid/ConnectedTagEntity.tsx","../src/connection/files/fields/DocumentFieldParts.tsx","../src/connection/files/fields/documentField.tsx"],"names":["useWorkspaceUsers","useCallback","useTags","useMemo","getTagTypeIcon","getEntityColor","jsxs","EntityTooltip","jsx","EntityTooltipHeader","getTagTypeLabel","Badge","VisibilityToggle","formatFriendlyDate","UserAvatar","Fragment","SharedTagEntity","useDocumentFolders","FolderCommandList","useOpenViewerDocumentId","RelatedDocumentsCell","FieldAttribution","DocumentUser","FieldLabelsSelect","getDocumentTitle","formatDocDate","getDocumentDate","FieldValue","friendlyFileType","DebouncedInput","value","FieldFolderSelect","FieldFolderValue","isLabelTag","tag","isAnnotationTag","FieldNativeSelect","Textarea","FieldWithAttribution"],"mappings":"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","file":"chunk-OAYQ7P34.cjs","sourcesContent":["import { useCallback } from 'react'\nimport { useWorkspaceUsers, type DocumentPerson } from '@arbidocs/react'\n\n/** Finds a workspace member by id (undefined for anyone else, or no id). */\nexport function useMemberLookup(): (\n userId: string | null | undefined\n) => DocumentPerson | undefined {\n const { data: members = [] } = useWorkspaceUsers()\n return useCallback(\n (userId) => (userId ? members.find((m) => m.user.external_id === userId)?.user : undefined),\n [members]\n )\n}\n","/**\n * A label or field as a pill, with the rich hover card: its type, how many documents carry it, who\n * can see it (a toggle for its owner), and who created and last changed it. The pill itself is the\n * shared `TagEntity` of `@arbidocs/react/ui`; this adds what it reads from the session.\n */\n\nimport { useMemo } from 'react'\nimport { useTags, useWorkspaceUsers } from '@arbidocs/react'\nimport type { TagResponse } from '@arbidocs/sdk/browser'\nimport {\n Badge,\n formatFriendlyDate,\n getEntityColor,\n getTagTypeIcon,\n getTagTypeLabel,\n TagEntity as SharedTagEntity,\n VisibilityToggle,\n} from '@arbidocs/react/ui'\nimport { EntityTooltip, EntityTooltipHeader } from '../../../components/EntityTooltip'\nimport { UserAvatar } from './cells'\n\nexport interface ConnectedTagEntityProps {\n tag: TagResponse\n size?: 'sm' | 'md' | 'lg'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Whether to show the detailed tooltip (default: true) */\n showTooltip?: boolean\n /** Whether current user can edit this tag (owner) */\n canEdit?: boolean\n /** Callback when edit is requested (clicking visibility toggle as owner) */\n onEditClick?: () => void\n}\n\nexport function ConnectedTagEntity({\n tag,\n size = 'md',\n className = '',\n onClick,\n showTooltip = true,\n canEdit = false,\n onEditClick,\n}: ConnectedTagEntityProps) {\n // Get fresh tag data from React Query cache for accurate doctag_count\n const { data: workspaceTags } = useTags()\n\n // The workspace's members: who created and last changed it.\n const { data: members = [] } = useWorkspaceUsers()\n const byId = (id: string | null | undefined) =>\n id ? members.find((m) => m.user.external_id === id)?.user : undefined\n\n // Look up fresh tag from query cache, fall back to prop if not found\n const freshTag = useMemo(() => {\n if (!workspaceTags) return tag\n const found = workspaceTags.find((t) => t.external_id === tag.external_id)\n return found || tag\n }, [workspaceTags, tag])\n\n // Look up creator and updater from the people you know\n const creator = byId(tag.created_by_ext_id) ?? null\n const updater = byId(tag.updated_by_ext_id) ?? null\n\n const Icon = getTagTypeIcon(tag.tag_type.type)\n const tagColor = getEntityColor(tag.external_id, 'medium')\n\n // Handle visibility toggle click for owner\n const handleVisibilityToggle = () => {\n if (canEdit && onEditClick) {\n onEditClick()\n }\n }\n\n // Rich, store-coupled tooltip — injected into the shared pill.\n const tooltipContent = showTooltip ? (\n <EntityTooltip>\n <EntityTooltipHeader\n lead={\n <span\n className=\"inline-flex items-center justify-center rounded-md text-white p-1\"\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={16} />\n </span>\n }\n title={tag.name}\n />\n\n <div className=\"flex flex-col gap-1.5 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Type:</span>\n <span>{getTagTypeLabel(tag.tag_type.type)}</span>\n </div>\n\n {/* Files count - use freshTag for accurate count */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Documents:</span>\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] justify-center\">\n {freshTag.doctag_count ?? 0}\n </Badge>\n </div>\n\n {/* Visibility with toggle */}\n <div className=\"flex items-center gap-2\">\n <VisibilityToggle\n items={freshTag}\n onToggle={handleVisibilityToggle}\n disabled={!canEdit}\n showLabel={false}\n showTooltip={canEdit}\n tooltipActive=\"Click to edit\"\n tooltipInactive=\"Click to edit\"\n />\n <span className=\"text-muted-foreground\">{freshTag.shared ? 'Shared' : 'Private'}</span>\n </div>\n\n {/* Created at/by */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Created:</span>\n <span>{formatFriendlyDate(tag.created_at)}</span>\n <span className=\"text-muted-foreground\">by</span>\n <UserAvatar user={creator ?? undefined} />\n </div>\n\n {/* Updated at/by */}\n {tag.updated_at && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Updated:</span>\n <span>{formatFriendlyDate(tag.updated_at)}</span>\n {updater && (\n <>\n <span className=\"text-muted-foreground\">by</span>\n <UserAvatar user={updater} />\n </>\n )}\n </div>\n )}\n </div>\n </EntityTooltip>\n ) : undefined\n\n return (\n <SharedTagEntity\n tag={{ ...tag, color: tagColor }}\n size={size}\n className={className}\n onClick={onClick}\n showTooltip={showTooltip}\n tooltipContent={tooltipContent}\n />\n )\n}\n","/**\n * The parts of the review form's fields: the folder picker, the related documents, who last set a\n * value, and the labels picker.\n */\n\nimport { useMemo } from 'react'\nimport type { TagResponse } from '@arbidocs/sdk/browser'\nimport { useOpenViewerDocumentId, type RelatedDocs, type WorkspaceDocument } from '@arbidocs/react'\nimport { formatFriendlyDate, getEntityColor } from '@arbidocs/react/ui'\nimport { FieldAttribution, FieldLabelsSelect } from '../../../files/FieldParts'\nimport type { LabelOption } from '../../../files/cells/LabelMultiSelect'\nimport { FolderCommandList } from '../../../files/FolderPicker'\nimport { RelatedDocumentsCell, useDocumentFolders } from '../grid/cells'\nimport { DocumentUser } from './DocumentUser'\nimport { useMemberLookup } from './useMemberLookup'\n\ntype DocTag = NonNullable<WorkspaceDocument['doctags']>[number]\n\n/** The workspace's folders to move the document to. */\nexport function FolderPicker({\n documents,\n value,\n onSelect,\n}: {\n documents: WorkspaceDocument[]\n value: string | null | undefined\n onSelect: (folder: string | null) => void\n}) {\n const folders = useDocumentFolders(documents, value)\n return (\n <FolderCommandList folders={folders} value={value} onSelect={onSelect} showRemove={!!value} />\n )\n}\n\n/** The related documents, the one open in the viewer marked. */\nexport function RelatedDocuments({\n doc,\n related,\n onOpen,\n onDelete,\n canDelete,\n onCompare,\n}: {\n doc: WorkspaceDocument\n related: RelatedDocs<WorkspaceDocument>\n onOpen?: (docId: string) => void\n onDelete?: (docId: string) => void\n canDelete?: (doc: WorkspaceDocument) => boolean\n onCompare?: (docId: string, otherDocId: string) => void\n}) {\n const viewingDocumentId = useOpenViewerDocumentId()\n return (\n <RelatedDocumentsCell\n currentDoc={doc}\n related={related}\n viewingDocumentId={viewingDocumentId}\n onDocumentClick={(id) => onOpen?.(id)}\n onDelete={(other) => onDelete?.(other.external_id)}\n canDelete={canDelete}\n onCompare={onCompare}\n />\n )\n}\n\n/** Who last set a value, and when: shown on hover. */\nexport function DocTagAttribution({ doctag }: { doctag: DocTag }) {\n const memberById = useMemberLookup()\n const creator = memberById(doctag.created_by_ext_id)\n const updater =\n doctag.updated_by_ext_id && doctag.updated_by_ext_id !== doctag.created_by_ext_id\n ? memberById(doctag.updated_by_ext_id)\n : undefined\n const lastUser = updater || creator\n if (!lastUser) return null\n const lines = [\n creator &&\n `Created ${formatFriendlyDate(doctag.created_at)} by ${creator.given_name || creator.email}`,\n updater &&\n `Updated ${formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`,\n ].filter((line): line is string => !!line)\n return (\n <FieldAttribution\n avatar={<DocumentUser user={lastUser} tooltip={false} />}\n date={formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at)}\n lines={lines}\n />\n )\n}\n\n/** The labels as a picker: toggle one, or create one by name and apply it. */\nexport function LabelsCombobox({\n labelTags,\n appliedTagIds,\n onToggle,\n onCreateAndApply,\n}: {\n labelTags: TagResponse[]\n appliedTagIds: ReadonlySet<string>\n onToggle: (tag: TagResponse) => void\n onCreateAndApply?: (name: string) => void\n}) {\n const options: LabelOption[] = useMemo(\n () =>\n labelTags.map((t) => ({\n id: t.external_id,\n name: t.name,\n color: getEntityColor(t.external_id, 'medium'),\n })),\n [labelTags]\n )\n\n // An existing label of that name (any case) is applied rather than made again.\n const handleCreate = (name: string) => {\n const trimmed = name.trim()\n if (!trimmed) return\n const existing = labelTags.find((t) => t.name.toLowerCase() === trimmed.toLowerCase())\n if (!existing) onCreateAndApply?.(trimmed)\n else if (!appliedTagIds.has(existing.external_id)) onToggle(existing)\n }\n\n return (\n <FieldLabelsSelect\n options={options}\n appliedIds={appliedTagIds}\n onToggle={(id) => {\n const tag = labelTags.find((t) => t.external_id === id)\n if (tag) onToggle(tag)\n }}\n onCreate={onCreateAndApply ? handleCreate : undefined}\n />\n )\n}\n","/**\n * One field of a document as the review form shows it (a column of the documents table, one per\n * row): its label, icon and the value, editable where the table's column is. Standard fields,\n * metadata, the folder, related documents, the labels and each annotation (with who last set it).\n */\n\nimport type { ElementType, ReactNode } from 'react'\nimport { isAnnotationTag, isLabelTag, type TagResponse } from '@arbidocs/sdk/browser'\nimport type { DocumentPerson, RelatedDocs, WorkspaceDocument } from '@arbidocs/react'\nimport {\n DebouncedInput,\n formatFriendlyDate,\n friendlyFileType,\n Textarea,\n formatDocDate,\n getDocumentDate,\n getDocumentTitle,\n} from '@arbidocs/react/ui'\nimport {\n FieldFolderSelect,\n FieldFolderValue,\n FieldNativeSelect,\n FieldValue,\n FieldWithAttribution,\n} from '../../../files/FieldParts'\nimport { DocumentUser } from './DocumentUser'\nimport {\n DocTagAttribution,\n FolderPicker,\n LabelsCombobox,\n RelatedDocuments,\n} from './DocumentFieldParts'\n\ntype DocTag = NonNullable<WorkspaceDocument['doctags']>[number]\nexport type DocTagCitations = NonNullable<DocTag['citations']> | null\n\n/** A field as the form lays it out. */\nexport interface DocumentFieldContent {\n label: string\n icon?: ReactNode\n /** The annotation the field is (its pill is shown as the label). */\n tag?: TagResponse\n children: ReactNode\n}\n\nexport interface DocumentFieldOptions {\n /** The column (a standard field's id, or an annotation's tag id). */\n columnId: string\n doc: WorkspaceDocument\n canEdit: boolean\n workspaceTags: TagResponse[]\n /** The workspace's documents (the folders to pick from). */\n allDocuments?: WorkspaceDocument[]\n /** Who uploaded the document. */\n creator?: DocumentPerson\n getColumnLabel: (colId: string) => string\n getColumnIcon: (colId: string) => ElementType | undefined\n isColumnEditable: (colId: string) => boolean\n onUpdateDocumentField: (field: string, value: unknown) => void\n onUpdateTagValue: (tag: TagResponse, value: string | boolean) => void\n onUpdateTagWithCitations: (tag: TagResponse, note: string, citations: DocTagCitations) => void\n /** Create a label and apply it (the labels picker). Absent: the picker only toggles. */\n onCreateAndApplyLabel?: (name: string) => void\n /** The document's related documents (email family, copies, duplicates, similar). */\n relatedDocs?: RelatedDocs<WorkspaceDocument>\n /** Open a related document. */\n onOpenDocument?: (docId: string) => void\n /** Delete a related document (asks first). */\n onDeleteDocument?: (docId: string) => void\n canDeleteRelatedDocument?: (doc: WorkspaceDocument) => boolean\n /** Compare with a similar document. Absent: not offered. */\n onCompareDocuments?: (docId: string, otherDocId: string) => void\n}\n\n/** The document metadata a field edits as text. */\nconst METADATA_FIELDS: Record<string, (doc: WorkspaceDocument) => string> = {\n title: (doc) => getDocumentTitle(doc),\n doc_nature: (doc) => doc.doc_metadata?.doc_nature || '',\n doc_author: (doc) => doc.doc_metadata?.doc_author || '',\n doc_subject: (doc) => doc.doc_metadata?.doc_subject || '',\n // As the table shows it: with the time when the value has one (emails).\n doc_date: (doc) => formatDocDate(getDocumentDate(doc)),\n}\n\nconst INPUT_CLASS = 'text-sm bg-muted/40 focus:bg-background transition-colors'\n\n/** A read-only standard field: its value (muted unless said otherwise). */\nconst READ_ONLY_FIELDS: Record<string, (doc: WorkspaceDocument) => ReactNode> = {\n file_name: (doc) => <FieldValue tone=\"strong\">{doc.file_name || 'N/A'}</FieldValue>,\n status: (doc) => <FieldValue tone=\"muted\">{doc.status || 'N/A'}</FieldValue>,\n n_pages: (doc) => <FieldValue tone=\"muted\">{doc.n_pages || 'N/A'}</FieldValue>,\n created_at: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.created_at ? formatFriendlyDate(doc.created_at) : 'N/A'}\n </FieldValue>\n ),\n updated_at: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.updated_at ? formatFriendlyDate(doc.updated_at) : 'N/A'}\n </FieldValue>\n ),\n file_type: (doc) => (\n <FieldValue tone=\"muted\">{friendlyFileType(doc.file_type, doc.file_name)}</FieldValue>\n ),\n file_size: (doc) => (\n <FieldValue tone=\"muted\">\n {doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : 'N/A'}\n </FieldValue>\n ),\n doc_id: (doc) => (\n <FieldValue tone=\"muted\" isMono>\n {doc.external_id || 'N/A'}\n </FieldValue>\n ),\n content_hash: (doc) => (\n <FieldValue tone=\"muted\" isMono isTruncated>\n {doc.content_hash || 'N/A'}\n </FieldValue>\n ),\n}\n\n/** The field of `columnId`, or null when the document has none to show there. */\nexport function documentFieldContent(options: DocumentFieldOptions): DocumentFieldContent | null {\n const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options\n const Icon = getColumnIcon(columnId)\n const standard = (children: ReactNode): DocumentFieldContent => ({\n label: getColumnLabel(columnId),\n icon: Icon ? <Icon size={14} /> : undefined,\n children,\n })\n\n const metadata = METADATA_FIELDS[columnId]\n if (metadata) {\n const editable = options.isColumnEditable(columnId) && canEdit\n return standard(\n editable ? (\n <DebouncedInput\n value={metadata(doc)}\n onChange={(value) => options.onUpdateDocumentField(columnId, value)}\n multiline={true}\n placeholder={`Add ${getColumnLabel(columnId).toLowerCase()}…`}\n className={INPUT_CLASS}\n />\n ) : (\n <FieldValue>{metadata(doc) || 'N/A'}</FieldValue>\n )\n )\n }\n\n const readOnly = READ_ONLY_FIELDS[columnId]\n if (readOnly) return standard(readOnly(doc))\n\n if (columnId === 'created_by') return standard(<DocumentUser user={options.creator} />)\n\n if (columnId === 'folder') {\n return standard(\n canEdit ? (\n <FieldFolderSelect\n folder={doc.folder}\n picker={\n <FolderPicker\n documents={options.allDocuments ?? []}\n value={doc.folder}\n onSelect={(folder) => options.onUpdateDocumentField('folder', folder)}\n />\n }\n />\n ) : (\n <FieldFolderValue folder={doc.folder} />\n )\n )\n }\n\n if (columnId === 'related') {\n const related = options.relatedDocs\n if (!related) return null\n return standard(\n <RelatedDocuments\n doc={doc}\n related={related}\n onOpen={options.onOpenDocument}\n onDelete={options.onDeleteDocument}\n canDelete={options.canDeleteRelatedDocument}\n onCompare={options.onCompareDocuments}\n />\n )\n }\n\n if (columnId === 'all_tags') {\n // The labels (and issues), toggled in place.\n const labelTags = workspaceTags.filter(isLabelTag)\n const appliedIds = new Set(\n (doc.doctags ?? [])\n .filter((dt) => labelTags.some((t) => t.external_id === dt.tag_ext_id))\n .map((dt) => dt.tag_ext_id)\n )\n return standard(\n <LabelsCombobox\n labelTags={labelTags}\n appliedTagIds={appliedIds}\n onToggle={(tag) => options.onUpdateTagValue(tag, !appliedIds.has(tag.external_id))}\n onCreateAndApply={options.onCreateAndApplyLabel}\n />\n )\n }\n\n // An annotation (a label is a value of the Labels field, not a field of its own).\n const tag = workspaceTags.find((t) => t.external_id === columnId)\n if (!tag || !isAnnotationTag(tag)) return null\n const doctag = doc.doctags?.find((dt) => dt.tag_ext_id === tag.external_id)\n\n let value: ReactNode\n if (tag.tag_type.type === 'select') {\n value = (\n <FieldNativeSelect\n value={doctag?.note || ''}\n options={tag.tag_type.options}\n onChange={(next) => options.onUpdateTagValue(tag, next)}\n ariaLabel={tag.name}\n />\n )\n } else if (tag.tag_type.type === 'number') {\n value = (\n <DebouncedInput\n type=\"number\"\n value={doctag?.note || ''}\n onChange={(next) => options.onUpdateTagValue(tag, next)}\n placeholder={`Add ${tag.name.toLowerCase()}…`}\n className={INPUT_CLASS}\n />\n )\n } else {\n // A plain note: a value's citations come from generation and are kept as they are.\n value = (\n <Textarea\n value={doctag?.note || ''}\n onChange={(e) =>\n options.onUpdateTagWithCitations(tag, e.target.value, doctag?.citations ?? null)\n }\n placeholder=\"Add a note...\"\n rows={2}\n className={INPUT_CLASS}\n />\n )\n }\n\n return {\n label: tag.name,\n tag,\n children: doctag ? (\n <FieldWithAttribution attribution={<DocTagAttribution doctag={doctag} />}>\n {value}\n </FieldWithAttribution>\n ) : (\n value\n ),\n }\n}\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { DocumentUser } from './chunk-
|
|
2
|
+
import { DocumentUser } from './chunk-7P6PSBFC.js';
|
|
3
3
|
import { useOpenWorkflow } from './chunk-LUKHMTIT.js';
|
|
4
|
-
import { latestMessageTime, isSupersededStop, fromPlanSteps, compactThreadActivity, unnotifiedMentions, AssistantEntity, notifiedLabel, linkedRunsFromActivity } from './chunk-
|
|
5
|
-
import { ThreadCallLogCard, RecordingCard } from './chunk-LYQNG4P3.js';
|
|
6
|
-
import { parseCallLogDetail } from './chunk-OI4DL2DX.js';
|
|
7
|
-
import { useOptionalConnection } from './chunk-RE67IM5B.js';
|
|
4
|
+
import { latestMessageTime, isSupersededStop, fromPlanSteps, compactThreadActivity, unnotifiedMentions, AssistantEntity, notifiedLabel, linkedRunsFromActivity } from './chunk-VUV3FCTJ.js';
|
|
8
5
|
import { stepKindOf, STEP_KIND_ICONS } from './chunk-HMICW5O7.js';
|
|
9
6
|
import { splitDocRef } from './chunk-3D7SX5ZS.js';
|
|
7
|
+
import { ThreadCallLogCard, RecordingCard } from './chunk-7ASLVC6T.js';
|
|
8
|
+
import { parseCallLogDetail } from './chunk-6JQU4FMW.js';
|
|
9
|
+
import { useOptionalConnection } from './chunk-RE67IM5B.js';
|
|
10
10
|
import { useBlocksEnvironment } from './chunk-6UFUXOON.js';
|
|
11
11
|
import { getDocumentTitle, getUserDisplayName, formatFriendlyDate, formatRelativeTime } from '@arbidocs/react/ui';
|
|
12
12
|
import { Clock } from 'lucide-react';
|
|
@@ -213,5 +213,5 @@ function useSelectWorkspace() {
|
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
export { useConnectedThreadActivity, useSelectWorkspace };
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
217
|
-
//# sourceMappingURL=chunk-
|
|
216
|
+
//# sourceMappingURL=chunk-OKB2L6IJ.js.map
|
|
217
|
+
//# sourceMappingURL=chunk-OKB2L6IJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":[],"mappings":"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","file":"chunk-TOST5RP2.js","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA0CA,IAAM,iBAAA,GAAuD;AAAA;AAAA,EAE3D,YAAA,EAAc,OAAA;AAAA,EACd,YAAA,EAAc,SAAA;AAAA,EACd,aAAA,EAAe,SAAA;AAAA,EACf,SAAA,EAAW,MAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA,EACd,WAAA,EAAa,QAAA;AAAA,EACb,cAAA,EAAgB;AAClB,CAAA;AAGA,SAAS,UAAA,CACP,IAAA,EACA,SAAA,EACA,QAAA,EACA;AACA,EAAA,MAAM,KAAA,GAAQ,kBAAkB,SAAS,CAAA;AACzC,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,gBAAgB,IAAI,CAAA;AACrC,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,sBAAM,GAAA,CAAC,QAAA,EAAA,EAAS,GAAI,QAAA,EAAS;AACrD;AAQO,SAAS,2BAA2B,cAAA,EAA2C;AACpF,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,EAAC,KAAM,YAAA,EAAa;AAC9C,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,oBAAA,EAAqB;AAC/C,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,EAAC,KAAM,iBAAA,EAAkB;AACjD,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,GAAO,EAAC,KAAM,YAAA,EAAa;AACzC,EAAA,MAAM,WAAW,uBAAA,CAAwB,cAAA,IAAkB,QAAW,EAAE,IAAA,EAAM,MAAM,CAAA;AACpF,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,mBAAA,EAAoB;AAC/C,EAAA,MAAM,cAAc,oBAAA,EAAqB;AACzC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAA,EAAS,GAAI,WAAA;AACnC,EAAA,MAAM,sBAAA,GAAyB,CAAC,EAAA,EAAY,SAAA,KAC1C,WAAA,CAAY,gBAAA,CAAiB,EAAA,EAAI,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,MAAS,CAAA;AAExE,EAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,EAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC/D,EAAA,MAAM,OAAO,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,cAAc,CAAA;AACvE,EAAA,MAAM,eAAA,GAAkB,kBAAkB,cAAc,CAAA;AACxD,EAAA,MAAM,MAAA,GAAA,CAAW,QAAA,CAAS,IAAA,IAAQ,EAAC,EAA2B,MAAA;AAAA,IAC5D,CAAC,KAAA,KAAU,CAAC,gBAAA,CAAiB,OAAO,eAAe;AAAA,GACrD;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAkB;AACpC,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,KAAgB,KAAK,CAAA,EAAG,IAAA;AAClE,IAAA,OAAO,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,SAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,YAAY,aAAA,CAAe,IAAA,EAAM,IAAA,EAAM,KAAA,IAAS,EAAqB,CAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,MAAA,EAAQ,CAAC,EAAA,KAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,GAAG,KAAK,CAAA;AAC/F,EAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,YAAW,KAAM;AAC1D,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,SAAA;AAAA,MACA,oBAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF,CAAE,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAErB,IAAA,MAAM,SAAA,GACJ,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,IAAK,OAAO,MAAM,MAAA,EAAQ,IAAA,KAAS,WAC5D,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA,GACjD,MAAA;AAEN,IAAA,MAAM,UAAA,GACJ,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,IAC9D,KAAA,CAAM,MAAA,CAAO,SAAA,CAAuB,EAAA,CAAG,EAAE,CAAA,GAC1C,MAAA;AACN,IAAA,MAAM,SAAA,GAAY,UAAA,GAAa,WAAA,CAAY,UAAU,EAAE,EAAA,GAAK,MAAA;AAC5D,IAAA,MAAM,aAAA,GAAgB,YAAY,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,SAAS,CAAA,GAAI,MAAA;AAClF,IAAA,MAAM,eAAe,SAAA,GACjB;AAAA,MACE,IAAA,EAAM,aAAA,GAAgB,gBAAA,CAAiB,aAAa,CAAA,GAAI,SAAA;AAAA,MACxD,MAAA,EAAQ,MAAM,YAAA,CAAa,SAAS;AAAA,KACtC,GACA,MAAA;AAEJ,IAAA,MAAM,SAAA,GACJ,KAAA,CAAM,IAAA,KAAS,qBAAA,IACf,KAAA,CAAM,IAAA,KAAS,mBAAA,IACf,KAAA,CAAM,MAAA,EAAQ,SAAA,KAAc,IAAA,IAC5B,SAAA,EAAW,IAAA,KAAS,OAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,MACrB,CAAC,CAAA,KACC,CAAA,CAAE,IAAA,CAAK,WAAA,MACN,KAAA,CAAM,YAAA,KAAiB,KAAA,CAAM,IAAA,KAAS,SAAA,GAAY,IAAA,EAAM,iBAAA,GAAoB,MAAA,CAAA;AAAA,KACjF,EAAG,IAAA;AACH,IAAA,MAAM,OAAO,SAAA,GAAY,MAAA,GAAS,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,QAAA;AACxE,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,CAAM,MAAA,EAAQ,eAAe,QAAA,GAAW,KAAA,CAAM,OAAO,UAAA,GAAa,MAAA;AACvF,IAAA,MAAM,aAAA,GACJ,OAAO,KAAA,CAAM,MAAA,EAAQ,mBAAmB,QAAA,GAAW,KAAA,CAAM,OAAO,cAAA,GAAiB,MAAA;AACnF,IAAA,MAAM,SAAA,GACJ,aAAA,IACA,CAAC,GAAG,cAAc,CAAA,CACf,OAAA,EAAQ,CACR,IAAA,CAAK,CAAC,OAAA,KAAY,IAAA,CAAK,KAAA,CAAM,QAAQ,UAAA,IAAc,EAAE,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,CAAA,EACrF,WAAA,IACJ,cAAA,CAAe,CAAC,CAAA,EAAG,WAAA;AACrB,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,KAAK,CAAA,GAAI,MAAA;AAEhE,IAAA,MAAM,WAAA,GACJ,KAAA,CAAM,IAAA,KAAS,UAAA,IACf,MAAM,MAAA,EAAQ,KAAA,KAAU,kBAAA,IACxB,OAAO,MAAM,MAAA,EAAQ,OAAA,KAAY,QAAA,GAC7B,KAAA,CAAM,OAAO,OAAA,GACb,MAAA;AAEN,IAAA,MAAM,MAAA,GACJ,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,WAAW,MAAA,GACpC,kBAAA;AAAA,MACE,eAAe,IAAA,CAAK,CAAC,YAAY,OAAA,CAAQ,WAAA,KAAgB,aAAa,CAAA,EAAG,QAAA;AAAA,MACzE,UAAA;AAAA,MACA,KAAA,CAAM;AAAA,QAER,EAAC;AAEP,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,KAAS,SAAS,kBAAA,CAAmB,KAAA,CAAM,MAAM,CAAA,GAAI,IAAA;AAE9E,IAAA,MAAM,aAAA,GACJ,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,OAAO,KAAA,CAAM,MAAA,EAAQ,WAAA,KAAgB,QAAA,GAC/D,KAAA,CAAM,MAAA,CAAO,WAAA,GACb,IAAA;AACN,IAAA,MAAM,WAAA,GACJ,OAAO,KAAA,CAAM,MAAA,EAAQ,qBAAqB,QAAA,GAAW,KAAA,CAAM,OAAO,gBAAA,GAAmB,IAAA;AACvF,IAAA,OAAO;AAAA,MACL,IAAI,KAAA,CAAM,WAAA;AAAA,MACV,MAAM,KAAA,CAAM,IAAA;AAAA;AAAA,MAEZ,IAAA,EAAM,OAAO,KAAA,CAAM,MAAA,EAAQ,SAAS,QAAA,GAAW,KAAA,CAAM,OAAO,IAAA,GAAO,MAAA;AAAA,MACnE,WAAW,KAAA,CAAM,UAAA;AAAA,MACjB,MAAM,UAAA,mBACJ,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAM,UAAA;AAAA,UACN,cAAA;AAAA,UACA,MAAM,kBAAA,CAAmB,KAAA,CAAM,YAAY,EAAE,KAAA,EAAO,SAAS;AAAA;AAAA,UAE7D,aAAA,mBACF,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAA;AAAA,UACX,cAAA,EAAgB,WAAA;AAAA,UAChB,OAAO,IAAA,EAAM,KAAA;AAAA,UACb,MAAM,kBAAA,CAAmB,KAAA,CAAM,YAAY,EAAE,KAAA,EAAO,SAAS;AAAA;AAAA,OAC/D,GACE,MAAA;AAAA,MACJ,KAAA;AAAA,MACA,QAAA,EAAU,GAAA,GAAM,gBAAA,CAAiB,GAAG,CAAA,GAAI,MAAA;AAAA,MACxC,OAAO,WAAA,GACH,oBAAA,GACA,KAAA,CAAM,IAAA,KAAS,cAAc,UAAA,CAAW,MAAA,GACtC,aAAA,CAAc,UAAA,CAAW,IAAI,UAAU,CAAA,EAAG,OAAO,GAAA,CAAI,UAAU,CAAC,CAAA,GAChE,KAAA;AAAA,MACN,WAAA,EAAa;AAAA,QACX,IAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAO;AACxB,UAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,KAAgB,EAAE,CAAA,EAAG,IAAA;AAC/D,UAAA,OAAO,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,EAAA;AAAA,QAC/C,CAAC,CAAA;AAAA,QACD,GAAA,GAAM,gBAAA,CAAiB,GAAG,CAAA,GAAI;AAAA,OAChC,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,QAAK,CAAA;AAAA,MACb,KAAA,EAAO,SAAA,GAAY,WAAA,GAAe,MAAA,EAAQ,WAAA,IAAe,QAAA;AAAA,MACzD,UAAU,SAAA,GAAY,UAAA,CAAW,WAAW,KAAA,CAAM,IAAA,EAAM,YAAY,CAAA,GAAI,MAAA;AAAA;AAAA;AAAA,MAGxE,MAAA,EAAQ,4BACN,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAQ,MAAA,EAAO,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,CAAA,GAC5D,yBACF,GAAA,CAAC,YAAA,EAAA,EAAa,MAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA,mBAE5C,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,MAElD,MAAM,kBAAA,CAAmB,KAAA,CAAM,YAAY,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,MAC7D,SAAA,EAAW,kBAAA,CAAmB,KAAA,CAAM,UAAU,CAAA;AAAA,MAC9C,gBAAgB,KAAA,IAAS,GAAA,GAAM,MAAM,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA;AAAA,MAC3D,UAAU,MAAM;AACd,QAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,UAAA,QAAA,CAAS,EAAE,OAAA,EAAS,WAAA,EAAa,CAAA;AACjC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GAAS,eAAA,GAAkB,SAAA,GAAY,KAAA,CAAM,WAAA;AAEnD,QAAA,IAAI,MAAA,EAAQ,sBAAA,CAAuB,cAAA,EAAiB,MAAM,CAAA;AAAA,MAC5D;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,SAAA,CACb,MAAA,CAAO,CAAC,QAAA,KAAa,QAAA,CAAS,yBAAA,KAA8B,cAAc,CAAA,CAC1E,GAAA,CAAI,CAAC,QAAA,KAAa;AACjB,IAAA,MAAM,OAAO,aAAA,CAAc,IAAA;AAAA,MACzB,CAAC,YAAA,KAAiB,YAAA,CAAa,eAAA,KAAoB,QAAA,CAAS;AAAA,KAC9D;AACA,IAAA,OAAO;AAAA,MACL,IAAI,QAAA,CAAS,WAAA;AAAA,MACb,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS,QAAA,CAAS,IAAA;AAAA,MAC/B,KAAA,EAAO,iCAAA;AAAA,MACP,UAAU,MAAM;AACd,QAAA,IAAI,IAAA,EAAM,sBAAA,CAAuB,IAAA,CAAK,WAAW,CAAA;AAAA,aAC5C,YAAA,GAAe,SAAS,WAAW,CAAA;AAAA,MAC1C;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,MAAM,MAAA,GAAS,YAAA,GACX,SAAA,CAAU,IAAA,CAAK,CAAC,aAAa,QAAA,CAAS,WAAA,KAAgB,IAAA,EAAM,eAAe,CAAA,GAC3E,MAAA;AACJ,EAAA,IAAI,MAAA,IAAU,YAAA;AACZ,IAAA,OAAA,CAAQ,OAAA,CAAQ;AAAA,MACd,EAAA,EAAI,CAAA,OAAA,EAAU,MAAA,CAAO,WAAW,CAAA,CAAA;AAAA,MAChC,OAAO,MAAA,CAAO,IAAA;AAAA,MACd,KAAA,EAAO,kCAAA;AAAA,MACP,QAAA,EAAU,MAAM,YAAA,CAAa,MAAA,CAAO,WAAW;AAAA,KAChD,CAAA;AACH,EAAA,MAAM,SAAS,SAAA,CAAU,IAAA;AAAA,IACvB,CAAC,QAAA,KAAa,QAAA,CAAS,WAAA,KAAgB,IAAA,EAAM;AAAA,GAC/C,EAAG,yBAAA;AACH,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,SAAS,aAAA,CAAc,IAAA,CAAK,CAAC,YAAA,KAAiB,YAAA,CAAa,gBAAgB,MAAM,CAAA;AACvF,IAAA,IAAI,MAAA;AACF,MAAA,OAAA,CAAQ,OAAA,CAAQ;AAAA,QACd,EAAA,EAAI,MAAA;AAAA,QACJ,KAAA,EAAO,OAAO,KAAA,IAAS,iBAAA;AAAA,QACvB,KAAA,EAAO,mCAAA;AAAA,QACP,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAM;AAAA,OAC9C,CAAA;AAAA,EACL;AAGA,EAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,QAAA,CAAS,IAAuC,CAAA;AACrF,EAAA,MAAM,UAAA,GAAa,CAAC,EAAA,EAAY,UAAA,KAC9B,cAAc,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,EAAE,CAAA,EAAG,KAAA,IACjD,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,UAAU,CAAA,EAAG,IAAA,IACrD,eAAA;AACF,EAAA,MAAM,OAAA,GAAkC,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IACpE,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC9B,IAAI,GAAA,CAAI,cAAA;AAAA,MACR,KAAA,EAAO,UAAA,CAAW,GAAA,CAAI,cAAA,EAAgB,IAAI,UAAU,CAAA;AAAA,MACpD,QAAA,EAAU,MAAM,sBAAA,CAAuB,GAAA,CAAI,cAAc;AAAA,KAC3D,CAAE;AAAA,GACJ,CAAE,CAAA;AACF,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,IAAA,EAAM,MAAA,KAAW,KAAA,CAAM,SAAA;AACzD,IAAA,MAAM,SAAS,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,QAAQ,CAAA;AACnE,IAAA,MAAM,cAAc,aAAA,CAAe,MAAA,EAAQ,IAAA,EAAM,KAAA,IAAS,EAAqB,CAAA;AAC/E,IAAA,SAAA,GAAY;AAAA,MACV,SAAA,EAAW,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,IAAI,CAAA,EAAG,KAAA,IAAS,IAAA,IAAQ,QAAA;AAAA,MACpE,WAAA,EAAa,QAAQ,KAAA,IAAS,gBAAA;AAAA,MAC9B,MAAA;AAAA,MACA,QAAA,EAAU,MAAM,sBAAA,CAAuB,QAAQ;AAAA,KACjD;AAAA,EACF;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,OAAA,EAAS,SAAS,SAAA,EAAU;AACxD;ACxSO,SAAS,kBAAA,GAAoD;AAClE,EAAA,MAAM,aAAa,qBAAA,EAAsB;AACzC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,kBAAA,EAAmB;AAC/C,EAAA,OAAO,WAAA;AAAA,IACL,OAAO,EAAA,KAAe;AACpB,MAAA,IAAI,UAAA,EAAY,OAAO,UAAA,CAAW,YAAA,CAAa,EAAE,CAAA;AACjD,MAAA,IAAI,CAAE,MAAM,eAAA,CAAgB,EAAE,EAAA,EAAI,CAAA,EAAI,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA;AAAA,IACtF,CAAA;AAAA,IACA,CAAC,YAAY,eAAe;AAAA,GAC9B;AACF","file":"chunk-OKB2L6IJ.js","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var chunkJBL4PPEE_cjs = require('./chunk-JBL4PPEE.cjs');
|
|
5
4
|
var chunkOU3RGQFX_cjs = require('./chunk-OU3RGQFX.cjs');
|
|
5
|
+
var chunkSW7BCXB5_cjs = require('./chunk-SW7BCXB5.cjs');
|
|
6
6
|
var chunkQZTNTP75_cjs = require('./chunk-QZTNTP75.cjs');
|
|
7
7
|
var chunkEFS3XXZS_cjs = require('./chunk-EFS3XXZS.cjs');
|
|
8
8
|
var react = require('@arbidocs/react');
|
|
@@ -376,7 +376,7 @@ function planBadgeView(project) {
|
|
|
376
376
|
}
|
|
377
377
|
function projectGroupBilling(project, { isOwned, stripeEnabled }) {
|
|
378
378
|
if (!project) return {};
|
|
379
|
-
const planBadge = isOwned && stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
379
|
+
const planBadge = isOwned && stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkSW7BCXB5_cjs.PlanBadge, { ...planBadgeView(project) }) : void 0;
|
|
380
380
|
const quotaItems = project.quotas ? getQuotaItems(project.quotas) : [];
|
|
381
381
|
const readout = project.quotas ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
382
382
|
chunkOU3RGQFX_cjs.ProjectReadout,
|
|
@@ -386,7 +386,7 @@ function projectGroupBilling(project, { isOwned, stripeEnabled }) {
|
|
|
386
386
|
testId: `project-usage-${project.external_id}`,
|
|
387
387
|
// Bare numbers without plans for sale: a glance beside the name, not the Plan & Usage detail.
|
|
388
388
|
node: /* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
-
|
|
389
|
+
chunkSW7BCXB5_cjs.QuotaMeter,
|
|
390
390
|
{
|
|
391
391
|
items: quotaItems,
|
|
392
392
|
size: "sm",
|
|
@@ -485,5 +485,5 @@ exports.totalWithTaxWord = totalWithTaxWord;
|
|
|
485
485
|
exports.useBillingSupport = useBillingSupport;
|
|
486
486
|
exports.useRewardBalance = useRewardBalance;
|
|
487
487
|
exports.useSelfExtId = useSelfExtId;
|
|
488
|
-
//# sourceMappingURL=chunk-
|
|
489
|
-
//# sourceMappingURL=chunk-
|
|
488
|
+
//# sourceMappingURL=chunk-PGRMIC5C.cjs.map
|
|
489
|
+
//# sourceMappingURL=chunk-PGRMIC5C.cjs.map
|