@arbidocs/blocks 0.5.106 → 0.5.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -6
- package/dist/{ConnectedCallDock-P7LK2HYF.cjs → ConnectedCallDock-H3WWFGXF.cjs} +8 -8
- package/dist/{ConnectedCallDock-P7LK2HYF.cjs.map → ConnectedCallDock-H3WWFGXF.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-NEZJNTKH.js → ConnectedCallDock-TDYRHPAK.js} +6 -6
- package/dist/{ConnectedCallDock-NEZJNTKH.js.map → ConnectedCallDock-TDYRHPAK.js.map} +1 -1
- package/dist/{ConnectedCallRoom-FXTR4YFI.cjs → ConnectedCallRoom-55O5OUN7.cjs} +7 -7
- package/dist/{ConnectedCallRoom-FXTR4YFI.cjs.map → ConnectedCallRoom-55O5OUN7.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-K3X6ICCG.js → ConnectedCallRoom-Z6F6WCLH.js} +6 -6
- package/dist/{ConnectedCallRoom-K3X6ICCG.js.map → ConnectedCallRoom-Z6F6WCLH.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs → ConnectedNativeDocxComparison-DGBZJ4XA.cjs} +10 -10
- package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs.map → ConnectedNativeDocxComparison-DGBZJ4XA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js → ConnectedNativeDocxComparison-NVZRVNOS.js} +9 -9
- package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js.map → ConnectedNativeDocxComparison-NVZRVNOS.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs → ConnectedNativeDocxEditor-R4WINUUB.cjs} +10 -10
- package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs.map → ConnectedNativeDocxEditor-R4WINUUB.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js → ConnectedNativeDocxEditor-RSVBN7DY.js} +8 -8
- package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js.map → ConnectedNativeDocxEditor-RSVBN7DY.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js → ConnectedProductionSetDialog-2DFBXE2X.js} +5 -5
- package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js.map → ConnectedProductionSetDialog-2DFBXE2X.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs → ConnectedProductionSetDialog-KYDPQ7SG.cjs} +6 -6
- package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs.map → ConnectedProductionSetDialog-KYDPQ7SG.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-ILMKFCDC.js → ConnectedStreamedWordArtifact-HLJ5IIOU.js} +9 -9
- package/dist/ConnectedStreamedWordArtifact-HLJ5IIOU.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-BF6JET2D.cjs → ConnectedStreamedWordArtifact-JQ34AOUU.cjs} +10 -10
- package/dist/ConnectedStreamedWordArtifact-JQ34AOUU.cjs.map +1 -0
- package/dist/{DocumentReviewCard-UOLXZKZE.js → DocumentReviewCard-7JSXRJZ2.js} +6 -6
- package/dist/{DocumentReviewCard-UOLXZKZE.js.map → DocumentReviewCard-7JSXRJZ2.js.map} +1 -1
- package/dist/{DocumentReviewCard-QVQ2LGFH.cjs → DocumentReviewCard-C4HVT3WM.cjs} +8 -8
- package/dist/{DocumentReviewCard-QVQ2LGFH.cjs.map → DocumentReviewCard-C4HVT3WM.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-5ELQYWAZ.js → FilesViewerDialog-IMQTZWKD.js} +16 -16
- package/dist/{FilesViewerDialog-5ELQYWAZ.js.map → FilesViewerDialog-IMQTZWKD.js.map} +1 -1
- package/dist/{FilesViewerDialog-XNGHHWYS.cjs → FilesViewerDialog-UP7GFHYN.cjs} +23 -23
- package/dist/{FilesViewerDialog-XNGHHWYS.cjs.map → FilesViewerDialog-UP7GFHYN.cjs.map} +1 -1
- package/dist/{RechartsRenderer-EJRIFAAP.js → RechartsRenderer-23OF4H6X.js} +3 -3
- package/dist/{RechartsRenderer-EJRIFAAP.js.map → RechartsRenderer-23OF4H6X.js.map} +1 -1
- package/dist/{RechartsRenderer-CNFQ5EHF.cjs → RechartsRenderer-GIRCW7DB.cjs} +4 -4
- package/dist/{RechartsRenderer-CNFQ5EHF.cjs.map → RechartsRenderer-GIRCW7DB.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-HRCV6WR7.cjs → WorkspaceTableView-PJM47B5F.cjs} +8 -8
- package/dist/{WorkspaceTableView-HRCV6WR7.cjs.map → WorkspaceTableView-PJM47B5F.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-DIMTW5P5.js → WorkspaceTableView-YDA7A4UJ.js} +6 -6
- package/dist/{WorkspaceTableView-DIMTW5P5.js.map → WorkspaceTableView-YDA7A4UJ.js.map} +1 -1
- package/dist/{ai-E6FA4Y4J.cjs → ai-ADS6YSS2.cjs} +17 -17
- package/dist/ai-ADS6YSS2.cjs.map +1 -0
- package/dist/{ai-WASSGEMI.js → ai-KHWTGBT5.js} +9 -9
- package/dist/ai-KHWTGBT5.js.map +1 -0
- package/dist/auth/index.cjs +32 -32
- package/dist/auth/index.js +1 -1
- package/dist/calls/index.cjs +49 -49
- package/dist/calls/index.js +10 -10
- package/dist/{chunk-VJAMDAR6.cjs → chunk-22KAKJ3W.cjs} +4 -4
- package/dist/{chunk-VJAMDAR6.cjs.map → chunk-22KAKJ3W.cjs.map} +1 -1
- package/dist/{chunk-DEIF2VAA.js → chunk-3GFQNJYE.js} +3 -3
- package/dist/{chunk-DEIF2VAA.js.map → chunk-3GFQNJYE.js.map} +1 -1
- package/dist/{chunk-LUO46ELJ.cjs → chunk-3YZKDCWY.cjs} +2 -2
- package/dist/chunk-3YZKDCWY.cjs.map +1 -0
- package/dist/{chunk-5OUOPKGE.cjs → chunk-45OU2UAA.cjs} +18 -18
- package/dist/{chunk-5OUOPKGE.cjs.map → chunk-45OU2UAA.cjs.map} +1 -1
- package/dist/{chunk-JXKNPKU6.cjs → chunk-4CIVQWAX.cjs} +4 -4
- package/dist/{chunk-JXKNPKU6.cjs.map → chunk-4CIVQWAX.cjs.map} +1 -1
- package/dist/{chunk-VOI26MXJ.cjs → chunk-5AC52BHL.cjs} +16 -16
- package/dist/{chunk-VOI26MXJ.cjs.map → chunk-5AC52BHL.cjs.map} +1 -1
- package/dist/{chunk-OG3TI5GX.js → chunk-6M5NAAWX.js} +47 -5
- package/dist/chunk-6M5NAAWX.js.map +1 -0
- package/dist/{chunk-IIUEDF3F.js → chunk-6ZYOUT73.js} +7 -7
- package/dist/{chunk-IIUEDF3F.js.map → chunk-6ZYOUT73.js.map} +1 -1
- package/dist/{chunk-TRI3LQVR.js → chunk-7S7YVBFK.js} +5 -5
- package/dist/{chunk-TRI3LQVR.js.map → chunk-7S7YVBFK.js.map} +1 -1
- package/dist/{chunk-QN5GTCPB.cjs → chunk-7V4OCZS6.cjs} +8 -8
- package/dist/{chunk-QN5GTCPB.cjs.map → chunk-7V4OCZS6.cjs.map} +1 -1
- package/dist/{chunk-S7NJVJJX.cjs → chunk-AHMRYY7J.cjs} +25 -25
- package/dist/{chunk-S7NJVJJX.cjs.map → chunk-AHMRYY7J.cjs.map} +1 -1
- package/dist/{chunk-GK5BMDS6.js → chunk-AVGHTUPE.js} +4 -4
- package/dist/{chunk-GK5BMDS6.js.map → chunk-AVGHTUPE.js.map} +1 -1
- package/dist/{chunk-RAYNCZ7O.js → chunk-AZCMKGDG.js} +3 -3
- package/dist/{chunk-RAYNCZ7O.js.map → chunk-AZCMKGDG.js.map} +1 -1
- package/dist/{chunk-IJVU5MZA.js → chunk-BAUZUIHB.js} +5 -5
- package/dist/{chunk-IJVU5MZA.js.map → chunk-BAUZUIHB.js.map} +1 -1
- package/dist/{chunk-2VHZUSFW.js → chunk-BBWLFK3C.js} +3 -3
- package/dist/{chunk-2VHZUSFW.js.map → chunk-BBWLFK3C.js.map} +1 -1
- package/dist/{chunk-MW7FGIF4.cjs → chunk-BFVCYBND.cjs} +9 -9
- package/dist/{chunk-MW7FGIF4.cjs.map → chunk-BFVCYBND.cjs.map} +1 -1
- package/dist/{chunk-7ONU7EWY.js → chunk-BH6IKGZ3.js} +5 -5
- package/dist/{chunk-7ONU7EWY.js.map → chunk-BH6IKGZ3.js.map} +1 -1
- package/dist/{chunk-RNX5LAQK.cjs → chunk-C42WBPH4.cjs} +7 -7
- package/dist/{chunk-RNX5LAQK.cjs.map → chunk-C42WBPH4.cjs.map} +1 -1
- package/dist/{chunk-LM5CPXJO.cjs → chunk-CRLFLMTK.cjs} +19 -13
- package/dist/chunk-CRLFLMTK.cjs.map +1 -0
- package/dist/{chunk-CWC6W2NE.cjs → chunk-D35EHOK5.cjs} +11 -11
- package/dist/{chunk-CWC6W2NE.cjs.map → chunk-D35EHOK5.cjs.map} +1 -1
- package/dist/{chunk-BMHW7WTF.js → chunk-DBKZANTC.js} +4 -4
- package/dist/{chunk-BMHW7WTF.js.map → chunk-DBKZANTC.js.map} +1 -1
- package/dist/{chunk-Q5U6Y2NO.js → chunk-E2P4JJLJ.js} +4 -45
- package/dist/chunk-E2P4JJLJ.js.map +1 -0
- package/dist/{chunk-D3GZWKHW.cjs → chunk-EKSHUNJI.cjs} +9 -9
- package/dist/{chunk-D3GZWKHW.cjs.map → chunk-EKSHUNJI.cjs.map} +1 -1
- package/dist/{chunk-5XQNXDST.js → chunk-FPOKWML2.js} +18 -5
- package/dist/chunk-FPOKWML2.js.map +1 -0
- package/dist/{chunk-M4TM3K52.cjs → chunk-FSXQHEFQ.cjs} +16 -16
- package/dist/{chunk-M4TM3K52.cjs.map → chunk-FSXQHEFQ.cjs.map} +1 -1
- package/dist/{chunk-35BADIIF.cjs → chunk-GX75YCWJ.cjs} +23 -23
- package/dist/{chunk-35BADIIF.cjs.map → chunk-GX75YCWJ.cjs.map} +1 -1
- package/dist/{chunk-7IF3E3I2.cjs → chunk-I7CJDF3V.cjs} +4 -4
- package/dist/{chunk-7IF3E3I2.cjs.map → chunk-I7CJDF3V.cjs.map} +1 -1
- package/dist/{chunk-KYLQRS3O.js → chunk-IHOV6OTA.js} +4 -4
- package/dist/{chunk-KYLQRS3O.js.map → chunk-IHOV6OTA.js.map} +1 -1
- package/dist/{chunk-OXHAZN43.cjs → chunk-IXL2KJOZ.cjs} +26 -26
- package/dist/{chunk-OXHAZN43.cjs.map → chunk-IXL2KJOZ.cjs.map} +1 -1
- package/dist/{chunk-632JXVXY.js → chunk-KIXFXCHL.js} +15 -9
- package/dist/chunk-KIXFXCHL.js.map +1 -0
- package/dist/{chunk-PIWT2GCY.cjs → chunk-LFYKB7KF.cjs} +15 -15
- package/dist/{chunk-PIWT2GCY.cjs.map → chunk-LFYKB7KF.cjs.map} +1 -1
- package/dist/{chunk-7Q6EVFMT.js → chunk-LYW5A35J.js} +9 -9
- package/dist/{chunk-7Q6EVFMT.js.map → chunk-LYW5A35J.js.map} +1 -1
- package/dist/chunk-NFK2SEUD.js +577 -0
- package/dist/chunk-NFK2SEUD.js.map +1 -0
- package/dist/{chunk-TJQMC7GJ.cjs → chunk-NNBL3HPG.cjs} +4 -4
- package/dist/{chunk-TJQMC7GJ.cjs.map → chunk-NNBL3HPG.cjs.map} +1 -1
- package/dist/{chunk-Y5P5ZMHQ.js → chunk-NWBCZ4PA.js} +4 -4
- package/dist/{chunk-Y5P5ZMHQ.js.map → chunk-NWBCZ4PA.js.map} +1 -1
- package/dist/{chunk-5UMZXDGL.cjs → chunk-O27K7KTZ.cjs} +161 -7
- package/dist/chunk-O27K7KTZ.cjs.map +1 -0
- package/dist/{chunk-GARDQALH.js → chunk-OLAYDOPC.js} +5 -5
- package/dist/{chunk-GARDQALH.js.map → chunk-OLAYDOPC.js.map} +1 -1
- package/dist/chunk-ORELHENJ.cjs +594 -0
- package/dist/chunk-ORELHENJ.cjs.map +1 -0
- package/dist/{chunk-NUOMPVKQ.js → chunk-OWHO2TO3.js} +3 -3
- package/dist/{chunk-NUOMPVKQ.js.map → chunk-OWHO2TO3.js.map} +1 -1
- package/dist/{chunk-6XNWGOS3.cjs → chunk-PHDUN4SG.cjs} +187 -80
- package/dist/chunk-PHDUN4SG.cjs.map +1 -0
- package/dist/{chunk-KGUBKE3V.cjs → chunk-PL7O3RJJ.cjs} +48 -4
- package/dist/chunk-PL7O3RJJ.cjs.map +1 -0
- package/dist/{chunk-BH4MK2J5.js → chunk-QG6MRLZG.js} +2 -2
- package/dist/chunk-QG6MRLZG.js.map +1 -0
- package/dist/{chunk-YPTZNQPJ.cjs → chunk-RCZRI72J.cjs} +4 -4
- package/dist/{chunk-YPTZNQPJ.cjs.map → chunk-RCZRI72J.cjs.map} +1 -1
- package/dist/{chunk-E7STRFBT.cjs → chunk-SCLGUHLU.cjs} +4 -4
- package/dist/{chunk-E7STRFBT.cjs.map → chunk-SCLGUHLU.cjs.map} +1 -1
- package/dist/{chunk-EOTJX536.js → chunk-T5ZMG6MC.js} +3 -3
- package/dist/{chunk-EOTJX536.js.map → chunk-T5ZMG6MC.js.map} +1 -1
- package/dist/{chunk-LWEX3AOZ.js → chunk-TG4IICWO.js} +4 -4
- package/dist/{chunk-LWEX3AOZ.js.map → chunk-TG4IICWO.js.map} +1 -1
- package/dist/{chunk-ET3W24JV.js → chunk-TNKPQ3EF.js} +9 -9
- package/dist/{chunk-ET3W24JV.js.map → chunk-TNKPQ3EF.js.map} +1 -1
- package/dist/{chunk-QFKL4HV2.js → chunk-U5F5P4YU.js} +118 -15
- package/dist/chunk-U5F5P4YU.js.map +1 -0
- package/dist/{chunk-N52PBUAP.cjs → chunk-U6LQ6Z3P.cjs} +10 -10
- package/dist/{chunk-N52PBUAP.cjs.map → chunk-U6LQ6Z3P.cjs.map} +1 -1
- package/dist/{chunk-JNVJQCGF.cjs → chunk-UCA4JLLJ.cjs} +4 -4
- package/dist/{chunk-JNVJQCGF.cjs.map → chunk-UCA4JLLJ.cjs.map} +1 -1
- package/dist/{chunk-3RUQHIDC.js → chunk-UQ2OBHMV.js} +7 -7
- package/dist/{chunk-3RUQHIDC.js.map → chunk-UQ2OBHMV.js.map} +1 -1
- package/dist/{chunk-VYJF4ZQY.cjs → chunk-V6C2MBFY.cjs} +3 -2
- package/dist/chunk-V6C2MBFY.cjs.map +1 -0
- package/dist/{chunk-O4X7HXLF.cjs → chunk-VCEX7COE.cjs} +2 -45
- package/dist/chunk-VCEX7COE.cjs.map +1 -0
- package/dist/{chunk-QTSNHGSI.js → chunk-WFM6E7DD.js} +3 -3
- package/dist/{chunk-QTSNHGSI.js.map → chunk-WFM6E7DD.js.map} +1 -1
- package/dist/{chunk-SY2WD6VA.cjs → chunk-WI3BVKEC.cjs} +5 -5
- package/dist/{chunk-SY2WD6VA.cjs.map → chunk-WI3BVKEC.cjs.map} +1 -1
- package/dist/{chunk-LWCLAAEX.js → chunk-WJHRWXWJ.js} +3 -3
- package/dist/{chunk-LWCLAAEX.js.map → chunk-WJHRWXWJ.js.map} +1 -1
- package/dist/{chunk-FVZ2CN4A.js → chunk-WQH2WWZE.js} +3 -2
- package/dist/chunk-WQH2WWZE.js.map +1 -0
- package/dist/{chunk-V2CKYM4B.cjs → chunk-XHN5KOI2.cjs} +9 -9
- package/dist/{chunk-V2CKYM4B.cjs.map → chunk-XHN5KOI2.cjs.map} +1 -1
- package/dist/{chunk-DBHBJIF4.js → chunk-YJWAGXYM.js} +3 -3
- package/dist/{chunk-DBHBJIF4.js.map → chunk-YJWAGXYM.js.map} +1 -1
- package/dist/{chunk-KUI2IC7W.js → chunk-YLKHTBYA.js} +3 -3
- package/dist/{chunk-KUI2IC7W.js.map → chunk-YLKHTBYA.js.map} +1 -1
- package/dist/{chunk-73FJ6L6I.cjs → chunk-ZMVF7EYJ.cjs} +18 -5
- package/dist/chunk-ZMVF7EYJ.cjs.map +1 -0
- package/dist/{chunk-CEVVGJQX.js → chunk-ZNY5W3VX.js} +162 -9
- package/dist/chunk-ZNY5W3VX.js.map +1 -0
- package/dist/connect/docx.cjs +13 -13
- package/dist/connect/docx.js +9 -9
- package/dist/connect/index.cjs +1100 -884
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -0
- package/dist/connect/index.js +475 -274
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +12 -12
- package/dist/connect/viewer.js +10 -10
- package/dist/connection/account-cluster/ConnectedAccountCluster.d.ts +1 -1
- package/dist/connection/dashboards/ConnectedDashboardsPage.d.ts +13 -2
- package/dist/connection/dashboards/index.d.ts +1 -1
- package/dist/connection/dashboards/templates.d.ts +14 -3
- package/dist/connection/remote-control/ConnectedRemoteControlConsent.d.ts +17 -0
- package/dist/connection/remote-control/ConnectedRemoteControlIndicator.d.ts +8 -0
- package/dist/connection/remote-control/ConnectedRemoteControlSwitch.d.ts +1 -0
- package/dist/connection/remote-control/index.d.ts +4 -0
- package/dist/connection/remote-control/remoteControl.d.ts +40 -0
- package/dist/connection/routes/useDeepLinkSync.d.ts +4 -1
- package/dist/connection/runtime/ConnectedAppRuntime.d.ts +1 -1
- package/dist/connection/settings-page/settingsSections.d.ts +1 -1
- package/dist/connection/tags/ConnectedTagTable.d.ts +1 -1
- package/dist/dashboards/index.cjs +327 -116
- package/dist/dashboards/index.cjs.map +1 -1
- package/dist/dashboards/index.js +311 -101
- package/dist/dashboards/index.js.map +1 -1
- package/dist/embed/index.cjs +21 -21
- package/dist/embed/index.js +14 -14
- package/dist/guided/GuidedCursor.d.ts +21 -0
- package/dist/guided/cursor.d.ts +56 -0
- package/dist/guided/index.d.ts +5 -0
- package/dist/guided/runner.d.ts +30 -0
- package/dist/guided/sequences.d.ts +80 -0
- package/dist/guided/surfaces.d.ts +13 -0
- package/dist/guided/useGuidedRuns.d.ts +3 -0
- package/dist/index.cjs +171 -135
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -7
- package/dist/provider/host.d.ts +6 -0
- package/dist/settings/PlanBadge.d.ts +1 -1
- package/dist/settings/TipsEditor.d.ts +6 -3
- package/dist/settings/index.cjs +152 -151
- package/dist/settings/index.js +3 -2
- package/dist/shell/index.cjs +46 -46
- package/dist/shell/index.js +3 -3
- package/dist/studio/index.cjs +15 -15
- package/dist/studio/index.js +9 -9
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +25 -25
- package/dist/workflow-canvas/index.js +13 -13
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-BF6JET2D.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-ILMKFCDC.js.map +0 -1
- package/dist/ai-E6FA4Y4J.cjs.map +0 -1
- package/dist/ai-WASSGEMI.js.map +0 -1
- package/dist/chunk-5UMZXDGL.cjs.map +0 -1
- package/dist/chunk-5XQNXDST.js.map +0 -1
- package/dist/chunk-632JXVXY.js.map +0 -1
- package/dist/chunk-6XNWGOS3.cjs.map +0 -1
- package/dist/chunk-73FJ6L6I.cjs.map +0 -1
- package/dist/chunk-BH4MK2J5.js.map +0 -1
- package/dist/chunk-C4TGESIB.cjs +0 -260
- package/dist/chunk-C4TGESIB.cjs.map +0 -1
- package/dist/chunk-CEVVGJQX.js.map +0 -1
- package/dist/chunk-FVZ2CN4A.js.map +0 -1
- package/dist/chunk-KGUBKE3V.cjs.map +0 -1
- package/dist/chunk-LM5CPXJO.cjs.map +0 -1
- package/dist/chunk-LUO46ELJ.cjs.map +0 -1
- package/dist/chunk-MHFWGIF4.js +0 -254
- package/dist/chunk-MHFWGIF4.js.map +0 -1
- package/dist/chunk-O4X7HXLF.cjs.map +0 -1
- package/dist/chunk-OG3TI5GX.js.map +0 -1
- package/dist/chunk-Q5U6Y2NO.js.map +0 -1
- package/dist/chunk-QFKL4HV2.js.map +0 -1
- package/dist/chunk-VYJF4ZQY.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/connection/dashboards/templates.ts","../../src/connection/dashboards/ConnectedDashboardsPage.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The starting point a new dashboard is offered by default: one panel of each kind over the\n * built-in sources. A site passes its own (`ConnectedDashboardsPage templates`), in its words.\n */\nimport type { DashboardSpec, PanelSpec } from '@arbidocs/react'\n\n/** A fresh panel id. */\nexport function newPanelId(): string {\n return `pnl-${Math.random().toString(36).slice(2, 10)}`\n}\n\n/** A new panel: a bar chart of the documents by type, ready to be changed. */\nexport function newPanel(): PanelSpec {\n return {\n id: newPanelId(),\n title: 'New panel',\n source: { id: 'documents' },\n chart: { type: 'bar', x: 'type' },\n width: 6,\n }\n}\n\nexport const OVERVIEW_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Overview',\n description: 'Documents, threads, projects and AI usage at a glance.',\n panels: [\n {\n id: 'documents',\n title: 'Documents',\n source: { id: 'documents' },\n chart: { type: 'metric' },\n width: 3,\n },\n {\n id: 'threads',\n title: 'Threads',\n source: { id: 'conversations' },\n chart: { type: 'metric' },\n width: 3,\n },\n {\n id: 'projects',\n title: 'Projects',\n source: { id: 'projects' },\n chart: { type: 'metric' },\n width: 3,\n },\n {\n id: 'ai-usage',\n title: 'AI usage this period',\n source: { id: 'usage' },\n chart: { type: 'metric', aggregate: 'sum', y: 'spend' },\n width: 3,\n },\n {\n id: 'threads-over-time',\n title: 'Threads started',\n source: { id: 'conversations' },\n chart: { type: 'line', x: 'created', bucket: 'month' },\n width: 6,\n },\n {\n id: 'usage-by-model',\n title: 'AI usage by model',\n source: { id: 'usage' },\n chart: {\n type: 'bar',\n x: 'day',\n bucket: 'day',\n series: 'model',\n y: 'spend',\n aggregate: 'sum',\n stacked: true,\n },\n width: 6,\n },\n {\n id: 'documents-by-type',\n title: 'Documents by type',\n source: { id: 'documents' },\n chart: { type: 'bar', x: 'type', limit: 8 },\n width: 6,\n },\n {\n id: 'projects-by-stage',\n title: 'Projects by stage',\n source: { id: 'projects' },\n chart: { type: 'donut', x: 'stage' },\n width: 6,\n },\n {\n id: 'due',\n title: 'Due dates',\n source: { id: 'conversations' },\n chart: {\n type: 'table',\n columns: ['title', 'due', 'status', 'owner'],\n filters: [{ field: 'due', op: 'not_empty' }],\n orderBy: { field: 'due' },\n },\n width: 12,\n },\n ],\n}\n","/**\n * `ConnectedDashboardsPage`: the saved dashboards, one open to read, and an editor to build them.\n * The list, a dashboard's grid of `DashboardPanel`s, and its edit mode (panels added and changed with\n * `PanelEditor`, moved, removed, then saved) are one kit. Dashboards are kept by the host's store\n * (`useDashboardStore`: by default a database of the open workspace).\n *\n * Generic: the page's words come in through `labels`, and a site's own starting points (its\n * vocabulary, its fields) through `templates`.\n */\nimport { useEffect, useMemo, useState } from 'react'\nimport { ArrowDown, ArrowLeft, ArrowUp, LayoutDashboard, Pencil, Plus, Trash2 } from 'lucide-react'\nimport {\n useDashboardStore,\n useDeleteDashboard,\n useSaveDashboard,\n useSavedDashboards,\n type DashboardSpec,\n type PanelSpec,\n type SavedDashboard,\n} from '@arbidocs/react'\nimport {\n Button,\n Card,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Label,\n} from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PageHeader } from '../../components/PageHeader'\nimport { DashboardCell, DashboardGrid } from '../../dashboards/DashboardGrid'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { DashboardPanel, type DashboardPanelLabels } from './DashboardPanel'\nimport { PanelEditor, type PanelEditorLabels } from './PanelEditor'\nimport { newPanel, OVERVIEW_DASHBOARD } from './templates'\n\nexport interface DashboardsPageLabels {\n title: string\n description: string\n newDashboard: string\n blank: string\n untitled: string\n empty: string\n emptyDescription: string\n loadError: string\n panels: (count: number) => string\n back: string\n edit: string\n delete: string\n confirmDelete: (title: string) => string\n save: string\n saving: string\n cancel: string\n dashboardTitle: string\n dashboardDescription: string\n addPanel: string\n editPanel: string\n editPanelDescription: string\n panelDone: string\n moveUp: string\n moveDown: string\n removePanel: string\n noPanels: string\n saved: string\n saveFailed: string\n}\n\nexport const DEFAULT_DASHBOARDS_PAGE_LABELS: DashboardsPageLabels = {\n title: 'Dashboards',\n description: 'Charts and figures from your documents, threads, projects, AI usage and databases.',\n newDashboard: 'New dashboard',\n blank: 'Blank dashboard',\n untitled: 'Untitled dashboard',\n empty: 'No dashboards yet',\n emptyDescription: 'Start from a template or a blank page, then add charts, figures and tables.',\n loadError: 'The dashboards could not be loaded.',\n panels: (count) => `${count} ${count === 1 ? 'panel' : 'panels'}`,\n back: 'All dashboards',\n edit: 'Edit',\n delete: 'Delete',\n confirmDelete: (title) => `Delete the dashboard “${title}”? Its panels go with it.`,\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n dashboardTitle: 'Name',\n dashboardDescription: 'Description',\n addPanel: 'Add a panel',\n editPanel: 'Panel',\n editPanelDescription: 'Choose the data, how to show it, and what to measure.',\n panelDone: 'Done',\n moveUp: 'Move up',\n moveDown: 'Move down',\n removePanel: 'Remove the panel',\n noPanels: 'No panels yet. Add one to start.',\n saved: 'Dashboard saved',\n saveFailed: 'The dashboard could not be saved',\n}\n\nexport interface ConnectedDashboardsPageProps {\n /** Starting points for a new dashboard. Default: an overview of the built-in sources. */\n templates?: readonly DashboardSpec[]\n /** The open dashboard (controlled, for a route): `null` is the list. */\n dashboardId?: string | null\n onDashboardChange?: (id: string | null) => void\n labels?: Partial<DashboardsPageLabels>\n panelLabels?: Partial<DashboardPanelLabels>\n editorLabels?: Partial<PanelEditorLabels>\n testId?: string\n}\n\n/** What is being edited: a saved dashboard (`id`) or a new one. */\ninterface Draft {\n id?: string\n spec: DashboardSpec\n}\n\nfunction PanelsGrid({\n spec,\n panelLabels,\n editing,\n testId,\n}: {\n spec: DashboardSpec\n panelLabels?: Partial<DashboardPanelLabels>\n editing?: {\n l: DashboardsPageLabels\n onEdit: (index: number) => void\n onMove: (index: number, by: -1 | 1) => void\n onRemove: (index: number) => void\n }\n testId?: string\n}) {\n return (\n <DashboardGrid testId={testId && `${testId}-grid`}>\n {spec.panels.map((panel, i) => (\n <DashboardCell key={panel.id} width={panel.width}>\n <DashboardPanel\n panel={panel}\n labels={panelLabels}\n testId={testId && `${testId}-panel-${panel.id}`}\n actions={\n editing && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.editPanel}\n onClick={() => editing.onEdit(i)}\n >\n <Pencil className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveUp}\n disabled={i === 0}\n onClick={() => editing.onMove(i, -1)}\n >\n <ArrowUp className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveDown}\n disabled={i === spec.panels.length - 1}\n onClick={() => editing.onMove(i, 1)}\n >\n <ArrowDown className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.removePanel}\n onClick={() => editing.onRemove(i)}\n >\n <Trash2 className=\"size-3.5\" />\n </Button>\n </>\n )\n }\n />\n </DashboardCell>\n ))}\n </DashboardGrid>\n )\n}\n\nfunction NewDashboardButton({\n templates,\n l,\n onCreate,\n testId,\n}: {\n templates: readonly DashboardSpec[]\n l: DashboardsPageLabels\n onCreate: (spec: DashboardSpec) => void\n testId?: string\n}) {\n const blank: DashboardSpec = { version: 1, title: l.untitled, panels: [] }\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid={testId && `${testId}-new`}>\n <Plus className=\"size-4\" /> {l.newDashboard}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={() => onCreate(blank)}>{l.blank}</DropdownMenuItem>\n {templates.map((t, i) => (\n <DropdownMenuItem\n key={`${t.title}-${i}`}\n onSelect={() => onCreate(t)}\n data-testid={testId && `${testId}-template-${i}`}\n >\n {t.title}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport function ConnectedDashboardsPage({\n templates = [OVERVIEW_DASHBOARD],\n dashboardId,\n onDashboardChange,\n labels,\n panelLabels,\n editorLabels,\n testId = 'dashboards',\n}: ConnectedDashboardsPageProps) {\n const l = { ...DEFAULT_DASHBOARDS_PAGE_LABELS, ...labels }\n const { confirm, notify } = useBlocksEnvironment()\n const store = useDashboardStore()\n const saved = useSavedDashboards(store)\n const save = useSaveDashboard(store)\n const remove = useDeleteDashboard(store)\n\n const [ownOpenId, setOwnOpenId] = useState<string | null>(null)\n const openId = dashboardId === undefined ? ownOpenId : dashboardId\n const setOpenId = (id: string | null) => {\n setOwnOpenId(id)\n onDashboardChange?.(id)\n }\n const [draft, setDraft] = useState<Draft | null>(null)\n const [editingPanel, setEditingPanel] = useState<{ index: number; panel: PanelSpec } | null>(null)\n\n const open = useMemo(() => saved.data?.find((d) => d.id === openId), [saved.data, openId])\n // A dashboard deleted elsewhere (or a stale link): back to the list.\n useEffect(() => {\n if (openId && saved.data && !open && !draft) setOwnOpenId(null)\n }, [openId, saved.data, open, draft])\n\n const startEditing = (d: SavedDashboard | Draft) => setDraft({ id: d.id, spec: d.spec })\n const createFrom = (spec: DashboardSpec) =>\n setDraft({ spec: { ...spec, panels: spec.panels.map((p) => ({ ...p })) } })\n\n const updateDraft = (patch: Partial<DashboardSpec>) =>\n setDraft((d) => (d ? { ...d, spec: { ...d.spec, ...patch } } : d))\n const setPanels = (panels: PanelSpec[]) => updateDraft({ panels })\n\n const commit = async () => {\n if (!draft) return\n try {\n const result = await save.mutateAsync({\n id: draft.id,\n spec: { ...draft.spec, title: draft.spec.title.trim() || l.untitled },\n })\n setDraft(null)\n setOpenId(result.id)\n notify(l.saved, 'success')\n } catch (error) {\n notify(`${l.saveFailed}: ${error instanceof Error ? error.message : String(error)}`, 'error')\n }\n }\n\n const deleteOpen = async (d: SavedDashboard) => {\n if (!(await confirm({ message: l.confirmDelete(d.spec.title), kind: 'yesno' }))) return\n await remove.mutateAsync(d.id)\n setOpenId(null)\n }\n\n let content\n if (draft) {\n const panels = draft.spec.panels\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-editor`}>\n <PageHeader\n title={draft.spec.title || l.untitled}\n actions={\n <div className=\"flex gap-2\">\n <Button variant=\"ghost\" onClick={() => setDraft(null)}>\n {l.cancel}\n </Button>\n <Button\n onClick={() => void commit()}\n disabled={save.isPending}\n data-testid={`${testId}-save`}\n >\n {save.isPending ? l.saving : l.save}\n </Button>\n </div>\n }\n />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-name`}>{l.dashboardTitle}</Label>\n <Input\n id={`${testId}-name`}\n value={draft.spec.title}\n onChange={(e) => updateDraft({ title: e.target.value })}\n data-testid={`${testId}-name`}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-about`}>{l.dashboardDescription}</Label>\n <Input\n id={`${testId}-about`}\n value={draft.spec.description ?? ''}\n onChange={(e) => updateDraft({ description: e.target.value || undefined })}\n />\n </div>\n </div>\n {panels.length ? (\n <PanelsGrid\n spec={draft.spec}\n panelLabels={panelLabels}\n testId={testId}\n editing={{\n l,\n onEdit: (index) => setEditingPanel({ index, panel: panels[index] }),\n onMove: (index, by) => {\n const next = [...panels]\n const [moved] = next.splice(index, 1)\n next.splice(index + by, 0, moved)\n setPanels(next)\n },\n onRemove: (index) => setPanels(panels.filter((_, i) => i !== index)),\n }}\n />\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noPanels}</p>\n )}\n <Button\n variant=\"outline\"\n onClick={() => setEditingPanel({ index: panels.length, panel: newPanel() })}\n data-testid={`${testId}-add-panel`}\n >\n <Plus className=\"size-4\" /> {l.addPanel}\n </Button>\n <Dialog open={editingPanel !== null} onOpenChange={(o) => !o && setEditingPanel(null)}>\n <DialogContent className=\"max-h-[90dvh] max-w-5xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{l.editPanel}</DialogTitle>\n <DialogDescription>{l.editPanelDescription}</DialogDescription>\n </DialogHeader>\n {editingPanel && (\n <PanelEditor\n value={editingPanel.panel}\n onChange={(panel) => setEditingPanel({ ...editingPanel, panel })}\n labels={editorLabels}\n testId={`${testId}-panel-editor`}\n />\n )}\n <DialogFooter>\n <Button variant=\"ghost\" onClick={() => setEditingPanel(null)}>\n {l.cancel}\n </Button>\n <Button\n data-testid={`${testId}-panel-done`}\n onClick={() => {\n if (!editingPanel) return\n const next = [...panels]\n next[editingPanel.index] = editingPanel.panel\n setPanels(next)\n setEditingPanel(null)\n }}\n >\n {l.panelDone}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n } else if (open) {\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-view`}>\n <PageHeader\n title={open.spec.title}\n description={open.spec.description}\n leading={\n <Button variant=\"ghost\" size=\"icon\" aria-label={l.back} onClick={() => setOpenId(null)}>\n <ArrowLeft className=\"size-4\" />\n </Button>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => startEditing(open)}\n data-testid={`${testId}-edit`}\n >\n <Pencil className=\"size-4\" /> {l.edit}\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => void deleteOpen(open)}\n data-testid={`${testId}-delete`}\n >\n <Trash2 className=\"size-4\" /> {l.delete}\n </Button>\n </div>\n }\n />\n <PanelsGrid spec={open.spec} panelLabels={panelLabels} testId={testId} />\n </div>\n )\n } else {\n const list = saved.data ?? []\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-list`}>\n <PageHeader\n title={l.title}\n description={l.description}\n actions={\n <NewDashboardButton templates={templates} l={l} onCreate={createFrom} testId={testId} />\n }\n />\n {saved.isError ? (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {l.loadError}\n </p>\n ) : saved.isLoading ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-24 animate-pulse rounded-xl bg-muted\" />\n ))}\n </div>\n ) : list.length === 0 ? (\n <EmptyState\n icon={LayoutDashboard}\n title={l.empty}\n description={l.emptyDescription}\n action={<NewDashboardButton templates={templates} l={l} onCreate={createFrom} />}\n testId={`${testId}-empty`}\n />\n ) : (\n <ul className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {list.map((d) => (\n <li key={d.id}>\n <Card variant=\"elevated\" className=\"card-hover h-full rounded-xl p-0\">\n <button\n type=\"button\"\n className=\"flex size-full flex-col items-start gap-1 rounded-xl p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => setOpenId(d.id)}\n data-testid={`${testId}-open-${d.id}`}\n >\n <span className=\"flex items-center gap-2 font-medium text-foreground\">\n <LayoutDashboard className=\"size-4 text-muted-foreground\" />\n {d.spec.title}\n </span>\n {d.spec.description && (\n <span className=\"line-clamp-2 text-sm text-muted-foreground\">\n {d.spec.description}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {l.panels(d.spec.panels.length)}\n </span>\n </button>\n </Card>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n }\n\n return <div data-testid={testId}>{content}</div>\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/connection/dashboards/templates.ts","../../src/connection/dashboards/ConnectedDashboardsPage.tsx"],"names":["panel"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The starting points a new dashboard is offered by default (`DASHBOARD_TEMPLATES`): an overview,\n * then one dashboard per area (documents, tags and facts, workflows, AI usage, recent activity),\n * over the built-in sources and their default words. A site passes its own\n * (`ConnectedDashboardsPage templates`), in its words.\n */\nimport {\n DEFAULT_ACTIVITY_SOURCE_LABELS,\n DEFAULT_DOCUMENTS_SOURCE_LABELS,\n DEFAULT_WORKFLOWS_SOURCE_LABELS,\n type ChartSpec,\n type DashboardSpec,\n type PanelSpec,\n} from '@arbidocs/react'\n\n/** A fresh panel id. */\nexport function newPanelId(): string {\n return `pnl-${Math.random().toString(36).slice(2, 10)}`\n}\n\n/** A new panel: a bar chart of the documents by type, ready to be changed. */\nexport function newPanel(): PanelSpec {\n return {\n id: newPanelId(),\n title: 'New panel',\n source: { id: 'documents' },\n chart: { type: 'bar', x: 'type' },\n width: 6,\n }\n}\n\n/** A panel of `source`, `width` columns wide. */\nconst panel = (\n id: string,\n title: string,\n source: string,\n chart: ChartSpec,\n width = 6\n): PanelSpec => ({ id, title, source: { id: source }, chart, width })\n\n/** One figure, a quarter of the row by default. */\nconst metric = (\n id: string,\n title: string,\n source: string,\n chart: Omit<ChartSpec, 'type'> = {},\n width = 3\n): PanelSpec => panel(id, title, source, { type: 'metric', ...chart }, width)\n\nconst FAILED_DOCUMENT = DEFAULT_DOCUMENTS_SOURCE_LABELS.statuses.failed\nconst FAILED_RUN = DEFAULT_WORKFLOWS_SOURCE_LABELS.results.failed\nconst WORKFLOW_RUN = DEFAULT_ACTIVITY_SOURCE_LABELS.kinds.workflow_run\n\nconst DOCUMENTS_BY_TYPE = panel('documents-by-type', 'Documents by type', 'documents', {\n type: 'bar',\n x: 'type',\n limit: 8,\n})\nconst DOCUMENTS_BY_STATUS = panel('documents-by-status', 'Documents by status', 'documents', {\n type: 'donut',\n x: 'status',\n})\nconst AI_USAGE_BY_MODEL = panel('usage-by-model', 'AI usage by model', 'usage', {\n type: 'bar',\n x: 'day',\n bucket: 'day',\n series: 'model',\n y: 'spend',\n aggregate: 'sum',\n stacked: true,\n})\nconst WORKFLOW_RUNS_BY_DAY = panel(\n 'workflow-runs-by-day',\n 'Workflow runs by day',\n 'activity',\n {\n type: 'bar',\n x: 'when',\n bucket: 'day',\n series: 'status',\n stacked: true,\n filters: [{ field: 'kind', op: 'eq', value: WORKFLOW_RUN }],\n },\n 12\n)\n\nexport const OVERVIEW_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Overview',\n description: 'Documents, threads, facts and AI usage at a glance.',\n panels: [\n metric('documents', 'Documents', 'documents'),\n metric('threads', 'Threads', 'conversations'),\n metric('facts', 'Facts', 'facts'),\n metric('ai-usage', 'AI usage this period', 'usage', { aggregate: 'sum', y: 'spend' }),\n panel('threads-over-time', 'Threads started', 'conversations', {\n type: 'line',\n x: 'created',\n bucket: 'month',\n }),\n AI_USAGE_BY_MODEL,\n DOCUMENTS_BY_TYPE,\n DOCUMENTS_BY_STATUS,\n panel(\n 'due',\n 'Due dates',\n 'conversations',\n {\n type: 'table',\n columns: ['title', 'due', 'status', 'owner'],\n filters: [{ field: 'due', op: 'not_empty' }],\n orderBy: { field: 'due' },\n },\n 12\n ),\n ],\n}\n\nconst DOCUMENTS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Documents',\n description: 'What the workspace holds: status, type, folders, who added what, and when.',\n panels: [\n metric('documents', 'Documents', 'documents'),\n metric('pages', 'Pages', 'documents', { aggregate: 'sum', y: 'pages' }),\n metric('size', 'Stored', 'documents', { aggregate: 'sum', y: 'size' }),\n metric('failed', 'Failed to process', 'documents', {\n filters: [{ field: 'status', op: 'eq', value: FAILED_DOCUMENT }],\n }),\n DOCUMENTS_BY_STATUS,\n DOCUMENTS_BY_TYPE,\n panel('documents-added', 'Documents added', 'documents', {\n type: 'line',\n x: 'created',\n bucket: 'month',\n }),\n panel('documents-by-folder', 'Documents by folder', 'documents', {\n type: 'bar',\n x: 'folder',\n limit: 10,\n }),\n panel('documents-by-person', 'Added by', 'documents', { type: 'bar', x: 'createdBy' }),\n panel('documents-by-kind', 'Kinds of document', 'documents', {\n type: 'donut',\n x: 'nature',\n limit: 8,\n }),\n panel(\n 'latest-documents',\n 'Latest documents',\n 'documents',\n {\n type: 'table',\n columns: ['name', 'type', 'status', 'createdBy', 'created'],\n orderBy: { field: 'created', direction: 'desc' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst TAGS_FACTS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Tags and facts',\n description: 'How the workspace is organised: its tags and what carries them, and its facts.',\n panels: [\n metric('tags', 'Tags', 'tags'),\n metric('facts', 'Facts', 'facts'),\n metric('confirmed-facts', 'Confirmed facts', 'facts', {\n filters: [{ field: 'confirmed', op: 'eq', value: true }],\n }),\n metric('dated-facts', 'Dated facts', 'facts', {\n filters: [{ field: 'date', op: 'not_empty' }],\n }),\n panel('most-used-tags', 'Most used tags', 'tags', {\n type: 'bar',\n x: 'name',\n y: 'documents',\n aggregate: 'sum',\n limit: 10,\n // Tags on no document yet are not \"used\": none at all shows the empty state.\n filters: [{ field: 'documents', op: 'gt', value: 0 }],\n }),\n panel('tags-by-kind', 'Tags by kind', 'tags', { type: 'donut', x: 'kind' }),\n panel('facts-by-tag', 'Facts by tag', 'facts', { type: 'bar', x: 'tags', limit: 10 }),\n panel('facts-added', 'Facts added', 'facts', { type: 'line', x: 'created', bucket: 'month' }),\n panel(\n 'latest-facts',\n 'Latest facts',\n 'facts',\n {\n type: 'table',\n columns: ['text', 'tags', 'date', 'createdBy'],\n orderBy: { field: 'created', direction: 'desc' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst WORKFLOWS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Workflows',\n description: 'Your workflows: what starts them, how their runs end, and what runs next.',\n panels: [\n metric('workflows', 'Workflows', 'workflows', {}, 4),\n metric(\n 'workflows-on',\n 'Switched on',\n 'workflows',\n {\n filters: [{ field: 'active', op: 'eq', value: true }],\n },\n 4\n ),\n metric(\n 'workflows-failed',\n 'Last run failed',\n 'workflows',\n {\n filters: [{ field: 'lastResult', op: 'eq', value: FAILED_RUN }],\n },\n 4\n ),\n panel('workflows-by-result', 'Last run result', 'workflows', {\n type: 'donut',\n x: 'lastResult',\n }),\n panel('workflows-by-trigger', 'What starts them', 'workflows', { type: 'bar', x: 'trigger' }),\n WORKFLOW_RUNS_BY_DAY,\n panel(\n 'next-runs',\n 'Next runs',\n 'workflows',\n {\n type: 'table',\n columns: ['name', 'trigger', 'nextRun', 'lastResult'],\n filters: [{ field: 'nextRun', op: 'not_empty' }],\n orderBy: { field: 'nextRun' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst AI_USAGE_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'AI usage',\n description: 'What the AI has done and cost this period, by day, model and project.',\n panels: [\n metric('ai-spend', 'AI usage this period', 'usage', { aggregate: 'sum', y: 'spend' }, 4),\n metric('ai-tokens', 'Tokens', 'usage', { aggregate: 'sum', y: 'tokens' }, 4),\n metric('ai-requests', 'Requests', 'usage', { aggregate: 'sum', y: 'requests' }, 4),\n panel(\n 'spend-by-day',\n 'AI usage by day',\n 'usage',\n { type: 'line', x: 'day', bucket: 'day', y: 'spend', aggregate: 'sum' },\n 12\n ),\n AI_USAGE_BY_MODEL,\n panel('tokens-by-model', 'Tokens by model', 'usage', {\n type: 'bar',\n x: 'model',\n y: 'tokens',\n aggregate: 'sum',\n limit: 6,\n }),\n panel(\n 'spend-by-project',\n 'AI usage by project',\n 'usage',\n { type: 'bar', x: 'project', y: 'spend', aggregate: 'sum' },\n 12\n ),\n ],\n}\n\nconst ACTIVITY_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Recent activity',\n description: 'The latest activity in the workspace: who did what, where, and when.',\n panels: [\n panel(\n 'activity-by-day',\n 'Activity by day',\n 'activity',\n { type: 'bar', x: 'when', bucket: 'day', series: 'area', stacked: true },\n 12\n ),\n panel('activity-by-area', 'Activity by area', 'activity', { type: 'donut', x: 'area' }),\n panel('activity-by-person', 'Activity by person', 'activity', {\n type: 'bar',\n x: 'person',\n limit: 10,\n }),\n WORKFLOW_RUNS_BY_DAY,\n panel(\n 'latest-activity',\n 'Latest activity',\n 'activity',\n {\n type: 'table',\n columns: ['when', 'person', 'kind', 'item', 'status'],\n orderBy: { field: 'when', direction: 'desc' },\n limit: 15,\n },\n 12\n ),\n ],\n}\n\n/**\n * The templates a host's features allow: one with a panel over the workflows source only while\n * the `workflows` feature is on.\n */\nexport function templatesFor(\n templates: readonly DashboardSpec[],\n features: { workflows: boolean }\n): readonly DashboardSpec[] {\n return features.workflows\n ? templates\n : templates.filter((t) => !t.panels.some((p) => p.source.id === 'workflows'))\n}\n\n/** The default templates under \"New dashboard\", in order (`templatesFor` narrows them). */\nexport const DASHBOARD_TEMPLATES: readonly DashboardSpec[] = [\n OVERVIEW_DASHBOARD,\n DOCUMENTS_DASHBOARD,\n TAGS_FACTS_DASHBOARD,\n WORKFLOWS_DASHBOARD,\n AI_USAGE_DASHBOARD,\n ACTIVITY_DASHBOARD,\n]\n","/**\n * `ConnectedDashboardsPage`: the saved dashboards, one open to read, and an editor to build them.\n * The list, a dashboard's grid of `DashboardPanel`s, and its edit mode (panels added and changed with\n * `PanelEditor`, moved, removed, then saved) are one kit. Dashboards are kept by the host's store\n * (`useDashboardStore`: by default a database of the open workspace).\n *\n * Generic: the page's words come in through `labels`, and a site's own starting points (its\n * vocabulary, its fields) through `templates`.\n */\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n ArrowDown,\n ArrowLeft,\n ArrowUp,\n LayoutDashboard,\n MoreHorizontal,\n Pencil,\n Plus,\n Trash2,\n} from 'lucide-react'\nimport {\n useFeature,\n useDashboardStore,\n useDeleteDashboard,\n useSaveDashboard,\n useSavedDashboards,\n type DashboardSpec,\n type PanelSpec,\n type SavedDashboard,\n} from '@arbidocs/react'\nimport {\n Button,\n Card,\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Label,\n} from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PageHeader } from '../../components/PageHeader'\nimport { DashboardCell, DashboardGrid } from '../../dashboards/DashboardGrid'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { DashboardPanel, type DashboardPanelLabels } from './DashboardPanel'\nimport { PanelEditor, type PanelEditorLabels } from './PanelEditor'\nimport { DASHBOARD_TEMPLATES, newPanel, templatesFor } from './templates'\n\nexport interface DashboardsPageLabels {\n title: string\n description: string\n newDashboard: string\n blank: string\n untitled: string\n empty: string\n emptyDescription: string\n loadError: string\n panels: (count: number) => string\n back: string\n edit: string\n /** The \"…\" menu of an open dashboard (its rarer actions: delete). */\n more: string\n delete: string\n confirmDelete: (title: string) => string\n save: string\n saving: string\n cancel: string\n dashboardTitle: string\n dashboardDescription: string\n addPanel: string\n editPanel: string\n editPanelDescription: string\n panelDone: string\n moveUp: string\n moveDown: string\n removePanel: string\n noPanels: string\n saved: string\n saveFailed: string\n}\n\nexport const DEFAULT_DASHBOARDS_PAGE_LABELS: DashboardsPageLabels = {\n title: 'Dashboards',\n description:\n 'Charts and figures from your documents, threads, tags, facts, workflows, AI usage and databases.',\n newDashboard: 'New dashboard',\n blank: 'Blank dashboard',\n untitled: 'Untitled dashboard',\n empty: 'No dashboards yet',\n emptyDescription: 'Start from a template or a blank page, then add charts, figures and tables.',\n loadError: 'The dashboards could not be loaded.',\n panels: (count) => `${count} ${count === 1 ? 'panel' : 'panels'}`,\n back: 'All dashboards',\n edit: 'Edit',\n more: 'More dashboard actions',\n delete: 'Delete',\n confirmDelete: (title) => `Delete the dashboard “${title}”? Its panels go with it.`,\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n dashboardTitle: 'Name',\n dashboardDescription: 'Description',\n addPanel: 'Add a panel',\n editPanel: 'Panel',\n editPanelDescription: 'Choose the data, how to show it, and what to measure.',\n panelDone: 'Done',\n moveUp: 'Move up',\n moveDown: 'Move down',\n removePanel: 'Remove the panel',\n noPanels: 'No panels yet. Add one to start.',\n saved: 'Dashboard saved',\n saveFailed: 'The dashboard could not be saved',\n}\n\nexport interface ConnectedDashboardsPageProps {\n /**\n * Starting points for a new dashboard. Default: an overview and one per area (documents, tags and\n * facts, workflows, AI usage, recent activity) over the built-in sources; Workflows only while\n * the host's `workflows` feature is on.\n */\n templates?: readonly DashboardSpec[]\n /** The open dashboard (controlled, for a route): `null` is the list. */\n dashboardId?: string | null\n onDashboardChange?: (id: string | null) => void\n labels?: Partial<DashboardsPageLabels>\n panelLabels?: Partial<DashboardPanelLabels>\n editorLabels?: Partial<PanelEditorLabels>\n /**\n * Classes on the page's scrolling frame, merged over its padding (`p-4 sm:p-6`): a host whose\n * own frame pads its pages passes `p-0`.\n */\n className?: string\n testId?: string\n}\n\n/** What is being edited: a saved dashboard (`id`) or a new one. */\ninterface Draft {\n id?: string\n spec: DashboardSpec\n}\n\nfunction PanelsGrid({\n spec,\n panelLabels,\n editing,\n testId,\n}: {\n spec: DashboardSpec\n panelLabels?: Partial<DashboardPanelLabels>\n editing?: {\n l: DashboardsPageLabels\n onEdit: (index: number) => void\n onMove: (index: number, by: -1 | 1) => void\n onRemove: (index: number) => void\n }\n testId?: string\n}) {\n return (\n <DashboardGrid testId={testId && `${testId}-grid`}>\n {spec.panels.map((panel, i) => (\n <DashboardCell key={panel.id} width={panel.width}>\n <DashboardPanel\n panel={panel}\n labels={panelLabels}\n testId={testId && `${testId}-panel-${panel.id}`}\n actions={\n editing && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.editPanel}\n onClick={() => editing.onEdit(i)}\n >\n <Pencil className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveUp}\n disabled={i === 0}\n onClick={() => editing.onMove(i, -1)}\n >\n <ArrowUp className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveDown}\n disabled={i === spec.panels.length - 1}\n onClick={() => editing.onMove(i, 1)}\n >\n <ArrowDown className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.removePanel}\n onClick={() => editing.onRemove(i)}\n >\n <Trash2 className=\"size-3.5\" />\n </Button>\n </>\n )\n }\n />\n </DashboardCell>\n ))}\n </DashboardGrid>\n )\n}\n\nfunction NewDashboardButton({\n templates,\n l,\n onCreate,\n testId,\n}: {\n templates: readonly DashboardSpec[]\n l: DashboardsPageLabels\n onCreate: (spec: DashboardSpec) => void\n testId?: string\n}) {\n const blank: DashboardSpec = { version: 1, title: l.untitled, panels: [] }\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid={testId && `${testId}-new`}>\n <Plus className=\"size-4\" /> {l.newDashboard}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={() => onCreate(blank)}>{l.blank}</DropdownMenuItem>\n {templates.map((t, i) => (\n <DropdownMenuItem\n key={`${t.title}-${i}`}\n onSelect={() => onCreate(t)}\n data-testid={testId && `${testId}-template-${i}`}\n >\n {t.title}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport function ConnectedDashboardsPage({\n templates: siteTemplates,\n dashboardId,\n onDashboardChange,\n labels,\n panelLabels,\n editorLabels,\n className,\n testId = 'dashboards',\n}: ConnectedDashboardsPageProps) {\n const l = { ...DEFAULT_DASHBOARDS_PAGE_LABELS, ...labels }\n const { confirm, notify } = useBlocksEnvironment()\n const workflowsOn = useFeature('workflows')\n const templates = siteTemplates ?? templatesFor(DASHBOARD_TEMPLATES, { workflows: workflowsOn })\n const store = useDashboardStore()\n const saved = useSavedDashboards(store)\n const save = useSaveDashboard(store)\n const remove = useDeleteDashboard(store)\n\n const [ownOpenId, setOwnOpenId] = useState<string | null>(null)\n const openId = dashboardId === undefined ? ownOpenId : dashboardId\n const setOpenId = (id: string | null) => {\n setOwnOpenId(id)\n onDashboardChange?.(id)\n }\n const [draft, setDraft] = useState<Draft | null>(null)\n const [editingPanel, setEditingPanel] = useState<{ index: number; panel: PanelSpec } | null>(null)\n\n const open = useMemo(() => saved.data?.find((d) => d.id === openId), [saved.data, openId])\n // A dashboard deleted elsewhere (or a stale link): back to the list.\n useEffect(() => {\n if (openId && saved.data && !open && !draft) setOwnOpenId(null)\n }, [openId, saved.data, open, draft])\n\n const startEditing = (d: SavedDashboard | Draft) => setDraft({ id: d.id, spec: d.spec })\n const createFrom = (spec: DashboardSpec) =>\n setDraft({ spec: { ...spec, panels: spec.panels.map((p) => ({ ...p })) } })\n\n const updateDraft = (patch: Partial<DashboardSpec>) =>\n setDraft((d) => (d ? { ...d, spec: { ...d.spec, ...patch } } : d))\n const setPanels = (panels: PanelSpec[]) => updateDraft({ panels })\n\n const commit = async () => {\n if (!draft) return\n try {\n const result = await save.mutateAsync({\n id: draft.id,\n spec: { ...draft.spec, title: draft.spec.title.trim() || l.untitled },\n })\n setDraft(null)\n setOpenId(result.id)\n notify(l.saved, 'success')\n } catch (error) {\n notify(`${l.saveFailed}: ${error instanceof Error ? error.message : String(error)}`, 'error')\n }\n }\n\n const deleteOpen = async (d: SavedDashboard) => {\n if (!(await confirm({ message: l.confirmDelete(d.spec.title), kind: 'yesno' }))) return\n await remove.mutateAsync(d.id)\n setOpenId(null)\n }\n\n let content\n if (draft) {\n const panels = draft.spec.panels\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-editor`}>\n <PageHeader\n title={draft.spec.title || l.untitled}\n actions={\n <div className=\"flex gap-2\">\n <Button variant=\"ghost\" onClick={() => setDraft(null)}>\n {l.cancel}\n </Button>\n <Button\n onClick={() => void commit()}\n disabled={save.isPending}\n data-testid={`${testId}-save`}\n >\n {save.isPending ? l.saving : l.save}\n </Button>\n </div>\n }\n />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-name`}>{l.dashboardTitle}</Label>\n <Input\n id={`${testId}-name`}\n value={draft.spec.title}\n onChange={(e) => updateDraft({ title: e.target.value })}\n data-testid={`${testId}-name`}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-about`}>{l.dashboardDescription}</Label>\n <Input\n id={`${testId}-about`}\n value={draft.spec.description ?? ''}\n onChange={(e) => updateDraft({ description: e.target.value || undefined })}\n />\n </div>\n </div>\n {panels.length ? (\n <PanelsGrid\n spec={draft.spec}\n panelLabels={panelLabels}\n testId={testId}\n editing={{\n l,\n onEdit: (index) => setEditingPanel({ index, panel: panels[index] }),\n onMove: (index, by) => {\n const next = [...panels]\n const [moved] = next.splice(index, 1)\n next.splice(index + by, 0, moved)\n setPanels(next)\n },\n onRemove: (index) => setPanels(panels.filter((_, i) => i !== index)),\n }}\n />\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noPanels}</p>\n )}\n <Button\n variant=\"outline\"\n onClick={() => setEditingPanel({ index: panels.length, panel: newPanel() })}\n data-testid={`${testId}-add-panel`}\n >\n <Plus className=\"size-4\" /> {l.addPanel}\n </Button>\n <Dialog open={editingPanel !== null} onOpenChange={(o) => !o && setEditingPanel(null)}>\n <DialogContent className=\"max-h-[90dvh] max-w-5xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{l.editPanel}</DialogTitle>\n <DialogDescription>{l.editPanelDescription}</DialogDescription>\n </DialogHeader>\n {editingPanel && (\n <PanelEditor\n value={editingPanel.panel}\n onChange={(panel) => setEditingPanel({ ...editingPanel, panel })}\n labels={editorLabels}\n testId={`${testId}-panel-editor`}\n />\n )}\n <DialogFooter>\n <Button variant=\"ghost\" onClick={() => setEditingPanel(null)}>\n {l.cancel}\n </Button>\n <Button\n data-testid={`${testId}-panel-done`}\n onClick={() => {\n if (!editingPanel) return\n const next = [...panels]\n next[editingPanel.index] = editingPanel.panel\n setPanels(next)\n setEditingPanel(null)\n }}\n >\n {l.panelDone}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n } else if (open) {\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-view`}>\n <PageHeader\n title={open.spec.title}\n description={open.spec.description}\n leading={\n <Button variant=\"ghost\" size=\"icon\" aria-label={l.back} onClick={() => setOpenId(null)}>\n <ArrowLeft className=\"size-4\" />\n </Button>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => startEditing(open)}\n data-testid={`${testId}-edit`}\n >\n <Pencil className=\"size-4\" /> {l.edit}\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.more}\n data-testid={`${testId}-more`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n onSelect={() => void deleteOpen(open)}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`${testId}-delete`}\n >\n <Trash2 className=\"size-4\" /> {l.delete}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n }\n />\n <PanelsGrid spec={open.spec} panelLabels={panelLabels} testId={testId} />\n </div>\n )\n } else {\n const list = saved.data ?? []\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-list`}>\n <PageHeader\n title={l.title}\n description={l.description}\n actions={\n <NewDashboardButton templates={templates} l={l} onCreate={createFrom} testId={testId} />\n }\n />\n {saved.isError ? (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {l.loadError}\n </p>\n ) : saved.isLoading ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-24 animate-pulse rounded-xl bg-muted\" />\n ))}\n </div>\n ) : list.length === 0 ? (\n <EmptyState\n icon={LayoutDashboard}\n title={l.empty}\n description={l.emptyDescription}\n action={<NewDashboardButton templates={templates} l={l} onCreate={createFrom} />}\n testId={`${testId}-empty`}\n />\n ) : (\n <ul className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {list.map((d) => (\n <li key={d.id}>\n <Card variant=\"elevated\" className=\"card-hover h-full rounded-xl p-0\">\n <button\n type=\"button\"\n className=\"flex size-full flex-col items-start gap-1 rounded-xl p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => setOpenId(d.id)}\n data-testid={`${testId}-open-${d.id}`}\n >\n <span className=\"flex items-center gap-2 font-medium text-foreground\">\n <LayoutDashboard className=\"size-4 text-muted-foreground\" />\n {d.spec.title}\n </span>\n {d.spec.description && (\n <span className=\"line-clamp-2 text-sm text-muted-foreground\">\n {d.spec.description}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {l.panels(d.spec.panels.length)}\n </span>\n </button>\n </Card>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n }\n\n // The page scrolls and pads itself, as the other kit pages do, so a host only mounts it.\n return (\n <div\n className={cn('h-full min-h-0 w-full overflow-y-auto p-4 sm:p-6', className)}\n data-testid={testId}\n >\n {content}\n </div>\n )\n}\n"]}
|
package/dist/embed/index.cjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../chunk-
|
|
6
|
-
require('../chunk-
|
|
4
|
+
var chunkPHDUN4SG_cjs = require('../chunk-PHDUN4SG.cjs');
|
|
5
|
+
require('../chunk-LFYKB7KF.cjs');
|
|
6
|
+
require('../chunk-XHN5KOI2.cjs');
|
|
7
7
|
require('../chunk-RBI7WVEP.cjs');
|
|
8
|
-
require('../chunk-
|
|
8
|
+
require('../chunk-UCA4JLLJ.cjs');
|
|
9
9
|
require('../chunk-TJY7XPDE.cjs');
|
|
10
10
|
require('../chunk-XNW62J54.cjs');
|
|
11
11
|
require('../chunk-53RXGFJ6.cjs');
|
|
12
|
-
require('../chunk-
|
|
12
|
+
require('../chunk-7V4OCZS6.cjs');
|
|
13
13
|
require('../chunk-6KQVTMRL.cjs');
|
|
14
14
|
require('../chunk-IWLNDDPN.cjs');
|
|
15
|
-
require('../chunk-
|
|
15
|
+
require('../chunk-CRLFLMTK.cjs');
|
|
16
16
|
require('../chunk-OKUXM2N4.cjs');
|
|
17
17
|
require('../chunk-223D4727.cjs');
|
|
18
18
|
require('../chunk-SNUBQMIS.cjs');
|
|
@@ -23,7 +23,7 @@ require('../chunk-MZZ3SBQL.cjs');
|
|
|
23
23
|
require('../chunk-HKGO2GUG.cjs');
|
|
24
24
|
require('../chunk-7LIPW6ZK.cjs');
|
|
25
25
|
require('../chunk-ZPPMAL5P.cjs');
|
|
26
|
-
require('../chunk-
|
|
26
|
+
require('../chunk-ORELHENJ.cjs');
|
|
27
27
|
require('../chunk-NWNVWO6L.cjs');
|
|
28
28
|
require('../chunk-SK6HQ46Q.cjs');
|
|
29
29
|
require('../chunk-BZFCD6A6.cjs');
|
|
@@ -45,17 +45,17 @@ require('../chunk-RL2HI6NP.cjs');
|
|
|
45
45
|
require('../chunk-6UZC4XVV.cjs');
|
|
46
46
|
require('../chunk-TTPJ2G3G.cjs');
|
|
47
47
|
require('../chunk-XNXNLXIC.cjs');
|
|
48
|
-
require('../chunk-
|
|
48
|
+
require('../chunk-V6C2MBFY.cjs');
|
|
49
49
|
require('../chunk-M74FWYNL.cjs');
|
|
50
50
|
require('../chunk-QUMUAJ2P.cjs');
|
|
51
51
|
require('../chunk-VZOOGA47.cjs');
|
|
52
|
-
require('../chunk-
|
|
53
|
-
require('../chunk-
|
|
54
|
-
require('../chunk-
|
|
55
|
-
require('../chunk-
|
|
56
|
-
var
|
|
52
|
+
require('../chunk-SCLGUHLU.cjs');
|
|
53
|
+
require('../chunk-5AC52BHL.cjs');
|
|
54
|
+
require('../chunk-I7CJDF3V.cjs');
|
|
55
|
+
require('../chunk-EKSHUNJI.cjs');
|
|
56
|
+
var chunkNNBL3HPG_cjs = require('../chunk-NNBL3HPG.cjs');
|
|
57
57
|
require('../chunk-TMX7YFVM.cjs');
|
|
58
|
-
require('../chunk-
|
|
58
|
+
require('../chunk-3YZKDCWY.cjs');
|
|
59
59
|
require('../chunk-SJSGSHIT.cjs');
|
|
60
60
|
require('../chunk-ZW6FPIFC.cjs');
|
|
61
61
|
require('../chunk-ZT5MIFLC.cjs');
|
|
@@ -86,31 +86,31 @@ require('../chunk-DES3K4SD.cjs');
|
|
|
86
86
|
|
|
87
87
|
Object.defineProperty(exports, "ArbiChat", {
|
|
88
88
|
enumerable: true,
|
|
89
|
-
get: function () { return
|
|
89
|
+
get: function () { return chunkPHDUN4SG_cjs.ArbiChat; }
|
|
90
90
|
});
|
|
91
91
|
Object.defineProperty(exports, "ConnectedCompactLogin", {
|
|
92
92
|
enumerable: true,
|
|
93
|
-
get: function () { return
|
|
93
|
+
get: function () { return chunkPHDUN4SG_cjs.ConnectedCompactLogin; }
|
|
94
94
|
});
|
|
95
95
|
Object.defineProperty(exports, "ConnectedEmbeddedChat", {
|
|
96
96
|
enumerable: true,
|
|
97
|
-
get: function () { return
|
|
97
|
+
get: function () { return chunkPHDUN4SG_cjs.ConnectedEmbeddedChat; }
|
|
98
98
|
});
|
|
99
99
|
Object.defineProperty(exports, "ConnectedLoginPage", {
|
|
100
100
|
enumerable: true,
|
|
101
|
-
get: function () { return
|
|
101
|
+
get: function () { return chunkPHDUN4SG_cjs.ConnectedLoginPage; }
|
|
102
102
|
});
|
|
103
103
|
Object.defineProperty(exports, "EmbeddedChatPanel", {
|
|
104
104
|
enumerable: true,
|
|
105
|
-
get: function () { return
|
|
105
|
+
get: function () { return chunkPHDUN4SG_cjs.EmbeddedChatPanel; }
|
|
106
106
|
});
|
|
107
107
|
Object.defineProperty(exports, "defaultHost", {
|
|
108
108
|
enumerable: true,
|
|
109
|
-
get: function () { return
|
|
109
|
+
get: function () { return chunkPHDUN4SG_cjs.defaultHost; }
|
|
110
110
|
});
|
|
111
111
|
Object.defineProperty(exports, "useConnection", {
|
|
112
112
|
enumerable: true,
|
|
113
|
-
get: function () { return
|
|
113
|
+
get: function () { return chunkNNBL3HPG_cjs.useConnection; }
|
|
114
114
|
});
|
|
115
115
|
//# sourceMappingURL=index.cjs.map
|
|
116
116
|
//# sourceMappingURL=index.cjs.map
|
package/dist/embed/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { ArbiChat, ConnectedCompactLogin, ConnectedEmbeddedChat, ConnectedLoginPage, EmbeddedChatPanel, defaultHost } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
2
|
+
export { ArbiChat, ConnectedCompactLogin, ConnectedEmbeddedChat, ConnectedLoginPage, EmbeddedChatPanel, defaultHost } from '../chunk-U5F5P4YU.js';
|
|
3
|
+
import '../chunk-OLAYDOPC.js';
|
|
4
|
+
import '../chunk-BH6IKGZ3.js';
|
|
5
5
|
import '../chunk-E26MNOLG.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-YJWAGXYM.js';
|
|
7
7
|
import '../chunk-CDDOLWSF.js';
|
|
8
8
|
import '../chunk-AZDPAV7E.js';
|
|
9
9
|
import '../chunk-AYIPCUPG.js';
|
|
10
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-DBKZANTC.js';
|
|
11
11
|
import '../chunk-3PV25ICC.js';
|
|
12
12
|
import '../chunk-GOJ5GHFS.js';
|
|
13
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-KIXFXCHL.js';
|
|
14
14
|
import '../chunk-JWUCDK2F.js';
|
|
15
15
|
import '../chunk-RC6VTY2H.js';
|
|
16
16
|
import '../chunk-OHRWYRTH.js';
|
|
@@ -21,7 +21,7 @@ import '../chunk-3EWS6ECM.js';
|
|
|
21
21
|
import '../chunk-2UP73FZT.js';
|
|
22
22
|
import '../chunk-JS66ZT33.js';
|
|
23
23
|
import '../chunk-3SBEWWKT.js';
|
|
24
|
-
import '../chunk-
|
|
24
|
+
import '../chunk-NFK2SEUD.js';
|
|
25
25
|
import '../chunk-NHZK64TQ.js';
|
|
26
26
|
import '../chunk-ELA7Y5YW.js';
|
|
27
27
|
import '../chunk-FACZSNRJ.js';
|
|
@@ -43,17 +43,17 @@ import '../chunk-L3BEWZWT.js';
|
|
|
43
43
|
import '../chunk-P4CH2ATT.js';
|
|
44
44
|
import '../chunk-U53SIJES.js';
|
|
45
45
|
import '../chunk-IU5CHOEU.js';
|
|
46
|
-
import '../chunk-
|
|
46
|
+
import '../chunk-WQH2WWZE.js';
|
|
47
47
|
import '../chunk-I6F6RBKV.js';
|
|
48
48
|
import '../chunk-OJIX5NBN.js';
|
|
49
49
|
import '../chunk-WNDIVNPT.js';
|
|
50
|
-
import '../chunk-
|
|
51
|
-
import '../chunk-
|
|
52
|
-
import '../chunk-
|
|
53
|
-
import '../chunk-
|
|
54
|
-
export { useConnection } from '../chunk-
|
|
50
|
+
import '../chunk-T5ZMG6MC.js';
|
|
51
|
+
import '../chunk-BAUZUIHB.js';
|
|
52
|
+
import '../chunk-3GFQNJYE.js';
|
|
53
|
+
import '../chunk-TG4IICWO.js';
|
|
54
|
+
export { useConnection } from '../chunk-OWHO2TO3.js';
|
|
55
55
|
import '../chunk-3UIJLUXN.js';
|
|
56
|
-
import '../chunk-
|
|
56
|
+
import '../chunk-QG6MRLZG.js';
|
|
57
57
|
import '../chunk-USTSEENR.js';
|
|
58
58
|
import '../chunk-P6GHJSLR.js';
|
|
59
59
|
import '../chunk-PFF5IZGS.js';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GuidedCursor
|
|
3
|
+
*
|
|
4
|
+
* The visual layer for guided UI runs: a mark that glides between targets and reacts on a click
|
|
5
|
+
* (squish + glow flash on the mark itself, plus an outward cyan ripple). It renders whatever the
|
|
6
|
+
* shared [[guidedCursor]] controller (./cursor.ts) says: a tip's "Show me", the tips editor's
|
|
7
|
+
* tester, and remote control over the websocket.
|
|
8
|
+
*
|
|
9
|
+
* The mark is a cyan ring by default; a host gives its own image (`markSrc`), as ARBI-frontend
|
|
10
|
+
* gives its brand mark. The look is defined by ./cursor-visuals.json, the single source of truth
|
|
11
|
+
* shared with ARBI-frontend's demo-video recorder, so in-app walkthroughs and recorded demos read
|
|
12
|
+
* as the same motion.
|
|
13
|
+
*
|
|
14
|
+
* Mount once near the app root (`ConnectedAppRuntime` does); it portals to <body>.
|
|
15
|
+
*/
|
|
16
|
+
export interface GuidedCursorProps {
|
|
17
|
+
/** The mark's image (a URL). Default: a cyan ring. */
|
|
18
|
+
markSrc?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Mount once near the app root. Renders the cursor mark + click ripples. */
|
|
21
|
+
export declare function GuidedCursor({ markSrc }: GuidedCursorProps): import("react").ReactPortal | null;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* guidedCursor — a framework-agnostic controller for the on-screen "someone is driving the UI"
|
|
3
|
+
* cursor. `<GuidedCursor/>` renders whatever this controller says; anything can drive it:
|
|
4
|
+
*
|
|
5
|
+
* await guidedCursor.glideTo('[data-testid="sidebar-documents-button"]')
|
|
6
|
+
* guidedCursor.ripple()
|
|
7
|
+
*
|
|
8
|
+
* Its consumers: the guided-run runner (a tip's "Show me", the tips editor's tester) and remote
|
|
9
|
+
* control over the websocket, where the backend dictates the steps and the frontend performs them
|
|
10
|
+
* visibly.
|
|
11
|
+
*
|
|
12
|
+
* The look (ring, click squish/glow, ripple) is defined by ./cursor-visuals.json, the single source
|
|
13
|
+
* of truth also consumed by `<GuidedCursor/>` and by ARBI-frontend's demo-video recorder
|
|
14
|
+
* (scripts/lib/cursor-overlay.cjs).
|
|
15
|
+
*/
|
|
16
|
+
interface CursorSnapshot {
|
|
17
|
+
visible: boolean;
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
}
|
|
21
|
+
type RippleListener = (x: number, y: number) => void;
|
|
22
|
+
declare class GuidedCursorController {
|
|
23
|
+
/** Glide duration (ms) — exported so the component's CSS transition matches. */
|
|
24
|
+
readonly glideMs = 580;
|
|
25
|
+
private snap;
|
|
26
|
+
private listeners;
|
|
27
|
+
private rippleListeners;
|
|
28
|
+
private lastPointer;
|
|
29
|
+
constructor();
|
|
30
|
+
subscribe: (cb: () => void) => (() => void);
|
|
31
|
+
getSnapshot: () => CursorSnapshot;
|
|
32
|
+
onRipple: (cb: RippleListener) => (() => void);
|
|
33
|
+
private commit;
|
|
34
|
+
prefersReducedMotion(): boolean;
|
|
35
|
+
show(): void;
|
|
36
|
+
hide(): void;
|
|
37
|
+
moveTo(x: number, y: number): void;
|
|
38
|
+
/** Emit a click ripple at the cursor's current position. */
|
|
39
|
+
ripple(): void;
|
|
40
|
+
/** Resolve a selector to an element, briefly polling since the target may only
|
|
41
|
+
* appear after a prior step navigates / opens a panel. */
|
|
42
|
+
private resolve;
|
|
43
|
+
/**
|
|
44
|
+
* Glide the cursor to the centre of `target` (a CSS selector or an element),
|
|
45
|
+
* scrolling it into view first. Resolves once the glide is done, so callers
|
|
46
|
+
* can `await` it before performing the action. Returns false if the target
|
|
47
|
+
* can't be found (after briefly waiting for it to appear).
|
|
48
|
+
*/
|
|
49
|
+
glideTo(target: string | Element, opts?: {
|
|
50
|
+
durationMs?: number;
|
|
51
|
+
waitMs?: number;
|
|
52
|
+
}): Promise<boolean>;
|
|
53
|
+
}
|
|
54
|
+
/** Shared controller singleton — drive from anywhere (tips, the tester, remote control). */
|
|
55
|
+
export declare const guidedCursor: GuidedCursorController;
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { guidedCursor } from './cursor';
|
|
2
|
+
export { GuidedCursor, type GuidedCursorProps } from './GuidedCursor';
|
|
3
|
+
export { cancelGuidedRun, runGuidedSteps, useActiveGuidedRun, type GuidedRunOptions, } from './runner';
|
|
4
|
+
export { createGuidedRuns, KIT_DEMOS, KIT_SEQUENCES, type GuidedRuns, type GuidedRunsConfig, type KitSequenceId, type SequenceDef, } from './sequences';
|
|
5
|
+
export { useGuidedRuns } from './useGuidedRuns';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guided-run runner — the single, source-agnostic execution engine.
|
|
3
|
+
*
|
|
4
|
+
* Executes a guided run (a list of UI operations) by, for each step: gliding the shared
|
|
5
|
+
* [[guidedCursor]] to the step's `target`, rippling on it, then performing the real interaction
|
|
6
|
+
* (`click` / `type`) — so the run is exactly what a user would do, visibly. Each step's `note` is
|
|
7
|
+
* announced through the notification system (the shared `notify` store) with a distinctive icon
|
|
8
|
+
* so guided actions stand out in the activity log. prefers-reduced-motion skips the glide.
|
|
9
|
+
*
|
|
10
|
+
* Every source runs through here: a tip's "Show me" and the tips editor's tester (by a site's
|
|
11
|
+
* `GuidedRuns.run`), and remote control, gated by consent (`createRemoteControl`). The registered
|
|
12
|
+
* run in flight is published (`useActiveGuidedRun`) so UI can show / cancel it.
|
|
13
|
+
*/
|
|
14
|
+
import type { GuidedStep } from '@arbidocs/react';
|
|
15
|
+
/** The registered run the runner is executing, or null when idle (or running ad-hoc steps). */
|
|
16
|
+
export declare const useActiveGuidedRun: () => string | null;
|
|
17
|
+
export interface GuidedRunOptions {
|
|
18
|
+
/**
|
|
19
|
+
* A run remote control started: it never acts on an off-limits surface or an unseen element,
|
|
20
|
+
* and waits and pauses at most `MAX_REMOTE_WAIT_MS`.
|
|
21
|
+
*/
|
|
22
|
+
remote?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Stop any running guided run and clear progress state. */
|
|
25
|
+
export declare function cancelGuidedRun(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Run guided steps one by one, paced for a human to follow. A new call supersedes any in-flight
|
|
28
|
+
* run. `id` names the registered run they are (published while it runs), or null for ad-hoc steps.
|
|
29
|
+
*/
|
|
30
|
+
export declare function runGuidedSteps(steps: GuidedStep[], id: string | null, { remote }?: GuidedRunOptions): Promise<void>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guided runs: the registry.
|
|
3
|
+
*
|
|
4
|
+
* A guided run is an ordered list of UI operations — each targets a real on-screen element (by a
|
|
5
|
+
* `[data-testid=...]` selector) and performs a real interaction on it. The runner (./runner.ts)
|
|
6
|
+
* executes it by gliding the guided cursor to each target, rippling, then doing the interaction,
|
|
7
|
+
* so a "Show me" (or a remote-control run) is exactly what a user would do, visibly.
|
|
8
|
+
*
|
|
9
|
+
* By construction there is no "silent step": every step has a `target`, so a guided run can never
|
|
10
|
+
* fire an effect with nothing on screen to point at. Instant dispatch lives in the action
|
|
11
|
+
* catalogue (`defineActions`, palette and shortcuts); guided runs drive the UI instead.
|
|
12
|
+
*
|
|
13
|
+
* The kit ships the runs that demonstrate its built-in actions (`KIT_SEQUENCES`, `KIT_DEMOS`); a
|
|
14
|
+
* host adds its own, and may replace a kit run by giving one with the same id, with
|
|
15
|
+
* `createGuidedRuns` in its host config (`guided`). Every registered id is also what a
|
|
16
|
+
* remote-control `sequence_id` may name, nothing else.
|
|
17
|
+
*/
|
|
18
|
+
import type { GuidedStep } from '@arbidocs/react';
|
|
19
|
+
import type { TipCta } from '../tips/registry';
|
|
20
|
+
import { type GuidedRunOptions } from './runner';
|
|
21
|
+
export interface SequenceDef<Id extends string = string> {
|
|
22
|
+
id: Id;
|
|
23
|
+
/** Human label for the tester / a tip-editor dropdown. */
|
|
24
|
+
label: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
steps: GuidedStep[];
|
|
27
|
+
}
|
|
28
|
+
/** The ids of the kit's own guided runs. */
|
|
29
|
+
export type KitSequenceId = 'upload-a-document' | 'invite-a-colleague' | 'open-plan-usage';
|
|
30
|
+
/** The kit's guided runs: walks to the built-in actions' doors. Every step targets a real element. */
|
|
31
|
+
export declare const KIT_SEQUENCES: Record<KitSequenceId, SequenceDef<KitSequenceId>>;
|
|
32
|
+
/**
|
|
33
|
+
* The built-in actions a "Show me" demonstrates with a guided run instead of dispatching at once
|
|
34
|
+
* (`createBuiltinActions` ids → run ids).
|
|
35
|
+
*/
|
|
36
|
+
export declare const KIT_DEMOS: Readonly<Record<string, KitSequenceId>>;
|
|
37
|
+
export interface GuidedRunsConfig<Id extends string> {
|
|
38
|
+
/** The host's own runs, beside the kit's (an equal id replaces the kit's). */
|
|
39
|
+
sequences?: Readonly<Record<Id, SequenceDef<Id>>>;
|
|
40
|
+
/** The host's actions a "Show me" demonstrates with a run (action id → run id). */
|
|
41
|
+
demos?: Readonly<Record<string, Id | KitSequenceId>>;
|
|
42
|
+
/** The guided cursor's mark image. Default: a cyan ring. */
|
|
43
|
+
cursorMark?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Let a backend assistant drive the UI (remote control): its socket handler, consent prompt,
|
|
46
|
+
* pill and Settings → Privacy switch. Default off; "Show me" runs work either way.
|
|
47
|
+
*/
|
|
48
|
+
remoteControl?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** The guided runs of a site: the kit's and the host's (`createGuidedRuns`). */
|
|
51
|
+
export interface GuidedRuns<Id extends string = string> {
|
|
52
|
+
readonly sequences: Readonly<Record<Id, SequenceDef<Id>>>;
|
|
53
|
+
/** Action id → the run that demonstrates it. */
|
|
54
|
+
readonly demos: Readonly<Record<string, Id>>;
|
|
55
|
+
readonly cursorMark?: string;
|
|
56
|
+
/** Remote control is on for this site (`GuidedRunsConfig.remoteControl`). */
|
|
57
|
+
readonly remoteControl: boolean;
|
|
58
|
+
/** Options for a run picker (the tips editor's dropdown and tester). */
|
|
59
|
+
readonly options: readonly {
|
|
60
|
+
value: Id;
|
|
61
|
+
label: string;
|
|
62
|
+
}[];
|
|
63
|
+
/** True when `value` is a registered run (a remote `sequence_id` must be). */
|
|
64
|
+
isSequenceId(value: string): value is Id;
|
|
65
|
+
/**
|
|
66
|
+
* Run a registered run or ad-hoc steps, paced for a human to follow; a new run supersedes the
|
|
67
|
+
* one in flight. An unknown id runs nothing. `remote`: a run remote control started.
|
|
68
|
+
*/
|
|
69
|
+
run(input: Id | GuidedStep[], options?: GuidedRunOptions): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* A tip's action: a URL (new window), a named run, or one action. "Show me" is a GUIDED run, so
|
|
72
|
+
* an action with a demo runs that, the cursor gliding to its door; any other action dispatches
|
|
73
|
+
* at once (`runAction`).
|
|
74
|
+
*/
|
|
75
|
+
runCta<Action extends string>(cta: TipCta<Action, Id>, runAction: (id: Action) => void): void;
|
|
76
|
+
/** Stop the run in flight. */
|
|
77
|
+
cancel(): void;
|
|
78
|
+
}
|
|
79
|
+
/** The site's guided runs: the kit's plus the host's own runs and demos. */
|
|
80
|
+
export declare function createGuidedRuns<Id extends string = never>(config?: GuidedRunsConfig<Id>): GuidedRuns<Id | KitSequenceId>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type GuidedSurface = 'consent' | 'cursor';
|
|
2
|
+
/** Count `surface` as on screen while the calling component is mounted. */
|
|
3
|
+
export declare function useMountedSurface(surface: GuidedSurface): void;
|
|
4
|
+
/** Whether `surface` is on screen now. */
|
|
5
|
+
export declare const isSurfaceMounted: (surface: GuidedSurface) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* The attribute that marks an off-limits surface: remote control's own controls (the consent
|
|
8
|
+
* prompt, the pill, the Privacy switch's row) and the forms that hold credentials or endpoints
|
|
9
|
+
* (model connections, calendar and mail connects). A remote run never acts inside one.
|
|
10
|
+
*/
|
|
11
|
+
export declare const REMOTE_CONTROL_SURFACE = "data-remote-control-surface";
|
|
12
|
+
/** The attribute that marks a secret field whatever its current type (a revealed password). */
|
|
13
|
+
export declare const SENSITIVE_INPUT = "data-sensitive-input";
|