@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,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkZMVF7EYJ_cjs = require('./chunk-ZMVF7EYJ.cjs');
|
|
5
5
|
var chunk2VJBIBPE_cjs = require('./chunk-2VJBIBPE.cjs');
|
|
6
6
|
var chunkOZQ26FNK_cjs = require('./chunk-OZQ26FNK.cjs');
|
|
7
7
|
var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
|
|
@@ -54,7 +54,7 @@ function DashboardCell({
|
|
|
54
54
|
}
|
|
55
55
|
);
|
|
56
56
|
}
|
|
57
|
-
var RechartsRenderer = react.lazy(() => import('./RechartsRenderer-
|
|
57
|
+
var RechartsRenderer = react.lazy(() => import('./RechartsRenderer-GIRCW7DB.cjs'));
|
|
58
58
|
var DEFAULT_CHART_RENDERER_LABELS = {
|
|
59
59
|
showTable: "Show table",
|
|
60
60
|
showChart: "Show chart",
|
|
@@ -79,7 +79,7 @@ function ChartTable({
|
|
|
79
79
|
}
|
|
80
80
|
function Legend({ model, other }) {
|
|
81
81
|
const pie = model.type === "pie" || model.type === "donut";
|
|
82
|
-
const items = pie ? model.categories.map((label, i) => ({ label, color:
|
|
82
|
+
const items = pie ? model.categories.map((label, i) => ({ label, color: chunkZMVF7EYJ_cjs.sliceColors(model, other)[i] })) : model.series.map((s) => ({ label: s.label, color: s.color }));
|
|
83
83
|
if (!pie && items.length < 2) return null;
|
|
84
84
|
return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-wrap justify-center gap-x-4 gap-y-1 text-xs text-muted-foreground", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "inline-flex items-center gap-1.5", children: [
|
|
85
85
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -167,7 +167,7 @@ function cellText(value, field, l, formatters) {
|
|
|
167
167
|
if (Array.isArray(value)) return value.join(", ");
|
|
168
168
|
if (typeof value === "boolean") return value ? l.yes : l.no;
|
|
169
169
|
if (field.type === "number" && typeof value === "number")
|
|
170
|
-
return
|
|
170
|
+
return chunkZMVF7EYJ_cjs.formatterOf(field, formatters)(value);
|
|
171
171
|
if (field.type === "date" && typeof value === "string") return chunkIPSHAMO2_cjs.fmtDate(value);
|
|
172
172
|
return String(value);
|
|
173
173
|
}
|
|
@@ -356,7 +356,7 @@ function PanelView({
|
|
|
356
356
|
);
|
|
357
357
|
}
|
|
358
358
|
var PANEL_FORMATTERS = {
|
|
359
|
-
...
|
|
359
|
+
...chunkZMVF7EYJ_cjs.DEFAULT_UNIT_FORMATTERS,
|
|
360
360
|
gbp: (v) => react$1.formatGbp(v),
|
|
361
361
|
bytes: (v) => chunk2VJBIBPE_cjs.formatBytes(v)
|
|
362
362
|
};
|
|
@@ -395,14 +395,14 @@ function SourcePanel({
|
|
|
395
395
|
const op = chart.aggregate ?? "count";
|
|
396
396
|
return {
|
|
397
397
|
kind: "metric",
|
|
398
|
-
value:
|
|
399
|
-
format:
|
|
398
|
+
value: chunkZMVF7EYJ_cjs.metricValueOf(dataset) ?? (op === "count" || op === "sum" ? 0 : null),
|
|
399
|
+
format: chunkZMVF7EYJ_cjs.formatterOf(valueField, formatters)
|
|
400
400
|
};
|
|
401
401
|
}
|
|
402
402
|
if (DRAWN.has(chart.type)) {
|
|
403
403
|
return {
|
|
404
404
|
kind: "chart",
|
|
405
|
-
model:
|
|
405
|
+
model: chunkZMVF7EYJ_cjs.chartModelOf({ ...chart, type: chart.type }, dataset, {
|
|
406
406
|
fields,
|
|
407
407
|
formatters,
|
|
408
408
|
otherLabel: other
|
|
@@ -412,7 +412,7 @@ function SourcePanel({
|
|
|
412
412
|
if (chart.x) {
|
|
413
413
|
return {
|
|
414
414
|
kind: "groups",
|
|
415
|
-
model:
|
|
415
|
+
model: chunkZMVF7EYJ_cjs.chartModelOf({ ...chart, type: "bar" }, dataset, {
|
|
416
416
|
fields,
|
|
417
417
|
formatters,
|
|
418
418
|
otherLabel: other
|
|
@@ -956,5 +956,5 @@ exports.PANEL_FORMATTERS = PANEL_FORMATTERS;
|
|
|
956
956
|
exports.PanelEditor = PanelEditor;
|
|
957
957
|
exports.PanelView = PanelView;
|
|
958
958
|
exports.clampPanelWidth = clampPanelWidth;
|
|
959
|
-
//# sourceMappingURL=chunk-
|
|
960
|
-
//# sourceMappingURL=chunk-
|
|
959
|
+
//# sourceMappingURL=chunk-D35EHOK5.cjs.map
|
|
960
|
+
//# sourceMappingURL=chunk-D35EHOK5.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dashboards/DashboardGrid.tsx","../src/dashboards/ChartRenderer.tsx","../src/dashboards/PanelView.tsx","../src/connection/dashboards/DashboardPanel.tsx","../src/connection/dashboards/PanelEditor.tsx"],"names":["jsx","cn","lazy","jsxs","sliceColors","useState","useId","Suspense","formatterOf","fmtDate","DataTable","AlertTriangle","ChartNoAxesColumn","MetricCard","Card","DEFAULT_UNIT_FORMATTERS","formatGbp","formatBytes","useBlocksEnvironment","usePanelDataset","useMemo","metricValueOf","chartModelOf","Button","useDataSources","Label","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Fragment","x","Switch","Input","X","Plus"],"mappings":"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","file":"chunk-CWC6W2NE.cjs","sourcesContent":["/**\n * `DashboardGrid`: a responsive 12-column grid of panels. Each child spans `width` columns on a wide\n * screen and the full width on a phone, where panels stack in order.\n */\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Literal classes (the stylesheet is generated from the source): `md:col-span-1…12`. */\nconst SPANS = [\n 'md:col-span-1',\n 'md:col-span-2',\n 'md:col-span-3',\n 'md:col-span-4',\n 'md:col-span-5',\n 'md:col-span-6',\n 'md:col-span-7',\n 'md:col-span-8',\n 'md:col-span-9',\n 'md:col-span-10',\n 'md:col-span-11',\n 'md:col-span-12',\n] as const\n\n/** A width in grid columns, kept within 1…12 (default 6, half the row). */\nexport function clampPanelWidth(width: number | undefined): number {\n return Math.min(12, Math.max(1, Math.round(width ?? 6)))\n}\n\nexport interface DashboardGridProps {\n children?: ReactNode\n className?: string\n testId?: string\n}\n\n/** The grid. Wrap each panel in a `DashboardCell`. */\nexport function DashboardGrid({ children, className, testId }: DashboardGridProps) {\n return (\n <div\n className={cn('grid grid-cols-1 gap-4 md:grid-cols-12', className)}\n data-slot=\"dashboard\"\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n\n/** One cell of the grid, `width` columns wide on a wide screen. */\nexport function DashboardCell({\n width,\n children,\n className,\n}: {\n width?: number\n children?: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn('col-span-1 min-w-0', SPANS[clampPanelWidth(width) - 1], className)}\n data-slot=\"dashboard-cell\"\n >\n {children}\n </div>\n )\n}\n","/**\n * `ChartRenderer`: draws a `ChartModel`. The drawing library is loaded on demand (a skeleton shows\n * meanwhile), so a page fetches it only when a chart is on screen. Beside the drawing: a legend in\n * the theme's text colours, and a table of the same values one click away (for screen readers,\n * copying, or when colours are hard to tell apart).\n */\nimport { lazy, Suspense, useId, useState } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { sliceColors, type ChartModel } from './chartModel'\n\nconst RechartsRenderer = lazy(() => import('./RechartsRenderer'))\n\nexport interface ChartRendererLabels {\n showTable: string\n showChart: string\n other: string\n}\n\nexport const DEFAULT_CHART_RENDERER_LABELS: ChartRendererLabels = {\n showTable: 'Show table',\n showChart: 'Show chart',\n other: 'Other',\n}\n\nexport interface ChartRendererProps {\n model: ChartModel\n ariaLabel: string\n /** The plot's height in px. Default 240. */\n height?: number\n /** Start on the table. */\n defaultView?: 'chart' | 'table'\n labels?: Partial<ChartRendererLabels>\n className?: string\n testId?: string\n}\n\n/** The values as a table: a row per category, a column per series. */\nexport function ChartTable({\n model,\n caption,\n id,\n}: {\n model: ChartModel\n caption: string\n id?: string\n}) {\n return (\n <div className=\"max-h-72 overflow-auto\">\n <table id={id} className=\"w-full text-left text-xs\" data-slot=\"chart-table\">\n <caption className=\"sr-only\">{caption}</caption>\n <thead>\n <tr className=\"border-b border-border text-muted-foreground\">\n <th scope=\"col\" className=\"py-1.5 pr-3 font-medium\">\n {model.xLabel}\n </th>\n {model.series.map((s) => (\n <th key={s.id} scope=\"col\" className=\"py-1.5 pr-3 text-right font-medium\">\n {s.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {model.categories.map((category, i) => (\n <tr key={`${category}-${i}`} className=\"border-b border-border/60 last:border-0\">\n <th scope=\"row\" className=\"py-1.5 pr-3 font-normal text-foreground\">\n {category}\n </th>\n {model.series.map((s) => (\n <td key={s.id} className=\"py-1.5 pr-3 text-right tabular-nums text-foreground\">\n {s.values[i] === null ? '–' : model.format(s.values[i] as number)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction Legend({ model, other }: { model: ChartModel; other: string }) {\n const pie = model.type === 'pie' || model.type === 'donut'\n const items = pie\n ? model.categories.map((label, i) => ({ label, color: sliceColors(model, other)[i] }))\n : model.series.map((s) => ({ label: s.label, color: s.color }))\n if (!pie && items.length < 2) return null\n return (\n <ul className=\"flex flex-wrap justify-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n {items.map((item, i) => (\n <li key={`${item.label}-${i}`} className=\"inline-flex items-center gap-1.5\">\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-2 rounded-full\"\n style={{ background: item.color }}\n />\n {item.label}\n </li>\n ))}\n </ul>\n )\n}\n\nexport function ChartRenderer({\n model,\n ariaLabel,\n height = 240,\n defaultView = 'chart',\n labels,\n className,\n testId,\n}: ChartRendererProps) {\n const l = { ...DEFAULT_CHART_RENDERER_LABELS, ...labels }\n const [view, setView] = useState(defaultView)\n const tableId = useId()\n return (\n <figure\n className={cn('flex min-w-0 max-w-full flex-col gap-2', className)}\n data-slot=\"dashboard-chart\"\n data-type={model.type}\n data-testid={testId}\n >\n {view === 'table' ? (\n <ChartTable model={model} caption={ariaLabel} id={tableId} />\n ) : (\n <div className=\"min-w-0\" style={{ height }} role=\"figure\" aria-label={ariaLabel}>\n <Suspense\n fallback={\n <div\n className=\"size-full animate-pulse rounded-md bg-muted\"\n data-slot=\"chart-loading\"\n />\n }\n >\n <RechartsRenderer\n model={model}\n ariaLabel={ariaLabel}\n height={height}\n otherLabel={l.other}\n />\n </Suspense>\n </div>\n )}\n <figcaption className=\"flex flex-wrap items-center justify-between gap-2\">\n <Legend model={model} other={l.other} />\n <button\n type=\"button\"\n className=\"ml-auto rounded-sm text-xs text-muted-foreground underline-offset-2 hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring print:hidden\"\n aria-controls={view === 'table' ? tableId : undefined}\n aria-pressed={view === 'table'}\n onClick={() => setView(view === 'table' ? 'chart' : 'table')}\n >\n {view === 'table' ? l.showChart : l.showTable}\n </button>\n </figcaption>\n </figure>\n )\n}\n","/**\n * `PanelView`: one dashboard panel as it looks, from data already in hand: a metric tile, a chart\n * or a table, each with its loading, empty and error state. Presentational: `DashboardPanel` reads\n * the data and renders this.\n */\nimport type { ReactNode } from 'react'\nimport { AlertTriangle, ChartNoAxesColumn } from 'lucide-react'\nimport type { DatasetField, DatasetRow, DatasetValue } from '@arbidocs/react'\nimport { Card, cn } from '@arbidocs/react/ui'\nimport { DataTable, type Column } from '../components/DataTable'\nimport { MetricCard } from '../components/MetricCard'\nimport { fmtDate } from '../lib/format'\nimport { ChartRenderer, ChartTable, type ChartRendererLabels } from './ChartRenderer'\nimport { formatterOf, type ChartModel, type UnitFormatters } from './chartModel'\n\nexport type PanelState = 'loading' | 'empty' | 'error' | 'ready'\n\nexport interface PanelViewLabels extends ChartRendererLabels {\n empty: string\n error: string\n /** Under a table cut short: \"Showing 50 of 1,200 rows\". */\n showingRows: (shown: number, total: number) => string\n yes: string\n no: string\n}\n\nexport const DEFAULT_PANEL_VIEW_LABELS: PanelViewLabels = {\n showTable: 'Show table',\n showChart: 'Show chart',\n other: 'Other',\n empty: 'Nothing to show yet.',\n error: 'This panel could not be loaded.',\n showingRows: (shown, total) =>\n `Showing ${shown.toLocaleString('en-GB')} of ${total.toLocaleString('en-GB')} rows`,\n yes: 'Yes',\n no: 'No',\n}\n\n/** What a panel shows when ready. */\nexport type PanelBody =\n | { kind: 'metric'; value: number | null; format: (value: number) => string }\n | { kind: 'chart'; model: ChartModel }\n /** A table of groups (a chart model shown as a table). */\n | { kind: 'groups'; model: ChartModel }\n /** A table of records. */\n | { kind: 'records'; fields: readonly DatasetField[]; rows: readonly DatasetRow[] }\n\nexport interface PanelViewProps {\n /** What the panel is (it shows as one before its data is in). */\n kind: 'metric' | 'chart' | 'table'\n title: string\n description?: string\n state: PanelState\n body?: PanelBody\n /** The error's own words, shown under the panel's. */\n errorDetail?: string\n /** Shown in the empty state (a link to where data comes from). */\n emptyAction?: ReactNode\n /** Buttons in the panel's corner (edit, remove), for a dashboard being edited. */\n actions?: ReactNode\n /** A metric's tile, with the theme accent token of its icon. */\n metricAccent?: string\n /** `card` (default): a card with the title; `plain`: no card (a chart placed in a page). */\n variant?: 'card' | 'plain'\n /** Most records a table shows. Default 50. */\n maxRows?: number\n formatters?: UnitFormatters\n labels?: Partial<PanelViewLabels>\n className?: string\n testId?: string\n}\n\nfunction cellText(\n value: DatasetValue | undefined,\n field: DatasetField,\n l: PanelViewLabels,\n formatters?: UnitFormatters\n): string {\n if (value === null || value === undefined || value === '') return '–'\n if (Array.isArray(value)) return value.join(', ')\n if (typeof value === 'boolean') return value ? l.yes : l.no\n if (field.type === 'number' && typeof value === 'number')\n return formatterOf(field, formatters)(value)\n if (field.type === 'date' && typeof value === 'string') return fmtDate(value)\n return String(value)\n}\n\nfunction RecordsTable({\n fields,\n rows,\n maxRows,\n l,\n formatters,\n testId,\n}: {\n fields: readonly DatasetField[]\n rows: readonly DatasetRow[]\n maxRows: number\n l: PanelViewLabels\n formatters?: UnitFormatters\n testId?: string\n}) {\n const shown = rows.slice(0, maxRows).map((row, i) => ({ row, i }))\n const columns: Column<{ row: DatasetRow; i: number }>[] = fields.map((field) => ({\n key: field.id,\n header: field.label,\n align: field.type === 'number' ? 'right' : 'left',\n render: ({ row }) => cellText(row[field.id], field, l, formatters),\n className: field.type === 'number' ? 'tabular-nums' : undefined,\n }))\n return (\n <div className=\"space-y-1\">\n <div className=\"max-h-80 overflow-auto\">\n <DataTable\n columns={columns}\n rows={shown}\n getRowId={({ i }) => String(i)}\n area={testId ?? 'dashboard-panel'}\n emptyTitle={l.empty}\n className=\"border-0\"\n />\n </div>\n {rows.length > maxRows && (\n <p className=\"text-xs text-muted-foreground\">{l.showingRows(maxRows, rows.length)}</p>\n )}\n </div>\n )\n}\n\nfunction Message({\n tone,\n text,\n detail,\n action,\n testId,\n}: {\n tone: 'empty' | 'error'\n text: string\n detail?: string\n action?: ReactNode\n testId?: string\n}) {\n const Icon = tone === 'error' ? AlertTriangle : ChartNoAxesColumn\n return (\n <div\n className=\"flex min-h-40 flex-col items-center justify-center gap-2 py-6 text-center\"\n role={tone === 'error' ? 'alert' : undefined}\n data-testid={testId}\n >\n <Icon\n className={cn('size-6', tone === 'error' ? 'text-destructive' : 'text-muted-foreground/50')}\n />\n <p className={cn('text-sm', tone === 'error' ? 'text-destructive' : 'text-muted-foreground')}>\n {text}\n </p>\n {detail && <p className=\"max-w-sm text-xs text-muted-foreground\">{detail}</p>}\n {action}\n </div>\n )\n}\n\nexport function PanelView({\n kind,\n title,\n description,\n state,\n body,\n errorDetail,\n emptyAction,\n actions,\n metricAccent,\n variant = 'card',\n maxRows = 50,\n formatters,\n labels,\n className,\n testId,\n}: PanelViewProps) {\n const l = { ...DEFAULT_PANEL_VIEW_LABELS, ...labels }\n\n // A metric is the KPI tile itself.\n if (kind === 'metric') {\n const metric = body?.kind === 'metric' ? body : undefined\n const hint =\n state === 'error' ? (\n <span className=\"text-destructive\">\n {l.error}\n {errorDetail && ` ${errorDetail}`}\n </span>\n ) : state === 'empty' ? (\n l.empty\n ) : (\n description\n )\n return (\n <div className={cn('relative h-full', className)} data-slot=\"dashboard-panel\">\n <MetricCard\n label={title}\n value={\n metric && metric.value !== null && state === 'ready' ? metric.format(metric.value) : '—'\n }\n hint={hint}\n isLoading={state === 'loading'}\n accent={metricAccent}\n className=\"h-full\"\n testId={testId}\n />\n {actions && <div className=\"absolute right-2 top-2 flex gap-1\">{actions}</div>}\n </div>\n )\n }\n\n let content: ReactNode\n if (state === 'loading') {\n content = (\n <div className=\"h-60 animate-pulse rounded-md bg-muted\" data-slot=\"panel-loading\" aria-busy />\n )\n } else if (state === 'error') {\n content = (\n <Message\n tone=\"error\"\n text={l.error}\n detail={errorDetail}\n testId={testId && `${testId}-error`}\n />\n )\n } else if (state === 'empty' || !body || body.kind === 'metric') {\n content = (\n <Message\n tone=\"empty\"\n text={l.empty}\n action={emptyAction}\n testId={testId && `${testId}-empty`}\n />\n )\n } else if (body.kind === 'chart') {\n content = (\n <ChartRenderer\n model={body.model}\n ariaLabel={title}\n labels={l}\n testId={testId && `${testId}-chart`}\n />\n )\n } else if (body.kind === 'groups') {\n content = <ChartTable model={body.model} caption={title} />\n } else {\n content = (\n <RecordsTable\n fields={body.fields}\n rows={body.rows}\n maxRows={maxRows}\n l={l}\n formatters={formatters}\n testId={testId}\n />\n )\n }\n\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-sm font-semibold text-foreground\">{title}</h3>\n {description && <p className=\"mt-0.5 text-xs text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 gap-1\">{actions}</div>}\n </div>\n )\n if (variant === 'plain') {\n return (\n <section\n className={cn('flex min-w-0 flex-col gap-3', className)}\n data-slot=\"dashboard-panel\"\n data-testid={testId}\n aria-busy={state === 'loading' || undefined}\n >\n {header}\n <div className=\"min-w-0\">{content}</div>\n </section>\n )\n }\n return (\n <Card\n variant=\"elevated\"\n className={cn('flex h-full min-w-0 flex-col gap-3 rounded-xl p-5', className)}\n data-slot=\"dashboard-panel\"\n data-testid={testId}\n aria-busy={state === 'loading' || undefined}\n >\n {header}\n <div className=\"min-w-0 flex-1\">{content}</div>\n </Card>\n )\n}\n","/**\n * `DashboardPanel`: one panel of a dashboard, from its `PanelSpec`. It looks its source up in the\n * host's registry (`useDataSources`), reads the dataset the spec asks for (`usePanelDataset`:\n * grouped and measured by the source) and shows it through `PanelView`.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport {\n formatGbp,\n useDataSources,\n usePanelDataset,\n type DataSource,\n type PanelSpec,\n} from '@arbidocs/react'\nimport { Button } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { formatBytes } from '../storage/storage-labels'\nimport {\n chartModelOf,\n DEFAULT_UNIT_FORMATTERS,\n formatterOf,\n metricValueOf,\n type DrawnChartType,\n type UnitFormatters,\n} from '../../dashboards/chartModel'\nimport { PanelView, type PanelBody, type PanelViewLabels } from '../../dashboards/PanelView'\n\n/** The package's formatters: the one £ formatter for AI usage, and file sizes. */\nexport const PANEL_FORMATTERS: UnitFormatters = {\n ...DEFAULT_UNIT_FORMATTERS,\n gbp: (v) => formatGbp(v),\n bytes: (v) => formatBytes(v),\n}\n\nexport interface DashboardPanelLabels extends PanelViewLabels {\n /** A panel whose source the host does not offer. */\n unknownSource: (id: string) => string\n /** The empty state's link to the databases (where data is created or imported). */\n openDatabases: string\n}\n\nexport const DEFAULT_DASHBOARD_PANEL_LABELS: Partial<DashboardPanelLabels> = {\n unknownSource: (id) => `This panel reads “${id}”, which is not available here.`,\n openDatabases: 'Open databases',\n}\n\nexport interface DashboardPanelProps {\n panel: PanelSpec\n /** Buttons in the panel's corner (a dashboard being edited). */\n actions?: ReactNode\n /** Don't read data (an editor showing the panel's frame only). */\n enabled?: boolean\n /** `plain`: no card around it (a chart placed in a page). */\n variant?: 'card' | 'plain'\n formatters?: UnitFormatters\n labels?: Partial<DashboardPanelLabels>\n className?: string\n testId?: string\n}\n\nconst DRAWN = new Set(['bar', 'line', 'area', 'pie', 'donut'])\n\nfunction kindOf(panel: PanelSpec): 'metric' | 'chart' | 'table' {\n return panel.chart.type === 'metric' ? 'metric' : panel.chart.type === 'table' ? 'table' : 'chart'\n}\n\nfunction SourcePanel({\n source,\n panel,\n actions,\n enabled,\n variant,\n formatters,\n labels,\n className,\n testId,\n}: DashboardPanelProps & { source: DataSource; labels: Partial<DashboardPanelLabels> }) {\n const environment = useBlocksEnvironment()\n const { chart } = panel\n const { dataset, fields, isLoading, error } = usePanelDataset(\n source,\n panel.source.params,\n chart,\n { enabled }\n )\n const body = useMemo((): PanelBody | undefined => {\n if (!dataset) return undefined\n const other = labels.other\n if (chart.type === 'metric') {\n const valueField = dataset.fields.find((f) => f.id === 'value')\n // Nothing matched: a count or a sum of nothing is 0; an average of nothing has no value.\n const op = chart.aggregate ?? 'count'\n return {\n kind: 'metric',\n value: metricValueOf(dataset) ?? (op === 'count' || op === 'sum' ? 0 : null),\n format: formatterOf(valueField, formatters),\n }\n }\n if (DRAWN.has(chart.type)) {\n return {\n kind: 'chart',\n model: chartModelOf({ ...chart, type: chart.type as DrawnChartType }, dataset, {\n fields,\n formatters,\n otherLabel: other,\n }),\n }\n }\n if (chart.x) {\n return {\n kind: 'groups',\n model: chartModelOf({ ...chart, type: 'bar' }, dataset, {\n fields,\n formatters,\n otherLabel: other,\n }),\n }\n }\n const shown = chart.columns?.length\n ? chart.columns.flatMap((id) => dataset.fields.filter((f) => f.id === id))\n : dataset.fields\n return { kind: 'records', fields: shown, rows: dataset.rows }\n }, [dataset, chart, fields, formatters, labels.other])\n\n const state = error\n ? 'error'\n : !dataset\n ? isLoading\n ? 'loading'\n : 'empty'\n : chart.type !== 'metric' && dataset.rows.length === 0\n ? 'empty'\n : 'ready'\n\n const emptyAction =\n source.id === 'database' && environment.openDatabases ? (\n <Button variant=\"outline\" size=\"sm\" onClick={() => environment.openDatabases?.()}>\n {labels.openDatabases}\n </Button>\n ) : undefined\n\n return (\n <PanelView\n kind={kindOf(panel)}\n title={panel.title}\n description={panel.description}\n state={state}\n body={body}\n errorDetail={error instanceof Error ? error.message : undefined}\n emptyAction={emptyAction}\n actions={actions}\n variant={variant}\n formatters={formatters}\n labels={labels}\n className={className}\n testId={testId}\n />\n )\n}\n\nexport function DashboardPanel({\n formatters = PANEL_FORMATTERS,\n labels,\n ...props\n}: DashboardPanelProps) {\n const registry = useDataSources()\n const l = { ...DEFAULT_DASHBOARD_PANEL_LABELS, ...labels }\n const source = registry.get(props.panel.source.id)\n if (!source) {\n return (\n <PanelView\n kind={kindOf(props.panel)}\n title={props.panel.title}\n state=\"error\"\n errorDetail={l.unknownSource?.(props.panel.source.id)}\n actions={props.actions}\n labels={l}\n className={props.className}\n testId={props.testId}\n />\n )\n }\n // Keyed by source: a source's hooks differ from another's, so a new source mounts afresh.\n return (\n <SourcePanel key={source.id} source={source} formatters={formatters} labels={l} {...props} />\n )\n}\n","/**\n * `PanelEditor`: build a panel without code. Pick a source (and its parameters: a database, one of\n * its saved views), how to show it, then what to group by, split by and measure, from the source's\n * own fields. Every choice is a field of the `PanelSpec`, previewed live underneath.\n */\nimport { useId, useMemo, type ReactNode } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport {\n useDataSources,\n type AggregateOp,\n type ChartSpec,\n type ChartType,\n type DataSource,\n type DataSourceParam,\n type DataSourceParams,\n type DatasetField,\n type DatasetFilter,\n type DatasetSort,\n type FilterOp,\n type PanelSpec,\n type TimeBucket,\n} from '@arbidocs/react'\nimport {\n Button,\n cn,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from '@arbidocs/react/ui'\nimport { clampPanelWidth } from '../../dashboards/DashboardGrid'\nimport { DashboardPanel } from './DashboardPanel'\n\nexport interface PanelEditorLabels {\n title: string\n description: string\n source: string\n showAs: string\n types: Record<ChartType, string>\n groupBy: string\n groupByNone: string\n /** A table without \"group by\" lists the records. */\n groupByRecords: string\n bucket: string\n buckets: Record<TimeBucket, string>\n splitBy: string\n splitByNone: string\n measure: string\n aggregates: Record<AggregateOp, string>\n ofField: string\n stacked: string\n sort: string\n sorts: Record<DatasetSort, string>\n limit: string\n /** A table of records: the fields shown. */\n columns: string\n orderBy: string\n orderNone: string\n directions: { asc: string; desc: string }\n width: string\n widths: Record<'3' | '4' | '6' | '8' | '12', string>\n filters: string\n addFilter: string\n removeFilter: string\n filterOps: Record<FilterOp, string>\n filterField: string\n filterOp: string\n filterValue: string\n noFields: string\n preview: string\n}\n\nexport const DEFAULT_PANEL_EDITOR_LABELS: PanelEditorLabels = {\n title: 'Title',\n description: 'Description',\n source: 'Data',\n showAs: 'Show as',\n types: {\n metric: 'Number',\n bar: 'Bar chart',\n line: 'Line chart',\n area: 'Area chart',\n pie: 'Pie chart',\n donut: 'Donut chart',\n table: 'Table',\n },\n groupBy: 'Group by',\n groupByNone: 'Choose a field',\n groupByRecords: 'Nothing: list the records',\n bucket: 'Per',\n buckets: { day: 'Day', week: 'Week', month: 'Month', quarter: 'Quarter', year: 'Year' },\n splitBy: 'Split by',\n splitByNone: 'Nothing',\n measure: 'Measure',\n aggregates: { count: 'Count', sum: 'Sum', avg: 'Average', min: 'Minimum', max: 'Maximum' },\n ofField: 'Of',\n stacked: 'Stack the series',\n sort: 'Order',\n sorts: { label: 'By name or date', 'value-desc': 'Largest first', 'value-asc': 'Smallest first' },\n limit: 'At most',\n columns: 'Columns',\n orderBy: 'Order by',\n orderNone: 'As read',\n directions: { asc: 'Ascending', desc: 'Descending' },\n width: 'Width',\n widths: { '3': 'Quarter', '4': 'Third', '6': 'Half', '8': 'Two thirds', '12': 'Full width' },\n filters: 'Only where',\n addFilter: 'Add a condition',\n removeFilter: 'Remove the condition',\n filterOps: {\n eq: 'is',\n neq: 'is not',\n contains: 'contains',\n gt: 'is above',\n gte: 'is at least',\n lt: 'is below',\n lte: 'is at most',\n empty: 'is empty',\n not_empty: 'is not empty',\n },\n filterField: 'Field',\n filterOp: 'Condition',\n filterValue: 'Value',\n noFields: 'Choose the data first.',\n preview: 'Preview',\n}\n\nexport interface PanelEditorProps {\n value: PanelSpec\n onChange: (panel: PanelSpec) => void\n /** Show the panel live under the form. Default true. */\n preview?: boolean\n /** Offer the width (a dashboard's grid). Default true. */\n showWidth?: boolean\n labels?: Partial<PanelEditorLabels>\n testId?: string\n}\n\n/** A select of the editor; `''` is \"nothing chosen\" (Radix items cannot take an empty value). */\nconst NONE = '__none'\n\nfunction Field({\n label,\n htmlFor,\n children,\n}: {\n label: string\n htmlFor?: string\n children: ReactNode\n}) {\n return (\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n <Label htmlFor={htmlFor} className=\"text-xs font-medium text-muted-foreground\">\n {label}\n </Label>\n {children}\n </div>\n )\n}\n\nfunction EditorSelect({\n label,\n value,\n onChange,\n options,\n placeholder,\n none,\n testId,\n}: {\n label: string\n value: string | undefined\n onChange: (value: string | undefined) => void\n options: readonly { value: string; label: string }[]\n placeholder?: string\n /** Offer \"nothing\" with these words. */\n none?: string\n testId?: string\n}) {\n const id = useId()\n return (\n <Field label={label} htmlFor={id}>\n <div data-testid={testId}>\n <Select\n value={value ?? (none ? NONE : '')}\n onValueChange={(v) => onChange(v === NONE ? undefined : v)}\n >\n <SelectTrigger id={id} className=\"bg-card text-sm\" aria-label={label}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {none && <SelectItem value={NONE}>{none}</SelectItem>}\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </Field>\n )\n}\n\nfunction ParamField({\n param,\n params,\n onChange,\n testId,\n}: {\n param: DataSourceParam\n params: DataSourceParams\n onChange: (value: string | undefined) => void\n testId?: string\n}) {\n const { options } = param.useOptions(params)\n const value = params[param.id]\n return (\n <EditorSelect\n label={param.label}\n value={typeof value === 'string' && value ? value : undefined}\n onChange={onChange}\n options={options}\n placeholder={param.placeholder}\n none={param.required ? undefined : (param.placeholder ?? '—')}\n testId={testId}\n />\n )\n}\n\nconst WIDTHS = ['3', '4', '6', '8', '12'] as const\nconst NEEDS_VALUE = (op: FilterOp) => op !== 'empty' && op !== 'not_empty'\n\nfunction ChartFields({\n source,\n value,\n onChange,\n showWidth,\n l,\n testId,\n}: {\n source: DataSource\n value: PanelSpec\n onChange: (panel: PanelSpec) => void\n showWidth: boolean\n l: PanelEditorLabels\n testId?: string\n}) {\n const params = value.source.params ?? {}\n const { fields } = source.useFields(params)\n const chart = value.chart\n const setChart = (patch: Partial<ChartSpec>) =>\n onChange({ ...value, chart: { ...chart, ...patch } })\n const byId = useMemo(() => new Map(fields.map((f) => [f.id, f])), [fields])\n const groupable = fields.filter((f) => f.type !== 'number')\n const numbers = fields.filter((f) => f.type === 'number')\n const opts = (list: readonly DatasetField[]) => list.map((f) => ({ value: f.id, label: f.label }))\n const x = chart.x ? byId.get(chart.x) : undefined\n const aggregate = chart.aggregate ?? 'count'\n const isMetric = chart.type === 'metric'\n const isRecords = chart.type === 'table' && !chart.x\n const canSplit = chart.type === 'bar' || chart.type === 'line' || chart.type === 'area'\n const filters = chart.filters ?? []\n const setFilter = (i: number, patch: Partial<DatasetFilter>) =>\n setChart({ filters: filters.map((f, j) => (j === i ? { ...f, ...patch } : f)) })\n\n return (\n <>\n <EditorSelect\n label={l.showAs}\n value={chart.type}\n onChange={(type) => setChart({ type: (type ?? 'bar') as ChartType })}\n options={(Object.keys(l.types) as ChartType[]).map((t) => ({\n value: t,\n label: l.types[t],\n }))}\n testId={testId && `${testId}-type`}\n />\n {!isMetric && (\n <EditorSelect\n label={l.groupBy}\n value={chart.x}\n onChange={(x) => setChart({ x })}\n options={opts(groupable)}\n placeholder={l.groupByNone}\n none={chart.type === 'table' ? l.groupByRecords : undefined}\n testId={testId && `${testId}-x`}\n />\n )}\n {!isMetric && x?.type === 'date' && (\n <EditorSelect\n label={l.bucket}\n value={chart.bucket ?? 'month'}\n onChange={(bucket) => setChart({ bucket: (bucket ?? 'month') as TimeBucket })}\n options={(Object.keys(l.buckets) as TimeBucket[]).map((b) => ({\n value: b,\n label: l.buckets[b],\n }))}\n testId={testId && `${testId}-bucket`}\n />\n )}\n {canSplit && (\n <EditorSelect\n label={l.splitBy}\n value={chart.series}\n onChange={(series) => setChart({ series })}\n options={opts(groupable.filter((f) => f.id !== chart.x))}\n none={l.splitByNone}\n testId={testId && `${testId}-series`}\n />\n )}\n {!isRecords && (\n <div className=\"grid grid-cols-2 gap-3\">\n <EditorSelect\n label={l.measure}\n value={aggregate}\n onChange={(op) => {\n const next = (op ?? 'count') as AggregateOp\n setChart({\n aggregate: next,\n y: next === 'count' ? undefined : (chart.y ?? numbers[0]?.id),\n })\n }}\n options={(Object.keys(l.aggregates) as AggregateOp[])\n .filter((op) => op === 'count' || numbers.length > 0)\n .map((op) => ({ value: op, label: l.aggregates[op] }))}\n testId={testId && `${testId}-aggregate`}\n />\n {aggregate !== 'count' && (\n <EditorSelect\n label={l.ofField}\n value={chart.y}\n onChange={(y) => setChart({ y })}\n options={opts(numbers)}\n testId={testId && `${testId}-y`}\n />\n )}\n </div>\n )}\n {canSplit && chart.series && chart.type !== 'line' && (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch\n checked={Boolean(chart.stacked)}\n onCheckedChange={(stacked) => setChart({ stacked })}\n data-testid={testId && `${testId}-stacked`}\n />\n {l.stacked}\n </label>\n )}\n {!isMetric && !isRecords && (\n <div className=\"grid grid-cols-2 gap-3\">\n <EditorSelect\n label={l.sort}\n value={chart.sort ?? (x?.type === 'date' ? 'label' : 'value-desc')}\n onChange={(sort) => setChart({ sort: sort as DatasetSort })}\n options={(Object.keys(l.sorts) as DatasetSort[]).map((s) => ({\n value: s,\n label: l.sorts[s],\n }))}\n testId={testId && `${testId}-sort`}\n />\n <Field label={l.limit}>\n <Input\n type=\"number\"\n min={1}\n max={500}\n value={chart.limit ?? ''}\n placeholder=\"50\"\n onChange={(e) =>\n setChart({\n limit: e.target.value ? Math.max(1, Number(e.target.value)) : undefined,\n })\n }\n data-testid={testId && `${testId}-limit`}\n />\n </Field>\n </div>\n )}\n {isRecords && (\n <fieldset className=\"flex flex-col gap-1.5\" data-testid={testId && `${testId}-columns`}>\n <legend className=\"mb-1.5 text-xs font-medium text-muted-foreground\">{l.columns}</legend>\n {fields.map((field) => {\n const shown = chart.columns ?? fields.map((f) => f.id)\n const checked = shown.includes(field.id)\n return (\n <label key={field.id} className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() =>\n setChart({\n columns: checked\n ? shown.filter((id) => id !== field.id)\n : fields\n .map((f) => f.id)\n .filter((id) => id === field.id || shown.includes(id)),\n })\n }\n />\n {field.label}\n </label>\n )\n })}\n </fieldset>\n )}\n {isRecords && (\n <div className=\"grid grid-cols-2 gap-3\">\n <EditorSelect\n label={l.orderBy}\n value={chart.orderBy?.field}\n onChange={(field) =>\n setChart({\n orderBy: field\n ? { field, direction: chart.orderBy?.direction ?? 'asc' }\n : undefined,\n })\n }\n options={opts(fields)}\n none={l.orderNone}\n testId={testId && `${testId}-order`}\n />\n {chart.orderBy && (\n <EditorSelect\n label={l.orderBy}\n value={chart.orderBy.direction ?? 'asc'}\n onChange={(direction) =>\n setChart({\n orderBy: {\n field: chart.orderBy?.field ?? '',\n direction: direction === 'desc' ? 'desc' : 'asc',\n },\n })\n }\n options={[\n { value: 'asc', label: l.directions.asc },\n { value: 'desc', label: l.directions.desc },\n ]}\n testId={testId && `${testId}-direction`}\n />\n )}\n </div>\n )}\n <div className=\"flex flex-col gap-2\" data-testid={testId && `${testId}-filters`}>\n <span className=\"text-xs font-medium text-muted-foreground\">{l.filters}</span>\n {filters.map((filter, i) => (\n <div key={i} className=\"grid grid-cols-[1fr_1fr_1fr_auto] items-end gap-2\">\n <EditorSelect\n label={l.filterField}\n value={filter.field}\n onChange={(field) => setFilter(i, { field: field ?? '' })}\n options={opts(fields)}\n />\n <EditorSelect\n label={l.filterOp}\n value={filter.op}\n onChange={(op) => setFilter(i, { op: (op ?? 'eq') as FilterOp })}\n options={(Object.keys(l.filterOps) as FilterOp[]).map((op) => ({\n value: op,\n label: l.filterOps[op],\n }))}\n />\n {NEEDS_VALUE(filter.op) ? (\n <Field label={l.filterValue}>\n <Input\n value={\n filter.value === null || filter.value === undefined ? '' : String(filter.value)\n }\n type={byId.get(filter.field)?.type === 'number' ? 'number' : 'text'}\n onChange={(e) =>\n setFilter(i, {\n value:\n byId.get(filter.field)?.type === 'number' && e.target.value !== ''\n ? Number(e.target.value)\n : e.target.value,\n })\n }\n />\n </Field>\n ) : (\n <span />\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.removeFilter}\n onClick={() => setChart({ filters: filters.filter((_, j) => j !== i) })}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"self-start\"\n disabled={!fields.length}\n onClick={() =>\n setChart({ filters: [...filters, { field: fields[0]?.id ?? '', op: 'eq', value: '' }] })\n }\n >\n <Plus className=\"size-3.5\" /> {l.addFilter}\n </Button>\n </div>\n {showWidth && (\n <EditorSelect\n label={l.width}\n value={String(clampPanelWidth(value.width))}\n onChange={(w) => onChange({ ...value, width: Number(w ?? 6) })}\n options={WIDTHS.map((w) => ({ value: w, label: l.widths[w] }))}\n testId={testId && `${testId}-width`}\n />\n )}\n {!fields.length && <p className=\"text-sm text-muted-foreground\">{l.noFields}</p>}\n </>\n )\n}\n\nexport function PanelEditor({\n value,\n onChange,\n preview = true,\n showWidth = true,\n labels,\n testId,\n}: PanelEditorProps) {\n const l = { ...DEFAULT_PANEL_EDITOR_LABELS, ...labels }\n const registry = useDataSources()\n const source = registry.get(value.source.id)\n const params = value.source.params ?? {}\n const titleId = useId()\n const descriptionId = useId()\n\n return (\n <div\n className={cn(\n 'grid min-w-0 gap-6',\n preview && 'lg:grid-cols-[minmax(0,22rem)_minmax(0,1fr)]'\n )}\n data-testid={testId}\n >\n <div className=\"flex min-w-0 flex-col gap-4\">\n <Field label={l.title} htmlFor={titleId}>\n <Input\n id={titleId}\n value={value.title}\n onChange={(e) => onChange({ ...value, title: e.target.value })}\n data-testid={testId && `${testId}-title`}\n />\n </Field>\n <Field label={l.description} htmlFor={descriptionId}>\n <Input\n id={descriptionId}\n value={value.description ?? ''}\n onChange={(e) => onChange({ ...value, description: e.target.value || undefined })}\n />\n </Field>\n <EditorSelect\n label={l.source}\n value={value.source.id}\n onChange={(id) =>\n onChange({\n ...value,\n source: { id: id ?? value.source.id },\n // Another source has other fields: what was grouped and measured no longer applies.\n chart: { type: value.chart.type },\n })\n }\n options={registry.list.map((s) => ({ value: s.id, label: s.label }))}\n testId={testId && `${testId}-source`}\n />\n {source?.description && (\n <p className=\"-mt-2 text-xs text-muted-foreground\">{source.description}</p>\n )}\n {source?.params?.map((param) => (\n <ParamField\n key={`${source.id}-${param.id}`}\n param={param}\n params={params}\n testId={testId && `${testId}-param-${param.id}`}\n onChange={(v) =>\n onChange({\n ...value,\n source: { ...value.source, params: { ...params, [param.id]: v ?? null } },\n // A different database has other columns.\n ...(param.id === 'databaseId' || param.id === 'view'\n ? { chart: { type: value.chart.type } }\n : {}),\n })\n }\n />\n ))}\n {source && (\n <ChartFields\n key={source.id}\n source={source}\n value={value}\n onChange={onChange}\n showWidth={showWidth}\n l={l}\n testId={testId}\n />\n )}\n </div>\n {preview && (\n <div className=\"flex min-w-0 flex-col gap-2 self-start lg:sticky lg:top-0\">\n <span className=\"text-xs font-medium text-muted-foreground\">{l.preview}</span>\n <DashboardPanel panel={value} testId={testId && `${testId}-preview`} />\n </div>\n )}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/dashboards/DashboardGrid.tsx","../src/dashboards/ChartRenderer.tsx","../src/dashboards/PanelView.tsx","../src/connection/dashboards/DashboardPanel.tsx","../src/connection/dashboards/PanelEditor.tsx"],"names":["jsx","cn","lazy","jsxs","sliceColors","useState","useId","Suspense","formatterOf","fmtDate","DataTable","AlertTriangle","ChartNoAxesColumn","MetricCard","Card","DEFAULT_UNIT_FORMATTERS","formatGbp","formatBytes","useBlocksEnvironment","usePanelDataset","useMemo","metricValueOf","chartModelOf","Button","useDataSources","Label","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Fragment","x","Switch","Input","X","Plus"],"mappings":"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","file":"chunk-D35EHOK5.cjs","sourcesContent":["/**\n * `DashboardGrid`: a responsive 12-column grid of panels. Each child spans `width` columns on a wide\n * screen and the full width on a phone, where panels stack in order.\n */\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\n/** Literal classes (the stylesheet is generated from the source): `md:col-span-1…12`. */\nconst SPANS = [\n 'md:col-span-1',\n 'md:col-span-2',\n 'md:col-span-3',\n 'md:col-span-4',\n 'md:col-span-5',\n 'md:col-span-6',\n 'md:col-span-7',\n 'md:col-span-8',\n 'md:col-span-9',\n 'md:col-span-10',\n 'md:col-span-11',\n 'md:col-span-12',\n] as const\n\n/** A width in grid columns, kept within 1…12 (default 6, half the row). */\nexport function clampPanelWidth(width: number | undefined): number {\n return Math.min(12, Math.max(1, Math.round(width ?? 6)))\n}\n\nexport interface DashboardGridProps {\n children?: ReactNode\n className?: string\n testId?: string\n}\n\n/** The grid. Wrap each panel in a `DashboardCell`. */\nexport function DashboardGrid({ children, className, testId }: DashboardGridProps) {\n return (\n <div\n className={cn('grid grid-cols-1 gap-4 md:grid-cols-12', className)}\n data-slot=\"dashboard\"\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n\n/** One cell of the grid, `width` columns wide on a wide screen. */\nexport function DashboardCell({\n width,\n children,\n className,\n}: {\n width?: number\n children?: ReactNode\n className?: string\n}) {\n return (\n <div\n className={cn('col-span-1 min-w-0', SPANS[clampPanelWidth(width) - 1], className)}\n data-slot=\"dashboard-cell\"\n >\n {children}\n </div>\n )\n}\n","/**\n * `ChartRenderer`: draws a `ChartModel`. The drawing library is loaded on demand (a skeleton shows\n * meanwhile), so a page fetches it only when a chart is on screen. Beside the drawing: a legend in\n * the theme's text colours, and a table of the same values one click away (for screen readers,\n * copying, or when colours are hard to tell apart).\n */\nimport { lazy, Suspense, useId, useState } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { sliceColors, type ChartModel } from './chartModel'\n\nconst RechartsRenderer = lazy(() => import('./RechartsRenderer'))\n\nexport interface ChartRendererLabels {\n showTable: string\n showChart: string\n other: string\n}\n\nexport const DEFAULT_CHART_RENDERER_LABELS: ChartRendererLabels = {\n showTable: 'Show table',\n showChart: 'Show chart',\n other: 'Other',\n}\n\nexport interface ChartRendererProps {\n model: ChartModel\n ariaLabel: string\n /** The plot's height in px. Default 240. */\n height?: number\n /** Start on the table. */\n defaultView?: 'chart' | 'table'\n labels?: Partial<ChartRendererLabels>\n className?: string\n testId?: string\n}\n\n/** The values as a table: a row per category, a column per series. */\nexport function ChartTable({\n model,\n caption,\n id,\n}: {\n model: ChartModel\n caption: string\n id?: string\n}) {\n return (\n <div className=\"max-h-72 overflow-auto\">\n <table id={id} className=\"w-full text-left text-xs\" data-slot=\"chart-table\">\n <caption className=\"sr-only\">{caption}</caption>\n <thead>\n <tr className=\"border-b border-border text-muted-foreground\">\n <th scope=\"col\" className=\"py-1.5 pr-3 font-medium\">\n {model.xLabel}\n </th>\n {model.series.map((s) => (\n <th key={s.id} scope=\"col\" className=\"py-1.5 pr-3 text-right font-medium\">\n {s.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {model.categories.map((category, i) => (\n <tr key={`${category}-${i}`} className=\"border-b border-border/60 last:border-0\">\n <th scope=\"row\" className=\"py-1.5 pr-3 font-normal text-foreground\">\n {category}\n </th>\n {model.series.map((s) => (\n <td key={s.id} className=\"py-1.5 pr-3 text-right tabular-nums text-foreground\">\n {s.values[i] === null ? '–' : model.format(s.values[i] as number)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction Legend({ model, other }: { model: ChartModel; other: string }) {\n const pie = model.type === 'pie' || model.type === 'donut'\n const items = pie\n ? model.categories.map((label, i) => ({ label, color: sliceColors(model, other)[i] }))\n : model.series.map((s) => ({ label: s.label, color: s.color }))\n if (!pie && items.length < 2) return null\n return (\n <ul className=\"flex flex-wrap justify-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n {items.map((item, i) => (\n <li key={`${item.label}-${i}`} className=\"inline-flex items-center gap-1.5\">\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-2 rounded-full\"\n style={{ background: item.color }}\n />\n {item.label}\n </li>\n ))}\n </ul>\n )\n}\n\nexport function ChartRenderer({\n model,\n ariaLabel,\n height = 240,\n defaultView = 'chart',\n labels,\n className,\n testId,\n}: ChartRendererProps) {\n const l = { ...DEFAULT_CHART_RENDERER_LABELS, ...labels }\n const [view, setView] = useState(defaultView)\n const tableId = useId()\n return (\n <figure\n className={cn('flex min-w-0 max-w-full flex-col gap-2', className)}\n data-slot=\"dashboard-chart\"\n data-type={model.type}\n data-testid={testId}\n >\n {view === 'table' ? (\n <ChartTable model={model} caption={ariaLabel} id={tableId} />\n ) : (\n <div className=\"min-w-0\" style={{ height }} role=\"figure\" aria-label={ariaLabel}>\n <Suspense\n fallback={\n <div\n className=\"size-full animate-pulse rounded-md bg-muted\"\n data-slot=\"chart-loading\"\n />\n }\n >\n <RechartsRenderer\n model={model}\n ariaLabel={ariaLabel}\n height={height}\n otherLabel={l.other}\n />\n </Suspense>\n </div>\n )}\n <figcaption className=\"flex flex-wrap items-center justify-between gap-2\">\n <Legend model={model} other={l.other} />\n <button\n type=\"button\"\n className=\"ml-auto rounded-sm text-xs text-muted-foreground underline-offset-2 hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring print:hidden\"\n aria-controls={view === 'table' ? tableId : undefined}\n aria-pressed={view === 'table'}\n onClick={() => setView(view === 'table' ? 'chart' : 'table')}\n >\n {view === 'table' ? l.showChart : l.showTable}\n </button>\n </figcaption>\n </figure>\n )\n}\n","/**\n * `PanelView`: one dashboard panel as it looks, from data already in hand: a metric tile, a chart\n * or a table, each with its loading, empty and error state. Presentational: `DashboardPanel` reads\n * the data and renders this.\n */\nimport type { ReactNode } from 'react'\nimport { AlertTriangle, ChartNoAxesColumn } from 'lucide-react'\nimport type { DatasetField, DatasetRow, DatasetValue } from '@arbidocs/react'\nimport { Card, cn } from '@arbidocs/react/ui'\nimport { DataTable, type Column } from '../components/DataTable'\nimport { MetricCard } from '../components/MetricCard'\nimport { fmtDate } from '../lib/format'\nimport { ChartRenderer, ChartTable, type ChartRendererLabels } from './ChartRenderer'\nimport { formatterOf, type ChartModel, type UnitFormatters } from './chartModel'\n\nexport type PanelState = 'loading' | 'empty' | 'error' | 'ready'\n\nexport interface PanelViewLabels extends ChartRendererLabels {\n empty: string\n error: string\n /** Under a table cut short: \"Showing 50 of 1,200 rows\". */\n showingRows: (shown: number, total: number) => string\n yes: string\n no: string\n}\n\nexport const DEFAULT_PANEL_VIEW_LABELS: PanelViewLabels = {\n showTable: 'Show table',\n showChart: 'Show chart',\n other: 'Other',\n empty: 'Nothing to show yet.',\n error: 'This panel could not be loaded.',\n showingRows: (shown, total) =>\n `Showing ${shown.toLocaleString('en-GB')} of ${total.toLocaleString('en-GB')} rows`,\n yes: 'Yes',\n no: 'No',\n}\n\n/** What a panel shows when ready. */\nexport type PanelBody =\n | { kind: 'metric'; value: number | null; format: (value: number) => string }\n | { kind: 'chart'; model: ChartModel }\n /** A table of groups (a chart model shown as a table). */\n | { kind: 'groups'; model: ChartModel }\n /** A table of records. */\n | { kind: 'records'; fields: readonly DatasetField[]; rows: readonly DatasetRow[] }\n\nexport interface PanelViewProps {\n /** What the panel is (it shows as one before its data is in). */\n kind: 'metric' | 'chart' | 'table'\n title: string\n description?: string\n state: PanelState\n body?: PanelBody\n /** The error's own words, shown under the panel's. */\n errorDetail?: string\n /** Shown in the empty state (a link to where data comes from). */\n emptyAction?: ReactNode\n /** Buttons in the panel's corner (edit, remove), for a dashboard being edited. */\n actions?: ReactNode\n /** A metric's tile, with the theme accent token of its icon. */\n metricAccent?: string\n /** `card` (default): a card with the title; `plain`: no card (a chart placed in a page). */\n variant?: 'card' | 'plain'\n /** Most records a table shows. Default 50. */\n maxRows?: number\n formatters?: UnitFormatters\n labels?: Partial<PanelViewLabels>\n className?: string\n testId?: string\n}\n\nfunction cellText(\n value: DatasetValue | undefined,\n field: DatasetField,\n l: PanelViewLabels,\n formatters?: UnitFormatters\n): string {\n if (value === null || value === undefined || value === '') return '–'\n if (Array.isArray(value)) return value.join(', ')\n if (typeof value === 'boolean') return value ? l.yes : l.no\n if (field.type === 'number' && typeof value === 'number')\n return formatterOf(field, formatters)(value)\n if (field.type === 'date' && typeof value === 'string') return fmtDate(value)\n return String(value)\n}\n\nfunction RecordsTable({\n fields,\n rows,\n maxRows,\n l,\n formatters,\n testId,\n}: {\n fields: readonly DatasetField[]\n rows: readonly DatasetRow[]\n maxRows: number\n l: PanelViewLabels\n formatters?: UnitFormatters\n testId?: string\n}) {\n const shown = rows.slice(0, maxRows).map((row, i) => ({ row, i }))\n const columns: Column<{ row: DatasetRow; i: number }>[] = fields.map((field) => ({\n key: field.id,\n header: field.label,\n align: field.type === 'number' ? 'right' : 'left',\n render: ({ row }) => cellText(row[field.id], field, l, formatters),\n className: field.type === 'number' ? 'tabular-nums' : undefined,\n }))\n return (\n <div className=\"space-y-1\">\n <div className=\"max-h-80 overflow-auto\">\n <DataTable\n columns={columns}\n rows={shown}\n getRowId={({ i }) => String(i)}\n area={testId ?? 'dashboard-panel'}\n emptyTitle={l.empty}\n className=\"border-0\"\n />\n </div>\n {rows.length > maxRows && (\n <p className=\"text-xs text-muted-foreground\">{l.showingRows(maxRows, rows.length)}</p>\n )}\n </div>\n )\n}\n\nfunction Message({\n tone,\n text,\n detail,\n action,\n testId,\n}: {\n tone: 'empty' | 'error'\n text: string\n detail?: string\n action?: ReactNode\n testId?: string\n}) {\n const Icon = tone === 'error' ? AlertTriangle : ChartNoAxesColumn\n return (\n <div\n className=\"flex min-h-40 flex-col items-center justify-center gap-2 py-6 text-center\"\n role={tone === 'error' ? 'alert' : undefined}\n data-testid={testId}\n >\n <Icon\n className={cn('size-6', tone === 'error' ? 'text-destructive' : 'text-muted-foreground/50')}\n />\n <p className={cn('text-sm', tone === 'error' ? 'text-destructive' : 'text-muted-foreground')}>\n {text}\n </p>\n {detail && <p className=\"max-w-sm text-xs text-muted-foreground\">{detail}</p>}\n {action}\n </div>\n )\n}\n\nexport function PanelView({\n kind,\n title,\n description,\n state,\n body,\n errorDetail,\n emptyAction,\n actions,\n metricAccent,\n variant = 'card',\n maxRows = 50,\n formatters,\n labels,\n className,\n testId,\n}: PanelViewProps) {\n const l = { ...DEFAULT_PANEL_VIEW_LABELS, ...labels }\n\n // A metric is the KPI tile itself.\n if (kind === 'metric') {\n const metric = body?.kind === 'metric' ? body : undefined\n const hint =\n state === 'error' ? (\n <span className=\"text-destructive\">\n {l.error}\n {errorDetail && ` ${errorDetail}`}\n </span>\n ) : state === 'empty' ? (\n l.empty\n ) : (\n description\n )\n return (\n <div className={cn('relative h-full', className)} data-slot=\"dashboard-panel\">\n <MetricCard\n label={title}\n value={\n metric && metric.value !== null && state === 'ready' ? metric.format(metric.value) : '—'\n }\n hint={hint}\n isLoading={state === 'loading'}\n accent={metricAccent}\n className=\"h-full\"\n testId={testId}\n />\n {actions && <div className=\"absolute right-2 top-2 flex gap-1\">{actions}</div>}\n </div>\n )\n }\n\n let content: ReactNode\n if (state === 'loading') {\n content = (\n <div className=\"h-60 animate-pulse rounded-md bg-muted\" data-slot=\"panel-loading\" aria-busy />\n )\n } else if (state === 'error') {\n content = (\n <Message\n tone=\"error\"\n text={l.error}\n detail={errorDetail}\n testId={testId && `${testId}-error`}\n />\n )\n } else if (state === 'empty' || !body || body.kind === 'metric') {\n content = (\n <Message\n tone=\"empty\"\n text={l.empty}\n action={emptyAction}\n testId={testId && `${testId}-empty`}\n />\n )\n } else if (body.kind === 'chart') {\n content = (\n <ChartRenderer\n model={body.model}\n ariaLabel={title}\n labels={l}\n testId={testId && `${testId}-chart`}\n />\n )\n } else if (body.kind === 'groups') {\n content = <ChartTable model={body.model} caption={title} />\n } else {\n content = (\n <RecordsTable\n fields={body.fields}\n rows={body.rows}\n maxRows={maxRows}\n l={l}\n formatters={formatters}\n testId={testId}\n />\n )\n }\n\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-sm font-semibold text-foreground\">{title}</h3>\n {description && <p className=\"mt-0.5 text-xs text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 gap-1\">{actions}</div>}\n </div>\n )\n if (variant === 'plain') {\n return (\n <section\n className={cn('flex min-w-0 flex-col gap-3', className)}\n data-slot=\"dashboard-panel\"\n data-testid={testId}\n aria-busy={state === 'loading' || undefined}\n >\n {header}\n <div className=\"min-w-0\">{content}</div>\n </section>\n )\n }\n return (\n <Card\n variant=\"elevated\"\n className={cn('flex h-full min-w-0 flex-col gap-3 rounded-xl p-5', className)}\n data-slot=\"dashboard-panel\"\n data-testid={testId}\n aria-busy={state === 'loading' || undefined}\n >\n {header}\n <div className=\"min-w-0 flex-1\">{content}</div>\n </Card>\n )\n}\n","/**\n * `DashboardPanel`: one panel of a dashboard, from its `PanelSpec`. It looks its source up in the\n * host's registry (`useDataSources`), reads the dataset the spec asks for (`usePanelDataset`:\n * grouped and measured by the source) and shows it through `PanelView`.\n */\nimport { useMemo, type ReactNode } from 'react'\nimport {\n formatGbp,\n useDataSources,\n usePanelDataset,\n type DataSource,\n type PanelSpec,\n} from '@arbidocs/react'\nimport { Button } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { formatBytes } from '../storage/storage-labels'\nimport {\n chartModelOf,\n DEFAULT_UNIT_FORMATTERS,\n formatterOf,\n metricValueOf,\n type DrawnChartType,\n type UnitFormatters,\n} from '../../dashboards/chartModel'\nimport { PanelView, type PanelBody, type PanelViewLabels } from '../../dashboards/PanelView'\n\n/** The package's formatters: the one £ formatter for AI usage, and file sizes. */\nexport const PANEL_FORMATTERS: UnitFormatters = {\n ...DEFAULT_UNIT_FORMATTERS,\n gbp: (v) => formatGbp(v),\n bytes: (v) => formatBytes(v),\n}\n\nexport interface DashboardPanelLabels extends PanelViewLabels {\n /** A panel whose source the host does not offer. */\n unknownSource: (id: string) => string\n /** The empty state's link to the databases (where data is created or imported). */\n openDatabases: string\n}\n\nexport const DEFAULT_DASHBOARD_PANEL_LABELS: Partial<DashboardPanelLabels> = {\n unknownSource: (id) => `This panel reads “${id}”, which is not available here.`,\n openDatabases: 'Open databases',\n}\n\nexport interface DashboardPanelProps {\n panel: PanelSpec\n /** Buttons in the panel's corner (a dashboard being edited). */\n actions?: ReactNode\n /** Don't read data (an editor showing the panel's frame only). */\n enabled?: boolean\n /** `plain`: no card around it (a chart placed in a page). */\n variant?: 'card' | 'plain'\n formatters?: UnitFormatters\n labels?: Partial<DashboardPanelLabels>\n className?: string\n testId?: string\n}\n\nconst DRAWN = new Set(['bar', 'line', 'area', 'pie', 'donut'])\n\nfunction kindOf(panel: PanelSpec): 'metric' | 'chart' | 'table' {\n return panel.chart.type === 'metric' ? 'metric' : panel.chart.type === 'table' ? 'table' : 'chart'\n}\n\nfunction SourcePanel({\n source,\n panel,\n actions,\n enabled,\n variant,\n formatters,\n labels,\n className,\n testId,\n}: DashboardPanelProps & { source: DataSource; labels: Partial<DashboardPanelLabels> }) {\n const environment = useBlocksEnvironment()\n const { chart } = panel\n const { dataset, fields, isLoading, error } = usePanelDataset(\n source,\n panel.source.params,\n chart,\n { enabled }\n )\n const body = useMemo((): PanelBody | undefined => {\n if (!dataset) return undefined\n const other = labels.other\n if (chart.type === 'metric') {\n const valueField = dataset.fields.find((f) => f.id === 'value')\n // Nothing matched: a count or a sum of nothing is 0; an average of nothing has no value.\n const op = chart.aggregate ?? 'count'\n return {\n kind: 'metric',\n value: metricValueOf(dataset) ?? (op === 'count' || op === 'sum' ? 0 : null),\n format: formatterOf(valueField, formatters),\n }\n }\n if (DRAWN.has(chart.type)) {\n return {\n kind: 'chart',\n model: chartModelOf({ ...chart, type: chart.type as DrawnChartType }, dataset, {\n fields,\n formatters,\n otherLabel: other,\n }),\n }\n }\n if (chart.x) {\n return {\n kind: 'groups',\n model: chartModelOf({ ...chart, type: 'bar' }, dataset, {\n fields,\n formatters,\n otherLabel: other,\n }),\n }\n }\n const shown = chart.columns?.length\n ? chart.columns.flatMap((id) => dataset.fields.filter((f) => f.id === id))\n : dataset.fields\n return { kind: 'records', fields: shown, rows: dataset.rows }\n }, [dataset, chart, fields, formatters, labels.other])\n\n const state = error\n ? 'error'\n : !dataset\n ? isLoading\n ? 'loading'\n : 'empty'\n : chart.type !== 'metric' && dataset.rows.length === 0\n ? 'empty'\n : 'ready'\n\n const emptyAction =\n source.id === 'database' && environment.openDatabases ? (\n <Button variant=\"outline\" size=\"sm\" onClick={() => environment.openDatabases?.()}>\n {labels.openDatabases}\n </Button>\n ) : undefined\n\n return (\n <PanelView\n kind={kindOf(panel)}\n title={panel.title}\n description={panel.description}\n state={state}\n body={body}\n errorDetail={error instanceof Error ? error.message : undefined}\n emptyAction={emptyAction}\n actions={actions}\n variant={variant}\n formatters={formatters}\n labels={labels}\n className={className}\n testId={testId}\n />\n )\n}\n\nexport function DashboardPanel({\n formatters = PANEL_FORMATTERS,\n labels,\n ...props\n}: DashboardPanelProps) {\n const registry = useDataSources()\n const l = { ...DEFAULT_DASHBOARD_PANEL_LABELS, ...labels }\n const source = registry.get(props.panel.source.id)\n if (!source) {\n return (\n <PanelView\n kind={kindOf(props.panel)}\n title={props.panel.title}\n state=\"error\"\n errorDetail={l.unknownSource?.(props.panel.source.id)}\n actions={props.actions}\n labels={l}\n className={props.className}\n testId={props.testId}\n />\n )\n }\n // Keyed by source: a source's hooks differ from another's, so a new source mounts afresh.\n return (\n <SourcePanel key={source.id} source={source} formatters={formatters} labels={l} {...props} />\n )\n}\n","/**\n * `PanelEditor`: build a panel without code. Pick a source (and its parameters: a database, one of\n * its saved views), how to show it, then what to group by, split by and measure, from the source's\n * own fields. Every choice is a field of the `PanelSpec`, previewed live underneath.\n */\nimport { useId, useMemo, type ReactNode } from 'react'\nimport { Plus, X } from 'lucide-react'\nimport {\n useDataSources,\n type AggregateOp,\n type ChartSpec,\n type ChartType,\n type DataSource,\n type DataSourceParam,\n type DataSourceParams,\n type DatasetField,\n type DatasetFilter,\n type DatasetSort,\n type FilterOp,\n type PanelSpec,\n type TimeBucket,\n} from '@arbidocs/react'\nimport {\n Button,\n cn,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from '@arbidocs/react/ui'\nimport { clampPanelWidth } from '../../dashboards/DashboardGrid'\nimport { DashboardPanel } from './DashboardPanel'\n\nexport interface PanelEditorLabels {\n title: string\n description: string\n source: string\n showAs: string\n types: Record<ChartType, string>\n groupBy: string\n groupByNone: string\n /** A table without \"group by\" lists the records. */\n groupByRecords: string\n bucket: string\n buckets: Record<TimeBucket, string>\n splitBy: string\n splitByNone: string\n measure: string\n aggregates: Record<AggregateOp, string>\n ofField: string\n stacked: string\n sort: string\n sorts: Record<DatasetSort, string>\n limit: string\n /** A table of records: the fields shown. */\n columns: string\n orderBy: string\n orderNone: string\n directions: { asc: string; desc: string }\n width: string\n widths: Record<'3' | '4' | '6' | '8' | '12', string>\n filters: string\n addFilter: string\n removeFilter: string\n filterOps: Record<FilterOp, string>\n filterField: string\n filterOp: string\n filterValue: string\n noFields: string\n preview: string\n}\n\nexport const DEFAULT_PANEL_EDITOR_LABELS: PanelEditorLabels = {\n title: 'Title',\n description: 'Description',\n source: 'Data',\n showAs: 'Show as',\n types: {\n metric: 'Number',\n bar: 'Bar chart',\n line: 'Line chart',\n area: 'Area chart',\n pie: 'Pie chart',\n donut: 'Donut chart',\n table: 'Table',\n },\n groupBy: 'Group by',\n groupByNone: 'Choose a field',\n groupByRecords: 'Nothing: list the records',\n bucket: 'Per',\n buckets: { day: 'Day', week: 'Week', month: 'Month', quarter: 'Quarter', year: 'Year' },\n splitBy: 'Split by',\n splitByNone: 'Nothing',\n measure: 'Measure',\n aggregates: { count: 'Count', sum: 'Sum', avg: 'Average', min: 'Minimum', max: 'Maximum' },\n ofField: 'Of',\n stacked: 'Stack the series',\n sort: 'Order',\n sorts: { label: 'By name or date', 'value-desc': 'Largest first', 'value-asc': 'Smallest first' },\n limit: 'At most',\n columns: 'Columns',\n orderBy: 'Order by',\n orderNone: 'As read',\n directions: { asc: 'Ascending', desc: 'Descending' },\n width: 'Width',\n widths: { '3': 'Quarter', '4': 'Third', '6': 'Half', '8': 'Two thirds', '12': 'Full width' },\n filters: 'Only where',\n addFilter: 'Add a condition',\n removeFilter: 'Remove the condition',\n filterOps: {\n eq: 'is',\n neq: 'is not',\n contains: 'contains',\n gt: 'is above',\n gte: 'is at least',\n lt: 'is below',\n lte: 'is at most',\n empty: 'is empty',\n not_empty: 'is not empty',\n },\n filterField: 'Field',\n filterOp: 'Condition',\n filterValue: 'Value',\n noFields: 'Choose the data first.',\n preview: 'Preview',\n}\n\nexport interface PanelEditorProps {\n value: PanelSpec\n onChange: (panel: PanelSpec) => void\n /** Show the panel live under the form. Default true. */\n preview?: boolean\n /** Offer the width (a dashboard's grid). Default true. */\n showWidth?: boolean\n labels?: Partial<PanelEditorLabels>\n testId?: string\n}\n\n/** A select of the editor; `''` is \"nothing chosen\" (Radix items cannot take an empty value). */\nconst NONE = '__none'\n\nfunction Field({\n label,\n htmlFor,\n children,\n}: {\n label: string\n htmlFor?: string\n children: ReactNode\n}) {\n return (\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n <Label htmlFor={htmlFor} className=\"text-xs font-medium text-muted-foreground\">\n {label}\n </Label>\n {children}\n </div>\n )\n}\n\nfunction EditorSelect({\n label,\n value,\n onChange,\n options,\n placeholder,\n none,\n testId,\n}: {\n label: string\n value: string | undefined\n onChange: (value: string | undefined) => void\n options: readonly { value: string; label: string }[]\n placeholder?: string\n /** Offer \"nothing\" with these words. */\n none?: string\n testId?: string\n}) {\n const id = useId()\n return (\n <Field label={label} htmlFor={id}>\n <div data-testid={testId}>\n <Select\n value={value ?? (none ? NONE : '')}\n onValueChange={(v) => onChange(v === NONE ? undefined : v)}\n >\n <SelectTrigger id={id} className=\"bg-card text-sm\" aria-label={label}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {none && <SelectItem value={NONE}>{none}</SelectItem>}\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </Field>\n )\n}\n\nfunction ParamField({\n param,\n params,\n onChange,\n testId,\n}: {\n param: DataSourceParam\n params: DataSourceParams\n onChange: (value: string | undefined) => void\n testId?: string\n}) {\n const { options } = param.useOptions(params)\n const value = params[param.id]\n return (\n <EditorSelect\n label={param.label}\n value={typeof value === 'string' && value ? value : undefined}\n onChange={onChange}\n options={options}\n placeholder={param.placeholder}\n none={param.required ? undefined : (param.placeholder ?? '—')}\n testId={testId}\n />\n )\n}\n\nconst WIDTHS = ['3', '4', '6', '8', '12'] as const\nconst NEEDS_VALUE = (op: FilterOp) => op !== 'empty' && op !== 'not_empty'\n\nfunction ChartFields({\n source,\n value,\n onChange,\n showWidth,\n l,\n testId,\n}: {\n source: DataSource\n value: PanelSpec\n onChange: (panel: PanelSpec) => void\n showWidth: boolean\n l: PanelEditorLabels\n testId?: string\n}) {\n const params = value.source.params ?? {}\n const { fields } = source.useFields(params)\n const chart = value.chart\n const setChart = (patch: Partial<ChartSpec>) =>\n onChange({ ...value, chart: { ...chart, ...patch } })\n const byId = useMemo(() => new Map(fields.map((f) => [f.id, f])), [fields])\n const groupable = fields.filter((f) => f.type !== 'number')\n const numbers = fields.filter((f) => f.type === 'number')\n const opts = (list: readonly DatasetField[]) => list.map((f) => ({ value: f.id, label: f.label }))\n const x = chart.x ? byId.get(chart.x) : undefined\n const aggregate = chart.aggregate ?? 'count'\n const isMetric = chart.type === 'metric'\n const isRecords = chart.type === 'table' && !chart.x\n const canSplit = chart.type === 'bar' || chart.type === 'line' || chart.type === 'area'\n const filters = chart.filters ?? []\n const setFilter = (i: number, patch: Partial<DatasetFilter>) =>\n setChart({ filters: filters.map((f, j) => (j === i ? { ...f, ...patch } : f)) })\n\n return (\n <>\n <EditorSelect\n label={l.showAs}\n value={chart.type}\n onChange={(type) => setChart({ type: (type ?? 'bar') as ChartType })}\n options={(Object.keys(l.types) as ChartType[]).map((t) => ({\n value: t,\n label: l.types[t],\n }))}\n testId={testId && `${testId}-type`}\n />\n {!isMetric && (\n <EditorSelect\n label={l.groupBy}\n value={chart.x}\n onChange={(x) => setChart({ x })}\n options={opts(groupable)}\n placeholder={l.groupByNone}\n none={chart.type === 'table' ? l.groupByRecords : undefined}\n testId={testId && `${testId}-x`}\n />\n )}\n {!isMetric && x?.type === 'date' && (\n <EditorSelect\n label={l.bucket}\n value={chart.bucket ?? 'month'}\n onChange={(bucket) => setChart({ bucket: (bucket ?? 'month') as TimeBucket })}\n options={(Object.keys(l.buckets) as TimeBucket[]).map((b) => ({\n value: b,\n label: l.buckets[b],\n }))}\n testId={testId && `${testId}-bucket`}\n />\n )}\n {canSplit && (\n <EditorSelect\n label={l.splitBy}\n value={chart.series}\n onChange={(series) => setChart({ series })}\n options={opts(groupable.filter((f) => f.id !== chart.x))}\n none={l.splitByNone}\n testId={testId && `${testId}-series`}\n />\n )}\n {!isRecords && (\n <div className=\"grid grid-cols-2 gap-3\">\n <EditorSelect\n label={l.measure}\n value={aggregate}\n onChange={(op) => {\n const next = (op ?? 'count') as AggregateOp\n setChart({\n aggregate: next,\n y: next === 'count' ? undefined : (chart.y ?? numbers[0]?.id),\n })\n }}\n options={(Object.keys(l.aggregates) as AggregateOp[])\n .filter((op) => op === 'count' || numbers.length > 0)\n .map((op) => ({ value: op, label: l.aggregates[op] }))}\n testId={testId && `${testId}-aggregate`}\n />\n {aggregate !== 'count' && (\n <EditorSelect\n label={l.ofField}\n value={chart.y}\n onChange={(y) => setChart({ y })}\n options={opts(numbers)}\n testId={testId && `${testId}-y`}\n />\n )}\n </div>\n )}\n {canSplit && chart.series && chart.type !== 'line' && (\n <label className=\"flex items-center gap-2 text-sm\">\n <Switch\n checked={Boolean(chart.stacked)}\n onCheckedChange={(stacked) => setChart({ stacked })}\n data-testid={testId && `${testId}-stacked`}\n />\n {l.stacked}\n </label>\n )}\n {!isMetric && !isRecords && (\n <div className=\"grid grid-cols-2 gap-3\">\n <EditorSelect\n label={l.sort}\n value={chart.sort ?? (x?.type === 'date' ? 'label' : 'value-desc')}\n onChange={(sort) => setChart({ sort: sort as DatasetSort })}\n options={(Object.keys(l.sorts) as DatasetSort[]).map((s) => ({\n value: s,\n label: l.sorts[s],\n }))}\n testId={testId && `${testId}-sort`}\n />\n <Field label={l.limit}>\n <Input\n type=\"number\"\n min={1}\n max={500}\n value={chart.limit ?? ''}\n placeholder=\"50\"\n onChange={(e) =>\n setChart({\n limit: e.target.value ? Math.max(1, Number(e.target.value)) : undefined,\n })\n }\n data-testid={testId && `${testId}-limit`}\n />\n </Field>\n </div>\n )}\n {isRecords && (\n <fieldset className=\"flex flex-col gap-1.5\" data-testid={testId && `${testId}-columns`}>\n <legend className=\"mb-1.5 text-xs font-medium text-muted-foreground\">{l.columns}</legend>\n {fields.map((field) => {\n const shown = chart.columns ?? fields.map((f) => f.id)\n const checked = shown.includes(field.id)\n return (\n <label key={field.id} className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() =>\n setChart({\n columns: checked\n ? shown.filter((id) => id !== field.id)\n : fields\n .map((f) => f.id)\n .filter((id) => id === field.id || shown.includes(id)),\n })\n }\n />\n {field.label}\n </label>\n )\n })}\n </fieldset>\n )}\n {isRecords && (\n <div className=\"grid grid-cols-2 gap-3\">\n <EditorSelect\n label={l.orderBy}\n value={chart.orderBy?.field}\n onChange={(field) =>\n setChart({\n orderBy: field\n ? { field, direction: chart.orderBy?.direction ?? 'asc' }\n : undefined,\n })\n }\n options={opts(fields)}\n none={l.orderNone}\n testId={testId && `${testId}-order`}\n />\n {chart.orderBy && (\n <EditorSelect\n label={l.orderBy}\n value={chart.orderBy.direction ?? 'asc'}\n onChange={(direction) =>\n setChart({\n orderBy: {\n field: chart.orderBy?.field ?? '',\n direction: direction === 'desc' ? 'desc' : 'asc',\n },\n })\n }\n options={[\n { value: 'asc', label: l.directions.asc },\n { value: 'desc', label: l.directions.desc },\n ]}\n testId={testId && `${testId}-direction`}\n />\n )}\n </div>\n )}\n <div className=\"flex flex-col gap-2\" data-testid={testId && `${testId}-filters`}>\n <span className=\"text-xs font-medium text-muted-foreground\">{l.filters}</span>\n {filters.map((filter, i) => (\n <div key={i} className=\"grid grid-cols-[1fr_1fr_1fr_auto] items-end gap-2\">\n <EditorSelect\n label={l.filterField}\n value={filter.field}\n onChange={(field) => setFilter(i, { field: field ?? '' })}\n options={opts(fields)}\n />\n <EditorSelect\n label={l.filterOp}\n value={filter.op}\n onChange={(op) => setFilter(i, { op: (op ?? 'eq') as FilterOp })}\n options={(Object.keys(l.filterOps) as FilterOp[]).map((op) => ({\n value: op,\n label: l.filterOps[op],\n }))}\n />\n {NEEDS_VALUE(filter.op) ? (\n <Field label={l.filterValue}>\n <Input\n value={\n filter.value === null || filter.value === undefined ? '' : String(filter.value)\n }\n type={byId.get(filter.field)?.type === 'number' ? 'number' : 'text'}\n onChange={(e) =>\n setFilter(i, {\n value:\n byId.get(filter.field)?.type === 'number' && e.target.value !== ''\n ? Number(e.target.value)\n : e.target.value,\n })\n }\n />\n </Field>\n ) : (\n <span />\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.removeFilter}\n onClick={() => setChart({ filters: filters.filter((_, j) => j !== i) })}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"self-start\"\n disabled={!fields.length}\n onClick={() =>\n setChart({ filters: [...filters, { field: fields[0]?.id ?? '', op: 'eq', value: '' }] })\n }\n >\n <Plus className=\"size-3.5\" /> {l.addFilter}\n </Button>\n </div>\n {showWidth && (\n <EditorSelect\n label={l.width}\n value={String(clampPanelWidth(value.width))}\n onChange={(w) => onChange({ ...value, width: Number(w ?? 6) })}\n options={WIDTHS.map((w) => ({ value: w, label: l.widths[w] }))}\n testId={testId && `${testId}-width`}\n />\n )}\n {!fields.length && <p className=\"text-sm text-muted-foreground\">{l.noFields}</p>}\n </>\n )\n}\n\nexport function PanelEditor({\n value,\n onChange,\n preview = true,\n showWidth = true,\n labels,\n testId,\n}: PanelEditorProps) {\n const l = { ...DEFAULT_PANEL_EDITOR_LABELS, ...labels }\n const registry = useDataSources()\n const source = registry.get(value.source.id)\n const params = value.source.params ?? {}\n const titleId = useId()\n const descriptionId = useId()\n\n return (\n <div\n className={cn(\n 'grid min-w-0 gap-6',\n preview && 'lg:grid-cols-[minmax(0,22rem)_minmax(0,1fr)]'\n )}\n data-testid={testId}\n >\n <div className=\"flex min-w-0 flex-col gap-4\">\n <Field label={l.title} htmlFor={titleId}>\n <Input\n id={titleId}\n value={value.title}\n onChange={(e) => onChange({ ...value, title: e.target.value })}\n data-testid={testId && `${testId}-title`}\n />\n </Field>\n <Field label={l.description} htmlFor={descriptionId}>\n <Input\n id={descriptionId}\n value={value.description ?? ''}\n onChange={(e) => onChange({ ...value, description: e.target.value || undefined })}\n />\n </Field>\n <EditorSelect\n label={l.source}\n value={value.source.id}\n onChange={(id) =>\n onChange({\n ...value,\n source: { id: id ?? value.source.id },\n // Another source has other fields: what was grouped and measured no longer applies.\n chart: { type: value.chart.type },\n })\n }\n options={registry.list.map((s) => ({ value: s.id, label: s.label }))}\n testId={testId && `${testId}-source`}\n />\n {source?.description && (\n <p className=\"-mt-2 text-xs text-muted-foreground\">{source.description}</p>\n )}\n {source?.params?.map((param) => (\n <ParamField\n key={`${source.id}-${param.id}`}\n param={param}\n params={params}\n testId={testId && `${testId}-param-${param.id}`}\n onChange={(v) =>\n onChange({\n ...value,\n source: { ...value.source, params: { ...params, [param.id]: v ?? null } },\n // A different database has other columns.\n ...(param.id === 'databaseId' || param.id === 'view'\n ? { chart: { type: value.chart.type } }\n : {}),\n })\n }\n />\n ))}\n {source && (\n <ChartFields\n key={source.id}\n source={source}\n value={value}\n onChange={onChange}\n showWidth={showWidth}\n l={l}\n testId={testId}\n />\n )}\n </div>\n {preview && (\n <div className=\"flex min-w-0 flex-col gap-2 self-start lg:sticky lg:top-0\">\n <span className=\"text-xs font-medium text-muted-foreground\">{l.preview}</span>\n <DashboardPanel panel={value} testId={testId && `${testId}-preview`} />\n </div>\n )}\n </div>\n )\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { buildWorkflowScopeSource, documentScopeLabels, WorkflowDocumentsField, WorkflowLauncher } from './chunk-J3E5CSSC.js';
|
|
3
|
-
import { useListedDocuments, useConnectedTags } from './chunk-
|
|
4
|
-
import { useConnectedWorkspace } from './chunk-
|
|
3
|
+
import { useListedDocuments, useConnectedTags } from './chunk-TG4IICWO.js';
|
|
4
|
+
import { useConnectedWorkspace } from './chunk-OWHO2TO3.js';
|
|
5
5
|
import { useBlocksEnvironment } from './chunk-YUHSDOPW.js';
|
|
6
6
|
import { useMemo, useRef, useState, useCallback } from 'react';
|
|
7
7
|
import { useUploadDocuments, useThumbnails, useAgents } from '@arbidocs/react';
|
|
@@ -121,5 +121,5 @@ function ConnectedWorkflowLauncher({
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
export { ConnectedWorkflowDocumentsField, ConnectedWorkflowLauncher, toWorkflowFieldDocument, useConnectedWorkflowScopeSource };
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
124
|
+
//# sourceMappingURL=chunk-DBKZANTC.js.map
|
|
125
|
+
//# sourceMappingURL=chunk-DBKZANTC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/ConnectedWorkflowLauncher.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/ConnectedWorkflowLauncher.tsx"],"names":[],"mappings":"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","file":"chunk-DBKZANTC.js","sourcesContent":["/**\n * The workflow launcher bound to the connection: the open workspace's folders, labels and files\n * behind its scope and `documents` fields (files can be added right there), and the user's agents\n * behind \"Run as\". The host still says what a launch does (`onLaunch`): open a chat, start a task.\n */\n\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { useAgents, useThumbnails, useUploadDocuments } from '@arbidocs/react'\nimport { WorkflowLauncher, type WorkflowLauncherProps } from '../agents/workflows/WorkflowLauncher'\nimport {\n WorkflowDocumentsField,\n type WorkflowDocumentsFieldLabels,\n type WorkflowFieldDocument,\n} from '../agents/workflows/WorkflowDocumentsField'\nimport type { WorkflowScopeSource } from '../agents/workflows/WorkflowConfigDialog'\nimport { buildWorkflowScopeSource, documentScopeLabels } from '../agents/workflows/workspaceScope'\nimport type { AgentOption } from '../agents/workflows/AgentSelect'\nimport type { WorkflowField, WorkflowScope } from '../agents/workflows/types'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedTags, useListedDocuments, type ConnectedDocument } from './workspaceData'\n\nconst IMAGE_FILE_TYPES = new Set(['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'webp'])\n\n/** A workspace document as a `documents` field offers it. */\nexport function toWorkflowFieldDocument(doc: ConnectedDocument): WorkflowFieldDocument {\n // Pages and tokens are a text-parsing concept: never meaningful for an image.\n const isImage = IMAGE_FILE_TYPES.has((doc.file_type ?? '').toLowerCase())\n return {\n id: doc.external_id,\n title: doc.doc_metadata?.title || doc.file_name || doc.external_id,\n fileName: doc.file_name,\n pages: isImage ? null : (doc.n_pages ?? null),\n tokens: isImage ? null : (doc.tokens ?? null),\n status: doc.status,\n isImage,\n }\n}\n\n/** The open workspace's folders and labels for a workflow's scope field. */\nexport function useConnectedWorkflowScopeSource(): WorkflowScopeSource {\n const { data: docs } = useListedDocuments()\n const { data: tags } = useConnectedTags()\n return useMemo(() => buildWorkflowScopeSource(docs, documentScopeLabels(tags)), [docs, tags])\n}\n\n/** The user's agents, for \"Run as\". */\nfunction useConnectedAgentOptions(): AgentOption[] {\n const { data: agents } = useAgents()\n return useMemo(\n () => (agents ?? []).map((a) => ({ id: a.external_id, label: a.given_name || a.email })),\n [agents]\n )\n}\n\nexport interface ConnectedWorkflowDocumentsFieldProps {\n field: WorkflowField\n value: WorkflowScope\n onChange: (value: WorkflowScope) => void\n /** Add files the host's way (its upload dialog). Absent: they are uploaded here. */\n onAddFiles?: (files?: File[]) => void\n labels?: Partial<WorkflowDocumentsFieldLabels>\n}\n\n/**\n * A workflow `documents` field over the open workspace's files: pick, add (or drop) files, see the\n * chosen images. A launcher's or a task composer's `renderDocuments`.\n */\nexport function ConnectedWorkflowDocumentsField({\n field,\n value,\n onChange,\n onAddFiles,\n labels,\n}: ConnectedWorkflowDocumentsFieldProps) {\n const { notify } = useBlocksEnvironment()\n const { ensureWorkspaceOpen } = useConnectedWorkspace()\n const { data: docs, loaded } = useListedDocuments()\n const uploadDocuments = useUploadDocuments()\n const documents = useMemo(() => docs.map(toWorkflowFieldDocument), [docs])\n const chosen = value.documents ?? []\n const { data: thumbnails } = useThumbnails(chosen, { enabled: (field.max ?? 1) > 1 })\n const input = useRef<HTMLInputElement>(null)\n const [adding, setAdding] = useState(false)\n\n const upload = useCallback(\n async (files: File[]) => {\n setAdding(true)\n try {\n await ensureWorkspaceOpen()\n // Each new document joins the shared list as it lands.\n for (const file of files) await uploadDocuments.mutateAsync({ files: [file] })\n } catch (error) {\n notify(error instanceof Error && error.message ? error.message : String(error), 'error')\n } finally {\n setAdding(false)\n }\n },\n [uploadDocuments, ensureWorkspaceOpen, notify]\n )\n\n return (\n <>\n {!onAddFiles && (\n <input\n ref={input}\n type=\"file\"\n multiple\n className=\"hidden\"\n aria-label=\"Add files\"\n data-testid=\"workflow-add-files-input\"\n onChange={(e) => {\n const files = Array.from(e.target.files ?? [])\n e.target.value = ''\n if (files.length) void upload(files)\n }}\n />\n )}\n <WorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n documents={documents}\n loaded={loaded}\n thumbnailOf={(id) => thumbnails?.[id]}\n onAddFiles={\n onAddFiles ?? ((files) => (files?.length ? void upload(files) : input.current?.click()))\n }\n adding={adding}\n labels={labels}\n />\n </>\n )\n}\n\nexport interface ConnectedWorkflowLauncherProps extends Omit<\n WorkflowLauncherProps,\n 'scopeSource' | 'renderDocuments' | 'agents'\n> {\n /** Add files from a `documents` field the host's way (its upload dialog). Absent: uploaded here. */\n onAddFiles?: (files?: File[]) => void\n}\n\nexport function ConnectedWorkflowLauncher({\n onAddFiles,\n ...props\n}: ConnectedWorkflowLauncherProps) {\n const scopeSource = useConnectedWorkflowScopeSource()\n const agents = useConnectedAgentOptions()\n return (\n <WorkflowLauncher\n {...props}\n scopeSource={scopeSource}\n agents={agents}\n renderDocuments={(field, value, onChange) => (\n <ConnectedWorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n onAddFiles={onAddFiles}\n />\n )}\n />\n )\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import { testIdOr } from './chunk-UP3GCNPM.js';
|
|
|
5
5
|
import { canPersistSession } from '@arbidocs/client';
|
|
6
6
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
7
|
import { useState, useEffect, useCallback } from 'react';
|
|
8
|
-
import { Download, X
|
|
8
|
+
import { Download, X } from 'lucide-react';
|
|
9
9
|
import { cn } from '@arbidocs/react/ui';
|
|
10
10
|
export { UserMenu } from '@arbidocs/react/ui';
|
|
11
11
|
export { NotificationBell } from '@arbidocs/react/shell';
|
|
@@ -223,47 +223,6 @@ function InstallPrompt({
|
|
|
223
223
|
}
|
|
224
224
|
);
|
|
225
225
|
}
|
|
226
|
-
var DEFAULT_REMOTE_CONTROL_PILL_LABELS = {
|
|
227
|
-
turnOffRemoteControl: "Turn off remote control"
|
|
228
|
-
};
|
|
229
|
-
function RemoteControlPill({
|
|
230
|
-
isActive,
|
|
231
|
-
label,
|
|
232
|
-
onDisable,
|
|
233
|
-
disableLabel: disableLabelProp,
|
|
234
|
-
labels,
|
|
235
|
-
"data-testid": testId,
|
|
236
|
-
disableTestId
|
|
237
|
-
}) {
|
|
238
|
-
const disableLabel = disableLabelProp ?? labels?.turnOffRemoteControl ?? DEFAULT_REMOTE_CONTROL_PILL_LABELS.turnOffRemoteControl;
|
|
239
|
-
return /* @__PURE__ */ jsxs(
|
|
240
|
-
"div",
|
|
241
|
-
{
|
|
242
|
-
"data-slot": "remote-control-pill",
|
|
243
|
-
"data-testid": testIdOr(testId, { testId: "remote-control-indicator" }),
|
|
244
|
-
className: cn(
|
|
245
|
-
"flex min-w-0 max-w-full items-center gap-1.5 rounded-full py-1 pl-2.5 pr-1 text-xs font-medium",
|
|
246
|
-
isActive ? "bg-accent text-accent-foreground" : "bg-muted text-muted-foreground"
|
|
247
|
-
),
|
|
248
|
-
children: [
|
|
249
|
-
/* @__PURE__ */ jsx(MousePointerClick, { className: cn("size-3.5 shrink-0", isActive && "animate-pulse") }),
|
|
250
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 max-w-[16rem] truncate", children: label }),
|
|
251
|
-
/* @__PURE__ */ jsx(
|
|
252
|
-
"button",
|
|
253
|
-
{
|
|
254
|
-
type: "button",
|
|
255
|
-
onClick: onDisable,
|
|
256
|
-
title: disableLabel,
|
|
257
|
-
"aria-label": disableLabel,
|
|
258
|
-
"data-testid": testIdOr(disableTestId, { testId: "remote-control-indicator-disable" }),
|
|
259
|
-
className: "flex size-5 shrink-0 items-center justify-center rounded-full transition-colors hover:bg-foreground/10 hover:text-foreground pointer-coarse:size-8",
|
|
260
|
-
children: /* @__PURE__ */ jsx(X, { className: "size-3.5" })
|
|
261
|
-
}
|
|
262
|
-
)
|
|
263
|
-
]
|
|
264
|
-
}
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
226
|
function SplitLayout({
|
|
268
227
|
primary,
|
|
269
228
|
secondary,
|
|
@@ -293,6 +252,6 @@ function SplitLayout({
|
|
|
293
252
|
);
|
|
294
253
|
}
|
|
295
254
|
|
|
296
|
-
export { AccountDeletionBanner, DEFAULT_ACCOUNT_DELETION_BANNER_TEXT, DEFAULT_INSECURE_SESSION_BANNER_TEXT, DEFAULT_INSTALL_PROMPT_LABELS,
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
298
|
-
//# sourceMappingURL=chunk-
|
|
255
|
+
export { AccountDeletionBanner, DEFAULT_ACCOUNT_DELETION_BANNER_TEXT, DEFAULT_INSECURE_SESSION_BANNER_TEXT, DEFAULT_INSTALL_PROMPT_LABELS, INSTALL_PROMPT_DISMISSED_KEY, InsecureSessionBanner, InstallPrompt, SplitLayout, initInstallPrompt, promptAppInstall, useInstallPrompt };
|
|
256
|
+
//# sourceMappingURL=chunk-E2P4JJLJ.js.map
|
|
257
|
+
//# sourceMappingURL=chunk-E2P4JJLJ.js.map
|