@malloy-publisher/server 0.0.113 → 0.0.115
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/api-doc.yaml +621 -350
- package/dist/app/assets/{Chip-BPFN-2iK.js → Chip-Dnjptjx_.js} +1 -1
- package/dist/app/assets/{Container-S_LHoTtj.js → Container-DkO95q-4.js} +1 -1
- package/dist/app/assets/{DialogTitle-BoaRUY5e.js → DialogTitle-CxFBjEhG.js} +1 -1
- package/dist/app/assets/{Edit-DxSFhHwr.js → Edit-RtMOPNzT.js} +1 -1
- package/dist/app/assets/FormControlContext-CQ0UyOaU.js +1 -0
- package/dist/app/assets/{HomePage-Ciykl78O.js → HomePage-R3qOQ1KM.js} +1 -1
- package/dist/app/assets/{MainPage-DQs1DLly.js → MainPage-3WQF-B84.js} +1 -1
- package/dist/app/assets/{MenuItem-CKcvMIiT.js → MenuItem-CIuBJELU.js} +1 -1
- package/dist/app/assets/{Modal-B09ILQKb.js → Modal-BkzfZV9H.js} +1 -1
- package/dist/app/assets/{ModelPage-B4pPCb_A.js → ModelPage-DcKgMUK5.js} +1 -1
- package/dist/app/assets/{MoreVert-CBj2COu2.js → MoreVert-CE4XrzBZ.js} +1 -1
- package/dist/app/assets/{PackagePage-v9ybKZsV.js → PackagePage-rqHRexK9.js} +1 -1
- package/dist/app/assets/{ProjectPage--ytNIoOY.js → ProjectPage-Dpeja96H.js} +1 -1
- package/dist/app/assets/{RouteError-DODx40fJ.js → RouteError-B_elzXbG.js} +1 -1
- package/dist/app/assets/{WorkbookPage-DEmSMCHP.js → WorkbookPage-wNC0nP-1.js} +2 -2
- package/dist/app/assets/index-CMlGQMcl.css +1 -0
- package/dist/app/assets/{index-CPPmFTED.js → index-CW4KpAGn.js} +38 -38
- package/dist/app/assets/{index-BNDPWBNi.js → index-DAUp_Rhk.js} +235 -235
- package/dist/app/assets/index-DGH620i5.js +1184 -0
- package/dist/app/assets/{index.es20-lNMjicWC.js → index.es20-DNbouiSj.js} +1 -1
- package/dist/app/assets/{index.es23-BYJIDfXQ.js → index.es23-BkzSXaI_.js} +2 -2
- package/dist/app/assets/{index.es323-Cmd8ebKW.js → index.es304-CrENfdE2.js} +1 -1
- package/dist/app/assets/{index.es324-BllQIgQd.js → index.es305-ALZNB_0P.js} +1 -1
- package/dist/app/assets/{index.es327-DhM3xEyp.js → index.es308-v-jHhg78.js} +1 -1
- package/dist/app/assets/{index.es332-Dn786pMK.js → index.es313-C9sX9eQP.js} +1 -1
- package/dist/app/assets/{index.es340-JoyRj8Ul.js → index.es321-BhOnb8US.js} +1 -1
- package/dist/app/assets/{index.es341-9uOuiCzh.js → index.es322-CESu47j5.js} +1 -1
- package/dist/app/assets/{index.es344-hoFJ9wLz.js → index.es325-B_Pq63a1.js} +1 -1
- package/dist/app/assets/{index.es348-D8pWOBN4.js → index.es329-V0H_1fHZ.js} +1 -1
- package/dist/app/assets/{index.es351-CuxSqnpe.js → index.es332-DFf4bP34.js} +1 -1
- package/dist/app/assets/{index.es354-DvlPdd_8.js → index.es335-CiVlZW4U.js} +1 -1
- package/dist/app/assets/{index.es355-CunDDQIR.js → index.es336-CQwcBYvF.js} +1 -1
- package/dist/app/assets/{index.es369-CYf8oS2b.js → index.es350-fhQtHvke.js} +1 -1
- package/dist/app/assets/{index.es370-Cbr8LiAr.js → index.es351-CeT79lHU.js} +1 -1
- package/dist/app/assets/{index.es371--q2H8od3.js → index.es352-C0iVgwlN.js} +1 -1
- package/dist/app/assets/{index.es373-BuiMQ1bX.js → index.es354-LOpOq_OY.js} +1 -1
- package/dist/app/assets/{index.es378-CkjxECEH.js → index.es359-DQgr4IMq.js} +1 -1
- package/dist/app/assets/{index.es380-C6KQCo6t.js → index.es361-Dl5czYEp.js} +1 -1
- package/dist/app/assets/{index.es381-CwHcQBsW.js → index.es362-DoAi1yx4.js} +1 -1
- package/dist/app/assets/{index.es386-FC0u_O0U.js → index.es367-E0H2xfYP.js} +1 -1
- package/dist/app/assets/{index.es387-xHeBAFPr.js → index.es368-Br2VeB3w.js} +1 -1
- package/dist/app/assets/{index.es389-BwaLxarl.js → index.es370-Creu8B6Y.js} +1 -1
- package/dist/app/assets/{index.es390-B3IQVAJV.js → index.es371-V_7wYv1m.js} +1 -1
- package/dist/app/assets/{index.es391-BwkoCHxh.js → index.es372-Bsnsw9Ay.js} +1 -1
- package/dist/app/assets/{index.es394-BPWLHcqA.js → index.es375-C71BNclw.js} +1 -1
- package/dist/app/assets/{index.es396-COP1dwQ2.js → index.es377-DNrypLci.js} +1 -1
- package/dist/app/assets/{index.es397-Ba4K4mAk.js → index.es378--t_dR8Xp.js} +1 -1
- package/dist/app/assets/{index.es398-BSYOs98v.js → index.es379-Bg_TjUoS.js} +1 -1
- package/dist/app/assets/{index.es404-DGUWv76G.js → index.es385-C0Jv713Y.js} +1 -1
- package/dist/app/assets/{index.es405-DBe4EGNb.js → index.es386-CWrdwjiF.js} +1 -1
- package/dist/app/assets/{index.es406-CFlwXxP9.js → index.es387-CZmqkd86.js} +1 -1
- package/dist/app/assets/{index.es407-DTR_lE2r.js → index.es388-C69z_WZw.js} +1 -1
- package/dist/app/assets/{index.es409-DrFr_RuK.js → index.es390-CbbyQcIk.js} +1 -1
- package/dist/app/assets/{index.es413-DaCYI7j4.js → index.es394-BeMYMBvc.js} +1 -1
- package/dist/app/assets/{index.es414-C7v51edE.js → index.es395-B2i1EAbH.js} +1 -1
- package/dist/app/assets/{index.es422-BCUhEH3B.js → index.es403-BvX0ohuZ.js} +1 -1
- package/dist/app/assets/{index.es425-BZfdHlSw.js → index.es406-POkH-quI.js} +1 -1
- package/dist/app/assets/{index.es428-BX-XuKJl.js → index.es409-DHfiUAnz.js} +1 -1
- package/dist/app/assets/{index.es431-BVtQbGWk.js → index.es412-bQvISsbk.js} +1 -1
- package/dist/app/assets/{index.es435-CzRAsM7q.js → index.es416-C7CtwCRJ.js} +1 -1
- package/dist/app/assets/{index.es437-D_UmiHxH.js → index.es418-B5hkHXr8.js} +1 -1
- package/dist/app/assets/{index.es445-Bm8V_39j.js → index.es426-BXHyjal4.js} +1 -1
- package/dist/app/assets/{index.es446-Wf2I0eqD.js → index.es427-BM_6XnyC.js} +1 -1
- package/dist/app/assets/{index.es453-Gs69FCIA.js → index.es434-DBpGJNhA.js} +1 -1
- package/dist/app/assets/{index.es454-3-JraJzM.js → index.es435-Bb1HE9Xt.js} +1 -1
- package/dist/app/assets/{index.es464-C7bC7aMW.js → index.es445-B3f0M06D.js} +1 -1
- package/dist/app/assets/{index.es468-DfkjH5vL.js → index.es449-CMglr8ti.js} +1 -1
- package/dist/app/assets/{index.es474-D78hU9hI.js → index.es455-C30KPANW.js} +1 -1
- package/dist/app/assets/{index.es479-De4o0oHW.js → index.es460-CKn3c2mr.js} +1 -1
- package/dist/app/assets/{index.es480-CLNDiA6D.js → index.es461-J5oGAc1s.js} +1 -1
- package/dist/app/assets/{index.es482-CnRcoveV.js → index.es463-Ckr015aR.js} +1 -1
- package/dist/app/assets/{index.es486-qlG5fVnA.js → index.es467-D69mlHrC.js} +1 -1
- package/dist/app/assets/{index.es488-DTMS730P.js → index.es469-C3BGVGox.js} +1 -1
- package/dist/app/assets/{index.es490-C06M4v41.js → index.es471-YOGsheo0.js} +1 -1
- package/dist/app/assets/{index.es493-BxjgJJow.js → index.es474-D1T-bslv.js} +1 -1
- package/dist/app/assets/{index.es494-DlbKs2fg.js → index.es475-C3EZ2A1a.js} +1 -1
- package/dist/app/assets/{index.es498-DalR4GX0.js → index.es479-BQsJ3Zlj.js} +1 -1
- package/dist/app/assets/{index.es500-BcWqEBYK.js → index.es481-Bc6XZnwJ.js} +1 -1
- package/dist/app/assets/{index.es507-BOX6c_Kn.js → index.es488-0uez_V7d.js} +1 -1
- package/dist/app/assets/{index.es509--wACVBhv.js → index.es490-CNos752j.js} +1 -1
- package/dist/app/assets/{index.es511-C-Y0Jtd1.js → index.es492-BMmehJ54.js} +1 -1
- package/dist/app/assets/{index.es515-RpK-kOK2.js → index.es496-BboA0KbW.js} +1 -1
- package/dist/app/assets/{index.es525-DuRYU1r6.js → index.es506-C9Z1rj4W.js} +1 -1
- package/dist/app/assets/{index.es526-DWCmcnaA.js → index.es507-DzVnVufD.js} +1 -1
- package/dist/app/assets/{index.es533-DsvhN0ks.js → index.es514-DDrMl5dV.js} +1 -1
- package/dist/app/assets/{index.es534-BGVyZEaI.js → index.es515-C5B33TrU.js} +1 -1
- package/dist/app/assets/{index.es7-Baro92Ee.js → index.es7-B111sUH2.js} +1 -1
- package/dist/app/assets/{index.modern-BPeknk47.js → index.modern-GhdSpX2l.js} +1 -1
- package/dist/app/assets/{index.umd-DgCSOv4v.js → index.umd-CEs4Lu_D.js} +1 -1
- package/dist/app/assets/{listItemTextClasses-BS6WKuj5.js → listItemTextClasses-C21Iyvgy.js} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/server.js +3473 -30
- package/package.json +2 -1
- package/src/service/connection.ts +87 -17
- package/src/service/db_utils.ts +60 -0
- package/src/service/model.ts +1 -0
- package/dist/app/assets/FormControlContext-DB8XoAZ6.js +0 -1
- package/dist/app/assets/index-BV8rQ2ml.css +0 -1
- package/dist/app/assets/index-Dd2_AgmS.js +0 -287
- /package/dist/app/assets/{index.es312-CG6Dc4jp.js → index.es293-CG6Dc4jp.js} +0 -0
- /package/dist/app/assets/{index.es320-DsBKuouk.js → index.es301-DsBKuouk.js} +0 -0
- /package/dist/app/assets/{index.es321-D_z4Izcz.js → index.es302-D_z4Izcz.js} +0 -0
- /package/dist/app/assets/{index.es322-727ZlQH0.js → index.es303-727ZlQH0.js} +0 -0
- /package/dist/app/assets/{index.es325-Dn00JSTd.js → index.es306-Dn00JSTd.js} +0 -0
- /package/dist/app/assets/{index.es326-COJ4H7py.js → index.es307-COJ4H7py.js} +0 -0
- /package/dist/app/assets/{index.es328-Bu5BbsvL.js → index.es309-Bu5BbsvL.js} +0 -0
- /package/dist/app/assets/{index.es329-7O62HKoU.js → index.es310-7O62HKoU.js} +0 -0
- /package/dist/app/assets/{index.es330-BPT9niGB.js → index.es311-BPT9niGB.js} +0 -0
- /package/dist/app/assets/{index.es331-Dhn9LcZ4.js → index.es312-Dhn9LcZ4.js} +0 -0
- /package/dist/app/assets/{index.es333-eg146-Ew.js → index.es314-eg146-Ew.js} +0 -0
- /package/dist/app/assets/{index.es334-Du268qiB.js → index.es315-Du268qiB.js} +0 -0
- /package/dist/app/assets/{index.es335-fje9CFhw.js → index.es316-fje9CFhw.js} +0 -0
- /package/dist/app/assets/{index.es336-BwXTMy5W.js → index.es317-BwXTMy5W.js} +0 -0
- /package/dist/app/assets/{index.es337-3xVqZejG.js → index.es318-3xVqZejG.js} +0 -0
- /package/dist/app/assets/{index.es338-xW4inM5L.js → index.es319-xW4inM5L.js} +0 -0
- /package/dist/app/assets/{index.es339-DHo0CJ0O.js → index.es320-DHo0CJ0O.js} +0 -0
- /package/dist/app/assets/{index.es342-C3t2pwGQ.js → index.es323-C3t2pwGQ.js} +0 -0
- /package/dist/app/assets/{index.es343-DNquZEk8.js → index.es324-DNquZEk8.js} +0 -0
- /package/dist/app/assets/{index.es345-BHOwM8T6.js → index.es326-BHOwM8T6.js} +0 -0
- /package/dist/app/assets/{index.es346-DxSadP1t.js → index.es327-DxSadP1t.js} +0 -0
- /package/dist/app/assets/{index.es347-DbXoA79R.js → index.es328-DbXoA79R.js} +0 -0
- /package/dist/app/assets/{index.es349-Bp6g37R7.js → index.es330-Bp6g37R7.js} +0 -0
- /package/dist/app/assets/{index.es350-sacFqUAJ.js → index.es331-sacFqUAJ.js} +0 -0
- /package/dist/app/assets/{index.es352-C7gG9l05.js → index.es333-C7gG9l05.js} +0 -0
- /package/dist/app/assets/{index.es353-Dsg_Bt_b.js → index.es334-Dsg_Bt_b.js} +0 -0
- /package/dist/app/assets/{index.es356-D9R-vmeu.js → index.es337-D9R-vmeu.js} +0 -0
- /package/dist/app/assets/{index.es357-BPhBrDlE.js → index.es338-BPhBrDlE.js} +0 -0
- /package/dist/app/assets/{index.es358-C-TU5hQ_.js → index.es339-C-TU5hQ_.js} +0 -0
- /package/dist/app/assets/{index.es359-DtFQj3wx.js → index.es340-DtFQj3wx.js} +0 -0
- /package/dist/app/assets/{index.es360-m2LEI-9-.js → index.es341-m2LEI-9-.js} +0 -0
- /package/dist/app/assets/{index.es361-BoXegm-a.js → index.es342-BoXegm-a.js} +0 -0
- /package/dist/app/assets/{index.es362-B9wLZaAG.js → index.es343-B9wLZaAG.js} +0 -0
- /package/dist/app/assets/{index.es363-ClGRhx96.js → index.es344-ClGRhx96.js} +0 -0
- /package/dist/app/assets/{index.es364-DEIpsLCJ.js → index.es345-DEIpsLCJ.js} +0 -0
- /package/dist/app/assets/{index.es365-BgYniUM_.js → index.es346-BgYniUM_.js} +0 -0
- /package/dist/app/assets/{index.es366-COcR7UxN.js → index.es347-COcR7UxN.js} +0 -0
- /package/dist/app/assets/{index.es367-BjQB5zDj.js → index.es348-BjQB5zDj.js} +0 -0
- /package/dist/app/assets/{index.es368-C-nORZOA.js → index.es349-C-nORZOA.js} +0 -0
- /package/dist/app/assets/{index.es372-BX77sIaO.js → index.es353-BX77sIaO.js} +0 -0
- /package/dist/app/assets/{index.es374-B-DoSBHF.js → index.es355-B-DoSBHF.js} +0 -0
- /package/dist/app/assets/{index.es375-bCA53EVm.js → index.es356-bCA53EVm.js} +0 -0
- /package/dist/app/assets/{index.es376-w-ucz2PV.js → index.es357-w-ucz2PV.js} +0 -0
- /package/dist/app/assets/{index.es377-Dayu4EKP.js → index.es358-Dayu4EKP.js} +0 -0
- /package/dist/app/assets/{index.es379-DKXYxT9g.js → index.es360-DKXYxT9g.js} +0 -0
- /package/dist/app/assets/{index.es382-DfxzS6Rs.js → index.es363-DfxzS6Rs.js} +0 -0
- /package/dist/app/assets/{index.es383-SKMF96pI.js → index.es364-SKMF96pI.js} +0 -0
- /package/dist/app/assets/{index.es384-ajMbGru0.js → index.es365-ajMbGru0.js} +0 -0
- /package/dist/app/assets/{index.es385--30QC5Em.js → index.es366--30QC5Em.js} +0 -0
- /package/dist/app/assets/{index.es388-B430Bg39.js → index.es369-B430Bg39.js} +0 -0
- /package/dist/app/assets/{index.es392-CM8KxXT1.js → index.es373-CM8KxXT1.js} +0 -0
- /package/dist/app/assets/{index.es393-B1SYOhNW.js → index.es374-B1SYOhNW.js} +0 -0
- /package/dist/app/assets/{index.es395-DkBy-JyN.js → index.es376-DkBy-JyN.js} +0 -0
- /package/dist/app/assets/{index.es399-BILxekzW.js → index.es380-BILxekzW.js} +0 -0
- /package/dist/app/assets/{index.es400-C5wWYbrZ.js → index.es381-C5wWYbrZ.js} +0 -0
- /package/dist/app/assets/{index.es401-HzYwdGDm.js → index.es382-HzYwdGDm.js} +0 -0
- /package/dist/app/assets/{index.es402-T-Tgc4AT.js → index.es383-T-Tgc4AT.js} +0 -0
- /package/dist/app/assets/{index.es403-ifBTmRxC.js → index.es384-ifBTmRxC.js} +0 -0
- /package/dist/app/assets/{index.es408-BMj5Y0dO.js → index.es389-BMj5Y0dO.js} +0 -0
- /package/dist/app/assets/{index.es410-BjABl1g7.js → index.es391-BjABl1g7.js} +0 -0
- /package/dist/app/assets/{index.es411-xI-RfyKK.js → index.es392-xI-RfyKK.js} +0 -0
- /package/dist/app/assets/{index.es412-ySlJ1b_l.js → index.es393-ySlJ1b_l.js} +0 -0
- /package/dist/app/assets/{index.es415-BQoSv7ci.js → index.es396-BQoSv7ci.js} +0 -0
- /package/dist/app/assets/{index.es416-w8dY5SsB.js → index.es397-w8dY5SsB.js} +0 -0
- /package/dist/app/assets/{index.es417-TU54ms6u.js → index.es398-TU54ms6u.js} +0 -0
- /package/dist/app/assets/{index.es418-DREVFZK8.js → index.es399-DREVFZK8.js} +0 -0
- /package/dist/app/assets/{index.es419-BfivnA6A.js → index.es400-BfivnA6A.js} +0 -0
- /package/dist/app/assets/{index.es420-P4WzXJd0.js → index.es401-P4WzXJd0.js} +0 -0
- /package/dist/app/assets/{index.es421-BAng5TT0.js → index.es402-BAng5TT0.js} +0 -0
- /package/dist/app/assets/{index.es423-B5lbUyaz.js → index.es404-B5lbUyaz.js} +0 -0
- /package/dist/app/assets/{index.es424-mebxcVVE.js → index.es405-mebxcVVE.js} +0 -0
- /package/dist/app/assets/{index.es426-XBlWyCtg.js → index.es407-XBlWyCtg.js} +0 -0
- /package/dist/app/assets/{index.es427-BfCpw3nA.js → index.es408-BfCpw3nA.js} +0 -0
- /package/dist/app/assets/{index.es429-Cc5clBb7.js → index.es410-Cc5clBb7.js} +0 -0
- /package/dist/app/assets/{index.es430-IuBKFhSY.js → index.es411-IuBKFhSY.js} +0 -0
- /package/dist/app/assets/{index.es432-Du5NY7AG.js → index.es413-Du5NY7AG.js} +0 -0
- /package/dist/app/assets/{index.es433-Bvotw-X0.js → index.es414-Bvotw-X0.js} +0 -0
- /package/dist/app/assets/{index.es434-UIAJJxZW.js → index.es415-UIAJJxZW.js} +0 -0
- /package/dist/app/assets/{index.es436-D9-PGadD.js → index.es417-D9-PGadD.js} +0 -0
- /package/dist/app/assets/{index.es438-sdHcTMYB.js → index.es419-sdHcTMYB.js} +0 -0
- /package/dist/app/assets/{index.es439-Ci6OQyBP.js → index.es420-Ci6OQyBP.js} +0 -0
- /package/dist/app/assets/{index.es440-BC5c_5Pe.js → index.es421-BC5c_5Pe.js} +0 -0
- /package/dist/app/assets/{index.es441-Tz6hzZYG.js → index.es422-Tz6hzZYG.js} +0 -0
- /package/dist/app/assets/{index.es442-DB_GagMm.js → index.es423-DB_GagMm.js} +0 -0
- /package/dist/app/assets/{index.es443-DLbgOhZU.js → index.es424-DLbgOhZU.js} +0 -0
- /package/dist/app/assets/{index.es444-B0XVJmRM.js → index.es425-B0XVJmRM.js} +0 -0
- /package/dist/app/assets/{index.es447-shcSOmrb.js → index.es428-shcSOmrb.js} +0 -0
- /package/dist/app/assets/{index.es448-D4Tzg5kh.js → index.es429-D4Tzg5kh.js} +0 -0
- /package/dist/app/assets/{index.es449-Deuh7S70.js → index.es430-Deuh7S70.js} +0 -0
- /package/dist/app/assets/{index.es450-BUEGK8hf.js → index.es431-BUEGK8hf.js} +0 -0
- /package/dist/app/assets/{index.es451-BNioltXt.js → index.es432-BNioltXt.js} +0 -0
- /package/dist/app/assets/{index.es452-JqZropPD.js → index.es433-JqZropPD.js} +0 -0
- /package/dist/app/assets/{index.es455-LKU2TuZ1.js → index.es436-LKU2TuZ1.js} +0 -0
- /package/dist/app/assets/{index.es456-BFLt1xDp.js → index.es437-BFLt1xDp.js} +0 -0
- /package/dist/app/assets/{index.es457-DKykz6zU.js → index.es438-DKykz6zU.js} +0 -0
- /package/dist/app/assets/{index.es458-B3ZDOciz.js → index.es439-B3ZDOciz.js} +0 -0
- /package/dist/app/assets/{index.es459-CSHBycmS.js → index.es440-CSHBycmS.js} +0 -0
- /package/dist/app/assets/{index.es460-BIEUsx6d.js → index.es441-BIEUsx6d.js} +0 -0
- /package/dist/app/assets/{index.es461-B48N-Iqd.js → index.es442-B48N-Iqd.js} +0 -0
- /package/dist/app/assets/{index.es462-BY-TUvya.js → index.es443-BY-TUvya.js} +0 -0
- /package/dist/app/assets/{index.es463-zocC4JxJ.js → index.es444-zocC4JxJ.js} +0 -0
- /package/dist/app/assets/{index.es465-Cza_XSSt.js → index.es446-Cza_XSSt.js} +0 -0
- /package/dist/app/assets/{index.es466-Bg-kzb6g.js → index.es447-Bg-kzb6g.js} +0 -0
- /package/dist/app/assets/{index.es467-DhUJRlN_.js → index.es448-DhUJRlN_.js} +0 -0
- /package/dist/app/assets/{index.es469-C8lEn-DE.js → index.es450-C8lEn-DE.js} +0 -0
- /package/dist/app/assets/{index.es470-DhMKtDLN.js → index.es451-DhMKtDLN.js} +0 -0
- /package/dist/app/assets/{index.es471-CwjWoCRV.js → index.es452-CwjWoCRV.js} +0 -0
- /package/dist/app/assets/{index.es472-CzouJOBO.js → index.es453-CzouJOBO.js} +0 -0
- /package/dist/app/assets/{index.es473-B1bQXN8T.js → index.es454-B1bQXN8T.js} +0 -0
- /package/dist/app/assets/{index.es475-5LuOXUq_.js → index.es456-5LuOXUq_.js} +0 -0
- /package/dist/app/assets/{index.es476-DWJ3fJO_.js → index.es457-DWJ3fJO_.js} +0 -0
- /package/dist/app/assets/{index.es477-DJlmqQ1C.js → index.es458-DJlmqQ1C.js} +0 -0
- /package/dist/app/assets/{index.es478-QhoSD0DR.js → index.es459-QhoSD0DR.js} +0 -0
- /package/dist/app/assets/{index.es481-Be6lgOlo.js → index.es462-Be6lgOlo.js} +0 -0
- /package/dist/app/assets/{index.es483-BJ4Li9vH.js → index.es464-BJ4Li9vH.js} +0 -0
- /package/dist/app/assets/{index.es484-DQVVAn-B.js → index.es465-DQVVAn-B.js} +0 -0
- /package/dist/app/assets/{index.es485-BJGe-b2p.js → index.es466-BJGe-b2p.js} +0 -0
- /package/dist/app/assets/{index.es487-BLhTXw86.js → index.es468-BLhTXw86.js} +0 -0
- /package/dist/app/assets/{index.es489-atvbtKCR.js → index.es470-atvbtKCR.js} +0 -0
- /package/dist/app/assets/{index.es491-DkLiglaE.js → index.es472-DkLiglaE.js} +0 -0
- /package/dist/app/assets/{index.es492-C1w2a3ep.js → index.es473-C1w2a3ep.js} +0 -0
- /package/dist/app/assets/{index.es495-Cf8iN4DR.js → index.es476-Cf8iN4DR.js} +0 -0
- /package/dist/app/assets/{index.es496-COK4E0Yg.js → index.es477-COK4E0Yg.js} +0 -0
- /package/dist/app/assets/{index.es497-BknIz3MU.js → index.es478-BknIz3MU.js} +0 -0
- /package/dist/app/assets/{index.es499-BeQkCIfX.js → index.es480-BeQkCIfX.js} +0 -0
- /package/dist/app/assets/{index.es501-BSxZ-RaX.js → index.es482-BSxZ-RaX.js} +0 -0
- /package/dist/app/assets/{index.es502-C7L56vO4.js → index.es483-C7L56vO4.js} +0 -0
- /package/dist/app/assets/{index.es503-CUnW07Te.js → index.es484-CUnW07Te.js} +0 -0
- /package/dist/app/assets/{index.es504-C1XDQQGZ.js → index.es485-C1XDQQGZ.js} +0 -0
- /package/dist/app/assets/{index.es505-CQjiPCtT.js → index.es486-CQjiPCtT.js} +0 -0
- /package/dist/app/assets/{index.es506-DQ1-QYvQ.js → index.es487-DQ1-QYvQ.js} +0 -0
- /package/dist/app/assets/{index.es508-BbSNqyBO.js → index.es489-BbSNqyBO.js} +0 -0
- /package/dist/app/assets/{index.es510-CB2ApiWb.js → index.es491-CB2ApiWb.js} +0 -0
- /package/dist/app/assets/{index.es512-B_m7g4N7.js → index.es493-B_m7g4N7.js} +0 -0
- /package/dist/app/assets/{index.es513-B6W0miNI.js → index.es494-B6W0miNI.js} +0 -0
- /package/dist/app/assets/{index.es514-BMR_PYu6.js → index.es495-BMR_PYu6.js} +0 -0
- /package/dist/app/assets/{index.es516-Dj6nwHGl.js → index.es497-Dj6nwHGl.js} +0 -0
- /package/dist/app/assets/{index.es517-BpWG_bgh.js → index.es498-BpWG_bgh.js} +0 -0
- /package/dist/app/assets/{index.es518-BVUVsWT6.js → index.es499-BVUVsWT6.js} +0 -0
- /package/dist/app/assets/{index.es519-CAQ2eGtk.js → index.es500-CAQ2eGtk.js} +0 -0
- /package/dist/app/assets/{index.es520-BFOHcciG.js → index.es501-BFOHcciG.js} +0 -0
- /package/dist/app/assets/{index.es521-CdO5JTpU.js → index.es502-CdO5JTpU.js} +0 -0
- /package/dist/app/assets/{index.es522-CJaU5se_.js → index.es503-CJaU5se_.js} +0 -0
- /package/dist/app/assets/{index.es523-DYoNaHQp.js → index.es504-DYoNaHQp.js} +0 -0
- /package/dist/app/assets/{index.es524-m4uW47V2.js → index.es505-m4uW47V2.js} +0 -0
- /package/dist/app/assets/{index.es527-nyqBNV6O.js → index.es508-nyqBNV6O.js} +0 -0
- /package/dist/app/assets/{index.es528-C6j12Q_x.js → index.es509-C6j12Q_x.js} +0 -0
- /package/dist/app/assets/{index.es529-7A4Fjokl.js → index.es510-7A4Fjokl.js} +0 -0
- /package/dist/app/assets/{index.es530-CB0Krxn9.js → index.es511-CB0Krxn9.js} +0 -0
- /package/dist/app/assets/{index.es531-DCE3LsBG.js → index.es512-DCE3LsBG.js} +0 -0
- /package/dist/app/assets/{index.es532-C3FkfJm5.js → index.es513-C3FkfJm5.js} +0 -0
- /package/dist/app/assets/{index.es535-CVw76BM1.js → index.es516-CVw76BM1.js} +0 -0
- /package/dist/app/assets/{index.es536-HnGAYVZD.js → index.es517-HnGAYVZD.js} +0 -0
- /package/dist/app/assets/{index.es537-BVz_zdnA.js → index.es518-BVz_zdnA.js} +0 -0
- /package/dist/app/assets/{index.es538-C3khCPGq.js → index.es519-C3khCPGq.js} +0 -0
- /package/dist/app/assets/{index.es539-D-2ljcwZ.js → index.es520-D-2ljcwZ.js} +0 -0
- /package/dist/app/assets/{index.es540-Cv9koXgw.js → index.es521-Cv9koXgw.js} +0 -0
- /package/dist/app/assets/{index.es541-CD_QflpE.js → index.es522-CD_QflpE.js} +0 -0
- /package/dist/app/assets/{index.es542-DRW-0cLl.js → index.es523-DRW-0cLl.js} +0 -0
- /package/dist/app/assets/{index.es543-C-_shW-Y.js → index.es524-C-_shW-Y.js} +0 -0
- /package/dist/app/assets/{index.es544-LGGdnPYs.js → index.es525-LGGdnPYs.js} +0 -0
- /package/dist/app/assets/{index.es545-C3mMm8J8.js → index.es526-C3mMm8J8.js} +0 -0
- /package/dist/app/assets/{index.es546-BzJJZx-M.js → index.es527-BzJJZx-M.js} +0 -0
- /package/dist/app/assets/{index.es547-BXkSAIEj.js → index.es528-BXkSAIEj.js} +0 -0
- /package/dist/app/assets/{index.es548-BgDCqdQA.js → index.es529-BgDCqdQA.js} +0 -0
- /package/dist/app/assets/{index.es549-C8M2exoo.js → index.es530-C8M2exoo.js} +0 -0
- /package/dist/app/assets/{index.es550-DHJKELXO.js → index.es531-DHJKELXO.js} +0 -0
- /package/dist/app/assets/{index.es551-Cuk6v7N8.js → index.es532-Cuk6v7N8.js} +0 -0
- /package/dist/app/assets/{index.es552-DH5Ifo-i.js → index.es533-DH5Ifo-i.js} +0 -0
- /package/dist/app/assets/{index.es553-E3gJ1_iC.js → index.es534-E3gJ1_iC.js} +0 -0
- /package/dist/app/assets/{index.es554-DAi9KRSo.js → index.es535-DAi9KRSo.js} +0 -0
- /package/dist/app/assets/{index.es555-D7oLnXFd.js → index.es536-D7oLnXFd.js} +0 -0
- /package/dist/app/assets/{index.es556-BfjtVDDH.js → index.es537-BfjtVDDH.js} +0 -0
- /package/dist/app/assets/{index.es557-DnULxvSX.js → index.es538-DnULxvSX.js} +0 -0
- /package/dist/app/assets/{index.es558-CkXjmgJE.js → index.es539-CkXjmgJE.js} +0 -0
- /package/dist/app/assets/{index.es559-CfQXZHmo.js → index.es540-CfQXZHmo.js} +0 -0
- /package/dist/app/assets/{index.es560-DWedfzmr.js → index.es541-DWedfzmr.js} +0 -0
- /package/dist/app/assets/{index.es561-DUszq2jm.js → index.es542-DUszq2jm.js} +0 -0
- /package/dist/app/assets/{index.es562-B7mTdjB0.js → index.es543-B7mTdjB0.js} +0 -0
- /package/dist/app/assets/{index.es563-D5KoaKCx.js → index.es544-D5KoaKCx.js} +0 -0
- /package/dist/app/assets/{index.es564-BfHTSMKl.js → index.es545-BfHTSMKl.js} +0 -0
- /package/dist/app/assets/{index.es565-B0m2ddpp.js → index.es546-B0m2ddpp.js} +0 -0
- /package/dist/app/assets/{index.es566-CyktbL80.js → index.es547-CyktbL80.js} +0 -0
- /package/dist/app/assets/{index.es567-Csfq5Kiy.js → index.es548-Csfq5Kiy.js} +0 -0
- /package/dist/app/assets/{index.es568-CafNBF8u.js → index.es549-CafNBF8u.js} +0 -0
- /package/dist/app/assets/{index.es569-CTRr51gU.js → index.es550-CTRr51gU.js} +0 -0
- /package/dist/app/assets/{index.es570-D4h5O-jR.js → index.es551-D4h5O-jR.js} +0 -0
- /package/dist/app/assets/{index.es571-C39BiMTA.js → index.es552-C39BiMTA.js} +0 -0
- /package/dist/app/assets/{index.es572-Ddv68eIx.js → index.es553-Ddv68eIx.js} +0 -0
- /package/dist/app/assets/{index.es573-GBQ2dnAY.js → index.es554-GBQ2dnAY.js} +0 -0
- /package/dist/app/assets/{index.es574-PoHY5YXO.js → index.es555-PoHY5YXO.js} +0 -0
- /package/dist/app/assets/{index.es575-3e1v2bzS.js → index.es556-3e1v2bzS.js} +0 -0
- /package/dist/app/assets/{index.es576-CS3Unz2-.js → index.es557-CS3Unz2-.js} +0 -0
- /package/dist/app/assets/{index.es577-bN70gL4F.js → index.es558-bN70gL4F.js} +0 -0
- /package/dist/app/assets/{index.es578-CmCqftbK.js → index.es559-CmCqftbK.js} +0 -0
- /package/dist/app/assets/{index.es579-Ds-gbosJ.js → index.es560-Ds-gbosJ.js} +0 -0
- /package/dist/app/assets/{index.es580-CjDtw9vr.js → index.es561-CjDtw9vr.js} +0 -0
- /package/dist/app/assets/{index.es581-BthQWCQV.js → index.es562-BthQWCQV.js} +0 -0
- /package/dist/app/assets/{index.es582-DqwNpetd.js → index.es563-DqwNpetd.js} +0 -0
- /package/dist/app/assets/{index.es583-Bw305WKR.js → index.es564-Bw305WKR.js} +0 -0
- /package/dist/app/assets/{index.es584-DXbdFlpD.js → index.es565-DXbdFlpD.js} +0 -0
- /package/dist/app/assets/{index.es585-L9t79GZl.js → index.es566-L9t79GZl.js} +0 -0
- /package/dist/app/assets/{index.es586-CbfX1IO0.js → index.es567-CbfX1IO0.js} +0 -0
- /package/dist/app/assets/{index.es587-DBQeEorK.js → index.es568-DBQeEorK.js} +0 -0
- /package/dist/app/assets/{index.es588-BEBZ7ncR.js → index.es569-BEBZ7ncR.js} +0 -0
- /package/dist/app/assets/{index.es589-Bkuqu6BP.js → index.es570-Bkuqu6BP.js} +0 -0
- /package/dist/app/assets/{index.es590-D0r3Knsf.js → index.es571-D0r3Knsf.js} +0 -0
- /package/dist/app/assets/{index.es591-CVO1_9PV.js → index.es572-CVO1_9PV.js} +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloy-publisher/server",
|
|
3
3
|
"description": "Malloy Publisher Server",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.115",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"malloy-publisher": "dist/server.js"
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"node-cron": "^3.0.3",
|
|
55
55
|
"recursive-readdir": "^2.2.3",
|
|
56
56
|
"simple-git": "^3.28.0",
|
|
57
|
+
"trino": "^1.1.1",
|
|
57
58
|
"uuid": "^11.0.3"
|
|
58
59
|
},
|
|
59
60
|
"devDependencies": {
|
|
@@ -50,6 +50,40 @@ export async function readConnectionConfig(
|
|
|
50
50
|
return convertConnectionsToApiConnections(connections);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
function validateAndBuildTrinoConfig(
|
|
54
|
+
trinoConfig: components["schemas"]["TrinoConnection"],
|
|
55
|
+
) {
|
|
56
|
+
if (!trinoConfig.server?.includes(trinoConfig.port?.toString() || "")) {
|
|
57
|
+
trinoConfig.server = `${trinoConfig.server}:${trinoConfig.port}`;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (trinoConfig.server?.startsWith("http://")) {
|
|
61
|
+
return {
|
|
62
|
+
server: trinoConfig.server,
|
|
63
|
+
port: trinoConfig.port,
|
|
64
|
+
catalog: trinoConfig.catalog,
|
|
65
|
+
schema: trinoConfig.schema,
|
|
66
|
+
user: trinoConfig.user,
|
|
67
|
+
};
|
|
68
|
+
} else if (
|
|
69
|
+
trinoConfig.server?.startsWith("https://") &&
|
|
70
|
+
trinoConfig.password
|
|
71
|
+
) {
|
|
72
|
+
return {
|
|
73
|
+
server: trinoConfig.server,
|
|
74
|
+
port: trinoConfig.port,
|
|
75
|
+
catalog: trinoConfig.catalog,
|
|
76
|
+
schema: trinoConfig.schema,
|
|
77
|
+
user: trinoConfig.user,
|
|
78
|
+
password: trinoConfig.password,
|
|
79
|
+
};
|
|
80
|
+
} else {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Invalid Trino connection: expected "http://server:port" (no password) or "https://server:port" (with username and password).`,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
53
87
|
export async function createConnections(
|
|
54
88
|
basePath: string,
|
|
55
89
|
defaultConnections: ApiConnection[] = [],
|
|
@@ -219,14 +253,10 @@ export async function createConnections(
|
|
|
219
253
|
if (!connection.trinoConnection) {
|
|
220
254
|
throw new Error("Trino connection configuration is missing.");
|
|
221
255
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
schema: connection.trinoConnection.schema,
|
|
227
|
-
user: connection.trinoConnection.user,
|
|
228
|
-
password: connection.trinoConnection.password,
|
|
229
|
-
};
|
|
256
|
+
|
|
257
|
+
const trinoConnectionOptions = validateAndBuildTrinoConfig(
|
|
258
|
+
connection.trinoConnection,
|
|
259
|
+
);
|
|
230
260
|
const trinoConnection = new TrinoConnection(
|
|
231
261
|
connection.name,
|
|
232
262
|
{},
|
|
@@ -460,18 +490,12 @@ export async function testConnectionConfig(
|
|
|
460
490
|
!trinoConfig.user
|
|
461
491
|
) {
|
|
462
492
|
throw new Error(
|
|
463
|
-
"Trino connection requires
|
|
493
|
+
"Trino connection requires server, port, catalog, schema, and user",
|
|
464
494
|
);
|
|
465
495
|
}
|
|
466
496
|
|
|
467
|
-
const trinoConnectionOptions =
|
|
468
|
-
|
|
469
|
-
port: trinoConfig.port,
|
|
470
|
-
catalog: trinoConfig.catalog,
|
|
471
|
-
schema: trinoConfig.schema,
|
|
472
|
-
user: trinoConfig.user,
|
|
473
|
-
password: trinoConfig.password,
|
|
474
|
-
};
|
|
497
|
+
const trinoConnectionOptions =
|
|
498
|
+
validateAndBuildTrinoConfig(trinoConfig);
|
|
475
499
|
const trinoConnection = new TrinoConnection(
|
|
476
500
|
"testConnection",
|
|
477
501
|
{},
|
|
@@ -495,6 +519,52 @@ export async function testConnectionConfig(
|
|
|
495
519
|
break;
|
|
496
520
|
}
|
|
497
521
|
|
|
522
|
+
case "mysql": {
|
|
523
|
+
if (!connectionConfig.mysqlConnection) {
|
|
524
|
+
throw new Error("MySQL connection configuration is missing.");
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
if (
|
|
528
|
+
!connectionConfig.mysqlConnection.host ||
|
|
529
|
+
!connectionConfig.mysqlConnection.port ||
|
|
530
|
+
!connectionConfig.mysqlConnection.user ||
|
|
531
|
+
!connectionConfig.mysqlConnection.password ||
|
|
532
|
+
!connectionConfig.mysqlConnection.database
|
|
533
|
+
) {
|
|
534
|
+
throw new Error(
|
|
535
|
+
"MySQL connection requires: host, port, user, password, and database",
|
|
536
|
+
);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
const mysqlConfig = connectionConfig.mysqlConnection;
|
|
540
|
+
const mysqlConnectionOptions = {
|
|
541
|
+
host: mysqlConfig.host,
|
|
542
|
+
port: mysqlConfig.port,
|
|
543
|
+
user: mysqlConfig.user,
|
|
544
|
+
password: mysqlConfig.password,
|
|
545
|
+
database: mysqlConfig.database,
|
|
546
|
+
};
|
|
547
|
+
const mysqlConnection = new MySQLConnection(
|
|
548
|
+
"testConnection",
|
|
549
|
+
mysqlConnectionOptions,
|
|
550
|
+
);
|
|
551
|
+
try {
|
|
552
|
+
await mysqlConnection.test();
|
|
553
|
+
testResult = { status: "ok" };
|
|
554
|
+
} catch (error) {
|
|
555
|
+
if (error instanceof AxiosError) {
|
|
556
|
+
logAxiosError(error);
|
|
557
|
+
} else {
|
|
558
|
+
logger.error(error);
|
|
559
|
+
}
|
|
560
|
+
testResult = {
|
|
561
|
+
status: "failed",
|
|
562
|
+
errorMessage: (error as Error).message,
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
break;
|
|
566
|
+
}
|
|
567
|
+
|
|
498
568
|
default:
|
|
499
569
|
throw new BadRequestError(
|
|
500
570
|
`Unsupported connection type: ${connectionConfig.type}`,
|
package/src/service/db_utils.ts
CHANGED
|
@@ -13,8 +13,11 @@ import {
|
|
|
13
13
|
MysqlConnection,
|
|
14
14
|
PostgresConnection,
|
|
15
15
|
SnowflakeConnection,
|
|
16
|
+
TrinoConnection,
|
|
16
17
|
} from "./model";
|
|
17
18
|
|
|
19
|
+
import { BasicAuth, Trino } from "trino-client";
|
|
20
|
+
|
|
18
21
|
type ApiSchemaName = components["schemas"]["SchemaName"];
|
|
19
22
|
|
|
20
23
|
async function getPostgresConnection(
|
|
@@ -86,6 +89,24 @@ async function getSnowflakeConnection(
|
|
|
86
89
|
});
|
|
87
90
|
}
|
|
88
91
|
|
|
92
|
+
function getTrinoClient(trinoConn: TrinoConnection) {
|
|
93
|
+
let auth: BasicAuth;
|
|
94
|
+
if (trinoConn.server?.startsWith("https://")) {
|
|
95
|
+
// HTTPS allows password authentication
|
|
96
|
+
auth = new BasicAuth(trinoConn?.user || "", trinoConn?.password || "");
|
|
97
|
+
} else {
|
|
98
|
+
// HTTP only allows username, no password for security
|
|
99
|
+
auth = new BasicAuth(trinoConn?.user || "");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return Trino.create({
|
|
103
|
+
server: trinoConn.server,
|
|
104
|
+
catalog: trinoConn.catalog,
|
|
105
|
+
schema: trinoConn.schema,
|
|
106
|
+
auth,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
89
110
|
export async function getSchemasForConnection(
|
|
90
111
|
connection: ApiConnection,
|
|
91
112
|
): Promise<ApiSchemaName[]> {
|
|
@@ -167,6 +188,27 @@ export async function getSchemasForConnection(
|
|
|
167
188
|
}
|
|
168
189
|
});
|
|
169
190
|
}
|
|
191
|
+
} else if (connection.type === "trino") {
|
|
192
|
+
if (!connection.trinoConnection) {
|
|
193
|
+
throw new Error("Trino connection is required");
|
|
194
|
+
}
|
|
195
|
+
const client = getTrinoClient(connection.trinoConnection);
|
|
196
|
+
const result = await client.query(
|
|
197
|
+
`SHOW SCHEMAS FROM ${connection.trinoConnection.catalog}`,
|
|
198
|
+
);
|
|
199
|
+
const rows: string[] = [];
|
|
200
|
+
let next = await result.next();
|
|
201
|
+
while (!next.done) {
|
|
202
|
+
if (next.value.data) {
|
|
203
|
+
rows.push(...next.value.data.map((r: string[]) => r[0]));
|
|
204
|
+
}
|
|
205
|
+
next = await result.next();
|
|
206
|
+
}
|
|
207
|
+
return rows.map((r) => ({
|
|
208
|
+
name: r,
|
|
209
|
+
isHidden: false,
|
|
210
|
+
isDefault: r === connection.trinoConnection?.schema,
|
|
211
|
+
}));
|
|
170
212
|
} else {
|
|
171
213
|
throw new Error(`Unsupported connection type: ${connection.type}`);
|
|
172
214
|
}
|
|
@@ -243,6 +285,24 @@ export async function getTablesForSchema(
|
|
|
243
285
|
}
|
|
244
286
|
});
|
|
245
287
|
}
|
|
288
|
+
} else if (connection.type === "trino") {
|
|
289
|
+
if (!connection.trinoConnection) {
|
|
290
|
+
throw new Error("Trino connection is required");
|
|
291
|
+
}
|
|
292
|
+
const client = getTrinoClient(connection.trinoConnection);
|
|
293
|
+
const result = await client.query(
|
|
294
|
+
`SHOW TABLES FROM ${connection.trinoConnection.catalog}.${schemaName}`,
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
const rows: string[] = [];
|
|
298
|
+
let next = await result.next();
|
|
299
|
+
while (!next.done) {
|
|
300
|
+
if (next.value.data) {
|
|
301
|
+
rows.push(...next.value.data.map((r: string[]) => r[0]));
|
|
302
|
+
}
|
|
303
|
+
next = await result.next();
|
|
304
|
+
}
|
|
305
|
+
return rows;
|
|
246
306
|
} else {
|
|
247
307
|
// TODO(jjs) - implement
|
|
248
308
|
return [];
|
package/src/service/model.ts
CHANGED
|
@@ -50,6 +50,7 @@ export type ApiConnection = components["schemas"]["Connection"];
|
|
|
50
50
|
export type SnowflakeConnection = components["schemas"]["SnowflakeConnection"];
|
|
51
51
|
export type PostgresConnection = components["schemas"]["PostgresConnection"];
|
|
52
52
|
export type BigqueryConnection = components["schemas"]["BigqueryConnection"];
|
|
53
|
+
export type TrinoConnection = components["schemas"]["TrinoConnection"];
|
|
53
54
|
|
|
54
55
|
const MALLOY_VERSION = malloyPackage.version;
|
|
55
56
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o}from"./index-CPPmFTED.js";const r=o.createContext(void 0);export{r as F};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@layer priority1,priority2,priority3,priority4,priority5,priority6;@layer priority1{:root,.mly16bcggl{--mly1rtpqm4:rgba(10, 19, 23, .2);--mlywmj25p:rgba(121, 82, 255, .2);--mly1f95ebd:rgba(36, 187, 94, .2);--mly1jva6ta:rgba(3, 167, 215, .2);--mly1yr7ch6:rgba(241, 244, 247, 1);--mly1bs2mf7:rgba(0, 130, 251, .2);--mlywj8cgu:rgba(11, 153, 31, .2);--mlyhsum04:rgba(226, 164, 0, .2);--mly19gk0g3:rgba(227, 25, 59, .2);--mlyrbis2b:rgba(204, 211, 219, 1);--mly1eayp21:rgba(230, 235, 239, 1);--mly1bn1nfc:rgba(37, 54, 63, 1)}:root,.mly182du4u{--mly231nev:rgba(10, 19, 23, 1);--mly1i3blw4:rgba(78, 96, 111, 1);--mly16ir2n5:rgba(164, 176, 188, 1);--mly883cce:rgba(0, 100, 224, 1);--mlyy3jzoq:rgba(255, 255, 255, 1);--mly7qnfvx:rgba(10, 19, 23, 1);--mly3ib3qi:rgba(62, 6, 151, 1);--mlyndhcph:rgba(9, 68, 31, 1);--mlykotp7t:rgba(1, 73, 117, 1);--mlyf25c1a:rgba(66, 133, 244, 1)}:root,.mlyacbved{--mly8s4nhd:rgba(10, 19, 23, 1);--mly130oqjo:rgba(78, 96, 111, 1);--mlywh4rgx:rgba(164, 176, 188, 1);--mly1gq6bli:rgba(255, 255, 255, 1);--mly1jphivy:rgba(164, 176, 188, 1);--mly6i1qgk:rgba(121, 82, 255, 1);--mly1css67u:rgba(7, 109, 41, 1);--mly1fea1fg:rgba(2, 141, 193, 1);--mlyz9tc12:rgba(233, 175, 8, 1);--mly1dryxz7:rgba(0, 100, 224, 1);--mly176ansx:rgba(13, 134, 38, 1);--mlybq1dnb:rgba(227, 25, 59, 1)}:root,.mlyugude9{--mlyiz2tia:#0064E0;--mly1nffz32:#0082FB32;--mly1mq821i:white;--mlyz6dflh:rgba(0, 0, 0, .1);--mly4a29vv:#0000000D;--mlyhoywqa:#050505;--mly1qcfjts:#A4B0BC}:root,.mly18uf1kx{--mlynfhokh:none}:root,.mly11fl7i8{--mlyvpnzvp:none}.mly10cf5cp{--mly10mhzaa:var(--mly1f95ebd)}.mlykvi9ht{--mly10mhzaa:var(--mly1jva6ta)}.mly1rve117{--mly10mhzaa:var(--mly1rtpqm4)}.mlyihc5ie{--mly10mhzaa:var(--mlywmj25p)}.mly8bgh0r{--mly13n7235:var(--mly231nev)}.mly1r5zvhd{--mly13n7235:var(--mly3ib3qi)}.mlys5r2en{--mly13n7235:var(--mlykotp7t)}.mly1u6t2w6{--mly13n7235:var(--mlyndhcph)}.mlynu5hmx{--mly1by112x:0}.mly15rdse5{--mly1hmjrsb:var(--mly8s4nhd)}.mly5xbp4t{--mly1hpdckv:var(--mly231nev)}.mly3mt86g{--mly1hpdckv:var(--mlyy3jzoq)}.mly5deeek{--mly1ltarg1:var(--mly231nev)}.mlybcavtu{--mly1ojyoay:var(--mly231nev)}.mlywis56f{--mly1ojyoay:var(--mly3ib3qi)}.mly1eg6ybj{--mly1ojyoay:var(--mlykotp7t)}.mlyy280wj{--mly1ojyoay:var(--mlyndhcph)}.mly7ouyw2{--mly5m5edj:var(--mly1i3blw4)}.mlym9y5t7{--mlynfhokh:block}.mly28fmrt{--mlynfhokh:none}.mly1bo1i26{--mlyri8z08:0}.mly1ae5hkt{--mlyvpnzvp:block}.mly11ogjb6{--mlyvpnzvp:none}.mlyf8wvcd{--mlyvygx4q:var(--mly1css67u)}.mlyrtwgpv{--mlyvygx4q:var(--mly1fea1fg)}.mly1f8soc4{--mlyvygx4q:var(--mly6i1qgk)}.mly1izbou4{--mlyvygx4q:var(--mly8s4nhd)}.mly1n5rdk7{--mlyxo3nik:var(--mly1gq6bli)}.mlypfd894{--mlyxo3nik:var(--mly8s4nhd)}@keyframes mlyqng64z-B{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.mly1z060rf:is([data-disabled]){--mly1hmjrsb:var(--mlywh4rgx)}.mly1jacekv:is([data-disabled]){--mly1ltarg1:var(--mly16ir2n5)}.mly7h4d18:is([data-disabled]){--mly5m5edj:var(--mly16ir2n5)}.mly1iu3zmn:disabled{--mly1hpdckv:var(--mly1i3blw4)}.mly13vk70h:disabled{--mly1hpdckv:var(--mlyy3jzoq)}.mly1dsjhx:disabled{--mlyxo3nik:var(--mly1gq6bli)}.mlyiv1q3g:disabled{--mlyxo3nik:var(--mlywh4rgx)}.mly1u5txqc:hover{--mly1by112x:.3}.mly1x0xcia:hover{--mlynfhokh:block}.mly1fzkygm:hover{--mlyri8z08:.3}.mly1g9of4s:hover{--mlyvpnzvp:block}.mly157rht3:hover{--mlyvpnzvp:inline-flex}}@layer priority2{.mly1o4sr5b{background:#0a1317}.mly3j5mvw{background:#d0d3d7}.mlyo6guvx,.mly17eh757{background:#fff}.mly5uxqc1{background:#0000}.mlyhcrij8{background:#0064e0}.mly1xnbgy5{background:#ccd3db}.mlygqa5hp{background:#e6ebef}.mlyzy8d55{background:#ffffff80}.mlyotlr4g{background:#fff}.mly1md70p1{background:transparent}.mlysu8s4a{background:var(--mly10mhzaa)}.mly1np9qvj{background:var(--mly1eayp21)}.mly1b4wx6v{background:var(--mly1mq821i)}.mly16o7sp0{background:var(--mly1nffz32)}.mlyzkdzjc{border:1px solid #CCD3DB}.mly2yh2zd{border:1px solid #e0e0e0}.mly8fuzfi{border:1px solid #efefef}.mly1dc9p4k{border:1px solid red}.mly27xtdb{border:1px solid rgb(239,239,239)}.mly520xni{border:1px solid rgba(204,211,219,1)}.mlyvckdp7{border:1px solid rgba(230,235,239,1)}.mlyfj9a5l{border:1px solid transparent}.mly1vspu6z{border:1px solid var(--malloy-composer-form-background,#efefef)}.mlyss3vti{border:1px solid var(--malloy-composer-form-border,#ececed)}.mlyv3vvaf{border:1px solid var(--malloy-composer-form-focus,#4285f4)}.mly15q0wj1{border:1px solid var(--malloy-composer-menu-border,#ececed)}.mly1gs6z28{border:none}.mly15r89dc{grid-area:1 / 1}.mly1ghz6dp{margin:0}.mlynfbntj{margin:5px 0}.mly16zck5j{margin:5px}.mlykib98w{margin:8px}.mly1bpp3o7{margin:auto}.mlywp4ipm{padding:0 24px 24px}.mlyehqz9p{padding:0 4px}.mly1l4tkcb{padding:0 8px 8px}.mly1717udv{padding:0}.mly1b4vry6{padding:10px 0}.mlyc7ga6q{padding:12px}.mly1tamke2{padding:16px}.mly1e41zw8{padding:1px 5px}.mlyfvt8nb{padding:2px 12px 2px 6px}.mlybsehbd{padding:2px 3px}.mlyxzb6uj{padding:2px 4px}.mly195ery5{padding:3.75px 7px}.mly1gqu590{padding:3px 10px}.mly34lxi1{padding:3px 3px 3px 10px}.mly92jh8x{padding:4px 0 8px}.mlyztvwtv{padding:4px 0}.mly1fut7tt{padding:4px 12px 12px}.mlytdwleo{padding:4px 12px}.mly9cpjcd,.mlydqdrvq{padding:4px 8px}.mlyfawy5m{padding:4px}.mly17qkr04{padding:5px 0}.mly36usyh{padding:5px 10px}.mly14odnwx{padding:5px}.mly153ncpu{padding:8px 12px}.mlye8ttls{padding:8px}.mly1bw6wve:is([data-highlighted]){background:#0000000d}.mlyamyxth:is([data-state=checked]){background:#0082fb33}.mlyejs3c0:is([data-highlighted]):is([data-state=checked]){background:#0082fb4d}.mly14hn1a8:hover{background:#0000000d}.mly1uceoyp:hover{background:#dde2e8}.mly1vdl2d1:hover{background:#0457cb}.mlywghvya:active{background:#0000001a}.mly1u4cpcs:active{background:#004cbc}.mly1cncicd:active{background:#ccd3db}}@layer priority3{.mlyllpv0l{border-bottom:1px solid #e0e0e0}.mlyv3yj8d{border-bottom:1px solid var(--malloy-color-border,#e0e0e0)}.mly1akygb0{border-color:none}.mly1y5yj0f{border-color:#0064e0}.mly10bk7bj{border-color:var(--malloy-composer-focus,#c3d7f7)}.mly17v018m{border-color:var(--mlyrbis2b)}.mly11zuszs{border-radius:0 0 10px 10px}.mly19ctu66{border-radius:0 4px 4px 0}.mlyq516e8{border-radius:10px 10px 0 0}.mly1q4ynmn{border-radius:10px}.mly4pepcl{border-radius:12px}.mly18zih8k{border-radius:3px}.mlytah5vv{border-radius:4px 0 0 4px}.mly12oqio5{border-radius:4px}.mly1f96onm{border-radius:50px}.mly1sxf85j{border-radius:5px}.mly1kogg8i{border-radius:6px}.mlyur7f20{border-radius:8px}.mly10hpsqq{border-radius:9999px}.mly1pjcqnp{border-radius:inherit}.mlyfuqftd{border-right:1px solid #C8CCD2}.mly1roky18{border-right:1px solid rgba(204,211,219,1)}.mlyng3xce{border-style:none}.mly1y0btm7{border-style:solid}.mlye536se{border-top:1px solid #e0e0e0}.mly77krkw{border-top:1px solid var(--malloy-composer-form-border,#ececec)}.mlyc342km{border-width:0}.mlymkeg23{border-width:1px}.mly3psx0u{flex:0 0 auto}.mly98rzlu{flex:1}.mly883omv{gap:10px}.mlyou54vl{gap:16px}.mly12mrbbr{gap:1px}.mly1665zp3{gap:24px}.mly195vfkc{gap:2px}.mly1ed6fcf{gap:3px}.mly1jnr06f{gap:4px}.mly1nejdyq{gap:5px}.mly167g77z{gap:8px}.mly623te4{grid-column:span 2}.mly1a80n4u{grid-column:span 3}.mly1a2a7pz{outline:none}.mlyysyzu8{overflow:auto}.mlyb3r6kr{overflow:hidden}.mly1rea2x4{overflow:visible}.mly1ku5rj1{place-items:center}.mly1hl2dhg{text-decoration:none}.mly14znju7{transition:opacity .5s ease}.mly1fxp9ov:hover{border-color:var(--malloy-composer-focus,#c3d7f7)}.mlyetl2wx:focus{border-color:#4285f4}}@layer priority4{.mly1ua5tub{-webkit-box-orient:vertical}.mly1gzmk7r{-webkit-line-clamp:3}.mly6s0dn4{align-items:center}.mlypqajaz{align-items:end}.mly1cy8zhl{align-items:flex-start}.mly7a106z{align-items:start}.mly1071x5a{align-items:top}.mly7v9bd0{animation-duration:.75s}.mlya4qsjk{animation-iteration-count:infinite}.mly8jsasv{animation-name:mlyqng64z-B}.mly1esw782{animation-timing-function:linear}.mlylp1x4z{backface-visibility:hidden}.mlygmb8sa{background-color:#e6ebef}.mly83z2og{background-color:#fff}.mly1vzefiq{background-color:#f0f6ff}.mlyy9rfsq{background-color:#e6ebef}.mly10cdfl8{background-color:#f1f4f7}.mly1gzqxud{background-color:#fff}.mly1jmk7v{background-color:#25363f}.mlyjbqb8w{background-color:transparent}.mly9nb4jr{background-color:var(--malloy-color-background,white)}.mly1jjku57{background-color:var(--malloy-composer-form-disabledBackground,#f6f6f6)}.mly6wxqrg{background-color:var(--malloy-composer-form-focusBackground,#f0f6ff)}.mly12azwz9{background-color:var(--malloy-composer-menu-background,white)}.mlyrkwa2d{background-color:var(--mly19gk0g3)}.mly1pnbjq1{background-color:var(--mly1bs2mf7)}.mly12nb83b{background-color:var(--mly1yr7ch6)}.mly1x7w6om{background-color:var(--mlyhsum04)}.mly1x3oq6j{background-color:var(--mlywj8cgu)}.mly12peec7{background-color:#fff}.mly1mwwwfo{border-collapse:collapse}.mlygbc89k{box-shadow:0 0 0 1px #ccd3db}html:not([dir=rtl]) .mlyn8fsvk{box-shadow:0 0 0 1px #0064e0 inset,0 0 0 3px #0171e34d inset}html[dir=rtl] .mlyn8fsvk{box-shadow:0 0 0 1px #0064e0 inset,0 0 0 3px #0171e34d inset}.mlybwr872{box-shadow:0 0 0 2px #0064e0}html:not([dir=rtl]) .mly1kmqopl{box-shadow:0 0 5px #0000001a,0 0 1px #0000001a}html[dir=rtl] .mly1kmqopl{box-shadow:0 0 5px #0000001a,0 0 1px #0000001a}html:not([dir=rtl]) .mly5n1uv4{box-shadow:0 1px 2px #0000001a,0 2px 12px #0000001a}html[dir=rtl] .mly5n1uv4{box-shadow:0 1px 2px #0000001a,0 2px 12px #0000001a}.mly1a3rnpv{box-shadow:0 1px 5px 1px #0000001a}html:not([dir=rtl]) .mly17fq3gk{box-shadow:0 2px 12px #0000001a,0 1px 2px #0000001a}html[dir=rtl] .mly17fq3gk{box-shadow:0 2px 12px #0000001a,0 1px 2px #0000001a}.mlyx2l43u{box-shadow:0 2px 12px 0 var(--mlyz6dflh)}.mly1gnnqk1{box-shadow:none}.mlyg48p7p{box-shadow:#0171e34d 0 0 0 3px inset}.mly9f619{box-sizing:border-box}.mlyayvuls{color:#000}.mly1aejobo{color:#0064e0}.mly1v5ugh9{color:#505050}.mly358b0h{color:#909090}.mly1e2nbdu{color:red}.mly198oq2i{color:#3e9efb!important}.mlyizdh9v{color:#5f6368}.mlykfrnou{color:#0064e0}.mlyj5j7qc{color:#647685}.mly1rs82da{color:#dde2e8}.mly183j0n7{color:#e4e6eb}.mly1dhlylr{color:#050505}.mly19co3pv{color:transparent}.mly1pc1dlx{color:var(--malloy-composer-form-foreground,#5f6368)}.mly1r0d382{color:var(--mly130oqjo)}.mly1xre2ib{color:var(--mly13n7235)}.mlywzxoxx{color:var(--mly16ir2n5)}.mly1l99qkd{color:var(--mly176ansx)}.mly1evcnq1{color:var(--mly1css67u)}.mly1tw9ct1{color:var(--mly1dryxz7)}.mly1h091fy{color:var(--mly1fea1fg)}.mly1kiansi{color:var(--mly1gq6bli)}.mly1mguc6l{color:var(--mly1hmjrsb)}.mlyaerthn{color:var(--mly1hpdckv)}.mly9dwj6z{color:var(--mly1i3blw4)}.mlyann5r3{color:var(--mly1jphivy)}.mly12lmysb{color:var(--mly1ltarg1)}.mly1ard1hs{color:var(--mly1ojyoay)}.mly1jwwhvr{color:var(--mly1qcfjts)}.mly1ue28sr{color:var(--mly231nev)}.mlyydnxy5{color:var(--mly3ib3qi)}.mly15jt5ur{color:var(--mly5m5edj)}.mly1ywypuw{color:var(--mly6i1qgk)}.mly1p68tcb{color:var(--mly8s4nhd)}.mly109d434{color:var(--mlybq1dnb)}.mly1nwq7qm{color:var(--mlyf25c1a)}.mly1q8pm5h{color:var(--mlyhoywqa)}.mlywn9h7t{color:var(--mlyvygx4q)}.mly16un6j3{color:var(--mlywh4rgx)}.mlyuk6yi3{color:var(--mlyxo3nik)}.mly7neac5{color:var(--mlyz9tc12)}.mlyt0e3qv{cursor:default}.mly7eptgl{cursor:ew-resize}.mly1ipiool{cursor:initial}.mly1ypdohk{cursor:pointer}.mly104kibb{display:-webkit-box}.mly1lliihq{display:block}.mly78zum5{display:flex}.mlyrvj5dj{display:grid}.mly1rg5ohu{display:inline-block}.mly3nfvp2{display:inline-flex}.mlywz0xwf{display:inline-grid}.mly1s85apg{display:none}.mly1vsucm1{display:var(--mlynfhokh)}.mly2b4tyj{display:var(--mlyvpnzvp)}.mlydt5ytf{flex-direction:column}.mly1q0g3np{flex-direction:row}.mly1iyjqo2{flex-grow:1}.mly2lah0s{flex-shrink:0}.mly1a02dak{flex-wrap:wrap}.mly6icuqf{font-family:sans-serif}.mly1rj5sg5{font-family:SF Pro Text,-apple-system,system-ui,sans-serif}.mly12xrqmb{font-family:var(--malloy-composer-fontFamily,sans-serif)}.mlyfifm61{font-size:12px}.mlyif65rj{font-size:14px}.mly1j61zf2{font-size:16px}.mlymhiqyu{font-size:var(--malloy-composer-fontSize,14px)}.mly64z8l9{font-size:var(--malloy-composer-menu-fontSize,14px)}.mly1j61x8r{font-style:normal}.mlyo1l8bm{font-weight:400}.mly1s688f{font-weight:600}.mly1xlr1w8,.mly117nqv4{font-weight:700}.mly1fcty0u{font-weight:400}.mly1mt1orb{grid-auto-flow:column}.mlysd5ean{grid-auto-rows:max-content}.mly15396mt{grid-template-columns:100px auto 100px}.mly52fmzj{grid-template-columns:1fr auto}.mly1g3yg12{grid-template-columns:auto 1fr auto}.mlybyjr8{grid-template-columns:auto}.mly16kridx{grid-template-columns:min-content 1fr min-content}.mlyl56j7k{justify-content:center}.mly13a6bvl{justify-content:flex-end}.mly1nhvcw1{justify-content:flex-start}.mly1rfj78v{justify-content:left}.mly1lvf691{justify-content:right}.mly1l1ennw{justify-content:space-around}.mly1qughib{justify-content:space-between}.mlylqzeqv{justify-content:start}.mly11e9jwx{leading-trim:both}.mly1gu5id8{letter-spacing:-.24px}.mly12oo3zp{letter-spacing:0}.mly1d3mw78{line-height:16px}.mly1rl49lg{line-height:2.2em}.mly1fc57z9{line-height:20px}.mly1o2sk6j{line-height:24px}.mly1vqud6w{opacity:70%}.mly1d3ksz1{opacity:var(--mly1by112x)}.mly15sj6ns{opacity:var(--mlyri8z08)}.mly47corl{pointer-events:none}.mly10l6tqk{position:absolute}.mlyixxii4{position:fixed}.mly1n2onr6{position:relative}.mly7wzq59{position:sticky}.mly2b8uid{text-align:center}.mlydpxx8g{text-align:left}.mly1vqy1sf{text-edge:cap}.mlylyipyv{text-overflow:ellipsis}.mly6mezaz{text-transform:none}.mly87ps6o{user-select:none}.mlyxymvpz{vertical-align:middle}.mly1n8ftqi{vertical-align:text-top}.mly16dsc37{vertical-align:top}.mlylshs6z{visibility:hidden}.mlynpuxes{visibility:visible}.mlyuxw1ft{white-space:nowrap}.mly126k92a{white-space:pre-wrap}.mly1so62im{will-change:transform}.mly1vvkbs{word-wrap:break-word}.mly35i7{writing-mode:sideways-lr}.mly1ja2u2z{z-index:0}.mly1vjfegm{z-index:1}.mly11uqc5h{z-index:100}.mlyhtitgo{z-index:2}.mly14vaotu:is([data-state=active]){background-color:var(--mly1bs2mf7)}.mlyqweix6:is([data-disabled]){color:var(--mly1qcfjts)}.mlyb0tsu4:is([data-state=active]){color:var(--mly883cce)}.mly5ezrf1:is([data-disabled]){cursor:not-allowed}.mly1uifvsu:is([data-state=active]){font-weight:700}.mly1s07b3s:disabled{cursor:not-allowed}.mly1haqvef:hover{background-color:#dde2e8}.mlyjg9ulk:hover{background-color:#efefef}.mlyt89l8w:hover{background-color:var(--malloy-composer-form-focusBackground,#f0f6ff)}.mlyk1j4u7:hover{background-color:var(--mly4a29vv)}.mlyk1e6ed:hover{box-shadow:#ccd3db4d 0 0 0 3px inset}.mlytw1abo:focus{background-color:#fff}}@layer priority5{.mly1ey2m1c{bottom:0}.mlyqtp20y{height:0}.mly5yr21d{height:100%}.mlypyat2d{height:100px}.mlyn866dk{height:136px}.mly1v9usgg{height:14px}.mlywrnneb{height:16.5px}.mlylup9mm{height:16px}.mlymix8c7{height:18px}.mlyjm9jq1{height:1px}.mly1m3v4wt{height:200px}.mlyk2yuxw{height:209.5px}.mly1qx5ct2{height:20px}.mlyxk0z11{height:24px}.mlyd7y6wv{height:26px}.mly1fgtraw{height:28px}.mlyc9qbxq{height:36px}.mlyng8ra{height:60px}.mlydk7pt{height:8px}.mlylo07zb{height:90px}.mlyt7dq6l{height:auto}.mly1ktj5wk{height:calc(100% - 8px)}.mlyu96u03{left:0}.mly12nagc{margin-bottom:4px}.mlyu06os2{margin-bottom:5px}.mly1e56ztr{margin-bottom:8px}.mlyj3b58b{margin-left:0}.mly1tpqehw{margin-left:12px}.mlyq1n1xh{margin-left:16px}.mly1iog12x{margin-left:4px}.mlyet2fuk{margin-left:8px}.mly1yf7rl7{margin-right:0}.mly1xmf6yo{margin-top:8px}.mly1rvw3h8{max-height:136px}.mly1hkcv85{max-height:200px}.mly1xyq3li{max-height:20em}.mlyq3t0pi{max-height:280px}.mlyuyqlj2{max-height:300px}.mly1phlbz0{max-height:400px}.mly1jcbksy{max-height:420px}.mly3d5gib{max-height:50vh}.mly1l4ul0t{max-height:75vh}.mly1kbvuzt{max-height:var(--radix-tooltip-content-available-height)}.mlyqyhut4{max-width:16.5px}.mly1pdpmub{max-width:264px}.mly1jkqq1h{max-width:280px}.mly1dc814f{max-width:350px}.mlyxc7z9f{max-width:360px}.mly1j9u4d2{max-width:400px}.mly1lr1uin{max-width:420px}.mlymcgfsh{max-width:60px}.mly14zcgw3{max-width:75vw}.mly2lwn1j{min-height:0}.mly4x6u8j{min-width:16.5px}.mlygc0pbm{min-width:1px}.mlyt4ypqs{min-width:20px}.mlyytlacd{min-width:224px}.mlylm99nl{min-width:240px}.mly2ixbly{min-width:250px}.mlyfvyar9{min-width:60px}.mly1onzeue{min-width:95px}.mly1odjw0f{overflow-y:auto}.mly18d9i69{padding-bottom:0}.mly1l90r2v{padding-bottom:16px}.mlyjkvuk6{padding-bottom:4px}.mlywib8y2{padding-bottom:8px}.mlynm25rq{padding-left:16px}.mly6wrskw{padding-left:4px}.mly163pfp{padding-left:8px}.mlymzs88n{padding-right:4px}.mlyy13l1i{padding-right:8px}.mly1nn3v0j{padding-top:2px}.mly1iorvi4{padding-top:4px}.mly123j3cw{padding-top:5px}.mly1y1aw1k{padding-top:8px}.mly1bkpikb{right:-2px}.mly3m8u43{right:0}.mly13vifvy{top:0}.mlynalus7{width:0}.mlyh8yej3{width:100%}.mlynrytzq{width:10em}.mly6jxa94{width:14px}.mly18kybhu{width:15em}.mlyjxf2f8{width:16.5px}.mly1kky2od{width:16px}.mly1xp8n7a{width:18px}.mly1i1rx1s{width:1px}.mlyw4jnvo{width:20px}.mlyvy4d1p{width:24px}.mly1f1nlb9{width:25%}.mlyqyf9gi{width:250px}.mly1hfn5x7{width:260px}.mlygd8bvy{width:28px}.mlybl57os{width:323px}.mlyxsgkw5{width:350px}.mly869kya{width:5.5em}.mly1ftt334{width:5px}.mly14rvwrp{width:600px}.mly1247r65{width:60px}.mly1xc55vz{width:8px}.mlym6i5cn{width:90%}.mly10lvyaf{width:calc(100% - 12px)}.mly1rxuhir{width:calc(100% - 22px)}.mly112rgfc{width:calc(100% - 40)}.mly1g65f5b{width:var(--radix-tooltip-trigger-width)}}@layer priority6{.mly1njml60::placeholder{color:#4e606f}}.w-md-editor-bar{position:absolute;cursor:s-resize;right:0;bottom:0;margin-top:-11px;margin-right:0;width:14px;z-index:3;height:10px;border-radius:0 0 3px;-webkit-user-select:none;user-select:none}.w-md-editor-bar svg{display:block;margin:0 auto}.w-md-editor-area{overflow:auto;border-radius:5px}.w-md-editor-text{min-height:100%;position:relative;text-align:left;white-space:pre-wrap;word-break:keep-all;overflow-wrap:break-word;box-sizing:border-box;padding:10px;margin:0;font-size:14px!important;line-height:18px!important;font-variant-ligatures:common-ligatures}.w-md-editor-text-pre,.w-md-editor-text-input,.w-md-editor-text>.w-md-editor-text-pre{margin:0;border:0;background:none;box-sizing:inherit;display:inherit;font-family:inherit;font-family:var(--md-editor-font-family)!important;font-size:inherit;font-style:inherit;font-variant-ligatures:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;tab-size:inherit;text-indent:inherit;text-rendering:inherit;text-transform:inherit;white-space:inherit;overflow-wrap:inherit;word-break:inherit;word-break:normal;padding:0}.w-md-editor-text-pre{position:relative;margin:0!important;pointer-events:none;background-color:transparent!important}.w-md-editor-text-pre>code{padding:0!important;font-family:var(--md-editor-font-family)!important;font-size:14px!important;line-height:18px!important}.w-md-editor-text-input{position:absolute;top:0;left:0;height:100%;width:100%;resize:none;color:inherit;overflow:hidden;outline:0;padding:inherit;-webkit-font-smoothing:antialiased;-webkit-text-fill-color:transparent}.w-md-editor-text-input:empty{-webkit-text-fill-color:inherit!important}.w-md-editor-text-pre,.w-md-editor-text-input{word-wrap:pre;word-break:break-word;white-space:pre-wrap}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.w-md-editor-text-input{color:transparent!important}.w-md-editor-text-input::selection{background-color:#accef7!important;color:transparent!important}}.w-md-editor-text-pre .punctuation{color:var(--color-prettylights-syntax-comment, #8b949e)!important}.w-md-editor-text-pre .token.url,.w-md-editor-text-pre .token.content{color:var(--color-prettylights-syntax-constant, #0550ae)!important}.w-md-editor-text-pre .token.title.important{color:var(--color-prettylights-syntax-markup-bold, #24292f)}.w-md-editor-text-pre .token.code-block .function{color:var(--color-prettylights-syntax-entity, #8250df)}.w-md-editor-text-pre .token.bold{font-weight:unset!important}.w-md-editor-text-pre .token.title{line-height:unset!important;font-size:unset!important;font-weight:unset!important}.w-md-editor-text-pre .token.code.keyword{color:var(--color-prettylights-syntax-constant, #0550ae)!important}.w-md-editor-text-pre .token.strike,.w-md-editor-text-pre .token.strike .content{color:var(--color-prettylights-syntax-markup-deleted-text, #82071e)!important}.w-md-editor-toolbar-child{position:absolute;border-radius:3px;box-shadow:0 0 0 1px var(--md-editor-box-shadow-color),0 0 0 var(--md-editor-box-shadow-color),0 1px 1px var(--md-editor-box-shadow-color);background-color:var(--md-editor-background-color);z-index:1;display:none}.w-md-editor-toolbar-child.active{display:block}.w-md-editor-toolbar-child .w-md-editor-toolbar{border-bottom:0;padding:3px;border-radius:3px}.w-md-editor-toolbar-child .w-md-editor-toolbar ul>li{display:block}.w-md-editor-toolbar-child .w-md-editor-toolbar ul>li button{width:-webkit-fill-available;height:initial;box-sizing:border-box;padding:3px 4px 2px;margin:0}.w-md-editor-toolbar{border-bottom:1px solid var(--md-editor-box-shadow-color);background-color:var(--md-editor-background-color);padding:3px;display:flex;justify-content:space-between;align-items:center;border-radius:3px 3px 0 0;-webkit-user-select:none;user-select:none;flex-wrap:wrap}.w-md-editor-toolbar.bottom{border-bottom:0px;border-top:1px solid var(--md-editor-box-shadow-color);border-radius:0 0 3px 3px}.w-md-editor-toolbar ul,.w-md-editor-toolbar li{margin:0;padding:0;list-style:none;line-height:initial}.w-md-editor-toolbar li{display:inline-block;font-size:14px}.w-md-editor-toolbar li+li{margin:0}.w-md-editor-toolbar li>button{border:none;height:20px;line-height:14px;background:none;padding:4px;margin:0 1px;border-radius:2px;text-transform:none;font-weight:400;overflow:visible;outline:none;cursor:pointer;transition:all .3s;white-space:nowrap;color:var(--color-fg-default)}.w-md-editor-toolbar li>button:hover,.w-md-editor-toolbar li>button:focus{background-color:var(--color-neutral-muted);color:var(--color-accent-fg)}.w-md-editor-toolbar li>button:active{background-color:var(--color-neutral-muted);color:var(--color-danger-fg)}.w-md-editor-toolbar li>button:disabled{color:var(--md-editor-box-shadow-color);cursor:not-allowed}.w-md-editor-toolbar li>button:disabled:hover{background-color:transparent;color:var(--md-editor-box-shadow-color)}.w-md-editor-toolbar li.active>button{color:var(--color-accent-fg);background-color:var(--color-neutral-muted)}.w-md-editor-toolbar-divider{height:14px;width:1px;margin:-3px 3px 0!important;vertical-align:middle;background-color:var(--md-editor-box-shadow-color)}.w-md-editor{text-align:left;border-radius:3px;padding-bottom:1px;position:relative;color:var(--color-fg-default);--md-editor-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;--md-editor-background-color: var(--color-canvas-default, #ffffff);--md-editor-box-shadow-color: var(--color-border-default, #d0d7de);box-shadow:0 0 0 1px var(--md-editor-box-shadow-color),0 0 0 var(--md-editor-box-shadow-color),0 1px 1px var(--md-editor-box-shadow-color);background-color:var(--md-editor-background-color);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:flex;flex-direction:column}.w-md-editor.w-md-editor-rtl{direction:rtl!important;text-align:right!important}.w-md-editor.w-md-editor-rtl .w-md-editor-preview{right:unset!important;left:0;text-align:right!important;box-shadow:inset -1px 0 0 0 var(--md-editor-box-shadow-color)}.w-md-editor.w-md-editor-rtl .w-md-editor-text{text-align:right!important}.w-md-editor-toolbar{height:fit-content}.w-md-editor-content{height:100%;overflow:auto;position:relative;border-radius:0 0 3px}.w-md-editor .copied{display:none!important}.w-md-editor-input{width:50%;height:100%}.w-md-editor-text-pre>code{word-break:break-word!important;white-space:pre-wrap!important}.w-md-editor-preview{width:50%;box-sizing:border-box;box-shadow:inset 1px 0 0 0 var(--md-editor-box-shadow-color);position:absolute;padding:10px 20px;overflow:auto;top:0;right:0;bottom:0;border-radius:0 0 5px;display:flex;flex-direction:column}.w-md-editor-preview .anchor{display:none}.w-md-editor-preview .contains-task-list li.task-list-item{list-style:none}.w-md-editor-show-preview .w-md-editor-input{width:0%;overflow:hidden;background-color:var(--md-editor-background-color)}.w-md-editor-show-preview .w-md-editor-preview{width:100%;box-shadow:inset 0 0}.w-md-editor-show-edit .w-md-editor-input{width:100%}.w-md-editor-show-edit .w-md-editor-preview{width:0%;padding:0}.w-md-editor-fullscreen{overflow:hidden;position:fixed;z-index:99999;inset:0;height:100%!important}.w-md-editor-fullscreen .w-md-editor-content{height:100%}@layer priority1,priority2,priority3,priority4,priority5,priority6;@layer priority1{:root,.mly16bcggl{--mly1rtpqm4:rgba(10, 19, 23, .2);--mlywmj25p:rgba(121, 82, 255, .2);--mly1f95ebd:rgba(36, 187, 94, .2);--mly1jva6ta:rgba(3, 167, 215, .2);--mly1yr7ch6:rgba(241, 244, 247, 1);--mly1bs2mf7:rgba(0, 130, 251, .2);--mlywj8cgu:rgba(11, 153, 31, .2);--mlyhsum04:rgba(226, 164, 0, .2);--mly19gk0g3:rgba(227, 25, 59, .2);--mlyrbis2b:rgba(204, 211, 219, 1);--mly1eayp21:rgba(230, 235, 239, 1);--mly1bn1nfc:rgba(37, 54, 63, 1)}:root,.mly182du4u{--mly231nev:rgba(10, 19, 23, 1);--mly1i3blw4:rgba(78, 96, 111, 1);--mly16ir2n5:rgba(164, 176, 188, 1);--mly883cce:rgba(0, 100, 224, 1);--mlyy3jzoq:rgba(255, 255, 255, 1);--mly7qnfvx:rgba(10, 19, 23, 1);--mly3ib3qi:rgba(62, 6, 151, 1);--mlyndhcph:rgba(9, 68, 31, 1);--mlykotp7t:rgba(1, 73, 117, 1);--mlyf25c1a:rgba(66, 133, 244, 1)}:root,.mlyacbved{--mly8s4nhd:rgba(10, 19, 23, 1);--mly130oqjo:rgba(78, 96, 111, 1);--mlywh4rgx:rgba(164, 176, 188, 1);--mly1gq6bli:rgba(255, 255, 255, 1);--mly1jphivy:rgba(164, 176, 188, 1);--mly6i1qgk:rgba(121, 82, 255, 1);--mly1css67u:rgba(7, 109, 41, 1);--mly1fea1fg:rgba(2, 141, 193, 1);--mlyz9tc12:rgba(233, 175, 8, 1);--mly1dryxz7:rgba(0, 100, 224, 1);--mly176ansx:rgba(13, 134, 38, 1);--mlybq1dnb:rgba(227, 25, 59, 1)}:root,.mlyugude9{--mlyiz2tia:#0064E0;--mly1nffz32:#0082FB32;--mly1mq821i:white;--mlyz6dflh:rgba(0, 0, 0, .1);--mly4a29vv:#0000000D;--mlyhoywqa:#050505;--mly1qcfjts:#A4B0BC}:root,.mly18uf1kx{--mlynfhokh:none}:root,.mly11fl7i8{--mlyvpnzvp:none}.mly10cf5cp{--mly10mhzaa:var(--mly1f95ebd)}.mlykvi9ht{--mly10mhzaa:var(--mly1jva6ta)}.mly1rve117{--mly10mhzaa:var(--mly1rtpqm4)}.mlyihc5ie{--mly10mhzaa:var(--mlywmj25p)}.mly8bgh0r{--mly13n7235:var(--mly231nev)}.mly1r5zvhd{--mly13n7235:var(--mly3ib3qi)}.mlys5r2en{--mly13n7235:var(--mlykotp7t)}.mly1u6t2w6{--mly13n7235:var(--mlyndhcph)}.mlynu5hmx{--mly1by112x:0}.mly15rdse5{--mly1hmjrsb:var(--mly8s4nhd)}.mly5xbp4t{--mly1hpdckv:var(--mly231nev)}.mly3mt86g{--mly1hpdckv:var(--mlyy3jzoq)}.mly5deeek{--mly1ltarg1:var(--mly231nev)}.mlybcavtu{--mly1ojyoay:var(--mly231nev)}.mlywis56f{--mly1ojyoay:var(--mly3ib3qi)}.mly1eg6ybj{--mly1ojyoay:var(--mlykotp7t)}.mlyy280wj{--mly1ojyoay:var(--mlyndhcph)}.mly7ouyw2{--mly5m5edj:var(--mly1i3blw4)}.mlym9y5t7{--mlynfhokh:block}.mly28fmrt{--mlynfhokh:none}.mly1bo1i26{--mlyri8z08:0}.mly1ae5hkt{--mlyvpnzvp:block}.mly11ogjb6{--mlyvpnzvp:none}.mlyf8wvcd{--mlyvygx4q:var(--mly1css67u)}.mlyrtwgpv{--mlyvygx4q:var(--mly1fea1fg)}.mly1f8soc4{--mlyvygx4q:var(--mly6i1qgk)}.mly1izbou4{--mlyvygx4q:var(--mly8s4nhd)}.mly1n5rdk7{--mlyxo3nik:var(--mly1gq6bli)}.mlypfd894{--mlyxo3nik:var(--mly8s4nhd)}@keyframes mlyqng64z-B{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.mly1z060rf:is([data-disabled]){--mly1hmjrsb:var(--mlywh4rgx)}.mly1jacekv:is([data-disabled]){--mly1ltarg1:var(--mly16ir2n5)}.mly7h4d18:is([data-disabled]){--mly5m5edj:var(--mly16ir2n5)}.mly1iu3zmn:disabled{--mly1hpdckv:var(--mly1i3blw4)}.mly13vk70h:disabled{--mly1hpdckv:var(--mlyy3jzoq)}.mly1dsjhx:disabled{--mlyxo3nik:var(--mly1gq6bli)}.mlyiv1q3g:disabled{--mlyxo3nik:var(--mlywh4rgx)}.mly1u5txqc:hover{--mly1by112x:.3}.mly1x0xcia:hover{--mlynfhokh:block}.mly1fzkygm:hover{--mlyri8z08:.3}.mly1g9of4s:hover{--mlyvpnzvp:block}.mly157rht3:hover{--mlyvpnzvp:inline-flex}}@layer priority2{.mly1o4sr5b{background:#0a1317}.mly3j5mvw{background:#d0d3d7}.mlyo6guvx,.mly17eh757{background:#fff}.mly5uxqc1{background:#0000}.mlyhcrij8{background:#0064e0}.mly1xnbgy5{background:#ccd3db}.mlygqa5hp{background:#e6ebef}.mlyzy8d55{background:#ffffff80}.mlyotlr4g{background:#fff}.mly1md70p1{background:transparent}.mlysu8s4a{background:var(--mly10mhzaa)}.mly1np9qvj{background:var(--mly1eayp21)}.mly1b4wx6v{background:var(--mly1mq821i)}.mly16o7sp0{background:var(--mly1nffz32)}.mlyzkdzjc{border:1px solid #CCD3DB}.mly2yh2zd{border:1px solid #e0e0e0}.mly8fuzfi{border:1px solid #efefef}.mly1dc9p4k{border:1px solid red}.mly27xtdb{border:1px solid rgb(239,239,239)}.mly520xni{border:1px solid rgba(204,211,219,1)}.mlyvckdp7{border:1px solid rgba(230,235,239,1)}.mlyfj9a5l{border:1px solid transparent}.mly1vspu6z{border:1px solid var(--malloy-composer-form-background,#efefef)}.mlyss3vti{border:1px solid var(--malloy-composer-form-border,#ececed)}.mlyv3vvaf{border:1px solid var(--malloy-composer-form-focus,#4285f4)}.mly15q0wj1{border:1px solid var(--malloy-composer-menu-border,#ececed)}.mly1gs6z28{border:none}.mly15r89dc{grid-area:1 / 1}.mly1ghz6dp{margin:0}.mlynfbntj{margin:5px 0}.mly16zck5j{margin:5px}.mlykib98w{margin:8px}.mly1bpp3o7{margin:auto}.mlywp4ipm{padding:0 24px 24px}.mlyehqz9p{padding:0 4px}.mly1l4tkcb{padding:0 8px 8px}.mly1717udv{padding:0}.mly1b4vry6{padding:10px 0}.mlyc7ga6q{padding:12px}.mly1tamke2{padding:16px}.mly1e41zw8{padding:1px 5px}.mlyfvt8nb{padding:2px 12px 2px 6px}.mlybsehbd{padding:2px 3px}.mlyxzb6uj{padding:2px 4px}.mly195ery5{padding:3.75px 7px}.mly1gqu590{padding:3px 10px}.mly34lxi1{padding:3px 3px 3px 10px}.mly92jh8x{padding:4px 0 8px}.mlyztvwtv{padding:4px 0}.mly1fut7tt{padding:4px 12px 12px}.mlytdwleo{padding:4px 12px}.mly9cpjcd,.mlydqdrvq{padding:4px 8px}.mlyfawy5m{padding:4px}.mly17qkr04{padding:5px 0}.mly36usyh{padding:5px 10px}.mly14odnwx{padding:5px}.mly153ncpu{padding:8px 12px}.mlye8ttls{padding:8px}.mly1bw6wve:is([data-highlighted]){background:#0000000d}.mlyamyxth:is([data-state=checked]){background:#0082fb33}.mlyejs3c0:is([data-highlighted]):is([data-state=checked]){background:#0082fb4d}.mly14hn1a8:hover{background:#0000000d}.mly1uceoyp:hover{background:#dde2e8}.mly1vdl2d1:hover{background:#0457cb}.mlywghvya:active{background:#0000001a}.mly1u4cpcs:active{background:#004cbc}.mly1cncicd:active{background:#ccd3db}}@layer priority3{.mlyllpv0l{border-bottom:1px solid #e0e0e0}.mlyv3yj8d{border-bottom:1px solid var(--malloy-color-border,#e0e0e0)}.mly1akygb0{border-color:none}.mly1y5yj0f{border-color:#0064e0}.mly10bk7bj{border-color:var(--malloy-composer-focus,#c3d7f7)}.mly17v018m{border-color:var(--mlyrbis2b)}.mly11zuszs{border-radius:0 0 10px 10px}.mly19ctu66{border-radius:0 4px 4px 0}.mlyq516e8{border-radius:10px 10px 0 0}.mly1q4ynmn{border-radius:10px}.mly4pepcl{border-radius:12px}.mly18zih8k{border-radius:3px}.mlytah5vv{border-radius:4px 0 0 4px}.mly12oqio5{border-radius:4px}.mly1f96onm{border-radius:50px}.mly1sxf85j{border-radius:5px}.mly1kogg8i{border-radius:6px}.mlyur7f20{border-radius:8px}.mly10hpsqq{border-radius:9999px}.mly1pjcqnp{border-radius:inherit}.mlyfuqftd{border-right:1px solid #C8CCD2}.mly1roky18{border-right:1px solid rgba(204,211,219,1)}.mlyng3xce{border-style:none}.mly1y0btm7{border-style:solid}.mlye536se{border-top:1px solid #e0e0e0}.mly77krkw{border-top:1px solid var(--malloy-composer-form-border,#ececec)}.mlyc342km{border-width:0}.mlymkeg23{border-width:1px}.mly3psx0u{flex:0 0 auto}.mly98rzlu{flex:1}.mly883omv{gap:10px}.mlyou54vl{gap:16px}.mly12mrbbr{gap:1px}.mly1665zp3{gap:24px}.mly195vfkc{gap:2px}.mly1ed6fcf{gap:3px}.mly1jnr06f{gap:4px}.mly1nejdyq{gap:5px}.mly167g77z{gap:8px}.mly623te4{grid-column:span 2}.mly1a80n4u{grid-column:span 3}.mly1a2a7pz{outline:none}.mlyysyzu8{overflow:auto}.mlyb3r6kr{overflow:hidden}.mly1rea2x4{overflow:visible}.mly1ku5rj1{place-items:center}.mly1hl2dhg{text-decoration:none}.mly14znju7{transition:opacity .5s ease}.mly1fxp9ov:hover{border-color:var(--malloy-composer-focus,#c3d7f7)}.mlyetl2wx:focus{border-color:#4285f4}}@layer priority4{.mly1ua5tub{-webkit-box-orient:vertical}.mly1gzmk7r{-webkit-line-clamp:3}.mly6s0dn4{align-items:center}.mlypqajaz{align-items:end}.mly1cy8zhl{align-items:flex-start}.mly7a106z{align-items:start}.mly1071x5a{align-items:top}.mly7v9bd0{animation-duration:.75s}.mlya4qsjk{animation-iteration-count:infinite}.mly8jsasv{animation-name:mlyqng64z-B}.mly1esw782{animation-timing-function:linear}.mlylp1x4z{backface-visibility:hidden}.mlygmb8sa{background-color:#e6ebef}.mly83z2og{background-color:#fff}.mly1vzefiq{background-color:#f0f6ff}.mlyy9rfsq{background-color:#e6ebef}.mly10cdfl8{background-color:#f1f4f7}.mly1gzqxud{background-color:#fff}.mly1jmk7v{background-color:#25363f}.mlyjbqb8w{background-color:transparent}.mly9nb4jr{background-color:var(--malloy-color-background,white)}.mly1jjku57{background-color:var(--malloy-composer-form-disabledBackground,#f6f6f6)}.mly6wxqrg{background-color:var(--malloy-composer-form-focusBackground,#f0f6ff)}.mly12azwz9{background-color:var(--malloy-composer-menu-background,white)}.mlyrkwa2d{background-color:var(--mly19gk0g3)}.mly1pnbjq1{background-color:var(--mly1bs2mf7)}.mly12nb83b{background-color:var(--mly1yr7ch6)}.mly1x7w6om{background-color:var(--mlyhsum04)}.mly1x3oq6j{background-color:var(--mlywj8cgu)}.mly12peec7{background-color:#fff}.mly1mwwwfo{border-collapse:collapse}.mlygbc89k{box-shadow:0 0 0 1px #ccd3db}html:not([dir=rtl]) .mlyn8fsvk{box-shadow:0 0 0 1px #0064e0 inset,0 0 0 3px #0171e34d inset}html[dir=rtl] .mlyn8fsvk{box-shadow:0 0 0 1px #0064e0 inset,0 0 0 3px #0171e34d inset}.mlybwr872{box-shadow:0 0 0 2px #0064e0}html:not([dir=rtl]) .mly1kmqopl{box-shadow:0 0 5px #0000001a,0 0 1px #0000001a}html[dir=rtl] .mly1kmqopl{box-shadow:0 0 5px #0000001a,0 0 1px #0000001a}html:not([dir=rtl]) .mly5n1uv4{box-shadow:0 1px 2px #0000001a,0 2px 12px #0000001a}html[dir=rtl] .mly5n1uv4{box-shadow:0 1px 2px #0000001a,0 2px 12px #0000001a}.mly1a3rnpv{box-shadow:0 1px 5px 1px #0000001a}html:not([dir=rtl]) .mly17fq3gk{box-shadow:0 2px 12px #0000001a,0 1px 2px #0000001a}html[dir=rtl] .mly17fq3gk{box-shadow:0 2px 12px #0000001a,0 1px 2px #0000001a}.mlyx2l43u{box-shadow:0 2px 12px 0 var(--mlyz6dflh)}.mly1gnnqk1{box-shadow:none}.mlyg48p7p{box-shadow:#0171e34d 0 0 0 3px inset}.mly9f619{box-sizing:border-box}.mlyayvuls{color:#000}.mly1aejobo{color:#0064e0}.mly1v5ugh9{color:#505050}.mly358b0h{color:#909090}.mly1e2nbdu{color:red}.mly198oq2i{color:#3e9efb!important}.mlyizdh9v{color:#5f6368}.mlykfrnou{color:#0064e0}.mlyj5j7qc{color:#647685}.mly1rs82da{color:#dde2e8}.mly183j0n7{color:#e4e6eb}.mly1dhlylr{color:#050505}.mly19co3pv{color:transparent}.mly1pc1dlx{color:var(--malloy-composer-form-foreground,#5f6368)}.mly1r0d382{color:var(--mly130oqjo)}.mly1xre2ib{color:var(--mly13n7235)}.mlywzxoxx{color:var(--mly16ir2n5)}.mly1l99qkd{color:var(--mly176ansx)}.mly1evcnq1{color:var(--mly1css67u)}.mly1tw9ct1{color:var(--mly1dryxz7)}.mly1h091fy{color:var(--mly1fea1fg)}.mly1kiansi{color:var(--mly1gq6bli)}.mly1mguc6l{color:var(--mly1hmjrsb)}.mlyaerthn{color:var(--mly1hpdckv)}.mly9dwj6z{color:var(--mly1i3blw4)}.mlyann5r3{color:var(--mly1jphivy)}.mly12lmysb{color:var(--mly1ltarg1)}.mly1ard1hs{color:var(--mly1ojyoay)}.mly1jwwhvr{color:var(--mly1qcfjts)}.mly1ue28sr{color:var(--mly231nev)}.mlyydnxy5{color:var(--mly3ib3qi)}.mly15jt5ur{color:var(--mly5m5edj)}.mly1ywypuw{color:var(--mly6i1qgk)}.mly1p68tcb{color:var(--mly8s4nhd)}.mly109d434{color:var(--mlybq1dnb)}.mly1nwq7qm{color:var(--mlyf25c1a)}.mly1q8pm5h{color:var(--mlyhoywqa)}.mlywn9h7t{color:var(--mlyvygx4q)}.mly16un6j3{color:var(--mlywh4rgx)}.mlyuk6yi3{color:var(--mlyxo3nik)}.mly7neac5{color:var(--mlyz9tc12)}.mlyt0e3qv{cursor:default}.mly7eptgl{cursor:ew-resize}.mly1ipiool{cursor:initial}.mly1ypdohk{cursor:pointer}.mly104kibb{display:-webkit-box}.mly1lliihq{display:block}.mly78zum5{display:flex}.mlyrvj5dj{display:grid}.mly1rg5ohu{display:inline-block}.mly3nfvp2{display:inline-flex}.mlywz0xwf{display:inline-grid}.mly1s85apg{display:none}.mly1vsucm1{display:var(--mlynfhokh)}.mly2b4tyj{display:var(--mlyvpnzvp)}.mlydt5ytf{flex-direction:column}.mly1q0g3np{flex-direction:row}.mly1iyjqo2{flex-grow:1}.mly2lah0s{flex-shrink:0}.mly1a02dak{flex-wrap:wrap}.mly6icuqf{font-family:sans-serif}.mly1rj5sg5{font-family:SF Pro Text,-apple-system,system-ui,sans-serif}.mly12xrqmb{font-family:var(--malloy-composer-fontFamily,sans-serif)}.mlyfifm61{font-size:12px}.mlyif65rj{font-size:14px}.mly1j61zf2{font-size:16px}.mlymhiqyu{font-size:var(--malloy-composer-fontSize,14px)}.mly64z8l9{font-size:var(--malloy-composer-menu-fontSize,14px)}.mly1j61x8r{font-style:normal}.mlyo1l8bm{font-weight:400}.mly1s688f{font-weight:600}.mly1xlr1w8,.mly117nqv4{font-weight:700}.mly1fcty0u{font-weight:400}.mly1mt1orb{grid-auto-flow:column}.mlysd5ean{grid-auto-rows:max-content}.mly15396mt{grid-template-columns:100px auto 100px}.mly52fmzj{grid-template-columns:1fr auto}.mly1g3yg12{grid-template-columns:auto 1fr auto}.mlybyjr8{grid-template-columns:auto}.mly16kridx{grid-template-columns:min-content 1fr min-content}.mlyl56j7k{justify-content:center}.mly13a6bvl{justify-content:flex-end}.mly1nhvcw1{justify-content:flex-start}.mly1rfj78v{justify-content:left}.mly1lvf691{justify-content:right}.mly1l1ennw{justify-content:space-around}.mly1qughib{justify-content:space-between}.mlylqzeqv{justify-content:start}.mly11e9jwx{leading-trim:both}.mly1gu5id8{letter-spacing:-.24px}.mly12oo3zp{letter-spacing:0}.mly1d3mw78{line-height:16px}.mly1rl49lg{line-height:2.2em}.mly1fc57z9{line-height:20px}.mly1o2sk6j{line-height:24px}.mly1vqud6w{opacity:70%}.mly1d3ksz1{opacity:var(--mly1by112x)}.mly15sj6ns{opacity:var(--mlyri8z08)}.mly47corl{pointer-events:none}.mly10l6tqk{position:absolute}.mlyixxii4{position:fixed}.mly1n2onr6{position:relative}.mly7wzq59{position:sticky}.mly2b8uid{text-align:center}.mlydpxx8g{text-align:left}.mly1vqy1sf{text-edge:cap}.mlylyipyv{text-overflow:ellipsis}.mly6mezaz{text-transform:none}.mly87ps6o{user-select:none}.mlyxymvpz{vertical-align:middle}.mly1n8ftqi{vertical-align:text-top}.mly16dsc37{vertical-align:top}.mlylshs6z{visibility:hidden}.mlynpuxes{visibility:visible}.mlyuxw1ft{white-space:nowrap}.mly126k92a{white-space:pre-wrap}.mly1so62im{will-change:transform}.mly1vvkbs{word-wrap:break-word}.mly35i7{writing-mode:sideways-lr}.mly1ja2u2z{z-index:0}.mly1vjfegm{z-index:1}.mly11uqc5h{z-index:100}.mlyhtitgo{z-index:2}.mly14vaotu:is([data-state=active]){background-color:var(--mly1bs2mf7)}.mlyqweix6:is([data-disabled]){color:var(--mly1qcfjts)}.mlyb0tsu4:is([data-state=active]){color:var(--mly883cce)}.mly5ezrf1:is([data-disabled]){cursor:not-allowed}.mly1uifvsu:is([data-state=active]){font-weight:700}.mly1s07b3s:disabled{cursor:not-allowed}.mly1haqvef:hover{background-color:#dde2e8}.mlyjg9ulk:hover{background-color:#efefef}.mlyt89l8w:hover{background-color:var(--malloy-composer-form-focusBackground,#f0f6ff)}.mlyk1j4u7:hover{background-color:var(--mly4a29vv)}.mlyk1e6ed:hover{box-shadow:#ccd3db4d 0 0 0 3px inset}.mlytw1abo:focus{background-color:#fff}}@layer priority5{.mly1ey2m1c{bottom:0}.mlyqtp20y{height:0}.mly5yr21d{height:100%}.mlypyat2d{height:100px}.mlyn866dk{height:136px}.mly1v9usgg{height:14px}.mlywrnneb{height:16.5px}.mlylup9mm{height:16px}.mlymix8c7{height:18px}.mlyjm9jq1{height:1px}.mly1m3v4wt{height:200px}.mlyk2yuxw{height:209.5px}.mly1qx5ct2{height:20px}.mlyxk0z11{height:24px}.mlyd7y6wv{height:26px}.mly1fgtraw{height:28px}.mlyc9qbxq{height:36px}.mlyng8ra{height:60px}.mlydk7pt{height:8px}.mlylo07zb{height:90px}.mlyt7dq6l{height:auto}.mly1ktj5wk{height:calc(100% - 8px)}.mlyu96u03{left:0}.mly12nagc{margin-bottom:4px}.mlyu06os2{margin-bottom:5px}.mly1e56ztr{margin-bottom:8px}.mlyj3b58b{margin-left:0}.mly1tpqehw{margin-left:12px}.mlyq1n1xh{margin-left:16px}.mly1iog12x{margin-left:4px}.mlyet2fuk{margin-left:8px}.mly1yf7rl7{margin-right:0}.mly1xmf6yo{margin-top:8px}.mly1rvw3h8{max-height:136px}.mly1hkcv85{max-height:200px}.mly1xyq3li{max-height:20em}.mlyq3t0pi{max-height:280px}.mlyuyqlj2{max-height:300px}.mly1phlbz0{max-height:400px}.mly1jcbksy{max-height:420px}.mly3d5gib{max-height:50vh}.mly1l4ul0t{max-height:75vh}.mly1kbvuzt{max-height:var(--radix-tooltip-content-available-height)}.mlyqyhut4{max-width:16.5px}.mly1pdpmub{max-width:264px}.mly1jkqq1h{max-width:280px}.mly1dc814f{max-width:350px}.mlyxc7z9f{max-width:360px}.mly1j9u4d2{max-width:400px}.mly1lr1uin{max-width:420px}.mlymcgfsh{max-width:60px}.mly14zcgw3{max-width:75vw}.mly2lwn1j{min-height:0}.mly4x6u8j{min-width:16.5px}.mlygc0pbm{min-width:1px}.mlyt4ypqs{min-width:20px}.mlyytlacd{min-width:224px}.mlylm99nl{min-width:240px}.mly2ixbly{min-width:250px}.mlyfvyar9{min-width:60px}.mly1onzeue{min-width:95px}.mly1odjw0f{overflow-y:auto}.mly18d9i69{padding-bottom:0}.mly1l90r2v{padding-bottom:16px}.mlyjkvuk6{padding-bottom:4px}.mlywib8y2{padding-bottom:8px}.mlynm25rq{padding-left:16px}.mly6wrskw{padding-left:4px}.mly163pfp{padding-left:8px}.mlymzs88n{padding-right:4px}.mlyy13l1i{padding-right:8px}.mly1nn3v0j{padding-top:2px}.mly1iorvi4{padding-top:4px}.mly123j3cw{padding-top:5px}.mly1y1aw1k{padding-top:8px}.mly1bkpikb{right:-2px}.mly3m8u43{right:0}.mly13vifvy{top:0}.mlynalus7{width:0}.mlyh8yej3{width:100%}.mlynrytzq{width:10em}.mly6jxa94{width:14px}.mly18kybhu{width:15em}.mlyjxf2f8{width:16.5px}.mly1kky2od{width:16px}.mly1xp8n7a{width:18px}.mly1i1rx1s{width:1px}.mlyw4jnvo{width:20px}.mlyvy4d1p{width:24px}.mly1f1nlb9{width:25%}.mlyqyf9gi{width:250px}.mly1hfn5x7{width:260px}.mlygd8bvy{width:28px}.mlybl57os{width:323px}.mlyxsgkw5{width:350px}.mly869kya{width:5.5em}.mly1ftt334{width:5px}.mly14rvwrp{width:600px}.mly1247r65{width:60px}.mly1xc55vz{width:8px}.mlym6i5cn{width:90%}.mly10lvyaf{width:calc(100% - 12px)}.mly1rxuhir{width:calc(100% - 22px)}.mly112rgfc{width:calc(100% - 40)}.mly1g65f5b{width:var(--radix-tooltip-trigger-width)}}@layer priority6{.mly1njml60::placeholder{color:#4e606f}}div[data-radix-popper-content-wrapper]{z-index:100!important}
|