@arbidocs/blocks 0.5.47 → 0.5.48
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-BXFBFIR4.js → ConnectedCallDock-5OLBZED2.js} +11 -11
- package/dist/{ConnectedCallDock-BXFBFIR4.js.map → ConnectedCallDock-5OLBZED2.js.map} +1 -1
- package/dist/{ConnectedCallDock-XRU6XUBE.cjs → ConnectedCallDock-GHJTVUSQ.cjs} +20 -20
- package/dist/{ConnectedCallDock-XRU6XUBE.cjs.map → ConnectedCallDock-GHJTVUSQ.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-2ZYYSPG6.cjs → ConnectedCallRoom-GVNZ3S6R.cjs} +12 -12
- package/dist/{ConnectedCallRoom-2ZYYSPG6.cjs.map → ConnectedCallRoom-GVNZ3S6R.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-DHVDXEYW.js → ConnectedCallRoom-SSSKBQA7.js} +11 -11
- package/dist/{ConnectedCallRoom-DHVDXEYW.js.map → ConnectedCallRoom-SSSKBQA7.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-OXP7S4HV.cjs → ConnectedNativeDocxComparison-7ADU6OGW.cjs} +20 -20
- package/dist/{ConnectedNativeDocxComparison-OXP7S4HV.cjs.map → ConnectedNativeDocxComparison-7ADU6OGW.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-LHM3BDUA.js → ConnectedNativeDocxComparison-GIATDKIH.js} +19 -19
- package/dist/{ConnectedNativeDocxComparison-PQ42LKHG.js.map → ConnectedNativeDocxComparison-GIATDKIH.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-FER3BDN6.cjs → ConnectedNativeDocxEditor-GCVZCWDG.cjs} +19 -19
- package/dist/{ConnectedNativeDocxEditor-FER3BDN6.cjs.map → ConnectedNativeDocxEditor-GCVZCWDG.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-X5SJEUYZ.js → ConnectedNativeDocxEditor-UQTPB42S.js} +17 -17
- package/dist/{ConnectedNativeDocxEditor-X5SJEUYZ.js.map → ConnectedNativeDocxEditor-UQTPB42S.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-OBTR3PPU.cjs → ConnectedStreamedWordArtifact-DUBHCHBP.cjs} +20 -20
- package/dist/ConnectedStreamedWordArtifact-DUBHCHBP.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxComparison-PQ42LKHG.js → ConnectedStreamedWordArtifact-VN5XBWSI.js} +19 -19
- package/dist/ConnectedStreamedWordArtifact-VN5XBWSI.js.map +1 -0
- package/dist/{NativeDocxEditor-D6Z7BXTA.js → NativeDocxEditor-HJTKCPX2.js} +4 -4
- package/dist/{NativeDocxEditor-D6Z7BXTA.js.map → NativeDocxEditor-HJTKCPX2.js.map} +1 -1
- package/dist/{NativeDocxEditor-HE4PQV5F.cjs → NativeDocxEditor-TVZ6O6YS.cjs} +8 -8
- package/dist/{NativeDocxEditor-HE4PQV5F.cjs.map → NativeDocxEditor-TVZ6O6YS.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-B26WOMAL.cjs → WorkspaceTableView-GZ6Y6QCD.cjs} +5 -5
- package/dist/{WorkspaceTableView-B26WOMAL.cjs.map → WorkspaceTableView-GZ6Y6QCD.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-PZR5RYPG.js → WorkspaceTableView-ZI2HDG2R.js} +5 -5
- package/dist/{WorkspaceTableView-PZR5RYPG.js.map → WorkspaceTableView-ZI2HDG2R.js.map} +1 -1
- package/dist/agents/index.cjs +335 -335
- package/dist/agents/index.js +12 -12
- package/dist/calendar/index.cjs +116 -116
- package/dist/calendar/index.js +1 -1
- package/dist/calls/index.cjs +145 -145
- package/dist/calls/index.js +11 -11
- package/dist/chat/index.cjs +148 -148
- package/dist/chat/index.js +7 -7
- package/dist/{chunk-7W7TPWSZ.cjs → chunk-226ILMHW.cjs} +6 -6
- package/dist/{chunk-7W7TPWSZ.cjs.map → chunk-226ILMHW.cjs.map} +1 -1
- package/dist/{chunk-U4HWVCRN.js → chunk-3VCTVCAX.js} +68 -13
- package/dist/chunk-3VCTVCAX.js.map +1 -0
- package/dist/{chunk-5LPPY63C.cjs → chunk-4FIYA764.cjs} +83 -83
- package/dist/{chunk-5LPPY63C.cjs.map → chunk-4FIYA764.cjs.map} +1 -1
- package/dist/{chunk-RGWROTJ2.cjs → chunk-52CWM5AZ.cjs} +4 -4
- package/dist/{chunk-RGWROTJ2.cjs.map → chunk-52CWM5AZ.cjs.map} +1 -1
- package/dist/{chunk-6QHEW2GS.js → chunk-53YTK235.js} +6 -6
- package/dist/{chunk-6QHEW2GS.js.map → chunk-53YTK235.js.map} +1 -1
- package/dist/{chunk-SYP2A4GQ.js → chunk-5RYZUX5L.js} +3 -3
- package/dist/{chunk-SYP2A4GQ.js.map → chunk-5RYZUX5L.js.map} +1 -1
- package/dist/{chunk-EZJOJFY2.cjs → chunk-5WV7HI7Y.cjs} +6 -6
- package/dist/{chunk-EZJOJFY2.cjs.map → chunk-5WV7HI7Y.cjs.map} +1 -1
- package/dist/{chunk-OMYWRLV5.js → chunk-6D3XKIEB.js} +8 -8
- package/dist/{chunk-OMYWRLV5.js.map → chunk-6D3XKIEB.js.map} +1 -1
- package/dist/{chunk-S3YRRD54.js → chunk-6GI3S7TN.js} +3 -3
- package/dist/{chunk-S3YRRD54.js.map → chunk-6GI3S7TN.js.map} +1 -1
- package/dist/{chunk-HV7XHZLW.cjs → chunk-6R5Q65PB.cjs} +4 -4
- package/dist/{chunk-HV7XHZLW.cjs.map → chunk-6R5Q65PB.cjs.map} +1 -1
- package/dist/{chunk-WIW3XGHO.js → chunk-75Z5AUMM.js} +3 -3
- package/dist/{chunk-WIW3XGHO.js.map → chunk-75Z5AUMM.js.map} +1 -1
- package/dist/{chunk-C5ZP4CEQ.js → chunk-7G4N2HP7.js} +4 -4
- package/dist/{chunk-C5ZP4CEQ.js.map → chunk-7G4N2HP7.js.map} +1 -1
- package/dist/{chunk-WDMWWBPB.cjs → chunk-7KIM64LQ.cjs} +9 -9
- package/dist/{chunk-WDMWWBPB.cjs.map → chunk-7KIM64LQ.cjs.map} +1 -1
- package/dist/{chunk-H5XHCIWY.js → chunk-7P24MJQN.js} +3 -3
- package/dist/{chunk-H5XHCIWY.js.map → chunk-7P24MJQN.js.map} +1 -1
- package/dist/{chunk-CXY2ELL5.js → chunk-7QJNWQ7O.js} +4 -4
- package/dist/{chunk-CXY2ELL5.js.map → chunk-7QJNWQ7O.js.map} +1 -1
- package/dist/{chunk-GWQRGLA7.js → chunk-A54WLQQA.js} +5 -5
- package/dist/{chunk-GWQRGLA7.js.map → chunk-A54WLQQA.js.map} +1 -1
- package/dist/{chunk-7LN3ISPG.js → chunk-A7MWHMHP.js} +4 -3
- package/dist/chunk-A7MWHMHP.js.map +1 -0
- package/dist/{chunk-ORFP3QJQ.js → chunk-AEXFUPO7.js} +3 -3
- package/dist/{chunk-ORFP3QJQ.js.map → chunk-AEXFUPO7.js.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-N3HSMPMY.cjs → chunk-BB4PMCU6.cjs} +14 -14
- package/dist/{chunk-N3HSMPMY.cjs.map → chunk-BB4PMCU6.cjs.map} +1 -1
- package/dist/{chunk-NIA4H7QN.js → chunk-BTTUZZN3.js} +3 -3
- package/dist/{chunk-NIA4H7QN.js.map → chunk-BTTUZZN3.js.map} +1 -1
- package/dist/{chunk-ASY4F546.js → chunk-CGHFFYOL.js} +3 -3
- package/dist/{chunk-ASY4F546.js.map → chunk-CGHFFYOL.js.map} +1 -1
- package/dist/{chunk-FV32BTXV.cjs → chunk-CKNUL4LM.cjs} +4 -4
- package/dist/{chunk-FV32BTXV.cjs.map → chunk-CKNUL4LM.cjs.map} +1 -1
- package/dist/{chunk-P6HVJP6Z.cjs → chunk-DLHAKRU2.cjs} +6 -5
- package/dist/chunk-DLHAKRU2.cjs.map +1 -0
- package/dist/{chunk-DCA4R3EU.js → chunk-E6EYRQC2.js} +3 -3
- package/dist/{chunk-DCA4R3EU.js.map → chunk-E6EYRQC2.js.map} +1 -1
- package/dist/{chunk-YWGDZR6A.cjs → chunk-E6FNC5PN.cjs} +7 -7
- package/dist/{chunk-YWGDZR6A.cjs.map → chunk-E6FNC5PN.cjs.map} +1 -1
- package/dist/{chunk-WZGSEQQX.js → chunk-EARQ2CUX.js} +4 -4
- package/dist/{chunk-WZGSEQQX.js.map → chunk-EARQ2CUX.js.map} +1 -1
- package/dist/{chunk-GNJ2NCS6.js → chunk-EXE3RBDZ.js} +4 -4
- package/dist/{chunk-GNJ2NCS6.js.map → chunk-EXE3RBDZ.js.map} +1 -1
- package/dist/{chunk-F2IAC4UE.cjs → chunk-FYL7IGK2.cjs} +31 -31
- package/dist/{chunk-F2IAC4UE.cjs.map → chunk-FYL7IGK2.cjs.map} +1 -1
- package/dist/{chunk-WDR6FO22.cjs → chunk-GKHIRR5A.cjs} +5 -5
- package/dist/{chunk-WDR6FO22.cjs.map → chunk-GKHIRR5A.cjs.map} +1 -1
- package/dist/{chunk-SI222Z3A.cjs → chunk-GMM3RBIB.cjs} +71 -11
- package/dist/chunk-GMM3RBIB.cjs.map +1 -0
- package/dist/{chunk-EHRT5M5F.js → chunk-GXJIN7G3.js} +4 -4
- package/dist/{chunk-EHRT5M5F.js.map → chunk-GXJIN7G3.js.map} +1 -1
- package/dist/{chunk-B3NYBMDR.cjs → chunk-I72IYIO2.cjs} +21 -55
- package/dist/chunk-I72IYIO2.cjs.map +1 -0
- package/dist/{chunk-TKTNXFAB.js → chunk-IDFAMK2G.js} +6 -6
- package/dist/{chunk-TKTNXFAB.js.map → chunk-IDFAMK2G.js.map} +1 -1
- package/dist/{chunk-XJA6TS6D.js → chunk-IKZWEPG4.js} +3 -3
- package/dist/{chunk-XJA6TS6D.js.map → chunk-IKZWEPG4.js.map} +1 -1
- package/dist/{chunk-7MSBEMOG.cjs → chunk-IOPGY3IP.cjs} +22 -22
- package/dist/{chunk-7MSBEMOG.cjs.map → chunk-IOPGY3IP.cjs.map} +1 -1
- package/dist/{chunk-WKHREKPY.js → chunk-JGFBC66V.js} +5 -5
- package/dist/{chunk-WKHREKPY.js.map → chunk-JGFBC66V.js.map} +1 -1
- package/dist/{chunk-QG7XCD5U.js → chunk-JGKPF3QV.js} +3 -3
- package/dist/{chunk-QG7XCD5U.js.map → chunk-JGKPF3QV.js.map} +1 -1
- package/dist/{chunk-NE7M6NJY.js → chunk-JOK2TJLY.js} +3 -3
- package/dist/{chunk-NE7M6NJY.js.map → chunk-JOK2TJLY.js.map} +1 -1
- package/dist/{chunk-YNFHWUFM.cjs → chunk-JYR55F3P.cjs} +27 -26
- package/dist/chunk-JYR55F3P.cjs.map +1 -0
- package/dist/{chunk-QZUZPC4J.js → chunk-KOOC6VD3.js} +18 -47
- package/dist/chunk-KOOC6VD3.js.map +1 -0
- package/dist/{chunk-FGVQIKOG.cjs → chunk-KZMEZYT6.cjs} +4 -4
- package/dist/{chunk-FGVQIKOG.cjs.map → chunk-KZMEZYT6.cjs.map} +1 -1
- package/dist/{chunk-5YNULK5L.cjs → chunk-MBGV6JHG.cjs} +9 -9
- package/dist/{chunk-5YNULK5L.cjs.map → chunk-MBGV6JHG.cjs.map} +1 -1
- package/dist/{chunk-EY3PBYRT.js → chunk-NIH2QCPE.js} +4 -4
- package/dist/{chunk-EY3PBYRT.js.map → chunk-NIH2QCPE.js.map} +1 -1
- package/dist/{chunk-UHYO2E25.js → chunk-NQA6P7XB.js} +4 -4
- package/dist/{chunk-UHYO2E25.js.map → chunk-NQA6P7XB.js.map} +1 -1
- package/dist/{chunk-73DANGPH.js → chunk-NXSGOC2M.js} +3 -3
- package/dist/{chunk-73DANGPH.js.map → chunk-NXSGOC2M.js.map} +1 -1
- package/dist/{chunk-ZBEWAE34.js → chunk-O4LORAFC.js} +10 -9
- package/dist/chunk-O4LORAFC.js.map +1 -0
- package/dist/{chunk-VHLMMXXE.js → chunk-OLMM6MPQ.js} +3 -3
- package/dist/{chunk-VHLMMXXE.js.map → chunk-OLMM6MPQ.js.map} +1 -1
- package/dist/{chunk-5R256EMF.cjs → chunk-PFJSYJ34.cjs} +39 -39
- package/dist/{chunk-5R256EMF.cjs.map → chunk-PFJSYJ34.cjs.map} +1 -1
- package/dist/{chunk-Z6DNYFVM.cjs → chunk-PICGTGEB.cjs} +3 -3
- package/dist/{chunk-Z6DNYFVM.cjs.map → chunk-PICGTGEB.cjs.map} +1 -1
- package/dist/{chunk-G7QBA27G.js → chunk-PP3LWBIH.js} +4 -4
- package/dist/{chunk-G7QBA27G.js.map → chunk-PP3LWBIH.js.map} +1 -1
- package/dist/{chunk-DWWRLKEZ.cjs → chunk-QK3SHV3F.cjs} +4 -4
- package/dist/{chunk-DWWRLKEZ.cjs.map → chunk-QK3SHV3F.cjs.map} +1 -1
- package/dist/{chunk-AE3QELMB.cjs → chunk-QKOFQMAY.cjs} +4 -4
- package/dist/{chunk-AE3QELMB.cjs.map → chunk-QKOFQMAY.cjs.map} +1 -1
- package/dist/{chunk-EGSSLWNZ.cjs → chunk-QPZDJVNY.cjs} +4 -4
- package/dist/{chunk-EGSSLWNZ.cjs.map → chunk-QPZDJVNY.cjs.map} +1 -1
- package/dist/chunk-QQMZ7XKU.cjs +18 -0
- package/dist/{chunk-36RSQCKH.cjs.map → chunk-QQMZ7XKU.cjs.map} +1 -1
- package/dist/{chunk-SEZEEHLU.js → chunk-QRQLQKRW.js} +3 -3
- package/dist/{chunk-SEZEEHLU.js.map → chunk-QRQLQKRW.js.map} +1 -1
- package/dist/{chunk-Y42LJ4TF.cjs → chunk-SWGQUHMF.cjs} +5 -5
- package/dist/{chunk-Y42LJ4TF.cjs.map → chunk-SWGQUHMF.cjs.map} +1 -1
- package/dist/{chunk-QTIAO2AH.cjs → chunk-TQYEHARI.cjs} +5 -5
- package/dist/{chunk-QTIAO2AH.cjs.map → chunk-TQYEHARI.cjs.map} +1 -1
- package/dist/{chunk-KFQ6E6LE.cjs → chunk-V2UQR7P6.cjs} +4 -4
- package/dist/{chunk-KFQ6E6LE.cjs.map → chunk-V2UQR7P6.cjs.map} +1 -1
- package/dist/{chunk-HDEOORSV.cjs → chunk-V5QAXGGT.cjs} +6 -6
- package/dist/{chunk-HDEOORSV.cjs.map → chunk-V5QAXGGT.cjs.map} +1 -1
- package/dist/{chunk-5TFI4YW2.js → chunk-VFSHI7IX.js} +3 -3
- package/dist/{chunk-5TFI4YW2.js.map → chunk-VFSHI7IX.js.map} +1 -1
- package/dist/{chunk-X6MGM3LH.cjs → chunk-VODFB3K2.cjs} +4 -4
- package/dist/{chunk-X6MGM3LH.cjs.map → chunk-VODFB3K2.cjs.map} +1 -1
- package/dist/{chunk-3XUF6FS3.cjs → chunk-VQHXVY26.cjs} +6 -6
- package/dist/{chunk-3XUF6FS3.cjs.map → chunk-VQHXVY26.cjs.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-PPHUOWCJ.js → chunk-XBITXJZU.js} +3 -3
- package/dist/{chunk-PPHUOWCJ.js.map → chunk-XBITXJZU.js.map} +1 -1
- package/dist/chunk-XHHDVSYY.cjs +18 -0
- package/dist/{chunk-3QPQEX2X.cjs.map → chunk-XHHDVSYY.cjs.map} +1 -1
- package/dist/{chunk-X2AIPVIT.cjs → chunk-YD3RN2FY.cjs} +3 -3
- package/dist/{chunk-X2AIPVIT.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
- package/dist/{chunk-VQAAU32B.js → chunk-YRORPDIY.js} +3 -3
- package/dist/{chunk-VQAAU32B.js.map → chunk-YRORPDIY.js.map} +1 -1
- package/dist/{chunk-BRYHW3OL.cjs → chunk-YTB6DLAD.cjs} +4 -4
- package/dist/{chunk-BRYHW3OL.cjs.map → chunk-YTB6DLAD.cjs.map} +1 -1
- package/dist/{chunk-UEORRV5P.cjs → chunk-ZXHGPTAZ.cjs} +11 -11
- package/dist/{chunk-UEORRV5P.cjs.map → chunk-ZXHGPTAZ.cjs.map} +1 -1
- package/dist/citations/index.cjs +11 -11
- package/dist/citations/index.js +3 -3
- package/dist/connect/docx.cjs +23 -23
- package/dist/connect/docx.js +19 -19
- package/dist/connect/index.cjs +1100 -1100
- package/dist/connect/index.js +44 -44
- package/dist/connect/viewer.cjs +94 -94
- package/dist/connect/viewer.js +19 -19
- package/dist/document-tools/index.cjs +17 -17
- package/dist/document-tools/index.js +2 -2
- package/dist/docx/index.cjs +51 -51
- package/dist/docx/index.js +4 -4
- package/dist/facts/index.cjs +60 -60
- package/dist/facts/index.js +7 -7
- package/dist/files/index.cjs +238 -238
- package/dist/files/index.js +6 -6
- package/dist/home/index.cjs +32 -32
- package/dist/home/index.js +7 -7
- package/dist/index.cjs +783 -783
- package/dist/index.js +26 -26
- package/dist/provider/dialog-registry.d.ts +2 -0
- package/dist/retrieval/index.cjs +5 -5
- package/dist/retrieval/index.js +3 -3
- package/dist/settings/index.cjs +5 -5
- package/dist/settings/index.js +3 -3
- package/dist/shell/index.cjs +38 -38
- package/dist/shell/index.js +4 -4
- package/dist/site/index.cjs +21 -21
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +18 -18
- package/dist/studio/index.js +10 -10
- package/dist/workflow-canvas/index.cjs +32 -32
- package/dist/workflow-canvas/index.js +14 -14
- package/dist/workspaces/index.cjs +30 -30
- package/dist/workspaces/index.js +5 -5
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-LHM3BDUA.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-OBTR3PPU.cjs.map +0 -1
- package/dist/chunk-36RSQCKH.cjs +0 -18
- package/dist/chunk-3QPQEX2X.cjs +0 -18
- package/dist/chunk-7LN3ISPG.js.map +0 -1
- package/dist/chunk-B3NYBMDR.cjs.map +0 -1
- package/dist/chunk-P6HVJP6Z.cjs.map +0 -1
- package/dist/chunk-QZUZPC4J.js.map +0 -1
- package/dist/chunk-SI222Z3A.cjs.map +0 -1
- package/dist/chunk-U4HWVCRN.js.map +0 -1
- package/dist/chunk-YNFHWUFM.cjs.map +0 -1
- package/dist/chunk-ZBEWAE34.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { DataTable } from './chunk-
|
|
2
|
+
import { DataTable } from './chunk-OLMM6MPQ.js';
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
import { cn } from '@arbidocs/react/ui';
|
|
5
5
|
|
|
@@ -51,5 +51,5 @@ function StatGroup({ items, testId }) {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
export { DataTableBlock, StatGroup };
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-CGHFFYOL.js.map
|
|
55
|
+
//# sourceMappingURL=chunk-CGHFFYOL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DataTableBlock.tsx","../src/components/StatGroup.tsx"],"names":["jsx","jsxs"],"mappings":";;;;AA6CO,SAAS,eAAe,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,SAAA,EAAW,QAAO,EAAwB;AACjG,EAAA,MAAM,OAAO,MAAA,IAAU,kBAAA;AAEvB,EAAA,MAAM,YAAA,GAAuC,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,KAAA,MAAW;AAAA,IACxE,GAAA,EAAK,GAAA,CAAI,KAAA,IAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAAA,IAC9B,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,QAAQ,CAAC,GAAA,KAAQ,IAAI,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK;AAAA,GAC3C,CAAE,CAAA;AAEF,EAAA,MAAM,SAAA,GAA4B,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAG,KAAA,EAAM,CAAE,CAAA;AAE7F,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAa,MAAA,EACf,QAAA,EAAA;AAAA,IAAA,OAAA,mBACC,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oCAAA;AAAA,QACV,aAAA,EAAa,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,GAAa,MAAA;AAAA,QAE3C,QAAA,EAAA;AAAA;AAAA,KACH,GACE,IAAA;AAAA,oBACJ,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,YAAA;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA;AAAA,QACvB,IAAA;AAAA,QACA,UAAA,EAAY;AAAA;AAAA;AACd,GAAA,EACF,CAAA;AAEJ;AC9DA,IAAM,IAAA,GAA+B;AAAA,EACnC,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,4BAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAGO,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAO,EAAmB;AAC3D,EAAA,MAAM,IAAA,GAAO,SAAS,EAAC;AACvB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA;AACrD,EAAA,uBACEA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,IAAI,CAAA,EAAG,aAAA,EAAa,MAAA,EACjD,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,qBACfC,IAAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,EACrF,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,SAAA,EAAW,eAAK,KAAA,EAAM,CAAA;AAAA,oBACpCA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4EAAA,EACX,eAAK,KAAA,EACR,CAAA;AAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,eAAK,KAAA,EAAM,CAAA;AAAA,IAC7D,IAAA,CAAK,uBAAOA,GAAAA,CAAC,OAAE,SAAA,EAAU,uCAAA,EAAyC,eAAK,GAAA,EAAI;AAAA,GAAA,EAAA,EANpE,CAOV,CACD,CAAA,EACH,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/DataTableBlock.tsx","../src/components/StatGroup.tsx"],"names":["jsx","jsxs"],"mappings":";;;;AA6CO,SAAS,eAAe,EAAE,OAAA,EAAS,MAAM,OAAA,EAAS,SAAA,EAAW,QAAO,EAAwB;AACjG,EAAA,MAAM,OAAO,MAAA,IAAU,kBAAA;AAEvB,EAAA,MAAM,YAAA,GAAuC,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,KAAA,MAAW;AAAA,IACxE,GAAA,EAAK,GAAA,CAAI,KAAA,IAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA;AAAA,IAC9B,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,QAAQ,CAAC,GAAA,KAAQ,IAAI,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK;AAAA,GAC3C,CAAE,CAAA;AAEF,EAAA,MAAM,SAAA,GAA4B,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAG,KAAA,EAAM,CAAE,CAAA;AAE7F,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAa,MAAA,EACf,QAAA,EAAA;AAAA,IAAA,OAAA,mBACC,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oCAAA;AAAA,QACV,aAAA,EAAa,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,GAAa,MAAA;AAAA,QAE3C,QAAA,EAAA;AAAA;AAAA,KACH,GACE,IAAA;AAAA,oBACJ,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,YAAA;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA;AAAA,QACvB,IAAA;AAAA,QACA,UAAA,EAAY;AAAA;AAAA;AACd,GAAA,EACF,CAAA;AAEJ;AC9DA,IAAM,IAAA,GAA+B;AAAA,EACnC,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,aAAA;AAAA,EACH,CAAA,EAAG,4BAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAGO,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAO,EAAmB;AAC3D,EAAA,MAAM,IAAA,GAAO,SAAS,EAAC;AACvB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA;AACrD,EAAA,uBACEA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,IAAI,CAAA,EAAG,aAAA,EAAa,MAAA,EACjD,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,qBACfC,IAAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAa,MAAA,IAAU,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,EACrF,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,SAAA,EAAW,eAAK,KAAA,EAAM,CAAA;AAAA,oBACpCA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4EAAA,EACX,eAAK,KAAA,EACR,CAAA;AAAA,oBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,eAAK,KAAA,EAAM,CAAA;AAAA,IAC7D,IAAA,CAAK,uBAAOA,GAAAA,CAAC,OAAE,SAAA,EAAU,uCAAA,EAAyC,eAAK,GAAA,EAAI;AAAA,GAAA,EAAA,EANpE,CAOV,CACD,CAAA,EACH,CAAA;AAEJ","file":"chunk-CGHFFYOL.js","sourcesContent":["/**\n * A **serializable** data table for the Puck builder.\n *\n * The library's developer-facing {@link DataTable} is driven by `Column<T>` whose\n * `header`/`render` are React nodes and functions — powerful, but non-serializable,\n * so it can never be a Puck block. `DataTableBlock` closes that gap with a flat,\n * JSON-safe schema (string headers, string field keys, string cells) and rebuilds\n * the non-serializable `Column<Row>[]` internally, rendering through the very same\n * {@link DataTable} so it inherits the library's markup and tokens verbatim.\n */\nimport { DataTable, type Column } from './DataTable'\n\nexport interface DataTableBlockColumn {\n /** Column heading text. */\n header: string\n /** Key used to look a cell up in each row record. */\n field: string\n /** Cell/heading alignment. */\n align?: 'left' | 'right' | 'center'\n}\n\nexport interface DataTableBlockProps {\n /** Serializable column schema. */\n columns: DataTableBlockColumn[]\n /** One record per row; cells are looked up by each column's `field`. */\n rows: Array<Record<string, string>>\n /** Optional caption rendered above the table. */\n caption?: string\n /** Empty-state title shown when there are no rows. */\n emptyText?: string\n /** testid area prefix; also set on the wrapper element. */\n testId?: string\n}\n\n/** A row wrapper so {@link DataTable} gets a stable id without polluting the record. */\ninterface TableRowData {\n __id: string\n cells: Record<string, string>\n}\n\n/**\n * Renders a {@link DataTable} from a flat, serializable schema. Columns are mapped\n * to `Column<TableRowData>[]` (header string, positional-stable key, alignment) and\n * each cell is resolved by `field`; rows carry a synthetic id for React keys/testids.\n */\nexport function DataTableBlock({ columns, rows, caption, emptyText, testId }: DataTableBlockProps) {\n const area = testId ?? 'data-table-block'\n\n const tableColumns: Column<TableRowData>[] = columns.map((col, index) => ({\n key: col.field || `col-${index}`,\n header: col.header,\n align: col.align,\n render: (row) => row.cells[col.field] ?? '',\n }))\n\n const tableRows: TableRowData[] = rows.map((cells, index) => ({ __id: String(index), cells }))\n\n return (\n <div data-testid={testId}>\n {caption ? (\n <p\n className=\"mb-2 text-sm text-muted-foreground\"\n data-testid={testId ? `${testId}-caption` : undefined}\n >\n {caption}\n </p>\n ) : null}\n <DataTable\n columns={tableColumns}\n rows={tableRows}\n getRowId={(row) => row.__id}\n area={area}\n emptyTitle={emptyText}\n />\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface StatItem {\n value: string\n label: string\n /** Optional caption under the label (e.g. a qualifier or unit). */\n sub?: string\n}\n\nexport interface StatGroupProps {\n items: StatItem[]\n testId?: string\n}\n\nconst GRID: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 sm:grid-cols-3',\n 4: 'grid-cols-2 lg:grid-cols-4',\n}\n\n/** Big-number stat group — headline metrics with captions. */\nexport function StatGroup({ items, testId }: StatGroupProps) {\n const list = items ?? []\n const cols = GRID[Math.min(list.length, 4)] ?? GRID[4]\n return (\n <dl className={cn('grid gap-8', cols)} data-testid={testId}>\n {list.map((item, i) => (\n <div key={i} className=\"min-w-0 text-center\" data-testid={testId && `${testId}-item-${i}`}>\n <dt className=\"sr-only\">{item.label}</dt>\n <dd className=\"text-4xl font-semibold tracking-tight [overflow-wrap:anywhere] sm:text-5xl\">\n {item.value}\n </dd>\n <p className=\"mt-2 text-sm text-muted-foreground\">{item.label}</p>\n {item.sub && <p className=\"mt-1 text-xs text-muted-foreground/80\">{item.sub}</p>}\n </div>\n ))}\n </dl>\n )\n}\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var chunkUWIILWDI_cjs = require('./chunk-UWIILWDI.cjs');
|
|
5
5
|
var chunkIRY63R4L_cjs = require('./chunk-IRY63R4L.cjs');
|
|
6
6
|
var chunkZESMRGDV_cjs = require('./chunk-ZESMRGDV.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunkGMM3RBIB_cjs = require('./chunk-GMM3RBIB.cjs');
|
|
8
8
|
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
9
9
|
var lucideReact = require('lucide-react');
|
|
10
10
|
var ui = require('@arbidocs/react/ui');
|
|
@@ -457,7 +457,7 @@ function SavedSignatureSettings() {
|
|
|
457
457
|
}
|
|
458
458
|
),
|
|
459
459
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
460
|
-
|
|
460
|
+
chunkGMM3RBIB_cjs.ConfirmDialog,
|
|
461
461
|
{
|
|
462
462
|
isOpen: confirming,
|
|
463
463
|
onClose: () => setConfirming(false),
|
|
@@ -763,5 +763,5 @@ exports.SignButton = SignButton;
|
|
|
763
763
|
exports.SignatureRequestBanner = SignatureRequestBanner;
|
|
764
764
|
exports.SignedEditNote = SignedEditNote;
|
|
765
765
|
exports.VersionSnapshotBar = VersionSnapshotBar;
|
|
766
|
-
//# sourceMappingURL=chunk-
|
|
767
|
-
//# sourceMappingURL=chunk-
|
|
766
|
+
//# sourceMappingURL=chunk-CKNUL4LM.cjs.map
|
|
767
|
+
//# sourceMappingURL=chunk-CKNUL4LM.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/document-tools/DocumentToolButtons.tsx","../src/document-tools/MarkupNotices.tsx","../src/document-tools/MarkupViewNote.tsx","../src/document-tools/VersionSnapshotBar.tsx","../src/document-tools/PlaceMySignatureButton.tsx","../src/document-tools/SavedSignatureSettings.tsx","../src/document-tools/SignatureRequestBanner.tsx","../src/document-tools/FileShareDialog.tsx"],"names":["jsxs","Button","jsx","PencilLine","FileText","Download","PenLine","Users","Fragment","ViewerStatusNote","LINK","useDocumentTools","useState","fetchSavedSignature","DropdownMenuItem","DropdownMenu","DropdownMenuTrigger","Signature","DropdownMenuContent","DropdownMenuSeparator","DropdownMenuLabel","INFORMAL_SIGNATURE_NOTE","AdoptSignatureDialog","storeSavedSignature","useSavedSignature","useStoreSavedSignature","useDeleteSavedSignature","SettingsDisclosure","SettingsCard","Upload","Trash2","ConfirmDialog","SIGNER_PROGRESS_LABELS","useDocumentSignatureRequests","useVoidSignatureRequest","useInviteSigners","useSignerCandidates","Send","FilePenLine","ModalScaffold","createFileShare","Label","Textarea"],"mappings":"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","file":"chunk-FV32BTXV.cjs","sourcesContent":["/**\n * The viewer-header buttons of the PDF document tools: Annotate, Show original, Download with\n * markup and Sign. Separate parts so a host can place them among its own header actions. On a\n * narrow (`compact`) header each is icon-only; its accessible name stays.\n */\n\nimport type { ReactElement } from 'react'\nimport { Download, FileText, PenLine, PencilLine, Users } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\n\nconst TOUCH = 'pointer-coarse:min-h-11'\n\ninterface ToggleProps {\n /** On (pressed). */\n active: boolean\n onClick: () => void\n compact?: boolean\n}\n\n/** Annotate mode: highlight, comment, stamp, redact. */\nexport function AnnotateButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title=\"Annotate: highlight, comment, stamp, redact\"\n aria-label=\"Annotate\"\n data-testid=\"annotate-toggle\"\n className={TOUCH}\n onClick={onClick}\n >\n <PencilLine className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Annotate</span>}\n </Button>\n )\n}\n\n/** The markup is the default view of a marked-up PDF; this shows the untouched file. */\nexport function ShowOriginalButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title={active ? 'Show the markup again' : 'Show the original, without markup'}\n aria-label=\"Show original\"\n data-testid=\"markup-show-original\"\n className={TOUCH}\n onClick={onClick}\n >\n <FileText className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Show original</span>}\n </Button>\n )\n}\n\n/**\n * \"Download with markup\": the PDF with its annotations, which Acrobat and Preview show. With a\n * `disabledReason` (a signed, locked version) it is off and says why.\n */\nexport function DownloadMarkupButton({\n onClick,\n disabledReason,\n}: {\n onClick: () => void\n disabledReason?: string\n}): ReactElement {\n const button = (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n title={\n disabledReason ??\n 'Download with markup: the PDF with its annotations (opens in Acrobat or Preview)'\n }\n aria-label=\"Download with markup\"\n aria-description={disabledReason}\n disabled={!!disabledReason}\n data-testid=\"markup-download\"\n className={TOUCH}\n onClick={onClick}\n >\n <Download className=\"size-4\" />\n </Button>\n )\n // A disabled button gets no pointer events, so the reason sits on a wrapper too.\n return disabledReason ? (\n <span title={disabledReason} className=\"inline-flex\" data-testid=\"markup-download-locked\">\n {button}\n </span>\n ) : (\n button\n )\n}\n\n/** One line where a signed version's content can be edited: an edit is a new, unsigned version. */\nexport function SignedEditNote(): ReactElement {\n return (\n <p\n className=\"border-b px-3 py-1.5 text-xs text-muted-foreground\"\n data-testid=\"signed-edit-note\"\n >\n Editing creates a new unsigned version\n </p>\n )\n}\n\n/** Sign: choose where the signature goes, then sign. */\nexport function SignButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title=\"Sign document\"\n aria-label=\"Sign\"\n data-testid=\"sign-document-button\"\n className={TOUCH}\n onClick={onClick}\n >\n <PenLine className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Sign</span>}\n </Button>\n )\n}\n\n/** Prepare the document for others to sign: place their fields and send it. */\nexport function RequestSignaturesButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title=\"Request signatures\"\n aria-label=\"Request signatures\"\n data-testid=\"request-signatures-button\"\n className={TOUCH}\n onClick={onClick}\n >\n <Users className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Request signatures</span>}\n </Button>\n )\n}\n","/**\n * The one-line notices above the PDF about its markup: annotations found in this browser from\n * before markup was saved on the server (for a shared document: add them to the shared markup, or\n * discard), and markup that sits on an older version (open it, or copy its open comments here).\n */\n\nimport type { LegacyPrompt, OlderMarkupNote } from '@arbidocs/react/document-tools'\n\nconst BAR = 'flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2 text-xs'\nconst LINK =\n 'font-medium text-primary hover:underline disabled:opacity-50 disabled:no-underline pointer-coarse:min-h-11'\n\nexport interface MarkupNoticesProps {\n legacyPrompt: LegacyPrompt | null\n olderNote: OlderMarkupNote | null\n onOpenVersion: (version: number) => void\n}\n\nexport function MarkupNotices({ legacyPrompt, olderNote, onOpenVersion }: MarkupNoticesProps) {\n return (\n <>\n {legacyPrompt && (\n <div className={BAR} role=\"status\" data-testid=\"markup-migration-prompt\">\n <span>\n {legacyPrompt.count} annotation{legacyPrompt.count === 1 ? '' : 's'} on this document\n {legacyPrompt.count === 1 ? ' is' : ' are'} saved only in this browser. Add{' '}\n {legacyPrompt.count === 1 ? 'it' : 'them'} to the shared markup, where everyone with\n access sees {legacyPrompt.count === 1 ? 'it' : 'them'}?\n </span>\n <span className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n className={LINK}\n disabled={legacyPrompt.busy}\n data-testid=\"markup-migration-add\"\n onClick={legacyPrompt.add}\n >\n {legacyPrompt.busy ? 'Adding…' : 'Add to shared markup'}\n </button>\n <button\n type=\"button\"\n className={LINK}\n disabled={legacyPrompt.busy}\n data-testid=\"markup-migration-discard\"\n onClick={legacyPrompt.discard}\n >\n Discard\n </button>\n </span>\n </div>\n )}\n {olderNote && (\n <div className={BAR} data-testid=\"markup-older-version-note\">\n <span>\n The markup is on version {olderNote.version}. This version started without it.\n {olderNote.signed && (\n <span data-testid=\"markup-older-version-signed\">\n {' '}\n It is signed: comments copied here are kept beside it, and the signed PDF does not\n change.\n </span>\n )}\n </span>\n <span className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n className={LINK}\n data-testid=\"markup-open-older-version\"\n onClick={() => onOpenVersion(olderNote.version)}\n >\n Open version {olderNote.version}\n </button>\n <button\n type=\"button\"\n className={LINK}\n disabled={olderNote.busy}\n data-testid=\"markup-copy-open-threads\"\n title=\"Copy the unresolved comment threads onto this version (redactions never carry over)\"\n onClick={olderNote.copy}\n >\n {olderNote.busy ? 'Copying…' : 'Copy open comments here'}\n </button>\n </span>\n </div>\n )}\n </>\n )\n}\n","/**\n * Which view of a marked-up PDF is on screen, spelled out beside the title, with the switch to the\n * other one. The narrow header's \"Show original\" is an unlabelled page icon, so on its own it read\n * as no control at all, and nothing said whether the page showed the markup or the original.\n */\n\nimport type { ReactElement } from 'react'\nimport { ViewerStatusNote } from '../files/ViewerLayout'\n\nexport interface MarkupViewNoteProps {\n showOriginal: boolean\n onToggle: () => void\n}\n\nexport function MarkupViewNote({ showOriginal, onToggle }: MarkupViewNoteProps): ReactElement {\n return (\n <ViewerStatusNote testId=\"markup-view-note\">\n {showOriginal ? 'Original, without markup' : 'With markup'}\n {' · '}\n <button\n type=\"button\"\n className=\"font-medium text-primary hover:underline pointer-coarse:min-h-11\"\n data-testid=\"markup-view-note-toggle\"\n onClick={onToggle}\n >\n {showOriginal ? 'Show markup' : 'Show original'}\n </button>\n </ViewerStatusNote>\n )\n}\n","/**\n * The bar above an older version opened read-only: which version it is, \"Ask about this version\"\n * (when the host has an assistant) and the way back to the current version. Put it in the viewer's\n * sticky header, not the content area: a PDF view scrolls its first page into view, which would\n * scroll a bar above it out of sight.\n */\n\nimport type { ReactElement } from 'react'\n\nconst LINK = 'font-medium text-primary hover:underline pointer-coarse:min-h-11'\n\nexport interface VersionSnapshotBarLabels {\n /** `Version 2 · read only`; `number` is undefined when the version is not known. */\n title: (number: number | undefined) => string\n ask: string\n returnToCurrent: string\n /** For documents edited live (Word, artifacts), where \"current\" is the live document. */\n returnToLive: string\n}\n\nexport const DEFAULT_VERSION_SNAPSHOT_BAR_LABELS: VersionSnapshotBarLabels = {\n title: (number) => `${number ? `Version ${number}` : 'Saved version'} · read only`,\n ask: 'Ask about this version',\n returnToCurrent: 'Return to current version',\n returnToLive: 'Return to live document',\n}\n\nexport interface VersionSnapshotBarProps {\n /** The version's number, when known. */\n versionNumber?: number\n /** The document is edited live: the way back says \"live document\". */\n live?: boolean\n /** Ask the assistant about this version. Omitted: no ask action. */\n onAsk?: () => void\n onReturn: () => void\n labels?: Partial<VersionSnapshotBarLabels>\n}\n\nexport function VersionSnapshotBar({\n versionNumber,\n live = false,\n onAsk,\n onReturn,\n labels: overrides,\n}: VersionSnapshotBarProps): ReactElement {\n const labels = { ...DEFAULT_VERSION_SNAPSHOT_BAR_LABELS, ...overrides }\n return (\n <div\n className=\"flex items-center justify-between border-b px-3 py-2 text-xs\"\n data-testid=\"version-snapshot-bar\"\n >\n <span>{labels.title(versionNumber)}</span>\n <span className=\"flex items-center gap-3\">\n {onAsk && (\n <button type=\"button\" className={LINK} data-testid=\"version-snapshot-ask\" onClick={onAsk}>\n {labels.ask}\n </button>\n )}\n <button\n type=\"button\"\n className={LINK}\n data-testid=\"version-snapshot-return\"\n onClick={onReturn}\n >\n {live ? labels.returnToLive : labels.returnToCurrent}\n </button>\n </span>\n </div>\n )\n}\n","/**\n * PDF tab › My signature: place one's own saved signature or initials on the page as a picture stamp\n * in the markup layer (then drag and resize it like any stamp). Nothing saved yet: the adopt dialog\n * opens first and saves it. Needs a `<DocumentToolsProvider>` inside a React Query\n * `QueryClientProvider`.\n */\n\nimport { useState, type ReactElement } from 'react'\nimport { Signature } from 'lucide-react'\nimport {\n INFORMAL_SIGNATURE_NOTE,\n fetchSavedSignature,\n storeSavedSignature,\n useDocumentTools,\n type SavedSignature,\n} from '@arbidocs/react/document-tools'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { AdoptSignatureDialog } from './AdoptSignatureDialog'\n\nexport type PlacedMark = { image: string; label: string }\n\ntype Mark = 'signature' | 'initials'\n\nconst picked = (saved: SavedSignature, mark: Mark): PlacedMark =>\n mark === 'signature'\n ? { image: saved.signature_png, label: 'Signature' }\n : { image: saved.initials_png, label: 'Initials' }\n\nexport function PlaceMySignatureButton({\n onPlace,\n compact = false,\n menuItems = false,\n}: {\n /** Arm the stamp tool with this picture: the next click on a page places it. */\n onPlace: (mark: PlacedMark) => void\n compact?: boolean\n /** Render the actions inside a shared signing menu. */\n menuItems?: boolean\n}): ReactElement {\n const { client, user, notify } = useDocumentTools()\n const [adoptFor, setAdoptFor] = useState<Mark | null>(null)\n\n // Read when asked for (sealed with one's own key: opened here, in the browser).\n const place = async (mark: Mark) => {\n try {\n const saved = await fetchSavedSignature(client)\n if (saved) return onPlace(picked(saved, mark))\n setAdoptFor(mark)\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Your saved signature could not be read', 'error')\n }\n }\n\n return (\n <>\n {menuItems ? (\n <>\n <DropdownMenuItem\n onSelect={() => void place('signature')}\n data-testid=\"place-my-signature\"\n >\n Place my signature\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => void place('initials')} data-testid=\"place-my-initials\">\n Place my initials\n </DropdownMenuItem>\n </>\n ) : (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size={compact ? 'icon' : 'sm'}\n title=\"Place my signature\"\n aria-label=\"Place my signature\"\n className=\"pointer-coarse:min-h-11\"\n data-testid=\"place-my-signature-button\"\n >\n <Signature className=\"size-4\" />\n {!compact && <span className=\"ml-1\">My signature</span>}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"max-w-72\">\n <DropdownMenuItem\n onSelect={() => void place('signature')}\n data-testid=\"place-my-signature\"\n >\n Place my signature\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => void place('initials')}\n data-testid=\"place-my-initials\"\n >\n Place my initials\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-xs font-normal text-muted-foreground\">\n {INFORMAL_SIGNATURE_NOTE}\n </DropdownMenuLabel>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <AdoptSignatureDialog\n open={!!adoptFor}\n onOpenChange={(open) => !open && setAdoptFor(null)}\n mode=\"save\"\n defaultName={user?.name ?? ''}\n onSave={async (signature) => {\n await storeSavedSignature(client, signature)\n const mark = adoptFor\n setAdoptFor(null)\n if (mark) onPlace(picked(signature, mark))\n }}\n onAdopt={\n menuItems\n ? () => {}\n : () => notify('Your signature is saved. Click where it goes.', 'success')\n }\n />\n </>\n )\n}\n","/**\n * Account settings › Your signature: the signature and initials saved to the account (sealed with\n * the user's own key), with Replace (the adopt dialog, saving over it) and Delete (removed from the\n * account completely; what was already placed in documents or sealed in signed PDFs stays as it\n * is). Needs a `<DocumentToolsProvider>` inside a React Query `QueryClientProvider`.\n */\n\nimport { useState, type ReactElement } from 'react'\nimport { PenLine, Trash2, Upload } from 'lucide-react'\nimport {\n INFORMAL_SIGNATURE_NOTE,\n useDeleteSavedSignature,\n useDocumentTools,\n useSavedSignature,\n useStoreSavedSignature,\n} from '@arbidocs/react/document-tools'\nimport { Button } from '@arbidocs/react/ui'\nimport { ConfirmDialog } from '../provider/dialogs'\nimport { SettingsCard, SettingsDisclosure } from '../settings/SettingsPanel'\nimport { AdoptSignatureDialog } from './AdoptSignatureDialog'\n\nexport const DELETE_SAVED_SIGNATURE_TEXT =\n 'Your saved signature and initials are removed from your account completely. Signatures you ' +\n 'already inserted into documents, and those sealed in signed PDFs, are not affected.'\n\nexport function SavedSignatureSettings(): ReactElement {\n const { user, notify } = useDocumentTools()\n const saved = useSavedSignature()\n const store = useStoreSavedSignature()\n const remove = useDeleteSavedSignature()\n const [editing, setEditing] = useState(false)\n const [uploading, setUploading] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const signature = saved.data\n\n return (\n <>\n <SettingsDisclosure title=\"Saved signature\" testId=\"saved-signature-settings\">\n <SettingsCard>\n <div className=\"space-y-1\">\n <p className=\"text-sm text-muted-foreground\">\n Saved to your account, sealed with your own key, to insert into Word documents and\n place on PDFs. {INFORMAL_SIGNATURE_NOTE}\n </p>\n </div>\n {signature ? (\n <div\n className=\"flex flex-wrap items-center gap-4\"\n data-testid=\"saved-signature-preview\"\n >\n <img\n src={`data:image/png;base64,${signature.signature_png}`}\n alt=\"Your saved signature\"\n className=\"h-16 max-w-xs rounded-md border bg-white object-contain p-1\"\n />\n <img\n src={`data:image/png;base64,${signature.initials_png}`}\n alt=\"Your saved initials\"\n className=\"h-16 max-w-[8rem] rounded-md border bg-white object-contain p-1\"\n />\n </div>\n ) : (\n <p className=\"text-sm text-muted-foreground\" data-testid=\"saved-signature-none\">\n {saved.isLoading ? 'Loading…' : 'No signature saved.'}\n </p>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n setUploading(false)\n setEditing(true)\n }}\n data-testid=\"saved-signature-replace\"\n >\n <PenLine className=\"mr-1 size-4\" aria-hidden />\n {signature ? 'Replace' : 'Add a signature'}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n setUploading(true)\n setEditing(true)\n }}\n data-testid=\"saved-signature-upload\"\n >\n <Upload className=\"mr-1 size-4\" aria-hidden />\n Upload\n </Button>\n {signature && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setConfirming(true)}\n data-testid=\"saved-signature-delete\"\n >\n <Trash2 className=\"mr-1 size-4\" aria-hidden />\n Delete\n </Button>\n )}\n </div>\n </SettingsCard>\n </SettingsDisclosure>\n <AdoptSignatureDialog\n initialStyle={uploading ? 'uploaded' : undefined}\n open={editing}\n onOpenChange={setEditing}\n mode=\"save\"\n defaultName={user?.name ?? ''}\n saved={signature ?? null}\n onSave={async (next) => void (await store.mutateAsync(next))}\n onAdopt={() => {\n setEditing(false)\n notify('Your signature is saved.', 'success')\n }}\n />\n <ConfirmDialog\n isOpen={confirming}\n onClose={() => setConfirming(false)}\n onConfirm={async () => {\n try {\n await remove.mutateAsync()\n notify('Your saved signature is deleted.', 'success')\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not delete it', 'error')\n } finally {\n setConfirming(false)\n }\n }}\n title=\"Delete your saved signature?\"\n description={DELETE_SAVED_SIGNATURE_TEXT}\n confirmText=\"Delete\"\n variant=\"destructive\"\n isLoading={remove.isPending}\n testId=\"saved-signature-delete-confirm\"\n />\n </>\n )\n}\n","/**\n * Where a document's signature requests stand, above the document: a request waiting for the\n * viewer's signature (with \"Review and sign\"), one the viewer sent and is waiting on others (who\n * has signed; void it), and the viewer's own draft (go on editing it). Nothing when there is none.\n * Needs a `<DocumentToolsProvider>` whose `user` has an `externalId`.\n */\n\nimport type { ReactElement } from 'react'\nimport { FilePenLine, PenLine, Send } from 'lucide-react'\nimport {\n SIGNER_PROGRESS_LABELS,\n useDocumentSignatureRequests,\n useDocumentTools,\n useInviteSigners,\n useSignerCandidates,\n useVoidSignatureRequest,\n type SignatureRequest,\n} from '@arbidocs/react/document-tools'\nimport { Button } from '@arbidocs/react/ui'\n\nexport interface SignatureRequestBannerProps {\n documentId: string\n /** Open the guided signing of a request waiting for the viewer. */\n onSign: (request: SignatureRequest) => void\n /** Go on editing the viewer's draft. */\n onEditDraft: (request: SignatureRequest) => void\n /** Hide it (e.g. while the editor or the guided signing is open). */\n hidden?: boolean\n}\n\n/** Who is still to sign, and how far each has got (\"Dana Day (invited)\"). */\nfunction waitingFor(request: SignatureRequest): string[] {\n return request.signers\n .filter((s) => s.status === 'pending')\n .map((s) => `${s.name || s.email || ''} (${SIGNER_PROGRESS_LABELS[s.progress].toLowerCase()})`)\n}\n\nexport function SignatureRequestBanner({\n documentId,\n onSign,\n onEditDraft,\n hidden = false,\n}: SignatureRequestBannerProps): ReactElement | null {\n const { user, notify } = useDocumentTools()\n const requests = useDocumentSignatureRequests(documentId, !hidden)\n const voidRequest = useVoidSignatureRequest()\n const invite = useInviteSigners()\n const me = user?.externalId ?? null\n const candidates = useSignerCandidates(!hidden && !!me)\n const isOwner = candidates.data?.some((c) => c.externalId === me && c.role === 'owner') ?? false\n if (hidden || !me || !requests.data) return null\n const open = requests.data.filter((r) => r.status === 'sent' || r.status === 'draft')\n const awaitingMe = open.filter(\n (r) =>\n r.status === 'sent' && r.signers.some((s) => s.user_ext_id === me && s.status === 'pending')\n )\n const sentByMe = open.filter(\n (r) => r.status === 'sent' && r.created_by === me && !awaitingMe.includes(r)\n )\n const drafts = open.filter((r) => r.status === 'draft' && r.created_by === me)\n if (awaitingMe.length + sentByMe.length + drafts.length === 0) return null\n\n const doVoid = async (request: SignatureRequest) => {\n try {\n await voidRequest.mutateAsync(request.external_id)\n notify(request.status === 'draft' ? 'Draft discarded.' : 'Signature request voided.', 'info')\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not void it', 'error')\n }\n }\n\n return (\n <div\n className=\"space-y-1.5 border-b border-border px-3 py-2 text-sm\"\n data-testid=\"signature-request-banner\"\n >\n {awaitingMe.map((r) => {\n const count = r.fields.filter((f) => f.signer === me).length\n const author = r.signers.find((s) => s.user_ext_id === r.created_by)?.name\n return (\n <div\n key={r.external_id}\n className=\"flex flex-wrap items-center gap-2 rounded-md bg-blue-50 px-2 py-1.5 text-blue-950 dark:bg-blue-950/40 dark:text-blue-100\"\n data-testid=\"signature-request-awaiting-me\"\n >\n <PenLine className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"mr-auto\">\n {author && r.created_by !== me\n ? `${author} asked you to sign`\n : 'You are asked to sign'}{' '}\n {count} field{count === 1 ? '' : 's'} in this document.\n {r.stale && ' It has changed since it was sent: ask for it again.'}\n </span>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => onSign(r)}\n disabled={r.stale}\n data-testid=\"signature-request-start\"\n >\n Review and sign\n </Button>\n </div>\n )\n })}\n {sentByMe.map((r) => {\n const pending = waitingFor(r)\n const signed = r.signers.length - pending.length\n const invited = r.signers.filter((s) => s.progress === 'invited' && s.email)\n return (\n <div\n key={r.external_id}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid=\"signature-request-sent\"\n >\n <Send className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"mr-auto\">\n Out for signature: {signed} of {r.signers.length} signed\n {pending.length > 0 && (\n <span className=\"text-muted-foreground\"> · waiting for {pending.join(', ')}</span>\n )}\n {r.stale && (\n <span className=\"text-red-text\"> · the document has changed since it was sent</span>\n )}\n </span>\n {isOwner && invited.length > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={invite.isPending}\n onClick={async () => {\n try {\n await invite.mutateAsync({\n documentId,\n emails: invited.map((s) => s.email!),\n })\n notify(\n 'Invited again: anyone already registered is added now and asked to sign.',\n 'success'\n )\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not invite', 'error')\n }\n }}\n data-testid=\"signature-request-reinvite\"\n >\n Invite again\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => doVoid(r)}\n disabled={voidRequest.isPending}\n >\n Void\n </Button>\n </div>\n )\n })}\n {drafts.map((r) => (\n <div\n key={r.external_id}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid=\"signature-request-draft\"\n >\n <FilePenLine className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"mr-auto\">\n Draft signature request: {r.fields.length} field{r.fields.length === 1 ? '' : 's'}, not\n sent yet.\n </span>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => onEditDraft(r)}>\n Continue\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => doVoid(r)}\n disabled={voidRequest.isPending}\n >\n Discard\n </Button>\n </div>\n ))}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { createFileShare, useDocumentTools } from '@arbidocs/react/document-tools'\nimport { Button, Label, Textarea } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\nexport function FileShareDialog({\n open,\n onOpenChange,\n documentId,\n version,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n documentId: string\n version: number\n}) {\n const { client, prepareFileShare } = useDocumentTools()\n const [emails, setEmails] = useState('')\n const [message, setMessage] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => !busy && onOpenChange(next)}\n title={`Share file · version ${version}`}\n description=\"Recipients can view and download only this version. They get no workspace access or other versions.\"\n showDescription\n testId=\"file-share-dialog\"\n >\n <form\n onSubmit={async (event) => {\n event.preventDefault()\n setBusy(true)\n setError('')\n try {\n const recipients = [\n ...new Set(\n emails\n .split(/[,;\\n]+/)\n .map((e) => e.trim().toLowerCase())\n .filter(Boolean)\n ),\n ]\n if (!recipients.length) throw new Error('Add at least one recipient email')\n await prepareFileShare(documentId)\n const share = await createFileShare(client, documentId, {\n version,\n recipients: recipients.map((email) => ({ email, permission: 'view' })),\n message,\n })\n window.location.assign(`/shared-files/${share.external_id}`)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Could not share the file')\n } finally {\n setBusy(false)\n }\n }}\n >\n <ModalScaffold.Body>\n <Label htmlFor=\"file-share-emails\">Recipient emails</Label>\n <Textarea\n id=\"file-share-emails\"\n data-testid=\"file-share-emails\"\n value={emails}\n onChange={(e) => setEmails(e.target.value)}\n placeholder=\"One email per line, or separated by commas\"\n required\n />\n <Label htmlFor=\"file-share-message\">Message (optional)</Label>\n <Textarea\n id=\"file-share-message\"\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n maxLength={2000}\n />\n <p className=\"text-sm text-muted-foreground\">\n Each recipient receives an email with an account-specific link. External users on a Box\n receive up to 24 hours of access.\n </p>\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => onOpenChange(false)}\n >\n Cancel\n </Button>\n <Button type=\"submit\" disabled={busy} data-testid=\"file-share-send\">\n {busy ? 'Sharing…' : 'Share this version'}\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/document-tools/DocumentToolButtons.tsx","../src/document-tools/MarkupNotices.tsx","../src/document-tools/MarkupViewNote.tsx","../src/document-tools/VersionSnapshotBar.tsx","../src/document-tools/PlaceMySignatureButton.tsx","../src/document-tools/SavedSignatureSettings.tsx","../src/document-tools/SignatureRequestBanner.tsx","../src/document-tools/FileShareDialog.tsx"],"names":["jsxs","Button","jsx","PencilLine","FileText","Download","PenLine","Users","Fragment","ViewerStatusNote","LINK","useDocumentTools","useState","fetchSavedSignature","DropdownMenuItem","DropdownMenu","DropdownMenuTrigger","Signature","DropdownMenuContent","DropdownMenuSeparator","DropdownMenuLabel","INFORMAL_SIGNATURE_NOTE","AdoptSignatureDialog","storeSavedSignature","useSavedSignature","useStoreSavedSignature","useDeleteSavedSignature","SettingsDisclosure","SettingsCard","Upload","Trash2","ConfirmDialog","SIGNER_PROGRESS_LABELS","useDocumentSignatureRequests","useVoidSignatureRequest","useInviteSigners","useSignerCandidates","Send","FilePenLine","ModalScaffold","createFileShare","Label","Textarea"],"mappings":"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","file":"chunk-CKNUL4LM.cjs","sourcesContent":["/**\n * The viewer-header buttons of the PDF document tools: Annotate, Show original, Download with\n * markup and Sign. Separate parts so a host can place them among its own header actions. On a\n * narrow (`compact`) header each is icon-only; its accessible name stays.\n */\n\nimport type { ReactElement } from 'react'\nimport { Download, FileText, PenLine, PencilLine, Users } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\n\nconst TOUCH = 'pointer-coarse:min-h-11'\n\ninterface ToggleProps {\n /** On (pressed). */\n active: boolean\n onClick: () => void\n compact?: boolean\n}\n\n/** Annotate mode: highlight, comment, stamp, redact. */\nexport function AnnotateButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title=\"Annotate: highlight, comment, stamp, redact\"\n aria-label=\"Annotate\"\n data-testid=\"annotate-toggle\"\n className={TOUCH}\n onClick={onClick}\n >\n <PencilLine className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Annotate</span>}\n </Button>\n )\n}\n\n/** The markup is the default view of a marked-up PDF; this shows the untouched file. */\nexport function ShowOriginalButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title={active ? 'Show the markup again' : 'Show the original, without markup'}\n aria-label=\"Show original\"\n data-testid=\"markup-show-original\"\n className={TOUCH}\n onClick={onClick}\n >\n <FileText className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Show original</span>}\n </Button>\n )\n}\n\n/**\n * \"Download with markup\": the PDF with its annotations, which Acrobat and Preview show. With a\n * `disabledReason` (a signed, locked version) it is off and says why.\n */\nexport function DownloadMarkupButton({\n onClick,\n disabledReason,\n}: {\n onClick: () => void\n disabledReason?: string\n}): ReactElement {\n const button = (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n title={\n disabledReason ??\n 'Download with markup: the PDF with its annotations (opens in Acrobat or Preview)'\n }\n aria-label=\"Download with markup\"\n aria-description={disabledReason}\n disabled={!!disabledReason}\n data-testid=\"markup-download\"\n className={TOUCH}\n onClick={onClick}\n >\n <Download className=\"size-4\" />\n </Button>\n )\n // A disabled button gets no pointer events, so the reason sits on a wrapper too.\n return disabledReason ? (\n <span title={disabledReason} className=\"inline-flex\" data-testid=\"markup-download-locked\">\n {button}\n </span>\n ) : (\n button\n )\n}\n\n/** One line where a signed version's content can be edited: an edit is a new, unsigned version. */\nexport function SignedEditNote(): ReactElement {\n return (\n <p\n className=\"border-b px-3 py-1.5 text-xs text-muted-foreground\"\n data-testid=\"signed-edit-note\"\n >\n Editing creates a new unsigned version\n </p>\n )\n}\n\n/** Sign: choose where the signature goes, then sign. */\nexport function SignButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title=\"Sign document\"\n aria-label=\"Sign\"\n data-testid=\"sign-document-button\"\n className={TOUCH}\n onClick={onClick}\n >\n <PenLine className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Sign</span>}\n </Button>\n )\n}\n\n/** Prepare the document for others to sign: place their fields and send it. */\nexport function RequestSignaturesButton({ active, onClick, compact }: ToggleProps): ReactElement {\n return (\n <Button\n type=\"button\"\n variant={active ? 'default' : 'outline'}\n size={compact ? 'icon' : 'sm'}\n aria-pressed={active}\n title=\"Request signatures\"\n aria-label=\"Request signatures\"\n data-testid=\"request-signatures-button\"\n className={TOUCH}\n onClick={onClick}\n >\n <Users className=\"size-4\" />\n {!compact && <span className=\"ml-1\">Request signatures</span>}\n </Button>\n )\n}\n","/**\n * The one-line notices above the PDF about its markup: annotations found in this browser from\n * before markup was saved on the server (for a shared document: add them to the shared markup, or\n * discard), and markup that sits on an older version (open it, or copy its open comments here).\n */\n\nimport type { LegacyPrompt, OlderMarkupNote } from '@arbidocs/react/document-tools'\n\nconst BAR = 'flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2 text-xs'\nconst LINK =\n 'font-medium text-primary hover:underline disabled:opacity-50 disabled:no-underline pointer-coarse:min-h-11'\n\nexport interface MarkupNoticesProps {\n legacyPrompt: LegacyPrompt | null\n olderNote: OlderMarkupNote | null\n onOpenVersion: (version: number) => void\n}\n\nexport function MarkupNotices({ legacyPrompt, olderNote, onOpenVersion }: MarkupNoticesProps) {\n return (\n <>\n {legacyPrompt && (\n <div className={BAR} role=\"status\" data-testid=\"markup-migration-prompt\">\n <span>\n {legacyPrompt.count} annotation{legacyPrompt.count === 1 ? '' : 's'} on this document\n {legacyPrompt.count === 1 ? ' is' : ' are'} saved only in this browser. Add{' '}\n {legacyPrompt.count === 1 ? 'it' : 'them'} to the shared markup, where everyone with\n access sees {legacyPrompt.count === 1 ? 'it' : 'them'}?\n </span>\n <span className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n className={LINK}\n disabled={legacyPrompt.busy}\n data-testid=\"markup-migration-add\"\n onClick={legacyPrompt.add}\n >\n {legacyPrompt.busy ? 'Adding…' : 'Add to shared markup'}\n </button>\n <button\n type=\"button\"\n className={LINK}\n disabled={legacyPrompt.busy}\n data-testid=\"markup-migration-discard\"\n onClick={legacyPrompt.discard}\n >\n Discard\n </button>\n </span>\n </div>\n )}\n {olderNote && (\n <div className={BAR} data-testid=\"markup-older-version-note\">\n <span>\n The markup is on version {olderNote.version}. This version started without it.\n {olderNote.signed && (\n <span data-testid=\"markup-older-version-signed\">\n {' '}\n It is signed: comments copied here are kept beside it, and the signed PDF does not\n change.\n </span>\n )}\n </span>\n <span className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n className={LINK}\n data-testid=\"markup-open-older-version\"\n onClick={() => onOpenVersion(olderNote.version)}\n >\n Open version {olderNote.version}\n </button>\n <button\n type=\"button\"\n className={LINK}\n disabled={olderNote.busy}\n data-testid=\"markup-copy-open-threads\"\n title=\"Copy the unresolved comment threads onto this version (redactions never carry over)\"\n onClick={olderNote.copy}\n >\n {olderNote.busy ? 'Copying…' : 'Copy open comments here'}\n </button>\n </span>\n </div>\n )}\n </>\n )\n}\n","/**\n * Which view of a marked-up PDF is on screen, spelled out beside the title, with the switch to the\n * other one. The narrow header's \"Show original\" is an unlabelled page icon, so on its own it read\n * as no control at all, and nothing said whether the page showed the markup or the original.\n */\n\nimport type { ReactElement } from 'react'\nimport { ViewerStatusNote } from '../files/ViewerLayout'\n\nexport interface MarkupViewNoteProps {\n showOriginal: boolean\n onToggle: () => void\n}\n\nexport function MarkupViewNote({ showOriginal, onToggle }: MarkupViewNoteProps): ReactElement {\n return (\n <ViewerStatusNote testId=\"markup-view-note\">\n {showOriginal ? 'Original, without markup' : 'With markup'}\n {' · '}\n <button\n type=\"button\"\n className=\"font-medium text-primary hover:underline pointer-coarse:min-h-11\"\n data-testid=\"markup-view-note-toggle\"\n onClick={onToggle}\n >\n {showOriginal ? 'Show markup' : 'Show original'}\n </button>\n </ViewerStatusNote>\n )\n}\n","/**\n * The bar above an older version opened read-only: which version it is, \"Ask about this version\"\n * (when the host has an assistant) and the way back to the current version. Put it in the viewer's\n * sticky header, not the content area: a PDF view scrolls its first page into view, which would\n * scroll a bar above it out of sight.\n */\n\nimport type { ReactElement } from 'react'\n\nconst LINK = 'font-medium text-primary hover:underline pointer-coarse:min-h-11'\n\nexport interface VersionSnapshotBarLabels {\n /** `Version 2 · read only`; `number` is undefined when the version is not known. */\n title: (number: number | undefined) => string\n ask: string\n returnToCurrent: string\n /** For documents edited live (Word, artifacts), where \"current\" is the live document. */\n returnToLive: string\n}\n\nexport const DEFAULT_VERSION_SNAPSHOT_BAR_LABELS: VersionSnapshotBarLabels = {\n title: (number) => `${number ? `Version ${number}` : 'Saved version'} · read only`,\n ask: 'Ask about this version',\n returnToCurrent: 'Return to current version',\n returnToLive: 'Return to live document',\n}\n\nexport interface VersionSnapshotBarProps {\n /** The version's number, when known. */\n versionNumber?: number\n /** The document is edited live: the way back says \"live document\". */\n live?: boolean\n /** Ask the assistant about this version. Omitted: no ask action. */\n onAsk?: () => void\n onReturn: () => void\n labels?: Partial<VersionSnapshotBarLabels>\n}\n\nexport function VersionSnapshotBar({\n versionNumber,\n live = false,\n onAsk,\n onReturn,\n labels: overrides,\n}: VersionSnapshotBarProps): ReactElement {\n const labels = { ...DEFAULT_VERSION_SNAPSHOT_BAR_LABELS, ...overrides }\n return (\n <div\n className=\"flex items-center justify-between border-b px-3 py-2 text-xs\"\n data-testid=\"version-snapshot-bar\"\n >\n <span>{labels.title(versionNumber)}</span>\n <span className=\"flex items-center gap-3\">\n {onAsk && (\n <button type=\"button\" className={LINK} data-testid=\"version-snapshot-ask\" onClick={onAsk}>\n {labels.ask}\n </button>\n )}\n <button\n type=\"button\"\n className={LINK}\n data-testid=\"version-snapshot-return\"\n onClick={onReturn}\n >\n {live ? labels.returnToLive : labels.returnToCurrent}\n </button>\n </span>\n </div>\n )\n}\n","/**\n * PDF tab › My signature: place one's own saved signature or initials on the page as a picture stamp\n * in the markup layer (then drag and resize it like any stamp). Nothing saved yet: the adopt dialog\n * opens first and saves it. Needs a `<DocumentToolsProvider>` inside a React Query\n * `QueryClientProvider`.\n */\n\nimport { useState, type ReactElement } from 'react'\nimport { Signature } from 'lucide-react'\nimport {\n INFORMAL_SIGNATURE_NOTE,\n fetchSavedSignature,\n storeSavedSignature,\n useDocumentTools,\n type SavedSignature,\n} from '@arbidocs/react/document-tools'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { AdoptSignatureDialog } from './AdoptSignatureDialog'\n\nexport type PlacedMark = { image: string; label: string }\n\ntype Mark = 'signature' | 'initials'\n\nconst picked = (saved: SavedSignature, mark: Mark): PlacedMark =>\n mark === 'signature'\n ? { image: saved.signature_png, label: 'Signature' }\n : { image: saved.initials_png, label: 'Initials' }\n\nexport function PlaceMySignatureButton({\n onPlace,\n compact = false,\n menuItems = false,\n}: {\n /** Arm the stamp tool with this picture: the next click on a page places it. */\n onPlace: (mark: PlacedMark) => void\n compact?: boolean\n /** Render the actions inside a shared signing menu. */\n menuItems?: boolean\n}): ReactElement {\n const { client, user, notify } = useDocumentTools()\n const [adoptFor, setAdoptFor] = useState<Mark | null>(null)\n\n // Read when asked for (sealed with one's own key: opened here, in the browser).\n const place = async (mark: Mark) => {\n try {\n const saved = await fetchSavedSignature(client)\n if (saved) return onPlace(picked(saved, mark))\n setAdoptFor(mark)\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Your saved signature could not be read', 'error')\n }\n }\n\n return (\n <>\n {menuItems ? (\n <>\n <DropdownMenuItem\n onSelect={() => void place('signature')}\n data-testid=\"place-my-signature\"\n >\n Place my signature\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => void place('initials')} data-testid=\"place-my-initials\">\n Place my initials\n </DropdownMenuItem>\n </>\n ) : (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size={compact ? 'icon' : 'sm'}\n title=\"Place my signature\"\n aria-label=\"Place my signature\"\n className=\"pointer-coarse:min-h-11\"\n data-testid=\"place-my-signature-button\"\n >\n <Signature className=\"size-4\" />\n {!compact && <span className=\"ml-1\">My signature</span>}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"max-w-72\">\n <DropdownMenuItem\n onSelect={() => void place('signature')}\n data-testid=\"place-my-signature\"\n >\n Place my signature\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => void place('initials')}\n data-testid=\"place-my-initials\"\n >\n Place my initials\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-xs font-normal text-muted-foreground\">\n {INFORMAL_SIGNATURE_NOTE}\n </DropdownMenuLabel>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <AdoptSignatureDialog\n open={!!adoptFor}\n onOpenChange={(open) => !open && setAdoptFor(null)}\n mode=\"save\"\n defaultName={user?.name ?? ''}\n onSave={async (signature) => {\n await storeSavedSignature(client, signature)\n const mark = adoptFor\n setAdoptFor(null)\n if (mark) onPlace(picked(signature, mark))\n }}\n onAdopt={\n menuItems\n ? () => {}\n : () => notify('Your signature is saved. Click where it goes.', 'success')\n }\n />\n </>\n )\n}\n","/**\n * Account settings › Your signature: the signature and initials saved to the account (sealed with\n * the user's own key), with Replace (the adopt dialog, saving over it) and Delete (removed from the\n * account completely; what was already placed in documents or sealed in signed PDFs stays as it\n * is). Needs a `<DocumentToolsProvider>` inside a React Query `QueryClientProvider`.\n */\n\nimport { useState, type ReactElement } from 'react'\nimport { PenLine, Trash2, Upload } from 'lucide-react'\nimport {\n INFORMAL_SIGNATURE_NOTE,\n useDeleteSavedSignature,\n useDocumentTools,\n useSavedSignature,\n useStoreSavedSignature,\n} from '@arbidocs/react/document-tools'\nimport { Button } from '@arbidocs/react/ui'\nimport { ConfirmDialog } from '../provider/dialogs'\nimport { SettingsCard, SettingsDisclosure } from '../settings/SettingsPanel'\nimport { AdoptSignatureDialog } from './AdoptSignatureDialog'\n\nexport const DELETE_SAVED_SIGNATURE_TEXT =\n 'Your saved signature and initials are removed from your account completely. Signatures you ' +\n 'already inserted into documents, and those sealed in signed PDFs, are not affected.'\n\nexport function SavedSignatureSettings(): ReactElement {\n const { user, notify } = useDocumentTools()\n const saved = useSavedSignature()\n const store = useStoreSavedSignature()\n const remove = useDeleteSavedSignature()\n const [editing, setEditing] = useState(false)\n const [uploading, setUploading] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const signature = saved.data\n\n return (\n <>\n <SettingsDisclosure title=\"Saved signature\" testId=\"saved-signature-settings\">\n <SettingsCard>\n <div className=\"space-y-1\">\n <p className=\"text-sm text-muted-foreground\">\n Saved to your account, sealed with your own key, to insert into Word documents and\n place on PDFs. {INFORMAL_SIGNATURE_NOTE}\n </p>\n </div>\n {signature ? (\n <div\n className=\"flex flex-wrap items-center gap-4\"\n data-testid=\"saved-signature-preview\"\n >\n <img\n src={`data:image/png;base64,${signature.signature_png}`}\n alt=\"Your saved signature\"\n className=\"h-16 max-w-xs rounded-md border bg-white object-contain p-1\"\n />\n <img\n src={`data:image/png;base64,${signature.initials_png}`}\n alt=\"Your saved initials\"\n className=\"h-16 max-w-[8rem] rounded-md border bg-white object-contain p-1\"\n />\n </div>\n ) : (\n <p className=\"text-sm text-muted-foreground\" data-testid=\"saved-signature-none\">\n {saved.isLoading ? 'Loading…' : 'No signature saved.'}\n </p>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n setUploading(false)\n setEditing(true)\n }}\n data-testid=\"saved-signature-replace\"\n >\n <PenLine className=\"mr-1 size-4\" aria-hidden />\n {signature ? 'Replace' : 'Add a signature'}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={() => {\n setUploading(true)\n setEditing(true)\n }}\n data-testid=\"saved-signature-upload\"\n >\n <Upload className=\"mr-1 size-4\" aria-hidden />\n Upload\n </Button>\n {signature && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setConfirming(true)}\n data-testid=\"saved-signature-delete\"\n >\n <Trash2 className=\"mr-1 size-4\" aria-hidden />\n Delete\n </Button>\n )}\n </div>\n </SettingsCard>\n </SettingsDisclosure>\n <AdoptSignatureDialog\n initialStyle={uploading ? 'uploaded' : undefined}\n open={editing}\n onOpenChange={setEditing}\n mode=\"save\"\n defaultName={user?.name ?? ''}\n saved={signature ?? null}\n onSave={async (next) => void (await store.mutateAsync(next))}\n onAdopt={() => {\n setEditing(false)\n notify('Your signature is saved.', 'success')\n }}\n />\n <ConfirmDialog\n isOpen={confirming}\n onClose={() => setConfirming(false)}\n onConfirm={async () => {\n try {\n await remove.mutateAsync()\n notify('Your saved signature is deleted.', 'success')\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not delete it', 'error')\n } finally {\n setConfirming(false)\n }\n }}\n title=\"Delete your saved signature?\"\n description={DELETE_SAVED_SIGNATURE_TEXT}\n confirmText=\"Delete\"\n variant=\"destructive\"\n isLoading={remove.isPending}\n testId=\"saved-signature-delete-confirm\"\n />\n </>\n )\n}\n","/**\n * Where a document's signature requests stand, above the document: a request waiting for the\n * viewer's signature (with \"Review and sign\"), one the viewer sent and is waiting on others (who\n * has signed; void it), and the viewer's own draft (go on editing it). Nothing when there is none.\n * Needs a `<DocumentToolsProvider>` whose `user` has an `externalId`.\n */\n\nimport type { ReactElement } from 'react'\nimport { FilePenLine, PenLine, Send } from 'lucide-react'\nimport {\n SIGNER_PROGRESS_LABELS,\n useDocumentSignatureRequests,\n useDocumentTools,\n useInviteSigners,\n useSignerCandidates,\n useVoidSignatureRequest,\n type SignatureRequest,\n} from '@arbidocs/react/document-tools'\nimport { Button } from '@arbidocs/react/ui'\n\nexport interface SignatureRequestBannerProps {\n documentId: string\n /** Open the guided signing of a request waiting for the viewer. */\n onSign: (request: SignatureRequest) => void\n /** Go on editing the viewer's draft. */\n onEditDraft: (request: SignatureRequest) => void\n /** Hide it (e.g. while the editor or the guided signing is open). */\n hidden?: boolean\n}\n\n/** Who is still to sign, and how far each has got (\"Dana Day (invited)\"). */\nfunction waitingFor(request: SignatureRequest): string[] {\n return request.signers\n .filter((s) => s.status === 'pending')\n .map((s) => `${s.name || s.email || ''} (${SIGNER_PROGRESS_LABELS[s.progress].toLowerCase()})`)\n}\n\nexport function SignatureRequestBanner({\n documentId,\n onSign,\n onEditDraft,\n hidden = false,\n}: SignatureRequestBannerProps): ReactElement | null {\n const { user, notify } = useDocumentTools()\n const requests = useDocumentSignatureRequests(documentId, !hidden)\n const voidRequest = useVoidSignatureRequest()\n const invite = useInviteSigners()\n const me = user?.externalId ?? null\n const candidates = useSignerCandidates(!hidden && !!me)\n const isOwner = candidates.data?.some((c) => c.externalId === me && c.role === 'owner') ?? false\n if (hidden || !me || !requests.data) return null\n const open = requests.data.filter((r) => r.status === 'sent' || r.status === 'draft')\n const awaitingMe = open.filter(\n (r) =>\n r.status === 'sent' && r.signers.some((s) => s.user_ext_id === me && s.status === 'pending')\n )\n const sentByMe = open.filter(\n (r) => r.status === 'sent' && r.created_by === me && !awaitingMe.includes(r)\n )\n const drafts = open.filter((r) => r.status === 'draft' && r.created_by === me)\n if (awaitingMe.length + sentByMe.length + drafts.length === 0) return null\n\n const doVoid = async (request: SignatureRequest) => {\n try {\n await voidRequest.mutateAsync(request.external_id)\n notify(request.status === 'draft' ? 'Draft discarded.' : 'Signature request voided.', 'info')\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not void it', 'error')\n }\n }\n\n return (\n <div\n className=\"space-y-1.5 border-b border-border px-3 py-2 text-sm\"\n data-testid=\"signature-request-banner\"\n >\n {awaitingMe.map((r) => {\n const count = r.fields.filter((f) => f.signer === me).length\n const author = r.signers.find((s) => s.user_ext_id === r.created_by)?.name\n return (\n <div\n key={r.external_id}\n className=\"flex flex-wrap items-center gap-2 rounded-md bg-blue-50 px-2 py-1.5 text-blue-950 dark:bg-blue-950/40 dark:text-blue-100\"\n data-testid=\"signature-request-awaiting-me\"\n >\n <PenLine className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"mr-auto\">\n {author && r.created_by !== me\n ? `${author} asked you to sign`\n : 'You are asked to sign'}{' '}\n {count} field{count === 1 ? '' : 's'} in this document.\n {r.stale && ' It has changed since it was sent: ask for it again.'}\n </span>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => onSign(r)}\n disabled={r.stale}\n data-testid=\"signature-request-start\"\n >\n Review and sign\n </Button>\n </div>\n )\n })}\n {sentByMe.map((r) => {\n const pending = waitingFor(r)\n const signed = r.signers.length - pending.length\n const invited = r.signers.filter((s) => s.progress === 'invited' && s.email)\n return (\n <div\n key={r.external_id}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid=\"signature-request-sent\"\n >\n <Send className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"mr-auto\">\n Out for signature: {signed} of {r.signers.length} signed\n {pending.length > 0 && (\n <span className=\"text-muted-foreground\"> · waiting for {pending.join(', ')}</span>\n )}\n {r.stale && (\n <span className=\"text-red-text\"> · the document has changed since it was sent</span>\n )}\n </span>\n {isOwner && invited.length > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={invite.isPending}\n onClick={async () => {\n try {\n await invite.mutateAsync({\n documentId,\n emails: invited.map((s) => s.email!),\n })\n notify(\n 'Invited again: anyone already registered is added now and asked to sign.',\n 'success'\n )\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not invite', 'error')\n }\n }}\n data-testid=\"signature-request-reinvite\"\n >\n Invite again\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => doVoid(r)}\n disabled={voidRequest.isPending}\n >\n Void\n </Button>\n </div>\n )\n })}\n {drafts.map((r) => (\n <div\n key={r.external_id}\n className=\"flex flex-wrap items-center gap-2\"\n data-testid=\"signature-request-draft\"\n >\n <FilePenLine className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"mr-auto\">\n Draft signature request: {r.fields.length} field{r.fields.length === 1 ? '' : 's'}, not\n sent yet.\n </span>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => onEditDraft(r)}>\n Continue\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => doVoid(r)}\n disabled={voidRequest.isPending}\n >\n Discard\n </Button>\n </div>\n ))}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { createFileShare, useDocumentTools } from '@arbidocs/react/document-tools'\nimport { Button, Label, Textarea } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\nexport function FileShareDialog({\n open,\n onOpenChange,\n documentId,\n version,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n documentId: string\n version: number\n}) {\n const { client, prepareFileShare } = useDocumentTools()\n const [emails, setEmails] = useState('')\n const [message, setMessage] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => !busy && onOpenChange(next)}\n title={`Share file · version ${version}`}\n description=\"Recipients can view and download only this version. They get no workspace access or other versions.\"\n showDescription\n testId=\"file-share-dialog\"\n >\n <form\n onSubmit={async (event) => {\n event.preventDefault()\n setBusy(true)\n setError('')\n try {\n const recipients = [\n ...new Set(\n emails\n .split(/[,;\\n]+/)\n .map((e) => e.trim().toLowerCase())\n .filter(Boolean)\n ),\n ]\n if (!recipients.length) throw new Error('Add at least one recipient email')\n await prepareFileShare(documentId)\n const share = await createFileShare(client, documentId, {\n version,\n recipients: recipients.map((email) => ({ email, permission: 'view' })),\n message,\n })\n window.location.assign(`/shared-files/${share.external_id}`)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Could not share the file')\n } finally {\n setBusy(false)\n }\n }}\n >\n <ModalScaffold.Body>\n <Label htmlFor=\"file-share-emails\">Recipient emails</Label>\n <Textarea\n id=\"file-share-emails\"\n data-testid=\"file-share-emails\"\n value={emails}\n onChange={(e) => setEmails(e.target.value)}\n placeholder=\"One email per line, or separated by commas\"\n required\n />\n <Label htmlFor=\"file-share-message\">Message (optional)</Label>\n <Textarea\n id=\"file-share-message\"\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n maxLength={2000}\n />\n <p className=\"text-sm text-muted-foreground\">\n Each recipient receives an email with an account-specific link. External users on a Box\n receive up to 24 hours of access.\n </p>\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => onOpenChange(false)}\n >\n Cancel\n </Button>\n <Button type=\"submit\" disabled={busy} data-testid=\"file-share-send\">\n {busy ? 'Sharing…' : 'Share this version'}\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n )\n}\n"]}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkG2BKHCI2_cjs = require('./chunk-G2BKHCI2.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkI72IYIO2_cjs = require('./chunk-I72IYIO2.cjs');
|
|
6
|
+
var chunkGMM3RBIB_cjs = require('./chunk-GMM3RBIB.cjs');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
var react$1 = require('@arbidocs/react');
|
|
8
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -62,7 +63,7 @@ function ConnectionProvider({
|
|
|
62
63
|
hadDialogSession.current = true;
|
|
63
64
|
} else if (status !== "connecting" && hadDialogSession.current) {
|
|
64
65
|
hadDialogSession.current = false;
|
|
65
|
-
|
|
66
|
+
chunkGMM3RBIB_cjs.closeAllDialogs();
|
|
66
67
|
}
|
|
67
68
|
}, [status]);
|
|
68
69
|
const storageUserRef = react.useRef(null);
|
|
@@ -325,7 +326,7 @@ function useConnectedWorkspace() {
|
|
|
325
326
|
const live = connection ? connection.status === "authenticated" : arbi.isLoggedIn;
|
|
326
327
|
const user = connection ? connection.user : live ? sessionUser(arbi) : null;
|
|
327
328
|
const userKey = `${user?.externalId ?? ""}|${user?.name ?? ""}|${user?.email ?? ""}`;
|
|
328
|
-
const { openWorkspace: showWorkspace } =
|
|
329
|
+
const { openWorkspace: showWorkspace } = chunkI72IYIO2_cjs.useBlocksEnvironment();
|
|
329
330
|
return react.useMemo(
|
|
330
331
|
() => ({
|
|
331
332
|
workspaceId: connection ? connection.workspaceId ?? connection.fallbackWorkspaceId ?? null : sessionWorkspaceId,
|
|
@@ -350,5 +351,5 @@ exports.isAuthenticated = isAuthenticated;
|
|
|
350
351
|
exports.useConnectedWorkspace = useConnectedWorkspace;
|
|
351
352
|
exports.useConnection = useConnection;
|
|
352
353
|
exports.useOptionalConnection = useOptionalConnection;
|
|
353
|
-
//# sourceMappingURL=chunk-
|
|
354
|
-
//# sourceMappingURL=chunk-
|
|
354
|
+
//# sourceMappingURL=chunk-DLHAKRU2.cjs.map
|
|
355
|
+
//# sourceMappingURL=chunk-DLHAKRU2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connection/ConnectionProvider.tsx"],"names":["createContext","useArbi","useArbiSessionStore","useSwitchWorkspace","useState","useArbiSessionState","useRef","useEffect","closeAllDialogs","useCallback","login","clearSealedDrafts","useMemo","jsx","ArbiHost","arbiAccountClient","toProfileView","useContext","useBlocksEnvironment"],"mappings":";;;;;;;;;AA4EA,IAAM,iBAAA,GAAoBA,oBAAsC,IAAI,CAAA;AAQpE,IAAM,wBAAA,GAA2B,wBAAA;AACjC,IAAM,mBAAmB,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,GAAO,WAAA,EAAY;AAG9D,IAAM,mBAAA,GAAsB,CAAC,MAAA,EAAgB,OAAA,KAClD,CAAA,EAAG,wBAAwB,CAAA,CAAA,EAAI,MAAA,IAAU,MAAM,CAAA,CAAA,EAAI,gBAAA,CAAiB,OAAO,CAAC,CAAA,CAAA;AAG9E,IAAM,4BAA4B,CAAC,MAAA,KACjC,GAAG,wBAAwB,CAAA,CAAA,EAAI,UAAU,MAAM,CAAA,CAAA;AAEjD,SAAS,sBAAA,CAAuB,QAAgB,OAAA,EAAuC;AACrF,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,IAAI;AACF,IAAA,OAAO,OAAO,YAAA,CAAa,OAAA,CAAQ,mBAAA,CAAoB,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,EACzE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,gBAAA,CAAiB,MAAA,EAAgB,OAAA,EAAwB,EAAA,EAAyB;AACzF,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,IAAI;AACF,IAAA,IAAI,EAAA,SAAW,YAAA,CAAa,OAAA,CAAQ,oBAAoB,MAAA,EAAQ,OAAO,GAAG,EAAE,CAAA;AAAA,gBAChE,YAAA,CAAa,UAAA,CAAW,mBAAA,CAAoB,MAAA,EAAQ,OAAO,CAAC,CAAA;AACxE,IAAA,MAAA,CAAO,YAAA,CAAa,UAAA,CAAW,yBAAA,CAA0B,MAAM,CAAC,CAAA;AAAA,EAClE,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGO,IAAM,uBAAA,GAA0B;AAGvC,SAAS,eAAA,CAAgB,SAAuB,UAAA,EAA+B;AAC7E,EAAA,MAAM,WAAW,CAAC,OAAA,CAAQ,WAAW,OAAA,CAAQ,UAAU,EACpD,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,EAAM,MAAM,CAAA,CAC1B,OAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,IAAY,OAAA,CAAQ,MAAM,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,IAC5C,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,UAAA;AAAA,IACA,SAAS,OAAA,CAAQ;AAAA,GACnB;AACF;AAOO,SAAS,kBAAA,CAAmB;AAAA,EACjC,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,OAAOC,eAAA,EAAQ;AACrB,EAAA,MAAM,UAAUC,2BAAA,EAAoB;AACpC,EAAA,MAAM,EAAE,eAAA,EAAiB,qBAAA,EAAuB,OAAA,KAAYC,0BAAA,EAAmB;AAC/E,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA;AAChD,EAAA,MAAM,eAAA,GAAkB,OAAO,eAAA,IAAmB,gBAAA;AAElD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,cAAA;AAAA,IAC1B,mBAAmB,YAAA,GAAe;AAAA,GACpC;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAA0B,IAAI,CAAA;AACtD,EAAA,MAAM,WAAA,GAAcC,2BAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC5D,EAAA,MAAM,oBAAoB,OAAA,CAAQ,cAAA;AAClC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAID,eAAmB,MAAM,CAAA;AACjD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAItD,EAAA,MAAM,gBAAA,GAAmBE,aAAO,KAAK,CAAA;AACrC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,KAAW,eAAA,IAAmB,MAAA,KAAW,MAAA,EAAQ;AACnD,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAAA,IAC7B,CAAA,MAAA,IAAW,MAAA,KAAW,YAAA,IAAgB,gBAAA,CAAiB,OAAA,EAAS;AAC9D,MAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAC3B,MAAAC,iCAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,cAAA,GAAiBF,aAAsB,IAAI,CAAA;AAEjD,EAAA,MAAM,UAAA,GAAaA,aAAO,CAAC,CAAA;AAK3B,EAAAC,eAAA;AAAA,IACE,MACE,IAAA,CAAK,gBAAA,GAAmB,MAAM;AAC5B,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA,SAAA,CAAU,cAAc,CAAA;AACxB,MAAA,QAAA,CAAS,uBAAuB,CAAA;AAAA,IAClC,CAAC,CAAA;AAAA,IACH,CAAC,MAAM,iBAAiB;AAAA,GAC1B;AAGA,EAAAA,eAAA;AAAA,IACE,MACE,KAAK,IAAA,CAAK,eAAA;AAAA,MAAkB,CAAC,OAAA,KAC3B,OAAA,CAAQ,CAAC,OAAA,KAAa,OAAA,GAAU,eAAA,CAAgB,OAAA,EAAS,OAAA,CAAQ,UAAU,CAAA,GAAI,OAAQ;AAAA,KACzF;AAAA,IACF,CAAC,IAAI;AAAA,GACP;AAEA,EAAA,MAAM,SAAA,GAAYE,kBAAY,MAAM;AAClC,IAAA,OAAA,CAAQ,MAAM,CAAA;AACd,IAAA,SAAA,CAAU,MAAM,CAAA;AAChB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,OAAA,CAAQ,EAAE,MAAM,MAAA,CAAO,QAAA,CAAS,MAAM,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,CAAA;AACpE,IAAA,iBAAA,CAAkB,eAAe,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,OAAO,QAAA,CAAS,KAAA,EAAO,eAAA,EAAiB,iBAAiB,CAAC,CAAA;AAMpF,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,OAAO,KAAA,KAAkB;AACvB,MAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,MAAA,MAAM,SAAA,GAAY,MAAM,GAAA,KAAQ,UAAA,CAAW,OAAA;AAC3C,MAAA,OAAA,CAAQ,MAAM,CAAA;AACd,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI;AACF,QAAA,cAAA,CAAe,OAAA,GAAU,iBAAiB,KAAK,CAAA;AAC/C,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,EAAK;AAC9C,QAAA,IAAI,YAAY,MAAA,EAAQ;AAKtB,UAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,MAAA,CAAO,MAAA,EAAQ,eAAe,OAAO,CAAA;AAC9E,UAAA,MAAM,SAAA,GAAY,aAAa,MAAA,CAAO,WAAA;AACtC,UAAA,MAAM,MAAA,GAAA,CACH,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,SAAS,CAAA,GAAI,KAAA,CAAA,KACnE,UAAA,CAAW,CAAC,CAAA;AACd,UAAA,iBAAA,CAAkB,OAAO,WAAW,CAAA;AACpC,UAAA,IAAI,CAAE,MAAM,qBAAA,EAAsB;AAChC,YAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AACxE,UAAA,gBAAA,CAAiB,MAAA,CAAO,MAAA,EAAQ,cAAA,CAAe,OAAA,EAAS,OAAO,WAAW,CAAA;AAAA,QAC5E;AAIA,QAAA,IAAI,QAAA,GAAqB,EAAE,IAAA,EAAM,KAAA,CAAM,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,EAAM;AAC5D,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,QAAA,EAAS;AAC9B,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,IAAU;AACpC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,QAAA,GAAW,eAAA,CAAgB,OAAA,EAAS,EAAA,EAAI,UAAU,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAA,IAAI;AACF,YAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,SAAA,EAAU;AAChD,YAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,WAAA,KAAgB,EAAA,EAAI,UAAU,CAAA,EAAG,IAAA;AACzE,YAAA,IAAI,IAAA,EAAM;AACR,cAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACpF,cAAA,QAAA,GAAW;AAAA,gBACT,MAAM,QAAA,IAAY,KAAA,CAAM,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,gBACpC,KAAA,EAAO,KAAK,KAAA,IAAS,KAAA;AAAA,gBACrB,YAAY,IAAA,CAAK,WAAA;AAAA,gBACjB,OAAA,EAAS,KAAK,OAAA,IAAW;AAAA,eAC3B;AAAA,YACF,CAAA,MAAA,IAAW,IAAI,UAAA,EAAY;AACzB,cAAA,QAAA,CAAS,aAAa,EAAA,CAAG,UAAA;AAAA,YAC3B;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AACA,QAAA,IAAI,WAAU,EAAG;AACjB,QAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,QAAA,SAAA,CAAU,eAAe,CAAA;AAAA,MAC3B,SAAS,CAAA,EAAG;AACV,QAAA,IAAI,WAAU,EAAG;AAEjB,QAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,yCAAyC,CAAA;AACnF,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,MAAA,CAAO,aAAa,MAAA,CAAO,MAAA,EAAQ,mBAAmB,qBAAqB;AAAA,GACpF;AAGA,EAAA,MAAM,SAAA,GAAYH,YAAA,CAAsB,OAAA,CAAQ,OAAA,EAAS,CAAA;AACzD,EAAAC,eAAA;AAAA,IACE,MACE,IAAA,CAAK,UAAA,GAAa,CAACG,MAAAA,KAAU;AAC3B,MAAA,SAAA,CAAU,OAAA,GAAU,cAAA;AAAA,QAClBA,MAAAA,CAAM,OAAA,EAAS,KAAA,IACb,IAAA,CAAK,OAAA,EAAS,QAAA,EAAS,CAAE,SAAA,IACzB,IAAA,CAAK,IAAA,CAAK,QAAA,EAAS,EAAG,KAAA,IACtB;AAAA,OACJ;AAAA,IACF,CAAC,CAAA;AAAA,IACH,CAAC,MAAM,cAAc;AAAA,GACvB;AAGA,EAAA,MAAM,KAAA,GAAQD,iBAAA;AAAA,IACZ,OAAO,OAAe,QAAA,KAAqB;AACzC,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,SAAA,EAAU;AACV,QAAA;AAAA,MACF;AACA,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,OAAA,CAAQ,MAAM,CAAA;AACd,MAAA,IAAI;AAEF,QAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAChC,QAAA,MAAM,SAAA,CAAU,OAAA;AAAA,MAClB,SAAS,CAAA,EAAG;AACV,QAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,yCAAyC,CAAA;AACnF,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,SAAA,EAAW,gBAAgB;AAAA,GACpC;AAIA,EAAA,MAAM,cAAA,GAAiBH,aAAO,KAAK,CAAA;AACnC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAA,CAAe,OAAA,IAAW,CAAC,gBAAA,EAAkB;AACjD,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,IAAA,IAAA,CACG,OAAA,GACA,KAAA,CAAM,MAAM,KAAK,CAAA,CACjB,IAAA,CAAK,OAAO,QAAA,KAAa;AACxB,MAAA,IAAI,QAAA,QAAgB,SAAA,CAAU,OAAA;AAAA,qBACf,cAAc,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,IAAA,EAAM,gBAAgB,CAAC,CAAA;AAE3B,EAAA,MAAM,MAAA,GAASE,kBAAY,MAAM;AAC/B,IAAA,UAAA,CAAW,OAAA,EAAA;AAGX,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,KAAK,KAAK,MAAA,IAAS;AAAA,IACrB;AAEA,IAAAE,yBAAA,EAAkB;AAClB,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,gBAAA,CAAiB,MAAA,CAAO,MAAA,EAAQ,cAAA,CAAe,OAAA,EAAS,IAAI,CAAA;AAC5D,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,IAAA,SAAA,CAAU,cAAc,CAAA;AACxB,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,GAAG,CAAC,IAAA,EAAM,MAAM,MAAA,CAAO,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAMjD,EAAA,MAAM,YAAA,GAAeF,iBAAA;AAAA,IACnB,OAAO,EAAA,KAAe;AACpB,MAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,CAAK,UAAA,EAAY;AACtC,QAAA,IAAI,CAAE,MAAM,eAAA,CAAgB,EAAE,EAAA,EAAI,CAAA,EAAI,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA;AAAA,MACtF,CAAA,MAAO;AACL,QAAA,iBAAA,CAAkB,EAAE,CAAA;AAAA,MACtB;AACA,MAAA,gBAAA,CAAiB,MAAA,CAAO,MAAA,EAAQ,cAAA,CAAe,OAAA,EAAS,EAAE,CAAA;AAAA,IAC5D,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,MAAA,EAAQ,mBAAmB,eAAe;AAAA,GAChE;AAMA,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,YAAY;AAClD,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AACzC,IAAA,MAAM,OAAA,EAAQ;AACd,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,EAAS,CAAE,WAAA,EAAa;AACrC,IAAA,MAAM,qBAAA,EAAsB;AAAA,EAC9B,GAAG,CAAC,IAAA,EAAM,SAAS,IAAA,EAAM,OAAA,EAAS,qBAAqB,CAAC,CAAA;AAExD,EAAA,MAAM,KAAA,GAAQG,aAAA;AAAA,IACZ,OAAO;AAAA,MACL,IAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA,EAAe,gBAAA;AAAA,MACf,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,gBAAA,EAAkB,gBAAA,GAAmB,IAAA,CAAK,mBAAA,EAAoB,GAAI,MAAA;AAAA,MAClE,KAAA;AAAA,MACA,iBAAiB,MAAA,CAAO,eAAA;AAAA,MACxB,mBAAA,EAAqB,IAAA,KAAS,MAAA,GAAS,MAAA,GAAY,MAAA,CAAO,WAAA;AAAA,MAC1D,KAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA,CAAO,MAAA;AAAA,MACP,IAAA;AAAA,MACA,MAAA,CAAO,eAAA;AAAA,MACP,MAAA,CAAO,WAAA;AAAA,MACP,KAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACvD,EAAA,MAAM,gBAAgB,MAAA,KAAW,eAAA;AACjC,EAAA,MAAM,IAAA,GAAOA,aAAA;AAAA,IACX,OAAO,EAAE,OAAA,EAAS,EAAE,QAAQ,OAAA,EAAS,UAAA,EAAY,MAAM,aAAA,EAAc,EAAE,CAAA;AAAA,IACvE,CAAC,SAAS,aAAa;AAAA,GACzB;AAEA,EAAA,uBACEC,cAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,KAAA,EAC1B,yCAACC,0BAAA,EAAA,EAAS,MAAA,EAAQ,IAAA,EAAO,QAAA,EAAS,CAAA,EACpC,CAAA;AAEJ;AAOA,SAAS,oBAAA,CACP,IAAA,EACA,IAAA,EACA,MAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAUR,aAAO,IAAI,CAAA;AAC3B,EAAA,MAAM,SAAA,GAAYA,aAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,EAAA,MAAM,SAAA,GAAYA,YAAA,iBAAO,IAAI,GAAA,EAAiB,CAAA;AAC9C,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,CAAC,QAAA,KAAa,UAAU,CAAA;AAAA,EACpD,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACT,EAAA,OAAOK,cAAQ,MAAM;AACnB,IAAA,MAAM,IAAA,GAAOG,0BAAkB,IAAI,CAAA;AACnC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,SAAS,MAA0B;AACjC,QAAA,MAAM,GAAA,GAAM,KAAK,OAAA,EAAQ;AACzB,QAAA,MAAM,WAAW,OAAA,CAAQ,OAAA;AACzB,QAAA,IAAI,GAAA,IAAO,CAAC,QAAA,EAAU,OAAO,GAAA;AAC7B,QAAA,OAAO;AAAA,UACL,GAAGC,qBAAA,CAAc;AAAA,YACf,SAAA,EAAW,EAAA;AAAA,YACX,UAAA,EAAY,IAAA;AAAA,YACZ,OAAA,EAAS,SAAS,OAAA,IAAW,IAAA;AAAA,YAC7B,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,UACD,UAAU,QAAA,CAAS;AAAA,SACrB;AAAA,MACF,CAAA;AAAA,MACA,eAAA,EAAiB,CAAC,QAAA,KAAa;AAC7B,QAAA,SAAA,CAAU,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9B,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AACzC,QAAA,OAAO,MAAM;AACX,UAAA,SAAA,CAAU,OAAA,CAAQ,OAAO,QAAQ,CAAA;AACjC,UAAA,GAAA,EAAI;AAAA,QACN,CAAA;AAAA,MACF,CAAA;AAAA,MACA,SAAS,OAAO,EAAE,UAAA,EAAW,GAAI,EAAC,KAAM;AACtC,QAAA,IAAI;AACF,UAAA,IAAI,UAAA,EAAY,MAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAU;AAAA,QAChD,CAAA,SAAE;AACA,UAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,QACpB;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACX;AAGO,SAAS,qBAAA,GAAgD;AAC9D,EAAA,OAAOC,iBAAW,iBAAiB,CAAA;AACrC;AAEO,SAAS,aAAA,GAAiC;AAC/C,EAAA,MAAM,GAAA,GAAMA,iBAAW,iBAAiB,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAC3F,EAAA,OAAO,GAAA;AACT;AAEO,IAAM,eAAA,GAAkB,CAAC,CAAA,KAAwB,CAAA,KAAM,UAAU,CAAA,KAAM;AAqB9E,IAAM,iBAAiB,YAAY;AAAC,CAAA;AAGpC,SAAS,YAAY,IAAA,EAAmD;AACtE,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,OAAO,IAAA;AAC7B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,QAAA,EAAS;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,EAAQ;AAClC,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,OAAO,OAAA,GACH,gBAAgB,OAAA,EAAS,EAAA,CAAG,UAAU,CAAA,GACtC,EAAE,IAAA,EAAA,CAAO,EAAA,CAAG,KAAA,IAAS,EAAA,EAAI,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,EAAO,GAAG,KAAA,IAAS,EAAA,EAAI,UAAA,EAAY,EAAA,CAAG,UAAA,EAAW;AAC/F;AAOO,SAAS,qBAAA,GAA4C;AAC1D,EAAA,MAAM,UAAA,GAAaA,iBAAW,iBAAiB,CAAA;AAC/C,EAAA,MAAM,OAAOhB,eAAA,EAAQ;AACrB,EAAA,MAAM,kBAAA,GAAqBI,2BAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AACnE,EAAA,MAAM,IAAA,GAAO,UAAA,GAAa,UAAA,CAAW,MAAA,KAAW,kBAAkB,IAAA,CAAK,UAAA;AACvE,EAAA,MAAM,OAAO,UAAA,GAAa,UAAA,CAAW,OAAO,IAAA,GAAO,WAAA,CAAY,IAAI,CAAA,GAAI,IAAA;AACvE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,EAAM,UAAA,IAAc,EAAE,CAAA,CAAA,EAAI,IAAA,EAAM,IAAA,IAAQ,EAAE,CAAA,CAAA,EAAI,IAAA,EAAM,KAAA,IAAS,EAAE,CAAA,CAAA;AAClF,EAAA,MAAM,EAAE,aAAA,EAAe,aAAA,EAAc,GAAIa,sCAAA,EAAqB;AAC9D,EAAA,OAAON,aAAA;AAAA,IACL,OAAO;AAAA,MACL,aAAa,UAAA,GACR,UAAA,CAAW,WAAA,IAAe,UAAA,CAAW,uBAAuB,IAAA,GAC7D,kBAAA;AAAA,MACJ,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAQ,IAAA,EAAM,UAAA;AAAA,MACd,mBAAA,EAAqB,YAAY,mBAAA,IAAuB,cAAA;AAAA,MACxD,aAAA,EAAe,OAAO,WAAA,EAAqB,OAAA,KAAgC;AACzE,QAAA,IAAI,UAAA,EAAY,MAAM,UAAA,CAAW,YAAA,CAAa,WAAW,CAAA;AACzD,QAAA,aAAA,CAAc,aAAa,OAAO,CAAA;AAAA,MACpC;AAAA,KACF,CAAA;AAAA;AAAA;AAAA,IAGA,CAAC,UAAA,EAAY,kBAAA,EAAoB,IAAA,EAAM,SAAS,aAAa;AAAA,GAC/D;AACF","file":"chunk-DLHAKRU2.cjs","sourcesContent":["/**\n * The demo/live connection layer for a host app. Holds auth + workspace\n * selection state and exposes it via {@link useConnection}, so every surface\n * works identically whether it's talking to a live ARBI backend or the seeded\n * demo workspace. Host-specific values (backend URL, demo identity, default\n * workspace/assistant ids) arrive once through {@link ArbiConnectionConfig}.\n */\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport {\n arbiAccountClient,\n clearSealedDrafts,\n toProfileView,\n useArbi,\n useArbiSessionState,\n useArbiSessionStore,\n useSwitchWorkspace,\n type AccountClient,\n type LoginProfile,\n type ProfileView,\n} from '@arbidocs/react'\nimport type { ArbiMode, ArbiUser, ConnectionStatus, ArbiConnectionConfig } from './types'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { ArbiHost } from '../provider/host'\nimport { closeAllDialogs } from '../provider/dialog-registry'\n\ninterface ConnectionValue {\n mode: ArbiMode\n status: ConnectionStatus\n user: ArbiUser | null\n /** The selected workspace: the session state's (`useArbiSessionState`), set by `setWorkspace`. */\n workspaceId: string | null\n apiConfigured: boolean\n apiUrl: string\n /**\n * The deployment domain the user's keys are derived for (`arbi.getDeploymentDomain()`), for the\n * document tools' e-signing. `undefined` in demo mode.\n */\n deploymentDomain: string | undefined\n error: string | null\n /** Default assistant config ext_id (for the AI hooks). */\n assistantConfig?: string\n /**\n * The demo's workspace when none is selected. Never set signed in to a live backend: there the\n * selection is the only workspace (none while a switch is in flight), never a remembered one.\n */\n fallbackWorkspaceId?: string\n /** Authenticate. Live login when a backend is configured, otherwise the demo workspace. */\n login: (email: string, password: string) => Promise<void>\n /** One-click demo entry (no backend required). */\n enterDemo: () => void\n logout: () => void\n /**\n * Affirmatively select a workspace: opens it on the server (via the SDK),\n * updates the app-wide state, and persists the choice so it survives future\n * logins. This is the single entry point for \"the user is now in workspace X\".\n */\n setWorkspace: (id: string) => Promise<void>\n /**\n * Re-assert the selected workspace on the server session (idempotent `/open`).\n * Call before a workspace-scoped write when the session may have lost its open\n * workspace (token re-login, backend restart, session expiry) — the server\n * resolves the workspace from the session, so a dropped `/open` yields\n * \"No active workspace\" until it's re-opened.\n */\n ensureWorkspaceOpen: () => Promise<void>\n}\n\nconst ConnectionContext = createContext<ConnectionValue | null>(null)\n\n/**\n * Persist the affirmatively-selected workspace per backend AND per signed-in user, so a returning\n * user lands back in the workspace they last chose, while the next person on a shared browser\n * never starts from someone else's workspace id. Namespaced by apiUrl so distinct deployments\n * (and the demo workspace) don't clobber each other. Cleared on logout.\n */\nconst WORKSPACE_STORAGE_PREFIX = 'arbi:selectedWorkspace'\nconst normalizeUserKey = (email: string) => email.trim().toLowerCase()\n\n/** Exported for tests. */\nexport const workspaceStorageKey = (apiUrl: string, userKey: string) =>\n `${WORKSPACE_STORAGE_PREFIX}:${apiUrl || 'demo'}:${normalizeUserKey(userKey)}`\n\n/** The pre-isolation key (apiUrl only). Never read: removed so it cannot leak across users. */\nconst legacyWorkspaceStorageKey = (apiUrl: string) =>\n `${WORKSPACE_STORAGE_PREFIX}:${apiUrl || 'demo'}`\n\nfunction readPersistedWorkspace(apiUrl: string, userKey: string | null): string | null {\n if (!userKey) return null\n try {\n return window.localStorage.getItem(workspaceStorageKey(apiUrl, userKey))\n } catch {\n return null\n }\n}\n\nfunction persistWorkspace(apiUrl: string, userKey: string | null, id: string | null): void {\n if (!userKey) return\n try {\n if (id) window.localStorage.setItem(workspaceStorageKey(apiUrl, userKey), id)\n else window.localStorage.removeItem(workspaceStorageKey(apiUrl, userKey))\n window.localStorage.removeItem(legacyWorkspaceStorageKey(apiUrl))\n } catch {\n // Storage unavailable (private mode, SSR) — selection stays in-memory only.\n }\n}\n\n/** Shown on the sign-in screen after the session could not be recovered. */\nexport const SESSION_EXPIRED_MESSAGE = 'Your session expired. Sign in again.'\n\n/** The connection user for a profile: its full name, falling back to the email local part. */\nfunction userFromProfile(profile: LoginProfile, externalId?: string): ArbiUser {\n const fullName = [profile.givenName, profile.familyName]\n .map((part) => part?.trim())\n .filter(Boolean)\n .join(' ')\n return {\n name: fullName || profile.email.split('@')[0],\n email: profile.email,\n externalId,\n picture: profile.picture,\n }\n}\n\n/**\n * The sign-in layer of a blocks-only site, mounted by its host (`defaultHost`): login, demo mode\n * and the selected workspace, over the host's session state (the selected workspace lives there,\n * so every block reads one value). Its account client is the host's `account` below it.\n */\nexport function ConnectionProvider({\n config,\n children,\n}: {\n config: ArbiConnectionConfig\n children: ReactNode\n}) {\n const arbi = useArbi()\n const session = useArbiSessionStore()\n const { switchWorkspace, openSelectedWorkspace, settled } = useSwitchWorkspace()\n const isLiveConfigured = config.apiUrl.length > 0\n const demoWorkspaceId = config.demoWorkspaceId ?? 'demo-workspace'\n\n const [status, setStatus] = useState<ConnectionStatus>(\n isLiveConfigured ? 'connecting' : 'disconnected'\n )\n const [user, setUser] = useState<ArbiUser | null>(null)\n const workspaceId = useArbiSessionState((s) => s.workspaceId)\n const selectWorkspaceId = session.setWorkspaceId\n const [mode, setMode] = useState<ArbiMode>('demo')\n const [error, setError] = useState<string | null>(null)\n // Dialogs belong to the signed-in session. A first signed-out mount may carry an invitation\n // intent, so clear only after an authenticated (or demo) session actually ends. A workspace\n // switch / sign-in can pass through `connecting` without ending that session.\n const hadDialogSession = useRef(false)\n useEffect(() => {\n if (status === 'authenticated' || status === 'demo') {\n hadDialogSession.current = true\n } else if (status !== 'connecting' && hadDialogSession.current) {\n hadDialogSession.current = false\n closeAllDialogs()\n }\n }, [status])\n // Who the persisted workspace belongs to; set at sign-in, cleared at logout.\n const storageUserRef = useRef<string | null>(null)\n // Moves at each logout: a sign-in still finishing from before it does not sign back in.\n const sessionRun = useRef(0)\n\n // The SDK could not recover the session (token refused, workspace not re-openable): drop to\n // 'disconnected' with a plain message, so the host's gate sends the user to sign in instead of\n // every call failing with a raw backend error. The remembered workspace is kept for next login.\n useEffect(\n () =>\n arbi.onSessionExpired?.(() => {\n storageUserRef.current = null\n setUser(null)\n selectWorkspaceId(null)\n setStatus('disconnected')\n setError(SESSION_EXPIRED_MESSAGE)\n }),\n [arbi, selectWorkspaceId]\n )\n\n // A saved name, picture or email reaches every surface reading `useConnection().user`.\n useEffect(\n () =>\n arbi.user.onProfileChange?.((profile) =>\n setUser((current) => (current ? userFromProfile(profile, current.externalId) : current))\n ),\n [arbi]\n )\n\n const enterDemo = useCallback(() => {\n setMode('demo')\n setStatus('demo')\n setError(null)\n setUser({ name: config.demoUser.name, email: config.demoUser.email })\n selectWorkspaceId(demoWorkspaceId)\n }, [config.demoUser.name, config.demoUser.email, demoWorkspaceId, selectWorkspaceId])\n\n /**\n * The session signed in, by whatever path (`login` below, a sign-in page on the host's `Arbi`,\n * a restored session): open the user's workspace and resolve who they are.\n */\n const completeSignIn = useCallback(\n async (email: string) => {\n const run = sessionRun.current\n const signedOut = () => run !== sessionRun.current\n setMode('live')\n setStatus('connecting')\n setError(null)\n try {\n storageUserRef.current = normalizeUserKey(email)\n const workspaces = await arbi.workspaces.list()\n if (workspaces?.length) {\n // Prefer the workspace the user last affirmatively selected (persisted),\n // then the configured workspace (there may be several — e.g. a\n // marketing/KM workspace), then whichever happens to be first. Ternary\n // (not `&&`) so an empty value can't leak `\"\"` into `target`.\n const persisted = readPersistedWorkspace(config.apiUrl, storageUserRef.current)\n const preferred = persisted ?? config.workspaceId\n const target =\n (preferred ? workspaces.find((w) => w.external_id === preferred) : undefined) ??\n workspaces[0]\n selectWorkspaceId(target.external_id)\n if (!(await openSelectedWorkspace()))\n throw new Error('Could not open your workspace. Try signing in again.')\n persistWorkspace(config.apiUrl, storageUserRef.current, target.external_id)\n }\n // The profile (name + avatar) comes with the login response. A session restored without\n // a login has none, so fall back to finding ourselves in the workspace roster; the email\n // local part is only the last resort, never the answer when a profile name exists.\n let resolved: ArbiUser = { name: email.split('@')[0], email }\n const me = arbi.user.identity()\n const profile = arbi.user.profile?.()\n if (profile) {\n resolved = userFromProfile(profile, me?.externalId)\n } else {\n try {\n const members = await arbi.workspaces.listUsers()\n const self = members.find((m) => m.user.external_id === me?.externalId)?.user\n if (self) {\n const fullName = [self.given_name, self.family_name].filter(Boolean).join(' ').trim()\n resolved = {\n name: fullName || email.split('@')[0],\n email: self.email || email,\n externalId: self.external_id,\n picture: self.picture ?? null,\n }\n } else if (me?.externalId) {\n resolved.externalId = me.externalId\n }\n } catch {\n // Roster not available (e.g. no workspace) — keep the fallback identity.\n }\n }\n if (signedOut()) return\n setUser(resolved)\n setStatus('authenticated')\n } catch (e) {\n if (signedOut()) return\n // Surface the real error — no silent fallback to a fake session.\n setError(e instanceof Error ? e.message : 'Sign-in failed. Check your credentials.')\n setStatus('error')\n }\n },\n [arbi, config.workspaceId, config.apiUrl, selectWorkspaceId, openSelectedWorkspace]\n )\n\n // Every sign-in on the host's `Arbi` lands here, whichever page or kit made it.\n const signingIn = useRef<Promise<void>>(Promise.resolve())\n useEffect(\n () =>\n arbi.onSignedIn?.((login) => {\n signingIn.current = completeSignIn(\n login.profile?.email ??\n arbi.session?.getState().userEmail ??\n arbi.user.identity()?.email ??\n ''\n )\n }),\n [arbi, completeSignIn]\n )\n\n /** Authenticate: a live login when a backend is configured, otherwise the demo workspace. */\n const login = useCallback(\n async (email: string, password: string) => {\n setError(null)\n if (!isLiveConfigured) {\n enterDemo()\n return\n }\n setStatus('connecting')\n setMode('live')\n try {\n // Signed in: `completeSignIn` follows (onSignedIn); done once it is.\n await arbi.login(email, password)\n await signingIn.current\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Sign-in failed. Check your credentials.')\n setStatus('error')\n }\n },\n [arbi, enterDemo, isLiveConfigured]\n )\n\n // The session kept on this device signs in again (no password; the key stays encrypted on the\n // device). Run once even under StrictMode.\n const restoreStarted = useRef(false)\n useEffect(() => {\n if (restoreStarted.current || !isLiveConfigured) return\n restoreStarted.current = true\n arbi\n .restore()\n .catch(() => false)\n .then(async (restored) => {\n if (restored) await signingIn.current\n else setStatus('disconnected')\n })\n }, [arbi, isLiveConfigured])\n\n const logout = useCallback(() => {\n sessionRun.current++\n // The SDK stops the session's work (requests, re-logins, opens, the queries in flight) before\n // the server revokes the token.\n if (mode === 'live') {\n void arbi.logout?.()\n }\n // What was typed never outlives the session (it is sealed, but kept for no one now).\n clearSealedDrafts()\n setUser(null)\n selectWorkspaceId(null)\n persistWorkspace(config.apiUrl, storageUserRef.current, null)\n storageUserRef.current = null\n setStatus('disconnected')\n setError(null)\n }, [arbi, mode, config.apiUrl, selectWorkspaceId])\n\n // Affirmative selection: the shared workspace switch (live), then remember it so the next\n // login lands there too. This provider IS the host's navigation, so it alone (with sign-in and\n // ensureWorkspaceOpen, which re-open the host's own selection) changes the workspace; kits reach\n // another workspace with `arbi.workspaces.open`.\n const setWorkspace = useCallback(\n async (id: string) => {\n if (mode === 'live' && arbi.isLoggedIn) {\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n } else {\n selectWorkspaceId(id)\n }\n persistWorkspace(config.apiUrl, storageUserRef.current, id)\n },\n [arbi, mode, config.apiUrl, selectWorkspaceId, switchWorkspace]\n )\n\n // Re-open the selected workspace on the session if the server may have dropped it. Idempotent.\n // A switch in flight is waited out first, then only the selection as of then is opened (none:\n // nothing). Never a remembered or configured workspace: kits call this before reading, and\n // opening another workspace than the selected one would leave the server session in it.\n const ensureWorkspaceOpen = useCallback(async () => {\n if (mode !== 'live' || !arbi.isLoggedIn) return\n await settled()\n if (!session.getState().workspaceId) return\n await openSelectedWorkspace()\n }, [arbi, session, mode, settled, openSelectedWorkspace])\n\n const value = useMemo<ConnectionValue>(\n () => ({\n mode,\n status,\n user,\n workspaceId,\n apiConfigured: isLiveConfigured,\n apiUrl: config.apiUrl,\n deploymentDomain: isLiveConfigured ? arbi.getDeploymentDomain() : undefined,\n error,\n assistantConfig: config.assistantConfig,\n fallbackWorkspaceId: mode === 'live' ? undefined : config.workspaceId,\n login,\n enterDemo,\n logout,\n setWorkspace,\n ensureWorkspaceOpen,\n }),\n [\n mode,\n status,\n user,\n workspaceId,\n isLiveConfigured,\n config.apiUrl,\n arbi,\n config.assistantConfig,\n config.workspaceId,\n error,\n login,\n enterDemo,\n logout,\n setWorkspace,\n ensureWorkspaceOpen,\n ]\n )\n\n const account = useConnectionAccount(arbi, user, logout)\n const authenticated = status === 'authenticated'\n const host = useMemo(\n () => ({ account: { client: account, useEnabled: () => authenticated } }),\n [account, authenticated]\n )\n\n return (\n <ConnectionContext.Provider value={value}>\n <ArbiHost config={host}>{children}</ArbiHost>\n </ConnectionContext.Provider>\n )\n}\n\n/**\n * The account client of the settings blocks below: the SDK's, with sign-out going through this\n * connection (so its state is cleared too) and, for a session restored without a login (no SDK\n * profile), the connection user as the profile.\n */\nfunction useConnectionAccount(\n arbi: ReturnType<typeof useArbi>,\n user: ArbiUser | null,\n logout: () => void\n): AccountClient {\n const userRef = useRef(user)\n const logoutRef = useRef(logout)\n logoutRef.current = logout\n const listeners = useRef(new Set<() => void>())\n useEffect(() => {\n userRef.current = user\n listeners.current.forEach((listener) => listener())\n }, [user])\n return useMemo(() => {\n const base = arbiAccountClient(arbi)\n return {\n ...base,\n profile: (): ProfileView | null => {\n const own = base.profile()\n const fallback = userRef.current\n if (own || !fallback) return own\n return {\n ...toProfileView({\n givenName: '',\n familyName: null,\n picture: fallback.picture ?? null,\n email: fallback.email,\n isSso: false,\n }),\n fullName: fallback.name,\n }\n },\n onProfileChange: (listener) => {\n listeners.current.add(listener)\n const off = base.onProfileChange(listener)\n return () => {\n listeners.current.delete(listener)\n off()\n }\n },\n signOut: async ({ everywhere } = {}) => {\n try {\n if (everywhere) await arbi.sessions.logoutAll()\n } finally {\n logoutRef.current()\n }\n },\n }\n }, [arbi])\n}\n\n/** The sign-in layer of `defaultHost`, or null under a host that keeps its own session. */\nexport function useOptionalConnection(): ConnectionValue | null {\n return useContext(ConnectionContext)\n}\n\nexport function useConnection(): ConnectionValue {\n const ctx = useContext(ConnectionContext)\n if (!ctx) throw new Error('useConnection needs the sign-in layer of `defaultHost` above it')\n return ctx\n}\n\nexport const isAuthenticated = (s: ConnectionStatus) => s === 'demo' || s === 'authenticated'\n\n/** The open workspace as the connected kits see it, whoever hosts them. */\nexport interface ConnectedWorkspace {\n /** The selected workspace (the session state's; with a connection, else its fallback). */\n workspaceId: string | null\n /** Signed in to a live backend: workspace-scoped queries may run. */\n live: boolean\n /** The signed-in user (their name and email, e.g. to sign a document). */\n user: ArbiUser | null\n /** The signed-in user's external id. */\n userId: string | undefined\n /** Re-assert the workspace on the server session before a workspace-scoped write. */\n ensureWorkspaceOpen: () => Promise<void>\n /**\n * Go into a workspace: select it (with a connection) and show it (`BlocksEnvironment.\n * openWorkspace`, where a host without a connection also switches its session).\n */\n openWorkspace: (workspaceId: string, options?: { name?: string }) => Promise<void>\n}\n\nconst keptOpenByHost = async () => {}\n\n/** The signed-in user of a host's own session, from its login profile. */\nfunction sessionUser(arbi: ReturnType<typeof useArbi>): ArbiUser | null {\n if (!arbi.isLoggedIn) return null\n const me = arbi.user.identity()\n const profile = arbi.user.profile()\n if (!me) return null\n return profile\n ? userFromProfile(profile, me.externalId)\n : { name: (me.email ?? '').split('@')[0], email: me.email ?? '', externalId: me.externalId }\n}\n\n/**\n * The workspace for a connected kit: the sign-in layer's (`defaultHost`) when there is one, else the\n * host's own session (an app whose host config has its `arbi` and `session` and keeps its\n * workspace open itself). So a kit runs the same in Clarum and in the ARBI app.\n */\nexport function useConnectedWorkspace(): ConnectedWorkspace {\n const connection = useContext(ConnectionContext)\n const arbi = useArbi()\n const sessionWorkspaceId = useArbiSessionState((s) => s.workspaceId)\n const live = connection ? connection.status === 'authenticated' : arbi.isLoggedIn\n const user = connection ? connection.user : live ? sessionUser(arbi) : null\n const userKey = `${user?.externalId ?? ''}|${user?.name ?? ''}|${user?.email ?? ''}`\n const { openWorkspace: showWorkspace } = useBlocksEnvironment()\n return useMemo(\n () => ({\n workspaceId: connection\n ? (connection.workspaceId ?? connection.fallbackWorkspaceId ?? null)\n : sessionWorkspaceId,\n live,\n user,\n userId: user?.externalId,\n ensureWorkspaceOpen: connection?.ensureWorkspaceOpen ?? keptOpenByHost,\n openWorkspace: async (workspaceId: string, options?: { name?: string }) => {\n if (connection) await connection.setWorkspace(workspaceId)\n showWorkspace(workspaceId, options)\n },\n }),\n // `user` is rebuilt each render without a connection: its key says when it changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [connection, sessionWorkspaceId, live, userKey, showWorkspace]\n )\n}\n"]}
|
|
@@ -3,9 +3,9 @@ import { ModalBreadcrumbHeader } from './chunk-RC6VTY2H.js';
|
|
|
3
3
|
import { LabelPickerList, DEFAULT_LABEL_MULTI_SELECT_LABELS, RowNavigatorControls } from './chunk-JMQLTMJ7.js';
|
|
4
4
|
import { ShareControl } from './chunk-K4BGOPGG.js';
|
|
5
5
|
import { ToneBadge } from './chunk-5LXQPP2K.js';
|
|
6
|
-
import { ActionLink } from './chunk-73DANGPH.js';
|
|
7
6
|
import { SelectionBar, SelectionBarAction } from './chunk-NUNKSZKU.js';
|
|
8
7
|
import { FilterInput } from './chunk-YU2KUMGE.js';
|
|
8
|
+
import { ActionLink } from './chunk-NXSGOC2M.js';
|
|
9
9
|
import { GridView } from './chunk-7F5Z4K5W.js';
|
|
10
10
|
import { TONE_SURFACE } from './chunk-AUS3KBHJ.js';
|
|
11
11
|
import { formatCount } from './chunk-5VYJP6XD.js';
|
|
@@ -7883,5 +7883,5 @@ function ExplorerFileNavigator({
|
|
|
7883
7883
|
}
|
|
7884
7884
|
|
|
7885
7885
|
export { AiReviewDialogView, BulkActionsBar, BulkLabelSelectView, BulkReplaceDialog, BulkTagEditorDialog, CHROME, CheckboxCell, CitedRunNav, DEFAULT_AI_REVIEW_DIALOG_LABELS, DEFAULT_BULK_ACTIONS_LABELS, DEFAULT_BULK_REPLACE_LABELS, DEFAULT_BULK_TAG_EDITOR_LABELS, DEFAULT_DOCUMENT_COLUMNS, DEFAULT_EXPLORER_LABELS, DEFAULT_EXPORT_LABELS, DEFAULT_FIELDS_EDITOR_LABELS, DEFAULT_FILES_SEARCH_LABELS, DEFAULT_FOLDER_FILTER_LABELS, DEFAULT_FOLDER_PICKER_LABELS, DEFAULT_HTML_VIEWER_LABELS, DEFAULT_IMPORT_LABELS, DEFAULT_MOVE_TO_FOLDER_LABELS, DEFAULT_TAG_PASSAGE_PANEL_LABELS, DEFAULT_TRANSFER_LABELS, DEFAULT_UPLOAD_FOOTER_LABELS, DEFAULT_UPLOAD_PARTS_LABELS, DEFAULT_UPLOAD_SOURCES_LABELS, DEFAULT_URL_INPUT_DIALOG_LABELS, DEFAULT_VIEWER_LABELS, DEFAULT_VIEW_SELECTOR_LABELS, DOCUMENTS_ROW_HEIGHT_DEFAULT, DOCUMENTS_ROW_HEIGHT_INITIAL, DOCUMENT_TYPE_OPTIONS, DocStatusIcon, DocTagBar, DocumentGrid, DocumentLabelBar, DocumentNameCellFrame, DocumentRowMenu, DocumentSearchList, DocumentsFolderButton, EMAIL_VIEW_COLUMNS, ExplorerDragPreview, ExplorerDropOverlay, ExplorerEmpty, ExplorerFileNavigator, ExplorerFileTile, ExplorerFileTooltip, ExplorerFolderTile, ExplorerFrame, ExplorerLoadingTiles, ExplorerMarquee, ExplorerScroller, ExplorerStage, ExportFooter, ExportMethodChooser, ExportModalTitle, ExportResultsReport, ExportWorkspacePicker, FailedStageIcon, FieldAttribution, FieldFolderSelect, FieldFolderValue, FieldLabelsSelect, FieldNativeSelect, FieldRow, FieldValue, FieldWithAttribution, FieldsApplyBar, FieldsEditorList, FieldsEditorRoot, FieldsEditorToolbar, FieldsEmptyState, FieldsManagerBody, FieldsManagerDefinition, FieldsManagerTitle, FilesAddMenu, FilesFilterBar, FilesModalFooter, FilesPage, FilesPageHeader, FilesPageMain, FilesPageTitle, FilesSearchInput, FilesTagsButton, FilesToolbar, FilesViewCenter, FilterButton, FolderBreadcrumb2 as FolderBreadcrumb, FolderCell, FolderCommandList, FolderFilterButton, FolderPickerRow, FolderProviderIcon, FolderSummary, FolderTree, FolderTreePicker, HtmlPage, HtmlPassage, HtmlViewerEmpty, HtmlViewerRoot, HtmlViewerSurface, ImportActionButton, ImportAside, ImportFamilySection, ImportHint, ImportList, ImportPanel, ImportProgress, ImportRow, ImportRunActions, ImportSummary, LINE_PX, MAX_LINES, MIN_LINES, MediaPreviewView, MoveToFolderDialog, MultiSelectCellEditor, NavDocumentPicker, NavigatorPickerBar, PassageStepper, PdfPageNav, PrivacyExplainerModal, RECENTLY_DELETED_HINT, RECENTLY_DELETED_HINT_PLURAL, ROW_MIN, RejectedFilesList, RelatedDocsCell, RowDensityControl, SELECTION_COL_ID, SelectedFilesList, ShareToggle, StatusPill, TagColumnHeader, TagFormField, TagFormFooter, TagFormInstructionField, TagFormMeta, TagFormNameField, TagFormNote, TagFormOptionsEditor, TagFormRoot, TagFormSelectField, TagFormSharedToggle, TagPassagePanel, TaskSection, TransferConflictChooser, TransferKindsPicker, TransferPlanSummary, TransferProgressView, TransferReferencesChooser, TransferResumeBanner, TransferScopeChooser, UploadBrowseButtons, UploadContainer, UploadDropArea, UploadErrorMessage, UploadFooterBar, UploadFrame, UploadProgress, UploadShareNote, UploadSourcePicker, UploadSourceSection, UploadUrlButton, UrlDialogTitle, UrlInputDialog, UrlInputDialogView, VendorLogo, ViewSelectorMenu, ViewerControlBar, ViewerFrame, ViewerImageActions, ViewerLoadError, ViewerMessage, ViewerPageCounter, ViewerPreviewUnavailable, ViewerTabBar, ViewerTitle, ViewerZoomControl, applyColumnLayout, applyViewColumns, buildExplorerEntries, canChangeVisibility, canDeleteDocument, canEditDocumentFields, captureColumnWidths, collectFolderDocs, columnItems, columnsMatch, confirmHideFromMembers, documentGridLayoutProps, fieldsApplyBarCopy, fieldsEmptyText, filterFieldsByName, formatFolderSegment, getExplorerDisplayName, getMediaPreview, hasFolderProviderIcon, isDocumentLabel, isExplorerDocument, isMediaUrl, joinFolderPath, linesForRowHeight, parseFolderSegments, pinnedLeftColumns, resolveDocumentGridLayout, rowHeightForLines, searchExplorerDocuments, shareStateOf, shareTooltipFor, sortExplorerFiles, sortFields, summariseDocTags, toggleColumn, upsertView, useGridViews, visibilityAudience, visibilityToggleTooltip, visibleColumns, widthsMatch };
|
|
7886
|
-
//# sourceMappingURL=chunk-
|
|
7887
|
-
//# sourceMappingURL=chunk-
|
|
7886
|
+
//# sourceMappingURL=chunk-E6EYRQC2.js.map
|
|
7887
|
+
//# sourceMappingURL=chunk-E6EYRQC2.js.map
|