@selvajs/selva 4.3.0 → 4.3.1
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/build/client/_app/immutable/chunks/{D1FLuKx5.js → BGuW4NBA.js} +1 -1
- package/build/client/_app/immutable/chunks/BGuW4NBA.js.br +0 -0
- package/build/client/_app/immutable/chunks/BGuW4NBA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{XwEuxkth.js → BOu0_8hg.js} +1 -1
- package/build/client/_app/immutable/chunks/BOu0_8hg.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOu0_8hg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{1O7Vyn3x.js → BRVNXmK7.js} +1 -1
- package/build/client/_app/immutable/chunks/BRVNXmK7.js.br +0 -0
- package/build/client/_app/immutable/chunks/BRVNXmK7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CpzrN_ad.js → Bsojhuor.js} +1 -1
- package/build/client/_app/immutable/chunks/Bsojhuor.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bsojhuor.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ClNtf5dE.js +3 -0
- package/build/client/_app/immutable/chunks/ClNtf5dE.js.br +0 -0
- package/build/client/_app/immutable/chunks/ClNtf5dE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{D0jw87aj.js → Dus1Wc-_.js} +1 -1
- package/build/client/_app/immutable/chunks/Dus1Wc-_.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dus1Wc-_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{0owY5F6O.js → VoeDk8Ji.js} +1 -1
- package/build/client/_app/immutable/chunks/VoeDk8Ji.js.br +0 -0
- package/build/client/_app/immutable/chunks/VoeDk8Ji.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BU1ZTica.js → app.BuFVNRIb.js} +2 -2
- package/build/client/_app/immutable/entry/app.BuFVNRIb.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BuFVNRIb.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BJkf9eCh.js +1 -0
- package/build/client/_app/immutable/entry/start.BJkf9eCh.js.br +2 -0
- package/build/client/_app/immutable/entry/start.BJkf9eCh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.BGw1TtE-.js → 1.DTTqOpbo.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DTTqOpbo.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DTTqOpbo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.DUHLFhc8.js → 11.Bd_TroBi.js} +1 -1
- package/build/client/_app/immutable/nodes/11.Bd_TroBi.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.Bd_TroBi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.DUetX8JN.js → 13.CZPWgSyX.js} +1 -1
- package/build/client/_app/immutable/nodes/13.CZPWgSyX.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.CZPWgSyX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{14.BMNgebxg.js → 14.ErUEed70.js} +1 -1
- package/build/client/_app/immutable/nodes/14.ErUEed70.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.ErUEed70.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.BK5X4N0B.js → 16.ZGqQw9u_.js} +1 -1
- package/build/client/_app/immutable/nodes/16.ZGqQw9u_.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.ZGqQw9u_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{17.DESUDRJ7.js → 17.BAfTvzjf.js} +1 -1
- package/build/client/_app/immutable/nodes/17.BAfTvzjf.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.BAfTvzjf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{19.BGOmShx1.js → 19.BA4Q7Ejv.js} +1 -1
- package/build/client/_app/immutable/nodes/19.BA4Q7Ejv.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.BA4Q7Ejv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.Bil4apV-.js → 2.qGoF_BJR.js} +1 -1
- package/build/client/_app/immutable/nodes/2.qGoF_BJR.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.qGoF_BJR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{20.BN9CyZsk.js → 20.B7pbJgV7.js} +1 -1
- package/build/client/_app/immutable/nodes/20.B7pbJgV7.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.B7pbJgV7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{21.DLY2CWfL.js → 21.CQUr9a-8.js} +1 -1
- package/build/client/_app/immutable/nodes/21.CQUr9a-8.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.CQUr9a-8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/23.B1irvd8d.js +16 -0
- package/build/client/_app/immutable/nodes/23.B1irvd8d.js.br +0 -0
- package/build/client/_app/immutable/nodes/23.B1irvd8d.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{24.C9nhiSAI.js → 24.DaWQ1jI1.js} +1 -1
- package/build/client/_app/immutable/nodes/24.DaWQ1jI1.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.DaWQ1jI1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{27.DDMHOK1v.js → 27.BVltlINS.js} +1 -1
- package/build/client/_app/immutable/nodes/27.BVltlINS.js.br +0 -0
- package/build/client/_app/immutable/nodes/27.BVltlINS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{28.BKxO5tXo.js → 28.CkAyrVXL.js} +1 -1
- package/build/client/_app/immutable/nodes/28.CkAyrVXL.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.CkAyrVXL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{29.BE9agX-A.js → 29.DuyPKFrU.js} +1 -1
- package/build/client/_app/immutable/nodes/29.DuyPKFrU.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.DuyPKFrU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.Cr_OcaHZ.js → 3.vtzWe8dr.js} +1 -1
- package/build/client/_app/immutable/nodes/3.vtzWe8dr.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.vtzWe8dr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{30.1oMiKsa_.js → 30.B8jrnlRp.js} +1 -1
- package/build/client/_app/immutable/nodes/30.B8jrnlRp.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.B8jrnlRp.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.R3EURuYN.js → 5.Cung723A.js} +1 -1
- package/build/client/_app/immutable/nodes/5.Cung723A.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Cung723A.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.XEBvU5zF.js → 6.ChV00aii.js} +1 -1
- package/build/client/_app/immutable/nodes/6.ChV00aii.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.ChV00aii.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.aBxKpwwY.js → 7.CoT_11A9.js} +1 -1
- package/build/client/_app/immutable/nodes/7.CoT_11A9.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CoT_11A9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.CEAXwPtw.js → 8.DVP4Zm3d.js} +1 -1
- package/build/client/_app/immutable/nodes/8.DVP4Zm3d.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DVP4Zm3d.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.DNoTcl-q.js → 9.Cw9Pz35A.js} +1 -1
- package/build/client/_app/immutable/nodes/9.Cw9Pz35A.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.Cw9Pz35A.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{1-CTiyXq5H.js → 1-C2I1bO4p.js} +2 -2
- package/build/server/chunks/{1-CTiyXq5H.js.map → 1-C2I1bO4p.js.map} +1 -1
- package/build/server/chunks/{11-BvWfYPvY.js → 11-CDngEJ0B.js} +2 -2
- package/build/server/chunks/{11-BvWfYPvY.js.map → 11-CDngEJ0B.js.map} +1 -1
- package/build/server/chunks/{13-UcumwEMR.js → 13-BPFyBgiN.js} +2 -2
- package/build/server/chunks/{13-UcumwEMR.js.map → 13-BPFyBgiN.js.map} +1 -1
- package/build/server/chunks/{14-DDGpNRmy.js → 14-Dc1K62Ey.js} +2 -2
- package/build/server/chunks/{14-DDGpNRmy.js.map → 14-Dc1K62Ey.js.map} +1 -1
- package/build/server/chunks/{15-CRsKpL17.js → 15-BNeKc8aQ.js} +2 -2
- package/build/server/chunks/{15-CRsKpL17.js.map → 15-BNeKc8aQ.js.map} +1 -1
- package/build/server/chunks/{16-Brrnhdb0.js → 16-C4rP4sq1.js} +2 -2
- package/build/server/chunks/{16-Brrnhdb0.js.map → 16-C4rP4sq1.js.map} +1 -1
- package/build/server/chunks/{17-nTtqXZFS.js → 17-ClRSe3-O.js} +2 -2
- package/build/server/chunks/{17-nTtqXZFS.js.map → 17-ClRSe3-O.js.map} +1 -1
- package/build/server/chunks/{19-C6JT4QWN.js → 19-DCCUt_I_.js} +2 -2
- package/build/server/chunks/{19-C6JT4QWN.js.map → 19-DCCUt_I_.js.map} +1 -1
- package/build/server/chunks/{2-Bzu1IIyQ.js → 2-CRTHDZDg.js} +2 -2
- package/build/server/chunks/{2-Bzu1IIyQ.js.map → 2-CRTHDZDg.js.map} +1 -1
- package/build/server/chunks/{20-BuEknXxb.js → 20-Bqn_Hog-.js} +2 -2
- package/build/server/chunks/{20-BuEknXxb.js.map → 20-Bqn_Hog-.js.map} +1 -1
- package/build/server/chunks/{21-C8VCOVHZ.js → 21-tHwvS2VE.js} +2 -2
- package/build/server/chunks/{21-C8VCOVHZ.js.map → 21-tHwvS2VE.js.map} +1 -1
- package/build/server/chunks/{23-B2o_ghvU.js → 23-CjlgEkW8.js} +2 -2
- package/build/server/chunks/{23-B2o_ghvU.js.map → 23-CjlgEkW8.js.map} +1 -1
- package/build/server/chunks/{24-Q1fbSR2o.js → 24-BLJ24n1x.js} +2 -2
- package/build/server/chunks/{24-Q1fbSR2o.js.map → 24-BLJ24n1x.js.map} +1 -1
- package/build/server/chunks/{27-5VeF0OHT.js → 27-7PPspJ4o.js} +2 -2
- package/build/server/chunks/{27-5VeF0OHT.js.map → 27-7PPspJ4o.js.map} +1 -1
- package/build/server/chunks/{28-GJ_nbLXN.js → 28-Cj4f8LeS.js} +2 -2
- package/build/server/chunks/{28-GJ_nbLXN.js.map → 28-Cj4f8LeS.js.map} +1 -1
- package/build/server/chunks/{29-lZH9mmI0.js → 29-B36SMjZF.js} +2 -2
- package/build/server/chunks/{29-lZH9mmI0.js.map → 29-B36SMjZF.js.map} +1 -1
- package/build/server/chunks/{3-BlqLiQTJ.js → 3-ByoVETsZ.js} +2 -2
- package/build/server/chunks/{3-BlqLiQTJ.js.map → 3-ByoVETsZ.js.map} +1 -1
- package/build/server/chunks/{30-CA_ezUGl.js → 30-BUZh-uxK.js} +2 -2
- package/build/server/chunks/{30-CA_ezUGl.js.map → 30-BUZh-uxK.js.map} +1 -1
- package/build/server/chunks/{5-0tLn4w9t.js → 5-BItOzJDH.js} +2 -2
- package/build/server/chunks/{5-0tLn4w9t.js.map → 5-BItOzJDH.js.map} +1 -1
- package/build/server/chunks/{6-Dk8-CNQc.js → 6-CA2Aephf.js} +2 -2
- package/build/server/chunks/{6-Dk8-CNQc.js.map → 6-CA2Aephf.js.map} +1 -1
- package/build/server/chunks/{7-g1mcBFfT.js → 7-uBm9NdYN.js} +2 -2
- package/build/server/chunks/{7-g1mcBFfT.js.map → 7-uBm9NdYN.js.map} +1 -1
- package/build/server/chunks/{8-BXyJwXPH.js → 8-K8AHqphy.js} +2 -2
- package/build/server/chunks/{8-BXyJwXPH.js.map → 8-K8AHqphy.js.map} +1 -1
- package/build/server/chunks/{9-B3S-g_A8.js → 9-mW8A2Lrz.js} +3 -3
- package/build/server/chunks/{9-B3S-g_A8.js.map → 9-mW8A2Lrz.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BMk_ClLw.js → _page.svelte-BqMtP8Q7.js} +5 -5
- package/build/server/chunks/{_page.svelte-BMk_ClLw.js.map → _page.svelte-BqMtP8Q7.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CBAiDOcP.js → _server.ts-DWCKRNAG.js} +5 -2
- package/build/server/chunks/_server.ts-DWCKRNAG.js.map +1 -0
- package/build/server/chunks/_server.ts-Db9C0y4L.js +162 -0
- package/build/server/chunks/_server.ts-Db9C0y4L.js.map +1 -0
- package/build/server/index.js +1 -1
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +26 -26
- package/build/server/manifest.js.map +1 -1
- package/package.json +4 -4
- package/build/client/_app/immutable/chunks/0owY5F6O.js.br +0 -0
- package/build/client/_app/immutable/chunks/0owY5F6O.js.gz +0 -0
- package/build/client/_app/immutable/chunks/1O7Vyn3x.js.br +0 -0
- package/build/client/_app/immutable/chunks/1O7Vyn3x.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BjlANOwQ.js +0 -3
- package/build/client/_app/immutable/chunks/BjlANOwQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/BjlANOwQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CpzrN_ad.js.br +0 -0
- package/build/client/_app/immutable/chunks/CpzrN_ad.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D0jw87aj.js.br +0 -0
- package/build/client/_app/immutable/chunks/D0jw87aj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D1FLuKx5.js.br +0 -0
- package/build/client/_app/immutable/chunks/D1FLuKx5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/XwEuxkth.js.br +0 -0
- package/build/client/_app/immutable/chunks/XwEuxkth.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BU1ZTica.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BU1ZTica.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.C_5mwPOZ.js +0 -1
- package/build/client/_app/immutable/entry/start.C_5mwPOZ.js.br +0 -2
- package/build/client/_app/immutable/entry/start.C_5mwPOZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BGw1TtE-.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BGw1TtE-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.DUHLFhc8.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.DUHLFhc8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.DUetX8JN.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.DUetX8JN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.BMNgebxg.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.BMNgebxg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.BK5X4N0B.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.BK5X4N0B.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.DESUDRJ7.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.DESUDRJ7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/19.BGOmShx1.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.BGOmShx1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Bil4apV-.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Bil4apV-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/20.BN9CyZsk.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.BN9CyZsk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/21.DLY2CWfL.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.DLY2CWfL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/23.DwnJEjle.js +0 -16
- package/build/client/_app/immutable/nodes/23.DwnJEjle.js.br +0 -0
- package/build/client/_app/immutable/nodes/23.DwnJEjle.js.gz +0 -0
- package/build/client/_app/immutable/nodes/24.C9nhiSAI.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.C9nhiSAI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/27.DDMHOK1v.js.br +0 -0
- package/build/client/_app/immutable/nodes/27.DDMHOK1v.js.gz +0 -0
- package/build/client/_app/immutable/nodes/28.BKxO5tXo.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.BKxO5tXo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/29.BE9agX-A.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.BE9agX-A.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Cr_OcaHZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Cr_OcaHZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/30.1oMiKsa_.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.1oMiKsa_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.R3EURuYN.js.br +0 -1
- package/build/client/_app/immutable/nodes/5.R3EURuYN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.XEBvU5zF.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.XEBvU5zF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.aBxKpwwY.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.aBxKpwwY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CEAXwPtw.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CEAXwPtw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DNoTcl-q.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DNoTcl-q.js.gz +0 -0
- package/build/server/chunks/_server.ts-BvMDaAZY.js +0 -75
- package/build/server/chunks/_server.ts-BvMDaAZY.js.map +0 -1
- package/build/server/chunks/_server.ts-CBAiDOcP.js.map +0 -1
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import"../chunks/DsnmJJEf.js";import{ba as h,au as Lt,af as e,bk as L,a_ as o,aQ as at,ac as g,aN as ot,V as s,aK as Ur,aW as n,a as Er,b7 as a,be as K,aJ as f,aP as it,bl as $t,M as Mr,a8 as Or,$ as Lr}from"../chunks/DEk358l3.js";import{p as We,r as gt,c as _,a as xt,b as Qt,d as Rr,s as Fr}from"../chunks/DCBLBrrW.js";import{f as xr,e as nt,d as yt,s as U}from"../chunks/T-Nslbso.js";import{p as zr,c as ze,a as r,f as i,t as A}from"../chunks/DS1KfRtl.js";import{i as J}from"../chunks/BnZOgasr.js";import{k as Vr}from"../chunks/CYyqq9B1.js";import{a as Gr,g as jt,j as ft,e as pt,f as br,s as $r,b as Xt,r as St,k as or}from"../chunks/6CzuHfQM.js";import{h as Br}from"../chunks/DfVTcmam.js";import{i as ct,g as mr}from"../chunks/BjlANOwQ.js";import{p as qr}from"../chunks/CpzrN_ad.js";import{F as sr}from"../chunks/B-Kuf-9K.js";import{F as yr}from"../chunks/BaMCSMGs.js";import{D as Yt,b as Vt,c as Gt,a as Bt,R as Zt}from"../chunks/CzCTTv8Q.js";import{L as He}from"../chunks/Uv0-HWHq.js";import{I as ut}from"../chunks/CDmA5ezP.js";import{d as er,T as wr,b as kr,c as Ft,a as zt}from"../chunks/BsKtJj5h.js";import{B as De}from"../chunks/CGKZc1Kf.js";import{U as Jr,D as Wt}from"../chunks/Cqb2-zYs.js";import{B as Pr}from"../chunks/Bma65zV8.js";import{X as kt}from"../chunks/Dr-qnmvi.js";import{t as Se}from"../chunks/BfHBnYuG.js";import{c as ur,b as nr}from"../chunks/C46MGZre.js";import{P as Kt}from"../chunks/BOsr6E_d.js";import{I as wt}from"../chunks/CE_gxD9G.js";import{U as ir}from"../chunks/KIV0kKdR.js";import{U as _r}from"../chunks/BihI7LuH.js";import{T as tr}from"../chunks/DqK2lhM-.js";import{E as fr}from"../chunks/BnIDUuJL.js";import{U as Hr}from"../chunks/DdEmEaOR.js";import{a as Wr,s as Kr,f as jr,m as Qr,h as Xr,S as Yr,V as Zr,D as ea}from"../chunks/3Ah3Y6N9.js";import{s as lr}from"../chunks/9DES--UJ.js";import{c as ta}from"../chunks/BIIXkPqf.js";import{a as ra,d as aa,k as oa,l as na,h as Ht,v as sa}from"../chunks/BTm-dDt9.js";import{R as Dt,b as Nt,e as It,f as Tt,c as At,d as Ut,a as Et,A as Mt}from"../chunks/CNC_mCsM.js";import{C as ia}from"../chunks/DkVLFJC2.js";import{T as dr}from"../chunks/D-Fls4-N.js";import{L as la}from"../chunks/DfbumCTS.js";import{C as hr}from"../chunks/DtFVCiwY.js";import{A as da}from"../chunks/BpQqe39G.js";import{S as ca}from"../chunks/BiG82jCv.js";import{S as va}from"../chunks/Diyh8RG-.js";const ua=Symbol();class fa extends URLSearchParams{#e=h(0);#a=ga();#t=!1;#r(){if(!this.#a||this.#t)return;this.#t=!0;const t=this.toString();this.#a.search=t&&`?${t}`,this.#t=!1}[ua](t){if(!this.#t){this.#t=!0;for(const v of[...super.keys()])super.delete(v);for(const[v,x]of t)super.append(v,x);Lt(this.#e),this.#t=!1}}append(t,v){super.append(t,v),this.#r(),Lt(this.#e)}delete(t,v){var x=super.has(t,v);super.delete(t,v),x&&(this.#r(),Lt(this.#e))}get(t){return e(this.#e),super.get(t)}getAll(t){return e(this.#e),super.getAll(t)}has(t,v){return e(this.#e),super.has(t,v)}keys(){return e(this.#e),super.keys()}set(t,v){var x=super.getAll(t).join("");super.set(t,v),x!==super.getAll(t).join("")&&(this.#r(),Lt(this.#e))}sort(){super.sort(),this.#r(),Lt(this.#e)}toString(){return e(this.#e),super.toString()}values(){return e(this.#e),super.values()}entries(){return e(this.#e),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#e),super.size}}let pa=null;function ga(){return pa}const ma=oa({component:"separator",parts:["root"]});class pr{static create(t){return new pr(t)}opts;attachment;constructor(t){this.opts=t,this.attachment=ra(t.ref)}#e=L(()=>({id:this.opts.id.current,role:this.opts.decorative.current?"none":"separator","aria-orientation":this.opts.orientation.current,"aria-hidden":aa(this.opts.decorative.current),"data-orientation":this.opts.orientation.current,[ma.root]:"",...this.attachment}));get props(){return e(this.#e)}set props(t){o(this.#e,t)}}var _a=i("<div><!></div>");function ha(_e,t){const v=zr();at(t,!0);let x=We(t,"id",19,()=>na(v)),M=We(t,"ref",15,null),O=We(t,"decorative",3,!1),B=We(t,"orientation",3,"horizontal"),b=gt(t,["$$slots","$$events","$$legacy","id","ref","child","children","decorative","orientation"]);const P=pr.create({ref:Ht(()=>M(),le=>M(le)),id:Ht(()=>x()),decorative:Ht(()=>O()),orientation:Ht(()=>B())}),q=L(()=>sa(b,P.props));var ne=ze(),z=g(ne);{var he=le=>{var de=ze(),xe=g(de);lr(xe,()=>t.child,()=>({props:e(q)})),r(le,de)},ye=le=>{var de=_a();Gr(de,()=>({...e(q)}));var xe=s(de);lr(xe,()=>t.children??Ur),n(de),r(le,de)};J(z,le=>{t.child?le(he):le(ye,-1)})}r(_e,ne),ot()}function cr(_e,t){at(t,!0);let v=We(t,"ref",15,null),x=We(t,"data-slot",3,"separator"),M=gt(t,["$$slots","$$events","$$legacy","ref","class","data-slot"]);var O=ze(),B=g(O);{let b=L(()=>ta("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:min-h-full data-[orientation=vertical]:w-px",t.class));_(B,()=>ha,(P,q)=>{q(P,xt({get"data-slot"(){return x()},get class(){return e(b)}},()=>M,{get ref(){return v()},set ref(ne){v(ne)}}))})}r(_e,O),ot()}var xa=i('<div role="button" tabindex="-1" class="inset-0 bg-black/30 fixed z-50"></div> <div><!></div>',1);function Cr(_e,t){at(t,!0);let v=We(t,"width",3,"w-125"),x=We(t,"ariaLabel",3,"Close drawer");function M(q){q.key==="Escape"&&t.onClose()}var O=xa();xr("keydown",Er,M);var B=g(O),b=a(B,2),P=s(b);lr(P,()=>t.children),n(b),K(()=>{jt(B,"aria-label",x()),ft(b,1,`animate-in slide-in-from-right-4 top-0 right-0 fixed z-50 flex h-full border-border bg-background ${v()??""} flex-col overflow-y-auto border-l duration-150`)}),nt("click",B,function(...q){t.onClose?.apply(this,q)}),nt("keydown",B,M),r(_e,O),ot()}yt(["click","keydown"]);var ba=i('<!> <span class="sm:inline hidden"> </span>',1),$a=i('<div class="gap-2 sm:flex-row sm:items-center flex flex-col"><input type="file" accept="image/*" class="h-10 px-3 py-2 text-sm file:text-sm file:font-medium flex flex-1 rounded-md border border-input bg-background file:border-0 file:bg-transparent focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none disabled:opacity-50"/> <!></div>'),ya=i('<div class="space-y-2"><div class="gap-1 p-0.5 flex rounded-md border"><!> <!></div> <!></div>');function Sr(_e,t){at(t,!0);let v=We(t,"mode",3,"url"),x=We(t,"value",3,""),M=We(t,"disabled",3,!1),O=We(t,"isUploading",3,!1),B=We(t,"hasFile",3,!1),b=We(t,"inputRef",15);var P=ya(),q=s(P),ne=s(q);{let de=L(()=>v()!=="upload"?"default":"ghost");De(ne,{size:"sm",get variant(){return e(de)},onclick:()=>t.onModeChange?.("url"),class:"h-7 text-xs flex-1",children:(xe,I)=>{f();var R=A("URL");r(xe,R)},$$slots:{default:!0}})}var z=a(ne,2);{let de=L(()=>v()==="upload"?"default":"ghost");De(z,{size:"sm",get variant(){return e(de)},onclick:()=>t.onModeChange?.("upload"),class:"h-7 text-xs flex-1",children:(xe,I)=>{f();var R=A("Upload File");r(xe,R)},$$slots:{default:!0}})}n(q);var he=a(q,2);{var ye=de=>{var xe=$a(),I=s(xe);Qt(I,pe=>b(pe),()=>b());var R=a(I,2);{let pe=L(()=>M()||!B()||O());De(R,{size:"sm",get disabled(){return e(pe)},get onclick(){return t.onUpload},class:"shrink-0",children:(S,H)=>{var ke=ba(),we=g(ke);Jr(we,{class:"mr-2 h-4 w-4"});var Ne=a(we,2),je=s(Ne,!0);n(Ne),K(()=>U(je,O()?"Uploading…":"Upload")),r(S,ke)},$$slots:{default:!0}})}n(xe),K(()=>I.disabled=M()),nt("change",I,function(...pe){t.onFileSelected?.apply(this,pe)}),r(de,xe)},le=de=>{ut(de,{type:"text",get value(){return x()},get disabled(){return M()},oninput:xe=>t.onUrlChange?.(xe.target.value),placeholder:"https://..."})};J(he,de=>{v()==="upload"?de(ye):de(le,-1)})}n(P),r(_e,P),ot()}yt(["change"]);function wa(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["path",{d:"M20 6 9 17l-5-5"}]];wt(_e,xt({name:"check"},()=>v,{get iconNode(){return x}}))}function ka(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["path",{d:"M12 13v8"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"}],["path",{d:"m8 17 4-4 4 4"}]];wt(_e,xt({name:"cloud-upload"},()=>v,{get iconNode(){return x}}))}function Pa(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}]];wt(_e,xt({name:"ellipsis"},()=>v,{get iconNode(){return x}}))}function ja(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5"}],["path",{d:"M12 12v6"}],["path",{d:"m15 15-3-3-3 3"}]];wt(_e,xt({name:"file-up"},()=>v,{get iconNode(){return x}}))}function Ca(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}]];wt(_e,xt({name:"image"},()=>v,{get iconNode(){return x}}))}function vr(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"}]];wt(_e,xt({name:"play"},()=>v,{get iconNode(){return x}}))}function Dr(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];wt(_e,xt({name:"search"},()=>v,{get iconNode(){return x}}))}function Sa(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["circle",{cx:"18",cy:"5",r:"3"}],["circle",{cx:"6",cy:"12",r:"3"}],["circle",{cx:"18",cy:"19",r:"3"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49"}]];wt(_e,xt({name:"share-2"},()=>v,{get iconNode(){return x}}))}function Nr(_e,t){let v=gt(t,["$$slots","$$events","$$legacy"]);const x=[["path",{d:"M12 3v12"}],["path",{d:"m17 8-5-5-5 5"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}]];wt(_e,xt({name:"upload"},()=>v,{get iconNode(){return x}}))}const Rt=1e3;function Ir(_e,t){at(t,!0);let v=We(t,"placeholder",3,"Select a project");const x=L(()=>t.projects.map(M=>({id:M.id,label:M.name})));sr(_e,{get items(){return e(x)},get value(){return t.value},get onChange(){return t.onChange},get id(){return t.id},get placeholder(){return v()},get triggerIcon(){return yr},searchPlaceholder:"Filter projects"}),ot()}var Da=i("<!> <!>",1),Na=i('<div class="space-y-1"><!> <!></div>'),Ia=i('<div class="space-y-1"><!> <div class="bg-muted rounded-md px-3 py-2"><p class="text-sm font-medium"> </p></div></div>'),Ta=i("<option> </option>"),Aa=i('<div class="space-y-1"><!> <select id="new-server" class="border-input bg-background focus-visible:ring-ring h-10 w-full rounded-md border px-3 py-2 text-sm focus-visible:ring-2 focus-visible:outline-none"></select></div>'),Ua=i("<div><!> <!></div>"),Ea=i('Grasshopper File <span class="text-destructive">*</span>',1),Ma=i('<p class="text-muted-foreground flex items-center gap-2 text-xs"><svg class="h-3 w-3 animate-spin" viewBox="0 0 24 24" fill="none"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8z"></path></svg> Validating definition…</p>'),Oa=i(`<div class="border-destructive/40 bg-destructive/5 rounded-md border p-3"><p class="text-destructive text-xs font-medium">Validation failed</p> <p class="text-destructive/80 mt-0.5 text-xs"> </p> <p class="text-destructive/60 mt-1 text-xs">This definition can't be uploaded until it validates against an online compute server.</p></div>`),La=i('<div class="border-success/30 bg-success/5 flex items-center gap-3 rounded-md border p-3"><div class="min-w-0 flex-1"><p class="text-success text-xs font-medium">Valid Selva definition</p> <p class="text-muted-foreground mt-0.5 text-xs"> </p></div></div>'),Ra=i('Display Name <span class="text-destructive">*</span>',1),Fa=i(' <button type="button" class="ml-0.5 inline-flex items-center justify-center transition-opacity hover:opacity-70" title="Remove tag"><!></button>',1),za=i('<div class="mb-2 flex flex-wrap gap-2"></div>'),Va=i("<!> <!>",1),Ga=i('<!> <div class="space-y-4"><!> <div class="space-y-2"><!> <input id="new-file" type="file" accept=".gh,.ghx" class="border-input bg-background focus-visible:ring-ring flex h-10 w-full rounded-md border px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50"/> <!></div> <div class="space-y-2"><!> <!></div> <div class="space-y-2"><!> <!></div> <div class="grid grid-cols-1 gap-3 md:grid-cols-2"><div class="space-y-1"><div class="flex items-center justify-between"><!> <p class="text-muted-foreground text-xs"> </p></div> <!></div> <div class="space-y-1"><div class="flex items-center justify-between"><!> <p class="text-muted-foreground text-xs"> </p></div> <!> <!></div></div> <div class="space-y-2"><!> <!></div></div> <!>',1);function Ba(_e,t){at(t,!0);let v=We(t,"open",3,!1),x=We(t,"isAdding",3,!1),M=We(t,"projects",19,()=>[]),O=We(t,"computeServers",19,()=>[]),B=We(t,"defaultComputeServerId",3,null),b=We(t,"showProjectDropdown",3,!1),P=h(""),q=h(""),ne=h(""),z=h(it([])),he=h(""),ye=h("url"),le=h(""),de=h("");$t(()=>{t.defaultProjectId&&o(le,t.defaultProjectId,!0)}),$t(()=>{e(le)&&e(xe)?.files?.length&&!e(H)&&!e(pe)&&we()});let xe=h(void 0),I=h(void 0),R=h(!1),pe=h(!1),S=h(null),H=h(null);function ke(ce){return ce.name.replace(/\.(gh|ghx)$/i,"").replace(/[_-]/g," ").replace(/\b\w/g,ge=>ge.toUpperCase())}async function we(){const ce=e(xe)?.files?.[0];if(o(S,null),o(H,null),o(q,""),o(z,[],!0),!ce){o(P,"");return}if(o(P,ke(ce),!0),!!e(le)){o(pe,!0);try{const ge=new FormData;ge.append("files",ce);const m=await fetch(`/api/compute/schema?projectId=${encodeURIComponent(e(le))}`,{method:"POST",body:ge});if(!m.ok){const k=await m.json().catch(()=>null);o(S,k?.message??(m.status===503?"Compute server is unreachable. It must be online to upload a definition.":"Validation failed"),!0);return}const d=(await m.json())?.[0];if(!d){o(S,"No valid Selva schema found in this definition.");return}o(H,d,!0),d.name&&o(P,d.name,!0),d.description&&o(q,d.description,!0),d.tags?.length&&o(z,d.tags,!0)}catch{o(S,"Compute server is unreachable. It must be online to upload a definition.")}finally{o(pe,!1)}}}async function Ne(){if(!e(P).trim()){Se.error("Display name is required");return}if(!e(xe)?.files||e(xe).files.length===0){Se.error("A Grasshopper file is required");return}if(b()&&!e(le)){Se.error("Please pick a project");return}if(!e(H)){Se.error(e(S)??"The definition must be validated against an online compute server first");return}const ce=new FormData;ce.append("displayName",e(P).trim()),ce.append("description",e(q)),ce.append("category",e(ne)),ce.append("tags",e(z).join(",")),e(ye)==="upload"&&e(I)?.files?.[0]?ce.append("image",e(I).files[0]):e(ye)==="url"&&e(he).trim()&&ce.append("coverImage",e(he).trim()),ce.append("file",e(xe).files[0]),e(le)&&ce.append("projectId",e(le)),e(de)&&ce.append("computeServerId",e(de));try{await t.onSubmit?.(ce)}catch{}}function je(){o(P,""),o(q,""),o(ne,""),o(z,[],!0),o(he,""),o(ye,"url"),o(le,t.defaultProjectId??"",!0),o(de,""),o(pe,!1),o(S,null),o(H,null),e(xe)&&(e(xe).value=""),e(I)&&(e(I).value=""),o(R,!1)}function Ae(ce){ce||je(),t.onOpenChange?.(ce)}$t(()=>{v()||je()});var Ie=ze(),Z=g(Ie);_(Z,()=>Zt,(ce,ge)=>{ge(ce,{get open(){return v()},onOpenChange:Ae,children:(m,w)=>{var d=ze(),k=g(d);_(k,()=>Yt,($,c)=>{c($,{class:"max-w-xl",children:(p,j)=>{var T=Ga(),ee=g(T);_(ee,()=>Vt,(oe,Ce)=>{Ce(oe,{children:(Te,Qe)=>{var rt=Da(),lt=g(rt);_(lt,()=>Gt,(Me,Ge)=>{Ge(Me,{children:(Re,Oe)=>{f();var qe=A("Add New Definition");r(Re,qe)},$$slots:{default:!0}})});var st=a(lt,2);_(st,()=>Bt,(Me,Ge)=>{Ge(Me,{children:(Re,Oe)=>{f();var qe=A("Upload a Grasshopper file and fill in the metadata.");r(Re,qe)},$$slots:{default:!0}})}),r(Te,rt)},$$slots:{default:!0}})});var y=a(ee,2),E=s(y);{var X=oe=>{var Ce=Ua(),Te=s(Ce);{var Qe=Me=>{var Ge=Na(),Re=s(Ge);He(Re,{for:"new-project",children:(qe,tt)=>{f();var Je=A("Project");r(qe,Je)},$$slots:{default:!0}});var Oe=a(Re,2);Ir(Oe,{id:"new-project",get projects(){return M()},get value(){return e(le)},onChange:qe=>o(le,qe,!0)}),n(Ge),r(Me,Ge)},rt=Me=>{const Ge=L(()=>M().find(dt=>dt.id===t.defaultProjectId));var Re=Ia(),Oe=s(Re);He(Oe,{children:(dt,qt)=>{f();var Ct=A("Project");r(dt,Ct)},$$slots:{default:!0}});var qe=a(Oe,2),tt=s(qe),Je=s(tt,!0);n(tt),n(qe),n(Re),K(()=>U(Je,e(Ge)?.name??"Unknown")),r(Me,Re)};J(Te,Me=>{b()?Me(Qe):t.defaultProjectId&&Me(rt,1)})}var lt=a(Te,2);{var st=Me=>{var Ge=Aa(),Re=s(Ge);He(Re,{for:"new-server",children:(tt,Je)=>{f();var dt=A("Compute Server");r(tt,dt)},$$slots:{default:!0}});var Oe=a(Re,2);pt(Oe,21,O,tt=>tt.id,(tt,Je)=>{var dt=Ta(),qt=s(dt);n(dt);var Ct={};K(()=>{U(qt,`${e(Je).label??""}${e(Je).id===B()?" (Default)":""}`),Ct!==(Ct=e(Je).id)&&(dt.value=(dt.__value=e(Je).id)??"")}),r(tt,dt)}),n(Oe);var qe;br(Oe),n(Ge),K(()=>{qe!==(qe=e(de)||(B()??""))&&(Oe.value=(Oe.__value=e(de)||(B()??""))??"",$r(Oe,e(de)||(B()??"")))}),nt("change",Oe,tt=>{const Je=tt.currentTarget.value;o(de,Je===B()?"":Je,!0)}),r(Me,Ge)};J(lt,Me=>{O().length>0&&Me(st)})}n(Ce),K(()=>ft(Ce,1,`grid gap-3 ${b()&&O().length>0?"sm:grid-cols-2":""}`)),r(oe,Ce)};J(E,oe=>{(b()||O().length>0)&&oe(X)})}var ve=a(E,2),se=s(ve);He(se,{for:"new-file",children:(oe,Ce)=>{f();var Te=Ea();f(),r(oe,Te)},$$slots:{default:!0}});var te=a(se,2);Qt(te,oe=>o(xe,oe),()=>e(xe));var be=a(te,2);{var ie=oe=>{var Ce=Ma();r(oe,Ce)},V=oe=>{var Ce=Oa(),Te=a(s(Ce),2),Qe=s(Te,!0);n(Te),f(2),n(Ce),K(()=>U(Qe,e(S))),r(oe,Ce)},G=oe=>{var Ce=La(),Te=s(Ce),Qe=a(s(Te),2),rt=s(Qe);n(Qe),n(Te),n(Ce),K(()=>U(rt,`${e(H).inputs.length??""} input${e(H).inputs.length===1?"":"s"},
|
|
2
|
-
${e(H).outputs.length??""} output${e(H).outputs.length===1?"":"s"}`)),r(oe,Ce)};J(be,oe=>{e(pe)?oe(ie):e(S)?oe(V,1):e(H)&&oe(G,2)})}n(ve);var D=a(ve,2),C=s(D);He(C,{for:"new-dn",children:(oe,Ce)=>{f();var Te=Ra();f(),r(oe,Te)},$$slots:{default:!0}});var W=a(C,2);ut(W,{id:"new-dn",type:"text",placeholder:"e.g., Parametric Tower",get value(){return e(P)},set value(oe){o(P,oe,!0)}}),n(D);var Y=a(D,2),me=s(Y);He(me,{for:"new-desc",children:(oe,Ce)=>{f();var Te=A("Description");r(oe,Te)},$$slots:{default:!0}});var re=a(me,2);er(re,{id:"new-desc",rows:3,placeholder:"Describe what this definition does…",get value(){return e(q)},set value(oe){o(q,oe,!0)}}),n(Y);var ue=a(Y,2),Pe=s(ue),Fe=s(Pe),F=s(Fe);He(F,{for:"new-cat",children:(oe,Ce)=>{f();var Te=A("Category");r(oe,Te)},$$slots:{default:!0}});var ae=a(F,2),fe=s(ae);n(ae),n(Fe);var Q=a(Fe,2);ut(Q,{id:"new-cat",type:"text",maxlength:40,placeholder:"e.g., Architecture",get value(){return e(ne)},set value(oe){o(ne,oe,!0)}}),n(Pe);var l=a(Pe,2),u=s(l),N=s(u);He(N,{for:"new-tags",children:(oe,Ce)=>{f();var Te=A("Tags");r(oe,Te)},$$slots:{default:!0}});var $e=a(N,2),Ue=s($e);n($e),n(u);var Ve=a(u,2);{var Le=oe=>{var Ce=za();pt(Ce,20,()=>e(z),Te=>Te,(Te,Qe)=>{Pr(Te,{variant:"outline",class:"cursor-pointer gap-1",children:(rt,lt)=>{f();var st=Fa(),Me=g(st),Ge=a(Me),Re=s(Ge);kt(Re,{class:"h-3 w-3"}),n(Ge),K(()=>U(Me,`${Qe??""} `)),nt("click",Ge,()=>{o(z,e(z).filter(Oe=>Oe!==Qe),!0)}),r(rt,st)},$$slots:{default:!0}})}),n(Ce),r(oe,Ce)};J(Ve,oe=>{e(z).length>0&&oe(Le)})}var Be=a(Ve,2);{let oe=L(()=>e(z).length>=5);ut(Be,{id:"new-tags",type:"text",placeholder:"Add tag and press Enter",get disabled(){return e(oe)},onkeydown:Ce=>{if(Ce.key==="Enter"){Ce.preventDefault();const Te=Ce.currentTarget,Qe=Te.value.trim();Qe&&!e(z).includes(Qe)&&e(z).length<5&&(o(z,[...e(z),Qe],!0),Te.value="")}}})}n(l),n(ue);var Ye=a(ue,2),Ke=s(Ye);He(Ke,{children:(oe,Ce)=>{f();var Te=A("Cover Image");r(oe,Te)},$$slots:{default:!0}});var et=a(Ke,2);Sr(et,{get mode(){return e(ye)},get value(){return e(he)},get hasFile(){return e(R)},onModeChange:oe=>o(ye,oe,!0),onUpload:()=>{},onFileSelected:()=>o(R,!!e(I)?.files?.length),onUrlChange:oe=>o(he,oe,!0),get inputRef(){return e(I)},set inputRef(oe){o(I,oe,!0)}}),n(Ye),n(y);var vt=a(y,2);_(vt,()=>Wt,(oe,Ce)=>{Ce(oe,{class:"gap-2 sm:justify-end",children:(Te,Qe)=>{var rt=Va(),lt=g(rt);De(lt,{variant:"outline",onclick:()=>t.onOpenChange?.(!1),children:(Me,Ge)=>{f();var Re=A("Cancel");r(Me,Re)},$$slots:{default:!0}});var st=a(lt,2);{let Me=L(()=>x()||e(pe)||!e(H));De(st,{onclick:Ne,get disabled(){return e(Me)},children:(Ge,Re)=>{f();var Oe=A();K(()=>U(Oe,x()?"Creating…":e(pe)?"Validating…":"Create Definition")),r(Ge,Oe)},$$slots:{default:!0}})}r(Te,rt)},$$slots:{default:!0}})}),K(()=>{U(fe,`${e(ne)?.length??0??""}/40`),U(Ue,`${e(z).length??""}/5`)}),nt("change",te,we),r(p,T)},$$slots:{default:!0}})}),r(m,d)},$$slots:{default:!0}})}),r(_e,Ie),ot()}yt(["change","click"]);var qa=i('<button class="text-muted-foreground hover:text-foreground rounded p-0.5 transition-colors" title="New project" aria-label="New project"><!></button>'),Ja=i('<div class="border-border bg-muted/40 mx-3 mb-3 space-y-2 rounded-md border p-3"><!> <select class="border-input bg-background w-full rounded-md border px-2.5 py-1.5 text-xs outline-none"><option>Public</option><option>Org</option><option>Private</option></select> <div class="flex gap-1.5"><!> <!></div></div>'),Ha=i('<div class="relative mx-3 mb-2"><!> <input placeholder="Filter projects" class="border-input bg-background placeholder:text-muted-foreground focus:border-ring h-7 w-full rounded-md border pr-2 pl-7 text-xs transition-colors outline-none"/></div>'),Wa=i('<span class="bg-primary absolute top-0 bottom-0 left-0 w-0.75" aria-hidden="true"></span>'),Ka=i('<div class="border-border/60 my-2 border-t"></div>'),Qa=i('<span class="bg-primary absolute top-0 bottom-0 left-0 w-0.75" aria-hidden="true"></span>'),Xa=i('<button><!> <span class="flex-1 truncate text-sm font-medium"> </span> <span class="shrink-0 font-mono text-[11px] tabular-nums opacity-60"> </span></button>'),Ya=i('<p class="text-muted-foreground px-2 py-4 text-center text-xs">No projects yet</p>'),Za=i('<p class="text-muted-foreground px-2 py-4 text-center text-xs"> </p>'),eo=i('<aside class="border-border bg-background flex w-60 shrink-0 flex-col overflow-y-auto border-r"><div class="flex items-center justify-between px-4 pt-5 pb-3"><span class="text-muted-foreground text-xs font-medium tracking-wider uppercase">Projects</span> <!></div> <!> <!> <nav class="flex-1 space-y-px pr-2 pb-4"><button><!> <!> <span class="flex-1 truncate text-sm font-medium">All projects</span> <span class="shrink-0 font-mono text-[11px] tabular-nums opacity-60"> </span></button> <!> <!> <!></nav></aside>');function to(_e,t){at(t,!0);let v=h(!1),x=h(""),M=h(""),O=h("public"),B=h(!1),b=h("");const P=L(()=>{const m=e(b).trim().toLowerCase();return m?t.projects.filter(w=>w.name.toLowerCase().includes(m)):t.projects});async function q(){if(e(x).trim()){o(B,!0);try{await t.onCreate({name:e(x).trim(),description:e(M),visibility:e(O)}),o(x,""),o(M,""),o(O,"public"),o(v,!1)}finally{o(B,!1)}}}var ne=eo(),z=s(ne),he=a(s(z),2);{var ye=m=>{var w=qa(),d=s(w);Kt(d,{class:"h-3.5 w-3.5"}),n(w),nt("click",w,()=>o(v,!e(v))),r(m,w)};J(he,m=>{t.canManageProjects&&m(ye)})}n(z);var le=a(z,2);{var de=m=>{var w=Ja(),d=s(w);ut(d,{placeholder:"Project name",class:"h-8 text-xs",get value(){return e(x)},set value(y){o(x,y,!0)}});var k=a(d,2),$=s(k);$.value=$.__value="public";var c=a($);c.value=c.__value="org";var p=a(c);p.value=p.__value="private",n(k);var j=a(k,2),T=s(j);{let y=L(()=>e(B)||!e(x).trim());De(T,{onclick:q,get disabled(){return e(y)},size:"sm",class:"h-6 flex-1 text-xs",children:(E,X)=>{f();var ve=A();K(()=>U(ve,e(B)?"…":"Create")),r(E,ve)},$$slots:{default:!0}})}var ee=a(T,2);De(ee,{onclick:()=>o(v,!1),variant:"ghost",size:"sm",class:"h-6 px-2 text-xs",children:(y,E)=>{kt(y,{class:"h-3 w-3"})},$$slots:{default:!0}}),n(j),n(w),Xt(k,()=>e(O),y=>o(O,y)),r(m,w)};J(le,m=>{e(v)&&t.canManageProjects&&m(de)})}var xe=a(le,2);{var I=m=>{var w=Ha(),d=s(w);Dr(d,{class:"text-muted-foreground pointer-events-none absolute top-1/2 left-2 h-3.5 w-3.5 -translate-y-1/2"});var k=a(d,2);St(k),n(w),ur(k,()=>e(b),$=>o(b,$)),r(m,w)};J(xe,m=>{t.projects.length>4&&m(I)})}var R=a(xe,2),pe=s(R),S=s(pe);{var H=m=>{var w=Wa();r(m,w)};J(S,m=>{t.activeProjectId===null&&m(H)})}var ke=a(S,2);yr(ke,{class:"h-3.5 w-3.5 shrink-0 opacity-70"});var we=a(ke,4),Ne=s(we,!0);n(we),n(pe);var je=a(pe,2);{var Ae=m=>{var w=Ka();r(m,w)};J(je,m=>{e(P).length>0&&m(Ae)})}var Ie=a(je,2);pt(Ie,17,()=>e(P),m=>m.id,(m,w)=>{const d=L(()=>t.activeProjectId===e(w).id),k=L(()=>t.records.filter(E=>E.projectId===e(w).id).length);var $=Xa(),c=s($);{var p=E=>{var X=Qa();r(E,X)};J(c,E=>{e(d)&&E(p)})}var j=a(c,2),T=s(j,!0);n(j);var ee=a(j,2),y=s(ee,!0);n(ee),n($),K(()=>{ft($,1,`group relative flex w-full items-center gap-2 py-1.5 pr-2.5 text-left transition-colors ${e(d)?"bg-accent text-accent-foreground rounded-r-md pl-4":"text-muted-foreground hover:bg-muted/60 hover:text-foreground mx-2 rounded-md pl-2.5"}`),U(T,e(w).name),U(y,e(k))}),nt("click",$,()=>t.onSelect(e(w).id)),r(m,$)});var Z=a(Ie,2);{var ce=m=>{var w=Ya();r(m,w)},ge=m=>{var w=Za(),d=s(w);n(w),K(()=>U(d,`No matches for "${e(b)??""}"`)),r(m,w)};J(Z,m=>{t.projects.length===0?m(ce):e(P).length===0&&e(b)&&m(ge,1)})}n(R),n(ne),K(()=>{ft(pe,1,`group relative flex w-full items-center gap-2 py-1.5 pr-2.5 text-left transition-colors ${t.activeProjectId===null?"bg-accent text-accent-foreground rounded-r-md pl-4":"text-muted-foreground hover:bg-muted/60 hover:text-foreground mx-2 rounded-md pl-2.5"}`),U(Ne,t.records.length)}),nt("click",pe,()=>t.onSelect(null)),r(_e,ne),ot()}yt(["click"]);var ro=i('<p class="text-muted-foreground px-3 py-6 text-center text-xs"> </p>'),ao=i('<p class="text-muted-foreground truncate font-mono text-xs"> </p>'),oo=i('<button type="button"><!> <div class="min-w-0 flex-1"><p class="truncate text-sm font-medium"> </p> <!></div></button>'),no=i('<div class="border-border relative border-b"><!> <input placeholder="Search by name or email" class="placeholder:text-muted-foreground h-9 w-full rounded-t-md bg-transparent pr-9 pl-9 text-sm outline-none"/> <button type="button" class="text-muted-foreground hover:text-foreground absolute top-1/2 right-2 -translate-y-1/2 rounded p-1" aria-label="Cancel"><!></button></div> <div class="max-h-60 overflow-y-auto py-1"><!></div>',1),so=i('<p class="text-muted-foreground truncate font-mono text-xs"> </p>'),io=i('<div class="flex items-center gap-3 p-2.5"><!> <div class="min-w-0 flex-1"><p class="truncate text-sm font-medium"> </p> <!></div> <select class="border-input bg-background h-8 rounded-md border px-2 text-xs outline-none"><option>Owner</option><option>Editor</option><option>Viewer</option></select> <!> <!></div>'),lo=i('<div class="border-border bg-card rounded-md border"><!></div>');function co(_e,t){at(t,!0);let v=h(""),x=h(0),M=h(null),O=h("viewer"),B=h(void 0);const b=L(()=>{const I=e(v).trim().toLowerCase();return I?t.availableUsers.filter(R=>{const pe=(R.displayName??"").toLowerCase(),S=(R.email??"").toLowerCase();return pe.includes(I)||S.includes(I)}).slice(0,50):t.availableUsers.slice(0,50)});$t(()=>{e(b),o(x,0)});function P(I){return I.displayName??I.email??I.id.slice(0,8)}function q(I){o(M,I,!0),o(v,"")}async function ne(){e(M)&&(await t.onAdd(e(M).id,e(O)),o(M,null),o(O,"viewer"))}function z(I){if(!e(M))if(I.key==="ArrowDown")I.preventDefault(),o(x,Math.min(e(x)+1,e(b).length-1),!0),he();else if(I.key==="ArrowUp")I.preventDefault(),o(x,Math.max(e(x)-1,0),!0),he();else if(I.key==="Enter"){I.preventDefault();const R=e(b)[e(x)];R&&q(R)}else I.key==="Escape"&&(I.preventDefault(),t.onCancel())}function he(){e(B)?.querySelector(`[data-idx="${e(x)}"]`)?.scrollIntoView({block:"nearest"})}var ye=lo(),le=s(ye);{var de=I=>{var R=no(),pe=g(R),S=s(pe);Dr(S,{class:"text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-3.5 w-3.5 -translate-y-1/2"});var H=a(S,2);St(H),Mr(H,!0);var ke=a(H,2),we=s(ke);kt(we,{class:"h-3.5 w-3.5"}),n(ke),n(pe);var Ne=a(pe,2),je=s(Ne);{var Ae=Z=>{var ce=ro(),ge=s(ce,!0);n(ce),K(()=>U(ge,t.availableUsers.length===0?"Everyone in this org is already on the project.":`No matches for "${e(v)}"`)),r(Z,ce)},Ie=Z=>{var ce=ze(),ge=g(ce);pt(ge,19,()=>e(b),m=>m.id,(m,w,d)=>{var k=oo(),$=s(k);{let y=L(()=>P(e(w)));ir($,{get name(){return e(y)},size:"sm"})}var c=a($,2),p=s(c),j=s(p,!0);n(p);var T=a(p,2);{var ee=y=>{var E=ao(),X=s(E,!0);n(E),K(()=>U(X,e(w).email)),r(y,E)};J(T,y=>{e(w).displayName&&e(w).email&&y(ee)})}n(c),n(k),K(y=>{jt(k,"data-idx",e(d)),ft(k,1,`flex w-full items-center gap-3 px-3 py-2 text-left transition-colors ${e(x)===e(d)?"bg-accent text-accent-foreground":"hover:bg-muted/60"}`),U(j,y)},[()=>P(e(w))]),nt("click",k,()=>q(e(w))),xr("mouseenter",k,()=>o(x,e(d),!0)),r(m,k)}),r(Z,ce)};J(je,Z=>{e(b).length===0?Z(Ae):Z(Ie,-1)})}n(Ne),Qt(Ne,Z=>o(B,Z),()=>e(B)),nt("keydown",H,z),ur(H,()=>e(v),Z=>o(v,Z)),nt("click",ke,function(...Z){t.onCancel?.apply(this,Z)}),r(I,R)},xe=I=>{var R=io(),pe=s(R);{let m=L(()=>P(e(M)));ir(pe,{get name(){return e(m)},size:"sm"})}var S=a(pe,2),H=s(S),ke=s(H,!0);n(H);var we=a(H,2);{var Ne=m=>{var w=so(),d=s(w,!0);n(w),K(()=>U(d,e(M).email)),r(m,w)};J(we,m=>{e(M).email&&e(M).displayName&&m(Ne)})}n(S);var je=a(S,2),Ae=s(je);Ae.value=Ae.__value="owner";var Ie=a(Ae);Ie.value=Ie.__value="editor";var Z=a(Ie);Z.value=Z.__value="viewer",n(je);var ce=a(je,2);De(ce,{onclick:ne,get disabled(){return t.adding},size:"sm",children:(m,w)=>{f();var d=A();K(()=>U(d,t.adding?"Adding…":"Add")),r(m,d)},$$slots:{default:!0}});var ge=a(ce,2);De(ge,{onclick:()=>o(M,null),variant:"ghost",size:"icon",class:"text-muted-foreground h-8 w-8","aria-label":"Pick a different user",children:(m,w)=>{kt(m,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}}),n(R),K(m=>U(ke,m),[()=>P(e(M))]),Xt(je,()=>e(O),m=>o(O,m)),r(I,R)};J(le,I=>{e(M)?I(xe,-1):I(de)})}n(ye),r(_e,ye),ot()}yt(["keydown","click"]);var vo=i("<!> <!>",1),uo=i('<!> Members <span class="text-muted-foreground ml-1 font-mono text-[11px]"> </span>',1),fo=i("<!> <!>",1),po=i("<!> Delete project",1),go=i('<div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <select id="proj-vis" class="border-input bg-background h-10 w-full rounded-md border px-3 text-sm"><option>Public — any authenticated user can solve</option><option>Org — any org member can solve</option><option>Private — only project members can solve</option></select></div> <div class="flex items-center justify-between pt-2"><!> <div class="flex gap-2"><!> <!></div></div>',1),mo=i('<p class="text-muted-foreground truncate font-mono text-xs"> </p>'),_o=i('<div class="border-border flex items-center gap-3 border-b px-3 py-2.5 last:border-0"><!> <div class="min-w-0 flex-1"><p class="truncate text-sm font-medium"> </p> <!></div> <select class="border-input bg-background h-8 rounded-md border px-2 text-xs outline-none"><option>Owner</option><option>Editor</option><option>Viewer</option></select> <!></div>'),ho=i('<div class="border-border bg-card overflow-hidden rounded-md border"></div>'),xo=i("<!> Add member",1),bo=i("<!> <!>",1),$o=i("<!> <!> <!>",1),yo=i("<!> <!>",1);function wo(_e,t){at(t,!0);let v=h(it(t.project.name)),x=h(it(t.project.description??"")),M=h(it(t.project.visibility)),O=h(!1),B=h(!1),b=h(!1),P=h(null);function q(I){const R=t.users.find(pe=>pe.id===I);return R?.displayName??R?.email??I.slice(0,8)}function ne(I){return t.users.find(R=>R.id===I)?.email}const z=L(()=>{const I=new Set(t.project.members.map(R=>R.userId));return t.users.filter(R=>!I.has(R.id))});async function he(){o(O,!0);try{await t.onSave(t.project.id,{name:e(v),description:e(x),visibility:e(M)})}finally{o(O,!1)}}async function ye(I,R){o(b,!0);try{await t.onAddMember(t.project.id,I,R),o(B,!1)}finally{o(b,!1)}}async function le(I){o(P,I,!0);try{await t.onRemoveMember(t.project.id,I)}finally{o(P,null)}}var de=ze(),xe=g(de);_(xe,()=>Zt,(I,R)=>{R(I,{get open(){return t.open},get onOpenChange(){return t.onOpenChange},children:(pe,S)=>{var H=ze(),ke=g(H);_(ke,()=>Yt,(we,Ne)=>{Ne(we,{class:"max-w-lg",children:(je,Ae)=>{var Ie=yo(),Z=g(Ie);_(Z,()=>Vt,(ge,m)=>{m(ge,{children:(w,d)=>{var k=vo(),$=g(k);_($,()=>Gt,(p,j)=>{j(p,{children:(T,ee)=>{f();var y=A("Project settings");r(T,y)},$$slots:{default:!0}})});var c=a($,2);_(c,()=>Bt,(p,j)=>{j(p,{children:(T,ee)=>{f();var y=A("Manage this project's details and members.");r(T,y)},$$slots:{default:!0}})}),r(w,k)},$$slots:{default:!0}})});var ce=a(Z,2);_(ce,()=>wr,(ge,m)=>{m(ge,{value:"general",class:"mt-2",children:(w,d)=>{var k=$o(),$=g(k);_($,()=>kr,(j,T)=>{T(j,{class:"grid w-full grid-cols-2",children:(ee,y)=>{var E=fo(),X=g(E);_(X,()=>Ft,(se,te)=>{te(se,{value:"general",children:(be,ie)=>{f();var V=A("General");r(be,V)},$$slots:{default:!0}})});var ve=a(X,2);_(ve,()=>Ft,(se,te)=>{te(se,{value:"members",class:"gap-1.5",children:(be,ie)=>{var V=uo(),G=g(V);_r(G,{class:"h-3.5 w-3.5"});var D=a(G,2),C=s(D,!0);n(D),K(()=>U(C,t.project.members.length)),r(be,V)},$$slots:{default:!0}})}),r(ee,E)},$$slots:{default:!0}})});var c=a($,2);_(c,()=>zt,(j,T)=>{T(j,{value:"general",class:"mt-4 space-y-4",children:(ee,y)=>{var E=go(),X=g(E),ve=s(X);He(ve,{for:"proj-name",children:(F,ae)=>{f();var fe=A("Name");r(F,fe)},$$slots:{default:!0}});var se=a(ve,2);ut(se,{id:"proj-name",get value(){return e(v)},set value(F){o(v,F,!0)}}),n(X);var te=a(X,2),be=s(te);He(be,{for:"proj-desc",children:(F,ae)=>{f();var fe=A("Description");r(F,fe)},$$slots:{default:!0}});var ie=a(be,2);er(ie,{id:"proj-desc",rows:2,get value(){return e(x)},set value(F){o(x,F,!0)}}),n(te);var V=a(te,2),G=s(V);He(G,{for:"proj-vis",children:(F,ae)=>{f();var fe=A("Visibility");r(F,fe)},$$slots:{default:!0}});var D=a(G,2),C=s(D);C.value=C.__value="public";var W=a(C);W.value=W.__value="org";var Y=a(W);Y.value=Y.__value="private",n(D),n(V);var me=a(V,2),re=s(me);De(re,{onclick:()=>t.onDelete(t.project.id),variant:"ghost",size:"sm",class:"text-destructive hover:text-destructive gap-1.5 px-2",children:(F,ae)=>{var fe=po(),Q=g(fe);tr(Q,{class:"h-3.5 w-3.5"}),f(),r(F,fe)},$$slots:{default:!0}});var ue=a(re,2),Pe=s(ue);De(Pe,{onclick:()=>t.onOpenChange(!1),variant:"outline",size:"sm",children:(F,ae)=>{f();var fe=A("Cancel");r(F,fe)},$$slots:{default:!0}});var Fe=a(Pe,2);De(Fe,{onclick:he,get disabled(){return e(O)},size:"sm",children:(F,ae)=>{f();var fe=A();K(()=>U(fe,e(O)?"Saving…":"Save")),r(F,fe)},$$slots:{default:!0}}),n(ue),n(me),Xt(D,()=>e(M),F=>o(M,F)),r(ee,E)},$$slots:{default:!0}})});var p=a(c,2);_(p,()=>zt,(j,T)=>{T(j,{value:"members",class:"mt-4 space-y-3",children:(ee,y)=>{var E=bo(),X=g(E);{var ve=V=>{fr(V,{size:"sm",get icon(){return _r},title:"No members yet",description:"Add members to control who can edit this project."})},se=V=>{var G=ho();pt(G,21,()=>t.project.members,D=>`${D.projectId}:${D.userId}`,(D,C)=>{var W=_o(),Y=s(W);{let $e=L(()=>q(e(C).userId));ir(Y,{get name(){return e($e)},size:"sm"})}var me=a(Y,2),re=s(me),ue=s(re,!0);n(re);var Pe=a(re,2);{var Fe=$e=>{var Ue=mo(),Ve=s(Ue,!0);n(Ue),K(Le=>U(Ve,Le),[()=>ne(e(C).userId)]),r($e,Ue)},F=L(()=>ne(e(C).userId)&&ne(e(C).userId)!==q(e(C).userId));J(Pe,$e=>{e(F)&&$e(Fe)})}n(me);var ae=a(me,2),fe=s(ae);fe.value=fe.__value="owner";var Q=a(fe);Q.value=Q.__value="editor";var l=a(Q);l.value=l.__value="viewer",n(ae);var u;br(ae);var N=a(ae,2);{let $e=L(()=>e(P)===e(C).userId);De(N,{onclick:()=>le(e(C).userId),get disabled(){return e($e)},variant:"ghost",size:"icon",class:"text-muted-foreground hover:text-destructive h-7 w-7",children:(Ue,Ve)=>{kt(Ue,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}n(W),K($e=>{U(ue,$e),u!==(u=e(C).role)&&(ae.value=(ae.__value=e(C).role)??"",$r(ae,e(C).role))},[()=>q(e(C).userId)]),nt("change",ae,$e=>t.onUpdateMemberRole(t.project.id,e(C).userId,$e.target.value)),r(D,W)}),n(G),r(V,G)};J(X,V=>{t.project.members.length===0&&!e(B)?V(ve):t.project.members.length>0&&V(se,1)})}var te=a(X,2);{var be=V=>{co(V,{get availableUsers(){return e(z)},get adding(){return e(b)},onAdd:ye,onCancel:()=>o(B,!1)})},ie=V=>{De(V,{onclick:()=>o(B,!0),variant:"outline",size:"sm",class:"gap-1.5",children:(G,D)=>{var C=xo(),W=g(C);Hr(W,{class:"h-3.5 w-3.5"}),f(),r(G,C)},$$slots:{default:!0}})};J(te,V=>{e(B)?V(be):V(ie,-1)})}r(ee,E)},$$slots:{default:!0}})}),r(w,k)},$$slots:{default:!0}})}),r(je,Ie)},$$slots:{default:!0}})}),r(pe,H)},$$slots:{default:!0}})}),r(_e,de),ot()}yt(["change"]);var ko=i("<span><span></span> </span>");function Tr(_e,t){at(t,!0);let v=We(t,"class",3,"");var x=ko(),M=s(x),O=a(M);n(x),K((B,b)=>{ft(x,1,`inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[11px] tracking-wide ${B??""} ${v()??""}`),ft(M,1,`h-1.5 w-1.5 rounded-full ${b??""}`),U(O,` ${t.status??""}`)},[()=>Wr(t.status),()=>Kr(t.status)]),r(_e,x),ot()}var Po=i('<div class="flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-md"><img alt="" class="h-full w-full object-cover"/></div>'),jo=i('<div class="tool-cover-fallback flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-md"><span class="text-foreground/40 text-base font-semibold"> </span></div>'),Co=i('<span class="text-muted-foreground ml-2 text-[12px]"> </span>'),So=i('<div><!> <span class="min-w-0"><span class="font-semibold"> </span> <!></span> <span class="text-muted-foreground"> </span> <span><!></span> <span class="text-muted-foreground font-mono text-[12px]"> </span> <span class="text-right font-mono text-[12px]"> </span> <span class="flex justify-end"><button type="button" class="text-muted-foreground hover:bg-muted hover:text-foreground rounded p-1 transition-colors"><!></button></span></div>'),Do=i('<div class="border-border bg-card overflow-hidden rounded-xl border"><div class="border-border bg-muted/50 text-muted-foreground grid border-b px-4 py-2.5 font-mono text-[10.5px] tracking-widest uppercase"><span></span><span>Definition</span><span>Project</span><span>Status</span><span>Updated</span> <span class="text-right">Runs</span><span></span></div> <!></div>');function No(_e,t){at(t,!0);const v="grid-template-columns: 40px 1.6fr 0.9fr 0.8fr 0.7fr 0.6fr 36px";function x(b){return t.projects.find(P=>P.id===b)?.name??""}var M=Do(),O=s(M);or(O,v);var B=a(O,2);pt(B,19,()=>t.records,b=>b.guid,(b,P,q)=>{var ne=So();or(ne,v);var z=s(ne);{var he=ge=>{var m=Po(),w=s(m);n(m),K(()=>jt(w,"src",e(P).coverImage)),r(ge,m)},ye=ge=>{const m=L(()=>Xr(e(P).guid));var w=jo();let d;var k=s(w),$=s(k,!0);n(k),n(w),K(c=>{d=or(w,"",d,{"--tool-h1":e(m).h1,"--tool-h2":e(m).h2}),U($,c)},[()=>Qr(e(P).displayName)]),r(ge,w)};J(z,ge=>{e(P).coverImage?ge(he):ge(ye,-1)})}var le=a(z,2),de=s(le),xe=s(de,!0);n(de);var I=a(de,2);{var R=ge=>{var m=Co(),w=s(m);n(m),K(d=>U(w,`${d??""}${e(P).description.length>60?"…":""}`),[()=>e(P).description.slice(0,60)]),r(ge,m)};J(I,ge=>{e(P).description&&ge(R)})}n(le);var pe=a(le,2),S=s(pe,!0);n(pe);var H=a(pe,2),ke=s(H);Tr(ke,{get status(){return e(P).status}}),n(H);var we=a(H,2),Ne=s(we,!0);n(we);var je=a(we,2),Ae=s(je,!0);n(je);var Ie=a(je,2),Z=s(Ie),ce=s(Z);Pa(ce,{class:"h-4 w-4"}),n(Z),n(Ie),n(ne),K((ge,m,w)=>{ft(ne,1,`grid items-center gap-4 px-4 py-3 text-[13px] ${e(q)<t.records.length-1?"border-border border-b":""}`),U(xe,e(P).displayName),U(S,ge),U(Ne,m),U(Ae,w),jt(Z,"aria-label",`Open ${e(P).displayName??""}`)},[()=>x(e(P).projectId),()=>jr(e(P).updatedAt),()=>e(P).solveCount.toLocaleString()]),nt("click",Z,()=>t.onOpen(e(P))),r(b,ne)}),n(M),r(_e,M),ot()}yt(["click"]);var Io=i('<p class="text-muted-foreground mt-1 text-sm"> </p>'),To=i('<img class="border-border aspect-4/3 w-full rounded-lg border object-cover"/>'),Ao=i('<div class="border-border bg-muted flex aspect-4/3 w-full items-center justify-center rounded-lg border"><span class="text-muted-foreground font-mono text-[11px] tracking-widest uppercase">No preview</span></div>'),Uo=i("<!> Run",1),Eo=i("<!> <!>",1),Mo=i('<div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Category</p> <p class="mt-1 text-sm"> </p></div>'),Oo=i('<span class="bg-muted text-muted-foreground rounded px-2 py-0.5 font-mono text-[11px]"> </span>'),Lo=i('<div><!> <div class="flex flex-wrap gap-1.5"></div></div>'),Ro=i('<div class="border-border flex items-start justify-between gap-4 border-b p-6"><div class="min-w-0"><div class="flex items-center gap-2"><!> <span class="text-muted-foreground font-mono text-[11px] tracking-wide uppercase"> </span></div> <h2 class="mt-2.5 text-xl font-semibold tracking-tight"> </h2> <!></div> <!></div> <div class="flex-1 space-y-5 overflow-y-auto p-6"><!> <div class="flex gap-2"><!> <!></div> <!> <div class="grid grid-cols-2 gap-x-4 gap-y-3"><div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Updated</p> <p class="mt-1 text-sm"> </p></div> <div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Runs</p> <p class="mt-1 text-sm"> </p></div> <!></div> <!></div>',1);function Fo(_e,t){at(t,!0),Cr(_e,{get onClose(){return t.onClose},children:(v,x)=>{var M=Ro(),O=g(M),B=s(O),b=s(B),P=s(b);Tr(P,{get status(){return t.record.status}});var q=a(P,2),ne=s(q,!0);n(q),n(b);var z=a(b,2),he=s(z,!0);n(z);var ye=a(z,2);{var le=c=>{var p=Io(),j=s(p,!0);n(p),K(()=>U(j,t.record.description)),r(c,p)};J(ye,c=>{t.record.description&&c(le)})}n(B);var de=a(B,2);De(de,{variant:"ghost",size:"icon",get onclick(){return t.onClose},class:"mt-0.5 h-8 w-8 shrink-0",children:(c,p)=>{kt(c,{class:"h-4 w-4"})},$$slots:{default:!0}}),n(O);var xe=a(O,2),I=s(xe);{var R=c=>{var p=To();K(()=>{jt(p,"src",t.record.coverImage),jt(p,"alt",t.record.displayName)}),r(c,p)},pe=c=>{var p=Ao();r(c,p)};J(I,c=>{t.record.coverImage?c(R):c(pe,-1)})}var S=a(I,2),H=s(S);De(H,{class:"flex-1",onclick:()=>t.onOpenRunner(t.record.guid,"live"),children:(c,p)=>{var j=Uo(),T=g(j);vr(T,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(c,j)},$$slots:{default:!0}});var ke=a(H,2);{var we=c=>{var p=Eo(),j=g(p);{var T=y=>{De(y,{variant:"outline",size:"icon",onclick:()=>t.onShare(t.record),title:"Share links",children:(E,X)=>{Sa(E,{class:"h-4 w-4"})},$$slots:{default:!0}})};J(j,y=>{t.showShare&&y(T)})}var ee=a(j,2);De(ee,{variant:"outline",onclick:()=>t.onEdit(t.record),children:(y,E)=>{f();var X=A("Edit");r(y,X)},$$slots:{default:!0}}),r(c,p)};J(ke,c=>{t.canEdit&&c(we)})}n(S);var Ne=a(S,2);cr(Ne,{});var je=a(Ne,2),Ae=s(je),Ie=a(s(Ae),2),Z=s(Ie);n(Ie),n(Ae);var ce=a(Ae,2),ge=a(s(ce),2),m=s(ge,!0);n(ge),n(ce);var w=a(ce,2);{var d=c=>{var p=Mo(),j=a(s(p),2),T=s(j,!0);n(j),n(p),K(()=>U(T,t.record.category)),r(c,p)};J(w,c=>{t.record.category&&c(d)})}n(je);var k=a(je,2);{var $=c=>{var p=Lo(),j=s(p);cr(j,{class:"mb-4"});var T=a(j,2);pt(T,20,()=>t.record.tags,ee=>ee,(ee,y)=>{var E=Oo(),X=s(E);n(E),K(()=>U(X,`#${y??""}`)),r(ee,E)}),n(T),n(p),r(c,p)};J(k,c=>{t.record.tags?.length&&c($)})}n(xe),K((c,p)=>{U(ne,t.projectName),U(he,t.record.displayName),U(Z,`${c??""} ago`),U(m,p)},[()=>jr(t.record.updatedAt),()=>t.record.solveCount.toLocaleString()]),r(v,M)},$$slots:{default:!0}}),ot()}var zo=i(`The upload becomes <strong> </strong> as a draft. The live channel stays unchanged
|
|
3
|
-
until you publish.`,1),Vo=i("<!> <!>",1),Go=i('<p class="truncate text-sm font-medium"> </p> <p class="text-muted-foreground text-xs">Click to choose a different file</p>',1),Bo=i('<p class="text-sm font-medium">Pick a .gh or .ghx file</p> <p class="text-muted-foreground text-xs"> </p>',1),qo=i('What changed? <span class="text-muted-foreground font-normal">(optional)</span>',1),Jo=i("<!> ",1),Ho=i("<!> <!>",1),Wo=i('<!> <div class="mt-4 space-y-4"><div class="space-y-1.5"><!> <label for="upload-file" class="border-border hover:bg-accent/30 flex cursor-pointer items-center gap-3 rounded-md border-2 border-dashed px-4 py-5 transition-colors"><!> <div class="min-w-0 flex-1"><!></div></label> <input id="upload-file" type="file" accept=".gh,.ghx" class="hidden"/></div> <div class="space-y-1.5"><!> <!></div></div> <!>',1);function Ko(_e,t){at(t,!0);let v=h(void 0),x=h(null),M=h(""),O=h(!1);$t(()=>{t.open||B()});function B(){o(x,null),o(M,""),o(O,!1),e(v)&&(e(v).value="")}function b(){o(x,e(v)?.files?.[0]?.name??null,!0)}async function P(){if(!e(v)?.files?.length)return;o(O,!0);const z=new FormData;z.append("file",e(v).files[0]),e(M).trim()&&z.append("changeNote",e(M).trim());try{const he=await fetch(`/api/definitions/${t.definitionGuid}`,{method:"POST",body:z});if(he.ok){const ye=await he.json();Se.success(`v${ye.version?.versionNumber??t.nextVersionNumber} uploaded as draft`),t.onUploaded(),await ct(),t.onOpenChange(!1)}else{const ye=await he.json().catch(()=>({}));Se.error(ye.message||ye.error||"Upload failed")}}catch{Se.error("Upload failed")}finally{o(O,!1)}}var q=ze(),ne=g(q);_(ne,()=>Zt,(z,he)=>{he(z,{get open(){return t.open},get onOpenChange(){return t.onOpenChange},children:(ye,le)=>{var de=ze(),xe=g(de);_(xe,()=>Yt,(I,R)=>{R(I,{class:"max-w-md",children:(pe,S)=>{var H=Wo(),ke=g(H);_(ke,()=>Vt,(p,j)=>{j(p,{children:(T,ee)=>{var y=Vo(),E=g(y);_(E,()=>Gt,(ve,se)=>{se(ve,{children:(te,be)=>{f();var ie=A("Upload new version");r(te,ie)},$$slots:{default:!0}})});var X=a(E,2);_(X,()=>Bt,(ve,se)=>{se(ve,{children:(te,be)=>{f();var ie=zo(),V=a(g(ie)),G=s(V);n(V),f(),K(()=>U(G,`v${t.nextVersionNumber??""}`)),r(te,ie)},$$slots:{default:!0}})}),r(T,y)},$$slots:{default:!0}})});var we=a(ke,2),Ne=s(we),je=s(Ne);He(je,{for:"upload-file",children:(p,j)=>{f();var T=A("Grasshopper file");r(p,T)},$$slots:{default:!0}});var Ae=a(je,2),Ie=s(Ae);ja(Ie,{class:"text-muted-foreground h-5 w-5 shrink-0"});var Z=a(Ie,2),ce=s(Z);{var ge=p=>{var j=Go(),T=g(j),ee=s(T,!0);n(T),f(2),K(()=>U(ee,e(x))),r(p,j)},m=p=>{var j=Bo(),T=a(g(j),2),ee=s(T);n(T),K(()=>U(ee,`Becomes v${t.nextVersionNumber??""} draft`)),r(p,j)};J(ce,p=>{e(x)?p(ge):p(m,-1)})}n(Z),n(Ae);var w=a(Ae,2);Qt(w,p=>o(v,p),()=>e(v)),n(Ne);var d=a(Ne,2),k=s(d);He(k,{for:"upload-note",children:(p,j)=>{f();var T=qo();f(),r(p,T)},$$slots:{default:!0}});var $=a(k,2);er($,{id:"upload-note",rows:2,maxlength:1e3,placeholder:"e.g. Fixed wall thickness calculation",get value(){return e(M)},set value(p){o(M,p,!0)}}),n(d),n(we);var c=a(we,2);_(c,()=>Wt,(p,j)=>{j(p,{class:"mt-4",children:(T,ee)=>{var y=Ho(),E=g(y);De(E,{variant:"outline",onclick:()=>t.onOpenChange(!1),children:(ve,se)=>{f();var te=A("Cancel");r(ve,te)},$$slots:{default:!0}});var X=a(E,2);{let ve=L(()=>e(O)||!e(x));De(X,{onclick:P,get disabled(){return e(ve)},children:(se,te)=>{var be=ze(),ie=g(be);{var V=D=>{var C=A("Uploading…");r(D,C)},G=D=>{var C=Jo(),W=g(C);Nr(W,{class:"mr-1.5 h-3.5 w-3.5"});var Y=a(W);K(()=>U(Y,` Upload v${t.nextVersionNumber??""}`)),r(D,C)};J(ie,D=>{e(O)?D(V):D(G,-1)})}r(se,be)},$$slots:{default:!0}})}r(T,y)},$$slots:{default:!0}})}),nt("change",w,b),r(pe,H)},$$slots:{default:!0}})}),r(ye,de)},$$slots:{default:!0}})}),r(_e,q),ot()}yt(["change"]);var Qo=i('<div class="border-border bg-muted/30 rounded-md border px-4 py-3"><p class="text-muted-foreground text-xs">Loading versions…</p></div>'),Xo=i('<div class="border-border bg-muted/30 text-muted-foreground rounded-md border px-4 py-3 text-sm">No versions yet. Upload one to get started.</div>'),Yo=i('<span class="text-muted-foreground">· newer version uploaded</span>'),Zo=i('<span class="text-muted-foreground">· up to date</span>'),en=i("<span><strong>Live now</strong> </span> <!>",1),tn=i('<span class="text-muted-foreground">Not yet published — promote a draft to go live</span>'),rn=i("<!> ",1),an=i('<div class="border-border bg-muted/30 flex items-center justify-between gap-3 rounded-md border px-4 py-3"><div class="flex min-w-0 items-center gap-2 text-sm"><span class="bg-success h-2 w-2 shrink-0 rounded-full"></span> <!></div> <!></div>'),on=i("<!> Upload new version",1),nn=i('<span class="bg-success/10 text-success rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">live</span>'),sn=i('<span class="bg-warning/10 text-warning rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">draft</span>'),ln=i('<p class="mt-1 truncate text-sm"> </p>'),dn=i('<p class="text-muted-foreground mt-1 truncate font-mono text-xs"> </p>'),cn=i("<!> Run",1),vn=i("<!> Run",1),un=i("<!> <!>",1),fn=i('<div><div class="flex items-start justify-between gap-3"><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-2"><span class="font-mono text-sm font-semibold"> </span> <!> <!></div> <!> <p class="text-muted-foreground mt-1 text-xs"> </p></div> <div class="flex shrink-0 items-center gap-1"><!> <!></div></div></div>'),pn=i('<div class="space-y-2"></div>'),gn=i("<!> <!>",1),mn=i("<!> <!>",1),_n=i("<!> <!>",1),hn=i("<!> <!>",1),xn=i("<!> <!>",1),bn=i("<!> <!>",1),$n=i(`<div class="space-y-4"><!> <div class="flex items-center justify-between gap-3"><div><h3 class="text-base font-semibold tracking-tight">Versions</h3> <p class="text-muted-foreground mt-1 text-xs">Each upload becomes a version. The live version is what runs when someone uses this
|
|
4
|
-
definition.</p></div> <!></div> <!></div> <!> <!> <!>`,1);function yn(_e,t){at(t,!0);let v=h(it([])),x=h(null),M=h(null),O=h(!0),B=h(!1),b=h(null),P=h(!1),q=h(!1),ne=h(null),z=h(null);$t(()=>{t.definitionGuid,he()});async function he(){o(O,!0);try{const d=await fetch(`/api/definitions/${t.definitionGuid}/versions`);if(!d.ok)throw new Error(`${d.status}`);const k=await d.json();o(v,k.versions,!0),o(x,k.liveVersionId,!0),o(M,k.draftVersionId,!0)}catch{Se.error("Failed to load versions")}finally{o(O,!1)}}const ye=L(()=>e(v).find(d=>d.id===e(x))??null),le=L(()=>e(v).find(d=>d.id===e(M))??null),de=L(()=>e(le)!==null&&e(ye)!==null&&e(le).id!==e(ye).id),xe=L(()=>(e(v)[0]?.versionNumber??0)+1);function I(d){const k=Date.now()-new Date(d).getTime(),$=Math.floor(k/6e4);if($<1)return"Just now";if($<60)return`${$}m ago`;const c=Math.floor($/60);if(c<24)return`${c}h ago`;const p=Math.floor(c/24);return p===1?"Yesterday":p<30?`${p}d ago`:new Date(d).toLocaleDateString()}async function R(d){o(q,!0);try{const k=d?{versionId:d.id}:{},$=await fetch(`/api/definitions/${t.definitionGuid}/publish`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(k)});if(!$.ok){const p=await $.json().catch(()=>({}));Se.error(p.message||p.error||"Failed to publish");return}const c=await $.json();Se.success(`v${c.version?.versionNumber??"?"} is now live`),await he(),await ct()}catch{Se.error("Failed to publish")}finally{o(q,!1),o(b,null),o(P,!1)}}async function pe(d){o(z,d.id,!0);try{const k=await fetch(`/api/definitions/${t.definitionGuid}/versions/${d.id}`,{method:"DELETE"});if(!k.ok){const $=await k.json().catch(()=>({}));Se.error($.message||$.error||"Failed to delete version. Live or draft versions cannot be deleted.");return}Se.success(`v${d.versionNumber} deleted`),await he(),await ct()}catch{Se.error("Failed to delete version")}finally{o(z,null),o(ne,null)}}var S=$n(),H=g(S),ke=s(H);{var we=d=>{var k=Qo();r(d,k)},Ne=d=>{var k=Xo();r(d,k)},je=d=>{var k=an(),$=s(k),c=a(s($),2);{var p=y=>{var E=en(),X=g(E),ve=a(s(X));n(X);var se=a(X,2);{var te=ie=>{var V=Yo();r(ie,V)},be=ie=>{var V=Zo();r(ie,V)};J(se,ie=>{e(de)&&e(le)?ie(te):ie(be,-1)})}K(()=>U(ve,` — v${e(ye).versionNumber??""}`)),r(y,E)},j=y=>{var E=tn();r(y,E)};J(c,y=>{e(ye)?y(p):y(j,-1)})}n($);var T=a($,2);{var ee=y=>{De(y,{size:"sm",onclick:()=>R(null),get disabled(){return e(q)},class:"shrink-0",children:(E,X)=>{var ve=rn(),se=g(ve);ka(se,{class:"mr-1.5 h-3.5 w-3.5"});var te=a(se);K(()=>U(te,` Publish v${e(le).versionNumber??""}`)),r(E,ve)},$$slots:{default:!0}})};J(T,y=>{e(de)&&e(le)&&y(ee)})}n(k),r(d,k)};J(ke,d=>{e(O)?d(we):e(v).length===0?d(Ne,1):d(je,-1)})}var Ae=a(ke,2),Ie=a(s(Ae),2);De(Ie,{variant:"outline",size:"sm",onclick:()=>o(B,!0),class:"shrink-0",children:(d,k)=>{var $=on(),c=g($);Nr(c,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(d,$)},$$slots:{default:!0}}),n(Ae);var Z=a(Ae,2);{var ce=d=>{var k=pn();pt(k,21,()=>e(v),$=>$.id,($,c)=>{const p=L(()=>e(c).id===e(x)),j=L(()=>e(c).id===e(M)&&!e(p));var T=fn(),ee=s(T),y=s(ee),E=s(y),X=s(E),ve=s(X);n(X);var se=a(X,2);{var te=F=>{var ae=nn();r(F,ae)};J(se,F=>{e(p)&&F(te)})}var be=a(se,2);{var ie=F=>{var ae=sn();r(F,ae)};J(be,F=>{e(j)&&F(ie)})}n(E);var V=a(E,2);{var G=F=>{var ae=ln(),fe=s(ae,!0);n(ae),K(()=>U(fe,e(c).changeNote)),r(F,ae)},D=F=>{var ae=dn(),fe=s(ae,!0);n(ae),K(()=>U(fe,e(c).originalFilename)),r(F,ae)};J(V,F=>{e(c).changeNote?F(G):e(c).originalFilename&&F(D,1)})}var C=a(V,2),W=s(C);n(C),n(y);var Y=a(y,2),me=s(Y);{var re=F=>{De(F,{size:"sm",variant:"outline",onclick:()=>t.onOpenRunner(t.definitionGuid,"live"),children:(ae,fe)=>{var Q=cn(),l=g(Q);vr(l,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(ae,Q)},$$slots:{default:!0}})},ue=F=>{var ae=un(),fe=g(ae);{var Q=u=>{De(u,{size:"sm",variant:"ghost",onclick:()=>t.onOpenRunner(t.definitionGuid,"draft"),children:(N,$e)=>{var Ue=vn(),Ve=g(Ue);vr(Ve,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(N,Ue)},$$slots:{default:!0}})};J(fe,u=>{e(j)&&u(Q)})}var l=a(fe,2);De(l,{size:"sm",variant:"outline",get disabled(){return e(q)},onclick:()=>{o(b,e(c),!0),o(P,!0)},children:(u,N)=>{f();var $e=A("Make live");r(u,$e)},$$slots:{default:!0}}),r(F,ae)};J(me,F=>{e(p)?F(re):F(ue,-1)})}var Pe=a(me,2);{var Fe=F=>{{let ae=L(()=>e(z)===e(c).id);De(F,{size:"sm",variant:"ghost",onclick:()=>o(ne,e(c),!0),get disabled(){return e(ae)},class:"text-muted-foreground hover:text-destructive h-8 w-8 p-0","aria-label":"Delete version",children:(fe,Q)=>{tr(fe,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}};J(Pe,F=>{!e(p)&&!e(j)&&F(Fe)})}n(Y),n(ee),n(T),K(F=>{ft(T,1,`rounded-md border p-3 transition-colors ${e(p)?"border-primary/40 bg-accent/40":"border-border bg-card hover:bg-muted/30"}`),U(ve,`v${e(c).versionNumber??""}`),U(W,`Uploaded ${F??""}`)},[()=>I(e(c).uploadedAt)]),r($,T)}),n(k),r(d,k)};J(Z,d=>{!e(O)&&e(v).length>0&&d(ce)})}n(H);var ge=a(H,2);Ko(ge,{get definitionGuid(){return t.definitionGuid},get nextVersionNumber(){return e(xe)},get open(){return e(B)},onOpenChange:d=>o(B,d,!0),onUploaded:he});var m=a(ge,2);_(m,()=>Dt,(d,k)=>{k(d,{get open(){return e(P)},onOpenChange:$=>{$||(o(b,null),o(P,!1))},children:($,c)=>{var p=ze(),j=g(p);_(j,()=>Nt,(T,ee)=>{ee(T,{children:(y,E)=>{var X=_n(),ve=g(X);_(ve,()=>It,(te,be)=>{be(te,{children:(ie,V)=>{var G=gn(),D=g(G);_(D,()=>Tt,(W,Y)=>{Y(W,{children:(me,re)=>{var ue=ze(),Pe=g(ue);{var Fe=ae=>{var fe=A();K(()=>U(fe,`Make v${e(b).versionNumber??""} live?`)),r(ae,fe)},F=ae=>{var fe=A("Publish current draft?");r(ae,fe)};J(Pe,ae=>{e(b)?ae(Fe):ae(F,-1)})}r(me,ue)},$$slots:{default:!0}})});var C=a(D,2);_(C,()=>At,(W,Y)=>{Y(W,{children:(me,re)=>{var ue=ze(),Pe=g(ue);{var Fe=fe=>{var Q=A();K(()=>U(Q,`Rolling back to an older version. Anyone running this definition will immediately get v${e(b).versionNumber??""}
|
|
5
|
-
instead of v${e(ye).versionNumber??""}.`)),r(fe,Q)},F=fe=>{var Q=A();K(()=>U(Q,`Anyone running this definition will immediately get v${e(b).versionNumber??""}
|
|
6
|
-
instead of v${e(ye)?.versionNumber??"—"??""}.`)),r(fe,Q)},ae=fe=>{var Q=A(`Promotes the current draft to live. Everyone running this definition gets the new version
|
|
7
|
-
immediately.`);r(fe,Q)};J(Pe,fe=>{e(b)&&e(ye)&&e(b).versionNumber<e(ye).versionNumber?fe(Fe):e(b)?fe(F,1):fe(ae,-1)})}r(me,ue)},$$slots:{default:!0}})}),r(ie,G)},$$slots:{default:!0}})});var se=a(ve,2);_(se,()=>Ut,(te,be)=>{be(te,{children:(ie,V)=>{var G=mn(),D=g(G);_(D,()=>Et,(W,Y)=>{Y(W,{children:(me,re)=>{f();var ue=A("Cancel");r(me,ue)},$$slots:{default:!0}})});var C=a(D,2);_(C,()=>Mt,(W,Y)=>{Y(W,{onclick:()=>R(e(b)),get disabled(){return e(q)},children:(me,re)=>{f();var ue=A();K(()=>U(ue,e(q)?"Publishing…":"Publish")),r(me,ue)},$$slots:{default:!0}})}),r(ie,G)},$$slots:{default:!0}})}),r(y,X)},$$slots:{default:!0}})}),r($,p)},$$slots:{default:!0}})});var w=a(m,2);{let d=L(()=>!!e(ne));_(w,()=>Dt,(k,$)=>{$(k,{get open(){return e(d)},onOpenChange:c=>!c&&o(ne,null),children:(c,p)=>{var j=ze(),T=g(j);_(T,()=>Nt,(ee,y)=>{y(ee,{children:(E,X)=>{var ve=bn(),se=g(ve);_(se,()=>It,(be,ie)=>{ie(be,{children:(V,G)=>{var D=hn(),C=g(D);_(C,()=>Tt,(Y,me)=>{me(Y,{children:(re,ue)=>{f();var Pe=A();K(()=>U(Pe,`Delete v${e(ne)?.versionNumber??""}?`)),r(re,Pe)},$$slots:{default:!0}})});var W=a(C,2);_(W,()=>At,(Y,me)=>{me(Y,{children:(re,ue)=>{f();var Pe=A(`This permanently removes the version's file. The live and draft versions cannot be deleted —
|
|
8
|
-
repoint first.`);r(re,Pe)},$$slots:{default:!0}})}),r(V,D)},$$slots:{default:!0}})});var te=a(se,2);_(te,()=>Ut,(be,ie)=>{ie(be,{children:(V,G)=>{var D=xn(),C=g(D);_(C,()=>Et,(Y,me)=>{me(Y,{children:(re,ue)=>{f();var Pe=A("Cancel");r(re,Pe)},$$slots:{default:!0}})});var W=a(C,2);{let Y=L(()=>!!e(z));_(W,()=>Mt,(me,re)=>{re(me,{onclick:()=>e(ne)&&pe(e(ne)),get disabled(){return e(Y)},children:(ue,Pe)=>{f();var Fe=A();K(()=>U(Fe,e(z)?"Deleting…":"Delete")),r(ue,Fe)},$$slots:{default:!0}})})}r(V,D)},$$slots:{default:!0}})}),r(E,ve)},$$slots:{default:!0}})}),r(c,j)},$$slots:{default:!0}})})}r(_e,S),ot()}var wn=i("<!> <!>",1),kn=i('<p class="text-warning flex items-start gap-1.5 text-xs"><!> Draft links expose the unpublished version. Use only for reviewers.</p>'),Pn=i('<div class="mt-2 ml-6"><!></div>'),jn=i('<div class="mt-2 ml-6"><input type="datetime-local" class="border-input bg-background h-8 rounded-md border px-2 text-sm"/></div>'),Cn=i("<!> <!>",1),Sn=i(`<!> <div class="mt-4 space-y-4"><div class="space-y-1.5"><!> <select id="sl-channel" class="border-input bg-background h-9 w-full rounded-md border px-3 text-sm"><option>Live — recipients see the published version</option><option>Draft — recipients see the unpublished version</option></select> <!></div> <div class="space-y-1.5"><!> <!></div> <div class="border-border rounded-md border p-3"><label class="flex cursor-pointer items-start gap-3"><input type="checkbox" class="mt-0.5 shrink-0"/> <div class="min-w-0"><p class="text-sm font-medium">Allow solve</p> <p class="text-muted-foreground mt-0.5 text-xs">When off, recipients can view the schema and parameters but can't run solves. When
|
|
9
|
-
on, every solve counts against the cap.</p></div></label></div> <div class="border-border rounded-md border p-3"><label class="flex cursor-pointer items-start gap-3"><input type="checkbox" class="mt-0.5 shrink-0"/> <div class="min-w-0 flex-1"><p class="text-sm font-medium">Cap total solves</p> <p class="text-muted-foreground mt-0.5 text-xs"> </p></div></label> <!></div> <div class="border-border rounded-md border p-3"><label class="flex cursor-pointer items-start gap-3"><input type="checkbox" class="mt-0.5 shrink-0"/> <div class="min-w-0 flex-1"><p class="text-sm font-medium">Set expiry</p> <p class="text-muted-foreground mt-0.5 text-xs">The link stops working after this date. Off = never expires.</p></div></label> <!></div></div> <!>`,1),Dn=i("<!> <!>",1),Nn=i("<!> Copied",1),In=i("<!> Copy",1),Tn=i(`<!> <div class="mt-4 space-y-3"><div class="border-warning/40 bg-warning/5 rounded-md border p-3"><p class="text-warning flex items-start gap-2 text-xs"><!> <span>This URL grants the configured access to anyone who receives it. Treat it like a
|
|
10
|
-
password — revoke it immediately if it's compromised.</span></p></div> <div class="border-border bg-muted/40 rounded-md border p-3"><p class="text-muted-foreground mb-2 text-xs font-medium tracking-wider uppercase">Share URL</p> <div class="flex items-start gap-2"><code class="bg-background min-w-0 flex-1 rounded p-2 font-mono text-xs break-all"> </code> <!></div></div></div> <!>`,1);function An(_e,t){at(t,!0);let v=h("live"),x=h(!0),M=h(""),O=h(!1),B=h(""),b=h(!0),P=h(it(Rt)),q=h(!1),ne=h(null),z=h(null),he=h(!1);$t(()=>{t.open||ye()});function ye(){o(v,"live"),o(x,!0),o(M,""),o(O,!1),o(B,""),o(b,!0),o(P,Rt,!0),o(ne,null),o(z,null),o(he,!1)}async function le(){if(!(e(b)&&e(P)>Rt&&!confirm(`You're raising the cap above the default of ${Rt}. An uncapped or high-cap link is a denial-of-wallet vector if leaked. Continue?`))&&!(!e(b)&&!confirm("Removing the cap means an unlimited number of solves on this link. Recommended only for trusted recipients. Continue?"))){o(q,!0);try{const R={channel:e(v),allowSolve:e(x),...e(M).trim()?{name:e(M).trim()}:{},maxSolves:e(b)?e(P):null,...e(O)&&e(B)?{expiresAt:new Date(e(B)).toISOString()}:{}},pe=await fetch(`/api/definitions/${t.definitionGuid}/share-links`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(R)});if(!pe.ok){const H=await pe.json().catch(()=>({}));Se.error(H.message||H.error||"Failed to mint share link");return}const S=await pe.json();o(ne,S.token,!0),o(z,`${window.location.origin}/library/${t.definitionGuid}?token=${S.token}`),t.onMinted()}catch{Se.error("Failed to mint share link")}finally{o(q,!1)}}}async function de(){if(e(z))try{await navigator.clipboard.writeText(e(z)),o(he,!0),setTimeout(()=>o(he,!1),2e3)}catch{Se.error("Could not copy to clipboard")}}var xe=ze(),I=g(xe);_(I,()=>Zt,(R,pe)=>{pe(R,{get open(){return t.open},get onOpenChange(){return t.onOpenChange},children:(S,H)=>{var ke=ze(),we=g(ke);_(we,()=>Yt,(Ne,je)=>{je(Ne,{class:"max-w-lg",children:(Ae,Ie)=>{var Z=ze(),ce=g(Z);{var ge=w=>{var d=Sn(),k=g(d);_(k,()=>Vt,(Q,l)=>{l(Q,{children:(u,N)=>{var $e=wn(),Ue=g($e);_(Ue,()=>Gt,(Le,Be)=>{Be(Le,{children:(Ye,Ke)=>{f();var et=A("New share link");r(Ye,et)},$$slots:{default:!0}})});var Ve=a(Ue,2);_(Ve,()=>Bt,(Le,Be)=>{Be(Le,{children:(Ye,Ke)=>{f();var et=A(`Anyone with the link gets the access you configure here. Caps and expiry are the
|
|
11
|
-
load-bearing protection — they assume the URL will eventually leak.`);r(Ye,et)},$$slots:{default:!0}})}),r(u,$e)},$$slots:{default:!0}})});var $=a(k,2),c=s($),p=s(c);He(p,{for:"sl-channel",children:(Q,l)=>{f();var u=A("Channel");r(Q,u)},$$slots:{default:!0}});var j=a(p,2),T=s(j);T.value=T.__value="live";var ee=a(T);ee.value=ee.__value="draft",n(j);var y=a(j,2);{var E=Q=>{var l=kn(),u=s(l);dr(u,{class:"mt-0.5 h-3 w-3 shrink-0"}),f(),n(l),r(Q,l)};J(y,Q=>{e(v)==="draft"&&Q(E)})}n(c);var X=a(c,2),ve=s(X);He(ve,{for:"sl-label",children:(Q,l)=>{f();var u=A("Label (optional)");r(Q,u)},$$slots:{default:!0}});var se=a(ve,2);ut(se,{id:"sl-label",placeholder:"e.g. Demo for Acme",get value(){return e(M)},set value(Q){o(M,Q,!0)}}),n(X);var te=a(X,2),be=s(te),ie=s(be);St(ie),f(2),n(be),n(te);var V=a(te,2),G=s(V),D=s(G);St(D);var C=a(D,2),W=a(s(C),2),Y=s(W);n(W),n(C),n(G);var me=a(G,2);{var re=Q=>{var l=Pn(),u=s(l);ut(u,{type:"number",min:1,class:"h-8 w-32 text-sm",get value(){return e(P)},set value(N){o(P,N,!0)}}),n(l),r(Q,l)};J(me,Q=>{e(b)&&Q(re)})}n(V);var ue=a(V,2),Pe=s(ue),Fe=s(Pe);St(Fe),f(2),n(Pe);var F=a(Pe,2);{var ae=Q=>{var l=jn(),u=s(l);St(u),n(l),ur(u,()=>e(B),N=>o(B,N)),r(Q,l)};J(F,Q=>{e(O)&&Q(ae)})}n(ue),n($);var fe=a($,2);_(fe,()=>Wt,(Q,l)=>{l(Q,{class:"mt-4",children:(u,N)=>{var $e=Cn(),Ue=g($e);De(Ue,{variant:"outline",onclick:()=>t.onOpenChange(!1),children:(Le,Be)=>{f();var Ye=A("Cancel");r(Le,Ye)},$$slots:{default:!0}});var Ve=a(Ue,2);{let Le=L(()=>e(q)||e(O)&&!e(B)||e(b)&&e(P)<1);De(Ve,{onclick:le,get disabled(){return e(Le)},children:(Be,Ye)=>{f();var Ke=A();K(()=>U(Ke,e(q)?"Creating…":"Create link")),r(Be,Ke)},$$slots:{default:!0}})}r(u,$e)},$$slots:{default:!0}})}),K(Q=>U(Y,`Default ${Q??""}. Recommended. Uncapped
|
|
12
|
-
links are a denial-of-wallet risk if leaked.`),[()=>Rt.toLocaleString()]),Xt(j,()=>e(v),Q=>o(v,Q)),nr(ie,()=>e(x),Q=>o(x,Q)),nr(D,()=>e(b),Q=>o(b,Q)),nr(Fe,()=>e(O),Q=>o(O,Q)),r(w,d)},m=w=>{var d=Tn(),k=g(d);_(k,()=>Vt,(se,te)=>{te(se,{children:(be,ie)=>{var V=Dn(),G=g(V);_(G,()=>Gt,(C,W)=>{W(C,{children:(Y,me)=>{f();var re=A("Share link ready");r(Y,re)},$$slots:{default:!0}})});var D=a(G,2);_(D,()=>Bt,(C,W)=>{W(C,{children:(Y,me)=>{f();var re=A(`Copy the link now — this is the only time you'll see it. The server stores only a hash; we
|
|
13
|
-
cannot show it again.`);r(Y,re)},$$slots:{default:!0}})}),r(be,V)},$$slots:{default:!0}})});var $=a(k,2),c=s($),p=s(c),j=s(p);dr(j,{class:"mt-0.5 h-3.5 w-3.5 shrink-0"}),f(2),n(p),n(c);var T=a(c,2),ee=a(s(T),2),y=s(ee),E=s(y,!0);n(y);var X=a(y,2);{let se=L(()=>e(he)?"default":"outline");De(X,{size:"sm",get variant(){return e(se)},onclick:de,class:"shrink-0",children:(te,be)=>{var ie=ze(),V=g(ie);{var G=C=>{var W=Nn(),Y=g(W);wa(Y,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(C,W)},D=C=>{var W=In(),Y=g(W);ia(Y,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(C,W)};J(V,C=>{e(he)?C(G):C(D,-1)})}r(te,ie)},$$slots:{default:!0}})}n(ee),n(T),n($);var ve=a($,2);_(ve,()=>Wt,(se,te)=>{te(se,{class:"mt-4",children:(be,ie)=>{De(be,{onclick:()=>t.onOpenChange(!1),children:(V,G)=>{f();var D=A("Done");r(V,D)},$$slots:{default:!0}})},$$slots:{default:!0}})}),K(()=>U(E,e(z))),r(w,d)};J(ce,w=>{e(ne)?w(m,-1):w(ge)})}r(Ae,Z)},$$slots:{default:!0}})}),r(S,ke)},$$slots:{default:!0}})}),r(_e,xe),ot()}var Un=i('<div class="border-border rounded-md border p-6 text-center"><p class="text-muted-foreground text-xs">Loading…</p></div>'),En=i("<!> New link",1),Mn=i("<!> New link",1),On=i('<span class="bg-muted text-muted-foreground rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">view-only</span>'),Ln=i('<span class="bg-destructive/10 text-destructive flex items-center gap-1 rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase"><!> expired</span>'),Rn=i('<span class="bg-destructive/10 text-destructive rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">cap reached</span>'),Fn=i('<div><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-1.5"><p class="truncate text-sm font-medium"> </p> <span> </span> <!> <!> <!></div> <div class="text-muted-foreground mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs"><span class="font-mono tabular-nums"> </span> <span>·</span> <span> </span> <span>·</span> <span> </span></div></div> <!></div>'),zn=i('<div class="border-border bg-card overflow-hidden rounded-md border"><div class="border-border bg-muted/40 flex items-center justify-between gap-3 border-b px-4 py-2"><span class="text-muted-foreground text-xs font-medium tracking-wider uppercase"> </span> <!></div> <!></div>'),Vn=i(`<strong> </strong> will stop working immediately. Anyone
|
|
14
|
-
using it will see a "no longer active" page. This cannot be undone.`,1),Gn=i("<!> <!>",1),Bn=i("<!> <!>",1),qn=i("<!> <!>",1),Jn=i(`<div class="space-y-4"><div><h3 class="text-base font-semibold tracking-tight">Share links</h3> <p class="text-muted-foreground mt-1 text-xs">Per-definition tokens that grant access without an account. Use for client demos, embeds, and
|
|
15
|
-
review links.</p></div> <!></div> <!> <!>`,1);function Hn(_e,t){at(t,!0);let v=h(it([])),x=h(!0),M=h(!1),O=h(null),B=h(null);$t(()=>{t.definitionGuid,b()});async function b(){o(x,!0);try{const S=await fetch(`/api/definitions/${t.definitionGuid}/share-links`);if(!S.ok)throw new Error(`${S.status}`);const H=await S.json();o(v,H.links,!0)}catch{Se.error("Failed to load share links")}finally{o(x,!1)}}async function P(S){o(B,S.id,!0);try{if(!(await fetch(`/api/definitions/${t.definitionGuid}/share-links/${S.id}`,{method:"DELETE"})).ok){Se.error("Failed to revoke link");return}Se.success("Link revoked"),await b()}catch{Se.error("Failed to revoke link")}finally{o(B,null),o(O,null)}}function q(S){if(!S)return"Never";const H=new Date(S),ke=new Date,we=H.getTime()<ke.getTime();return{text:H.toLocaleDateString(),expired:we}}function ne(S){const H=Date.now()-new Date(S).getTime(),ke=Math.floor(H/6e4);if(ke<1)return"just now";if(ke<60)return`${ke}m ago`;const we=Math.floor(ke/60);if(we<24)return`${we}h ago`;const Ne=Math.floor(we/24);return Ne<30?`${Ne}d ago`:new Date(S).toLocaleDateString()}const z=L(()=>e(v).filter(S=>!S.revokedAt));var he=Jn(),ye=g(he),le=a(s(ye),2);{var de=S=>{var H=Un();r(S,H)},xe=S=>{fr(S,{size:"sm",get icon(){return la},title:"No share links yet",description:"Mint a link to share this definition without requiring the recipient to have an account.",actions:ke=>{De(ke,{size:"sm",onclick:()=>o(M,!0),children:(we,Ne)=>{var je=En(),Ae=g(je);Kt(Ae,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(we,je)},$$slots:{default:!0}})},$$slots:{actions:!0}})},I=S=>{var H=zn(),ke=s(H),we=s(ke),Ne=s(we);n(we);var je=a(we,2);De(je,{size:"sm",variant:"outline",onclick:()=>o(M,!0),children:(Ie,Z)=>{var ce=Mn(),ge=g(ce);Kt(ge,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(Ie,ce)},$$slots:{default:!0}}),n(ke);var Ae=a(ke,2);pt(Ae,19,()=>e(z),Ie=>Ie.id,(Ie,Z,ce)=>{const ge=L(()=>q(e(Z).expiresAt)),m=L(()=>typeof e(ge)=="object"&&e(ge).expired),w=L(()=>e(Z).maxSolves),d=L(()=>e(w)!==null&&e(w)!==void 0),k=L(()=>e(d)&&e(Z).solveCount>=e(w));var $=Fn(),c=s($),p=s(c),j=s(p),T=s(j,!0);n(j);var ee=a(j,2),y=s(ee,!0);n(ee);var E=a(ee,2);{var X=re=>{var ue=On();r(re,ue)};J(E,re=>{e(Z).allowSolve||re(X)})}var ve=a(E,2);{var se=re=>{var ue=Ln(),Pe=s(ue);dr(Pe,{class:"h-2.5 w-2.5"}),f(),n(ue),r(re,ue)};J(ve,re=>{e(m)&&re(se)})}var te=a(ve,2);{var be=re=>{var ue=Rn();r(re,ue)};J(te,re=>{e(k)&&re(be)})}n(p);var ie=a(p,2),V=s(ie),G=s(V);n(V);var D=a(V,4),C=s(D);n(D);var W=a(D,4),Y=s(W);n(W),n(ie),n(c);var me=a(c,2);{let re=L(()=>e(B)===e(Z).id);De(me,{variant:"ghost",size:"icon",onclick:()=>o(O,e(Z),!0),get disabled(){return e(re)},class:"text-muted-foreground hover:text-destructive h-7 w-7 shrink-0","aria-label":"Revoke link",children:(ue,Pe)=>{tr(ue,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}n($),K((re,ue,Pe)=>{ft($,1,`flex items-start gap-3 px-4 py-3 ${e(ce)<e(z).length-1?"border-border border-b":""}`),U(T,e(Z).name??"Untitled link"),ft(ee,1,`rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase ${e(Z).channel==="live"?"bg-success/10 text-success":"bg-warning/10 text-warning"}`),U(y,e(Z).channel),U(G,`${re??""}${ue??""} solves`),U(C,`Expires: ${(typeof e(ge)=="object"?e(ge).text:e(ge))??""}`),U(Y,`Minted ${Pe??""}`)},[()=>e(Z).solveCount.toLocaleString(),()=>e(d)?` / ${e(w).toLocaleString()}`:"",()=>ne(e(Z).createdAt)]),r(Ie,$)}),n(H),K(()=>U(Ne,`${e(z).length??""} active link${e(z).length===1?"":"s"}`)),r(S,H)};J(le,S=>{e(x)?S(de):e(z).length===0?S(xe,1):S(I,-1)})}n(ye);var R=a(ye,2);An(R,{get definitionGuid(){return t.definitionGuid},get open(){return e(M)},onOpenChange:S=>o(M,S,!0),onMinted:b});var pe=a(R,2);{let S=L(()=>!!e(O));_(pe,()=>Dt,(H,ke)=>{ke(H,{get open(){return e(S)},onOpenChange:we=>!we&&o(O,null),children:(we,Ne)=>{var je=ze(),Ae=g(je);_(Ae,()=>Nt,(Ie,Z)=>{Z(Ie,{children:(ce,ge)=>{var m=qn(),w=g(m);_(w,()=>It,(k,$)=>{$(k,{children:(c,p)=>{var j=Gn(),T=g(j);_(T,()=>Tt,(y,E)=>{E(y,{children:(X,ve)=>{f();var se=A("Revoke this link?");r(X,se)},$$slots:{default:!0}})});var ee=a(T,2);_(ee,()=>At,(y,E)=>{E(y,{children:(X,ve)=>{var se=ze(),te=g(se);{var be=ie=>{var V=Vn(),G=g(V),D=s(G,!0);n(G),f(),K(()=>U(D,e(O).name??"This link")),r(ie,V)};J(te,ie=>{e(O)&&ie(be)})}r(X,se)},$$slots:{default:!0}})}),r(c,j)},$$slots:{default:!0}})});var d=a(w,2);_(d,()=>Ut,(k,$)=>{$(k,{children:(c,p)=>{var j=Bn(),T=g(j);_(T,()=>Et,(y,E)=>{E(y,{children:(X,ve)=>{f();var se=A("Cancel");r(X,se)},$$slots:{default:!0}})});var ee=a(T,2);{let y=L(()=>!!e(B));_(ee,()=>Mt,(E,X)=>{X(E,{onclick:()=>e(O)&&P(e(O)),get disabled(){return e(y)},children:(ve,se)=>{f();var te=A();K(()=>U(te,e(B)?"Revoking…":"Revoke")),r(ve,te)},$$slots:{default:!0}})})}r(c,j)},$$slots:{default:!0}})}),r(ce,m)},$$slots:{default:!0}})}),r(we,je)},$$slots:{default:!0}})})}r(_e,he),ot()}var Wn=i('<button type="button" class="text-muted-foreground hover:text-foreground mx-6 mt-4 inline-flex items-center gap-1.5 self-start text-xs transition-colors"><!> Back to definition</button>'),Kn=i("<!> <!> <!>",1),Qn=i(' <button class="hover:opacity-70"><!></button>',1),Xn=i('<div class="mb-1 flex flex-wrap gap-1"></div>'),Yn=i('<div class="space-y-1.5"><!> <!></div>'),Zn=i('<div class="space-y-1.5"><!> <!></div>'),es=i('<div class="grid grid-cols-2 gap-3"><!> <!></div>'),ts=i('<div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <!></div> <div class="grid grid-cols-2 gap-3"><div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><div class="flex items-center justify-between"><!> <span class="text-muted-foreground text-xs"> </span></div> <!> <!></div></div> <!> <div class="space-y-2"><div class="flex items-center gap-2"><!> <!></div> <!></div> <!>',1),rs=i("<!> <!> <!> <!>",1),as=i("<!> Delete",1),os=i('<div class="border-border flex shrink-0 items-center justify-between border-b px-6 py-4"><div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Editing</p> <h2 class="mt-0.5 text-base font-semibold"> </h2></div> <!></div> <!> <!> <div class="border-border flex shrink-0 items-center justify-between border-t px-6 py-4"><!> <div class="flex gap-2"><!> <!></div></div>',1),ns=i("<!> <!>",1),ss=i("<!> <!>",1),is=i("<!> <!>",1),ls=i("<strong> </strong> will move from <strong> </strong> to <strong> </strong> ",1),ds=i("<!> <!>",1),cs=i("<!> <!>",1),vs=i("<!> <!>",1),us=i("<!> <!> <!>",1);function fs(_e,t){at(t,!0);let v=We(t,"defaultComputeServerId",3,null),x=We(t,"initialTab",3,"versions"),M=h(it(x()==="shares"&&!t.enableSharing?"versions":x())),O=h(it(t.record.displayName)),B=h(it(t.record.description??"")),b=h(it(t.record.category??"")),P=h(it([...t.record.tags??[]])),q=h(it(t.record.projectId)),ne=h(it(t.record.computeServerId??null)),z=h(it(t.record.status)),he=h(void 0),ye=h(it(t.record.coverImage??"")),le=h(void 0),de=h(!1),xe=h(!1),I=h(!1),R=h(null);const pe=L(()=>e(R)?t.projects.find(d=>d.id===e(R))??null:null),S=L(()=>t.projects.find(d=>d.id===e(q))??null);function H(d){d!==e(q)&&o(R,d,!0)}function ke(){e(R)&&o(q,e(R),!0),o(R,null)}function we(){o(R,null)}const Ne=L(()=>e(he)??(t.record.coverImage?.startsWith("/api/definitions/")?"upload":"url")),je=[{id:"draft",label:"Draft — work in progress",icon:hr,iconStyle:"color: var(--muted-foreground); fill: var(--muted-foreground);"},{id:"published",label:"Published — live and visible to runners",icon:hr,iconStyle:"color: #22c55e; fill: #22c55e;"}],Ae=L(()=>t.computeServers.map(d=>({id:d.id,label:d.id===v()?`${d.label} (Default)`:d.label})));async function Ie(){if(!e(le)?.files?.length)return;o(I,!0);const d=new FormData;d.append("image",e(le).files[0]);try{const k=await fetch(`/api/definitions/${t.record.guid}/image`,{method:"POST",body:d});if(k.ok)Se.success("Cover image updated"),await ct();else{const $=await k.json().catch(()=>({}));Se.error($.message||"Image upload failed")}}catch{Se.error("Image upload failed")}finally{o(I,!1),e(le)&&(e(le).value=""),o(de,!1)}}function Z(){t.onSave(t.record.guid,{displayName:e(O),description:e(B)||void 0,category:e(b)||void 0,tags:e(P).length?e(P):void 0,coverImage:e(ye)||void 0,status:e(z),projectId:e(q)||void 0,computeServerId:e(ne)})}var ce=us(),ge=g(ce);Cr(ge,{get onClose(){return t.onClose},ariaLabel:"Close edit drawer",children:(d,k)=>{var $=os(),c=g($),p=s(c),j=a(s(p),2),T=s(j,!0);n(j),n(p);var ee=a(p,2);De(ee,{variant:"ghost",size:"icon",get onclick(){return t.onClose},class:"h-8 w-8 shrink-0",children:(G,D)=>{kt(G,{class:"h-4 w-4"})},$$slots:{default:!0}}),n(c);var y=a(c,2);{var E=G=>{var D=Wn(),C=s(D);da(C,{class:"h-3 w-3"}),f(),n(D),nt("click",D,function(...W){t.onBack?.apply(this,W)}),r(G,D)};J(y,G=>{t.onBack&&G(E)})}var X=a(y,2);_(X,()=>wr,(G,D)=>{D(G,{class:"flex flex-1 flex-col overflow-hidden",get value(){return e(M)},set value(C){o(M,C,!0)},children:(C,W)=>{var Y=rs(),me=g(Y);{let F=L(()=>`mx-6 grid w-auto ${t.enableSharing?"grid-cols-3":"grid-cols-2"} ${t.onBack?"mt-2":"mt-4"}`);_(me,()=>kr,(ae,fe)=>{fe(ae,{get class(){return e(F)},children:(Q,l)=>{var u=Kn(),N=g(u);_(N,()=>Ft,(Le,Be)=>{Be(Le,{value:"details",children:(Ye,Ke)=>{f();var et=A("Details");r(Ye,et)},$$slots:{default:!0}})});var $e=a(N,2);_($e,()=>Ft,(Le,Be)=>{Be(Le,{value:"versions",children:(Ye,Ke)=>{f();var et=A("Versions");r(Ye,et)},$$slots:{default:!0}})});var Ue=a($e,2);{var Ve=Le=>{var Be=ze(),Ye=g(Be);_(Ye,()=>Ft,(Ke,et)=>{et(Ke,{value:"shares",children:(vt,oe)=>{f();var Ce=A("Share links");r(vt,Ce)},$$slots:{default:!0}})}),r(Le,Be)};J(Ue,Le=>{t.enableSharing&&Le(Ve)})}r(Q,u)},$$slots:{default:!0}})})}var re=a(me,2);_(re,()=>zt,(F,ae)=>{ae(F,{value:"versions",class:"mt-4 flex-1 overflow-y-auto px-6 py-5",children:(fe,Q)=>{yn(fe,{get definitionGuid(){return t.record.guid},get onOpenRunner(){return t.onOpenRunner}})},$$slots:{default:!0}})});var ue=a(re,2);_(ue,()=>zt,(F,ae)=>{ae(F,{value:"details",class:"mt-4 flex-1 space-y-5 overflow-y-auto px-6 py-5",children:(fe,Q)=>{var l=ts(),u=g(l),N=s(u);He(N,{for:"edit-name",children:(Ee,Xe)=>{f();var Ze=A("Display name");r(Ee,Ze)},$$slots:{default:!0}});var $e=a(N,2);ut($e,{id:"edit-name",get value(){return e(O)},set value(Ee){o(O,Ee,!0)}}),n(u);var Ue=a(u,2),Ve=s(Ue);He(Ve,{for:"edit-desc",children:(Ee,Xe)=>{f();var Ze=A("Description");r(Ee,Ze)},$$slots:{default:!0}});var Le=a(Ve,2);er(Le,{id:"edit-desc",rows:3,get value(){return e(B)},set value(Ee){o(B,Ee,!0)}}),n(Ue);var Be=a(Ue,2),Ye=s(Be);He(Ye,{for:"edit-status",children:(Ee,Xe)=>{f();var Ze=A("Status");r(Ee,Ze)},$$slots:{default:!0}});var Ke=a(Ye,2);sr(Ke,{id:"edit-status",get items(){return je},get value(){return e(z)},onChange:Ee=>o(z,Ee,!0)}),n(Be);var et=a(Be,2),vt=s(et),oe=s(vt);He(oe,{for:"edit-cat",children:(Ee,Xe)=>{f();var Ze=A("Category");r(Ee,Ze)},$$slots:{default:!0}});var Ce=a(oe,2);ut(Ce,{id:"edit-cat",maxlength:40,placeholder:"e.g. Facade",get value(){return e(b)},set value(Ee){o(b,Ee,!0)}}),n(vt);var Te=a(vt,2),Qe=s(Te),rt=s(Qe);He(rt,{for:"edit-tags",children:(Ee,Xe)=>{f();var Ze=A("Tags");r(Ee,Ze)},$$slots:{default:!0}});var lt=a(rt,2),st=s(lt);n(lt),n(Qe);var Me=a(Qe,2);{var Ge=Ee=>{var Xe=Xn();pt(Xe,20,()=>e(P),Ze=>Ze,(Ze,bt)=>{Pr(Ze,{variant:"outline",class:"gap-1 text-xs",children:(rr,gr)=>{f();var mt=Qn(),_t=g(mt),ht=a(_t),Ot=s(ht);kt(Ot,{class:"h-2.5 w-2.5"}),n(ht),K(()=>{U(_t,`${bt??""} `),jt(ht,"aria-label",`Remove tag ${bt??""}`)}),nt("click",ht,()=>o(P,e(P).filter(Pt=>Pt!==bt),!0)),r(rr,mt)},$$slots:{default:!0}})}),n(Xe),r(Ee,Xe)};J(Me,Ee=>{e(P).length>0&&Ee(Ge)})}var Re=a(Me,2);{let Ee=L(()=>e(P).length>=5);ut(Re,{id:"edit-tags",placeholder:"Add tag + Enter",get disabled(){return e(Ee)},onkeydown:Xe=>{if(Xe.key==="Enter"){Xe.preventDefault();const Ze=Xe.currentTarget,bt=Ze.value.trim();bt&&!e(P).includes(bt)&&e(P).length<5&&(o(P,[...e(P),bt],!0),Ze.value="")}}})}n(Te),n(et);var Oe=a(et,2);cr(Oe,{});var qe=a(Oe,2),tt=s(qe),Je=s(tt);Ca(Je,{class:"text-muted-foreground h-4 w-4"});var dt=a(Je,2);He(dt,{children:(Ee,Xe)=>{f();var Ze=A("Cover image");r(Ee,Ze)},$$slots:{default:!0}}),n(tt);var qt=a(tt,2);{let Ee=L(()=>t.record.coverImage??"");Sr(qt,{get mode(){return e(Ne)},get value(){return e(Ee)},get isUploading(){return e(I)},get hasFile(){return e(de)},onModeChange:Xe=>o(he,Xe,!0),onUpload:Ie,onFileSelected:()=>o(de,!!e(le)?.files?.length),onUrlChange:Xe=>o(ye,Xe,!0),get inputRef(){return e(le)},set inputRef(Xe){o(le,Xe,!0)}})}n(qe);var Ct=a(qe,2);{var Ar=Ee=>{var Xe=es(),Ze=s(Xe);{var bt=mt=>{var _t=Yn(),ht=s(_t);He(ht,{for:"edit-proj",children:(Pt,Jt)=>{f();var ar=A("Project");r(Pt,ar)},$$slots:{default:!0}});var Ot=a(ht,2);Ir(Ot,{id:"edit-proj",get projects(){return t.projects},get value(){return e(q)},onChange:H}),n(_t),r(mt,_t)};J(Ze,mt=>{t.projects.length>1&&mt(bt)})}var rr=a(Ze,2);{var gr=mt=>{var _t=Zn(),ht=s(_t);He(ht,{for:"edit-srv",children:(Pt,Jt)=>{f();var ar=A("Compute server");r(Pt,ar)},$$slots:{default:!0}});var Ot=a(ht,2);{let Pt=L(()=>e(ne)??v()??"");sr(Ot,{id:"edit-srv",get items(){return e(Ae)},get value(){return e(Pt)},onChange:Jt=>{o(ne,Jt===v()?null:Jt,!0)}})}n(_t),r(mt,_t)};J(rr,mt=>{t.computeServers.length>0&&mt(gr)})}n(Xe),r(Ee,Xe)};J(Ct,Ee=>{(t.projects.length>1||t.computeServers.length>0)&&Ee(Ar)})}K(()=>U(st,`${e(P).length??""}/5`)),r(fe,l)},$$slots:{default:!0}})});var Pe=a(ue,2);{var Fe=F=>{var ae=ze(),fe=g(ae);_(fe,()=>zt,(Q,l)=>{l(Q,{value:"shares",class:"mt-4 flex-1 overflow-y-auto px-6 py-5",children:(u,N)=>{Hn(u,{get definitionGuid(){return t.record.guid}})},$$slots:{default:!0}})}),r(F,ae)};J(Pe,F=>{t.enableSharing&&F(Fe)})}r(C,Y)},$$slots:{default:!0}})});var ve=a(X,2),se=s(ve);De(se,{variant:"ghost",size:"sm",onclick:()=>o(xe,!0),class:"text-destructive hover:text-destructive gap-1.5 px-2",children:(G,D)=>{var C=as(),W=g(C);tr(W,{class:"h-3.5 w-3.5"}),f(),r(G,C)},$$slots:{default:!0}});var te=a(se,2),be=s(te);De(be,{variant:"outline",size:"sm",get onclick(){return t.onClose},children:(G,D)=>{f();var C=A("Cancel");r(G,C)},$$slots:{default:!0}});var ie=a(be,2);{var V=G=>{De(G,{size:"sm",get disabled(){return t.isSaving},onclick:Z,children:(D,C)=>{f();var W=A();K(()=>U(W,t.isSaving?"Saving…":"Save")),r(D,W)},$$slots:{default:!0}})};J(ie,G=>{e(M)==="details"&&G(V)})}n(te),n(ve),K(()=>U(T,t.record.displayName)),r(d,$)},$$slots:{default:!0}});var m=a(ge,2);_(m,()=>Dt,(d,k)=>{k(d,{get open(){return e(xe)},onOpenChange:$=>o(xe,$,!0),children:($,c)=>{var p=ze(),j=g(p);_(j,()=>Nt,(T,ee)=>{ee(T,{children:(y,E)=>{var X=is(),ve=g(X);_(ve,()=>It,(te,be)=>{be(te,{children:(ie,V)=>{var G=ns(),D=g(G);_(D,()=>Tt,(W,Y)=>{Y(W,{children:(me,re)=>{f();var ue=A();K(()=>U(ue,`Delete "${t.record.displayName??""}"?`)),r(me,ue)},$$slots:{default:!0}})});var C=a(D,2);_(C,()=>At,(W,Y)=>{Y(W,{children:(me,re)=>{f();var ue=A("This removes the definition and all its files. This cannot be undone.");r(me,ue)},$$slots:{default:!0}})}),r(ie,G)},$$slots:{default:!0}})});var se=a(ve,2);_(se,()=>Ut,(te,be)=>{be(te,{children:(ie,V)=>{var G=ss(),D=g(G);_(D,()=>Et,(W,Y)=>{Y(W,{children:(me,re)=>{f();var ue=A("Cancel");r(me,ue)},$$slots:{default:!0}})});var C=a(D,2);_(C,()=>Mt,(W,Y)=>{Y(W,{onclick:()=>t.onDelete(t.record.guid),children:(me,re)=>{f();var ue=A("Delete");r(me,ue)},$$slots:{default:!0}})}),r(ie,G)},$$slots:{default:!0}})}),r(y,X)},$$slots:{default:!0}})}),r($,p)},$$slots:{default:!0}})});var w=a(m,2);{let d=L(()=>e(R)!==null);_(w,()=>Dt,(k,$)=>{$(k,{get open(){return e(d)},onOpenChange:c=>{c||we()},children:(c,p)=>{var j=ze(),T=g(j);_(T,()=>Nt,(ee,y)=>{y(ee,{children:(E,X)=>{var ve=vs(),se=g(ve);_(se,()=>It,(be,ie)=>{ie(be,{children:(V,G)=>{var D=ds(),C=g(D);_(C,()=>Tt,(Y,me)=>{me(Y,{children:(re,ue)=>{f();var Pe=A("Move to a different project?");r(re,Pe)},$$slots:{default:!0}})});var W=a(C,2);_(W,()=>At,(Y,me)=>{me(Y,{children:(re,ue)=>{var Pe=ls(),Fe=g(Pe),F=s(Fe,!0);n(Fe);var ae=a(Fe,2),fe=s(ae,!0);n(ae);var Q=a(ae,2),l=s(Q,!0);n(Q);var u=a(Q);K(()=>{U(F,t.record.displayName),U(fe,e(S)?.name??"—"),U(l,e(pe)?.name??"—"),U(u,`. Project members and visibility may change
|
|
16
|
-
accordingly.${t.enableSharing?" Existing share links keep working.":""}`)}),r(re,Pe)},$$slots:{default:!0}})}),r(V,D)},$$slots:{default:!0}})});var te=a(se,2);_(te,()=>Ut,(be,ie)=>{ie(be,{children:(V,G)=>{var D=cs(),C=g(D);_(C,()=>Et,(Y,me)=>{me(Y,{onclick:we,children:(re,ue)=>{f();var Pe=A("Cancel");r(re,Pe)},$$slots:{default:!0}})});var W=a(C,2);_(W,()=>Mt,(Y,me)=>{me(Y,{onclick:ke,children:(re,ue)=>{f();var Pe=A("Move");r(re,Pe)},$$slots:{default:!0}})}),r(V,D)},$$slots:{default:!0}})}),r(E,ve)},$$slots:{default:!0}})}),r(c,j)},$$slots:{default:!0}})})}r(_e,ce),ot()}yt(["click"]);var ps=i("<!> Project settings",1),gs=i("<!> Add definition",1),ms=i("<!> <!>",1),_s=i('<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"></div>'),hs=i("<!> <!>",1),xs=i("<!> <!>",1),bs=i("<!> <!>",1),$s=i('<div class="flex h-full overflow-hidden"><!> <div class="flex flex-1 flex-col overflow-hidden"><div class="border-border bg-background shrink-0 border-b px-(--page-px) py-5"><!></div> <div class="flex-1 overflow-y-auto px-(--page-px) py-5"><div class="mb-5 flex items-center gap-3"><div class="max-w-lg flex-1"><!></div> <span class="text-muted-foreground font-mono text-xs tabular-nums"> </span> <div class="ml-auto"><!></div></div> <!></div></div></div> <!> <!> <!> <!> <!>',1);function ci(_e,t){at(t,!0);const v=()=>Rr(qr,"$page",x),[x,M]=Fr(),O=L(()=>!!v().data.flags?.enableSharing);let B=h(""),b=h(null),P=h("grid");$t(()=>{const l=v().url.searchParams.get("project");if(l){const u=t.data.projects.find(N=>N.slug===l);u&&o(b,u.id,!0)}});let q=h(null),ne=h(null),z=h(null),he=h(null),ye=h(!1),le=h(!1),de=h("versions"),xe=h(!1),I=h(null);const R=L(()=>{let l=t.data.records;if(e(b)&&(l=l.filter(u=>u.projectId===e(b))),e(B).trim()){const u=e(B).toLowerCase();l=l.filter(N=>N.displayName?.toLowerCase().includes(u)||N.description?.toLowerCase().includes(u)||N.tags?.some($e=>$e.toLowerCase().includes(u)))}return l}),pe=L(()=>e(ne)?t.data.records.find(l=>l.guid===e(ne))??null:null),S=L(()=>e(b)?t.data.projects.find(l=>l.id===e(b))??null:null),H=L(()=>e(S)?e(S).canEdit:t.data.projects.some(l=>l.canEdit)),ke=L(()=>t.data.projects.filter(l=>l.canEdit)),we=L(()=>e(z)?t.data.projects.find(l=>l.id===e(z))??null:null),Ne=L(()=>e(he)?t.data.projects.find(l=>l.id===e(he))??null:null);function je(l){return t.data.projects.find(u=>u.id===l)?.name??""}function Ae(l){return t.data.projects.find(u=>u.id===l)?.visibility}function Ie(l){return t.data.projects.find(u=>u.id===l.projectId)?.canEdit??!1}async function Z(l,u){if(l.headers.get("content-type")?.includes("application/json")){const N=await l.json().catch(()=>null);return N?.message||N?.error?.message||`${u} (${l.status})`}return`${u} (${l.status})`}async function ce(l,u){o(I,l,!0);try{const N=await fetch(`/api/definitions/${l}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});N.ok?(Se.success("Definition saved"),o(ne,null),o(q,null),await ct()):Se.error(await Z(N,"Save failed"))}catch(N){Se.error("Save failed: "+(N instanceof Error?N.message:"Unknown error"))}finally{o(I,null)}}async function ge(l){const u=t.data.records.find(N=>N.guid===l);try{const N=await fetch(`/api/definitions/${l}`,{method:"DELETE"});N.ok?(Se.success(`"${u?.displayName??"Definition"}" deleted`),o(ne,null),await ct()):Se.error(await Z(N,"Delete failed"))}catch{Se.error("Delete failed")}}async function m(l){o(xe,!0);try{const u=await fetch("/api/definitions",{method:"POST",body:l});if(u.ok)Se.success(`"${l.get("displayName")}" created`),o(ye,!1),await ct();else{const N=await Z(u,"Failed to create definition");throw Se.error(N),new Error(N)}}finally{o(xe,!1)}}async function w(l){const u=await fetch("/api/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(u.ok){const N=await u.json().catch(()=>null);Se.success(`Project "${l.name}" created`),await ct(),N?.id&&o(b,N.id,!0)}else throw Se.error(await Z(u,"Failed to create project")),new Error("create project failed")}async function d(l,u){const N=await fetch(`/api/projects/${l}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)});N.ok?(Se.success("Project saved"),o(z,null),await ct()):Se.error(await Z(N,"Failed to save project"))}async function k(l){const u=await fetch(`/api/projects/${l}`,{method:"DELETE"});u.ok?(Se.success("Project deleted"),e(b)===l&&o(b,t.data.projects.find(N=>N.id!==l)?.id??null,!0),o(he,null),o(z,null),await ct()):Se.error(await Z(u,"Failed to delete project"))}async function $(l,u,N){const $e=await fetch(`/api/projects/${l}/members`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:u,role:N})});$e.ok?(Se.success("Member added"),await ct()):Se.error(await Z($e,"Failed to add member"))}async function c(l,u,N){(await fetch(`/api/projects/${l}/members/${u}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({role:N})})).ok?await ct():Se.error("Failed to update role")}async function p(l,u){(await fetch(`/api/projects/${l}/members/${u}`,{method:"DELETE"})).ok?await ct():Se.error("Failed to remove member")}var j=$s();Br("rqn88j",l=>{Or(()=>{Lr.title="Projects"})});var T=g(j),ee=s(T);to(ee,{get projects(){return t.data.projects},get records(){return t.data.records},get activeProjectId(){return e(b)},get canManageProjects(){return t.data.canManageProjects},onSelect:l=>{o(b,l,!0);const u=t.data.projects.find(N=>N.id===l);if(u){const N=new fa(v().url.search);N.set("project",u.slug),window.history.replaceState(null,"",`?${N}`)}},onCreate:w});var y=a(ee,2),E=s(y),X=s(E);{const l=$e=>{var Ue=ms(),Ve=g(Ue);{var Le=Ke=>{De(Ke,{variant:"outline",size:"sm",onclick:()=>o(z,e(S).id,!0),children:(et,vt)=>{var oe=ps(),Ce=g(oe);va(Ce,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(et,oe)},$$slots:{default:!0}})};J(Ve,Ke=>{t.data.canManageProjects&&e(S)&&Ke(Le)})}var Be=a(Ve,2);{var Ye=Ke=>{De(Ke,{size:"sm",onclick:()=>o(ye,!0),children:(et,vt)=>{var oe=gs(),Ce=g(oe);Kt(Ce,{class:"mr-1.5 h-3.5 w-3.5"}),f(),r(et,oe)},$$slots:{default:!0}})};J(Be,Ke=>{e(H)&&Ke(Ye)})}r($e,Ue)};let u=L(()=>e(S)?e(S).name:"All projects"),N=L(()=>e(S)?.description??(e(S)?void 0:"Definitions across every project in this organization."));ca(X,{class:"mb-0",get eyebrow(){return e(u)},title:"Definitions",get description(){return e(N)},actions:l,$$slots:{actions:!0}})}n(E);var ve=a(E,2),se=s(ve),te=s(se),be=s(te);Yr(be,{placeholder:"Search by name, description, tags…",clearable:!0,get value(){return e(B)},set value(l){o(B,l,!0)}}),n(te);var ie=a(te,2),V=s(ie);n(ie);var G=a(ie,2),D=s(G);Zr(D,{get mode(){return e(P)},size:"sm",onChange:l=>o(P,l,!0)}),n(G),n(se);var C=a(se,2);{var W=l=>{{let u=L(()=>e(B)?"Try adjusting your search":"Add your first definition to get started");fr(l,{size:"lg",title:"No definitions found",get description(){return e(u)}})}},Y=l=>{var u=_s();pt(u,21,()=>e(R),N=>N.guid,(N,$e)=>{{let Ue=L(()=>e(b)===null?je(e($e).projectId):void 0),Ve=L(()=>e(b)===null?Ae(e($e).projectId):void 0);ea(N,{get record(){return e($e)},showStatus:!0,onOpen:Le=>o(q,Le,!0),get projectName(){return e(Ue)},get projectVisibility(){return e(Ve)}})}}),n(u),r(l,u)},me=l=>{No(l,{get records(){return e(R)},get projects(){return t.data.projects},onOpen:u=>o(q,u,!0)})};J(C,l=>{e(R).length===0?l(W):e(P)==="grid"?l(Y,1):l(me,-1)})}n(ve),n(y),n(T);var re=a(T,2);{var ue=l=>{{let u=L(()=>je(e(q).projectId)),N=L(()=>Ie(e(q)));Fo(l,{get record(){return e(q)},get projectName(){return e(u)},get canEdit(){return e(N)},get showShare(){return e(O)},onClose:()=>o(q,null),onEdit:$e=>{o(de,"details"),o(ne,$e.guid,!0),o(le,!0),o(q,null)},onShare:$e=>{o(de,"shares"),o(ne,$e.guid,!0),o(le,!0),o(q,null)},onOpenRunner:($e,Ue)=>mr(`/library/${$e}${Ue==="draft"?"?channel=draft":""}`)})}};J(re,l=>{e(q)&&l(ue)})}var Pe=a(re,2);{var Fe=l=>{var u=ze(),N=g(u);Vr(N,()=>e(de),$e=>{{let Ue=L(()=>e(I)===e(pe).guid),Ve=L(()=>e(le)?()=>{o(q,e(pe),!0),o(ne,null),o(le,!1)}:void 0);fs($e,{get record(){return e(pe)},get projects(){return t.data.projects},get computeServers(){return t.data.computeServers},get defaultComputeServerId(){return t.data.defaultComputeServerId},get isSaving(){return e(Ue)},get initialTab(){return e(de)},get enableSharing(){return e(O)},onClose:()=>{o(ne,null),o(le,!1),o(de,"versions")},get onBack(){return e(Ve)},onSave:ce,onDelete:ge,onOpenRunner:(Le,Be)=>mr(`/library/${Le}${Be==="draft"?"?channel=draft":""}`)})}}),r(l,u)};J(Pe,l=>{e(pe)&&l(Fe)})}var F=a(Pe,2);{var ae=l=>{{let u=L(()=>e(z)!==null);wo(l,{get project(){return e(we)},get users(){return t.data.users},get open(){return e(u)},onOpenChange:N=>{N||o(z,null)},onSave:d,onDelete:N=>{o(z,null),o(he,N,!0)},onAddMember:$,onUpdateMemberRole:c,onRemoveMember:p})}};J(F,l=>{e(we)&&t.data.canManageProjects&&l(ae)})}var fe=a(F,2);{let l=L(()=>e(he)!==null);_(fe,()=>Dt,(u,N)=>{N(u,{get open(){return e(l)},onOpenChange:$e=>{$e||o(he,null)},children:($e,Ue)=>{var Ve=ze(),Le=g(Ve);_(Le,()=>Nt,(Be,Ye)=>{Ye(Be,{children:(Ke,et)=>{var vt=bs(),oe=g(vt);_(oe,()=>It,(Te,Qe)=>{Qe(Te,{children:(rt,lt)=>{var st=hs(),Me=g(st);_(Me,()=>Tt,(Re,Oe)=>{Oe(Re,{children:(qe,tt)=>{f();var Je=A();K(()=>U(Je,`Delete "${e(Ne)?.name??""??""}"?`)),r(qe,Je)},$$slots:{default:!0}})});var Ge=a(Me,2);_(Ge,()=>At,(Re,Oe)=>{Oe(Re,{children:(qe,tt)=>{f();var Je=A("This will remove the project and all member assignments. Definitions will become unassigned.");r(qe,Je)},$$slots:{default:!0}})}),r(rt,st)},$$slots:{default:!0}})});var Ce=a(oe,2);_(Ce,()=>Ut,(Te,Qe)=>{Qe(Te,{children:(rt,lt)=>{var st=xs(),Me=g(st);_(Me,()=>Et,(Re,Oe)=>{Oe(Re,{children:(qe,tt)=>{f();var Je=A("Cancel");r(qe,Je)},$$slots:{default:!0}})});var Ge=a(Me,2);_(Ge,()=>Mt,(Re,Oe)=>{Oe(Re,{onclick:()=>e(he)&&k(e(he)),children:(qe,tt)=>{f();var Je=A("Delete");r(qe,Je)},$$slots:{default:!0}})}),r(rt,st)},$$slots:{default:!0}})}),r(Ke,vt)},$$slots:{default:!0}})}),r($e,Ve)},$$slots:{default:!0}})})}var Q=a(fe,2);{let l=L(()=>e(S)?.canEdit?e(b):e(ke)[0]?.id),u=L(()=>e(ke).length>1);Ba(Q,{get open(){return e(ye)},get isAdding(){return e(xe)},get projects(){return e(ke)},get defaultProjectId(){return e(l)},get computeServers(){return t.data.computeServers},get defaultComputeServerId(){return t.data.defaultComputeServerId},get showProjectDropdown(){return e(u)},onOpenChange:N=>o(ye,N,!0),onSubmit:m})}K(()=>U(V,`${e(R).length??""} definition${e(R).length===1?"":"s"}`)),r(_e,j),ot(),M()}export{ci as component};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
g@dQ���K1�w.x�[���t���G�7��������Qh6z�����"X������
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { json } from '@sveltejs/kit';
|
|
2
|
-
import './context-DKDYb-He.js';
|
|
3
|
-
import { t as providers, L as LocalComputeServerStore } from './providers.server-wGknM6CR.js';
|
|
4
|
-
import { z as requirePermission } from './access.server-ByXvmWyF.js';
|
|
5
|
-
import 'zod';
|
|
6
|
-
import './shared-server-C3WdcJCQ.js';
|
|
7
|
-
import 'node:url';
|
|
8
|
-
import 'node:path';
|
|
9
|
-
import 'node:fs';
|
|
10
|
-
import 'node:crypto';
|
|
11
|
-
import 'node:fs/promises';
|
|
12
|
-
import '@supabase/supabase-js';
|
|
13
|
-
import './api-errors-C0SWfJj5.js';
|
|
14
|
-
import '@selvajs/compute/core';
|
|
15
|
-
import './utils2-BsnrDRob.js';
|
|
16
|
-
|
|
17
|
-
function atRestSecretsCheck(report) {
|
|
18
|
-
const base = { id: "at-rest-secrets", label: "Compute server secrets" };
|
|
19
|
-
if (report === null) {
|
|
20
|
-
return {
|
|
21
|
-
...base,
|
|
22
|
-
status: "not_applicable",
|
|
23
|
-
summary: "The active data provider does not encrypt secrets at this layer — nothing to verify."
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
if (report.ok) {
|
|
27
|
-
return {
|
|
28
|
-
...base,
|
|
29
|
-
status: "ok",
|
|
30
|
-
summary: "All stored compute server API keys decrypt under the current SELVA_AT_REST_KEY."
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const failed = report.failures.map((f) => `"${f.serverLabel}" (${f.reason}${f.cause ? `: ${f.cause}` : ""})`).join(", ");
|
|
34
|
-
const plaintext = report.plaintextFound;
|
|
35
|
-
return {
|
|
36
|
-
...base,
|
|
37
|
-
status: "degraded",
|
|
38
|
-
summary: `${report.failures.length} compute server key(s) could not be loaded: ${failed}.`,
|
|
39
|
-
remediation: plaintext ? "A key is stored in plaintext on disk — re-enter it via /admin/compute so it is encrypted." : "The stored ciphertext does not match the current SELVA_AT_REST_KEY (rotated key or restored backup). Re-enter the affected keys via /admin/compute, or restore the original SELVA_AT_REST_KEY, then run this check again."
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
const GET = async ({ locals }) => {
|
|
43
|
-
requirePermission(locals, "instance_admin");
|
|
44
|
-
const checks = [];
|
|
45
|
-
const store = providers.data.computeServer;
|
|
46
|
-
if (store instanceof LocalComputeServerStore) {
|
|
47
|
-
try {
|
|
48
|
-
checks.push(atRestSecretsCheck(await store.verifySecrets()));
|
|
49
|
-
} catch (err) {
|
|
50
|
-
checks.push({
|
|
51
|
-
id: "at-rest-secrets",
|
|
52
|
-
label: "Compute server secrets",
|
|
53
|
-
status: "error",
|
|
54
|
-
summary: `Verification threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
55
|
-
remediation: "Check server logs (`pm2 logs selva-compute`) for the underlying error."
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
} else {
|
|
59
|
-
checks.push(atRestSecretsCheck(null));
|
|
60
|
-
}
|
|
61
|
-
const rank = {
|
|
62
|
-
ok: 0,
|
|
63
|
-
not_applicable: 0,
|
|
64
|
-
degraded: 2,
|
|
65
|
-
error: 3
|
|
66
|
-
};
|
|
67
|
-
const overall = checks.reduce(
|
|
68
|
-
(worst, c) => rank[c.status] > rank[worst] ? c.status : worst,
|
|
69
|
-
"ok"
|
|
70
|
-
);
|
|
71
|
-
return json({ overall, checkedAt: (/* @__PURE__ */ new Date()).toISOString(), checks });
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
export { GET };
|
|
75
|
-
//# sourceMappingURL=_server.ts-BvMDaAZY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-BvMDaAZY.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/api/system/health/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport \"../../../../../../chunks/context.js\";\nimport { t as providers, L as LocalComputeServerStore } from \"../../../../../../chunks/providers.server.js\";\nimport { z as requirePermission } from \"../../../../../../chunks/access.server.js\";\nfunction atRestSecretsCheck(report) {\n const base = { id: \"at-rest-secrets\", label: \"Compute server secrets\" };\n if (report === null) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"The active data provider does not encrypt secrets at this layer — nothing to verify.\"\n };\n }\n if (report.ok) {\n return {\n ...base,\n status: \"ok\",\n summary: \"All stored compute server API keys decrypt under the current SELVA_AT_REST_KEY.\"\n };\n }\n const failed = report.failures.map((f) => `\"${f.serverLabel}\" (${f.reason}${f.cause ? `: ${f.cause}` : \"\"})`).join(\", \");\n const plaintext = report.plaintextFound;\n return {\n ...base,\n status: \"degraded\",\n summary: `${report.failures.length} compute server key(s) could not be loaded: ${failed}.`,\n remediation: plaintext ? \"A key is stored in plaintext on disk — re-enter it via /admin/compute so it is encrypted.\" : \"The stored ciphertext does not match the current SELVA_AT_REST_KEY (rotated key or restored backup). Re-enter the affected keys via /admin/compute, or restore the original SELVA_AT_REST_KEY, then run this check again.\"\n };\n}\nconst GET = async ({ locals }) => {\n requirePermission(locals, \"instance_admin\");\n const checks = [];\n const store = providers.data.computeServer;\n if (store instanceof LocalComputeServerStore) {\n try {\n checks.push(atRestSecretsCheck(await store.verifySecrets()));\n } catch (err) {\n checks.push({\n id: \"at-rest-secrets\",\n label: \"Compute server secrets\",\n status: \"error\",\n summary: `Verification threw: ${err instanceof Error ? err.message : String(err)}`,\n remediation: \"Check server logs (`pm2 logs selva-compute`) for the underlying error.\"\n });\n }\n } else {\n checks.push(atRestSecretsCheck(null));\n }\n const rank = {\n ok: 0,\n not_applicable: 0,\n degraded: 2,\n error: 3\n };\n const overall = checks.reduce(\n (worst, c) => rank[c.status] > rank[worst] ? c.status : worst,\n \"ok\"\n );\n return json({ overall, checkedAt: (/* @__PURE__ */ new Date()).toISOString(), checks });\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACpC,EAAE,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,wBAAwB,EAAE;AACzE,EAAE,IAAI,MAAM,KAAK,IAAI,EAAE;AACvB,IAAI,OAAO;AACX,MAAM,GAAG,IAAI;AACb,MAAM,MAAM,EAAE,gBAAgB;AAC9B,MAAM,OAAO,EAAE;AACf,KAAK;AACL,EAAE;AACF,EAAE,IAAI,MAAM,CAAC,EAAE,EAAE;AACjB,IAAI,OAAO;AACX,MAAM,GAAG,IAAI;AACb,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,OAAO,EAAE;AACf,KAAK;AACL,EAAE;AACF,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1H,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc;AACzC,EAAE,OAAO;AACT,IAAI,GAAG,IAAI;AACX,IAAI,MAAM,EAAE,UAAU;AACtB,IAAI,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9F,IAAI,WAAW,EAAE,SAAS,GAAG,2FAA2F,GAAG;AAC3H,GAAG;AACH;AACK,MAAC,GAAG,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK;AAClC,EAAE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC;AAC7C,EAAE,MAAM,MAAM,GAAG,EAAE;AACnB,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa;AAC5C,EAAE,IAAI,KAAK,YAAY,uBAAuB,EAAE;AAChD,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;AAClE,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,MAAM,CAAC,IAAI,CAAC;AAClB,QAAQ,EAAE,EAAE,iBAAiB;AAC7B,QAAQ,KAAK,EAAE,wBAAwB;AACvC,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,OAAO,EAAE,CAAC,oBAAoB,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1F,QAAQ,WAAW,EAAE;AACrB,OAAO,CAAC;AACR,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACzC,EAAE;AACF,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,EAAE,EAAE,CAAC;AACT,IAAI,cAAc,EAAE,CAAC;AACrB,IAAI,QAAQ,EAAE,CAAC;AACf,IAAI,KAAK,EAAE;AACX,GAAG;AACH,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM;AAC/B,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK;AACjE,IAAI;AACJ,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AACzF;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-CBAiDOcP.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/compute/schema/_server.ts.js"],"sourcesContent":["import { r as resolveServerForOrg, C as ComputeServerUnconfiguredError } from \"../../../../../chunks/api-errors.js\";\nimport { r as requireCanCreateDefinition } from \"../../../../../chunks/access.server.js\";\nimport { error } from \"@sveltejs/kit\";\nimport { camelcaseKeys } from \"@selvajs/compute/core\";\nconst POST = async ({ request, locals, url }) => {\n const projectId = url.searchParams.get(\"projectId\");\n if (!projectId) {\n throw error(400, \"projectId query parameter is required\");\n }\n const { project } = await requireCanCreateDefinition(locals, projectId);\n let server;\n try {\n server = await resolveServerForOrg(locals.ctx, project.orgId);\n } catch (err) {\n if (err instanceof ComputeServerUnconfiguredError) throw error(503, err.message);\n throw err;\n }\n const formData = await request.formData();\n const schemaUrl = new URL(\"/grasshopper/schema\", server.serverUrl).toString();\n const headers = {};\n if (server.apiKey) {\n headers[\"RhinoComputeKey\"] = server.apiKey;\n }\n let response;\n try {\n response = await fetch(schemaUrl, { method: \"POST\", headers, body: formData });\n } catch {\n throw error(503, \"Compute server is unreachable\");\n }\n if (!response.ok) {\n throw error(response.status, \"Compute server error\");\n }\n const raw = await response.json();\n const results = camelcaseKeys(Array.isArray(raw) ? raw : [raw]);\n const schemas = results.flatMap((r) => r.schemas ?? []);\n if (schemas.length === 0) {\n throw error(422, \"No schemas found in definition\");\n }\n return new Response(JSON.stringify(schemas), {\n headers: { \"Content-Type\": \"application/json\" }\n });\n};\nexport {\n POST\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIK,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK;AACjD,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AACrD,EAAE,IAAI,CAAC,SAAS,EAAE;AAClB,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,uCAAuC,CAAC;AAC7D,EAAE;AACF,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,CAAC,MAAM,EAAE,SAAS,CAAC;AACzE,EAAE,IAAI,MAAM;AACZ,EAAE,IAAI;AACN,IAAI,MAAM,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;AACjE,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,IAAI,GAAG,YAAY,8BAA8B,EAAE,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;AACpF,IAAI,MAAM,GAAG;AACb,EAAE;AACF,EAAE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;AAC3C,EAAE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAC/E,EAAE,MAAM,OAAO,GAAG,EAAE;AACpB,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE;AACrB,IAAI,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM;AAC9C,EAAE;AACF,EAAE,IAAI,QAAQ;AACd,EAAE,IAAI;AACN,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAClF,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,+BAA+B,CAAC;AACrD,EAAE;AACF,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACpB,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;AACxD,EAAE;AACF,EAAE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AACnC,EAAE,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACjE,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;AACzD,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,gCAAgC,CAAC;AACtD,EAAE;AACF,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAC/C,IAAI,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB;AACjD,GAAG,CAAC;AACJ;;;;"}
|