@arbidocs/blocks 0.5.106 → 0.5.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -6
- package/dist/{ConnectedCallDock-P7LK2HYF.cjs → ConnectedCallDock-H3WWFGXF.cjs} +8 -8
- package/dist/{ConnectedCallDock-P7LK2HYF.cjs.map → ConnectedCallDock-H3WWFGXF.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-NEZJNTKH.js → ConnectedCallDock-TDYRHPAK.js} +6 -6
- package/dist/{ConnectedCallDock-NEZJNTKH.js.map → ConnectedCallDock-TDYRHPAK.js.map} +1 -1
- package/dist/{ConnectedCallRoom-FXTR4YFI.cjs → ConnectedCallRoom-55O5OUN7.cjs} +7 -7
- package/dist/{ConnectedCallRoom-FXTR4YFI.cjs.map → ConnectedCallRoom-55O5OUN7.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-K3X6ICCG.js → ConnectedCallRoom-Z6F6WCLH.js} +6 -6
- package/dist/{ConnectedCallRoom-K3X6ICCG.js.map → ConnectedCallRoom-Z6F6WCLH.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs → ConnectedNativeDocxComparison-DGBZJ4XA.cjs} +10 -10
- package/dist/{ConnectedNativeDocxComparison-7VJKOKYU.cjs.map → ConnectedNativeDocxComparison-DGBZJ4XA.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js → ConnectedNativeDocxComparison-NVZRVNOS.js} +9 -9
- package/dist/{ConnectedNativeDocxComparison-FENZYWDH.js.map → ConnectedNativeDocxComparison-NVZRVNOS.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs → ConnectedNativeDocxEditor-R4WINUUB.cjs} +10 -10
- package/dist/{ConnectedNativeDocxEditor-HB5BHGZ2.cjs.map → ConnectedNativeDocxEditor-R4WINUUB.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js → ConnectedNativeDocxEditor-RSVBN7DY.js} +8 -8
- package/dist/{ConnectedNativeDocxEditor-CNQAMO2N.js.map → ConnectedNativeDocxEditor-RSVBN7DY.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js → ConnectedProductionSetDialog-2DFBXE2X.js} +5 -5
- package/dist/{ConnectedProductionSetDialog-O4FWTZNF.js.map → ConnectedProductionSetDialog-2DFBXE2X.js.map} +1 -1
- package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs → ConnectedProductionSetDialog-KYDPQ7SG.cjs} +6 -6
- package/dist/{ConnectedProductionSetDialog-ENAIZWPK.cjs.map → ConnectedProductionSetDialog-KYDPQ7SG.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-ILMKFCDC.js → ConnectedStreamedWordArtifact-HLJ5IIOU.js} +9 -9
- package/dist/ConnectedStreamedWordArtifact-HLJ5IIOU.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-BF6JET2D.cjs → ConnectedStreamedWordArtifact-JQ34AOUU.cjs} +10 -10
- package/dist/ConnectedStreamedWordArtifact-JQ34AOUU.cjs.map +1 -0
- package/dist/{DocumentReviewCard-UOLXZKZE.js → DocumentReviewCard-7JSXRJZ2.js} +6 -6
- package/dist/{DocumentReviewCard-UOLXZKZE.js.map → DocumentReviewCard-7JSXRJZ2.js.map} +1 -1
- package/dist/{DocumentReviewCard-QVQ2LGFH.cjs → DocumentReviewCard-C4HVT3WM.cjs} +8 -8
- package/dist/{DocumentReviewCard-QVQ2LGFH.cjs.map → DocumentReviewCard-C4HVT3WM.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-5ELQYWAZ.js → FilesViewerDialog-IMQTZWKD.js} +16 -16
- package/dist/{FilesViewerDialog-5ELQYWAZ.js.map → FilesViewerDialog-IMQTZWKD.js.map} +1 -1
- package/dist/{FilesViewerDialog-XNGHHWYS.cjs → FilesViewerDialog-UP7GFHYN.cjs} +23 -23
- package/dist/{FilesViewerDialog-XNGHHWYS.cjs.map → FilesViewerDialog-UP7GFHYN.cjs.map} +1 -1
- package/dist/{RechartsRenderer-EJRIFAAP.js → RechartsRenderer-23OF4H6X.js} +3 -3
- package/dist/{RechartsRenderer-EJRIFAAP.js.map → RechartsRenderer-23OF4H6X.js.map} +1 -1
- package/dist/{RechartsRenderer-CNFQ5EHF.cjs → RechartsRenderer-GIRCW7DB.cjs} +4 -4
- package/dist/{RechartsRenderer-CNFQ5EHF.cjs.map → RechartsRenderer-GIRCW7DB.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-HRCV6WR7.cjs → WorkspaceTableView-PJM47B5F.cjs} +8 -8
- package/dist/{WorkspaceTableView-HRCV6WR7.cjs.map → WorkspaceTableView-PJM47B5F.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-DIMTW5P5.js → WorkspaceTableView-YDA7A4UJ.js} +6 -6
- package/dist/{WorkspaceTableView-DIMTW5P5.js.map → WorkspaceTableView-YDA7A4UJ.js.map} +1 -1
- package/dist/{ai-E6FA4Y4J.cjs → ai-ADS6YSS2.cjs} +17 -17
- package/dist/ai-ADS6YSS2.cjs.map +1 -0
- package/dist/{ai-WASSGEMI.js → ai-KHWTGBT5.js} +9 -9
- package/dist/ai-KHWTGBT5.js.map +1 -0
- package/dist/auth/index.cjs +32 -32
- package/dist/auth/index.js +1 -1
- package/dist/calls/index.cjs +49 -49
- package/dist/calls/index.js +10 -10
- package/dist/{chunk-VJAMDAR6.cjs → chunk-22KAKJ3W.cjs} +4 -4
- package/dist/{chunk-VJAMDAR6.cjs.map → chunk-22KAKJ3W.cjs.map} +1 -1
- package/dist/{chunk-DEIF2VAA.js → chunk-3GFQNJYE.js} +3 -3
- package/dist/{chunk-DEIF2VAA.js.map → chunk-3GFQNJYE.js.map} +1 -1
- package/dist/{chunk-LUO46ELJ.cjs → chunk-3YZKDCWY.cjs} +2 -2
- package/dist/chunk-3YZKDCWY.cjs.map +1 -0
- package/dist/{chunk-5OUOPKGE.cjs → chunk-45OU2UAA.cjs} +18 -18
- package/dist/{chunk-5OUOPKGE.cjs.map → chunk-45OU2UAA.cjs.map} +1 -1
- package/dist/{chunk-JXKNPKU6.cjs → chunk-4CIVQWAX.cjs} +4 -4
- package/dist/{chunk-JXKNPKU6.cjs.map → chunk-4CIVQWAX.cjs.map} +1 -1
- package/dist/{chunk-VOI26MXJ.cjs → chunk-5AC52BHL.cjs} +16 -16
- package/dist/{chunk-VOI26MXJ.cjs.map → chunk-5AC52BHL.cjs.map} +1 -1
- package/dist/{chunk-OG3TI5GX.js → chunk-6M5NAAWX.js} +47 -5
- package/dist/chunk-6M5NAAWX.js.map +1 -0
- package/dist/{chunk-IIUEDF3F.js → chunk-6ZYOUT73.js} +7 -7
- package/dist/{chunk-IIUEDF3F.js.map → chunk-6ZYOUT73.js.map} +1 -1
- package/dist/{chunk-TRI3LQVR.js → chunk-7S7YVBFK.js} +5 -5
- package/dist/{chunk-TRI3LQVR.js.map → chunk-7S7YVBFK.js.map} +1 -1
- package/dist/{chunk-QN5GTCPB.cjs → chunk-7V4OCZS6.cjs} +8 -8
- package/dist/{chunk-QN5GTCPB.cjs.map → chunk-7V4OCZS6.cjs.map} +1 -1
- package/dist/{chunk-S7NJVJJX.cjs → chunk-AHMRYY7J.cjs} +25 -25
- package/dist/{chunk-S7NJVJJX.cjs.map → chunk-AHMRYY7J.cjs.map} +1 -1
- package/dist/{chunk-GK5BMDS6.js → chunk-AVGHTUPE.js} +4 -4
- package/dist/{chunk-GK5BMDS6.js.map → chunk-AVGHTUPE.js.map} +1 -1
- package/dist/{chunk-RAYNCZ7O.js → chunk-AZCMKGDG.js} +3 -3
- package/dist/{chunk-RAYNCZ7O.js.map → chunk-AZCMKGDG.js.map} +1 -1
- package/dist/{chunk-IJVU5MZA.js → chunk-BAUZUIHB.js} +5 -5
- package/dist/{chunk-IJVU5MZA.js.map → chunk-BAUZUIHB.js.map} +1 -1
- package/dist/{chunk-2VHZUSFW.js → chunk-BBWLFK3C.js} +3 -3
- package/dist/{chunk-2VHZUSFW.js.map → chunk-BBWLFK3C.js.map} +1 -1
- package/dist/{chunk-MW7FGIF4.cjs → chunk-BFVCYBND.cjs} +9 -9
- package/dist/{chunk-MW7FGIF4.cjs.map → chunk-BFVCYBND.cjs.map} +1 -1
- package/dist/{chunk-7ONU7EWY.js → chunk-BH6IKGZ3.js} +5 -5
- package/dist/{chunk-7ONU7EWY.js.map → chunk-BH6IKGZ3.js.map} +1 -1
- package/dist/{chunk-RNX5LAQK.cjs → chunk-C42WBPH4.cjs} +7 -7
- package/dist/{chunk-RNX5LAQK.cjs.map → chunk-C42WBPH4.cjs.map} +1 -1
- package/dist/{chunk-LM5CPXJO.cjs → chunk-CRLFLMTK.cjs} +19 -13
- package/dist/chunk-CRLFLMTK.cjs.map +1 -0
- package/dist/{chunk-CWC6W2NE.cjs → chunk-D35EHOK5.cjs} +11 -11
- package/dist/{chunk-CWC6W2NE.cjs.map → chunk-D35EHOK5.cjs.map} +1 -1
- package/dist/{chunk-BMHW7WTF.js → chunk-DBKZANTC.js} +4 -4
- package/dist/{chunk-BMHW7WTF.js.map → chunk-DBKZANTC.js.map} +1 -1
- package/dist/{chunk-Q5U6Y2NO.js → chunk-E2P4JJLJ.js} +4 -45
- package/dist/chunk-E2P4JJLJ.js.map +1 -0
- package/dist/{chunk-D3GZWKHW.cjs → chunk-EKSHUNJI.cjs} +9 -9
- package/dist/{chunk-D3GZWKHW.cjs.map → chunk-EKSHUNJI.cjs.map} +1 -1
- package/dist/{chunk-5XQNXDST.js → chunk-FPOKWML2.js} +18 -5
- package/dist/chunk-FPOKWML2.js.map +1 -0
- package/dist/{chunk-M4TM3K52.cjs → chunk-FSXQHEFQ.cjs} +16 -16
- package/dist/{chunk-M4TM3K52.cjs.map → chunk-FSXQHEFQ.cjs.map} +1 -1
- package/dist/{chunk-35BADIIF.cjs → chunk-GX75YCWJ.cjs} +23 -23
- package/dist/{chunk-35BADIIF.cjs.map → chunk-GX75YCWJ.cjs.map} +1 -1
- package/dist/{chunk-7IF3E3I2.cjs → chunk-I7CJDF3V.cjs} +4 -4
- package/dist/{chunk-7IF3E3I2.cjs.map → chunk-I7CJDF3V.cjs.map} +1 -1
- package/dist/{chunk-KYLQRS3O.js → chunk-IHOV6OTA.js} +4 -4
- package/dist/{chunk-KYLQRS3O.js.map → chunk-IHOV6OTA.js.map} +1 -1
- package/dist/{chunk-OXHAZN43.cjs → chunk-IXL2KJOZ.cjs} +26 -26
- package/dist/{chunk-OXHAZN43.cjs.map → chunk-IXL2KJOZ.cjs.map} +1 -1
- package/dist/{chunk-632JXVXY.js → chunk-KIXFXCHL.js} +15 -9
- package/dist/chunk-KIXFXCHL.js.map +1 -0
- package/dist/{chunk-PIWT2GCY.cjs → chunk-LFYKB7KF.cjs} +15 -15
- package/dist/{chunk-PIWT2GCY.cjs.map → chunk-LFYKB7KF.cjs.map} +1 -1
- package/dist/{chunk-7Q6EVFMT.js → chunk-LYW5A35J.js} +9 -9
- package/dist/{chunk-7Q6EVFMT.js.map → chunk-LYW5A35J.js.map} +1 -1
- package/dist/chunk-NFK2SEUD.js +577 -0
- package/dist/chunk-NFK2SEUD.js.map +1 -0
- package/dist/{chunk-TJQMC7GJ.cjs → chunk-NNBL3HPG.cjs} +4 -4
- package/dist/{chunk-TJQMC7GJ.cjs.map → chunk-NNBL3HPG.cjs.map} +1 -1
- package/dist/{chunk-Y5P5ZMHQ.js → chunk-NWBCZ4PA.js} +4 -4
- package/dist/{chunk-Y5P5ZMHQ.js.map → chunk-NWBCZ4PA.js.map} +1 -1
- package/dist/{chunk-5UMZXDGL.cjs → chunk-O27K7KTZ.cjs} +161 -7
- package/dist/chunk-O27K7KTZ.cjs.map +1 -0
- package/dist/{chunk-GARDQALH.js → chunk-OLAYDOPC.js} +5 -5
- package/dist/{chunk-GARDQALH.js.map → chunk-OLAYDOPC.js.map} +1 -1
- package/dist/chunk-ORELHENJ.cjs +594 -0
- package/dist/chunk-ORELHENJ.cjs.map +1 -0
- package/dist/{chunk-NUOMPVKQ.js → chunk-OWHO2TO3.js} +3 -3
- package/dist/{chunk-NUOMPVKQ.js.map → chunk-OWHO2TO3.js.map} +1 -1
- package/dist/{chunk-6XNWGOS3.cjs → chunk-PHDUN4SG.cjs} +187 -80
- package/dist/chunk-PHDUN4SG.cjs.map +1 -0
- package/dist/{chunk-KGUBKE3V.cjs → chunk-PL7O3RJJ.cjs} +48 -4
- package/dist/chunk-PL7O3RJJ.cjs.map +1 -0
- package/dist/{chunk-BH4MK2J5.js → chunk-QG6MRLZG.js} +2 -2
- package/dist/chunk-QG6MRLZG.js.map +1 -0
- package/dist/{chunk-YPTZNQPJ.cjs → chunk-RCZRI72J.cjs} +4 -4
- package/dist/{chunk-YPTZNQPJ.cjs.map → chunk-RCZRI72J.cjs.map} +1 -1
- package/dist/{chunk-E7STRFBT.cjs → chunk-SCLGUHLU.cjs} +4 -4
- package/dist/{chunk-E7STRFBT.cjs.map → chunk-SCLGUHLU.cjs.map} +1 -1
- package/dist/{chunk-EOTJX536.js → chunk-T5ZMG6MC.js} +3 -3
- package/dist/{chunk-EOTJX536.js.map → chunk-T5ZMG6MC.js.map} +1 -1
- package/dist/{chunk-LWEX3AOZ.js → chunk-TG4IICWO.js} +4 -4
- package/dist/{chunk-LWEX3AOZ.js.map → chunk-TG4IICWO.js.map} +1 -1
- package/dist/{chunk-ET3W24JV.js → chunk-TNKPQ3EF.js} +9 -9
- package/dist/{chunk-ET3W24JV.js.map → chunk-TNKPQ3EF.js.map} +1 -1
- package/dist/{chunk-QFKL4HV2.js → chunk-U5F5P4YU.js} +118 -15
- package/dist/chunk-U5F5P4YU.js.map +1 -0
- package/dist/{chunk-N52PBUAP.cjs → chunk-U6LQ6Z3P.cjs} +10 -10
- package/dist/{chunk-N52PBUAP.cjs.map → chunk-U6LQ6Z3P.cjs.map} +1 -1
- package/dist/{chunk-JNVJQCGF.cjs → chunk-UCA4JLLJ.cjs} +4 -4
- package/dist/{chunk-JNVJQCGF.cjs.map → chunk-UCA4JLLJ.cjs.map} +1 -1
- package/dist/{chunk-3RUQHIDC.js → chunk-UQ2OBHMV.js} +7 -7
- package/dist/{chunk-3RUQHIDC.js.map → chunk-UQ2OBHMV.js.map} +1 -1
- package/dist/{chunk-VYJF4ZQY.cjs → chunk-V6C2MBFY.cjs} +3 -2
- package/dist/chunk-V6C2MBFY.cjs.map +1 -0
- package/dist/{chunk-O4X7HXLF.cjs → chunk-VCEX7COE.cjs} +2 -45
- package/dist/chunk-VCEX7COE.cjs.map +1 -0
- package/dist/{chunk-QTSNHGSI.js → chunk-WFM6E7DD.js} +3 -3
- package/dist/{chunk-QTSNHGSI.js.map → chunk-WFM6E7DD.js.map} +1 -1
- package/dist/{chunk-SY2WD6VA.cjs → chunk-WI3BVKEC.cjs} +5 -5
- package/dist/{chunk-SY2WD6VA.cjs.map → chunk-WI3BVKEC.cjs.map} +1 -1
- package/dist/{chunk-LWCLAAEX.js → chunk-WJHRWXWJ.js} +3 -3
- package/dist/{chunk-LWCLAAEX.js.map → chunk-WJHRWXWJ.js.map} +1 -1
- package/dist/{chunk-FVZ2CN4A.js → chunk-WQH2WWZE.js} +3 -2
- package/dist/chunk-WQH2WWZE.js.map +1 -0
- package/dist/{chunk-V2CKYM4B.cjs → chunk-XHN5KOI2.cjs} +9 -9
- package/dist/{chunk-V2CKYM4B.cjs.map → chunk-XHN5KOI2.cjs.map} +1 -1
- package/dist/{chunk-DBHBJIF4.js → chunk-YJWAGXYM.js} +3 -3
- package/dist/{chunk-DBHBJIF4.js.map → chunk-YJWAGXYM.js.map} +1 -1
- package/dist/{chunk-KUI2IC7W.js → chunk-YLKHTBYA.js} +3 -3
- package/dist/{chunk-KUI2IC7W.js.map → chunk-YLKHTBYA.js.map} +1 -1
- package/dist/{chunk-73FJ6L6I.cjs → chunk-ZMVF7EYJ.cjs} +18 -5
- package/dist/chunk-ZMVF7EYJ.cjs.map +1 -0
- package/dist/{chunk-CEVVGJQX.js → chunk-ZNY5W3VX.js} +162 -9
- package/dist/chunk-ZNY5W3VX.js.map +1 -0
- package/dist/connect/docx.cjs +13 -13
- package/dist/connect/docx.js +9 -9
- package/dist/connect/index.cjs +1100 -884
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -0
- package/dist/connect/index.js +475 -274
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +12 -12
- package/dist/connect/viewer.js +10 -10
- package/dist/connection/account-cluster/ConnectedAccountCluster.d.ts +1 -1
- package/dist/connection/dashboards/ConnectedDashboardsPage.d.ts +13 -2
- package/dist/connection/dashboards/index.d.ts +1 -1
- package/dist/connection/dashboards/templates.d.ts +14 -3
- package/dist/connection/remote-control/ConnectedRemoteControlConsent.d.ts +17 -0
- package/dist/connection/remote-control/ConnectedRemoteControlIndicator.d.ts +8 -0
- package/dist/connection/remote-control/ConnectedRemoteControlSwitch.d.ts +1 -0
- package/dist/connection/remote-control/index.d.ts +4 -0
- package/dist/connection/remote-control/remoteControl.d.ts +40 -0
- package/dist/connection/routes/useDeepLinkSync.d.ts +4 -1
- package/dist/connection/runtime/ConnectedAppRuntime.d.ts +1 -1
- package/dist/connection/settings-page/settingsSections.d.ts +1 -1
- package/dist/connection/tags/ConnectedTagTable.d.ts +1 -1
- package/dist/dashboards/index.cjs +327 -116
- package/dist/dashboards/index.cjs.map +1 -1
- package/dist/dashboards/index.js +311 -101
- package/dist/dashboards/index.js.map +1 -1
- package/dist/embed/index.cjs +21 -21
- package/dist/embed/index.js +14 -14
- package/dist/guided/GuidedCursor.d.ts +21 -0
- package/dist/guided/cursor.d.ts +56 -0
- package/dist/guided/index.d.ts +5 -0
- package/dist/guided/runner.d.ts +30 -0
- package/dist/guided/sequences.d.ts +80 -0
- package/dist/guided/surfaces.d.ts +13 -0
- package/dist/guided/useGuidedRuns.d.ts +3 -0
- package/dist/index.cjs +171 -135
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -7
- package/dist/provider/host.d.ts +6 -0
- package/dist/settings/PlanBadge.d.ts +1 -1
- package/dist/settings/TipsEditor.d.ts +6 -3
- package/dist/settings/index.cjs +152 -151
- package/dist/settings/index.js +3 -2
- package/dist/shell/index.cjs +46 -46
- package/dist/shell/index.js +3 -3
- package/dist/studio/index.cjs +15 -15
- package/dist/studio/index.js +9 -9
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +25 -25
- package/dist/workflow-canvas/index.js +13 -13
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-BF6JET2D.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-ILMKFCDC.js.map +0 -1
- package/dist/ai-E6FA4Y4J.cjs.map +0 -1
- package/dist/ai-WASSGEMI.js.map +0 -1
- package/dist/chunk-5UMZXDGL.cjs.map +0 -1
- package/dist/chunk-5XQNXDST.js.map +0 -1
- package/dist/chunk-632JXVXY.js.map +0 -1
- package/dist/chunk-6XNWGOS3.cjs.map +0 -1
- package/dist/chunk-73FJ6L6I.cjs.map +0 -1
- package/dist/chunk-BH4MK2J5.js.map +0 -1
- package/dist/chunk-C4TGESIB.cjs +0 -260
- package/dist/chunk-C4TGESIB.cjs.map +0 -1
- package/dist/chunk-CEVVGJQX.js.map +0 -1
- package/dist/chunk-FVZ2CN4A.js.map +0 -1
- package/dist/chunk-KGUBKE3V.cjs.map +0 -1
- package/dist/chunk-LM5CPXJO.cjs.map +0 -1
- package/dist/chunk-LUO46ELJ.cjs.map +0 -1
- package/dist/chunk-MHFWGIF4.js +0 -254
- package/dist/chunk-MHFWGIF4.js.map +0 -1
- package/dist/chunk-O4X7HXLF.cjs.map +0 -1
- package/dist/chunk-OG3TI5GX.js.map +0 -1
- package/dist/chunk-Q5U6Y2NO.js.map +0 -1
- package/dist/chunk-QFKL4HV2.js.map +0 -1
- package/dist/chunk-VYJF4ZQY.cjs.map +0 -1
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useHost } from './chunk-QG6MRLZG.js';
|
|
3
|
+
import { createElement, useEffect, useSyncExternalStore } from 'react';
|
|
4
|
+
import { MousePointerClick } from 'lucide-react';
|
|
5
|
+
import { notify } from '@arbidocs/react/shell';
|
|
6
|
+
import { cn } from '@arbidocs/react/ui';
|
|
7
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
// src/tips/registry.ts
|
|
10
|
+
var TIP_MAX_CHARS = 80;
|
|
11
|
+
var TIP_CTA_LABEL_MAX_CHARS = 24;
|
|
12
|
+
function createTipsRegistry(config) {
|
|
13
|
+
const { tips, everywhere, hiddenLabel = "Hidden (off)" } = config;
|
|
14
|
+
let content = config.content;
|
|
15
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
16
|
+
const effective = (tip) => {
|
|
17
|
+
const o = content.overrides?.[tip.code];
|
|
18
|
+
if (!o) return { tip, hidden: false };
|
|
19
|
+
return {
|
|
20
|
+
tip: {
|
|
21
|
+
...tip,
|
|
22
|
+
message: o.message ?? tip.message,
|
|
23
|
+
cta: o.cta === null ? void 0 : o.cta ?? tip.cta,
|
|
24
|
+
context: o.context ?? tip.context
|
|
25
|
+
},
|
|
26
|
+
hidden: o.hidden === true
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
const custom = () => content.custom ?? [];
|
|
30
|
+
const applies = (tipContext, context) => tipContext === context || tipContext === everywhere;
|
|
31
|
+
const placements = [
|
|
32
|
+
...config.placements,
|
|
33
|
+
{ value: "hidden", label: hiddenLabel }
|
|
34
|
+
];
|
|
35
|
+
return {
|
|
36
|
+
select: (context, state) => {
|
|
37
|
+
const builtins = tips.map(effective).filter(
|
|
38
|
+
({ tip, hidden }) => !hidden && applies(tip.context, context) && (!tip.when || tip.when(state))
|
|
39
|
+
).map(({ tip }) => tip);
|
|
40
|
+
const authored = custom().filter((t) => t.hidden !== true && applies(t.context, context));
|
|
41
|
+
return [...builtins, ...authored].sort(
|
|
42
|
+
(a, b) => (b.priority ?? 0) - (a.priority ?? 0)
|
|
43
|
+
);
|
|
44
|
+
},
|
|
45
|
+
editorTips: () => [
|
|
46
|
+
...tips.map((t) => {
|
|
47
|
+
const e = effective(t);
|
|
48
|
+
return { tip: e.tip, isCustom: false, isHidden: e.hidden };
|
|
49
|
+
}),
|
|
50
|
+
...custom().map((t) => ({ tip: t, isCustom: true, isHidden: t.hidden === true }))
|
|
51
|
+
],
|
|
52
|
+
getContent: () => content,
|
|
53
|
+
setContent: (next) => {
|
|
54
|
+
content = next;
|
|
55
|
+
listeners.forEach((listener) => listener());
|
|
56
|
+
},
|
|
57
|
+
subscribe: (listener) => {
|
|
58
|
+
listeners.add(listener);
|
|
59
|
+
return () => {
|
|
60
|
+
listeners.delete(listener);
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
everywhere,
|
|
64
|
+
placements,
|
|
65
|
+
placementLabel: (p) => placements.find((o) => o.value === p)?.label ?? p
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// src/guided/cursor.ts
|
|
70
|
+
var GLIDE_MS = 580;
|
|
71
|
+
var SCROLL_SETTLE_MS = 180;
|
|
72
|
+
var DEFAULT_WAIT_MS = 1200;
|
|
73
|
+
var PAINT_MS = 60;
|
|
74
|
+
var sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
75
|
+
var GuidedCursorController = class {
|
|
76
|
+
/** Glide duration (ms) — exported so the component's CSS transition matches. */
|
|
77
|
+
glideMs = GLIDE_MS;
|
|
78
|
+
snap = { visible: false, x: -100, y: -100 };
|
|
79
|
+
listeners = /* @__PURE__ */ new Set();
|
|
80
|
+
rippleListeners = /* @__PURE__ */ new Set();
|
|
81
|
+
// The user's real pointer, so a run begins where their eye already is (they
|
|
82
|
+
// just clicked "Show me"). Defaults to the lower-left, near the sidebar tips.
|
|
83
|
+
lastPointer = {
|
|
84
|
+
x: typeof window !== "undefined" ? 120 : 0,
|
|
85
|
+
y: typeof window !== "undefined" ? window.innerHeight - 60 : 0
|
|
86
|
+
};
|
|
87
|
+
constructor() {
|
|
88
|
+
if (typeof window !== "undefined") {
|
|
89
|
+
const track = (e) => {
|
|
90
|
+
this.lastPointer = { x: e.clientX, y: e.clientY };
|
|
91
|
+
};
|
|
92
|
+
window.addEventListener("pointermove", track, { passive: true });
|
|
93
|
+
window.addEventListener("pointerdown", track, { passive: true });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// external-store contract (useSyncExternalStore). getSnapshot returns a stable
|
|
97
|
+
// reference between changes, so React only re-renders on real moves.
|
|
98
|
+
subscribe = (cb) => {
|
|
99
|
+
this.listeners.add(cb);
|
|
100
|
+
return () => this.listeners.delete(cb);
|
|
101
|
+
};
|
|
102
|
+
getSnapshot = () => this.snap;
|
|
103
|
+
onRipple = (cb) => {
|
|
104
|
+
this.rippleListeners.add(cb);
|
|
105
|
+
return () => this.rippleListeners.delete(cb);
|
|
106
|
+
};
|
|
107
|
+
commit(next) {
|
|
108
|
+
this.snap = { ...this.snap, ...next };
|
|
109
|
+
this.listeners.forEach((l) => l());
|
|
110
|
+
}
|
|
111
|
+
prefersReducedMotion() {
|
|
112
|
+
return typeof window !== "undefined" && !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
113
|
+
}
|
|
114
|
+
show() {
|
|
115
|
+
if (this.snap.visible) return;
|
|
116
|
+
this.snap = { visible: true, x: this.lastPointer.x, y: this.lastPointer.y };
|
|
117
|
+
this.listeners.forEach((l) => l());
|
|
118
|
+
}
|
|
119
|
+
hide() {
|
|
120
|
+
if (this.snap.visible) this.commit({ visible: false });
|
|
121
|
+
}
|
|
122
|
+
moveTo(x, y) {
|
|
123
|
+
this.commit({ x, y });
|
|
124
|
+
}
|
|
125
|
+
/** Emit a click ripple at the cursor's current position. */
|
|
126
|
+
ripple() {
|
|
127
|
+
const { x, y } = this.snap;
|
|
128
|
+
this.rippleListeners.forEach((l) => l(x, y));
|
|
129
|
+
}
|
|
130
|
+
/** Resolve a selector to an element, briefly polling since the target may only
|
|
131
|
+
* appear after a prior step navigates / opens a panel. */
|
|
132
|
+
async resolve(target, waitMs) {
|
|
133
|
+
if (typeof target !== "string") return target;
|
|
134
|
+
const deadline = Date.now() + waitMs;
|
|
135
|
+
let found = document.querySelector(target);
|
|
136
|
+
while (!found && Date.now() < deadline) {
|
|
137
|
+
await sleep(50);
|
|
138
|
+
found = document.querySelector(target);
|
|
139
|
+
}
|
|
140
|
+
return found;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Glide the cursor to the centre of `target` (a CSS selector or an element),
|
|
144
|
+
* scrolling it into view first. Resolves once the glide is done, so callers
|
|
145
|
+
* can `await` it before performing the action. Returns false if the target
|
|
146
|
+
* can't be found (after briefly waiting for it to appear).
|
|
147
|
+
*/
|
|
148
|
+
async glideTo(target, opts) {
|
|
149
|
+
const el = await this.resolve(target, opts?.waitMs ?? DEFAULT_WAIT_MS);
|
|
150
|
+
if (!el) return false;
|
|
151
|
+
const reduced = this.prefersReducedMotion();
|
|
152
|
+
el.scrollIntoView({ block: "center", inline: "center", behavior: reduced ? "auto" : "smooth" });
|
|
153
|
+
await sleep(reduced ? 0 : SCROLL_SETTLE_MS);
|
|
154
|
+
const rect = el.getBoundingClientRect();
|
|
155
|
+
const x = rect.left + rect.width / 2;
|
|
156
|
+
const y = rect.top + rect.height / 2;
|
|
157
|
+
this.show();
|
|
158
|
+
if (!reduced) await sleep(PAINT_MS);
|
|
159
|
+
this.moveTo(x, y);
|
|
160
|
+
await sleep(reduced ? 0 : opts?.durationMs ?? GLIDE_MS);
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
var guidedCursor = new GuidedCursorController();
|
|
165
|
+
var mounted = { consent: 0, cursor: 0 };
|
|
166
|
+
function useMountedSurface(surface) {
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
mounted[surface] += 1;
|
|
169
|
+
return () => {
|
|
170
|
+
mounted[surface] -= 1;
|
|
171
|
+
};
|
|
172
|
+
}, [surface]);
|
|
173
|
+
}
|
|
174
|
+
var isSurfaceMounted = (surface) => mounted[surface] > 0;
|
|
175
|
+
var REMOTE_CONTROL_SURFACE = "data-remote-control-surface";
|
|
176
|
+
var SENSITIVE_INPUT = "data-sensitive-input";
|
|
177
|
+
|
|
178
|
+
// src/guided/runner.ts
|
|
179
|
+
var guidedStepIcon = createElement(MousePointerClick, { className: "h-4 w-4" });
|
|
180
|
+
var DEFAULT_PAUSE_MS = 900;
|
|
181
|
+
var DWELL_MS = 280;
|
|
182
|
+
var MAX_REMOTE_WAIT_MS = 5e3;
|
|
183
|
+
var SECRET_AUTOCOMPLETE = /* @__PURE__ */ new Set(["current-password", "new-password", "one-time-code"]);
|
|
184
|
+
var activeRun = null;
|
|
185
|
+
var activeListeners = /* @__PURE__ */ new Set();
|
|
186
|
+
var setActiveRun = (id) => {
|
|
187
|
+
if (activeRun === id) return;
|
|
188
|
+
activeRun = id;
|
|
189
|
+
activeListeners.forEach((listener) => listener());
|
|
190
|
+
};
|
|
191
|
+
var subscribeActive = (listener) => {
|
|
192
|
+
activeListeners.add(listener);
|
|
193
|
+
return () => {
|
|
194
|
+
activeListeners.delete(listener);
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
var getActiveRun = () => activeRun;
|
|
198
|
+
var useActiveGuidedRun = () => useSyncExternalStore(subscribeActive, getActiveRun, getActiveRun);
|
|
199
|
+
var runToken = 0;
|
|
200
|
+
var sleep2 = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
201
|
+
function clickElement(el) {
|
|
202
|
+
const rect = el.getBoundingClientRect();
|
|
203
|
+
const base = {
|
|
204
|
+
bubbles: true,
|
|
205
|
+
cancelable: true,
|
|
206
|
+
clientX: rect.left + rect.width / 2,
|
|
207
|
+
clientY: rect.top + rect.height / 2
|
|
208
|
+
};
|
|
209
|
+
const pointer = (type) => {
|
|
210
|
+
try {
|
|
211
|
+
return new PointerEvent(type, {
|
|
212
|
+
...base,
|
|
213
|
+
pointerId: 1,
|
|
214
|
+
pointerType: "mouse",
|
|
215
|
+
isPrimary: true
|
|
216
|
+
});
|
|
217
|
+
} catch {
|
|
218
|
+
return new MouseEvent(type, base);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
el.dispatchEvent(pointer("pointerdown"));
|
|
222
|
+
el.dispatchEvent(new MouseEvent("mousedown", base));
|
|
223
|
+
el.dispatchEvent(pointer("pointerup"));
|
|
224
|
+
el.dispatchEvent(new MouseEvent("mouseup", base));
|
|
225
|
+
el.dispatchEvent(new MouseEvent("click", base));
|
|
226
|
+
el.focus?.();
|
|
227
|
+
}
|
|
228
|
+
function isSensitiveField(el) {
|
|
229
|
+
if (el.hasAttribute(SENSITIVE_INPUT)) return true;
|
|
230
|
+
if (el instanceof HTMLInputElement && (el.type === "password" || el.type === "hidden"))
|
|
231
|
+
return true;
|
|
232
|
+
const tokens = (el.getAttribute("autocomplete") ?? "").toLowerCase().split(/\s+/);
|
|
233
|
+
return tokens.some((token) => SECRET_AUTOCOMPLETE.has(token));
|
|
234
|
+
}
|
|
235
|
+
function typeInto(el, value) {
|
|
236
|
+
if (!(el instanceof HTMLInputElement) && !(el instanceof HTMLTextAreaElement)) return;
|
|
237
|
+
if (isSensitiveField(el)) {
|
|
238
|
+
console.warn("[guided] Refusing to type into a password, secret or hidden field");
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
el.focus();
|
|
242
|
+
const setter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value")?.set;
|
|
243
|
+
setter?.call(el, value);
|
|
244
|
+
el.dispatchEvent(new Event("input", { bubbles: true }));
|
|
245
|
+
}
|
|
246
|
+
var insideSurface = (el) => !!el.closest(`[${REMOTE_CONTROL_SURFACE}]`);
|
|
247
|
+
function isOffLimits(el) {
|
|
248
|
+
if (insideSurface(el)) return true;
|
|
249
|
+
const label = el instanceof HTMLLabelElement ? el : el.closest("label");
|
|
250
|
+
const control = label?.control;
|
|
251
|
+
return !!label && (insideSurface(label) || !!control && insideSurface(control));
|
|
252
|
+
}
|
|
253
|
+
function isWatchable(el) {
|
|
254
|
+
const rect = el.getBoundingClientRect();
|
|
255
|
+
if (rect.width === 0 || rect.height === 0) return false;
|
|
256
|
+
return typeof el.checkVisibility === "function" ? el.checkVisibility() : true;
|
|
257
|
+
}
|
|
258
|
+
function performStep(step, el, remote) {
|
|
259
|
+
if (remote && isOffLimits(el)) {
|
|
260
|
+
console.warn("[guided] Refusing a remote step on an off-limits surface", step.target);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
if (remote && !isWatchable(el)) {
|
|
264
|
+
console.warn("[guided] Refusing a remote step on an element the user cannot see", step.target);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
if (step.do === "type") typeInto(el, step.value ?? "");
|
|
268
|
+
else clickElement(el);
|
|
269
|
+
}
|
|
270
|
+
function cancelGuidedRun() {
|
|
271
|
+
runToken += 1;
|
|
272
|
+
guidedCursor.hide();
|
|
273
|
+
setActiveRun(null);
|
|
274
|
+
}
|
|
275
|
+
async function runGuidedSteps(steps, id, { remote = false } = {}) {
|
|
276
|
+
if (steps.length === 0) return;
|
|
277
|
+
const bound = (ms) => remote && ms !== void 0 ? Math.min(ms, MAX_REMOTE_WAIT_MS) : ms;
|
|
278
|
+
const myToken = runToken += 1;
|
|
279
|
+
const superseded = () => runToken !== myToken;
|
|
280
|
+
setActiveRun(id);
|
|
281
|
+
for (const step of steps) {
|
|
282
|
+
if (superseded()) return;
|
|
283
|
+
if (step.note) notify.info(step.note, { icon: guidedStepIcon });
|
|
284
|
+
const landed = await guidedCursor.glideTo(step.target, { waitMs: bound(step.waitMs) });
|
|
285
|
+
if (superseded()) return;
|
|
286
|
+
if (landed) {
|
|
287
|
+
guidedCursor.ripple();
|
|
288
|
+
await sleep2(DWELL_MS);
|
|
289
|
+
if (superseded()) return;
|
|
290
|
+
const el = document.querySelector(step.target);
|
|
291
|
+
if (el) performStep(step, el, remote);
|
|
292
|
+
}
|
|
293
|
+
await sleep2(bound(step.pauseMs) ?? DEFAULT_PAUSE_MS);
|
|
294
|
+
}
|
|
295
|
+
if (superseded()) return;
|
|
296
|
+
guidedCursor.hide();
|
|
297
|
+
setActiveRun(null);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// src/guided/sequences.ts
|
|
301
|
+
var KIT_SEQUENCES = {
|
|
302
|
+
"upload-a-document": {
|
|
303
|
+
id: "upload-a-document",
|
|
304
|
+
label: "Upload a document",
|
|
305
|
+
description: "Open Documents and start the uploader.",
|
|
306
|
+
steps: [
|
|
307
|
+
{ target: '[data-testid="sidebar-documents-button"]', note: "Open Documents\u2026" },
|
|
308
|
+
{
|
|
309
|
+
target: '[data-testid="documents-upload-button"]',
|
|
310
|
+
note: "Start the uploader \u2014 drop files here."
|
|
311
|
+
}
|
|
312
|
+
]
|
|
313
|
+
},
|
|
314
|
+
"invite-a-colleague": {
|
|
315
|
+
id: "invite-a-colleague",
|
|
316
|
+
label: "Invite a colleague",
|
|
317
|
+
description: "Open the account menu, then Contacts, then add a contact by email.",
|
|
318
|
+
steps: [
|
|
319
|
+
{ target: '[data-testid="sidebar-user-profile"]', note: "Open your account menu\u2026" },
|
|
320
|
+
{ target: '[data-testid="sidebar-contacts-button"]', note: "Open Contacts\u2026" },
|
|
321
|
+
{ target: '[data-testid="dm-invite-chip"]', note: "Add a contact by email." }
|
|
322
|
+
]
|
|
323
|
+
},
|
|
324
|
+
"open-plan-usage": {
|
|
325
|
+
id: "open-plan-usage",
|
|
326
|
+
label: "View plan & usage",
|
|
327
|
+
description: "Open the account menu, then Plan & Usage.",
|
|
328
|
+
steps: [
|
|
329
|
+
{ target: '[data-testid="sidebar-user-profile"]', note: "Open your account menu\u2026" },
|
|
330
|
+
{ target: '[data-testid="user-menu-projects"]', note: "Choose Plan & Usage." }
|
|
331
|
+
]
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
var KIT_DEMOS = {
|
|
335
|
+
"upload-documents": "upload-a-document",
|
|
336
|
+
"open-invite-contacts": "invite-a-colleague",
|
|
337
|
+
// The panel opens from the account menu: Show me walks that path.
|
|
338
|
+
"open-projects": "open-plan-usage"
|
|
339
|
+
};
|
|
340
|
+
function createGuidedRuns(config = {}) {
|
|
341
|
+
const sequences = { ...KIT_SEQUENCES, ...config.sequences };
|
|
342
|
+
const demos = { ...KIT_DEMOS, ...config.demos };
|
|
343
|
+
const isSequenceId = (value) => Object.prototype.hasOwnProperty.call(sequences, value);
|
|
344
|
+
const runs = {
|
|
345
|
+
sequences,
|
|
346
|
+
demos,
|
|
347
|
+
cursorMark: config.cursorMark,
|
|
348
|
+
remoteControl: config.remoteControl === true,
|
|
349
|
+
options: Object.values(sequences).map((s) => ({
|
|
350
|
+
value: s.id,
|
|
351
|
+
label: s.label
|
|
352
|
+
})),
|
|
353
|
+
isSequenceId,
|
|
354
|
+
async run(input, options) {
|
|
355
|
+
if (typeof input !== "string") return runGuidedSteps(input, null, options);
|
|
356
|
+
if (!isSequenceId(input)) {
|
|
357
|
+
console.warn(`runSequence: "${input}" is not a known guided run`);
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
return runGuidedSteps(sequences[input].steps, input, options);
|
|
361
|
+
},
|
|
362
|
+
// Through `runs.run`, the one way in, so whoever watches it sees a CTA's run too.
|
|
363
|
+
runCta(cta, runAction) {
|
|
364
|
+
if (cta.href) {
|
|
365
|
+
window.open(cta.href, "_blank", "noopener,noreferrer");
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (cta.sequence) {
|
|
369
|
+
void runs.run(cta.sequence);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (!cta.action) return;
|
|
373
|
+
const demo = Object.prototype.hasOwnProperty.call(demos, cta.action) ? demos[cta.action] : void 0;
|
|
374
|
+
if (demo) void runs.run(demo);
|
|
375
|
+
else runAction(cta.action);
|
|
376
|
+
},
|
|
377
|
+
cancel: cancelGuidedRun
|
|
378
|
+
};
|
|
379
|
+
return runs;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// src/guided/useGuidedRuns.ts
|
|
383
|
+
var KIT_RUNS = createGuidedRuns();
|
|
384
|
+
function useGuidedRuns() {
|
|
385
|
+
return useHost().guided ?? KIT_RUNS;
|
|
386
|
+
}
|
|
387
|
+
function usageMeterState(used, allowance) {
|
|
388
|
+
if (allowance <= 0) return used > 0 ? "over" : "under";
|
|
389
|
+
const ratio = used / allowance;
|
|
390
|
+
return ratio >= 1 ? "over" : ratio >= 0.8 ? "near" : "under";
|
|
391
|
+
}
|
|
392
|
+
var STATE_TONE = {
|
|
393
|
+
under: "bg-primary",
|
|
394
|
+
near: "bg-yellow-500",
|
|
395
|
+
over: "bg-red-500"
|
|
396
|
+
};
|
|
397
|
+
var pctOf = (n, scale) => scale > 0 ? Math.max(0, Math.min(100, n / scale * 100)) : 0;
|
|
398
|
+
var SWATCH = {
|
|
399
|
+
plan: "bg-muted-foreground/40",
|
|
400
|
+
topUps: "bg-primary/30",
|
|
401
|
+
autoRoom: "bg-muted"
|
|
402
|
+
};
|
|
403
|
+
var HATCH = {
|
|
404
|
+
backgroundImage: "repeating-linear-gradient(135deg, currentColor 0 1.5px, transparent 1.5px 5px)"
|
|
405
|
+
};
|
|
406
|
+
function AllowanceBar({ allowance, label }) {
|
|
407
|
+
const { used, plan } = allowance;
|
|
408
|
+
const topUps = Math.max(0, allowance.topUps ?? 0);
|
|
409
|
+
const room = Math.max(0, allowance.autoRoom ?? 0);
|
|
410
|
+
const total = plan + topUps;
|
|
411
|
+
const scale = Math.max(total + room, used, Number.EPSILON);
|
|
412
|
+
const state = usageMeterState(used, total);
|
|
413
|
+
const usedPct = total > 0 ? Math.round(used / total * 100) : used > 0 ? 100 : 0;
|
|
414
|
+
const markPlan = plan > 0 && plan < scale && (topUps > 0 || room > 0);
|
|
415
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative h-2 overflow-hidden rounded-full bg-muted", "data-slot": "usage-meter-bar", children: [
|
|
416
|
+
topUps > 0 && /* @__PURE__ */ jsx(
|
|
417
|
+
"div",
|
|
418
|
+
{
|
|
419
|
+
className: cn("absolute inset-y-0", SWATCH.topUps),
|
|
420
|
+
style: { left: `${pctOf(plan, scale)}%`, width: `${pctOf(topUps, scale)}%` },
|
|
421
|
+
"data-slot": "usage-meter-topups"
|
|
422
|
+
}
|
|
423
|
+
),
|
|
424
|
+
room > 0 && /* @__PURE__ */ jsx(
|
|
425
|
+
"div",
|
|
426
|
+
{
|
|
427
|
+
className: "absolute inset-y-0 text-muted-foreground/35",
|
|
428
|
+
style: { left: `${pctOf(total, scale)}%`, width: `${pctOf(room, scale)}%`, ...HATCH },
|
|
429
|
+
"data-slot": "usage-meter-auto-room"
|
|
430
|
+
}
|
|
431
|
+
),
|
|
432
|
+
/* @__PURE__ */ jsx(
|
|
433
|
+
"div",
|
|
434
|
+
{
|
|
435
|
+
className: cn(
|
|
436
|
+
"absolute inset-y-0 left-0 rounded-full transition-[width]",
|
|
437
|
+
STATE_TONE[state]
|
|
438
|
+
),
|
|
439
|
+
style: { width: `${pctOf(Math.min(used, scale), scale)}%` },
|
|
440
|
+
role: "progressbar",
|
|
441
|
+
"aria-valuenow": Math.min(usedPct, 100),
|
|
442
|
+
"aria-valuemin": 0,
|
|
443
|
+
"aria-valuemax": 100,
|
|
444
|
+
"aria-label": label,
|
|
445
|
+
"data-state": state
|
|
446
|
+
}
|
|
447
|
+
),
|
|
448
|
+
markPlan && /* @__PURE__ */ jsx(
|
|
449
|
+
"div",
|
|
450
|
+
{
|
|
451
|
+
className: "absolute inset-y-0 w-0.5 -translate-x-1/2 bg-foreground/70",
|
|
452
|
+
style: { left: `${pctOf(plan, scale)}%` },
|
|
453
|
+
"aria-hidden": true,
|
|
454
|
+
"data-slot": "usage-meter-plan-mark"
|
|
455
|
+
}
|
|
456
|
+
),
|
|
457
|
+
room > 0 && total > 0 && /* @__PURE__ */ jsx(
|
|
458
|
+
"div",
|
|
459
|
+
{
|
|
460
|
+
className: "absolute inset-y-0 w-px bg-foreground/40",
|
|
461
|
+
style: { left: `${pctOf(total, scale)}%` },
|
|
462
|
+
"aria-hidden": true
|
|
463
|
+
}
|
|
464
|
+
)
|
|
465
|
+
] });
|
|
466
|
+
}
|
|
467
|
+
function UsageMeter({
|
|
468
|
+
icon: Icon,
|
|
469
|
+
label,
|
|
470
|
+
value,
|
|
471
|
+
pct = 0,
|
|
472
|
+
hint,
|
|
473
|
+
allowance,
|
|
474
|
+
legend,
|
|
475
|
+
details,
|
|
476
|
+
actions,
|
|
477
|
+
className,
|
|
478
|
+
testId
|
|
479
|
+
}) {
|
|
480
|
+
const clamped = Math.max(0, Math.min(100, pct));
|
|
481
|
+
const tone = clamped >= 100 ? "bg-red-500" : clamped >= 50 ? "bg-yellow-500" : "bg-primary";
|
|
482
|
+
const state = allowance ? usageMeterState(allowance.used, allowance.plan + Math.max(0, allowance.topUps ?? 0)) : void 0;
|
|
483
|
+
const legendItems = legend ? [
|
|
484
|
+
["plan", legend.plan],
|
|
485
|
+
["topUps", legend.topUps],
|
|
486
|
+
["autoRoom", legend.autoRoom]
|
|
487
|
+
].filter(([, text]) => !!text) : [];
|
|
488
|
+
const meter = /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 space-y-1.5", children: [
|
|
489
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3 text-sm", children: [
|
|
490
|
+
/* @__PURE__ */ jsxs(
|
|
491
|
+
"span",
|
|
492
|
+
{
|
|
493
|
+
className: cn(
|
|
494
|
+
"flex min-w-0 items-center gap-1.5",
|
|
495
|
+
allowance ? "font-medium text-foreground" : "text-muted-foreground"
|
|
496
|
+
),
|
|
497
|
+
children: [
|
|
498
|
+
Icon && /* @__PURE__ */ jsx(Icon, { className: "size-3.5 shrink-0" }),
|
|
499
|
+
/* @__PURE__ */ jsxs("span", { className: "truncate", children: [
|
|
500
|
+
label,
|
|
501
|
+
hint ? ` (${hint})` : ""
|
|
502
|
+
] })
|
|
503
|
+
]
|
|
504
|
+
}
|
|
505
|
+
),
|
|
506
|
+
/* @__PURE__ */ jsx(
|
|
507
|
+
"span",
|
|
508
|
+
{
|
|
509
|
+
className: "shrink-0 font-medium tabular-nums text-foreground",
|
|
510
|
+
"data-slot": "usage-meter-value",
|
|
511
|
+
children: value
|
|
512
|
+
}
|
|
513
|
+
)
|
|
514
|
+
] }),
|
|
515
|
+
allowance ? /* @__PURE__ */ jsx(AllowanceBar, { allowance, label }) : /* @__PURE__ */ jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsx(
|
|
516
|
+
"div",
|
|
517
|
+
{
|
|
518
|
+
className: cn("h-full rounded-full transition-[width]", tone),
|
|
519
|
+
style: { width: `${clamped}%` },
|
|
520
|
+
role: "progressbar",
|
|
521
|
+
"aria-valuenow": clamped,
|
|
522
|
+
"aria-valuemin": 0,
|
|
523
|
+
"aria-valuemax": 100,
|
|
524
|
+
"aria-label": label
|
|
525
|
+
}
|
|
526
|
+
) }),
|
|
527
|
+
legendItems.length > 0 && /* @__PURE__ */ jsx(
|
|
528
|
+
"ul",
|
|
529
|
+
{
|
|
530
|
+
className: "flex flex-wrap gap-x-4 gap-y-1 text-xs tabular-nums text-muted-foreground",
|
|
531
|
+
"data-slot": "usage-meter-legend",
|
|
532
|
+
children: legendItems.map(([key, text]) => /* @__PURE__ */ jsxs(
|
|
533
|
+
"li",
|
|
534
|
+
{
|
|
535
|
+
className: "flex items-center gap-1.5",
|
|
536
|
+
"data-slot": `usage-meter-legend-${key}`,
|
|
537
|
+
children: [
|
|
538
|
+
/* @__PURE__ */ jsx(
|
|
539
|
+
"span",
|
|
540
|
+
{
|
|
541
|
+
className: cn(
|
|
542
|
+
"inline-block size-2 rounded-sm",
|
|
543
|
+
SWATCH[key],
|
|
544
|
+
key === "autoRoom" && "text-muted-foreground/60"
|
|
545
|
+
),
|
|
546
|
+
style: key === "autoRoom" ? HATCH : void 0,
|
|
547
|
+
"aria-hidden": true
|
|
548
|
+
}
|
|
549
|
+
),
|
|
550
|
+
text
|
|
551
|
+
]
|
|
552
|
+
},
|
|
553
|
+
key
|
|
554
|
+
))
|
|
555
|
+
}
|
|
556
|
+
),
|
|
557
|
+
details && /* @__PURE__ */ jsx("div", { className: "space-y-1 text-xs text-muted-foreground", children: details })
|
|
558
|
+
] });
|
|
559
|
+
if (!actions) {
|
|
560
|
+
return /* @__PURE__ */ jsx("div", { className: cn("space-y-1.5", className), "data-testid": testId, "data-state": state, children: meter });
|
|
561
|
+
}
|
|
562
|
+
return /* @__PURE__ */ jsx("div", { className: cn("@container", className), "data-testid": testId, "data-state": state, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 @lg:flex-row @lg:items-start @lg:gap-6", children: [
|
|
563
|
+
meter,
|
|
564
|
+
/* @__PURE__ */ jsx(
|
|
565
|
+
"div",
|
|
566
|
+
{
|
|
567
|
+
className: "flex min-w-0 flex-wrap items-center gap-2 @lg:w-60 @lg:shrink-0 @lg:flex-col @lg:items-stretch",
|
|
568
|
+
"data-slot": "usage-meter-actions",
|
|
569
|
+
children: actions
|
|
570
|
+
}
|
|
571
|
+
)
|
|
572
|
+
] }) });
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
export { KIT_DEMOS, KIT_SEQUENCES, REMOTE_CONTROL_SURFACE, TIP_CTA_LABEL_MAX_CHARS, TIP_MAX_CHARS, UsageMeter, cancelGuidedRun, createGuidedRuns, createTipsRegistry, guidedCursor, isSurfaceMounted, runGuidedSteps, usageMeterState, useActiveGuidedRun, useGuidedRuns, useMountedSurface };
|
|
576
|
+
//# sourceMappingURL=chunk-NFK2SEUD.js.map
|
|
577
|
+
//# sourceMappingURL=chunk-NFK2SEUD.js.map
|