@malloy-publisher/server 0.0.110 → 0.0.112
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/app/assets/Chip-QKOHsU1g.js +1 -0
- package/dist/app/assets/{Container-Dg_Kf31J.js → Container-L_WqT4jT.js} +1 -1
- package/dist/app/assets/{DialogTitle-CHBg1LY0.js → DialogTitle-Bn08FgCr.js} +1 -1
- package/dist/app/assets/{Edit-C6YfplwT.js → Edit-BJgSEJcw.js} +1 -1
- package/dist/app/assets/FormControlContext-Dw41r2fL.js +1 -0
- package/dist/app/assets/HomePage-7j10faAk.js +3 -0
- package/dist/app/assets/MainPage-CAwngISZ.js +1 -0
- package/dist/app/assets/MenuItem-lIU1AdLr.js +1 -0
- package/dist/app/assets/{Modal-BKeOa8cn.js → Modal-D1yZSrQW.js} +1 -1
- package/dist/app/assets/{ModelPage-PyBDJf_o.js → ModelPage-BZzRs40Z.js} +2 -2
- package/dist/app/assets/MoreVert-BnS0-_a-.js +1 -0
- package/dist/app/assets/PackagePage-CpVMURqi.js +2 -0
- package/dist/app/assets/{ProjectPage-D5jntFzr.js → ProjectPage-Wkk3rsE4.js} +1 -1
- package/dist/app/assets/{RouteError-DMmcYLCb.js → RouteError-DSynFzxI.js} +1 -1
- package/dist/app/assets/{WorkbookPage-DyeCwzrs.js → WorkbookPage-CAKkhCC4.js} +2 -2
- package/dist/app/assets/{index-BWeiQV2D.js → index-BTifa3VC.js} +1 -1
- package/dist/app/assets/index-Csigubii.js +420 -0
- package/dist/app/assets/{index-BrYw7sx9.js → index-GXiK4wJn.js} +1 -1
- package/dist/app/assets/{index.es20-7LPyahVV.js → index.es20-Xp2DiRye.js} +1 -1
- package/dist/app/assets/{index.es23-D1ICAtTa.js → index.es23-DEF5rVoS.js} +2 -2
- package/dist/app/assets/{index.es307-Hyqfwej7.js → index.es310-AKXDC8rl.js} +1 -1
- package/dist/app/assets/{index.es308-DazkJUgb.js → index.es311-CE0-K0fx.js} +1 -1
- package/dist/app/assets/{index.es311-Bdd10041.js → index.es314-CsD4AFJi.js} +1 -1
- package/dist/app/assets/{index.es316-CoGLDRT0.js → index.es319-BAaFF8nF.js} +1 -1
- package/dist/app/assets/{index.es324-BsszfF5h.js → index.es327-CLjg00CO.js} +1 -1
- package/dist/app/assets/{index.es325-DRDvBdmi.js → index.es328-Dk49f56D.js} +1 -1
- package/dist/app/assets/{index.es328-CFMQ5MRM.js → index.es331-CNjOIk10.js} +1 -1
- package/dist/app/assets/{index.es332-fOGuE522.js → index.es335-BeNrivcI.js} +1 -1
- package/dist/app/assets/{index.es335-DaItj58o.js → index.es338-BhR7SkS5.js} +1 -1
- package/dist/app/assets/{index.es338-UjLQeCTc.js → index.es341-C_6PzCoq.js} +1 -1
- package/dist/app/assets/{index.es339-DRQ2Op-C.js → index.es342-D1uAr8c1.js} +1 -1
- package/dist/app/assets/{index.es353-DJ9OBLYp.js → index.es356-7PPXN4m3.js} +1 -1
- package/dist/app/assets/{index.es354-C2ph-Vgb.js → index.es357-CJh2QG0N.js} +1 -1
- package/dist/app/assets/{index.es355-CdFcIAjR.js → index.es358-C_zZutkw.js} +1 -1
- package/dist/app/assets/{index.es357-DnD6YfsZ.js → index.es360-DeQ44nE8.js} +1 -1
- package/dist/app/assets/{index.es362-DQGGaNK3.js → index.es365-oFKdnBEe.js} +1 -1
- package/dist/app/assets/{index.es364-SjsfRDU5.js → index.es367-BUiiHWL7.js} +1 -1
- package/dist/app/assets/{index.es365-BFB9M3aQ.js → index.es368-Bb8Mmpp1.js} +1 -1
- package/dist/app/assets/{index.es370-Cykbl5AV.js → index.es373-C5Q5iXfG.js} +1 -1
- package/dist/app/assets/{index.es371-C1_-FGZD.js → index.es374-s3ewK3v_.js} +1 -1
- package/dist/app/assets/{index.es373-TI9wv2aA.js → index.es376-Dot0I9EF.js} +1 -1
- package/dist/app/assets/{index.es374-D2MetvHl.js → index.es377-B6TLwhtH.js} +1 -1
- package/dist/app/assets/{index.es375-Cl8RLiLz.js → index.es378-mEifvHi6.js} +1 -1
- package/dist/app/assets/{index.es378-DEt7_vw7.js → index.es381-DdV8KTBv.js} +1 -1
- package/dist/app/assets/{index.es380-B_rO6vHZ.js → index.es383-B762Qvzb.js} +1 -1
- package/dist/app/assets/{index.es381-BALGI3Ev.js → index.es384-DBjLFE2E.js} +1 -1
- package/dist/app/assets/{index.es382-WH9q9eN4.js → index.es385-DkDs29_v.js} +1 -1
- package/dist/app/assets/{index.es388-CvzBQwR4.js → index.es391-BOBiTPht.js} +1 -1
- package/dist/app/assets/{index.es389-Sf3IwiTw.js → index.es392-BGdYwXRd.js} +1 -1
- package/dist/app/assets/{index.es390-CvRV_DLA.js → index.es393-BnuSumNM.js} +1 -1
- package/dist/app/assets/{index.es391-BMUNnyko.js → index.es394-DMJpONen.js} +1 -1
- package/dist/app/assets/{index.es393-gzScel_V.js → index.es396-Dexy1Fdn.js} +1 -1
- package/dist/app/assets/{index.es397-ChSe2MGM.js → index.es400-V_MXD6ds.js} +1 -1
- package/dist/app/assets/{index.es398-BM1JIu87.js → index.es401-CAcCA7it.js} +1 -1
- package/dist/app/assets/{index.es406-jeYEdLwu.js → index.es409-DgSxLsfq.js} +1 -1
- package/dist/app/assets/{index.es409-JBGcHOPL.js → index.es412-wcTkTrNP.js} +1 -1
- package/dist/app/assets/{index.es412-BneQpd2K.js → index.es415-hnSTt9Hn.js} +1 -1
- package/dist/app/assets/{index.es415-D2YJmODz.js → index.es418-DwuHSZfi.js} +1 -1
- package/dist/app/assets/{index.es419-Be9XEXai.js → index.es422-DWsCMo9a.js} +1 -1
- package/dist/app/assets/{index.es421-DNif9a-1.js → index.es424-CX2jVTDC.js} +1 -1
- package/dist/app/assets/{index.es429-QvpEdVuu.js → index.es432-DpOOpPot.js} +1 -1
- package/dist/app/assets/{index.es430-BSC0RjJg.js → index.es433--E-hGrgp.js} +1 -1
- package/dist/app/assets/{index.es437-CU58aSis.js → index.es440-NJaU5ncf.js} +1 -1
- package/dist/app/assets/{index.es438-DLcyg_Nq.js → index.es441-CR0Ohpvp.js} +1 -1
- package/dist/app/assets/{index.es448-FCeFQPCW.js → index.es451-sHTEx-Dl.js} +1 -1
- package/dist/app/assets/{index.es452-BRZPWepa.js → index.es455-9ZC7rz1G.js} +1 -1
- package/dist/app/assets/{index.es458-Bpkji9ao.js → index.es461-DAQjszqb.js} +1 -1
- package/dist/app/assets/{index.es463-BaecNR2n.js → index.es466-sT_GOjPl.js} +1 -1
- package/dist/app/assets/{index.es464-CTWl2km5.js → index.es467-D1qnNYJr.js} +1 -1
- package/dist/app/assets/{index.es466-CfLTsC9T.js → index.es469-DW1np4pg.js} +1 -1
- package/dist/app/assets/{index.es470-8ULDOKZc.js → index.es473-wVAdvQ6_.js} +1 -1
- package/dist/app/assets/{index.es472-DcGdjhrt.js → index.es475-CZM7KBU8.js} +1 -1
- package/dist/app/assets/{index.es474-DEhGnLk1.js → index.es477-OAyIdwW_.js} +1 -1
- package/dist/app/assets/{index.es477-CL6caFH2.js → index.es480-DSR8isSz.js} +1 -1
- package/dist/app/assets/{index.es478-Bxqeavdu.js → index.es481-CBydsWwB.js} +1 -1
- package/dist/app/assets/{index.es482-CkcBD1qi.js → index.es485-CJc4fpNV.js} +1 -1
- package/dist/app/assets/{index.es484-mnzfO9M-.js → index.es487-C1wULFp4.js} +1 -1
- package/dist/app/assets/{index.es491-D7XbqGCN.js → index.es494-BLp6ucpV.js} +1 -1
- package/dist/app/assets/{index.es493-CnKU-AzQ.js → index.es496-Tis1R15L.js} +1 -1
- package/dist/app/assets/{index.es495-o1LZm3EH.js → index.es498-DnIxUf2o.js} +1 -1
- package/dist/app/assets/{index.es499-txiTaLX0.js → index.es502-DhEHE70J.js} +1 -1
- package/dist/app/assets/{index.es509-DAhk5QW9.js → index.es512-B---8rhN.js} +1 -1
- package/dist/app/assets/{index.es510-BTIWftZ_.js → index.es513-BU_koFtA.js} +1 -1
- package/dist/app/assets/{index.es517-_uBYPj5P.js → index.es520-ZlB1VPRK.js} +1 -1
- package/dist/app/assets/{index.es518-Duh4FRo0.js → index.es521-VBglaSPm.js} +1 -1
- package/dist/app/assets/index.es7-4Yy4RzF4.js +1 -0
- package/dist/app/assets/index.modern-DMvoTRLq.js +17 -0
- package/dist/app/assets/{index.umd-DFsry6Xq.js → index.umd-B5zPGg7f.js} +1 -1
- package/dist/app/assets/listItemTextClasses-gPHO1JUj.js +1 -0
- package/dist/app/index.html +1 -1
- package/dist/instrumentation.js +2280 -1003
- package/dist/server.js +11373 -4120
- package/package.json +1 -1
- package/src/server.ts +11 -0
- package/src/service/connection.ts +10 -9
- package/src/service/project.ts +11 -17
- package/src/service/project_store.ts +156 -47
- package/dist/app/assets/Chip-CzV-d1RE.js +0 -1
- package/dist/app/assets/FormControlContext-VBpiETuD.js +0 -1
- package/dist/app/assets/HomePage-B7xMQBXw.js +0 -3
- package/dist/app/assets/MainPage-Cvxb9XmX.js +0 -1
- package/dist/app/assets/MenuItem-Ct1Eq8uZ.js +0 -1
- package/dist/app/assets/MoreVert-BXQIW75e.js +0 -1
- package/dist/app/assets/PackagePage-CdhWdIyz.js +0 -2
- package/dist/app/assets/index-D2hrtqN7.js +0 -420
- package/dist/app/assets/index.es7-CBMchwTf.js +0 -1
- package/dist/app/assets/index.modern-C9fiiwjh.js +0 -17
- package/dist/app/assets/listItemTextClasses-st6hnk8F.js +0 -1
- /package/dist/app/assets/{index.es296-CG6Dc4jp.js → index.es299-CG6Dc4jp.js} +0 -0
- /package/dist/app/assets/{index.es304-DsBKuouk.js → index.es307-DsBKuouk.js} +0 -0
- /package/dist/app/assets/{index.es305-D_z4Izcz.js → index.es308-D_z4Izcz.js} +0 -0
- /package/dist/app/assets/{index.es306-727ZlQH0.js → index.es309-727ZlQH0.js} +0 -0
- /package/dist/app/assets/{index.es309-Dn00JSTd.js → index.es312-Dn00JSTd.js} +0 -0
- /package/dist/app/assets/{index.es310-COJ4H7py.js → index.es313-COJ4H7py.js} +0 -0
- /package/dist/app/assets/{index.es312-Bu5BbsvL.js → index.es315-Bu5BbsvL.js} +0 -0
- /package/dist/app/assets/{index.es313-7O62HKoU.js → index.es316-7O62HKoU.js} +0 -0
- /package/dist/app/assets/{index.es314-BPT9niGB.js → index.es317-BPT9niGB.js} +0 -0
- /package/dist/app/assets/{index.es315-Dhn9LcZ4.js → index.es318-Dhn9LcZ4.js} +0 -0
- /package/dist/app/assets/{index.es317-eg146-Ew.js → index.es320-eg146-Ew.js} +0 -0
- /package/dist/app/assets/{index.es318-Du268qiB.js → index.es321-Du268qiB.js} +0 -0
- /package/dist/app/assets/{index.es319-fje9CFhw.js → index.es322-fje9CFhw.js} +0 -0
- /package/dist/app/assets/{index.es320-BwXTMy5W.js → index.es323-BwXTMy5W.js} +0 -0
- /package/dist/app/assets/{index.es321-3xVqZejG.js → index.es324-3xVqZejG.js} +0 -0
- /package/dist/app/assets/{index.es322-xW4inM5L.js → index.es325-xW4inM5L.js} +0 -0
- /package/dist/app/assets/{index.es323-DHo0CJ0O.js → index.es326-DHo0CJ0O.js} +0 -0
- /package/dist/app/assets/{index.es326-C3t2pwGQ.js → index.es329-C3t2pwGQ.js} +0 -0
- /package/dist/app/assets/{index.es327-DNquZEk8.js → index.es330-DNquZEk8.js} +0 -0
- /package/dist/app/assets/{index.es329-BHOwM8T6.js → index.es332-BHOwM8T6.js} +0 -0
- /package/dist/app/assets/{index.es330-DxSadP1t.js → index.es333-DxSadP1t.js} +0 -0
- /package/dist/app/assets/{index.es331-DbXoA79R.js → index.es334-DbXoA79R.js} +0 -0
- /package/dist/app/assets/{index.es333-Bp6g37R7.js → index.es336-Bp6g37R7.js} +0 -0
- /package/dist/app/assets/{index.es334-sacFqUAJ.js → index.es337-sacFqUAJ.js} +0 -0
- /package/dist/app/assets/{index.es336-C7gG9l05.js → index.es339-C7gG9l05.js} +0 -0
- /package/dist/app/assets/{index.es337-Dsg_Bt_b.js → index.es340-Dsg_Bt_b.js} +0 -0
- /package/dist/app/assets/{index.es340-D9R-vmeu.js → index.es343-D9R-vmeu.js} +0 -0
- /package/dist/app/assets/{index.es341-BPhBrDlE.js → index.es344-BPhBrDlE.js} +0 -0
- /package/dist/app/assets/{index.es342-C-TU5hQ_.js → index.es345-C-TU5hQ_.js} +0 -0
- /package/dist/app/assets/{index.es343-DtFQj3wx.js → index.es346-DtFQj3wx.js} +0 -0
- /package/dist/app/assets/{index.es344-m2LEI-9-.js → index.es347-m2LEI-9-.js} +0 -0
- /package/dist/app/assets/{index.es345-BoXegm-a.js → index.es348-BoXegm-a.js} +0 -0
- /package/dist/app/assets/{index.es346-B9wLZaAG.js → index.es349-B9wLZaAG.js} +0 -0
- /package/dist/app/assets/{index.es347-ClGRhx96.js → index.es350-ClGRhx96.js} +0 -0
- /package/dist/app/assets/{index.es348-DEIpsLCJ.js → index.es351-DEIpsLCJ.js} +0 -0
- /package/dist/app/assets/{index.es349-BgYniUM_.js → index.es352-BgYniUM_.js} +0 -0
- /package/dist/app/assets/{index.es350-COcR7UxN.js → index.es353-COcR7UxN.js} +0 -0
- /package/dist/app/assets/{index.es351-BjQB5zDj.js → index.es354-BjQB5zDj.js} +0 -0
- /package/dist/app/assets/{index.es352-C-nORZOA.js → index.es355-C-nORZOA.js} +0 -0
- /package/dist/app/assets/{index.es356-BX77sIaO.js → index.es359-BX77sIaO.js} +0 -0
- /package/dist/app/assets/{index.es358-B-DoSBHF.js → index.es361-B-DoSBHF.js} +0 -0
- /package/dist/app/assets/{index.es359-bCA53EVm.js → index.es362-bCA53EVm.js} +0 -0
- /package/dist/app/assets/{index.es360-w-ucz2PV.js → index.es363-w-ucz2PV.js} +0 -0
- /package/dist/app/assets/{index.es361-Dayu4EKP.js → index.es364-Dayu4EKP.js} +0 -0
- /package/dist/app/assets/{index.es363-DKXYxT9g.js → index.es366-DKXYxT9g.js} +0 -0
- /package/dist/app/assets/{index.es366-DfxzS6Rs.js → index.es369-DfxzS6Rs.js} +0 -0
- /package/dist/app/assets/{index.es367-SKMF96pI.js → index.es370-SKMF96pI.js} +0 -0
- /package/dist/app/assets/{index.es368-ajMbGru0.js → index.es371-ajMbGru0.js} +0 -0
- /package/dist/app/assets/{index.es369--30QC5Em.js → index.es372--30QC5Em.js} +0 -0
- /package/dist/app/assets/{index.es372-B430Bg39.js → index.es375-B430Bg39.js} +0 -0
- /package/dist/app/assets/{index.es376-CM8KxXT1.js → index.es379-CM8KxXT1.js} +0 -0
- /package/dist/app/assets/{index.es377-B1SYOhNW.js → index.es380-B1SYOhNW.js} +0 -0
- /package/dist/app/assets/{index.es379-DkBy-JyN.js → index.es382-DkBy-JyN.js} +0 -0
- /package/dist/app/assets/{index.es383-BILxekzW.js → index.es386-BILxekzW.js} +0 -0
- /package/dist/app/assets/{index.es384-C5wWYbrZ.js → index.es387-C5wWYbrZ.js} +0 -0
- /package/dist/app/assets/{index.es385-HzYwdGDm.js → index.es388-HzYwdGDm.js} +0 -0
- /package/dist/app/assets/{index.es386-T-Tgc4AT.js → index.es389-T-Tgc4AT.js} +0 -0
- /package/dist/app/assets/{index.es387-ifBTmRxC.js → index.es390-ifBTmRxC.js} +0 -0
- /package/dist/app/assets/{index.es392-BMj5Y0dO.js → index.es395-BMj5Y0dO.js} +0 -0
- /package/dist/app/assets/{index.es394-BjABl1g7.js → index.es397-BjABl1g7.js} +0 -0
- /package/dist/app/assets/{index.es395-xI-RfyKK.js → index.es398-xI-RfyKK.js} +0 -0
- /package/dist/app/assets/{index.es396-ySlJ1b_l.js → index.es399-ySlJ1b_l.js} +0 -0
- /package/dist/app/assets/{index.es399-BQoSv7ci.js → index.es402-BQoSv7ci.js} +0 -0
- /package/dist/app/assets/{index.es400-w8dY5SsB.js → index.es403-w8dY5SsB.js} +0 -0
- /package/dist/app/assets/{index.es401-TU54ms6u.js → index.es404-TU54ms6u.js} +0 -0
- /package/dist/app/assets/{index.es402-DREVFZK8.js → index.es405-DREVFZK8.js} +0 -0
- /package/dist/app/assets/{index.es403-BfivnA6A.js → index.es406-BfivnA6A.js} +0 -0
- /package/dist/app/assets/{index.es404-P4WzXJd0.js → index.es407-P4WzXJd0.js} +0 -0
- /package/dist/app/assets/{index.es405-BAng5TT0.js → index.es408-BAng5TT0.js} +0 -0
- /package/dist/app/assets/{index.es407-B5lbUyaz.js → index.es410-B5lbUyaz.js} +0 -0
- /package/dist/app/assets/{index.es408-mebxcVVE.js → index.es411-mebxcVVE.js} +0 -0
- /package/dist/app/assets/{index.es410-XBlWyCtg.js → index.es413-XBlWyCtg.js} +0 -0
- /package/dist/app/assets/{index.es411-BfCpw3nA.js → index.es414-BfCpw3nA.js} +0 -0
- /package/dist/app/assets/{index.es413-Cc5clBb7.js → index.es416-Cc5clBb7.js} +0 -0
- /package/dist/app/assets/{index.es414-IuBKFhSY.js → index.es417-IuBKFhSY.js} +0 -0
- /package/dist/app/assets/{index.es416-Du5NY7AG.js → index.es419-Du5NY7AG.js} +0 -0
- /package/dist/app/assets/{index.es417-Bvotw-X0.js → index.es420-Bvotw-X0.js} +0 -0
- /package/dist/app/assets/{index.es418-UIAJJxZW.js → index.es421-UIAJJxZW.js} +0 -0
- /package/dist/app/assets/{index.es420-D9-PGadD.js → index.es423-D9-PGadD.js} +0 -0
- /package/dist/app/assets/{index.es422-sdHcTMYB.js → index.es425-sdHcTMYB.js} +0 -0
- /package/dist/app/assets/{index.es423-Ci6OQyBP.js → index.es426-Ci6OQyBP.js} +0 -0
- /package/dist/app/assets/{index.es424-BC5c_5Pe.js → index.es427-BC5c_5Pe.js} +0 -0
- /package/dist/app/assets/{index.es425-Tz6hzZYG.js → index.es428-Tz6hzZYG.js} +0 -0
- /package/dist/app/assets/{index.es426-DB_GagMm.js → index.es429-DB_GagMm.js} +0 -0
- /package/dist/app/assets/{index.es427-DLbgOhZU.js → index.es430-DLbgOhZU.js} +0 -0
- /package/dist/app/assets/{index.es428-B0XVJmRM.js → index.es431-B0XVJmRM.js} +0 -0
- /package/dist/app/assets/{index.es431-shcSOmrb.js → index.es434-shcSOmrb.js} +0 -0
- /package/dist/app/assets/{index.es432-D4Tzg5kh.js → index.es435-D4Tzg5kh.js} +0 -0
- /package/dist/app/assets/{index.es433-Deuh7S70.js → index.es436-Deuh7S70.js} +0 -0
- /package/dist/app/assets/{index.es434-BUEGK8hf.js → index.es437-BUEGK8hf.js} +0 -0
- /package/dist/app/assets/{index.es435-BNioltXt.js → index.es438-BNioltXt.js} +0 -0
- /package/dist/app/assets/{index.es436-JqZropPD.js → index.es439-JqZropPD.js} +0 -0
- /package/dist/app/assets/{index.es439-LKU2TuZ1.js → index.es442-LKU2TuZ1.js} +0 -0
- /package/dist/app/assets/{index.es440-BFLt1xDp.js → index.es443-BFLt1xDp.js} +0 -0
- /package/dist/app/assets/{index.es441-DKykz6zU.js → index.es444-DKykz6zU.js} +0 -0
- /package/dist/app/assets/{index.es442-B3ZDOciz.js → index.es445-B3ZDOciz.js} +0 -0
- /package/dist/app/assets/{index.es443-CSHBycmS.js → index.es446-CSHBycmS.js} +0 -0
- /package/dist/app/assets/{index.es444-BIEUsx6d.js → index.es447-BIEUsx6d.js} +0 -0
- /package/dist/app/assets/{index.es445-B48N-Iqd.js → index.es448-B48N-Iqd.js} +0 -0
- /package/dist/app/assets/{index.es446-BY-TUvya.js → index.es449-BY-TUvya.js} +0 -0
- /package/dist/app/assets/{index.es447-zocC4JxJ.js → index.es450-zocC4JxJ.js} +0 -0
- /package/dist/app/assets/{index.es449-Cza_XSSt.js → index.es452-Cza_XSSt.js} +0 -0
- /package/dist/app/assets/{index.es450-Bg-kzb6g.js → index.es453-Bg-kzb6g.js} +0 -0
- /package/dist/app/assets/{index.es451-DhUJRlN_.js → index.es454-DhUJRlN_.js} +0 -0
- /package/dist/app/assets/{index.es453-C8lEn-DE.js → index.es456-C8lEn-DE.js} +0 -0
- /package/dist/app/assets/{index.es454-DhMKtDLN.js → index.es457-DhMKtDLN.js} +0 -0
- /package/dist/app/assets/{index.es455-CwjWoCRV.js → index.es458-CwjWoCRV.js} +0 -0
- /package/dist/app/assets/{index.es456-CzouJOBO.js → index.es459-CzouJOBO.js} +0 -0
- /package/dist/app/assets/{index.es457-B1bQXN8T.js → index.es460-B1bQXN8T.js} +0 -0
- /package/dist/app/assets/{index.es459-5LuOXUq_.js → index.es462-5LuOXUq_.js} +0 -0
- /package/dist/app/assets/{index.es460-DWJ3fJO_.js → index.es463-DWJ3fJO_.js} +0 -0
- /package/dist/app/assets/{index.es461-DJlmqQ1C.js → index.es464-DJlmqQ1C.js} +0 -0
- /package/dist/app/assets/{index.es462-QhoSD0DR.js → index.es465-QhoSD0DR.js} +0 -0
- /package/dist/app/assets/{index.es465-Be6lgOlo.js → index.es468-Be6lgOlo.js} +0 -0
- /package/dist/app/assets/{index.es467-BJ4Li9vH.js → index.es470-BJ4Li9vH.js} +0 -0
- /package/dist/app/assets/{index.es468-DQVVAn-B.js → index.es471-DQVVAn-B.js} +0 -0
- /package/dist/app/assets/{index.es469-BJGe-b2p.js → index.es472-BJGe-b2p.js} +0 -0
- /package/dist/app/assets/{index.es471-BLhTXw86.js → index.es474-BLhTXw86.js} +0 -0
- /package/dist/app/assets/{index.es473-atvbtKCR.js → index.es476-atvbtKCR.js} +0 -0
- /package/dist/app/assets/{index.es475-DkLiglaE.js → index.es478-DkLiglaE.js} +0 -0
- /package/dist/app/assets/{index.es476-C1w2a3ep.js → index.es479-C1w2a3ep.js} +0 -0
- /package/dist/app/assets/{index.es479-Cf8iN4DR.js → index.es482-Cf8iN4DR.js} +0 -0
- /package/dist/app/assets/{index.es480-COK4E0Yg.js → index.es483-COK4E0Yg.js} +0 -0
- /package/dist/app/assets/{index.es481-BknIz3MU.js → index.es484-BknIz3MU.js} +0 -0
- /package/dist/app/assets/{index.es483-BeQkCIfX.js → index.es486-BeQkCIfX.js} +0 -0
- /package/dist/app/assets/{index.es485-BSxZ-RaX.js → index.es488-BSxZ-RaX.js} +0 -0
- /package/dist/app/assets/{index.es486-C7L56vO4.js → index.es489-C7L56vO4.js} +0 -0
- /package/dist/app/assets/{index.es487-CUnW07Te.js → index.es490-CUnW07Te.js} +0 -0
- /package/dist/app/assets/{index.es488-C1XDQQGZ.js → index.es491-C1XDQQGZ.js} +0 -0
- /package/dist/app/assets/{index.es489-CQjiPCtT.js → index.es492-CQjiPCtT.js} +0 -0
- /package/dist/app/assets/{index.es490-DQ1-QYvQ.js → index.es493-DQ1-QYvQ.js} +0 -0
- /package/dist/app/assets/{index.es492-BbSNqyBO.js → index.es495-BbSNqyBO.js} +0 -0
- /package/dist/app/assets/{index.es494-CB2ApiWb.js → index.es497-CB2ApiWb.js} +0 -0
- /package/dist/app/assets/{index.es496-B_m7g4N7.js → index.es499-B_m7g4N7.js} +0 -0
- /package/dist/app/assets/{index.es497-B6W0miNI.js → index.es500-B6W0miNI.js} +0 -0
- /package/dist/app/assets/{index.es498-BMR_PYu6.js → index.es501-BMR_PYu6.js} +0 -0
- /package/dist/app/assets/{index.es500-Dj6nwHGl.js → index.es503-Dj6nwHGl.js} +0 -0
- /package/dist/app/assets/{index.es501-BpWG_bgh.js → index.es504-BpWG_bgh.js} +0 -0
- /package/dist/app/assets/{index.es502-BVUVsWT6.js → index.es505-BVUVsWT6.js} +0 -0
- /package/dist/app/assets/{index.es503-CAQ2eGtk.js → index.es506-CAQ2eGtk.js} +0 -0
- /package/dist/app/assets/{index.es504-BFOHcciG.js → index.es507-BFOHcciG.js} +0 -0
- /package/dist/app/assets/{index.es505-CdO5JTpU.js → index.es508-CdO5JTpU.js} +0 -0
- /package/dist/app/assets/{index.es506-CJaU5se_.js → index.es509-CJaU5se_.js} +0 -0
- /package/dist/app/assets/{index.es507-DYoNaHQp.js → index.es510-DYoNaHQp.js} +0 -0
- /package/dist/app/assets/{index.es508-m4uW47V2.js → index.es511-m4uW47V2.js} +0 -0
- /package/dist/app/assets/{index.es511-nyqBNV6O.js → index.es514-nyqBNV6O.js} +0 -0
- /package/dist/app/assets/{index.es512-C6j12Q_x.js → index.es515-C6j12Q_x.js} +0 -0
- /package/dist/app/assets/{index.es513-7A4Fjokl.js → index.es516-7A4Fjokl.js} +0 -0
- /package/dist/app/assets/{index.es514-CB0Krxn9.js → index.es517-CB0Krxn9.js} +0 -0
- /package/dist/app/assets/{index.es515-DCE3LsBG.js → index.es518-DCE3LsBG.js} +0 -0
- /package/dist/app/assets/{index.es516-C3FkfJm5.js → index.es519-C3FkfJm5.js} +0 -0
- /package/dist/app/assets/{index.es519-CVw76BM1.js → index.es522-CVw76BM1.js} +0 -0
- /package/dist/app/assets/{index.es520-HnGAYVZD.js → index.es523-HnGAYVZD.js} +0 -0
- /package/dist/app/assets/{index.es521-BVz_zdnA.js → index.es524-BVz_zdnA.js} +0 -0
- /package/dist/app/assets/{index.es522-C3khCPGq.js → index.es525-C3khCPGq.js} +0 -0
- /package/dist/app/assets/{index.es523-D-2ljcwZ.js → index.es526-D-2ljcwZ.js} +0 -0
- /package/dist/app/assets/{index.es524-Cv9koXgw.js → index.es527-Cv9koXgw.js} +0 -0
- /package/dist/app/assets/{index.es525-CD_QflpE.js → index.es528-CD_QflpE.js} +0 -0
- /package/dist/app/assets/{index.es526-DRW-0cLl.js → index.es529-DRW-0cLl.js} +0 -0
- /package/dist/app/assets/{index.es527-C-_shW-Y.js → index.es530-C-_shW-Y.js} +0 -0
- /package/dist/app/assets/{index.es528-LGGdnPYs.js → index.es531-LGGdnPYs.js} +0 -0
- /package/dist/app/assets/{index.es529-C3mMm8J8.js → index.es532-C3mMm8J8.js} +0 -0
- /package/dist/app/assets/{index.es530-BzJJZx-M.js → index.es533-BzJJZx-M.js} +0 -0
- /package/dist/app/assets/{index.es531-BXkSAIEj.js → index.es534-BXkSAIEj.js} +0 -0
- /package/dist/app/assets/{index.es532-BgDCqdQA.js → index.es535-BgDCqdQA.js} +0 -0
- /package/dist/app/assets/{index.es533-C8M2exoo.js → index.es536-C8M2exoo.js} +0 -0
- /package/dist/app/assets/{index.es534-DHJKELXO.js → index.es537-DHJKELXO.js} +0 -0
- /package/dist/app/assets/{index.es535-Cuk6v7N8.js → index.es538-Cuk6v7N8.js} +0 -0
- /package/dist/app/assets/{index.es536-DH5Ifo-i.js → index.es539-DH5Ifo-i.js} +0 -0
- /package/dist/app/assets/{index.es537-E3gJ1_iC.js → index.es540-E3gJ1_iC.js} +0 -0
- /package/dist/app/assets/{index.es538-DAi9KRSo.js → index.es541-DAi9KRSo.js} +0 -0
- /package/dist/app/assets/{index.es539-D7oLnXFd.js → index.es542-D7oLnXFd.js} +0 -0
- /package/dist/app/assets/{index.es540-BfjtVDDH.js → index.es543-BfjtVDDH.js} +0 -0
- /package/dist/app/assets/{index.es541-DnULxvSX.js → index.es544-DnULxvSX.js} +0 -0
- /package/dist/app/assets/{index.es542-CkXjmgJE.js → index.es545-CkXjmgJE.js} +0 -0
- /package/dist/app/assets/{index.es543-CfQXZHmo.js → index.es546-CfQXZHmo.js} +0 -0
- /package/dist/app/assets/{index.es544-DWedfzmr.js → index.es547-DWedfzmr.js} +0 -0
- /package/dist/app/assets/{index.es545-DUszq2jm.js → index.es548-DUszq2jm.js} +0 -0
- /package/dist/app/assets/{index.es546-B7mTdjB0.js → index.es549-B7mTdjB0.js} +0 -0
- /package/dist/app/assets/{index.es547-D5KoaKCx.js → index.es550-D5KoaKCx.js} +0 -0
- /package/dist/app/assets/{index.es548-BfHTSMKl.js → index.es551-BfHTSMKl.js} +0 -0
- /package/dist/app/assets/{index.es549-B0m2ddpp.js → index.es552-B0m2ddpp.js} +0 -0
- /package/dist/app/assets/{index.es550-CyktbL80.js → index.es553-CyktbL80.js} +0 -0
- /package/dist/app/assets/{index.es551-Csfq5Kiy.js → index.es554-Csfq5Kiy.js} +0 -0
- /package/dist/app/assets/{index.es552-CafNBF8u.js → index.es555-CafNBF8u.js} +0 -0
- /package/dist/app/assets/{index.es553-CTRr51gU.js → index.es556-CTRr51gU.js} +0 -0
- /package/dist/app/assets/{index.es554-D4h5O-jR.js → index.es557-D4h5O-jR.js} +0 -0
- /package/dist/app/assets/{index.es555-C39BiMTA.js → index.es558-C39BiMTA.js} +0 -0
- /package/dist/app/assets/{index.es556-Ddv68eIx.js → index.es559-Ddv68eIx.js} +0 -0
- /package/dist/app/assets/{index.es557-GBQ2dnAY.js → index.es560-GBQ2dnAY.js} +0 -0
- /package/dist/app/assets/{index.es558-PoHY5YXO.js → index.es561-PoHY5YXO.js} +0 -0
- /package/dist/app/assets/{index.es559-3e1v2bzS.js → index.es562-3e1v2bzS.js} +0 -0
- /package/dist/app/assets/{index.es560-CS3Unz2-.js → index.es563-CS3Unz2-.js} +0 -0
- /package/dist/app/assets/{index.es561-bN70gL4F.js → index.es564-bN70gL4F.js} +0 -0
- /package/dist/app/assets/{index.es562-CmCqftbK.js → index.es565-CmCqftbK.js} +0 -0
- /package/dist/app/assets/{index.es563-Ds-gbosJ.js → index.es566-Ds-gbosJ.js} +0 -0
- /package/dist/app/assets/{index.es564-CjDtw9vr.js → index.es567-CjDtw9vr.js} +0 -0
- /package/dist/app/assets/{index.es565-BthQWCQV.js → index.es568-BthQWCQV.js} +0 -0
- /package/dist/app/assets/{index.es566-DqwNpetd.js → index.es569-DqwNpetd.js} +0 -0
- /package/dist/app/assets/{index.es567-Bw305WKR.js → index.es570-Bw305WKR.js} +0 -0
- /package/dist/app/assets/{index.es568-DXbdFlpD.js → index.es571-DXbdFlpD.js} +0 -0
- /package/dist/app/assets/{index.es569-L9t79GZl.js → index.es572-L9t79GZl.js} +0 -0
- /package/dist/app/assets/{index.es570-CbfX1IO0.js → index.es573-CbfX1IO0.js} +0 -0
- /package/dist/app/assets/{index.es571-DBQeEorK.js → index.es574-DBQeEorK.js} +0 -0
- /package/dist/app/assets/{index.es572-BEBZ7ncR.js → index.es575-BEBZ7ncR.js} +0 -0
- /package/dist/app/assets/{index.es573-Bkuqu6BP.js → index.es576-Bkuqu6BP.js} +0 -0
- /package/dist/app/assets/{index.es574-D0r3Knsf.js → index.es577-D0r3Knsf.js} +0 -0
- /package/dist/app/assets/{index.es575-CVO1_9PV.js → index.es578-CVO1_9PV.js} +0 -0
package/package.json
CHANGED
package/src/server.ts
CHANGED
|
@@ -3,6 +3,7 @@ import * as bodyParser from "body-parser";
|
|
|
3
3
|
import cors from "cors";
|
|
4
4
|
import express from "express";
|
|
5
5
|
import * as http from "http";
|
|
6
|
+
import { createProxyMiddleware } from "http-proxy-middleware";
|
|
6
7
|
import { AddressInfo } from "net";
|
|
7
8
|
import * as path from "path";
|
|
8
9
|
import { ConnectionController } from "./controller/connection.controller";
|
|
@@ -184,6 +185,16 @@ if (!isDevelopment) {
|
|
|
184
185
|
// In development mode, proxy requests to React dev server
|
|
185
186
|
// Handle API routes first
|
|
186
187
|
app.use(`${API_PREFIX}`, loggerMiddleware);
|
|
188
|
+
|
|
189
|
+
// Proxy everything else to Vite
|
|
190
|
+
app.use(
|
|
191
|
+
createProxyMiddleware({
|
|
192
|
+
target: "http://localhost:5173",
|
|
193
|
+
changeOrigin: true,
|
|
194
|
+
ws: true,
|
|
195
|
+
pathFilter: (path) => !path.startsWith("/api/"),
|
|
196
|
+
}),
|
|
197
|
+
);
|
|
187
198
|
}
|
|
188
199
|
|
|
189
200
|
const setVersionIdError = (res: express.Response) => {
|
|
@@ -4,19 +4,19 @@ import { PostgresConnection } from "@malloydata/db-postgres";
|
|
|
4
4
|
import { SnowflakeConnection } from "@malloydata/db-snowflake";
|
|
5
5
|
import { TrinoConnection } from "@malloydata/db-trino";
|
|
6
6
|
import { Connection } from "@malloydata/malloy";
|
|
7
|
-
import { BadRequestError } from "../errors";
|
|
8
|
-
import { logAxiosError, logger } from "../logger";
|
|
9
7
|
import { BaseConnection } from "@malloydata/malloy/connection";
|
|
8
|
+
import { AxiosError } from "axios";
|
|
10
9
|
import fs from "fs/promises";
|
|
11
10
|
import path from "path";
|
|
12
11
|
import { v4 as uuidv4 } from "uuid";
|
|
13
12
|
import { components } from "../api";
|
|
14
|
-
import { TEMP_DIR_PATH } from "../constants";
|
|
15
13
|
import {
|
|
16
14
|
convertConnectionsToApiConnections,
|
|
17
15
|
getConnectionsFromPublisherConfig,
|
|
18
16
|
} from "../config";
|
|
19
|
-
import {
|
|
17
|
+
import { TEMP_DIR_PATH } from "../constants";
|
|
18
|
+
import { BadRequestError } from "../errors";
|
|
19
|
+
import { logAxiosError, logger } from "../logger";
|
|
20
20
|
|
|
21
21
|
type ApiConnection = components["schemas"]["Connection"];
|
|
22
22
|
type ApiConnectionAttributes = components["schemas"]["ConnectionAttributes"];
|
|
@@ -284,13 +284,14 @@ export async function testConnectionConfig(
|
|
|
284
284
|
|
|
285
285
|
const postgresConfig = connectionConfig.postgresConnection;
|
|
286
286
|
if (
|
|
287
|
-
!postgresConfig.
|
|
288
|
-
!postgresConfig.
|
|
289
|
-
|
|
290
|
-
|
|
287
|
+
!postgresConfig.connectionString &&
|
|
288
|
+
(!postgresConfig.host ||
|
|
289
|
+
!postgresConfig.port ||
|
|
290
|
+
!postgresConfig.userName ||
|
|
291
|
+
!postgresConfig.databaseName)
|
|
291
292
|
) {
|
|
292
293
|
throw new Error(
|
|
293
|
-
"PostgreSQL connection requires: host, port, userName, and databaseName",
|
|
294
|
+
"PostgreSQL connection requires: either all of host, port, userName, and databaseName, or connectionString",
|
|
294
295
|
);
|
|
295
296
|
}
|
|
296
297
|
|
package/src/service/project.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Mutex } from "async-mutex";
|
|
|
3
3
|
import * as fs from "fs";
|
|
4
4
|
import * as path from "path";
|
|
5
5
|
import { components } from "../api";
|
|
6
|
-
import { API_PREFIX,
|
|
6
|
+
import { API_PREFIX, README_NAME } from "../constants";
|
|
7
7
|
import {
|
|
8
8
|
ConnectionNotFoundError,
|
|
9
9
|
PackageNotFoundError,
|
|
@@ -14,7 +14,7 @@ import { createConnections, InternalConnection } from "./connection";
|
|
|
14
14
|
import { ApiConnection } from "./model";
|
|
15
15
|
import { Package } from "./package";
|
|
16
16
|
|
|
17
|
-
enum PackageStatus {
|
|
17
|
+
export enum PackageStatus {
|
|
18
18
|
LOADING = "loading",
|
|
19
19
|
SERVING = "serving",
|
|
20
20
|
UNLOADING = "unloading",
|
|
@@ -183,28 +183,22 @@ export class Project {
|
|
|
183
183
|
public async listPackages(): Promise<ApiPackage[]> {
|
|
184
184
|
logger.info("Listing packages", { projectPath: this.projectPath });
|
|
185
185
|
try {
|
|
186
|
-
const files = await fs.promises.readdir(this.projectPath, {
|
|
187
|
-
withFileTypes: true,
|
|
188
|
-
});
|
|
189
|
-
const packageDirectories = files.filter(
|
|
190
|
-
(file) =>
|
|
191
|
-
file.isDirectory() &&
|
|
192
|
-
fs.existsSync(
|
|
193
|
-
path.join(this.projectPath, file.name, PACKAGE_MANIFEST_NAME),
|
|
194
|
-
),
|
|
195
|
-
);
|
|
196
186
|
const packageMetadata = await Promise.all(
|
|
197
|
-
|
|
187
|
+
Array.from(this.packageStatuses.keys()).map(async (packageName) => {
|
|
198
188
|
try {
|
|
199
|
-
|
|
200
|
-
this.packageStatuses.get(
|
|
189
|
+
const packageMetadata = (
|
|
190
|
+
this.packageStatuses.get(packageName)?.status ===
|
|
201
191
|
PackageStatus.LOADING
|
|
202
192
|
? undefined
|
|
203
|
-
: await this.getPackage(
|
|
193
|
+
: await this.getPackage(packageName, false)
|
|
204
194
|
)?.getPackageMetadata();
|
|
195
|
+
if (packageMetadata) {
|
|
196
|
+
packageMetadata.name = packageName;
|
|
197
|
+
}
|
|
198
|
+
return packageMetadata;
|
|
205
199
|
} catch (error) {
|
|
206
200
|
logger.error(
|
|
207
|
-
`Failed to load package: ${
|
|
201
|
+
`Failed to load package: ${packageName} due to : ${error}`,
|
|
208
202
|
);
|
|
209
203
|
// Directory did not contain a valid package.json file -- therefore, it's not a package.
|
|
210
204
|
// Or it timed out
|
|
@@ -9,8 +9,8 @@ import { components } from "../api";
|
|
|
9
9
|
import {
|
|
10
10
|
getProcessedPublisherConfig,
|
|
11
11
|
isPublisherConfigFrozen,
|
|
12
|
-
ProcessedPublisherConfig,
|
|
13
12
|
ProcessedProject,
|
|
13
|
+
ProcessedPublisherConfig,
|
|
14
14
|
} from "../config";
|
|
15
15
|
import { API_PREFIX, PUBLISHER_CONFIG_NAME, publisherPath } from "../constants";
|
|
16
16
|
import {
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
ProjectNotFoundError,
|
|
20
20
|
} from "../errors";
|
|
21
21
|
import { logger } from "../logger";
|
|
22
|
-
import { Project } from "./project";
|
|
22
|
+
import { PackageStatus, Project } from "./project";
|
|
23
23
|
type ApiProject = components["schemas"]["Project"];
|
|
24
24
|
|
|
25
25
|
export class ProjectStore {
|
|
@@ -49,6 +49,7 @@ export class ProjectStore {
|
|
|
49
49
|
const projectManifest = await ProjectStore.reloadProjectManifest(
|
|
50
50
|
this.serverRootPath,
|
|
51
51
|
);
|
|
52
|
+
await this.cleanupAndCreatePublisherPath();
|
|
52
53
|
logger.info(`Initializing project store.`);
|
|
53
54
|
await Promise.all(
|
|
54
55
|
projectManifest.projects.map(async (project) => {
|
|
@@ -75,6 +76,22 @@ export class ProjectStore {
|
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
|
|
79
|
+
private async cleanupAndCreatePublisherPath() {
|
|
80
|
+
logger.info(`Cleaning up publisher path ${publisherPath}`);
|
|
81
|
+
try {
|
|
82
|
+
await fs.promises.rm(publisherPath, { recursive: true, force: true });
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if ((error as NodeJS.ErrnoException).code === "EACCES") {
|
|
85
|
+
logger.warn(
|
|
86
|
+
`Permission denied, skipping cleanup of publisher path ${publisherPath}`,
|
|
87
|
+
);
|
|
88
|
+
} else {
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
await fs.promises.mkdir(publisherPath, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
|
|
78
95
|
public async listProjects(skipInitializationCheck: boolean = false) {
|
|
79
96
|
if (!skipInitializationCheck) {
|
|
80
97
|
await this.finishedInitialization;
|
|
@@ -218,6 +235,9 @@ export class ProjectStore {
|
|
|
218
235
|
this.serverRootPath,
|
|
219
236
|
);
|
|
220
237
|
this.projects.set(projectName, newProject);
|
|
238
|
+
projectConfig?.packages.forEach((_package) => {
|
|
239
|
+
newProject.setPackageStatus(_package.name, PackageStatus.SERVING);
|
|
240
|
+
});
|
|
221
241
|
return newProject;
|
|
222
242
|
}
|
|
223
243
|
|
|
@@ -329,6 +349,30 @@ export class ProjectStore {
|
|
|
329
349
|
return absoluteProjectPath;
|
|
330
350
|
}
|
|
331
351
|
|
|
352
|
+
private isLocalPath(location: string) {
|
|
353
|
+
return (
|
|
354
|
+
location.startsWith("./") ||
|
|
355
|
+
location.startsWith("~/") ||
|
|
356
|
+
location.startsWith("/") ||
|
|
357
|
+
path.isAbsolute(location)
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
private isGitHubURL(location: string) {
|
|
362
|
+
return (
|
|
363
|
+
location.startsWith("https://github.com/") ||
|
|
364
|
+
location.startsWith("git@github.com:")
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
private isGCSURL(location: string) {
|
|
369
|
+
return location.startsWith("gs://");
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
private isS3URL(location: string) {
|
|
373
|
+
return location.startsWith("s3://");
|
|
374
|
+
}
|
|
375
|
+
|
|
332
376
|
private async loadProjectIntoDisk(
|
|
333
377
|
projectName: string,
|
|
334
378
|
projectPath: string,
|
|
@@ -359,65 +403,96 @@ export class ProjectStore {
|
|
|
359
403
|
);
|
|
360
404
|
}
|
|
361
405
|
|
|
362
|
-
|
|
363
|
-
|
|
406
|
+
// For GitHub URLs, group by base repository URL to optimize downloads
|
|
407
|
+
let locationKey = _package.location;
|
|
408
|
+
if (this.isGitHubURL(_package.location)) {
|
|
409
|
+
const githubInfo = this.parseGitHubUrl(_package.location);
|
|
410
|
+
if (githubInfo) {
|
|
411
|
+
// Always use HTTPS format for grouping to ensure consistency
|
|
412
|
+
locationKey = `https://github.com/${githubInfo.owner}/${githubInfo.repoName}`;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
364
415
|
|
|
365
|
-
if (!locationGroups.has(
|
|
366
|
-
locationGroups.set(
|
|
416
|
+
if (!locationGroups.has(locationKey)) {
|
|
417
|
+
locationGroups.set(locationKey, []);
|
|
367
418
|
}
|
|
368
|
-
locationGroups.get(
|
|
419
|
+
locationGroups.get(locationKey)!.push({
|
|
420
|
+
name: _package.name,
|
|
421
|
+
location: _package.location,
|
|
422
|
+
});
|
|
369
423
|
}
|
|
370
424
|
|
|
371
425
|
// Processing by each unique location
|
|
372
|
-
for (const [
|
|
426
|
+
for (const [groupedLocation, packagesForLocation] of locationGroups) {
|
|
373
427
|
// Create a temporary directory for the shared download
|
|
374
428
|
const tempDownloadPath = `${absoluteTargetPath}/.temp_${Buffer.from(
|
|
375
|
-
|
|
429
|
+
groupedLocation,
|
|
376
430
|
)
|
|
377
431
|
.toString("base64")
|
|
378
432
|
.replace(/[^a-zA-Z0-9]/g, "")}`;
|
|
379
433
|
await fs.promises.mkdir(tempDownloadPath, { recursive: true });
|
|
380
|
-
|
|
434
|
+
logger.info(`Created temporary directory: ${tempDownloadPath}`);
|
|
381
435
|
try {
|
|
382
|
-
//
|
|
436
|
+
// Use the existing download method for all locations
|
|
383
437
|
await this.downloadOrMountLocation(
|
|
384
|
-
|
|
438
|
+
groupedLocation,
|
|
385
439
|
tempDownloadPath,
|
|
386
440
|
projectName,
|
|
387
441
|
"shared",
|
|
388
442
|
);
|
|
389
|
-
|
|
390
443
|
// Extract each package from the downloaded content
|
|
391
444
|
for (const _package of packagesForLocation) {
|
|
392
445
|
const packageDir = _package.name;
|
|
393
446
|
const absolutePackagePath = `${absoluteTargetPath}/${packageDir}`;
|
|
447
|
+
// For GitHub URLs, extract the subdirectory path from the original location
|
|
448
|
+
let sourcePath: string;
|
|
449
|
+
if (this.isGitHubURL(_package.location)) {
|
|
450
|
+
const githubInfo = this.parseGitHubUrl(_package.location);
|
|
451
|
+
if (githubInfo && githubInfo.packagePath) {
|
|
452
|
+
// Extract subdirectory from the original GitHub URL
|
|
453
|
+
// Handle both /tree/main/subdir and /tree/branch/subdir cases
|
|
454
|
+
const subPathMatch =
|
|
455
|
+
_package.location.match(/\/tree\/[^/]+\/(.+)$/);
|
|
456
|
+
if (subPathMatch) {
|
|
457
|
+
sourcePath = path.join(
|
|
458
|
+
tempDownloadPath,
|
|
459
|
+
subPathMatch[1],
|
|
460
|
+
);
|
|
461
|
+
} else {
|
|
462
|
+
// If no subdirectory after /tree/branch, the repo itself is the package
|
|
463
|
+
sourcePath = tempDownloadPath;
|
|
464
|
+
}
|
|
465
|
+
} else {
|
|
466
|
+
// No packagePath means the repo itself is the package
|
|
467
|
+
sourcePath = tempDownloadPath;
|
|
468
|
+
}
|
|
469
|
+
} else {
|
|
470
|
+
// For non-GitHub locations, use package name
|
|
471
|
+
if (this.isLocalPath(_package.location)) {
|
|
472
|
+
sourcePath = _package.location;
|
|
473
|
+
} else {
|
|
474
|
+
sourcePath = path.join(tempDownloadPath, groupedLocation);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
394
477
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
tempDownloadPath,
|
|
398
|
-
packageDir,
|
|
399
|
-
);
|
|
400
|
-
const packageExists = await fs.promises
|
|
401
|
-
.access(packagePathInDownload)
|
|
478
|
+
const sourceExists = await fs.promises
|
|
479
|
+
.access(sourcePath)
|
|
402
480
|
.then(() => true)
|
|
403
481
|
.catch(() => false);
|
|
404
482
|
|
|
405
|
-
if (
|
|
406
|
-
// Copy the specific
|
|
483
|
+
if (sourceExists) {
|
|
484
|
+
// Copy the specific directory
|
|
407
485
|
await fs.promises.mkdir(absolutePackagePath, {
|
|
408
486
|
recursive: true,
|
|
409
487
|
});
|
|
410
|
-
await fs.promises.cp(
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
{ recursive: true },
|
|
414
|
-
);
|
|
488
|
+
await fs.promises.cp(sourcePath, absolutePackagePath, {
|
|
489
|
+
recursive: true,
|
|
490
|
+
});
|
|
415
491
|
logger.info(
|
|
416
|
-
`Extracted package "${packageDir}" from shared download`,
|
|
492
|
+
`Extracted package "${packageDir}" from ${groupedLocation.startsWith("https://github.com/") && _package.location.includes("/tree/") ? "GitHub subdirectory" : "shared download"}`,
|
|
417
493
|
);
|
|
418
494
|
} else {
|
|
419
|
-
// If
|
|
420
|
-
// This handles cases where the location itself is the package
|
|
495
|
+
// If source doesn't exist, copy the entire download as the package
|
|
421
496
|
await fs.promises.mkdir(absolutePackagePath, {
|
|
422
497
|
recursive: true,
|
|
423
498
|
});
|
|
@@ -430,11 +505,14 @@ export class ProjectStore {
|
|
|
430
505
|
}
|
|
431
506
|
}
|
|
432
507
|
} catch (error) {
|
|
433
|
-
logger.error(
|
|
434
|
-
|
|
435
|
-
|
|
508
|
+
logger.error(
|
|
509
|
+
`Failed to download or mount location "${groupedLocation}"`,
|
|
510
|
+
{
|
|
511
|
+
error,
|
|
512
|
+
},
|
|
513
|
+
);
|
|
436
514
|
throw new PackageNotFoundError(
|
|
437
|
-
`Failed to download or mount location: ${
|
|
515
|
+
`Failed to download or mount location: ${groupedLocation}`,
|
|
438
516
|
);
|
|
439
517
|
}
|
|
440
518
|
try {
|
|
@@ -464,7 +542,7 @@ export class ProjectStore {
|
|
|
464
542
|
) {
|
|
465
543
|
const isCompressedFile = location.endsWith(".zip");
|
|
466
544
|
// Handle GCS paths
|
|
467
|
-
if (
|
|
545
|
+
if (this.isGCSURL(location)) {
|
|
468
546
|
try {
|
|
469
547
|
logger.info(
|
|
470
548
|
`Downloading GCS directory from "${location}" to "${targetPath}"`,
|
|
@@ -487,10 +565,7 @@ export class ProjectStore {
|
|
|
487
565
|
}
|
|
488
566
|
|
|
489
567
|
// Handle GitHub URLs
|
|
490
|
-
if (
|
|
491
|
-
location.startsWith("https://github.com/") ||
|
|
492
|
-
location.startsWith("git@")
|
|
493
|
-
) {
|
|
568
|
+
if (this.isGitHubURL(location)) {
|
|
494
569
|
try {
|
|
495
570
|
logger.info(
|
|
496
571
|
`Cloning GitHub repository from "${location}" to "${targetPath}"`,
|
|
@@ -508,7 +583,7 @@ export class ProjectStore {
|
|
|
508
583
|
}
|
|
509
584
|
|
|
510
585
|
// Handle S3 paths
|
|
511
|
-
if (
|
|
586
|
+
if (this.isS3URL(location)) {
|
|
512
587
|
try {
|
|
513
588
|
logger.info(
|
|
514
589
|
`Downloading S3 directory from "${location}" to "${targetPath}"`,
|
|
@@ -526,7 +601,7 @@ export class ProjectStore {
|
|
|
526
601
|
}
|
|
527
602
|
|
|
528
603
|
// Handle absolute and relative paths
|
|
529
|
-
if (
|
|
604
|
+
if (this.isLocalPath(location)) {
|
|
530
605
|
const packagePath: string = path.isAbsolute(location)
|
|
531
606
|
? location
|
|
532
607
|
: path.join(this.serverRootPath, location);
|
|
@@ -690,17 +765,40 @@ export class ProjectStore {
|
|
|
690
765
|
);
|
|
691
766
|
}
|
|
692
767
|
|
|
768
|
+
private parseGitHubUrl(
|
|
769
|
+
githubUrl: string,
|
|
770
|
+
): { owner: string; repoName: string; packagePath?: string } | null {
|
|
771
|
+
// Handle HTTPS format: https://github.com/owner/repo/tree/branch/subdir
|
|
772
|
+
const httpsRegex =
|
|
773
|
+
/github\.com\/(?<owner>[^/]+)\/(?<repoName>[^/]+)(?<packagePath>\/[^/]+)*/;
|
|
774
|
+
const httpsMatch = githubUrl.match(httpsRegex);
|
|
775
|
+
if (httpsMatch) {
|
|
776
|
+
const { owner, repoName, packagePath } = httpsMatch.groups!;
|
|
777
|
+
return { owner, repoName, packagePath };
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
// Handle SSH format: git@github.com:owner/repo.git or git@github.com:owner/repo
|
|
781
|
+
const sshRegex =
|
|
782
|
+
/git@github\.com:(?<owner>[^/]+)\/(?<repoName>[^/\s]+?)(?:\.git)?(?<packagePath>\/[^/]+)*$/;
|
|
783
|
+
const sshMatch = githubUrl.match(sshRegex);
|
|
784
|
+
if (sshMatch) {
|
|
785
|
+
const { owner, repoName, packagePath } = sshMatch.groups!;
|
|
786
|
+
return { owner, repoName, packagePath };
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
return null;
|
|
790
|
+
}
|
|
791
|
+
|
|
693
792
|
async downloadGitHubDirectory(githubUrl: string, absoluteDirPath: string) {
|
|
694
793
|
// First we'll clone the repo without the additional path
|
|
695
794
|
// E.g. we're removing `/tree/main/imdb` from https://github.com/credibledata/malloy-samples/tree/main/imdb
|
|
696
|
-
const
|
|
697
|
-
|
|
698
|
-
const match = githubUrl.match(githubRepoRegex);
|
|
699
|
-
if (!match) {
|
|
795
|
+
const githubInfo = this.parseGitHubUrl(githubUrl);
|
|
796
|
+
if (!githubInfo) {
|
|
700
797
|
throw new Error(`Invalid GitHub URL: ${githubUrl}`);
|
|
701
798
|
}
|
|
702
|
-
const { owner, repoName, packagePath } =
|
|
703
|
-
const cleanPackagePath = packagePath
|
|
799
|
+
const { owner, repoName, packagePath } = githubInfo;
|
|
800
|
+
const cleanPackagePath = packagePath?.replace("/tree/main", "") || "";
|
|
801
|
+
|
|
704
802
|
// We'll make sure whatever was in absoluteDirPath is removed,
|
|
705
803
|
// so we have a nice a clean directory where we can clone the repo
|
|
706
804
|
await fs.promises.rm(absoluteDirPath, {
|
|
@@ -709,6 +807,7 @@ export class ProjectStore {
|
|
|
709
807
|
});
|
|
710
808
|
await fs.promises.mkdir(absoluteDirPath, { recursive: true });
|
|
711
809
|
const repoUrl = `https://github.com/${owner}/${repoName}`;
|
|
810
|
+
|
|
712
811
|
// We'll clone the repo into absoluteDirPath
|
|
713
812
|
await new Promise<void>((resolve, reject) => {
|
|
714
813
|
simpleGit().clone(repoUrl, absoluteDirPath, {}, (err) => {
|
|
@@ -722,6 +821,16 @@ export class ProjectStore {
|
|
|
722
821
|
resolve();
|
|
723
822
|
});
|
|
724
823
|
});
|
|
824
|
+
|
|
825
|
+
// If there's no specific package path, we're done (for grouped downloads)
|
|
826
|
+
if (!cleanPackagePath) {
|
|
827
|
+
logger.info(
|
|
828
|
+
`Successfully cloned entire repository to: ${absoluteDirPath}`,
|
|
829
|
+
);
|
|
830
|
+
return;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// For single package downloads, extract the specific subdirectory
|
|
725
834
|
// After cloning, we'll replace all contents of absoluteDirPath with the contents of absoluteDirPath/cleanPackagePath
|
|
726
835
|
// E.g. we're moving /var/publisher/asd123/imdb/publisher.json into /var/publisher/asd123/publisher.json
|
|
727
836
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as oa,j as x,q as ea,p as la,r as d,s as ta,aa as ra,L as j,x as y,a7 as E,w as M,A as t,F as ia,J as na,ab as p,K as k}from"./index-D2hrtqN7.js";const ca=oa(x.jsx("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}));function sa(a){return la("MuiChip",a)}const e=ea("MuiChip",["root","sizeSmall","sizeMedium","colorDefault","colorError","colorInfo","colorPrimary","colorSecondary","colorSuccess","colorWarning","disabled","clickable","clickableColorPrimary","clickableColorSecondary","deletable","deletableColorPrimary","deletableColorSecondary","outlined","filled","outlinedPrimary","outlinedSecondary","filledPrimary","filledSecondary","avatar","avatarSmall","avatarMedium","avatarColorPrimary","avatarColorSecondary","icon","iconSmall","iconMedium","iconColorPrimary","iconColorSecondary","label","labelSmall","labelMedium","deleteIcon","deleteIconSmall","deleteIconMedium","deleteIconColorPrimary","deleteIconColorSecondary","deleteIconOutlinedColorPrimary","deleteIconOutlinedColorSecondary","deleteIconFilledColorPrimary","deleteIconFilledColorSecondary","focusVisible"]),pa=a=>{const{classes:l,disabled:o,size:r,color:n,iconColor:C,onDelete:u,clickable:c,variant:s}=a,$={root:["root",s,o&&"disabled",`size${t(r)}`,`color${t(n)}`,c&&"clickable",c&&`clickableColor${t(n)}`,u&&"deletable",u&&`deletableColor${t(n)}`,`${s}${t(n)}`],label:["label",`label${t(r)}`],avatar:["avatar",`avatar${t(r)}`,`avatarColor${t(n)}`],icon:["icon",`icon${t(r)}`,`iconColor${t(C)}`],deleteIcon:["deleteIcon",`deleteIcon${t(r)}`,`deleteIconColor${t(n)}`,`deleteIcon${t(s)}Color${t(n)}`]};return ia($,sa,l)},da=M("div",{name:"MuiChip",slot:"Root",overridesResolver:(a,l)=>{const{ownerState:o}=a,{color:r,iconColor:n,clickable:C,onDelete:u,size:c,variant:s}=o;return[{[`& .${e.avatar}`]:l.avatar},{[`& .${e.avatar}`]:l[`avatar${t(c)}`]},{[`& .${e.avatar}`]:l[`avatarColor${t(r)}`]},{[`& .${e.icon}`]:l.icon},{[`& .${e.icon}`]:l[`icon${t(c)}`]},{[`& .${e.icon}`]:l[`iconColor${t(n)}`]},{[`& .${e.deleteIcon}`]:l.deleteIcon},{[`& .${e.deleteIcon}`]:l[`deleteIcon${t(c)}`]},{[`& .${e.deleteIcon}`]:l[`deleteIconColor${t(r)}`]},{[`& .${e.deleteIcon}`]:l[`deleteIcon${t(s)}Color${t(r)}`]},l.root,l[`size${t(c)}`],l[`color${t(r)}`],C&&l.clickable,C&&r!=="default"&&l[`clickableColor${t(r)})`],u&&l.deletable,u&&r!=="default"&&l[`deletableColor${t(r)}`],l[s],l[`${s}${t(r)}`]]}})(na(({theme:a})=>{const l=a.palette.mode==="light"?a.palette.grey[700]:a.palette.grey[300];return{maxWidth:"100%",fontFamily:a.typography.fontFamily,fontSize:a.typography.pxToRem(13),display:"inline-flex",alignItems:"center",justifyContent:"center",height:32,lineHeight:1.5,color:(a.vars||a).palette.text.primary,backgroundColor:(a.vars||a).palette.action.selected,borderRadius:32/2,whiteSpace:"nowrap",transition:a.transitions.create(["background-color","box-shadow"]),cursor:"unset",outline:0,textDecoration:"none",border:0,padding:0,verticalAlign:"middle",boxSizing:"border-box",[`&.${e.disabled}`]:{opacity:(a.vars||a).palette.action.disabledOpacity,pointerEvents:"none"},[`& .${e.avatar}`]:{marginLeft:5,marginRight:-6,width:24,height:24,color:a.vars?a.vars.palette.Chip.defaultAvatarColor:l,fontSize:a.typography.pxToRem(12)},[`& .${e.avatarColorPrimary}`]:{color:(a.vars||a).palette.primary.contrastText,backgroundColor:(a.vars||a).palette.primary.dark},[`& .${e.avatarColorSecondary}`]:{color:(a.vars||a).palette.secondary.contrastText,backgroundColor:(a.vars||a).palette.secondary.dark},[`& .${e.avatarSmall}`]:{marginLeft:4,marginRight:-4,width:18,height:18,fontSize:a.typography.pxToRem(10)},[`& .${e.icon}`]:{marginLeft:5,marginRight:-6},[`& .${e.deleteIcon}`]:{WebkitTapHighlightColor:"transparent",color:a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.26)`:p(a.palette.text.primary,.26),fontSize:22,cursor:"pointer",margin:"0 5px 0 -6px","&:hover":{color:a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.4)`:p(a.palette.text.primary,.4)}},variants:[{props:{size:"small"},style:{height:24,[`& .${e.icon}`]:{fontSize:18,marginLeft:4,marginRight:-4},[`& .${e.deleteIcon}`]:{fontSize:16,marginRight:4,marginLeft:-4}}},...Object.entries(a.palette).filter(k(["contrastText"])).map(([o])=>({props:{color:o},style:{backgroundColor:(a.vars||a).palette[o].main,color:(a.vars||a).palette[o].contrastText,[`& .${e.deleteIcon}`]:{color:a.vars?`rgba(${a.vars.palette[o].contrastTextChannel} / 0.7)`:p(a.palette[o].contrastText,.7),"&:hover, &:active":{color:(a.vars||a).palette[o].contrastText}}}})),{props:o=>o.iconColor===o.color,style:{[`& .${e.icon}`]:{color:a.vars?a.vars.palette.Chip.defaultIconColor:l}}},{props:o=>o.iconColor===o.color&&o.color!=="default",style:{[`& .${e.icon}`]:{color:"inherit"}}},{props:{onDelete:!0},style:{[`&.${e.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.action.selectedChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.focusOpacity}))`:p(a.palette.action.selected,a.palette.action.selectedOpacity+a.palette.action.focusOpacity)}}},...Object.entries(a.palette).filter(k(["dark"])).map(([o])=>({props:{color:o,onDelete:!0},style:{[`&.${e.focusVisible}`]:{background:(a.vars||a).palette[o].dark}}})),{props:{clickable:!0},style:{userSelect:"none",WebkitTapHighlightColor:"transparent",cursor:"pointer","&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette.action.selectedChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.hoverOpacity}))`:p(a.palette.action.selected,a.palette.action.selectedOpacity+a.palette.action.hoverOpacity)},[`&.${e.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.action.selectedChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.focusOpacity}))`:p(a.palette.action.selected,a.palette.action.selectedOpacity+a.palette.action.focusOpacity)},"&:active":{boxShadow:(a.vars||a).shadows[1]}}},...Object.entries(a.palette).filter(k(["dark"])).map(([o])=>({props:{color:o,clickable:!0},style:{[`&:hover, &.${e.focusVisible}`]:{backgroundColor:(a.vars||a).palette[o].dark}}})),{props:{variant:"outlined"},style:{backgroundColor:"transparent",border:a.vars?`1px solid ${a.vars.palette.Chip.defaultBorder}`:`1px solid ${a.palette.mode==="light"?a.palette.grey[400]:a.palette.grey[700]}`,[`&.${e.clickable}:hover`]:{backgroundColor:(a.vars||a).palette.action.hover},[`&.${e.focusVisible}`]:{backgroundColor:(a.vars||a).palette.action.focus},[`& .${e.avatar}`]:{marginLeft:4},[`& .${e.avatarSmall}`]:{marginLeft:2},[`& .${e.icon}`]:{marginLeft:4},[`& .${e.iconSmall}`]:{marginLeft:2},[`& .${e.deleteIcon}`]:{marginRight:5},[`& .${e.deleteIconSmall}`]:{marginRight:3}}},...Object.entries(a.palette).filter(k()).map(([o])=>({props:{variant:"outlined",color:o},style:{color:(a.vars||a).palette[o].main,border:`1px solid ${a.vars?`rgba(${a.vars.palette[o].mainChannel} / 0.7)`:p(a.palette[o].main,.7)}`,[`&.${e.clickable}:hover`]:{backgroundColor:a.vars?`rgba(${a.vars.palette[o].mainChannel} / ${a.vars.palette.action.hoverOpacity})`:p(a.palette[o].main,a.palette.action.hoverOpacity)},[`&.${e.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette[o].mainChannel} / ${a.vars.palette.action.focusOpacity})`:p(a.palette[o].main,a.palette.action.focusOpacity)},[`& .${e.deleteIcon}`]:{color:a.vars?`rgba(${a.vars.palette[o].mainChannel} / 0.7)`:p(a.palette[o].main,.7),"&:hover, &:active":{color:(a.vars||a).palette[o].main}}}}))]}})),ua=M("span",{name:"MuiChip",slot:"Label",overridesResolver:(a,l)=>{const{ownerState:o}=a,{size:r}=o;return[l.label,l[`label${t(r)}`]]}})({overflow:"hidden",textOverflow:"ellipsis",paddingLeft:12,paddingRight:12,whiteSpace:"nowrap",variants:[{props:{variant:"outlined"},style:{paddingLeft:11,paddingRight:11}},{props:{size:"small"},style:{paddingLeft:8,paddingRight:8}},{props:{size:"small",variant:"outlined"},style:{paddingLeft:7,paddingRight:7}}]});function F(a){return a.key==="Backspace"||a.key==="Delete"}const ba=d.forwardRef(function(l,o){const r=ta({props:l,name:"MuiChip"}),{avatar:n,className:C,clickable:u,color:c="default",component:s,deleteIcon:$,disabled:S=!1,icon:f,label:N,onClick:O,onDelete:v,onKeyDown:w,onKeyUp:z,size:K="medium",variant:U="filled",tabIndex:W,skipFocusWhenDisabled:B=!1,slots:A={},slotProps:H={},...q}=r,J=d.useRef(null),G=ra(J,o),D=i=>{i.stopPropagation(),v&&v(i)},Q=i=>{i.currentTarget===i.target&&F(i)&&i.preventDefault(),w&&w(i)},X=i=>{i.currentTarget===i.target&&v&&F(i)&&v(i),z&&z(i)},I=u!==!1&&O?!0:u,P=I||v?j:s||"div",R={...r,component:P,disabled:S,size:K,color:c,iconColor:d.isValidElement(f)&&f.props.color||c,onDelete:!!v,clickable:I,variant:U},g=pa(R),Y=P===j?{component:s||"div",focusVisibleClassName:g.focusVisible,...v&&{disableRipple:!0}}:{};let L=null;v&&(L=$&&d.isValidElement($)?d.cloneElement($,{className:y($.props.className,g.deleteIcon),onClick:D}):x.jsx(ca,{className:g.deleteIcon,onClick:D}));let m=null;n&&d.isValidElement(n)&&(m=d.cloneElement(n,{className:y(g.avatar,n.props.className)}));let T=null;f&&d.isValidElement(f)&&(T=d.cloneElement(f,{className:y(g.icon,f.props.className)}));const V={slots:A,slotProps:H},[Z,_]=E("root",{elementType:da,externalForwardedProps:{...V,...q},ownerState:R,shouldForwardComponentProp:!0,ref:G,className:y(g.root,C),additionalProps:{disabled:I&&S?!0:void 0,tabIndex:B&&S?-1:W,...Y},getSlotProps:i=>({...i,onClick:b=>{i.onClick?.(b),O?.(b)},onKeyDown:b=>{i.onKeyDown?.(b),Q?.(b)},onKeyUp:b=>{i.onKeyUp?.(b),X?.(b)}})}),[h,aa]=E("label",{elementType:ua,externalForwardedProps:V,ownerState:R,className:g.label});return x.jsxs(Z,{as:P,..._,children:[m||T,x.jsx(h,{...aa,children:N}),L]})});export{ba as C};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o}from"./index-D2hrtqN7.js";const r=o.createContext(void 0);export{r as F};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{c as L,j as e,r as j,D as f,u as k,S as z,R as D,P as b,a as E,v as A,N as I,M as F,E as w,C as M,z as B,Y as G,b as Q,G as V,W as K,d as O,B as y,e as p,f as W,T as i,g as v,h as C,m as J,i as U,k as X,t as q,l as $,y as Z,I as ee,n as re,o as te}from"./index-D2hrtqN7.js";import{f as ne}from"./index.es20-7LPyahVV.js";import{M as R,a as se}from"./MenuItem-Ct1Eq8uZ.js";import{L as N,A as ae}from"./MoreVert-BXQIW75e.js";import{b as oe,L as T,S as _,P as ie,G as g}from"./Edit-C6YfplwT.js";import{C as le}from"./Container-Dg_Kf31J.js";import{C as P}from"./Chip-CzV-d1RE.js";import{D as ce}from"./listItemTextClasses-st6hnk8F.js";import"./Modal-BKeOa8cn.js";const de=L(e.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m4 11h-3v3c0 .55-.45 1-1 1s-1-.45-1-1v-3H8c-.55 0-1-.45-1-1s.45-1 1-1h3V8c0-.55.45-1 1-1s1 .45 1 1v3h3c.55 0 1 .45 1 1s-.45 1-1 1"})),Y=r=>{if(!r)return"Explore semantic models, run queries, and build dashboards";const n=r.replace(/^#+\s+/gm,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/`([^`]+)`/g,"$1").trim(),t=n.split(/\n\s*\n/)[0]||n;if(t.length<=120)return t;const s=t.substring(0,120).split(" ");return s.pop(),s.join(" ")+"..."},H=(r,n)=>{const t=(r.readme||void 0)?.split(`
|
|
2
|
-
`)??[];return t.length===0&&(t.push(`# ${r.name}`),t.push("")),(r.readme?.length??0)>0&&n?t.splice(2,1,n):n&&t.push(n),t.join(`
|
|
3
|
-
`)};function me(){const[r,n]=j.useState(!1),{apiClients:t}=f(),[s,c]=j.useState(""),d=()=>{n(!0)},l=()=>{n(!1)},a=k(),m=z({async mutationFn(o){return t.projects.createProject({name:o.name,readme:H({name:o.name,readme:""},o.description)})},onSuccess(){l(),a.invalidateQueries({queryKey:["projects"]}),c("Project created successfully")},onError(o){c(o instanceof Error?o.message:"An unknown error occurred")}}),x=async o=>{o.preventDefault();const h=new FormData(o.currentTarget),u=h.get("name")?.toString(),S=h.get("description")?.toString();if(!u)throw new Error("Name is required");m.mutate({name:u,description:S})};return e.jsxs(D.Fragment,{children:[e.jsx(b,{variant:"contained",onClick:d,startIcon:e.jsx(de,{}),sx:{mt:2,color:"white"},children:"Create New Project"}),e.jsxs(E,{open:r,onClose:l,children:[e.jsx(A,{children:"Create New Project"}),e.jsxs(I,{children:[e.jsx(F,{children:"Add a new project to start exploring semantic models and analyzing data."}),e.jsxs("form",{onSubmit:x,id:"project-form",children:[e.jsx(w,{autoFocus:!0,required:!0,margin:"dense",id:"name",name:"name",label:"Project Name",type:"text",fullWidth:!0,variant:"standard"}),e.jsx(w,{margin:"dense",id:"description",name:"description",label:"Project Description",defaultValue:"Explore semantic models, run queries, and build dashboards",type:"text",fullWidth:!0,variant:"standard"})]})]}),e.jsxs(M,{children:[e.jsx(b,{disabled:m.isPending,onClick:l,children:"Cancel"}),e.jsx(b,{type:"submit",form:"project-form",loading:m.isPending,children:"Create Project"})]})]}),e.jsx(B,{open:s!=="",autoHideDuration:6e3,onClose:()=>c(""),message:s})]})}function ue({project:r,onCloseDialog:n}){const[t,s]=j.useState(!1),{apiClients:c}=f(),d=k(),[l,a]=j.useState(""),m=()=>{s(!0)},x=()=>{s(!1),n()},o=z({mutationFn:()=>c.projects.deleteProject(r.name),onSuccess(){x(),d.invalidateQueries({queryKey:["projects"]}),a("Project deleted successfully")},onError(h){a(h instanceof Error?h.message:"An unknown error occurred")}});return e.jsxs(D.Fragment,{children:[e.jsxs(R,{onClick:m,children:[e.jsx(N,{children:e.jsx(oe,{fontSize:"small"})}),e.jsx(T,{children:"Delete"})]}),e.jsxs(E,{onClose:x,"aria-labelledby":"customized-dialog-title",open:t,children:[e.jsx(A,{sx:{m:0,p:2},id:"customized-dialog-title",children:"Delete Project"}),e.jsx(G,{"aria-label":"close",onClick:x,sx:h=>({position:"absolute",right:8,top:8,color:h.palette.grey[500]}),children:e.jsx(Q,{})}),e.jsx(I,{dividers:!0,children:e.jsxs(V,{gutterBottom:!0,children:['Are you sure you want to delete "',r.name,'"? This action cannot be undone.']})}),e.jsx(M,{children:e.jsx(b,{loading:o.isPending,variant:"contained",autoFocus:!0,onClick:()=>o.mutate(),color:"error",children:"Delete"})}),e.jsx(_,{open:l!=="",autoHideDuration:6e3,onClose:()=>a(""),message:l})]})]})}function xe({project:r,onCloseDialog:n}){const[t,s]=j.useState(!1),{apiClients:c}=f(),d=k(),[l,a]=j.useState(""),m=()=>{s(!0)},x=()=>{s(!1),n()},o=z({async mutationFn(u){return c.projects.updateProject(r.name,{name:r.name,readme:H({name:r.name,readme:r.readme},u.description)})},onSuccess(){x(),d.invalidateQueries({queryKey:["projects"]}),a("Project updated successfully")},onError(u){a(u instanceof Error?u.message:"An unknown error occurred")}}),h=u=>{u.preventDefault();const S=new FormData(u.currentTarget).get("description")?.toString();o.mutate({description:S})};return e.jsxs(D.Fragment,{children:[e.jsxs(R,{onClick:m,children:[e.jsx(N,{children:e.jsx(ie,{fontSize:"small"})}),e.jsx(T,{children:"Edit"})]}),e.jsxs(E,{open:t,onClose:x,children:[e.jsx(A,{children:"Edit Project"}),e.jsxs(I,{children:[e.jsx(F,{children:"Add a new project to start exploring semantic models and analyzing data."}),e.jsxs("form",{onSubmit:h,id:"project-form",children:[e.jsx(w,{autoFocus:!0,required:!0,margin:"dense",id:"name",name:"name",label:"Project Name",disabled:!0,type:"text",fullWidth:!0,variant:"standard",defaultValue:r.name}),e.jsx(w,{margin:"dense",id:"description",name:"description",label:"Project Description",type:"text",fullWidth:!0,variant:"standard",defaultValue:Y(r.readme)})]})]}),e.jsxs(M,{children:[e.jsx(b,{disabled:o.isPending,onClick:x,children:"Cancel"}),e.jsx(b,{type:"submit",form:"project-form",loading:o.isPending,children:"Save Changes"})]})]}),e.jsx(_,{open:l!=="",autoHideDuration:6e3,onClose:()=>a(""),message:l})]})}function he({onClickProject:r}){const{apiClients:n,mutable:t}=f(),{data:s,isSuccess:c,isError:d,error:l}=K({queryKey:["projects"],queryFn:()=>n.projects.listProjects()});return d?e.jsx(O,{error:l,context:"Projects List"}):c?e.jsxs(le,{maxWidth:"lg",sx:{py:4},children:[e.jsxs(y,{sx:{textAlign:"center",mb:6},children:[e.jsxs(p,{direction:"row",justifyContent:"center",alignItems:"center",spacing:1,sx:{mb:2},children:[e.jsx(W,{sx:{fontSize:32,color:"primary.main"}}),e.jsx(i,{variant:"h3",component:"h1",fontWeight:700,children:"Publisher"})]}),e.jsx(i,{variant:"h5",color:"text.secondary",sx:{mb:3,maxWidth:600,mx:"auto"},children:"The open-source semantic model server for the Malloy data language"}),e.jsx(i,{variant:"body1",color:"text.secondary",sx:{maxWidth:800,mx:"auto"},children:"Define semantic models once — and use them everywhere. Publisher serves Malloy models through clean APIs, enabling consistent, interpretable, and AI-ready data access for tools, applications, and agents."})]}),e.jsxs(g,{container:!0,spacing:3,sx:{mb:6},children:[e.jsx(g,{size:{xs:12,md:4},children:e.jsx(v,{variant:"outlined",onClick:()=>{window.open("https://github.com/malloydata/publisher/blob/main/README.md#ad-hoc-data-analysis","_blank")},sx:{height:"100%",cursor:"pointer",transition:"all 0.2s ease","&:hover":{transform:"translateY(-2px)",boxShadow:2}},children:e.jsxs(C,{sx:{p:3},children:[e.jsxs(p,{direction:"row",alignItems:"center",spacing:1,sx:{mb:2},children:[e.jsx(J,{sx:{color:"info.main",fontSize:28}}),e.jsx(i,{variant:"h6",fontWeight:600,children:"Ad Hoc Analysis"})]}),e.jsx(i,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Use Explorer, a visual query builder that allows analysts to browse semantic sources, build queries, and run nested logic — all without writing code."}),e.jsx(P,{label:"No-code",size:"small",color:"primary",variant:"outlined"})]})})}),e.jsx(g,{size:{xs:12,md:4},children:e.jsx(v,{variant:"outlined",onClick:()=>{window.open("https://github.com/malloydata/publisher/blob/main/README.md#notebook-based-dashboards","_blank")},sx:{height:"100%",cursor:"pointer",transition:"all 0.2s ease","&:hover":{transform:"translateY(-2px)",boxShadow:2}},children:e.jsxs(C,{sx:{p:3},children:[e.jsxs(p,{direction:"row",alignItems:"center",spacing:1,sx:{mb:2},children:[e.jsx(U,{sx:{color:"warning.main",fontSize:28}}),e.jsx(i,{variant:"h6",fontWeight:600,children:"Notebook Dashboards"})]}),e.jsx(i,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Create shareable, code-first dashboards using Malloy notebooks. Include text, charts, and reusable views — all versioned alongside your models."}),e.jsx(P,{label:"Versioned",size:"small",color:"warning",variant:"outlined"})]})})}),e.jsx(g,{size:{xs:12,md:4},children:e.jsx(v,{variant:"outlined",onClick:()=>{window.open("https://github.com/malloydata/publisher/blob/main/README.md#mcp-based-ai-data-agents","_blank")},sx:{height:"100%",cursor:"pointer",transition:"all 0.2s ease","&:hover":{transform:"translateY(-2px)",boxShadow:2}},children:e.jsxs(C,{sx:{p:3},children:[e.jsxs(p,{direction:"row",alignItems:"center",spacing:1,sx:{mb:2},children:[e.jsx(X,{sx:{color:"success.main",fontSize:28}}),e.jsx(i,{variant:"h6",fontWeight:600,children:"AI Data Agents"})]}),e.jsx(i,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Expose your semantic models via the Model Context Protocol (MCP), enabling AI agents to discover sources and ask well-formed questions."}),e.jsx(P,{label:"AI-Ready",size:"small",color:"success",variant:"outlined"})]})})})]}),e.jsx(ce,{sx:{my:4}}),s.data.length>0?e.jsxs(e.Fragment,{children:[e.jsxs(y,{sx:{textAlign:"center",mb:4},children:[e.jsxs(p,{direction:"row",justifyContent:"center",alignItems:"center",spacing:1,sx:{mb:2},children:[e.jsx(q,{sx:{color:"primary.main",fontSize:24}}),e.jsx(i,{variant:"h4",fontWeight:600,children:"Select a Project"})]}),e.jsx(i,{variant:"body1",color:"text.secondary",children:"Choose a project to explore its semantic models and start analyzing your data"}),t&&e.jsx(me,{})]}),e.jsx(g,{container:!0,spacing:3,justifyContent:"center",children:s.data.map(a=>e.jsx(g,{size:{xs:12,sm:6,md:4},children:e.jsx(je,{project:a,onClickProject:r})},a.name))})]}):e.jsxs(y,{sx:{textAlign:"center",mb:4},children:[e.jsxs(p,{direction:"row",justifyContent:"center",alignItems:"center",spacing:1,sx:{mb:2},children:[e.jsx(q,{sx:{color:"primary.main",fontSize:24}}),e.jsx(i,{variant:"h4",fontWeight:600,children:"Get Started"})]}),e.jsx(i,{variant:"body1",color:"text.secondary",sx:{mb:3},children:"No projects found. Create your first Malloy project to start exploring semantic models and building data experiences."}),e.jsx($,{variant:"contained",size:"large",color:"primary",startIcon:e.jsx(W,{}),href:"https://github.com/malloydata/publisher/blob/main/README.md#server-configuration",target:"_blank",rel:"noopener noreferrer",children:"Learn How to Create Models"})]}),e.jsx(y,{sx:{textAlign:"center",mt:6,pt:4,borderTop:1,borderColor:"divider"},children:e.jsxs(i,{variant:"body2",color:"text.secondary",children:["Publisher is built on fully open infrastructure and designed for the AI era. Join the"," ",e.jsx("a",{href:"https://join.slack.com/t/malloy-community/shared_invite/zt-1kgfwgi5g-CrsdaRqs81QY67QW0~t_uw",target:"_blank",rel:"noopener noreferrer",style:{color:"primary.main",textDecoration:"underline"},children:"Malloy Slack community"})," ","to ask questions, share ideas, and contribute to the future of data modeling."]})})]}):e.jsx(Z,{text:"Loading projects..."})}function je({project:r,onClickProject:n}){const{mutable:t}=f(),[s,c]=j.useState(null),d=!!s,l=m=>{c(m.currentTarget)},a=()=>{c(null)};return e.jsx("div",{children:e.jsxs(v,{variant:"outlined",sx:{height:"100%",transition:"all 0.2s ease","&:hover":{transform:"translateY(-2px)",boxShadow:2,borderColor:"primary.main"}},children:[t&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{"aria-controls":d?"project-menu":void 0,"aria-haspopup":"true","aria-expanded":d?"true":void 0,onClick:l,sx:{position:"absolute",top:8,right:8},children:e.jsx(ae,{fontSize:"small"})}),e.jsxs(se,{id:"project-menu","aria-haspopup":"true","aria-expanded":d?"true":void 0,open:d,anchorEl:s,onClose:a,disableRestoreFocus:!0,anchorOrigin:{vertical:"top",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"right"},children:[e.jsx(xe,{project:r,onCloseDialog:a}),e.jsx(ue,{project:r,onCloseDialog:a})]})]}),e.jsxs(C,{sx:{p:3,textAlign:"center"},children:[e.jsx(re,{sx:{fontSize:48,color:"primary.main",mb:2}}),e.jsx(i,{variant:"h6",fontWeight:600,gutterBottom:!0,children:r.name}),e.jsx(i,{variant:"body2",color:"text.secondary",sx:{mb:2},children:Y(r.readme)}),e.jsx($,{variant:"contained",color:"secondary",endIcon:e.jsx(te,{}),fullWidth:!0,onClick:m=>n(`/${r.name}/`,m),children:"Open Project"})]})]})})}function Pe(){const r=ne();return e.jsx(he,{onClickProject:r})}export{Pe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{p as A,q as S,r as u,s as I,j as a,w as g,x as M,A as y,F as R,H as V,J as w,K as q,c as E,L as H,O as T,Q as J,T as O,U as K,B as f,V as Q,e as D,l as k,X}from"./index-D2hrtqN7.js";import{f as Y}from"./index.es20-7LPyahVV.js";import{C as j}from"./Chip-CzV-d1RE.js";import{C as Z}from"./Container-Dg_Kf31J.js";function _(r){return A("MuiAppBar",r)}S("MuiAppBar",["root","positionFixed","positionAbsolute","positionSticky","positionStatic","positionRelative","colorDefault","colorPrimary","colorSecondary","colorInherit","colorTransparent","colorError","colorInfo","colorSuccess","colorWarning"]);const rr=r=>{const{color:o,position:e,classes:s}=r,t={root:["root",`color${y(o)}`,`position${y(e)}`]};return R(t,_,s)},U=(r,o)=>r?`${r?.replace(")","")}, ${o})`:o,or=g(V,{name:"MuiAppBar",slot:"Root",overridesResolver:(r,o)=>{const{ownerState:e}=r;return[o.root,o[`position${y(e.position)}`],o[`color${y(e.color)}`]]}})(w(({theme:r})=>({display:"flex",flexDirection:"column",width:"100%",boxSizing:"border-box",flexShrink:0,variants:[{props:{position:"fixed"},style:{position:"fixed",zIndex:(r.vars||r).zIndex.appBar,top:0,left:"auto",right:0,"@media print":{position:"absolute"}}},{props:{position:"absolute"},style:{position:"absolute",zIndex:(r.vars||r).zIndex.appBar,top:0,left:"auto",right:0}},{props:{position:"sticky"},style:{position:"sticky",zIndex:(r.vars||r).zIndex.appBar,top:0,left:"auto",right:0}},{props:{position:"static"},style:{position:"static"}},{props:{position:"relative"},style:{position:"relative"}},{props:{color:"inherit"},style:{"--AppBar-color":"inherit"}},{props:{color:"default"},style:{"--AppBar-background":r.vars?r.vars.palette.AppBar.defaultBg:r.palette.grey[100],"--AppBar-color":r.vars?r.vars.palette.text.primary:r.palette.getContrastText(r.palette.grey[100]),...r.applyStyles("dark",{"--AppBar-background":r.vars?r.vars.palette.AppBar.defaultBg:r.palette.grey[900],"--AppBar-color":r.vars?r.vars.palette.text.primary:r.palette.getContrastText(r.palette.grey[900])})}},...Object.entries(r.palette).filter(q(["contrastText"])).map(([o])=>({props:{color:o},style:{"--AppBar-background":(r.vars??r).palette[o].main,"--AppBar-color":(r.vars??r).palette[o].contrastText}})),{props:o=>o.enableColorOnDark===!0&&!["inherit","transparent"].includes(o.color),style:{backgroundColor:"var(--AppBar-background)",color:"var(--AppBar-color)"}},{props:o=>o.enableColorOnDark===!1&&!["inherit","transparent"].includes(o.color),style:{backgroundColor:"var(--AppBar-background)",color:"var(--AppBar-color)",...r.applyStyles("dark",{backgroundColor:r.vars?U(r.vars.palette.AppBar.darkBg,"var(--AppBar-background)"):null,color:r.vars?U(r.vars.palette.AppBar.darkColor,"var(--AppBar-color)"):null})}},{props:{color:"transparent"},style:{"--AppBar-background":"transparent","--AppBar-color":"inherit",backgroundColor:"var(--AppBar-background)",color:"var(--AppBar-color)",...r.applyStyles("dark",{backgroundImage:"none"})}}]}))),ar=u.forwardRef(function(o,e){const s=I({props:o,name:"MuiAppBar"}),{className:t,color:n="primary",enableColorOnDark:i=!1,position:c="fixed",...x}=s,p={...s,color:n,position:c,enableColorOnDark:i},d=rr(p);return a.jsx(or,{square:!0,component:"header",ownerState:p,elevation:4,className:M(d.root,t,c==="fixed"&&"mui-fixed"),ref:e,...x})}),er=E(a.jsx("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})),sr=g(H,{name:"MuiBreadcrumbCollapsed"})(w(({theme:r})=>({display:"flex",marginLeft:`calc(${r.spacing(1)} * 0.5)`,marginRight:`calc(${r.spacing(1)} * 0.5)`,...r.palette.mode==="light"?{backgroundColor:r.palette.grey[100],color:r.palette.grey[700]}:{backgroundColor:r.palette.grey[700],color:r.palette.grey[100]},borderRadius:2,"&:hover, &:focus":{...r.palette.mode==="light"?{backgroundColor:r.palette.grey[200]}:{backgroundColor:r.palette.grey[600]}},"&:active":{boxShadow:r.shadows[0],...r.palette.mode==="light"?{backgroundColor:T(r.palette.grey[200],.12)}:{backgroundColor:T(r.palette.grey[600],.12)}}}))),tr=g(er)({width:24,height:16});function lr(r){const{slots:o={},slotProps:e={},...s}=r,t=r;return a.jsx("li",{children:a.jsx(sr,{focusRipple:!0,...s,ownerState:t,children:a.jsx(tr,{as:o.CollapsedIcon,ownerState:t,...e.collapsedIcon})})})}function nr(r){return A("MuiBreadcrumbs",r)}const ir=S("MuiBreadcrumbs",["root","ol","li","separator"]),pr=r=>{const{classes:o}=r;return R({root:["root"],li:["li"],ol:["ol"],separator:["separator"]},nr,o)},cr=g(O,{name:"MuiBreadcrumbs",slot:"Root",overridesResolver:(r,o)=>[{[`& .${ir.li}`]:o.li},o.root]})({}),dr=g("ol",{name:"MuiBreadcrumbs",slot:"Ol"})({display:"flex",flexWrap:"wrap",alignItems:"center",padding:0,margin:0,listStyle:"none"}),ur=g("li",{name:"MuiBreadcrumbs",slot:"Separator"})({display:"flex",userSelect:"none",marginLeft:8,marginRight:8});function gr(r,o,e,s){return r.reduce((t,n,i)=>(i<r.length-1?t=t.concat(n,a.jsx(ur,{"aria-hidden":!0,className:o,ownerState:s,children:e},`separator-${i}`)):t.push(n),t),[])}const xr=u.forwardRef(function(o,e){const s=I({props:o,name:"MuiBreadcrumbs"}),{children:t,className:n,component:i="nav",slots:c={},slotProps:x={},expandText:p="Show path",itemsAfterCollapse:d=1,itemsBeforeCollapse:B=1,maxItems:v=8,separator:z="/",...W}=s,[N,L]=u.useState(!1),b={...s,component:i,expanded:N,expandText:p,itemsAfterCollapse:d,itemsBeforeCollapse:B,maxItems:v,separator:z},m=pr(b),F=J({elementType:c.CollapsedIcon,externalSlotProps:x.collapsedIcon,ownerState:b}),$=u.useRef(null),G=l=>{const C=()=>{L(!0);const P=$.current.querySelector("a[href],button,[tabindex]");P&&P.focus()};return B+d>=l.length?l:[...l.slice(0,B),a.jsx(lr,{"aria-label":p,slots:{CollapsedIcon:c.CollapsedIcon},slotProps:{collapsedIcon:F},onClick:C},"ellipsis"),...l.slice(l.length-d,l.length)]},h=u.Children.toArray(t).filter(l=>u.isValidElement(l)).map((l,C)=>a.jsx("li",{className:m.li,children:l},`child-${C}`));return a.jsx(cr,{ref:e,component:i,color:"textSecondary",className:M(m.root,n),ownerState:b,...W,children:a.jsx(dr,{className:m.ol,ref:$,ownerState:b,children:gr(N||v&&h.length<=v?h:G(h),m.separator,z,b)})})});function br(r){return A("MuiToolbar",r)}S("MuiToolbar",["root","gutters","regular","dense"]);const fr=r=>{const{classes:o,disableGutters:e,variant:s}=r;return R({root:["root",!e&&"gutters",s]},br,o)},mr=g("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(r,o)=>{const{ownerState:e}=r;return[o.root,!e.disableGutters&&o.gutters,o[e.variant]]}})(w(({theme:r})=>({position:"relative",display:"flex",alignItems:"center",variants:[{props:({ownerState:o})=>!o.disableGutters,style:{paddingLeft:r.spacing(2),paddingRight:r.spacing(2),[r.breakpoints.up("sm")]:{paddingLeft:r.spacing(3),paddingRight:r.spacing(3)}}},{props:{variant:"dense"},style:{minHeight:48}},{props:{variant:"regular"},style:r.mixins.toolbar}]}))),yr=u.forwardRef(function(o,e){const s=I({props:o,name:"MuiToolbar"}),{className:t,component:n="div",disableGutters:i=!1,variant:c="regular",...x}=s,p={...s,component:n,disableGutters:i,variant:c},d=fr(p);return a.jsx(mr,{as:n,className:M(d.root,t),ref:e,ownerState:p,...x})}),Br=E(a.jsx("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}));function vr(){const r=K(),o=r["*"],e=Y();return a.jsx(f,{sx:{display:"flex",alignItems:"center"},children:a.jsxs(xr,{"aria-label":"breadcrumb",separator:a.jsx(Br,{sx:{fontSize:14,color:"text.secondary"}}),sx:{"& .MuiBreadcrumbs-separator":{margin:"0 6px"}},children:[r.projectName&&a.jsx(j,{onClick:s=>e(`/${r.projectName}/`,s),label:r.projectName,size:"medium",sx:{backgroundColor:"white",color:"primary.main",fontWeight:500,height:"32px",fontSize:"1rem",cursor:"pointer","&:hover":{backgroundColor:"primary.100"}}}),r.packageName&&a.jsx(j,{onClick:s=>e(`/${r.projectName}/${r.packageName}/`,s),label:r.packageName,size:"medium",sx:{backgroundColor:"white",color:"primary.main",fontWeight:500,height:"32px",fontSize:"1rem",cursor:"pointer","&:hover":{backgroundColor:"secondary.100"}}}),o&&a.jsx(j,{onClick:s=>e(`/${r.projectName}/${r.packageName}/${o}`,s),label:o,size:"medium",sx:{backgroundColor:"white",color:"primary.main",fontWeight:500,height:"32px",fontSize:"1rem",cursor:"pointer","&:hover":{backgroundColor:"grey.200"}}})]})})}function hr({logoHeader:r,endCap:o}){const e=Q();return a.jsx(ar,{position:"sticky",elevation:0,sx:{backgroundColor:"background.paper",borderBottom:"1px solid",borderColor:"divider"},children:a.jsxs(yr,{sx:{justifyContent:"space-between"},children:[a.jsxs(D,{direction:"row",spacing:2,alignItems:"center",children:[r||a.jsxs(f,{sx:{display:"flex",alignItems:"center",gap:1},children:[a.jsx(f,{component:"img",src:"/logo.svg",alt:"Malloy",sx:{width:28,height:28}}),a.jsx(O,{variant:"h5",sx:{color:"text.primary",fontWeight:700,letterSpacing:"-0.025em",cursor:"pointer"},onClick:()=>{e("/")},children:"Malloy Publisher"})]}),a.jsx(vr,{})]}),a.jsxs(D,{direction:"row",spacing:2,alignItems:"center",children:[!r&&a.jsxs(a.Fragment,{children:[a.jsx(k,{href:"https://docs.malloydata.dev/documentation/",children:"Malloy Docs"}),a.jsx(k,{href:"https://github.com/malloydata/publisher/blob/main/README.md",children:"Publisher Docs"}),a.jsx(k,{href:"/api-doc.html",children:"Publisher API"})]}),o]})]})})}function Sr({headerProps:r}){return a.jsxs(f,{sx:{display:"flex",flexDirection:"column",minHeight:"100vh"},children:[a.jsx(hr,{...r}),a.jsx(Z,{maxWidth:"xl",component:"main",sx:{flex:1,display:"flex",flexDirection:"column",py:2,gap:2},children:a.jsx(f,{sx:{flex:1},children:a.jsx(X,{})})})]})}export{Sr as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{x as K,q as J,p as Q,r as l,a9 as xe,aa as Ce,j as N,az as te,w as j,H as Fe,s as se,a7 as B,aE as De,F as ne,aX as Se,Q as Ne,a8 as Me,L as ze,J as Ae,ab as _}from"./index-D2hrtqN7.js";import{b as He,a as Ke,L as fe,l as me,d as ge}from"./listItemTextClasses-st6hnk8F.js";import{g as je,o as oe,M as Ue}from"./Modal-BKeOa8cn.js";function We(e,t=166){let o;function i(...h){const p=()=>{e.apply(this,h)};clearTimeout(o),o=setTimeout(p,t)}return i.clear=()=>{clearTimeout(o)},i}function Be(e,t){const o=e.charCodeAt(2);return e[0]==="o"&&e[1]==="n"&&o>=65&&o<=90&&typeof t=="function"}function Ve(e,t){if(!e)return t;function o(a,s){const n={};return Object.keys(s).forEach(y=>{Be(y,s[y])&&typeof a[y]=="function"&&(n[y]=(...C)=>{a[y](...C),s[y](...C)})}),n}if(typeof e=="function"||typeof t=="function")return a=>{const s=typeof t=="function"?t(a):t,n=typeof e=="function"?e({...a,...s}):e,y=K(a?.className,s?.className,n?.className),C=o(n,s);return{...s,...n,...C,...!!y&&{className:y},...s?.style&&n?.style&&{style:{...s.style,...n.style}},...s?.sx&&n?.sx&&{sx:[...Array.isArray(s.sx)?s.sx:[s.sx],...Array.isArray(n.sx)?n.sx:[n.sx]]}}};const i=t,h=o(e,i),p=K(i?.className,e?.className);return{...t,...e,...h,...!!p&&{className:p},...i?.style&&e?.style&&{style:{...i.style,...e.style}},...i?.sx&&e?.sx&&{sx:[...Array.isArray(i.sx)?i.sx:[i.sx],...Array.isArray(e.sx)?e.sx:[e.sx]]}}}function pt(e){return Q("MuiListItemIcon",e)}const ye=J("MuiListItemIcon",["root","alignItemsFlexStart"]);function ee(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function he(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function we(e,t){if(t===void 0)return!0;let o=e.innerText;return o===void 0&&(o=e.textContent),o=o.trim().toLowerCase(),o.length===0?!1:t.repeating?o[0]===t.keys[0]:o.startsWith(t.keys.join(""))}function U(e,t,o,i,h,p){let a=!1,s=h(e,t,t?o:!1);for(;s;){if(s===e.firstChild){if(a)return!1;a=!0}const n=i?!1:s.disabled||s.getAttribute("aria-disabled")==="true";if(!s.hasAttribute("tabindex")||!we(s,p)||n)s=h(e,s,o);else return s.focus(),!0}return!1}const Ge=l.forwardRef(function(t,o){const{actions:i,autoFocus:h=!1,autoFocusItem:p=!1,children:a,className:s,disabledItemsFocusable:n=!1,disableListWrap:y=!1,onKeyDown:C,variant:k="selectedMenu",...D}=t,d=l.useRef(null),v=l.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});xe(()=>{h&&d.current.focus()},[h]),l.useImperativeHandle(i,()=>({adjustStyleForScrollbar:(r,{direction:u})=>{const f=!d.current.style.width;if(r.clientHeight<d.current.clientHeight&&f){const I=`${je(oe(r))}px`;d.current.style[u==="rtl"?"paddingLeft":"paddingRight"]=I,d.current.style.width=`calc(100% + ${I})`}return d.current}}),[]);const L=r=>{const u=d.current,f=r.key;if(r.ctrlKey||r.metaKey||r.altKey){C&&C(r);return}const $=te(u).activeElement;if(f==="ArrowDown")r.preventDefault(),U(u,$,y,n,ee);else if(f==="ArrowUp")r.preventDefault(),U(u,$,y,n,he);else if(f==="Home")r.preventDefault(),U(u,null,y,n,ee);else if(f==="End")r.preventDefault(),U(u,null,y,n,he);else if(f.length===1){const m=v.current,O=f.toLowerCase(),z=performance.now();m.keys.length>0&&(z-m.lastTime>500?(m.keys=[],m.repeating=!0,m.previousKeyMatched=!0):m.repeating&&O!==m.keys[0]&&(m.repeating=!1)),m.lastTime=z,m.keys.push(O);const F=$&&!m.repeating&&we($,m);m.previousKeyMatched&&(F||U(u,$,!1,n,ee,m))?r.preventDefault():m.previousKeyMatched=!1}C&&C(r)},w=Ce(d,o);let c=-1;l.Children.forEach(a,(r,u)=>{if(!l.isValidElement(r)){c===u&&(c+=1,c>=a.length&&(c=-1));return}r.props.disabled||(k==="selectedMenu"&&r.props.selected||c===-1)&&(c=u),c===u&&(r.props.disabled||r.props.muiSkipListHighlight||r.type.muiSkipListHighlight)&&(c+=1,c>=a.length&&(c=-1))});const P=l.Children.map(a,(r,u)=>{if(u===c){const f={};return p&&(f.autoFocus=!0),r.props.tabIndex===void 0&&k==="selectedMenu"&&(f.tabIndex=0),l.cloneElement(r,f)}return r});return N.jsx(He,{role:"menu",ref:w,className:s,onKeyDown:L,tabIndex:h?0:-1,...D,children:P})});function Xe(e){return Q("MuiPopover",e)}J("MuiPopover",["root","paper"]);function be(e,t){let o=0;return typeof t=="number"?o=t:t==="center"?o=e.height/2:t==="bottom"&&(o=e.height),o}function ve(e,t){let o=0;return typeof t=="number"?o=t:t==="center"?o=e.width/2:t==="right"&&(o=e.width),o}function Pe(e){return[e.horizontal,e.vertical].map(t=>typeof t=="number"?`${t}px`:t).join(" ")}function q(e){return typeof e=="function"?e():e}const _e=e=>{const{classes:t}=e;return ne({root:["root"],paper:["paper"]},Xe,t)},qe=j(Ue,{name:"MuiPopover",slot:"Root"})({}),Ie=j(Fe,{name:"MuiPopover",slot:"Paper"})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),Je=l.forwardRef(function(t,o){const i=se({props:t,name:"MuiPopover"}),{action:h,anchorEl:p,anchorOrigin:a={vertical:"top",horizontal:"left"},anchorPosition:s,anchorReference:n="anchorEl",children:y,className:C,container:k,elevation:D=8,marginThreshold:d=16,open:v,PaperProps:L={},slots:w={},slotProps:c={},transformOrigin:P={vertical:"top",horizontal:"left"},TransitionComponent:r,transitionDuration:u="auto",TransitionProps:f={},disableScrollLock:I=!1,...$}=i,m=l.useRef(),O={...i,anchorOrigin:a,anchorReference:n,elevation:D,marginThreshold:d,transformOrigin:P,TransitionComponent:r,transitionDuration:u,TransitionProps:f},z=_e(O),F=l.useCallback(()=>{if(n==="anchorPosition")return s;const g=q(p),M=(g&&g.nodeType===1?g:te(m.current).body).getBoundingClientRect();return{top:M.top+be(M,a.vertical),left:M.left+ve(M,a.horizontal)}},[p,a.horizontal,a.vertical,s,n]),S=l.useCallback(g=>({vertical:be(g,P.vertical),horizontal:ve(g,P.horizontal)}),[P.horizontal,P.vertical]),V=l.useCallback(g=>{const x={width:g.offsetWidth,height:g.offsetHeight},M=S(x);if(n==="none")return{top:null,left:null,transformOrigin:Pe(M)};const ae=F();let A=ae.top-M.vertical,H=ae.left-M.horizontal;const le=A+x.height,ce=H+x.width,ue=oe(q(p)),pe=ue.innerHeight-d,de=ue.innerWidth-d;if(d!==null&&A<d){const T=A-d;A-=T,M.vertical+=T}else if(d!==null&&le>pe){const T=le-pe;A-=T,M.vertical+=T}if(d!==null&&H<d){const T=H-d;H-=T,M.horizontal+=T}else if(ce>de){const T=ce-de;H-=T,M.horizontal+=T}return{top:`${Math.round(A)}px`,left:`${Math.round(H)}px`,transformOrigin:Pe(M)}},[p,n,F,S,d]),[Y,G]=l.useState(v),E=l.useCallback(()=>{const g=m.current;if(!g)return;const x=V(g);x.top!==null&&g.style.setProperty("top",x.top),x.left!==null&&(g.style.left=x.left),g.style.transformOrigin=x.transformOrigin,G(!0)},[V]);l.useEffect(()=>(I&&window.addEventListener("scroll",E),()=>window.removeEventListener("scroll",E)),[p,I,E]);const Z=()=>{E()},X=()=>{G(!1)};l.useEffect(()=>{v&&E()}),l.useImperativeHandle(h,()=>v?{updatePosition:()=>{E()}}:null,[v,E]),l.useEffect(()=>{if(!v)return;const g=We(()=>{E()}),x=oe(q(p));return x.addEventListener("resize",g),()=>{g.clear(),x.removeEventListener("resize",g)}},[p,v,E]);let b=u;const R={slots:{transition:r,...w},slotProps:{transition:f,paper:L,...c}},[re,Ee]=B("transition",{elementType:De,externalForwardedProps:R,ownerState:O,getSlotProps:g=>({...g,onEntering:(x,M)=>{g.onEntering?.(x,M),Z()},onExited:x=>{g.onExited?.(x),X()}}),additionalProps:{appear:!0,in:v}});u==="auto"&&!re.muiSupportAuto&&(b=void 0);const Re=k||(p?te(q(p)).body:void 0),[ie,{slots:Te,slotProps:ke,...Oe}]=B("root",{ref:o,elementType:qe,externalForwardedProps:{...R,...$},shouldForwardComponentProp:!0,additionalProps:{slots:{backdrop:w.backdrop},slotProps:{backdrop:Ve(typeof c.backdrop=="function"?c.backdrop(O):c.backdrop,{invisible:!0})},container:Re,open:v},ownerState:O,className:K(z.root,C)}),[Le,$e]=B("paper",{ref:m,className:z.paper,elementType:Ie,externalForwardedProps:R,shouldForwardComponentProp:!0,additionalProps:{elevation:D,style:Y?void 0:{opacity:0}},ownerState:O});return N.jsx(ie,{...Oe,...!Ke(ie)&&{slots:Te,slotProps:ke,disableScrollLock:I},children:N.jsx(re,{...Ee,timeout:b,children:N.jsx(Le,{...$e,children:y})})})});function Qe(e){return Q("MuiMenu",e)}J("MuiMenu",["root","paper","list"]);const Ye={vertical:"top",horizontal:"right"},Ze={vertical:"top",horizontal:"left"},et=e=>{const{classes:t}=e;return ne({root:["root"],paper:["paper"],list:["list"]},Qe,t)},tt=j(Je,{shouldForwardProp:e=>Me(e)||e==="classes",name:"MuiMenu",slot:"Root"})({}),ot=j(Ie,{name:"MuiMenu",slot:"Paper"})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),st=j(Ge,{name:"MuiMenu",slot:"List"})({outline:0}),dt=l.forwardRef(function(t,o){const i=se({props:t,name:"MuiMenu"}),{autoFocus:h=!0,children:p,className:a,disableAutoFocusItem:s=!1,MenuListProps:n={},onClose:y,open:C,PaperProps:k={},PopoverClasses:D,transitionDuration:d="auto",TransitionProps:{onEntering:v,...L}={},variant:w="selectedMenu",slots:c={},slotProps:P={},...r}=i,u=Se(),f={...i,autoFocus:h,disableAutoFocusItem:s,MenuListProps:n,onEntering:v,PaperProps:k,transitionDuration:d,TransitionProps:L,variant:w},I=et(f),$=h&&!s&&C,m=l.useRef(null),O=(b,R)=>{m.current&&m.current.adjustStyleForScrollbar(b,{direction:u?"rtl":"ltr"}),v&&v(b,R)},z=b=>{b.key==="Tab"&&(b.preventDefault(),y&&y(b,"tabKeyDown"))};let F=-1;l.Children.map(p,(b,R)=>{l.isValidElement(b)&&(b.props.disabled||(w==="selectedMenu"&&b.props.selected||F===-1)&&(F=R))});const S={slots:c,slotProps:{list:n,transition:L,paper:k,...P}},V=Ne({elementType:c.root,externalSlotProps:P.root,ownerState:f,className:[I.root,a]}),[Y,G]=B("paper",{className:I.paper,elementType:ot,externalForwardedProps:S,shouldForwardComponentProp:!0,ownerState:f}),[E,Z]=B("list",{className:K(I.list,n.className),elementType:st,shouldForwardComponentProp:!0,externalForwardedProps:S,getSlotProps:b=>({...b,onKeyDown:R=>{z(R),b.onKeyDown?.(R)}}),ownerState:f}),X=typeof S.slotProps.transition=="function"?S.slotProps.transition(f):S.slotProps.transition;return N.jsx(tt,{onClose:y,anchorOrigin:{vertical:"bottom",horizontal:u?"right":"left"},transformOrigin:u?Ye:Ze,slots:{root:c.root,paper:Y,backdrop:c.backdrop,...c.transition&&{transition:c.transition}},slotProps:{root:V,paper:G,backdrop:typeof P.backdrop=="function"?P.backdrop(f):P.backdrop,transition:{...X,onEntering:(...b)=>{O(...b),X?.onEntering?.(...b)}}},open:C,ref:o,transitionDuration:d,ownerState:f,...r,classes:D,children:N.jsx(E,{actions:m,autoFocus:h&&(F===-1||s),autoFocusItem:$,variant:w,...Z,children:p})})});function nt(e){return Q("MuiMenuItem",e)}const W=J("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]),rt=(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,o.divider&&t.divider,!o.disableGutters&&t.gutters]},it=e=>{const{disabled:t,dense:o,divider:i,disableGutters:h,selected:p,classes:a}=e,n=ne({root:["root",o&&"dense",t&&"disabled",!h&&"gutters",i&&"divider",p&&"selected"]},nt,a);return{...a,...n}},at=j(ze,{shouldForwardProp:e=>Me(e)||e==="classes",name:"MuiMenuItem",slot:"Root",overridesResolver:rt})(Ae(({theme:e})=>({...e.typography.body1,display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap","&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${W.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:_(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${W.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:_(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${W.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:_(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:_(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${W.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${W.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${ge.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${ge.inset}`]:{marginLeft:52},[`& .${me.root}`]:{marginTop:0,marginBottom:0},[`& .${me.inset}`]:{paddingLeft:36},[`& .${ye.root}`]:{minWidth:36},variants:[{props:({ownerState:t})=>!t.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:t})=>t.divider,style:{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"}},{props:({ownerState:t})=>!t.dense,style:{[e.breakpoints.up("sm")]:{minHeight:"auto"}}},{props:({ownerState:t})=>t.dense,style:{minHeight:32,paddingTop:4,paddingBottom:4,...e.typography.body2,[`& .${ye.root} svg`]:{fontSize:"1.25rem"}}}]}))),ft=l.forwardRef(function(t,o){const i=se({props:t,name:"MuiMenuItem"}),{autoFocus:h=!1,component:p="li",dense:a=!1,divider:s=!1,disableGutters:n=!1,focusVisibleClassName:y,role:C="menuitem",tabIndex:k,className:D,...d}=i,v=l.useContext(fe),L=l.useMemo(()=>({dense:a||v.dense||!1,disableGutters:n}),[v.dense,a,n]),w=l.useRef(null);xe(()=>{h&&w.current&&w.current.focus()},[h]);const c={...i,dense:L.dense,divider:s,disableGutters:n},P=it(i),r=Ce(w,o);let u;return i.disabled||(u=k!==void 0?k:-1),N.jsx(fe.Provider,{value:L,children:N.jsx(at,{ref:r,role:C,tabIndex:u,component:p,focusVisibleClassName:K(P.focusVisible,y),className:K(P.root,D),...d,ownerState:c,classes:P})})});export{ft as M,dt as a,pt as g};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,s as I,j as r,w as p,x,F as f,J as g,c as u}from"./index-D2hrtqN7.js";import{g as L}from"./MenuItem-Ct1Eq8uZ.js";import{L as d}from"./listItemTextClasses-st6hnk8F.js";const v=t=>{const{alignItems:s,classes:o}=t;return f({root:["root",s==="flex-start"&&"alignItemsFlexStart"]},L,o)},S=p("div",{name:"MuiListItemIcon",slot:"Root",overridesResolver:(t,s)=>{const{ownerState:o}=t;return[s.root,o.alignItems==="flex-start"&&s.alignItemsFlexStart]}})(g(({theme:t})=>({minWidth:56,color:(t.vars||t).palette.action.active,flexShrink:0,display:"inline-flex",variants:[{props:{alignItems:"flex-start"},style:{marginTop:8}}]}))),j=n.forwardRef(function(s,o){const e=I({props:s,name:"MuiListItemIcon"}),{className:i,...c}=e,l=n.useContext(d),a={...e,alignItems:l.alignItems},m=v(a);return r.jsx(S,{className:x(m.root,i),ownerState:a,ref:o,...c})}),w=u(r.jsx("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}));export{w as A,j as L};
|