@arbidocs/blocks 0.5.107 → 0.5.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ConnectedCallDock-TDYRHPAK.js → ConnectedCallDock-DV4FU376.js} +8 -8
- package/dist/{ConnectedCallDock-TDYRHPAK.js.map → ConnectedCallDock-DV4FU376.js.map} +1 -1
- package/dist/{ConnectedCallDock-H3WWFGXF.cjs → ConnectedCallDock-EM2VVGZK.cjs} +10 -10
- package/dist/{ConnectedCallDock-H3WWFGXF.cjs.map → ConnectedCallDock-EM2VVGZK.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-55O5OUN7.cjs → ConnectedCallRoom-7WEPEWUJ.cjs} +9 -9
- package/dist/{ConnectedCallRoom-55O5OUN7.cjs.map → ConnectedCallRoom-7WEPEWUJ.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-Z6F6WCLH.js → ConnectedCallRoom-RYTZP34O.js} +8 -8
- package/dist/{ConnectedCallRoom-Z6F6WCLH.js.map → ConnectedCallRoom-RYTZP34O.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-NVZRVNOS.js → ConnectedNativeDocxComparison-2NDXXZLQ.js} +15 -15
- package/dist/{ConnectedNativeDocxComparison-NVZRVNOS.js.map → ConnectedNativeDocxComparison-2NDXXZLQ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-DGBZJ4XA.cjs → ConnectedNativeDocxComparison-7HOY3AVI.cjs} +16 -16
- package/dist/{ConnectedNativeDocxComparison-DGBZJ4XA.cjs.map → ConnectedNativeDocxComparison-7HOY3AVI.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-R4WINUUB.cjs → ConnectedNativeDocxEditor-CUWDPHXN.cjs} +16 -16
- package/dist/{ConnectedNativeDocxEditor-R4WINUUB.cjs.map → ConnectedNativeDocxEditor-CUWDPHXN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-RSVBN7DY.js → ConnectedNativeDocxEditor-SPZB6Y27.js} +14 -14
- package/dist/{ConnectedNativeDocxEditor-RSVBN7DY.js.map → ConnectedNativeDocxEditor-SPZB6Y27.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-2DFBXE2X.js → ConnectedProductionSetDialog-N3EDG3SU.js} +4 -4
- package/dist/{ConnectedProductionSetDialog-2DFBXE2X.js.map → ConnectedProductionSetDialog-N3EDG3SU.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-KYDPQ7SG.cjs → ConnectedProductionSetDialog-XAEFEN3N.cjs} +4 -4
- package/dist/{ConnectedProductionSetDialog-KYDPQ7SG.cjs.map → ConnectedProductionSetDialog-XAEFEN3N.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-HLJ5IIOU.js → ConnectedStreamedWordArtifact-6LTGEAJO.js} +15 -15
- package/dist/ConnectedStreamedWordArtifact-6LTGEAJO.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-JQ34AOUU.cjs → ConnectedStreamedWordArtifact-HNCRKZTV.cjs} +16 -16
- package/dist/ConnectedStreamedWordArtifact-HNCRKZTV.cjs.map +1 -0
- package/dist/{DocumentReviewCard-7JSXRJZ2.js → DocumentReviewCard-RJD3CO32.js} +8 -8
- package/dist/{DocumentReviewCard-7JSXRJZ2.js.map → DocumentReviewCard-RJD3CO32.js.map} +1 -1
- package/dist/{DocumentReviewCard-C4HVT3WM.cjs → DocumentReviewCard-VON7LOOY.cjs} +8 -8
- package/dist/{DocumentReviewCard-C4HVT3WM.cjs.map → DocumentReviewCard-VON7LOOY.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-IMQTZWKD.js → FilesViewerDialog-7SJGY72Q.js} +21 -21
- package/dist/{FilesViewerDialog-IMQTZWKD.js.map → FilesViewerDialog-7SJGY72Q.js.map} +1 -1
- package/dist/{FilesViewerDialog-UP7GFHYN.cjs → FilesViewerDialog-VIPTC6OT.cjs} +27 -27
- package/dist/{FilesViewerDialog-UP7GFHYN.cjs.map → FilesViewerDialog-VIPTC6OT.cjs.map} +1 -1
- package/dist/{RechartsRenderer-GIRCW7DB.cjs → RechartsRenderer-THES2SE5.cjs} +6 -5
- package/dist/RechartsRenderer-THES2SE5.cjs.map +1 -0
- package/dist/{RechartsRenderer-23OF4H6X.js → RechartsRenderer-XIZLV6GH.js} +6 -5
- package/dist/RechartsRenderer-XIZLV6GH.js.map +1 -0
- package/dist/{WorkspaceTableView-PJM47B5F.cjs → WorkspaceTableView-FNME7TL6.cjs} +9 -9
- package/dist/{WorkspaceTableView-PJM47B5F.cjs.map → WorkspaceTableView-FNME7TL6.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-YDA7A4UJ.js → WorkspaceTableView-XQ6J2JKI.js} +7 -7
- package/dist/{WorkspaceTableView-YDA7A4UJ.js.map → WorkspaceTableView-XQ6J2JKI.js.map} +1 -1
- package/dist/agents/index.cjs +202 -202
- package/dist/agents/index.js +8 -8
- package/dist/{ai-ADS6YSS2.cjs → ai-3SAMEYBB.cjs} +20 -20
- package/dist/ai-3SAMEYBB.cjs.map +1 -0
- package/dist/{ai-KHWTGBT5.js → ai-OTQWSYVK.js} +12 -12
- package/dist/ai-OTQWSYVK.js.map +1 -0
- package/dist/calls/index.cjs +57 -57
- package/dist/calls/index.js +9 -9
- package/dist/chat/index.cjs +3 -3
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-O27K7KTZ.cjs → chunk-2TBQBF4Y.cjs} +5 -5
- package/dist/{chunk-O27K7KTZ.cjs.map → chunk-2TBQBF4Y.cjs.map} +1 -1
- package/dist/{chunk-YJWAGXYM.js → chunk-4ZA2RSQH.js} +3 -3
- package/dist/{chunk-YJWAGXYM.js.map → chunk-4ZA2RSQH.js.map} +1 -1
- package/dist/{chunk-6A4GNM4T.cjs → chunk-5D2ZINOJ.cjs} +16 -16
- package/dist/{chunk-6A4GNM4T.cjs.map → chunk-5D2ZINOJ.cjs.map} +1 -1
- package/dist/{chunk-BFVCYBND.cjs → chunk-5HXQOM3I.cjs} +5 -5
- package/dist/{chunk-BFVCYBND.cjs.map → chunk-5HXQOM3I.cjs.map} +1 -1
- package/dist/{chunk-GSD5U553.cjs → chunk-5KKT65WU.cjs} +3 -3
- package/dist/{chunk-GSD5U553.cjs.map → chunk-5KKT65WU.cjs.map} +1 -1
- package/dist/{chunk-AVGHTUPE.js → chunk-5PWLXLHY.js} +5 -5
- package/dist/chunk-5PWLXLHY.js.map +1 -0
- package/dist/{chunk-BBWLFK3C.js → chunk-5XIMUQ63.js} +3 -3
- package/dist/{chunk-BBWLFK3C.js.map → chunk-5XIMUQ63.js.map} +1 -1
- package/dist/{chunk-AHMRYY7J.cjs → chunk-6DAJXQZZ.cjs} +13 -13
- package/dist/{chunk-AHMRYY7J.cjs.map → chunk-6DAJXQZZ.cjs.map} +1 -1
- package/dist/{chunk-3PV25ICC.js → chunk-6KKVJ2V6.js} +3 -3
- package/dist/{chunk-3PV25ICC.js.map → chunk-6KKVJ2V6.js.map} +1 -1
- package/dist/{chunk-OLAYDOPC.js → chunk-6LUHNFEE.js} +6 -6
- package/dist/{chunk-OLAYDOPC.js.map → chunk-6LUHNFEE.js.map} +1 -1
- package/dist/{chunk-FSXQHEFQ.cjs → chunk-7CDV7Y4U.cjs} +25 -25
- package/dist/{chunk-FSXQHEFQ.cjs.map → chunk-7CDV7Y4U.cjs.map} +1 -1
- package/dist/{chunk-OAIOOVFN.cjs → chunk-7SJXYEZI.cjs} +36 -36
- package/dist/chunk-7SJXYEZI.cjs.map +1 -0
- package/dist/{chunk-LFYKB7KF.cjs → chunk-7V6APLF7.cjs} +19 -19
- package/dist/{chunk-LFYKB7KF.cjs.map → chunk-7V6APLF7.cjs.map} +1 -1
- package/dist/{chunk-4WMGFGYP.cjs → chunk-AJZ66VJC.cjs} +4 -4
- package/dist/{chunk-4WMGFGYP.cjs.map → chunk-AJZ66VJC.cjs.map} +1 -1
- package/dist/{chunk-KCP42W67.cjs → chunk-ARGQ5YZ5.cjs} +3 -3
- package/dist/{chunk-KCP42W67.cjs.map → chunk-ARGQ5YZ5.cjs.map} +1 -1
- package/dist/{chunk-BH6IKGZ3.js → chunk-AUAHGQY6.js} +5 -5
- package/dist/{chunk-BH6IKGZ3.js.map → chunk-AUAHGQY6.js.map} +1 -1
- package/dist/{chunk-KIXFXCHL.js → chunk-CEOCA7ID.js} +3 -3
- package/dist/{chunk-KIXFXCHL.js.map → chunk-CEOCA7ID.js.map} +1 -1
- package/dist/{chunk-TNKPQ3EF.js → chunk-CIRSOYGK.js} +12 -12
- package/dist/{chunk-TNKPQ3EF.js.map → chunk-CIRSOYGK.js.map} +1 -1
- package/dist/{chunk-BAUZUIHB.js → chunk-COL2TJGO.js} +83 -83
- package/dist/chunk-COL2TJGO.js.map +1 -0
- package/dist/{chunk-XHN5KOI2.cjs → chunk-DRLD4P2C.cjs} +8 -8
- package/dist/{chunk-XHN5KOI2.cjs.map → chunk-DRLD4P2C.cjs.map} +1 -1
- package/dist/{chunk-5AC52BHL.cjs → chunk-DYPFNQTQ.cjs} +140 -140
- package/dist/chunk-DYPFNQTQ.cjs.map +1 -0
- package/dist/{chunk-SCLGUHLU.cjs → chunk-E7TGSOPR.cjs} +4 -4
- package/dist/{chunk-SCLGUHLU.cjs.map → chunk-E7TGSOPR.cjs.map} +1 -1
- package/dist/{chunk-CRLFLMTK.cjs → chunk-EOXA4VJH.cjs} +3 -3
- package/dist/{chunk-CRLFLMTK.cjs.map → chunk-EOXA4VJH.cjs.map} +1 -1
- package/dist/{chunk-DBKZANTC.js → chunk-GA47YVW5.js} +3 -3
- package/dist/{chunk-DBKZANTC.js.map → chunk-GA47YVW5.js.map} +1 -1
- package/dist/{chunk-RCZRI72J.cjs → chunk-GMODJT4N.cjs} +4 -4
- package/dist/{chunk-RCZRI72J.cjs.map → chunk-GMODJT4N.cjs.map} +1 -1
- package/dist/{chunk-22KAKJ3W.cjs → chunk-GS5MFUPC.cjs} +4 -4
- package/dist/{chunk-22KAKJ3W.cjs.map → chunk-GS5MFUPC.cjs.map} +1 -1
- package/dist/{chunk-62OMGQHS.js → chunk-H6W3VXHU.js} +3 -3
- package/dist/{chunk-62OMGQHS.js.map → chunk-H6W3VXHU.js.map} +1 -1
- package/dist/{chunk-DX3Z2COD.cjs → chunk-HUYKO2ES.cjs} +3 -3
- package/dist/{chunk-DX3Z2COD.cjs.map → chunk-HUYKO2ES.cjs.map} +1 -1
- package/dist/{chunk-U5F5P4YU.js → chunk-IK234EFX.js} +12 -12
- package/dist/{chunk-U5F5P4YU.js.map → chunk-IK234EFX.js.map} +1 -1
- package/dist/{chunk-UQ2OBHMV.js → chunk-JUGEFTRC.js} +1010 -1010
- package/dist/chunk-JUGEFTRC.js.map +1 -0
- package/dist/{chunk-CHQMVIHR.js → chunk-LPGBRMYS.js} +36 -36
- package/dist/chunk-LPGBRMYS.js.map +1 -0
- package/dist/{chunk-D35EHOK5.cjs → chunk-M23W7IID.cjs} +12 -12
- package/dist/chunk-M23W7IID.cjs.map +1 -0
- package/dist/{chunk-FPOKWML2.js → chunk-MIVNNQO3.js} +21 -4
- package/dist/chunk-MIVNNQO3.js.map +1 -0
- package/dist/{chunk-WI3BVKEC.cjs → chunk-MNFI66H5.cjs} +5 -5
- package/dist/{chunk-WI3BVKEC.cjs.map → chunk-MNFI66H5.cjs.map} +1 -1
- package/dist/{chunk-T5ZMG6MC.js → chunk-NF4M7PUB.js} +3 -3
- package/dist/{chunk-T5ZMG6MC.js.map → chunk-NF4M7PUB.js.map} +1 -1
- package/dist/{chunk-ZNY5W3VX.js → chunk-NPSFPBIB.js} +3 -3
- package/dist/{chunk-ZNY5W3VX.js.map → chunk-NPSFPBIB.js.map} +1 -1
- package/dist/{chunk-LYW5A35J.js → chunk-OMIYTUVR.js} +12 -12
- package/dist/{chunk-LYW5A35J.js.map → chunk-OMIYTUVR.js.map} +1 -1
- package/dist/{chunk-ZMVF7EYJ.cjs → chunk-PBPO54KZ.cjs} +21 -3
- package/dist/chunk-PBPO54KZ.cjs.map +1 -0
- package/dist/{chunk-7V4OCZS6.cjs → chunk-RA3EGF6K.cjs} +6 -6
- package/dist/{chunk-7V4OCZS6.cjs.map → chunk-RA3EGF6K.cjs.map} +1 -1
- package/dist/{chunk-PL7O3RJJ.cjs → chunk-RKBAY7GZ.cjs} +3 -3
- package/dist/{chunk-PL7O3RJJ.cjs.map → chunk-RKBAY7GZ.cjs.map} +1 -1
- package/dist/{chunk-J3E5CSSC.js → chunk-RKFWBIKS.js} +3 -3
- package/dist/{chunk-J3E5CSSC.js.map → chunk-RKFWBIKS.js.map} +1 -1
- package/dist/{chunk-YLKHTBYA.js → chunk-RRP7MQAO.js} +3 -3
- package/dist/{chunk-YLKHTBYA.js.map → chunk-RRP7MQAO.js.map} +1 -1
- package/dist/{chunk-U6LQ6Z3P.cjs → chunk-SP3IKIPA.cjs} +6 -6
- package/dist/{chunk-U6LQ6Z3P.cjs.map → chunk-SP3IKIPA.cjs.map} +1 -1
- package/dist/{chunk-GX75YCWJ.cjs → chunk-SQUOXOY3.cjs} +560 -560
- package/dist/chunk-SQUOXOY3.cjs.map +1 -0
- package/dist/{chunk-6ZYOUT73.js → chunk-T5LORFHL.js} +7 -7
- package/dist/{chunk-6ZYOUT73.js.map → chunk-T5LORFHL.js.map} +1 -1
- package/dist/{chunk-45OU2UAA.cjs → chunk-TEMTKBBL.cjs} +10 -10
- package/dist/{chunk-45OU2UAA.cjs.map → chunk-TEMTKBBL.cjs.map} +1 -1
- package/dist/{chunk-PHDUN4SG.cjs → chunk-THCMGAFX.cjs} +41 -41
- package/dist/{chunk-PHDUN4SG.cjs.map → chunk-THCMGAFX.cjs.map} +1 -1
- package/dist/{chunk-HTGEAQOA.js → chunk-TOMDMKOD.js} +7 -7
- package/dist/{chunk-HTGEAQOA.js.map → chunk-TOMDMKOD.js.map} +1 -1
- package/dist/{chunk-WJHRWXWJ.js → chunk-TXIAF4PX.js} +3 -3
- package/dist/{chunk-WJHRWXWJ.js.map → chunk-TXIAF4PX.js.map} +1 -1
- package/dist/{chunk-6M5NAAWX.js → chunk-UCSEE52D.js} +3 -3
- package/dist/{chunk-6M5NAAWX.js.map → chunk-UCSEE52D.js.map} +1 -1
- package/dist/{chunk-I7CJDF3V.cjs → chunk-UHMP6S7M.cjs} +104 -103
- package/dist/chunk-UHMP6S7M.cjs.map +1 -0
- package/dist/{chunk-PGCKTXYH.js → chunk-UHUI6A36.js} +3 -3
- package/dist/{chunk-PGCKTXYH.js.map → chunk-UHUI6A36.js.map} +1 -1
- package/dist/{chunk-6KQVTMRL.cjs → chunk-UOGXKHTJ.cjs} +3 -3
- package/dist/{chunk-6KQVTMRL.cjs.map → chunk-UOGXKHTJ.cjs.map} +1 -1
- package/dist/{chunk-7S7YVBFK.js → chunk-VDSDG4FR.js} +3 -3
- package/dist/{chunk-7S7YVBFK.js.map → chunk-VDSDG4FR.js.map} +1 -1
- package/dist/{chunk-3GFQNJYE.js → chunk-VGWCHX6G.js} +104 -103
- package/dist/chunk-VGWCHX6G.js.map +1 -0
- package/dist/{chunk-VY3HTT37.js → chunk-VUH547VQ.js} +3 -3
- package/dist/{chunk-VY3HTT37.js.map → chunk-VUH547VQ.js.map} +1 -1
- package/dist/{chunk-AZCMKGDG.js → chunk-W37PFYFL.js} +4 -4
- package/dist/{chunk-AZCMKGDG.js.map → chunk-W37PFYFL.js.map} +1 -1
- package/dist/{chunk-JGUM4EXE.cjs → chunk-W3IX3GZS.cjs} +8 -8
- package/dist/{chunk-JGUM4EXE.cjs.map → chunk-W3IX3GZS.cjs.map} +1 -1
- package/dist/{chunk-UCA4JLLJ.cjs → chunk-X7GT57KW.cjs} +3 -3
- package/dist/{chunk-UCA4JLLJ.cjs.map → chunk-X7GT57KW.cjs.map} +1 -1
- package/dist/{chunk-IXL2KJOZ.cjs → chunk-XBEGD33U.cjs} +40 -40
- package/dist/{chunk-IXL2KJOZ.cjs.map → chunk-XBEGD33U.cjs.map} +1 -1
- package/dist/{chunk-FDNIK5YS.cjs → chunk-XBKIFGBB.cjs} +8 -8
- package/dist/{chunk-FDNIK5YS.cjs.map → chunk-XBKIFGBB.cjs.map} +1 -1
- package/dist/{chunk-HZE5MHQO.js → chunk-XT7HKQ4H.js} +3 -3
- package/dist/{chunk-HZE5MHQO.js.map → chunk-XT7HKQ4H.js.map} +1 -1
- package/dist/{chunk-M3OK6KGR.js → chunk-ZGQKED5T.js} +3 -3
- package/dist/{chunk-M3OK6KGR.js.map → chunk-ZGQKED5T.js.map} +1 -1
- package/dist/{chunk-NWBCZ4PA.js → chunk-ZKBYG6MN.js} +4 -4
- package/dist/{chunk-NWBCZ4PA.js.map → chunk-ZKBYG6MN.js.map} +1 -1
- package/dist/collaboration/index.cjs +1 -1
- package/dist/collaboration/index.js +1 -1
- package/dist/connect/docx.cjs +19 -19
- package/dist/connect/docx.js +15 -15
- package/dist/connect/index.cjs +762 -762
- package/dist/connect/index.js +63 -63
- package/dist/connect/viewer.cjs +14 -14
- package/dist/connect/viewer.js +13 -13
- package/dist/connection/dashboards/ConnectedDashboardsPage.d.ts +6 -0
- package/dist/dashboards/chartModel.d.ts +12 -0
- package/dist/dashboards/index.cjs +113 -42
- package/dist/dashboards/index.cjs.map +1 -1
- package/dist/dashboards/index.js +95 -24
- package/dist/dashboards/index.js.map +1 -1
- package/dist/embed/index.cjs +29 -29
- package/dist/embed/index.js +23 -23
- package/dist/facts/index.cjs +43 -43
- package/dist/facts/index.js +2 -2
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/home/index.cjs +31 -31
- package/dist/home/index.js +3 -3
- package/dist/index.cjs +383 -383
- package/dist/index.js +21 -21
- package/dist/settings/index.cjs +153 -153
- package/dist/settings/index.js +4 -4
- package/dist/shell/index.cjs +36 -36
- package/dist/shell/index.js +4 -4
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +19 -19
- package/dist/studio/index.js +14 -14
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +33 -33
- package/dist/workflow-canvas/index.js +22 -22
- package/node_modules/@arbidocs/coedit/package.json +2 -2
- package/node_modules/@docx-editor.dev/core/dist/automation.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/automation.d.ts +60 -13
- package/node_modules/@docx-editor.dev/core/dist/automation.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/binding.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/binding.d.ts +21 -13
- package/node_modules/@docx-editor.dev/core/dist/binding.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{index-Bsg7oIKP.d.ts → chrome-print-CAs51cpq.d.ts} +31 -21
- package/node_modules/@docx-editor.dev/core/dist/{chunk-VDNNLG6X.js → chunk-236O4YQW.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-4HENIAFG.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-SRPILEWV.cjs → chunk-6JPL6ZAS.cjs} +5 -5
- package/node_modules/@docx-editor.dev/core/dist/{chunk-2RC2EPND.js → chunk-6ZQP4HQ7.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{chunk-ZUHOMK52.cjs → chunk-7WQ7AAHW.cjs} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{chunk-Z6WBFXJU.js → chunk-BCXH4BXB.js} +3 -3
- package/node_modules/@docx-editor.dev/core/dist/{chunk-QMLCVPCD.cjs → chunk-BY2ACZZ6.cjs} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-CAJEXXVG.cjs +4 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-CPWLFPWC.js +30 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-6APGXLBB.cjs → chunk-D7ZMDMPX.cjs} +2 -2
- package/node_modules/@docx-editor.dev/core/dist/chunk-DOHF6FA7.cjs +30 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-DVX32P2P.js +27 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-6EYYL7FL.js → chunk-E4LOMDNL.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-EKLM7NWB.cjs +7 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-G3K63G7P.cjs +27 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-5CSUYANV.js → chunk-G4HOFIKJ.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{chunk-K5U2PLDP.cjs → chunk-JLVBDYVQ.cjs} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-LQX36Z5P.js +7 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-TSLBZ26X.js → chunk-LSZ6KPKK.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{chunk-O2AL2HSJ.cjs → chunk-MM5QBMTE.cjs} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{chunk-ETTO6GK3.js → chunk-OMCG63ZF.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-OSFOJTHU.cjs +18 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-E7BQA6UP.js → chunk-RCLZXP3B.js} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-T6K2QYNZ.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-TRGAVV2Y.js +4 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-U4JZVSOE.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-2GO5T2JU.cjs → chunk-UHHYFIDT.cjs} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-V3N4SOAK.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/{chunk-6AWEKBLB.cjs → chunk-W35WTWAO.cjs} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-YQ5G6LC7.js +18 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.d.ts +5 -5
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/collaboration.d.ts +4 -4
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.d.ts +3 -3
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.d.ts +9 -10
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.d.ts +2 -2
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.d.ts +33 -9
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.d.ts +2 -2
- package/node_modules/@docx-editor.dev/core/dist/{custom-node-writes-cvL5rhcD.d.ts → custom-node-writes-Bn6uciLb.d.ts} +2 -2
- package/node_modules/@docx-editor.dev/core/dist/diagnostic-context-B8M79cfK.d.ts +30 -0
- package/node_modules/@docx-editor.dev/core/dist/diagnostic-hints-BeVjfNOv.d.ts +113 -0
- package/node_modules/@docx-editor.dev/core/dist/{document-protection-BAGVGqaP.d.ts → document-protection-CUb55pl_.d.ts} +2 -2
- package/node_modules/@docx-editor.dev/core/dist/{editor-Ci7IZGmG.d.ts → editor-CZQZmTIU.d.ts} +386 -9
- package/node_modules/@docx-editor.dev/core/dist/{editor-scope-OHPwVQ5l.d.ts → editor-scope-7o9xweiJ.d.ts} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/editor.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/editor.d.ts +54 -33
- package/node_modules/@docx-editor.dev/core/dist/editor.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/export.cjs +2 -2
- package/node_modules/@docx-editor.dev/core/dist/export.d.ts +13 -14
- package/node_modules/@docx-editor.dev/core/dist/export.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{font-resolver-BVQB14qT.d.ts → font-resolver-lSBLirLR.d.ts} +3 -3
- package/node_modules/@docx-editor.dev/core/dist/{headless-document-view-qH331moE.d.ts → headless-document-view-pp3q7wIh.d.ts} +2 -2
- package/node_modules/@docx-editor.dev/core/dist/{image-resources-BN-hUgCn.d.ts → image-resources-tXLQShoC.d.ts} +2 -2
- package/node_modules/@docx-editor.dev/core/dist/index.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/index.d.ts +65 -20
- package/node_modules/@docx-editor.dev/core/dist/index.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{layout-shaping-BEyuiQOk.d.ts → layout-shaping-BD-dF_rn.d.ts} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/layout.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/layout.d.ts +17 -20
- package/node_modules/@docx-editor.dev/core/dist/layout.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{note-properties-4Y9o6Gyk.d.ts → note-properties-qQUjO1GQ.d.ts} +3 -3
- package/node_modules/@docx-editor.dev/core/dist/{omml-equation-CuzBL5DD.d.ts → omml-equation-BUbU0utM.d.ts} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/output.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/output.d.ts +8 -9
- package/node_modules/@docx-editor.dev/core/dist/output.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{protocol-Bqk4Izjc.d.ts → protocol-DYzzz2ej.d.ts} +2 -2
- package/node_modules/@docx-editor.dev/core/dist/{review-paragraph-order-DT-n6ouC.d.ts → review-paragraph-order-CN_0l2Cb.d.ts} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{semantic-cell-selection-D9D1KSXq.d.ts → semantic-cell-selection-eYag3P47.d.ts} +4 -211
- package/node_modules/@docx-editor.dev/core/dist/{semantic-interaction-CIC-PooQ.d.ts → semantic-interaction-kR_QB845.d.ts} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{semantic-paint-BME37OMv.d.ts → semantic-paint-ZayFF3tD.d.ts} +17 -5
- package/node_modules/@docx-editor.dev/core/dist/{semantic-record-queries-CBlZqZNa.d.ts → semantic-record-queries-Bsgth6lv.d.ts} +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{semantic-records-4B3WwFAi.d.ts → semantic-records-DQmumPgL.d.ts} +1279 -828
- package/node_modules/@docx-editor.dev/core/dist/store.cjs +1 -1
- package/node_modules/@docx-editor.dev/core/dist/store.d.ts +1466 -1464
- package/node_modules/@docx-editor.dev/core/dist/store.js +1 -1
- package/node_modules/@docx-editor.dev/core/dist/{tree-package-fragment-BeeKxDw8.d.ts → tree-package-store-CovjNARF.d.ts} +83 -83
- package/node_modules/@docx-editor.dev/core/dist/{tree-session-contract-CVbmlMlq.d.ts → tree-session-contract-CZVAGl51.d.ts} +6 -6
- package/node_modules/@docx-editor.dev/core/dist/{types-barrel-D3xCgQX6.d.ts → types-barrel-DuC5QBNC.d.ts} +548 -527
- package/node_modules/@docx-editor.dev/core/package.json +3 -3
- package/node_modules/@docx-editor.dev/react/dist/index.js +3 -3
- package/node_modules/@docx-editor.dev/react/dist/index.mjs +3 -3
- package/node_modules/@docx-editor.dev/react/package.json +4 -4
- package/package.json +8 -8
- package/dist/ConnectedStreamedWordArtifact-HLJ5IIOU.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-JQ34AOUU.cjs.map +0 -1
- package/dist/RechartsRenderer-23OF4H6X.js.map +0 -1
- package/dist/RechartsRenderer-GIRCW7DB.cjs.map +0 -1
- package/dist/ai-ADS6YSS2.cjs.map +0 -1
- package/dist/ai-KHWTGBT5.js.map +0 -1
- package/dist/chunk-3GFQNJYE.js.map +0 -1
- package/dist/chunk-5AC52BHL.cjs.map +0 -1
- package/dist/chunk-AVGHTUPE.js.map +0 -1
- package/dist/chunk-BAUZUIHB.js.map +0 -1
- package/dist/chunk-CHQMVIHR.js.map +0 -1
- package/dist/chunk-D35EHOK5.cjs.map +0 -1
- package/dist/chunk-FPOKWML2.js.map +0 -1
- package/dist/chunk-GX75YCWJ.cjs.map +0 -1
- package/dist/chunk-I7CJDF3V.cjs.map +0 -1
- package/dist/chunk-OAIOOVFN.cjs.map +0 -1
- package/dist/chunk-UQ2OBHMV.js.map +0 -1
- package/dist/chunk-ZMVF7EYJ.cjs.map +0 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-4GBTELJV.cjs +0 -28
- package/node_modules/@docx-editor.dev/core/dist/chunk-4R3TEXMN.js +0 -18
- package/node_modules/@docx-editor.dev/core/dist/chunk-EO4C5QJW.cjs +0 -2
- package/node_modules/@docx-editor.dev/core/dist/chunk-FIJZIQXA.cjs +0 -18
- package/node_modules/@docx-editor.dev/core/dist/chunk-FRXAOVTB.js +0 -28
- package/node_modules/@docx-editor.dev/core/dist/chunk-J6BVWIDB.js +0 -2
- package/node_modules/@docx-editor.dev/core/dist/chunk-JGNVNT2A.cjs +0 -2
- package/node_modules/@docx-editor.dev/core/dist/chunk-KKIJG3C6.js +0 -2
- package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +0 -27
- package/node_modules/@docx-editor.dev/core/dist/chunk-NBCVVZOM.cjs +0 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-O5INAWZQ.js +0 -1
- package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +0 -27
- package/node_modules/@docx-editor.dev/core/dist/chunk-VHAVHCQY.js +0 -7
- package/node_modules/@docx-editor.dev/core/dist/chunk-VX43VBAX.cjs +0 -7
- package/node_modules/@docx-editor.dev/core/dist/review-pane-D9jm8DcY.d.ts +0 -128
- package/node_modules/@docx-editor.dev/core/dist/revision-projection-DZ4kKVev.d.ts +0 -242
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkM23W7IID_cjs = require('../chunk-M23W7IID.cjs');
|
|
5
|
+
var chunkPBPO54KZ_cjs = require('../chunk-PBPO54KZ.cjs');
|
|
6
6
|
require('../chunk-2VJBIBPE.cjs');
|
|
7
7
|
require('../chunk-OZQ26FNK.cjs');
|
|
8
8
|
require('../chunk-ZU2B2RZK.cjs');
|
|
@@ -314,12 +314,16 @@ var DEFAULT_DASHBOARDS_PAGE_LABELS = {
|
|
|
314
314
|
empty: "No dashboards yet",
|
|
315
315
|
emptyDescription: "Start from a template or a blank page, then add charts, figures and tables.",
|
|
316
316
|
loadError: "The dashboards could not be loaded.",
|
|
317
|
+
offline: "You are offline. Your dashboards show when the connection is back.",
|
|
318
|
+
retry: "Try again",
|
|
317
319
|
panels: (count) => `${count} ${count === 1 ? "panel" : "panels"}`,
|
|
318
320
|
back: "All dashboards",
|
|
319
321
|
edit: "Edit",
|
|
320
322
|
more: "More dashboard actions",
|
|
321
323
|
delete: "Delete",
|
|
322
324
|
confirmDelete: (title) => `Delete the dashboard \u201C${title}\u201D? Its panels go with it.`,
|
|
325
|
+
deleteFailed: "The dashboard could not be deleted",
|
|
326
|
+
confirmDiscard: "Discard the changes to this dashboard?",
|
|
323
327
|
save: "Save",
|
|
324
328
|
saving: "Saving\u2026",
|
|
325
329
|
cancel: "Cancel",
|
|
@@ -342,8 +346,8 @@ function PanelsGrid({
|
|
|
342
346
|
editing,
|
|
343
347
|
testId
|
|
344
348
|
}) {
|
|
345
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
346
|
-
|
|
349
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkM23W7IID_cjs.DashboardGrid, { testId: testId && `${testId}-grid`, children: spec.panels.map((panel2, i) => /* @__PURE__ */ jsxRuntime.jsx(chunkM23W7IID_cjs.DashboardCell, { width: panel2.width, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
350
|
+
chunkM23W7IID_cjs.DashboardPanel,
|
|
347
351
|
{
|
|
348
352
|
panel: panel2,
|
|
349
353
|
labels: panelLabels,
|
|
@@ -402,24 +406,29 @@ function PanelsGrid({
|
|
|
402
406
|
function NewDashboardButton({
|
|
403
407
|
templates,
|
|
404
408
|
l,
|
|
405
|
-
|
|
409
|
+
onBlank,
|
|
410
|
+
onTemplate,
|
|
411
|
+
busy,
|
|
406
412
|
testId
|
|
407
413
|
}) {
|
|
408
|
-
const blank = { version: 1, title: l.untitled, panels: [] };
|
|
409
414
|
return /* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenu, { children: [
|
|
410
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { "data-testid":
|
|
415
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { disabled: busy, "data-testid": `${testId}-new`, children: [
|
|
411
416
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" }),
|
|
412
417
|
" ",
|
|
413
|
-
l.newDashboard
|
|
418
|
+
busy ? l.saving : l.newDashboard
|
|
414
419
|
] }) }),
|
|
415
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenuContent, { align: "end", children: [
|
|
416
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DropdownMenuItem, { onSelect:
|
|
417
|
-
templates.map((t, i) => /* @__PURE__ */ jsxRuntime.
|
|
420
|
+
/* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenuContent, { align: "end", className: "max-w-[min(20rem,calc(100vw-1rem))]", children: [
|
|
421
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.DropdownMenuItem, { onSelect: onBlank, "data-testid": `${testId}-blank`, children: l.blank }),
|
|
422
|
+
templates.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
418
423
|
ui.DropdownMenuItem,
|
|
419
424
|
{
|
|
420
|
-
onSelect: () =>
|
|
421
|
-
"
|
|
422
|
-
|
|
425
|
+
onSelect: () => onTemplate(t),
|
|
426
|
+
className: "flex-col items-start gap-0.5",
|
|
427
|
+
"data-testid": `${testId}-template-${i}`,
|
|
428
|
+
children: [
|
|
429
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t.title }),
|
|
430
|
+
t.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: t.description })
|
|
431
|
+
]
|
|
423
432
|
},
|
|
424
433
|
`${t.title}-${i}`
|
|
425
434
|
))
|
|
@@ -444,20 +453,52 @@ function ConnectedDashboardsPage({
|
|
|
444
453
|
const saved = react.useSavedDashboards(store);
|
|
445
454
|
const save = react.useSaveDashboard(store);
|
|
446
455
|
const remove = react.useDeleteDashboard(store);
|
|
447
|
-
const [ownOpenId, setOwnOpenId] = react
|
|
456
|
+
const [ownOpenId, setOwnOpenId] = react.useSessionView(
|
|
457
|
+
`dashboards.open:${store.scope ?? ""}`,
|
|
458
|
+
null
|
|
459
|
+
);
|
|
448
460
|
const openId = dashboardId === void 0 ? ownOpenId : dashboardId;
|
|
449
461
|
const setOpenId = (id) => {
|
|
450
462
|
setOwnOpenId(id);
|
|
451
463
|
onDashboardChange?.(id);
|
|
452
464
|
};
|
|
453
465
|
const [draft, setDraft] = react$1.useState(null);
|
|
466
|
+
const [creating, setCreating] = react$1.useState(false);
|
|
467
|
+
const openIdRef = react$1.useRef(openId);
|
|
468
|
+
react$1.useEffect(() => {
|
|
469
|
+
openIdRef.current = openId;
|
|
470
|
+
}, [openId]);
|
|
454
471
|
const [editingPanel, setEditingPanel] = react$1.useState(null);
|
|
455
472
|
const open = react$1.useMemo(() => saved.data?.find((d) => d.id === openId), [saved.data, openId]);
|
|
456
473
|
react$1.useEffect(() => {
|
|
457
474
|
if (openId && saved.data && !open && !draft) setOwnOpenId(null);
|
|
458
475
|
}, [openId, saved.data, open, draft]);
|
|
459
|
-
const startEditing = (d) => setDraft({ id: d.id, spec: d.spec });
|
|
460
|
-
const
|
|
476
|
+
const startEditing = (d) => setDraft({ id: d.id, spec: d.spec, base: d.spec });
|
|
477
|
+
const createBlank = () => {
|
|
478
|
+
const spec = { version: 1, title: l.untitled, panels: [] };
|
|
479
|
+
setDraft({ spec, base: spec });
|
|
480
|
+
};
|
|
481
|
+
const createFromTemplate = async (template) => {
|
|
482
|
+
if (creating) return;
|
|
483
|
+
setCreating(true);
|
|
484
|
+
const openWhenStarted = openIdRef.current;
|
|
485
|
+
try {
|
|
486
|
+
const result = await save.mutateAsync({
|
|
487
|
+
spec: { ...template, panels: template.panels.map((p) => ({ ...p })) }
|
|
488
|
+
});
|
|
489
|
+
if (openIdRef.current === openWhenStarted) setOpenId(result.id);
|
|
490
|
+
notify(l.saved, "success");
|
|
491
|
+
} catch (error) {
|
|
492
|
+
notify(`${l.saveFailed}: ${error instanceof Error ? error.message : String(error)}`, "error");
|
|
493
|
+
} finally {
|
|
494
|
+
setCreating(false);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
const cancelEditing = async () => {
|
|
498
|
+
const changed = draft && JSON.stringify(draft.spec) !== JSON.stringify(draft.base);
|
|
499
|
+
if (changed && !await confirm({ message: l.confirmDiscard, kind: "yesno" })) return;
|
|
500
|
+
setDraft(null);
|
|
501
|
+
};
|
|
461
502
|
const updateDraft = (patch) => setDraft((d) => d ? { ...d, spec: { ...d.spec, ...patch } } : d);
|
|
462
503
|
const setPanels = (panels) => updateDraft({ panels });
|
|
463
504
|
const commit = async () => {
|
|
@@ -476,8 +517,15 @@ function ConnectedDashboardsPage({
|
|
|
476
517
|
};
|
|
477
518
|
const deleteOpen = async (d) => {
|
|
478
519
|
if (!await confirm({ message: l.confirmDelete(d.spec.title), kind: "yesno" })) return;
|
|
479
|
-
|
|
480
|
-
|
|
520
|
+
try {
|
|
521
|
+
await remove.mutateAsync(d.id);
|
|
522
|
+
setOpenId(null);
|
|
523
|
+
} catch (error) {
|
|
524
|
+
notify(
|
|
525
|
+
`${l.deleteFailed}: ${error instanceof Error ? error.message : String(error)}`,
|
|
526
|
+
"error"
|
|
527
|
+
);
|
|
528
|
+
}
|
|
481
529
|
};
|
|
482
530
|
let content;
|
|
483
531
|
if (draft) {
|
|
@@ -488,7 +536,15 @@ function ConnectedDashboardsPage({
|
|
|
488
536
|
{
|
|
489
537
|
title: draft.spec.title || l.untitled,
|
|
490
538
|
actions: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
|
|
491
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
539
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
540
|
+
ui.Button,
|
|
541
|
+
{
|
|
542
|
+
variant: "ghost",
|
|
543
|
+
onClick: () => void cancelEditing(),
|
|
544
|
+
"data-testid": `${testId}-cancel`,
|
|
545
|
+
children: l.cancel
|
|
546
|
+
}
|
|
547
|
+
),
|
|
492
548
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
493
549
|
ui.Button,
|
|
494
550
|
{
|
|
@@ -564,7 +620,7 @@ function ConnectedDashboardsPage({
|
|
|
564
620
|
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: l.editPanelDescription })
|
|
565
621
|
] }),
|
|
566
622
|
editingPanel && /* @__PURE__ */ jsxRuntime.jsx(
|
|
567
|
-
|
|
623
|
+
chunkM23W7IID_cjs.PanelEditor,
|
|
568
624
|
{
|
|
569
625
|
value: editingPanel.panel,
|
|
570
626
|
onChange: (panel2) => setEditingPanel({ ...editingPanel, panel: panel2 }),
|
|
@@ -645,22 +701,37 @@ function ConnectedDashboardsPage({
|
|
|
645
701
|
] });
|
|
646
702
|
} else {
|
|
647
703
|
const list = saved.data ?? [];
|
|
704
|
+
const newButton = /* @__PURE__ */ jsxRuntime.jsx(
|
|
705
|
+
NewDashboardButton,
|
|
706
|
+
{
|
|
707
|
+
templates,
|
|
708
|
+
l,
|
|
709
|
+
onBlank: createBlank,
|
|
710
|
+
onTemplate: (t) => void createFromTemplate(t),
|
|
711
|
+
busy: creating,
|
|
712
|
+
testId
|
|
713
|
+
}
|
|
714
|
+
);
|
|
715
|
+
const isEmpty = !!saved.data && list.length === 0;
|
|
648
716
|
content = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", "data-testid": `${testId}-list`, children: [
|
|
649
717
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
650
718
|
chunkNSD37OF5_cjs.PageHeader,
|
|
651
719
|
{
|
|
652
720
|
title: l.title,
|
|
653
721
|
description: l.description,
|
|
654
|
-
actions:
|
|
722
|
+
actions: saved.isError || saved.data && !isEmpty ? newButton : void 0
|
|
655
723
|
}
|
|
656
724
|
),
|
|
657
|
-
saved.isError
|
|
725
|
+
saved.isError && !saved.data ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-3", role: "alert", children: [
|
|
726
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: l.loadError }),
|
|
727
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", size: "sm", onClick: () => void saved.refetch(), children: l.retry })
|
|
728
|
+
] }) : !saved.data && saved.fetchStatus === "paused" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", "data-testid": `${testId}-offline`, children: l.offline }) : !saved.data ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-24 animate-pulse rounded-xl bg-muted" }, i)) }) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
658
729
|
chunkZW6FPIFC_cjs.EmptyState,
|
|
659
730
|
{
|
|
660
731
|
icon: lucideReact.LayoutDashboard,
|
|
661
732
|
title: l.empty,
|
|
662
733
|
description: l.emptyDescription,
|
|
663
|
-
action:
|
|
734
|
+
action: newButton,
|
|
664
735
|
testId: `${testId}-empty`
|
|
665
736
|
}
|
|
666
737
|
) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", children: list.map((d) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { variant: "elevated", className: "card-hover h-full rounded-xl p-0", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -694,75 +765,75 @@ function ConnectedDashboardsPage({
|
|
|
694
765
|
|
|
695
766
|
Object.defineProperty(exports, "ChartRenderer", {
|
|
696
767
|
enumerable: true,
|
|
697
|
-
get: function () { return
|
|
768
|
+
get: function () { return chunkM23W7IID_cjs.ChartRenderer; }
|
|
698
769
|
});
|
|
699
770
|
Object.defineProperty(exports, "ChartTable", {
|
|
700
771
|
enumerable: true,
|
|
701
|
-
get: function () { return
|
|
772
|
+
get: function () { return chunkM23W7IID_cjs.ChartTable; }
|
|
702
773
|
});
|
|
703
774
|
Object.defineProperty(exports, "DEFAULT_CHART_RENDERER_LABELS", {
|
|
704
775
|
enumerable: true,
|
|
705
|
-
get: function () { return
|
|
776
|
+
get: function () { return chunkM23W7IID_cjs.DEFAULT_CHART_RENDERER_LABELS; }
|
|
706
777
|
});
|
|
707
778
|
Object.defineProperty(exports, "DEFAULT_DASHBOARD_PANEL_LABELS", {
|
|
708
779
|
enumerable: true,
|
|
709
|
-
get: function () { return
|
|
780
|
+
get: function () { return chunkM23W7IID_cjs.DEFAULT_DASHBOARD_PANEL_LABELS; }
|
|
710
781
|
});
|
|
711
782
|
Object.defineProperty(exports, "DEFAULT_PANEL_EDITOR_LABELS", {
|
|
712
783
|
enumerable: true,
|
|
713
|
-
get: function () { return
|
|
784
|
+
get: function () { return chunkM23W7IID_cjs.DEFAULT_PANEL_EDITOR_LABELS; }
|
|
714
785
|
});
|
|
715
786
|
Object.defineProperty(exports, "DEFAULT_PANEL_VIEW_LABELS", {
|
|
716
787
|
enumerable: true,
|
|
717
|
-
get: function () { return
|
|
788
|
+
get: function () { return chunkM23W7IID_cjs.DEFAULT_PANEL_VIEW_LABELS; }
|
|
718
789
|
});
|
|
719
790
|
Object.defineProperty(exports, "DashboardCell", {
|
|
720
791
|
enumerable: true,
|
|
721
|
-
get: function () { return
|
|
792
|
+
get: function () { return chunkM23W7IID_cjs.DashboardCell; }
|
|
722
793
|
});
|
|
723
794
|
Object.defineProperty(exports, "DashboardGrid", {
|
|
724
795
|
enumerable: true,
|
|
725
|
-
get: function () { return
|
|
796
|
+
get: function () { return chunkM23W7IID_cjs.DashboardGrid; }
|
|
726
797
|
});
|
|
727
798
|
Object.defineProperty(exports, "DashboardPanel", {
|
|
728
799
|
enumerable: true,
|
|
729
|
-
get: function () { return
|
|
800
|
+
get: function () { return chunkM23W7IID_cjs.DashboardPanel; }
|
|
730
801
|
});
|
|
731
802
|
Object.defineProperty(exports, "PANEL_FORMATTERS", {
|
|
732
803
|
enumerable: true,
|
|
733
|
-
get: function () { return
|
|
804
|
+
get: function () { return chunkM23W7IID_cjs.PANEL_FORMATTERS; }
|
|
734
805
|
});
|
|
735
806
|
Object.defineProperty(exports, "PanelEditor", {
|
|
736
807
|
enumerable: true,
|
|
737
|
-
get: function () { return
|
|
808
|
+
get: function () { return chunkM23W7IID_cjs.PanelEditor; }
|
|
738
809
|
});
|
|
739
810
|
Object.defineProperty(exports, "PanelView", {
|
|
740
811
|
enumerable: true,
|
|
741
|
-
get: function () { return
|
|
812
|
+
get: function () { return chunkM23W7IID_cjs.PanelView; }
|
|
742
813
|
});
|
|
743
814
|
Object.defineProperty(exports, "clampPanelWidth", {
|
|
744
815
|
enumerable: true,
|
|
745
|
-
get: function () { return
|
|
816
|
+
get: function () { return chunkM23W7IID_cjs.clampPanelWidth; }
|
|
746
817
|
});
|
|
747
818
|
Object.defineProperty(exports, "DEFAULT_UNIT_FORMATTERS", {
|
|
748
819
|
enumerable: true,
|
|
749
|
-
get: function () { return
|
|
820
|
+
get: function () { return chunkPBPO54KZ_cjs.DEFAULT_UNIT_FORMATTERS; }
|
|
750
821
|
});
|
|
751
822
|
Object.defineProperty(exports, "chartModelOf", {
|
|
752
823
|
enumerable: true,
|
|
753
|
-
get: function () { return
|
|
824
|
+
get: function () { return chunkPBPO54KZ_cjs.chartModelOf; }
|
|
754
825
|
});
|
|
755
826
|
Object.defineProperty(exports, "formatBucketLabel", {
|
|
756
827
|
enumerable: true,
|
|
757
|
-
get: function () { return
|
|
828
|
+
get: function () { return chunkPBPO54KZ_cjs.formatBucketLabel; }
|
|
758
829
|
});
|
|
759
830
|
Object.defineProperty(exports, "formatterOf", {
|
|
760
831
|
enumerable: true,
|
|
761
|
-
get: function () { return
|
|
832
|
+
get: function () { return chunkPBPO54KZ_cjs.formatterOf; }
|
|
762
833
|
});
|
|
763
834
|
Object.defineProperty(exports, "metricValueOf", {
|
|
764
835
|
enumerable: true,
|
|
765
|
-
get: function () { return
|
|
836
|
+
get: function () { return chunkPBPO54KZ_cjs.metricValueOf; }
|
|
766
837
|
});
|
|
767
838
|
Object.defineProperty(exports, "CATEGORICAL_SERIES_STYLES", {
|
|
768
839
|
enumerable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/connection/dashboards/templates.ts","../../src/connection/dashboards/ConnectedDashboardsPage.tsx"],"names":["DEFAULT_DOCUMENTS_SOURCE_LABELS","DEFAULT_WORKFLOWS_SOURCE_LABELS","DEFAULT_ACTIVITY_SOURCE_LABELS","DashboardGrid","panel","DashboardCell","jsx","DashboardPanel","jsxs","Fragment","Button","Pencil","ArrowUp","ArrowDown","Trash2","DropdownMenu","DropdownMenuTrigger","Plus","DropdownMenuContent","DropdownMenuItem","useBlocksEnvironment","useFeature","useDashboardStore","useSavedDashboards","useSaveDashboard","useDeleteDashboard","useState","useMemo","useEffect","PageHeader","Label","Input","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","PanelEditor","DialogFooter","ArrowLeft","MoreHorizontal","EmptyState","LayoutDashboard","Card","cn"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The starting points a new dashboard is offered by default (`DASHBOARD_TEMPLATES`): an overview,\n * then one dashboard per area (documents, tags and facts, workflows, AI usage, recent activity),\n * over the built-in sources and their default words. A site passes its own\n * (`ConnectedDashboardsPage templates`), in its words.\n */\nimport {\n DEFAULT_ACTIVITY_SOURCE_LABELS,\n DEFAULT_DOCUMENTS_SOURCE_LABELS,\n DEFAULT_WORKFLOWS_SOURCE_LABELS,\n type ChartSpec,\n type DashboardSpec,\n type PanelSpec,\n} from '@arbidocs/react'\n\n/** A fresh panel id. */\nexport function newPanelId(): string {\n return `pnl-${Math.random().toString(36).slice(2, 10)}`\n}\n\n/** A new panel: a bar chart of the documents by type, ready to be changed. */\nexport function newPanel(): PanelSpec {\n return {\n id: newPanelId(),\n title: 'New panel',\n source: { id: 'documents' },\n chart: { type: 'bar', x: 'type' },\n width: 6,\n }\n}\n\n/** A panel of `source`, `width` columns wide. */\nconst panel = (\n id: string,\n title: string,\n source: string,\n chart: ChartSpec,\n width = 6\n): PanelSpec => ({ id, title, source: { id: source }, chart, width })\n\n/** One figure, a quarter of the row by default. */\nconst metric = (\n id: string,\n title: string,\n source: string,\n chart: Omit<ChartSpec, 'type'> = {},\n width = 3\n): PanelSpec => panel(id, title, source, { type: 'metric', ...chart }, width)\n\nconst FAILED_DOCUMENT = DEFAULT_DOCUMENTS_SOURCE_LABELS.statuses.failed\nconst FAILED_RUN = DEFAULT_WORKFLOWS_SOURCE_LABELS.results.failed\nconst WORKFLOW_RUN = DEFAULT_ACTIVITY_SOURCE_LABELS.kinds.workflow_run\n\nconst DOCUMENTS_BY_TYPE = panel('documents-by-type', 'Documents by type', 'documents', {\n type: 'bar',\n x: 'type',\n limit: 8,\n})\nconst DOCUMENTS_BY_STATUS = panel('documents-by-status', 'Documents by status', 'documents', {\n type: 'donut',\n x: 'status',\n})\nconst AI_USAGE_BY_MODEL = panel('usage-by-model', 'AI usage by model', 'usage', {\n type: 'bar',\n x: 'day',\n bucket: 'day',\n series: 'model',\n y: 'spend',\n aggregate: 'sum',\n stacked: true,\n})\nconst WORKFLOW_RUNS_BY_DAY = panel(\n 'workflow-runs-by-day',\n 'Workflow runs by day',\n 'activity',\n {\n type: 'bar',\n x: 'when',\n bucket: 'day',\n series: 'status',\n stacked: true,\n filters: [{ field: 'kind', op: 'eq', value: WORKFLOW_RUN }],\n },\n 12\n)\n\nexport const OVERVIEW_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Overview',\n description: 'Documents, threads, facts and AI usage at a glance.',\n panels: [\n metric('documents', 'Documents', 'documents'),\n metric('threads', 'Threads', 'conversations'),\n metric('facts', 'Facts', 'facts'),\n metric('ai-usage', 'AI usage this period', 'usage', { aggregate: 'sum', y: 'spend' }),\n panel('threads-over-time', 'Threads started', 'conversations', {\n type: 'line',\n x: 'created',\n bucket: 'month',\n }),\n AI_USAGE_BY_MODEL,\n DOCUMENTS_BY_TYPE,\n DOCUMENTS_BY_STATUS,\n panel(\n 'due',\n 'Due dates',\n 'conversations',\n {\n type: 'table',\n columns: ['title', 'due', 'status', 'owner'],\n filters: [{ field: 'due', op: 'not_empty' }],\n orderBy: { field: 'due' },\n },\n 12\n ),\n ],\n}\n\nconst DOCUMENTS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Documents',\n description: 'What the workspace holds: status, type, folders, who added what, and when.',\n panels: [\n metric('documents', 'Documents', 'documents'),\n metric('pages', 'Pages', 'documents', { aggregate: 'sum', y: 'pages' }),\n metric('size', 'Stored', 'documents', { aggregate: 'sum', y: 'size' }),\n metric('failed', 'Failed to process', 'documents', {\n filters: [{ field: 'status', op: 'eq', value: FAILED_DOCUMENT }],\n }),\n DOCUMENTS_BY_STATUS,\n DOCUMENTS_BY_TYPE,\n panel('documents-added', 'Documents added', 'documents', {\n type: 'line',\n x: 'created',\n bucket: 'month',\n }),\n panel('documents-by-folder', 'Documents by folder', 'documents', {\n type: 'bar',\n x: 'folder',\n limit: 10,\n }),\n panel('documents-by-person', 'Added by', 'documents', { type: 'bar', x: 'createdBy' }),\n panel('documents-by-kind', 'Kinds of document', 'documents', {\n type: 'donut',\n x: 'nature',\n limit: 8,\n }),\n panel(\n 'latest-documents',\n 'Latest documents',\n 'documents',\n {\n type: 'table',\n columns: ['name', 'type', 'status', 'createdBy', 'created'],\n orderBy: { field: 'created', direction: 'desc' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst TAGS_FACTS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Tags and facts',\n description: 'How the workspace is organised: its tags and what carries them, and its facts.',\n panels: [\n metric('tags', 'Tags', 'tags'),\n metric('facts', 'Facts', 'facts'),\n metric('confirmed-facts', 'Confirmed facts', 'facts', {\n filters: [{ field: 'confirmed', op: 'eq', value: true }],\n }),\n metric('dated-facts', 'Dated facts', 'facts', {\n filters: [{ field: 'date', op: 'not_empty' }],\n }),\n panel('most-used-tags', 'Most used tags', 'tags', {\n type: 'bar',\n x: 'name',\n y: 'documents',\n aggregate: 'sum',\n limit: 10,\n // Tags on no document yet are not \"used\": none at all shows the empty state.\n filters: [{ field: 'documents', op: 'gt', value: 0 }],\n }),\n panel('tags-by-kind', 'Tags by kind', 'tags', { type: 'donut', x: 'kind' }),\n panel('facts-by-tag', 'Facts by tag', 'facts', { type: 'bar', x: 'tags', limit: 10 }),\n panel('facts-added', 'Facts added', 'facts', { type: 'line', x: 'created', bucket: 'month' }),\n panel(\n 'latest-facts',\n 'Latest facts',\n 'facts',\n {\n type: 'table',\n columns: ['text', 'tags', 'date', 'createdBy'],\n orderBy: { field: 'created', direction: 'desc' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst WORKFLOWS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Workflows',\n description: 'Your workflows: what starts them, how their runs end, and what runs next.',\n panels: [\n metric('workflows', 'Workflows', 'workflows', {}, 4),\n metric(\n 'workflows-on',\n 'Switched on',\n 'workflows',\n {\n filters: [{ field: 'active', op: 'eq', value: true }],\n },\n 4\n ),\n metric(\n 'workflows-failed',\n 'Last run failed',\n 'workflows',\n {\n filters: [{ field: 'lastResult', op: 'eq', value: FAILED_RUN }],\n },\n 4\n ),\n panel('workflows-by-result', 'Last run result', 'workflows', {\n type: 'donut',\n x: 'lastResult',\n }),\n panel('workflows-by-trigger', 'What starts them', 'workflows', { type: 'bar', x: 'trigger' }),\n WORKFLOW_RUNS_BY_DAY,\n panel(\n 'next-runs',\n 'Next runs',\n 'workflows',\n {\n type: 'table',\n columns: ['name', 'trigger', 'nextRun', 'lastResult'],\n filters: [{ field: 'nextRun', op: 'not_empty' }],\n orderBy: { field: 'nextRun' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst AI_USAGE_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'AI usage',\n description: 'What the AI has done and cost this period, by day, model and project.',\n panels: [\n metric('ai-spend', 'AI usage this period', 'usage', { aggregate: 'sum', y: 'spend' }, 4),\n metric('ai-tokens', 'Tokens', 'usage', { aggregate: 'sum', y: 'tokens' }, 4),\n metric('ai-requests', 'Requests', 'usage', { aggregate: 'sum', y: 'requests' }, 4),\n panel(\n 'spend-by-day',\n 'AI usage by day',\n 'usage',\n { type: 'line', x: 'day', bucket: 'day', y: 'spend', aggregate: 'sum' },\n 12\n ),\n AI_USAGE_BY_MODEL,\n panel('tokens-by-model', 'Tokens by model', 'usage', {\n type: 'bar',\n x: 'model',\n y: 'tokens',\n aggregate: 'sum',\n limit: 6,\n }),\n panel(\n 'spend-by-project',\n 'AI usage by project',\n 'usage',\n { type: 'bar', x: 'project', y: 'spend', aggregate: 'sum' },\n 12\n ),\n ],\n}\n\nconst ACTIVITY_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Recent activity',\n description: 'The latest activity in the workspace: who did what, where, and when.',\n panels: [\n panel(\n 'activity-by-day',\n 'Activity by day',\n 'activity',\n { type: 'bar', x: 'when', bucket: 'day', series: 'area', stacked: true },\n 12\n ),\n panel('activity-by-area', 'Activity by area', 'activity', { type: 'donut', x: 'area' }),\n panel('activity-by-person', 'Activity by person', 'activity', {\n type: 'bar',\n x: 'person',\n limit: 10,\n }),\n WORKFLOW_RUNS_BY_DAY,\n panel(\n 'latest-activity',\n 'Latest activity',\n 'activity',\n {\n type: 'table',\n columns: ['when', 'person', 'kind', 'item', 'status'],\n orderBy: { field: 'when', direction: 'desc' },\n limit: 15,\n },\n 12\n ),\n ],\n}\n\n/**\n * The templates a host's features allow: one with a panel over the workflows source only while\n * the `workflows` feature is on.\n */\nexport function templatesFor(\n templates: readonly DashboardSpec[],\n features: { workflows: boolean }\n): readonly DashboardSpec[] {\n return features.workflows\n ? templates\n : templates.filter((t) => !t.panels.some((p) => p.source.id === 'workflows'))\n}\n\n/** The default templates under \"New dashboard\", in order (`templatesFor` narrows them). */\nexport const DASHBOARD_TEMPLATES: readonly DashboardSpec[] = [\n OVERVIEW_DASHBOARD,\n DOCUMENTS_DASHBOARD,\n TAGS_FACTS_DASHBOARD,\n WORKFLOWS_DASHBOARD,\n AI_USAGE_DASHBOARD,\n ACTIVITY_DASHBOARD,\n]\n","/**\n * `ConnectedDashboardsPage`: the saved dashboards, one open to read, and an editor to build them.\n * The list, a dashboard's grid of `DashboardPanel`s, and its edit mode (panels added and changed with\n * `PanelEditor`, moved, removed, then saved) are one kit. Dashboards are kept by the host's store\n * (`useDashboardStore`: by default a database of the open workspace).\n *\n * Generic: the page's words come in through `labels`, and a site's own starting points (its\n * vocabulary, its fields) through `templates`.\n */\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n ArrowDown,\n ArrowLeft,\n ArrowUp,\n LayoutDashboard,\n MoreHorizontal,\n Pencil,\n Plus,\n Trash2,\n} from 'lucide-react'\nimport {\n useFeature,\n useDashboardStore,\n useDeleteDashboard,\n useSaveDashboard,\n useSavedDashboards,\n type DashboardSpec,\n type PanelSpec,\n type SavedDashboard,\n} from '@arbidocs/react'\nimport {\n Button,\n Card,\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Label,\n} from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PageHeader } from '../../components/PageHeader'\nimport { DashboardCell, DashboardGrid } from '../../dashboards/DashboardGrid'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { DashboardPanel, type DashboardPanelLabels } from './DashboardPanel'\nimport { PanelEditor, type PanelEditorLabels } from './PanelEditor'\nimport { DASHBOARD_TEMPLATES, newPanel, templatesFor } from './templates'\n\nexport interface DashboardsPageLabels {\n title: string\n description: string\n newDashboard: string\n blank: string\n untitled: string\n empty: string\n emptyDescription: string\n loadError: string\n panels: (count: number) => string\n back: string\n edit: string\n /** The \"…\" menu of an open dashboard (its rarer actions: delete). */\n more: string\n delete: string\n confirmDelete: (title: string) => string\n save: string\n saving: string\n cancel: string\n dashboardTitle: string\n dashboardDescription: string\n addPanel: string\n editPanel: string\n editPanelDescription: string\n panelDone: string\n moveUp: string\n moveDown: string\n removePanel: string\n noPanels: string\n saved: string\n saveFailed: string\n}\n\nexport const DEFAULT_DASHBOARDS_PAGE_LABELS: DashboardsPageLabels = {\n title: 'Dashboards',\n description:\n 'Charts and figures from your documents, threads, tags, facts, workflows, AI usage and databases.',\n newDashboard: 'New dashboard',\n blank: 'Blank dashboard',\n untitled: 'Untitled dashboard',\n empty: 'No dashboards yet',\n emptyDescription: 'Start from a template or a blank page, then add charts, figures and tables.',\n loadError: 'The dashboards could not be loaded.',\n panels: (count) => `${count} ${count === 1 ? 'panel' : 'panels'}`,\n back: 'All dashboards',\n edit: 'Edit',\n more: 'More dashboard actions',\n delete: 'Delete',\n confirmDelete: (title) => `Delete the dashboard “${title}”? Its panels go with it.`,\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n dashboardTitle: 'Name',\n dashboardDescription: 'Description',\n addPanel: 'Add a panel',\n editPanel: 'Panel',\n editPanelDescription: 'Choose the data, how to show it, and what to measure.',\n panelDone: 'Done',\n moveUp: 'Move up',\n moveDown: 'Move down',\n removePanel: 'Remove the panel',\n noPanels: 'No panels yet. Add one to start.',\n saved: 'Dashboard saved',\n saveFailed: 'The dashboard could not be saved',\n}\n\nexport interface ConnectedDashboardsPageProps {\n /**\n * Starting points for a new dashboard. Default: an overview and one per area (documents, tags and\n * facts, workflows, AI usage, recent activity) over the built-in sources; Workflows only while\n * the host's `workflows` feature is on.\n */\n templates?: readonly DashboardSpec[]\n /** The open dashboard (controlled, for a route): `null` is the list. */\n dashboardId?: string | null\n onDashboardChange?: (id: string | null) => void\n labels?: Partial<DashboardsPageLabels>\n panelLabels?: Partial<DashboardPanelLabels>\n editorLabels?: Partial<PanelEditorLabels>\n /**\n * Classes on the page's scrolling frame, merged over its padding (`p-4 sm:p-6`): a host whose\n * own frame pads its pages passes `p-0`.\n */\n className?: string\n testId?: string\n}\n\n/** What is being edited: a saved dashboard (`id`) or a new one. */\ninterface Draft {\n id?: string\n spec: DashboardSpec\n}\n\nfunction PanelsGrid({\n spec,\n panelLabels,\n editing,\n testId,\n}: {\n spec: DashboardSpec\n panelLabels?: Partial<DashboardPanelLabels>\n editing?: {\n l: DashboardsPageLabels\n onEdit: (index: number) => void\n onMove: (index: number, by: -1 | 1) => void\n onRemove: (index: number) => void\n }\n testId?: string\n}) {\n return (\n <DashboardGrid testId={testId && `${testId}-grid`}>\n {spec.panels.map((panel, i) => (\n <DashboardCell key={panel.id} width={panel.width}>\n <DashboardPanel\n panel={panel}\n labels={panelLabels}\n testId={testId && `${testId}-panel-${panel.id}`}\n actions={\n editing && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.editPanel}\n onClick={() => editing.onEdit(i)}\n >\n <Pencil className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveUp}\n disabled={i === 0}\n onClick={() => editing.onMove(i, -1)}\n >\n <ArrowUp className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveDown}\n disabled={i === spec.panels.length - 1}\n onClick={() => editing.onMove(i, 1)}\n >\n <ArrowDown className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.removePanel}\n onClick={() => editing.onRemove(i)}\n >\n <Trash2 className=\"size-3.5\" />\n </Button>\n </>\n )\n }\n />\n </DashboardCell>\n ))}\n </DashboardGrid>\n )\n}\n\nfunction NewDashboardButton({\n templates,\n l,\n onCreate,\n testId,\n}: {\n templates: readonly DashboardSpec[]\n l: DashboardsPageLabels\n onCreate: (spec: DashboardSpec) => void\n testId?: string\n}) {\n const blank: DashboardSpec = { version: 1, title: l.untitled, panels: [] }\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid={testId && `${testId}-new`}>\n <Plus className=\"size-4\" /> {l.newDashboard}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={() => onCreate(blank)}>{l.blank}</DropdownMenuItem>\n {templates.map((t, i) => (\n <DropdownMenuItem\n key={`${t.title}-${i}`}\n onSelect={() => onCreate(t)}\n data-testid={testId && `${testId}-template-${i}`}\n >\n {t.title}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport function ConnectedDashboardsPage({\n templates: siteTemplates,\n dashboardId,\n onDashboardChange,\n labels,\n panelLabels,\n editorLabels,\n className,\n testId = 'dashboards',\n}: ConnectedDashboardsPageProps) {\n const l = { ...DEFAULT_DASHBOARDS_PAGE_LABELS, ...labels }\n const { confirm, notify } = useBlocksEnvironment()\n const workflowsOn = useFeature('workflows')\n const templates = siteTemplates ?? templatesFor(DASHBOARD_TEMPLATES, { workflows: workflowsOn })\n const store = useDashboardStore()\n const saved = useSavedDashboards(store)\n const save = useSaveDashboard(store)\n const remove = useDeleteDashboard(store)\n\n const [ownOpenId, setOwnOpenId] = useState<string | null>(null)\n const openId = dashboardId === undefined ? ownOpenId : dashboardId\n const setOpenId = (id: string | null) => {\n setOwnOpenId(id)\n onDashboardChange?.(id)\n }\n const [draft, setDraft] = useState<Draft | null>(null)\n const [editingPanel, setEditingPanel] = useState<{ index: number; panel: PanelSpec } | null>(null)\n\n const open = useMemo(() => saved.data?.find((d) => d.id === openId), [saved.data, openId])\n // A dashboard deleted elsewhere (or a stale link): back to the list.\n useEffect(() => {\n if (openId && saved.data && !open && !draft) setOwnOpenId(null)\n }, [openId, saved.data, open, draft])\n\n const startEditing = (d: SavedDashboard | Draft) => setDraft({ id: d.id, spec: d.spec })\n const createFrom = (spec: DashboardSpec) =>\n setDraft({ spec: { ...spec, panels: spec.panels.map((p) => ({ ...p })) } })\n\n const updateDraft = (patch: Partial<DashboardSpec>) =>\n setDraft((d) => (d ? { ...d, spec: { ...d.spec, ...patch } } : d))\n const setPanels = (panels: PanelSpec[]) => updateDraft({ panels })\n\n const commit = async () => {\n if (!draft) return\n try {\n const result = await save.mutateAsync({\n id: draft.id,\n spec: { ...draft.spec, title: draft.spec.title.trim() || l.untitled },\n })\n setDraft(null)\n setOpenId(result.id)\n notify(l.saved, 'success')\n } catch (error) {\n notify(`${l.saveFailed}: ${error instanceof Error ? error.message : String(error)}`, 'error')\n }\n }\n\n const deleteOpen = async (d: SavedDashboard) => {\n if (!(await confirm({ message: l.confirmDelete(d.spec.title), kind: 'yesno' }))) return\n await remove.mutateAsync(d.id)\n setOpenId(null)\n }\n\n let content\n if (draft) {\n const panels = draft.spec.panels\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-editor`}>\n <PageHeader\n title={draft.spec.title || l.untitled}\n actions={\n <div className=\"flex gap-2\">\n <Button variant=\"ghost\" onClick={() => setDraft(null)}>\n {l.cancel}\n </Button>\n <Button\n onClick={() => void commit()}\n disabled={save.isPending}\n data-testid={`${testId}-save`}\n >\n {save.isPending ? l.saving : l.save}\n </Button>\n </div>\n }\n />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-name`}>{l.dashboardTitle}</Label>\n <Input\n id={`${testId}-name`}\n value={draft.spec.title}\n onChange={(e) => updateDraft({ title: e.target.value })}\n data-testid={`${testId}-name`}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-about`}>{l.dashboardDescription}</Label>\n <Input\n id={`${testId}-about`}\n value={draft.spec.description ?? ''}\n onChange={(e) => updateDraft({ description: e.target.value || undefined })}\n />\n </div>\n </div>\n {panels.length ? (\n <PanelsGrid\n spec={draft.spec}\n panelLabels={panelLabels}\n testId={testId}\n editing={{\n l,\n onEdit: (index) => setEditingPanel({ index, panel: panels[index] }),\n onMove: (index, by) => {\n const next = [...panels]\n const [moved] = next.splice(index, 1)\n next.splice(index + by, 0, moved)\n setPanels(next)\n },\n onRemove: (index) => setPanels(panels.filter((_, i) => i !== index)),\n }}\n />\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noPanels}</p>\n )}\n <Button\n variant=\"outline\"\n onClick={() => setEditingPanel({ index: panels.length, panel: newPanel() })}\n data-testid={`${testId}-add-panel`}\n >\n <Plus className=\"size-4\" /> {l.addPanel}\n </Button>\n <Dialog open={editingPanel !== null} onOpenChange={(o) => !o && setEditingPanel(null)}>\n <DialogContent className=\"max-h-[90dvh] max-w-5xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{l.editPanel}</DialogTitle>\n <DialogDescription>{l.editPanelDescription}</DialogDescription>\n </DialogHeader>\n {editingPanel && (\n <PanelEditor\n value={editingPanel.panel}\n onChange={(panel) => setEditingPanel({ ...editingPanel, panel })}\n labels={editorLabels}\n testId={`${testId}-panel-editor`}\n />\n )}\n <DialogFooter>\n <Button variant=\"ghost\" onClick={() => setEditingPanel(null)}>\n {l.cancel}\n </Button>\n <Button\n data-testid={`${testId}-panel-done`}\n onClick={() => {\n if (!editingPanel) return\n const next = [...panels]\n next[editingPanel.index] = editingPanel.panel\n setPanels(next)\n setEditingPanel(null)\n }}\n >\n {l.panelDone}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n } else if (open) {\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-view`}>\n <PageHeader\n title={open.spec.title}\n description={open.spec.description}\n leading={\n <Button variant=\"ghost\" size=\"icon\" aria-label={l.back} onClick={() => setOpenId(null)}>\n <ArrowLeft className=\"size-4\" />\n </Button>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => startEditing(open)}\n data-testid={`${testId}-edit`}\n >\n <Pencil className=\"size-4\" /> {l.edit}\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.more}\n data-testid={`${testId}-more`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n onSelect={() => void deleteOpen(open)}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`${testId}-delete`}\n >\n <Trash2 className=\"size-4\" /> {l.delete}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n }\n />\n <PanelsGrid spec={open.spec} panelLabels={panelLabels} testId={testId} />\n </div>\n )\n } else {\n const list = saved.data ?? []\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-list`}>\n <PageHeader\n title={l.title}\n description={l.description}\n actions={\n <NewDashboardButton templates={templates} l={l} onCreate={createFrom} testId={testId} />\n }\n />\n {saved.isError ? (\n <p className=\"text-sm text-destructive\" role=\"alert\">\n {l.loadError}\n </p>\n ) : saved.isLoading ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-24 animate-pulse rounded-xl bg-muted\" />\n ))}\n </div>\n ) : list.length === 0 ? (\n <EmptyState\n icon={LayoutDashboard}\n title={l.empty}\n description={l.emptyDescription}\n action={<NewDashboardButton templates={templates} l={l} onCreate={createFrom} />}\n testId={`${testId}-empty`}\n />\n ) : (\n <ul className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {list.map((d) => (\n <li key={d.id}>\n <Card variant=\"elevated\" className=\"card-hover h-full rounded-xl p-0\">\n <button\n type=\"button\"\n className=\"flex size-full flex-col items-start gap-1 rounded-xl p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => setOpenId(d.id)}\n data-testid={`${testId}-open-${d.id}`}\n >\n <span className=\"flex items-center gap-2 font-medium text-foreground\">\n <LayoutDashboard className=\"size-4 text-muted-foreground\" />\n {d.spec.title}\n </span>\n {d.spec.description && (\n <span className=\"line-clamp-2 text-sm text-muted-foreground\">\n {d.spec.description}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {l.panels(d.spec.panels.length)}\n </span>\n </button>\n </Card>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n }\n\n // The page scrolls and pads itself, as the other kit pages do, so a host only mounts it.\n return (\n <div\n className={cn('h-full min-h-0 w-full overflow-y-auto p-4 sm:p-6', className)}\n data-testid={testId}\n >\n {content}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/connection/dashboards/templates.ts","../../src/connection/dashboards/ConnectedDashboardsPage.tsx"],"names":["DEFAULT_DOCUMENTS_SOURCE_LABELS","DEFAULT_WORKFLOWS_SOURCE_LABELS","DEFAULT_ACTIVITY_SOURCE_LABELS","DashboardGrid","panel","DashboardCell","jsx","DashboardPanel","jsxs","Fragment","Button","Pencil","ArrowUp","ArrowDown","Trash2","DropdownMenu","DropdownMenuTrigger","Plus","DropdownMenuContent","DropdownMenuItem","useBlocksEnvironment","useFeature","useDashboardStore","useSavedDashboards","useSaveDashboard","useDeleteDashboard","useSessionView","useState","useRef","useEffect","useMemo","PageHeader","Label","Input","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","PanelEditor","DialogFooter","ArrowLeft","MoreHorizontal","EmptyState","LayoutDashboard","Card","cn"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The starting points a new dashboard is offered by default (`DASHBOARD_TEMPLATES`): an overview,\n * then one dashboard per area (documents, tags and facts, workflows, AI usage, recent activity),\n * over the built-in sources and their default words. A site passes its own\n * (`ConnectedDashboardsPage templates`), in its words.\n */\nimport {\n DEFAULT_ACTIVITY_SOURCE_LABELS,\n DEFAULT_DOCUMENTS_SOURCE_LABELS,\n DEFAULT_WORKFLOWS_SOURCE_LABELS,\n type ChartSpec,\n type DashboardSpec,\n type PanelSpec,\n} from '@arbidocs/react'\n\n/** A fresh panel id. */\nexport function newPanelId(): string {\n return `pnl-${Math.random().toString(36).slice(2, 10)}`\n}\n\n/** A new panel: a bar chart of the documents by type, ready to be changed. */\nexport function newPanel(): PanelSpec {\n return {\n id: newPanelId(),\n title: 'New panel',\n source: { id: 'documents' },\n chart: { type: 'bar', x: 'type' },\n width: 6,\n }\n}\n\n/** A panel of `source`, `width` columns wide. */\nconst panel = (\n id: string,\n title: string,\n source: string,\n chart: ChartSpec,\n width = 6\n): PanelSpec => ({ id, title, source: { id: source }, chart, width })\n\n/** One figure, a quarter of the row by default. */\nconst metric = (\n id: string,\n title: string,\n source: string,\n chart: Omit<ChartSpec, 'type'> = {},\n width = 3\n): PanelSpec => panel(id, title, source, { type: 'metric', ...chart }, width)\n\nconst FAILED_DOCUMENT = DEFAULT_DOCUMENTS_SOURCE_LABELS.statuses.failed\nconst FAILED_RUN = DEFAULT_WORKFLOWS_SOURCE_LABELS.results.failed\nconst WORKFLOW_RUN = DEFAULT_ACTIVITY_SOURCE_LABELS.kinds.workflow_run\n\nconst DOCUMENTS_BY_TYPE = panel('documents-by-type', 'Documents by type', 'documents', {\n type: 'bar',\n x: 'type',\n limit: 8,\n})\nconst DOCUMENTS_BY_STATUS = panel('documents-by-status', 'Documents by status', 'documents', {\n type: 'donut',\n x: 'status',\n})\nconst AI_USAGE_BY_MODEL = panel('usage-by-model', 'AI usage by model', 'usage', {\n type: 'bar',\n x: 'day',\n bucket: 'day',\n series: 'model',\n y: 'spend',\n aggregate: 'sum',\n stacked: true,\n})\nconst WORKFLOW_RUNS_BY_DAY = panel(\n 'workflow-runs-by-day',\n 'Workflow runs by day',\n 'activity',\n {\n type: 'bar',\n x: 'when',\n bucket: 'day',\n series: 'status',\n stacked: true,\n filters: [{ field: 'kind', op: 'eq', value: WORKFLOW_RUN }],\n },\n 12\n)\n\nexport const OVERVIEW_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Overview',\n description: 'Documents, threads, facts and AI usage at a glance.',\n panels: [\n metric('documents', 'Documents', 'documents'),\n metric('threads', 'Threads', 'conversations'),\n metric('facts', 'Facts', 'facts'),\n metric('ai-usage', 'AI usage this period', 'usage', { aggregate: 'sum', y: 'spend' }),\n panel('threads-over-time', 'Threads started', 'conversations', {\n type: 'line',\n x: 'created',\n bucket: 'month',\n }),\n AI_USAGE_BY_MODEL,\n DOCUMENTS_BY_TYPE,\n DOCUMENTS_BY_STATUS,\n panel(\n 'due',\n 'Due dates',\n 'conversations',\n {\n type: 'table',\n columns: ['title', 'due', 'status', 'owner'],\n filters: [{ field: 'due', op: 'not_empty' }],\n orderBy: { field: 'due' },\n },\n 12\n ),\n ],\n}\n\nconst DOCUMENTS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Documents',\n description: 'What the workspace holds: status, type, folders, who added what, and when.',\n panels: [\n metric('documents', 'Documents', 'documents'),\n metric('pages', 'Pages', 'documents', { aggregate: 'sum', y: 'pages' }),\n metric('size', 'Stored', 'documents', { aggregate: 'sum', y: 'size' }),\n metric('failed', 'Failed to process', 'documents', {\n filters: [{ field: 'status', op: 'eq', value: FAILED_DOCUMENT }],\n }),\n DOCUMENTS_BY_STATUS,\n DOCUMENTS_BY_TYPE,\n panel('documents-added', 'Documents added', 'documents', {\n type: 'line',\n x: 'created',\n bucket: 'month',\n }),\n panel('documents-by-folder', 'Documents by folder', 'documents', {\n type: 'bar',\n x: 'folder',\n limit: 10,\n }),\n panel('documents-by-person', 'Added by', 'documents', { type: 'bar', x: 'createdBy' }),\n panel('documents-by-kind', 'Kinds of document', 'documents', {\n type: 'donut',\n x: 'nature',\n limit: 8,\n }),\n panel(\n 'latest-documents',\n 'Latest documents',\n 'documents',\n {\n type: 'table',\n columns: ['name', 'type', 'status', 'createdBy', 'created'],\n orderBy: { field: 'created', direction: 'desc' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst TAGS_FACTS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Tags and facts',\n description: 'How the workspace is organised: its tags and what carries them, and its facts.',\n panels: [\n metric('tags', 'Tags', 'tags'),\n metric('facts', 'Facts', 'facts'),\n metric('confirmed-facts', 'Confirmed facts', 'facts', {\n filters: [{ field: 'confirmed', op: 'eq', value: true }],\n }),\n metric('dated-facts', 'Dated facts', 'facts', {\n filters: [{ field: 'date', op: 'not_empty' }],\n }),\n panel('most-used-tags', 'Most used tags', 'tags', {\n type: 'bar',\n x: 'name',\n y: 'documents',\n aggregate: 'sum',\n limit: 10,\n // Tags on no document yet are not \"used\": none at all shows the empty state.\n filters: [{ field: 'documents', op: 'gt', value: 0 }],\n }),\n panel('tags-by-kind', 'Tags by kind', 'tags', { type: 'donut', x: 'kind' }),\n panel('facts-by-tag', 'Facts by tag', 'facts', { type: 'bar', x: 'tags', limit: 10 }),\n panel('facts-added', 'Facts added', 'facts', { type: 'line', x: 'created', bucket: 'month' }),\n panel(\n 'latest-facts',\n 'Latest facts',\n 'facts',\n {\n type: 'table',\n columns: ['text', 'tags', 'date', 'createdBy'],\n orderBy: { field: 'created', direction: 'desc' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst WORKFLOWS_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Workflows',\n description: 'Your workflows: what starts them, how their runs end, and what runs next.',\n panels: [\n metric('workflows', 'Workflows', 'workflows', {}, 4),\n metric(\n 'workflows-on',\n 'Switched on',\n 'workflows',\n {\n filters: [{ field: 'active', op: 'eq', value: true }],\n },\n 4\n ),\n metric(\n 'workflows-failed',\n 'Last run failed',\n 'workflows',\n {\n filters: [{ field: 'lastResult', op: 'eq', value: FAILED_RUN }],\n },\n 4\n ),\n panel('workflows-by-result', 'Last run result', 'workflows', {\n type: 'donut',\n x: 'lastResult',\n }),\n panel('workflows-by-trigger', 'What starts them', 'workflows', { type: 'bar', x: 'trigger' }),\n WORKFLOW_RUNS_BY_DAY,\n panel(\n 'next-runs',\n 'Next runs',\n 'workflows',\n {\n type: 'table',\n columns: ['name', 'trigger', 'nextRun', 'lastResult'],\n filters: [{ field: 'nextRun', op: 'not_empty' }],\n orderBy: { field: 'nextRun' },\n limit: 10,\n },\n 12\n ),\n ],\n}\n\nconst AI_USAGE_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'AI usage',\n description: 'What the AI has done and cost this period, by day, model and project.',\n panels: [\n metric('ai-spend', 'AI usage this period', 'usage', { aggregate: 'sum', y: 'spend' }, 4),\n metric('ai-tokens', 'Tokens', 'usage', { aggregate: 'sum', y: 'tokens' }, 4),\n metric('ai-requests', 'Requests', 'usage', { aggregate: 'sum', y: 'requests' }, 4),\n panel(\n 'spend-by-day',\n 'AI usage by day',\n 'usage',\n { type: 'line', x: 'day', bucket: 'day', y: 'spend', aggregate: 'sum' },\n 12\n ),\n AI_USAGE_BY_MODEL,\n panel('tokens-by-model', 'Tokens by model', 'usage', {\n type: 'bar',\n x: 'model',\n y: 'tokens',\n aggregate: 'sum',\n limit: 6,\n }),\n panel(\n 'spend-by-project',\n 'AI usage by project',\n 'usage',\n { type: 'bar', x: 'project', y: 'spend', aggregate: 'sum' },\n 12\n ),\n ],\n}\n\nconst ACTIVITY_DASHBOARD: DashboardSpec = {\n version: 1,\n title: 'Recent activity',\n description: 'The latest activity in the workspace: who did what, where, and when.',\n panels: [\n panel(\n 'activity-by-day',\n 'Activity by day',\n 'activity',\n { type: 'bar', x: 'when', bucket: 'day', series: 'area', stacked: true },\n 12\n ),\n panel('activity-by-area', 'Activity by area', 'activity', { type: 'donut', x: 'area' }),\n panel('activity-by-person', 'Activity by person', 'activity', {\n type: 'bar',\n x: 'person',\n limit: 10,\n }),\n WORKFLOW_RUNS_BY_DAY,\n panel(\n 'latest-activity',\n 'Latest activity',\n 'activity',\n {\n type: 'table',\n columns: ['when', 'person', 'kind', 'item', 'status'],\n orderBy: { field: 'when', direction: 'desc' },\n limit: 15,\n },\n 12\n ),\n ],\n}\n\n/**\n * The templates a host's features allow: one with a panel over the workflows source only while\n * the `workflows` feature is on.\n */\nexport function templatesFor(\n templates: readonly DashboardSpec[],\n features: { workflows: boolean }\n): readonly DashboardSpec[] {\n return features.workflows\n ? templates\n : templates.filter((t) => !t.panels.some((p) => p.source.id === 'workflows'))\n}\n\n/** The default templates under \"New dashboard\", in order (`templatesFor` narrows them). */\nexport const DASHBOARD_TEMPLATES: readonly DashboardSpec[] = [\n OVERVIEW_DASHBOARD,\n DOCUMENTS_DASHBOARD,\n TAGS_FACTS_DASHBOARD,\n WORKFLOWS_DASHBOARD,\n AI_USAGE_DASHBOARD,\n ACTIVITY_DASHBOARD,\n]\n","/**\n * `ConnectedDashboardsPage`: the saved dashboards, one open to read, and an editor to build them.\n * The list, a dashboard's grid of `DashboardPanel`s, and its edit mode (panels added and changed with\n * `PanelEditor`, moved, removed, then saved) are one kit. Dashboards are kept by the host's store\n * (`useDashboardStore`: by default a database of the open workspace).\n *\n * Generic: the page's words come in through `labels`, and a site's own starting points (its\n * vocabulary, its fields) through `templates`.\n */\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowDown,\n ArrowLeft,\n ArrowUp,\n LayoutDashboard,\n MoreHorizontal,\n Pencil,\n Plus,\n Trash2,\n} from 'lucide-react'\nimport {\n useFeature,\n useSessionView,\n useDashboardStore,\n useDeleteDashboard,\n useSaveDashboard,\n useSavedDashboards,\n type DashboardSpec,\n type PanelSpec,\n type SavedDashboard,\n} from '@arbidocs/react'\nimport {\n Button,\n Card,\n cn,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Label,\n} from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PageHeader } from '../../components/PageHeader'\nimport { DashboardCell, DashboardGrid } from '../../dashboards/DashboardGrid'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { DashboardPanel, type DashboardPanelLabels } from './DashboardPanel'\nimport { PanelEditor, type PanelEditorLabels } from './PanelEditor'\nimport { DASHBOARD_TEMPLATES, newPanel, templatesFor } from './templates'\n\nexport interface DashboardsPageLabels {\n title: string\n description: string\n newDashboard: string\n blank: string\n untitled: string\n empty: string\n emptyDescription: string\n loadError: string\n /** Offline with no dashboards cached. */\n offline: string\n retry: string\n panels: (count: number) => string\n back: string\n edit: string\n /** The \"…\" menu of an open dashboard (its rarer actions: delete). */\n more: string\n delete: string\n confirmDelete: (title: string) => string\n deleteFailed: string\n /** Leaving the editor with changes not saved. */\n confirmDiscard: string\n save: string\n saving: string\n cancel: string\n dashboardTitle: string\n dashboardDescription: string\n addPanel: string\n editPanel: string\n editPanelDescription: string\n panelDone: string\n moveUp: string\n moveDown: string\n removePanel: string\n noPanels: string\n saved: string\n saveFailed: string\n}\n\nexport const DEFAULT_DASHBOARDS_PAGE_LABELS: DashboardsPageLabels = {\n title: 'Dashboards',\n description:\n 'Charts and figures from your documents, threads, tags, facts, workflows, AI usage and databases.',\n newDashboard: 'New dashboard',\n blank: 'Blank dashboard',\n untitled: 'Untitled dashboard',\n empty: 'No dashboards yet',\n emptyDescription: 'Start from a template or a blank page, then add charts, figures and tables.',\n loadError: 'The dashboards could not be loaded.',\n offline: 'You are offline. Your dashboards show when the connection is back.',\n retry: 'Try again',\n panels: (count) => `${count} ${count === 1 ? 'panel' : 'panels'}`,\n back: 'All dashboards',\n edit: 'Edit',\n more: 'More dashboard actions',\n delete: 'Delete',\n confirmDelete: (title) => `Delete the dashboard “${title}”? Its panels go with it.`,\n deleteFailed: 'The dashboard could not be deleted',\n confirmDiscard: 'Discard the changes to this dashboard?',\n save: 'Save',\n saving: 'Saving…',\n cancel: 'Cancel',\n dashboardTitle: 'Name',\n dashboardDescription: 'Description',\n addPanel: 'Add a panel',\n editPanel: 'Panel',\n editPanelDescription: 'Choose the data, how to show it, and what to measure.',\n panelDone: 'Done',\n moveUp: 'Move up',\n moveDown: 'Move down',\n removePanel: 'Remove the panel',\n noPanels: 'No panels yet. Add one to start.',\n saved: 'Dashboard saved',\n saveFailed: 'The dashboard could not be saved',\n}\n\nexport interface ConnectedDashboardsPageProps {\n /**\n * Starting points for a new dashboard. Default: an overview and one per area (documents, tags and\n * facts, workflows, AI usage, recent activity) over the built-in sources; Workflows only while\n * the host's `workflows` feature is on.\n */\n templates?: readonly DashboardSpec[]\n /** The open dashboard (controlled, for a route): `null` is the list. */\n dashboardId?: string | null\n onDashboardChange?: (id: string | null) => void\n labels?: Partial<DashboardsPageLabels>\n panelLabels?: Partial<DashboardPanelLabels>\n editorLabels?: Partial<PanelEditorLabels>\n /**\n * Classes on the page's scrolling frame, merged over its padding (`p-4 sm:p-6`): a host whose\n * own frame pads its pages passes `p-0`.\n */\n className?: string\n testId?: string\n}\n\n/** What is being edited: a saved dashboard (`id`) or a new one, and the spec it started from. */\ninterface Draft {\n id?: string\n spec: DashboardSpec\n base: DashboardSpec\n}\n\nfunction PanelsGrid({\n spec,\n panelLabels,\n editing,\n testId,\n}: {\n spec: DashboardSpec\n panelLabels?: Partial<DashboardPanelLabels>\n editing?: {\n l: DashboardsPageLabels\n onEdit: (index: number) => void\n onMove: (index: number, by: -1 | 1) => void\n onRemove: (index: number) => void\n }\n testId?: string\n}) {\n return (\n <DashboardGrid testId={testId && `${testId}-grid`}>\n {spec.panels.map((panel, i) => (\n <DashboardCell key={panel.id} width={panel.width}>\n <DashboardPanel\n panel={panel}\n labels={panelLabels}\n testId={testId && `${testId}-panel-${panel.id}`}\n actions={\n editing && (\n <>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.editPanel}\n onClick={() => editing.onEdit(i)}\n >\n <Pencil className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveUp}\n disabled={i === 0}\n onClick={() => editing.onMove(i, -1)}\n >\n <ArrowUp className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.moveDown}\n disabled={i === spec.panels.length - 1}\n onClick={() => editing.onMove(i, 1)}\n >\n <ArrowDown className=\"size-3.5\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={editing.l.removePanel}\n onClick={() => editing.onRemove(i)}\n >\n <Trash2 className=\"size-3.5\" />\n </Button>\n </>\n )\n }\n />\n </DashboardCell>\n ))}\n </DashboardGrid>\n )\n}\n\n/**\n * \"New dashboard\": a blank one opens in the editor; a template is saved and opened at once (it is\n * a finished dashboard; Edit changes it), so each menu item says what the template shows.\n */\nfunction NewDashboardButton({\n templates,\n l,\n onBlank,\n onTemplate,\n busy,\n testId,\n}: {\n templates: readonly DashboardSpec[]\n l: DashboardsPageLabels\n onBlank: () => void\n onTemplate: (spec: DashboardSpec) => void\n /** A template is being saved: the button waits. */\n busy: boolean\n testId: string\n}) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button disabled={busy} data-testid={`${testId}-new`}>\n <Plus className=\"size-4\" /> {busy ? l.saving : l.newDashboard}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"max-w-[min(20rem,calc(100vw-1rem))]\">\n <DropdownMenuItem onSelect={onBlank} data-testid={`${testId}-blank`}>\n {l.blank}\n </DropdownMenuItem>\n {templates.map((t, i) => (\n <DropdownMenuItem\n key={`${t.title}-${i}`}\n onSelect={() => onTemplate(t)}\n className=\"flex-col items-start gap-0.5\"\n data-testid={`${testId}-template-${i}`}\n >\n <span>{t.title}</span>\n {t.description && (\n <span className=\"text-xs text-muted-foreground\">{t.description}</span>\n )}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nexport function ConnectedDashboardsPage({\n templates: siteTemplates,\n dashboardId,\n onDashboardChange,\n labels,\n panelLabels,\n editorLabels,\n className,\n testId = 'dashboards',\n}: ConnectedDashboardsPageProps) {\n const l = { ...DEFAULT_DASHBOARDS_PAGE_LABELS, ...labels }\n const { confirm, notify } = useBlocksEnvironment()\n const workflowsOn = useFeature('workflows')\n const templates = siteTemplates ?? templatesFor(DASHBOARD_TEMPLATES, { workflows: workflowsOn })\n const store = useDashboardStore()\n const saved = useSavedDashboards(store)\n const save = useSaveDashboard(store)\n const remove = useDeleteDashboard(store)\n\n // Uncontrolled, the open dashboard is a view of the session (one per workspace), so a reload\n // reopens it.\n const [ownOpenId, setOwnOpenId] = useSessionView<string | null>(\n `dashboards.open:${store.scope ?? ''}`,\n null\n )\n const openId = dashboardId === undefined ? ownOpenId : dashboardId\n const setOpenId = (id: string | null) => {\n setOwnOpenId(id)\n onDashboardChange?.(id)\n }\n const [draft, setDraft] = useState<Draft | null>(null)\n const [creating, setCreating] = useState(false)\n // The open dashboard as of now, for a save that finishes later.\n const openIdRef = useRef(openId)\n useEffect(() => {\n openIdRef.current = openId\n }, [openId])\n const [editingPanel, setEditingPanel] = useState<{ index: number; panel: PanelSpec } | null>(null)\n\n const open = useMemo(() => saved.data?.find((d) => d.id === openId), [saved.data, openId])\n // A dashboard deleted elsewhere (or a stale link): back to the list.\n useEffect(() => {\n if (openId && saved.data && !open && !draft) setOwnOpenId(null)\n }, [openId, saved.data, open, draft])\n\n const startEditing = (d: SavedDashboard) => setDraft({ id: d.id, spec: d.spec, base: d.spec })\n const createBlank = () => {\n const spec: DashboardSpec = { version: 1, title: l.untitled, panels: [] }\n setDraft({ spec, base: spec })\n }\n const createFromTemplate = async (template: DashboardSpec) => {\n if (creating) return\n setCreating(true)\n const openWhenStarted = openIdRef.current\n try {\n const result = await save.mutateAsync({\n spec: { ...template, panels: template.panels.map((p) => ({ ...p })) },\n })\n // Opened only if the person has not opened another one meanwhile.\n if (openIdRef.current === openWhenStarted) setOpenId(result.id)\n notify(l.saved, 'success')\n } catch (error) {\n notify(`${l.saveFailed}: ${error instanceof Error ? error.message : String(error)}`, 'error')\n } finally {\n setCreating(false)\n }\n }\n const cancelEditing = async () => {\n const changed = draft && JSON.stringify(draft.spec) !== JSON.stringify(draft.base)\n if (changed && !(await confirm({ message: l.confirmDiscard, kind: 'yesno' }))) return\n setDraft(null)\n }\n\n const updateDraft = (patch: Partial<DashboardSpec>) =>\n setDraft((d) => (d ? { ...d, spec: { ...d.spec, ...patch } } : d))\n const setPanels = (panels: PanelSpec[]) => updateDraft({ panels })\n\n const commit = async () => {\n if (!draft) return\n try {\n const result = await save.mutateAsync({\n id: draft.id,\n spec: { ...draft.spec, title: draft.spec.title.trim() || l.untitled },\n })\n setDraft(null)\n setOpenId(result.id)\n notify(l.saved, 'success')\n } catch (error) {\n notify(`${l.saveFailed}: ${error instanceof Error ? error.message : String(error)}`, 'error')\n }\n }\n\n const deleteOpen = async (d: SavedDashboard) => {\n if (!(await confirm({ message: l.confirmDelete(d.spec.title), kind: 'yesno' }))) return\n try {\n await remove.mutateAsync(d.id)\n setOpenId(null)\n } catch (error) {\n notify(\n `${l.deleteFailed}: ${error instanceof Error ? error.message : String(error)}`,\n 'error'\n )\n }\n }\n\n let content\n if (draft) {\n const panels = draft.spec.panels\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-editor`}>\n <PageHeader\n title={draft.spec.title || l.untitled}\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"ghost\"\n onClick={() => void cancelEditing()}\n data-testid={`${testId}-cancel`}\n >\n {l.cancel}\n </Button>\n <Button\n onClick={() => void commit()}\n disabled={save.isPending}\n data-testid={`${testId}-save`}\n >\n {save.isPending ? l.saving : l.save}\n </Button>\n </div>\n }\n />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-name`}>{l.dashboardTitle}</Label>\n <Input\n id={`${testId}-name`}\n value={draft.spec.title}\n onChange={(e) => updateDraft({ title: e.target.value })}\n data-testid={`${testId}-name`}\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${testId}-about`}>{l.dashboardDescription}</Label>\n <Input\n id={`${testId}-about`}\n value={draft.spec.description ?? ''}\n onChange={(e) => updateDraft({ description: e.target.value || undefined })}\n />\n </div>\n </div>\n {panels.length ? (\n <PanelsGrid\n spec={draft.spec}\n panelLabels={panelLabels}\n testId={testId}\n editing={{\n l,\n onEdit: (index) => setEditingPanel({ index, panel: panels[index] }),\n onMove: (index, by) => {\n const next = [...panels]\n const [moved] = next.splice(index, 1)\n next.splice(index + by, 0, moved)\n setPanels(next)\n },\n onRemove: (index) => setPanels(panels.filter((_, i) => i !== index)),\n }}\n />\n ) : (\n <p className=\"text-sm text-muted-foreground\">{l.noPanels}</p>\n )}\n <Button\n variant=\"outline\"\n onClick={() => setEditingPanel({ index: panels.length, panel: newPanel() })}\n data-testid={`${testId}-add-panel`}\n >\n <Plus className=\"size-4\" /> {l.addPanel}\n </Button>\n <Dialog open={editingPanel !== null} onOpenChange={(o) => !o && setEditingPanel(null)}>\n <DialogContent className=\"max-h-[90dvh] max-w-5xl overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{l.editPanel}</DialogTitle>\n <DialogDescription>{l.editPanelDescription}</DialogDescription>\n </DialogHeader>\n {editingPanel && (\n <PanelEditor\n value={editingPanel.panel}\n onChange={(panel) => setEditingPanel({ ...editingPanel, panel })}\n labels={editorLabels}\n testId={`${testId}-panel-editor`}\n />\n )}\n <DialogFooter>\n <Button variant=\"ghost\" onClick={() => setEditingPanel(null)}>\n {l.cancel}\n </Button>\n <Button\n data-testid={`${testId}-panel-done`}\n onClick={() => {\n if (!editingPanel) return\n const next = [...panels]\n next[editingPanel.index] = editingPanel.panel\n setPanels(next)\n setEditingPanel(null)\n }}\n >\n {l.panelDone}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n )\n } else if (open) {\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-view`}>\n <PageHeader\n title={open.spec.title}\n description={open.spec.description}\n leading={\n <Button variant=\"ghost\" size=\"icon\" aria-label={l.back} onClick={() => setOpenId(null)}>\n <ArrowLeft className=\"size-4\" />\n </Button>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => startEditing(open)}\n data-testid={`${testId}-edit`}\n >\n <Pencil className=\"size-4\" /> {l.edit}\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.more}\n data-testid={`${testId}-more`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n onSelect={() => void deleteOpen(open)}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`${testId}-delete`}\n >\n <Trash2 className=\"size-4\" /> {l.delete}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n }\n />\n <PanelsGrid spec={open.spec} panelLabels={panelLabels} testId={testId} />\n </div>\n )\n } else {\n const list = saved.data ?? []\n const newButton = (\n <NewDashboardButton\n templates={templates}\n l={l}\n onBlank={createBlank}\n onTemplate={(t) => void createFromTemplate(t)}\n busy={creating}\n testId={testId}\n />\n )\n // Empty only once the list is in: offline with nothing cached, the read is paused (not\n // loading), and saying \"No dashboards yet\" then would be wrong.\n const isEmpty = !!saved.data && list.length === 0\n content = (\n <div className=\"space-y-6\" data-testid={`${testId}-list`}>\n {/* With none yet, the empty state holds the one \"New dashboard\" (and none shows while the\n list loads, so it does not appear and vanish). */}\n <PageHeader\n title={l.title}\n description={l.description}\n actions={saved.isError || (saved.data && !isEmpty) ? newButton : undefined}\n />\n {saved.isError && !saved.data ? (\n <div className=\"flex flex-wrap items-center gap-3\" role=\"alert\">\n <p className=\"text-sm text-destructive\">{l.loadError}</p>\n <Button variant=\"outline\" size=\"sm\" onClick={() => void saved.refetch()}>\n {l.retry}\n </Button>\n </div>\n ) : !saved.data && saved.fetchStatus === 'paused' ? (\n <p className=\"text-sm text-muted-foreground\" data-testid={`${testId}-offline`}>\n {l.offline}\n </p>\n ) : !saved.data ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-24 animate-pulse rounded-xl bg-muted\" />\n ))}\n </div>\n ) : isEmpty ? (\n <EmptyState\n icon={LayoutDashboard}\n title={l.empty}\n description={l.emptyDescription}\n action={newButton}\n testId={`${testId}-empty`}\n />\n ) : (\n <ul className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {list.map((d) => (\n <li key={d.id}>\n <Card variant=\"elevated\" className=\"card-hover h-full rounded-xl p-0\">\n <button\n type=\"button\"\n className=\"flex size-full flex-col items-start gap-1 rounded-xl p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => setOpenId(d.id)}\n data-testid={`${testId}-open-${d.id}`}\n >\n <span className=\"flex items-center gap-2 font-medium text-foreground\">\n <LayoutDashboard className=\"size-4 text-muted-foreground\" />\n {d.spec.title}\n </span>\n {d.spec.description && (\n <span className=\"line-clamp-2 text-sm text-muted-foreground\">\n {d.spec.description}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {l.panels(d.spec.panels.length)}\n </span>\n </button>\n </Card>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n }\n\n // The page scrolls and pads itself, as the other kit pages do, so a host only mounts it.\n return (\n <div\n className={cn('h-full min-h-0 w-full overflow-y-auto p-4 sm:p-6', className)}\n data-testid={testId}\n >\n {content}\n </div>\n )\n}\n"]}
|