@selvajs/selva 4.12.0 → 4.13.0
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/{2WpvH37P2.js → B9E4JNPD2.js} +1 -1
- package/build/client/_app/immutable/chunks/B9E4JNPD2.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9E4JNPD2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{0IIMU97L.js → BD8XOylI.js} +1 -1
- package/build/client/_app/immutable/chunks/BD8XOylI.js.br +0 -0
- package/build/client/_app/immutable/chunks/BD8XOylI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BZBiPp80.js → BWRlTmcN.js} +1 -1
- package/build/client/_app/immutable/chunks/BWRlTmcN.js.br +0 -0
- package/build/client/_app/immutable/chunks/BWRlTmcN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DoKHi-MF.js → BY-4ri0F.js} +1 -1
- package/build/client/_app/immutable/chunks/BY-4ri0F.js.br +0 -0
- package/build/client/_app/immutable/chunks/BY-4ri0F.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BypRKqAi.js → Bdb8SghE.js} +1 -1
- package/build/client/_app/immutable/chunks/Bdb8SghE.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bdb8SghE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{8jWEL6tF2.js → Bs2m5QS12.js} +1 -1
- package/build/client/_app/immutable/chunks/Bs2m5QS12.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bs2m5QS12.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByF1UaRp2.js +1 -0
- package/build/client/_app/immutable/chunks/ByF1UaRp2.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByF1UaRp2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cke7eHHM2.js +1 -0
- package/build/client/_app/immutable/chunks/Cke7eHHM2.js.br +2 -0
- package/build/client/_app/immutable/chunks/Cke7eHHM2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CVKxCwTO.js → Ckf7D9mx.js} +2 -2
- package/build/client/_app/immutable/chunks/Ckf7D9mx.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ckf7D9mx.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.Dy2OTaDm.js +2 -0
- package/build/client/_app/immutable/entry/app.Dy2OTaDm.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Dy2OTaDm.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.AFMf3s45.js +1 -0
- package/build/client/_app/immutable/entry/start.AFMf3s45.js.br +1 -0
- package/build/client/_app/immutable/entry/start.AFMf3s45.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.D7JvLd3D.js → 1.C1SlsOQE.js} +1 -1
- package/build/client/_app/immutable/nodes/1.C1SlsOQE.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C1SlsOQE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.C7d3ym2Z.js → 11.D77N32Aq.js} +1 -1
- package/build/client/_app/immutable/nodes/11.D77N32Aq.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D77N32Aq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.PSLcsOOA.js → 13.Dwju4HKk.js} +1 -1
- package/build/client/_app/immutable/nodes/13.Dwju4HKk.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.Dwju4HKk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.BFVbCcBe.js +2 -0
- package/build/client/_app/immutable/nodes/14.BFVbCcBe.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.BFVbCcBe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{15.BiTs6p0n.js → 15.d9FThV5y.js} +1 -1
- package/build/client/_app/immutable/nodes/15.d9FThV5y.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.d9FThV5y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.Bd6wHhbA.js → 16.C5cZ8lTp.js} +4 -4
- package/build/client/_app/immutable/nodes/16.C5cZ8lTp.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.C5cZ8lTp.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{17.DykDtv52.js → 17.C_VZp6z-.js} +1 -1
- package/build/client/_app/immutable/nodes/17.C_VZp6z-.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.C_VZp6z-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{19.BnBjnGvH.js → 19.hY73Fkkr.js} +1 -1
- package/build/client/_app/immutable/nodes/19.hY73Fkkr.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.hY73Fkkr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.BHmMDFt8.js → 2.CPQCQr1B.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CPQCQr1B.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CPQCQr1B.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{20.CFwn2iyY.js → 20.CWssvio6.js} +1 -1
- package/build/client/_app/immutable/nodes/20.CWssvio6.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.CWssvio6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{21.D0brveVJ.js → 21.CHgPsrjQ.js} +1 -1
- package/build/client/_app/immutable/nodes/21.CHgPsrjQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/{21.D0brveVJ.js.gz → 21.CHgPsrjQ.js.gz} +0 -0
- package/build/client/_app/immutable/nodes/{22.BtFGp3qO.js → 22.B-b8qDa-.js} +1 -1
- package/build/client/_app/immutable/nodes/22.B-b8qDa-.js.br +0 -0
- package/build/client/_app/immutable/nodes/22.B-b8qDa-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{24.B0ncHIgK.js → 24.DkzPLpo0.js} +14 -14
- package/build/client/_app/immutable/nodes/24.DkzPLpo0.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.DkzPLpo0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{25.D4zi5sZ1.js → 25.Cgi8Fbjw.js} +1 -1
- package/build/client/_app/immutable/nodes/25.Cgi8Fbjw.js.br +0 -0
- package/build/client/_app/immutable/nodes/25.Cgi8Fbjw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{28.B1nPvaNB.js → 28.Dm5-4h_q.js} +1 -1
- package/build/client/_app/immutable/nodes/28.Dm5-4h_q.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.Dm5-4h_q.js.gz +0 -0
- package/build/client/_app/immutable/nodes/29.-KzBCyvS.js +4 -0
- package/build/client/_app/immutable/nodes/29.-KzBCyvS.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.-KzBCyvS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.iBxFH1b4.js → 3.BfA_QJpb.js} +1 -1
- package/build/client/_app/immutable/nodes/3.BfA_QJpb.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BfA_QJpb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{30.DEvHD32y.js → 30.CNzqHbmT.js} +1 -1
- package/build/client/_app/immutable/nodes/30.CNzqHbmT.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.CNzqHbmT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{31.CIs400Zi.js → 31.CkoRSLMT.js} +1 -1
- package/build/client/_app/immutable/nodes/31.CkoRSLMT.js.br +0 -0
- package/build/client/_app/immutable/nodes/31.CkoRSLMT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{33.DNvh3W8t.js → 33.pPUZXISu.js} +1 -1
- package/build/client/_app/immutable/nodes/33.pPUZXISu.js.br +0 -0
- package/build/client/_app/immutable/nodes/33.pPUZXISu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.PnKxDfd7.js → 5.B1v6OaMs.js} +1 -1
- package/build/client/_app/immutable/nodes/5.B1v6OaMs.js.br +2 -0
- package/build/client/_app/immutable/nodes/5.B1v6OaMs.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.DqNcqf73.js → 6.Cs-16Zdz.js} +1 -1
- package/build/client/_app/immutable/nodes/6.Cs-16Zdz.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Cs-16Zdz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.djUjPqMx.js → 7.Dvrz807O.js} +1 -1
- package/build/client/_app/immutable/nodes/7.Dvrz807O.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Dvrz807O.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.Ckjx9hvE.js → 8.Ds0AA94H.js} +1 -1
- package/build/client/_app/immutable/nodes/8.Ds0AA94H.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Ds0AA94H.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.Bnmihi3p.js → 9.CnYFz6De.js} +1 -1
- package/build/client/_app/immutable/nodes/9.CnYFz6De.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CnYFz6De.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/handler.js +4 -4
- package/build/index.js +4 -4
- package/build/server/chunks/chunks/{AppHeader.js-D9UdrNG0.js → AppHeader.js-BE-2sfJD.js} +3 -3
- package/build/server/chunks/chunks/{AppHeader.js-D9UdrNG0.js.map → AppHeader.js-BE-2sfJD.js.map} +1 -1
- package/build/server/chunks/chunks/{SideNav.js-Su8QVVE-.js → SideNav.js-B34MPixh.js} +2 -2
- package/build/server/chunks/chunks/{SideNav.js-Su8QVVE-.js.map → SideNav.js-B34MPixh.js.map} +1 -1
- package/build/server/chunks/chunks/{UserChip.js-Dcev_MGB.js → UserChip.js-B2aXbkY_.js} +3 -3
- package/build/server/chunks/chunks/{UserChip.js-Dcev_MGB.js.map → UserChip.js-B2aXbkY_.js.map} +1 -1
- package/build/server/chunks/chunks/{client.js-C5mJ0fz_.js → client.js-DX66dUW0.js} +2 -2
- package/build/server/chunks/chunks/{client.js-C5mJ0fz_.js.map → client.js-DX66dUW0.js.map} +1 -1
- package/build/server/chunks/chunks/forms.js-CLUvDATF.js +2 -0
- package/build/server/chunks/chunks/forms.js-CLUvDATF.js.map +1 -0
- package/build/server/chunks/chunks/internal.js-CkVehOOc.js.map +1 -1
- package/build/server/chunks/chunks/{internal2.js-CGjhfiRy.js → internal2.js-C4TQI6g0.js} +2 -2
- package/build/server/chunks/chunks/{internal2.js-CGjhfiRy.js.map → internal2.js-C4TQI6g0.js.map} +1 -1
- package/build/server/chunks/chunks/navigation.js-CLUvDATF.js +2 -0
- package/build/server/chunks/chunks/navigation.js-CLUvDATF.js.map +1 -0
- package/build/server/chunks/chunks/{package.js-BbgU79uw.js → package.js-CG3914w6.js} +2 -2
- package/build/server/chunks/chunks/{package.js-BbgU79uw.js.map → package.js-CG3914w6.js.map} +1 -1
- package/build/server/chunks/chunks/{paths.js-DgUkDZr3.js → paths.js-C_KBWnCv.js} +2 -2
- package/build/server/chunks/chunks/{paths.js-DgUkDZr3.js.map → paths.js-C_KBWnCv.js.map} +1 -1
- package/build/server/chunks/chunks/{state.js-DxhJEm_j.js → state.js-DR3FX61j.js} +2 -2
- package/build/server/chunks/chunks/{state.js-DxhJEm_j.js.map → state.js-DR3FX61j.js.map} +1 -1
- package/build/server/chunks/chunks/{stores.js-Brq6da2e.js → stores.js-BK2q5hwJ.js} +2 -2
- package/build/server/chunks/chunks/{stores.js-Brq6da2e.js.map → stores.js-BK2q5hwJ.js.map} +1 -1
- package/build/server/chunks/chunks/user-display.js-B3d-spft.js +23 -0
- package/build/server/chunks/chunks/user-display.js-B3d-spft.js.map +1 -0
- package/build/server/chunks/entries/pages/{_error.svelte.js-BDbhLlLN.js → _error.svelte.js-Bfa18HtS.js} +4 -4
- package/build/server/chunks/entries/pages/{_error.svelte.js-BDbhLlLN.js.map → _error.svelte.js-Bfa18HtS.js.map} +1 -1
- package/build/server/chunks/entries/pages/{_page.svelte.js-CjU52Q9q.js → _page.svelte.js-DazAB1nB.js} +6 -6
- package/build/server/chunks/entries/pages/{_page.svelte.js-CjU52Q9q.js.map → _page.svelte.js-DazAB1nB.js.map} +1 -1
- package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-CXPszOMW.js → _page.svelte.js-B8K3VKme.js} +4 -4
- package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-CXPszOMW.js.map → _page.svelte.js-B8K3VKme.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_error.svelte.js-BA7GJPbH.js → _error.svelte.js-DeW12VUh.js} +4 -4
- package/build/server/chunks/entries/pages/admin/{_error.svelte.js-BA7GJPbH.js.map → _error.svelte.js-DeW12VUh.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-DraGtDc3.js → _layout.svelte.js-D8GsziZf.js} +7 -7
- package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-DraGtDc3.js.map → _layout.svelte.js-D8GsziZf.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-DjeE7c7V.js → _page.server.ts.js-0FW5CN0g.js} +2 -2
- package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-DjeE7c7V.js.map → _page.server.ts.js-0FW5CN0g.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_page.svelte.js-DND4yhJn.js → _page.svelte.js-DCXADtDk.js} +4 -4
- package/build/server/chunks/entries/pages/admin/{_page.svelte.js-DND4yhJn.js.map → _page.svelte.js-DCXADtDk.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-B4l09MoL.js → _page.svelte.js-D0xvvIbi.js} +3 -3
- package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-B4l09MoL.js.map → _page.svelte.js-D0xvvIbi.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-D9jhVQUL.js → _page.svelte.js-C9zsIAS8.js} +6 -5
- package/build/server/chunks/entries/pages/admin/projects/_id_/_page.svelte.js-C9zsIAS8.js.map +1 -0
- package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-CiQj6xrn.js → _page.svelte.js-DtSkdP4m.js} +3 -3
- package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-CiQj6xrn.js.map → _page.svelte.js-DtSkdP4m.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-Bpj84lLY.js → _page.server.ts.js-Bl6q5HdC.js} +2 -2
- package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-Bpj84lLY.js.map → _page.server.ts.js-Bl6q5HdC.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-gCBzsZVp.js → _page.svelte.js-CJBXMBLd.js} +3 -3
- package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-gCBzsZVp.js.map → _page.svelte.js-CJBXMBLd.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-D3DaAMxG.js → _page.svelte.js-C4Mq8ygj.js} +10 -5
- package/build/server/chunks/entries/pages/admin/users/_page.svelte.js-C4Mq8ygj.js.map +1 -0
- package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-CPq0s9oO.js → _page.svelte.js-kuNapfye.js} +4 -4
- package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-CPq0s9oO.js.map → _page.svelte.js-kuNapfye.js.map} +1 -1
- package/build/server/chunks/entries/pages/docs/api/{_page.svelte.js-DCdkis_E.js → _page.svelte.js-Dx70frAm.js} +3 -3
- package/build/server/chunks/entries/pages/docs/api/{_page.svelte.js-DCdkis_E.js.map → _page.svelte.js-Dx70frAm.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-BQCwM0Sl.js → _page.svelte.js-BK-kF-4X.js} +5 -5
- package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-BQCwM0Sl.js.map → _page.svelte.js-BK-kF-4X.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/{_page.svelte.js-DG6m--kM.js → _page.svelte.js-DCFiV8Oq.js} +6 -6
- package/build/server/chunks/entries/pages/library/{_page.svelte.js-DG6m--kM.js.map → _page.svelte.js-DCFiV8Oq.js.map} +1 -1
- package/build/server/chunks/entries/pages/login/{_page.svelte.js-BtVTX3Kl.js → _page.svelte.js-Fguh-HW5.js} +4 -4
- package/build/server/chunks/entries/pages/login/{_page.svelte.js-BtVTX3Kl.js.map → _page.svelte.js-Fguh-HW5.js.map} +1 -1
- package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-Bz71MlIV.js → _layout.svelte.js-Dh0RKe6Z.js} +6 -6
- package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-Bz71MlIV.js.map → _layout.svelte.js-Dh0RKe6Z.js.map} +1 -1
- package/build/server/chunks/entries/pages/projects/{_page.svelte.js-CEhBptS3.js → _page.svelte.js-BZ1wvgo1.js} +7 -6
- package/build/server/chunks/entries/pages/projects/_page.svelte.js-BZ1wvgo1.js.map +1 -0
- package/build/server/chunks/entries/pages/setup/{_page.svelte.js-D3CUeRRr.js → _page.svelte.js-vKUsYT4W.js} +4 -4
- package/build/server/chunks/entries/pages/setup/{_page.svelte.js-D3CUeRRr.js.map → _page.svelte.js-vKUsYT4W.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/{_layout.svelte.js-8AH91oUz.js → _layout.svelte.js-6qBdtteA.js} +8 -8
- package/build/server/chunks/entries/pages/team/{_layout.svelte.js-8AH91oUz.js.map → _layout.svelte.js-6qBdtteA.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-C29qFEdM.js → _page.svelte.js-D3aLTNp1.js} +4 -4
- package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-C29qFEdM.js.map → _page.svelte.js-D3aLTNp1.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-B9HfGMWI.js → _page.svelte.js-R3TmDeQS.js} +53 -4
- package/build/server/chunks/entries/pages/team/members/_page.svelte.js-R3TmDeQS.js.map +1 -0
- package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-DMeL3rsn.js → _page.svelte.js-BFIoZvGD.js} +3 -3
- package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-DMeL3rsn.js.map → _page.svelte.js-BFIoZvGD.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-BfhcHpzG.js → _page.svelte.js-OJM8z1Ws.js} +3 -3
- package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-BfhcHpzG.js.map → _page.svelte.js-OJM8z1Ws.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/settings/{_page.server.ts.js-CyvPuBgI.js → _page.server.ts.js-Dh4u89ZG.js} +6 -4
- package/build/server/chunks/entries/pages/team/settings/_page.server.ts.js-Dh4u89ZG.js.map +1 -0
- package/build/server/chunks/entries/pages/team/shares/{_page.svelte.js-BJyL8gkH.js → _page.svelte.js-DM309SQF.js} +3 -3
- package/build/server/chunks/entries/pages/team/shares/{_page.svelte.js-BJyL8gkH.js.map → _page.svelte.js-DM309SQF.js.map} +1 -1
- package/build/server/chunks/{handler-BGlRLrGT.js → handler-o5FiJhrN.js} +3 -3
- package/build/server/chunks/{handler-BGlRLrGT.js.map → handler-o5FiJhrN.js.map} +1 -1
- package/build/server/chunks/{index.js-BKzVtb6o.js → index.js-nY6b5ocy.js} +2 -2
- package/build/server/chunks/{index.js-BKzVtb6o.js.map → index.js-nY6b5ocy.js.map} +1 -1
- package/build/server/chunks/{manifest.js-BuoQOpiy.js → manifest.js-BZH8VtZ5.js} +28 -28
- package/build/server/chunks/{manifest.js-BuoQOpiy.js.map → manifest.js-BZH8VtZ5.js.map} +1 -1
- package/build/server/chunks/nodes/{1.js-Xc2WbGHF.js → 1.js-CuC2iZE3.js} +3 -3
- package/build/server/chunks/nodes/{1.js-Xc2WbGHF.js.map → 1.js-CuC2iZE3.js.map} +1 -1
- package/build/server/chunks/nodes/{11.js-CYF8Oavv.js → 11.js-065bMZZV.js} +3 -3
- package/build/server/chunks/nodes/{11.js-CYF8Oavv.js.map → 11.js-065bMZZV.js.map} +1 -1
- package/build/server/chunks/nodes/{13.js-CNDyO0vg.js → 13.js-yK-In24O.js} +3 -3
- package/build/server/chunks/nodes/{13.js-CNDyO0vg.js.map → 13.js-yK-In24O.js.map} +1 -1
- package/build/server/chunks/nodes/{14.js-D5ob_-zV.js → 14.js-B9JtyGDK.js} +3 -3
- package/build/server/chunks/nodes/{14.js-D5ob_-zV.js.map → 14.js-B9JtyGDK.js.map} +1 -1
- package/build/server/chunks/nodes/{15.js-jX10svqW.js → 15.js-0bfSz5zU.js} +5 -5
- package/build/server/chunks/nodes/{15.js-jX10svqW.js.map → 15.js-0bfSz5zU.js.map} +1 -1
- package/build/server/chunks/nodes/{16.js-D7zO4unc.js → 16.js-C_yMhfUT.js} +3 -3
- package/build/server/chunks/nodes/{16.js-D7zO4unc.js.map → 16.js-C_yMhfUT.js.map} +1 -1
- package/build/server/chunks/nodes/{17.js-DZEwzpkT.js → 17.js-BPtPzGDp.js} +3 -3
- package/build/server/chunks/nodes/{17.js-DZEwzpkT.js.map → 17.js-BPtPzGDp.js.map} +1 -1
- package/build/server/chunks/nodes/{19.js-J2k5Rh3p.js → 19.js-BWTeAaF1.js} +3 -3
- package/build/server/chunks/nodes/{19.js-J2k5Rh3p.js.map → 19.js-BWTeAaF1.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-eZnDfOw-.js → 2.js-CbvoCkQk.js} +3 -3
- package/build/server/chunks/nodes/{2.js-eZnDfOw-.js.map → 2.js-CbvoCkQk.js.map} +1 -1
- package/build/server/chunks/nodes/{20.js-BWrqQIq0.js → 20.js-DA5ZaWRV.js} +3 -3
- package/build/server/chunks/nodes/{20.js-BWrqQIq0.js.map → 20.js-DA5ZaWRV.js.map} +1 -1
- package/build/server/chunks/nodes/{21.js-cFHfkQYI.js → 21.js-DYhC9uFV.js} +3 -3
- package/build/server/chunks/nodes/{21.js-cFHfkQYI.js.map → 21.js-DYhC9uFV.js.map} +1 -1
- package/build/server/chunks/nodes/{22.js-CDmseej8.js → 22.js-KpyHt-vQ.js} +3 -3
- package/build/server/chunks/nodes/{22.js-CDmseej8.js.map → 22.js-KpyHt-vQ.js.map} +1 -1
- package/build/server/chunks/nodes/{24.js-C_u8GJKw.js → 24.js-CSTfH-sy.js} +3 -3
- package/build/server/chunks/nodes/{24.js-C_u8GJKw.js.map → 24.js-CSTfH-sy.js.map} +1 -1
- package/build/server/chunks/nodes/{25.js-CXDzstFN.js → 25.js-C3fsQaBC.js} +3 -3
- package/build/server/chunks/nodes/{25.js-CXDzstFN.js.map → 25.js-C3fsQaBC.js.map} +1 -1
- package/build/server/chunks/nodes/{28.js-CcRJdiN3.js → 28.js-DiQOhgtN.js} +3 -3
- package/build/server/chunks/nodes/{28.js-CcRJdiN3.js.map → 28.js-DiQOhgtN.js.map} +1 -1
- package/build/server/chunks/nodes/{29.js-CBltA7bK.js → 29.js-DgkHn06g.js} +3 -3
- package/build/server/chunks/nodes/{29.js-CBltA7bK.js.map → 29.js-DgkHn06g.js.map} +1 -1
- package/build/server/chunks/nodes/{3.js-JyjSfGE_.js → 3.js-T0kY2a-z.js} +3 -3
- package/build/server/chunks/nodes/{3.js-JyjSfGE_.js.map → 3.js-T0kY2a-z.js.map} +1 -1
- package/build/server/chunks/nodes/{30.js-CCGICBN7.js → 30.js-BgiEQ4uW.js} +3 -3
- package/build/server/chunks/nodes/{30.js-CCGICBN7.js.map → 30.js-BgiEQ4uW.js.map} +1 -1
- package/build/server/chunks/nodes/{31.js-Tc5fcH3-.js → 31.js-DBOlWIeO.js} +3 -3
- package/build/server/chunks/nodes/{31.js-Tc5fcH3-.js.map → 31.js-DBOlWIeO.js.map} +1 -1
- package/build/server/chunks/nodes/{32.js-S-jeWqh9.js → 32.js-BQmmtWkh.js} +2 -2
- package/build/server/chunks/nodes/{32.js-S-jeWqh9.js.map → 32.js-BQmmtWkh.js.map} +1 -1
- package/build/server/chunks/nodes/{33.js-DmB4F9y4.js → 33.js-C91IOaDk.js} +3 -3
- package/build/server/chunks/nodes/{33.js-DmB4F9y4.js.map → 33.js-C91IOaDk.js.map} +1 -1
- package/build/server/chunks/nodes/{5.js-b_Zadoh0.js → 5.js-DSh6UOPH.js} +3 -3
- package/build/server/chunks/nodes/{5.js-b_Zadoh0.js.map → 5.js-DSh6UOPH.js.map} +1 -1
- package/build/server/chunks/nodes/{6.js-CPL_SwcZ.js → 6.js-Cxvf0gfO.js} +3 -3
- package/build/server/chunks/nodes/{6.js-CPL_SwcZ.js.map → 6.js-Cxvf0gfO.js.map} +1 -1
- package/build/server/chunks/nodes/{7.js-CiJa4a3g.js → 7.js-DyKjtFwN.js} +3 -3
- package/build/server/chunks/nodes/{7.js-CiJa4a3g.js.map → 7.js-DyKjtFwN.js.map} +1 -1
- package/build/server/chunks/nodes/{8.js-DfsCcga9.js → 8.js-fvDYnRJ7.js} +3 -3
- package/build/server/chunks/nodes/{8.js-DfsCcga9.js.map → 8.js-fvDYnRJ7.js.map} +1 -1
- package/build/server/chunks/nodes/{9.js-ONMLi-of.js → 9.js-DYads82s.js} +5 -5
- package/build/server/chunks/nodes/{9.js-ONMLi-of.js.map → 9.js-DYads82s.js.map} +1 -1
- package/package.json +4 -4
- package/build/client/_app/immutable/chunks/0IIMU97L.js.br +0 -1
- package/build/client/_app/immutable/chunks/0IIMU97L.js.gz +0 -0
- package/build/client/_app/immutable/chunks/2WpvH37P2.js.br +0 -0
- package/build/client/_app/immutable/chunks/2WpvH37P2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/8jWEL6tF2.js.br +0 -0
- package/build/client/_app/immutable/chunks/8jWEL6tF2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BZBiPp80.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZBiPp80.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BpuTIjgL2.js +0 -1
- package/build/client/_app/immutable/chunks/BpuTIjgL2.js.br +0 -2
- package/build/client/_app/immutable/chunks/BpuTIjgL2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BypRKqAi.js.br +0 -0
- package/build/client/_app/immutable/chunks/BypRKqAi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CVKxCwTO.js.br +0 -0
- package/build/client/_app/immutable/chunks/CVKxCwTO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DoKHi-MF.js.br +0 -0
- package/build/client/_app/immutable/chunks/DoKHi-MF.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.B-5AdYmG.js +0 -2
- package/build/client/_app/immutable/entry/app.B-5AdYmG.js.br +0 -0
- package/build/client/_app/immutable/entry/app.B-5AdYmG.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Dqr7WryU.js +0 -1
- package/build/client/_app/immutable/entry/start.Dqr7WryU.js.br +0 -0
- package/build/client/_app/immutable/entry/start.Dqr7WryU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.D7JvLd3D.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.D7JvLd3D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.C7d3ym2Z.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.C7d3ym2Z.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.PSLcsOOA.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.PSLcsOOA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.CzwLvp_j.js +0 -2
- package/build/client/_app/immutable/nodes/14.CzwLvp_j.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.CzwLvp_j.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.BiTs6p0n.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.BiTs6p0n.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.Bd6wHhbA.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.Bd6wHhbA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.DykDtv52.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.DykDtv52.js.gz +0 -0
- package/build/client/_app/immutable/nodes/19.BnBjnGvH.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.BnBjnGvH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BHmMDFt8.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BHmMDFt8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/20.CFwn2iyY.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.CFwn2iyY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/21.D0brveVJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/22.BtFGp3qO.js.br +0 -0
- package/build/client/_app/immutable/nodes/22.BtFGp3qO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/24.B0ncHIgK.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.B0ncHIgK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/25.D4zi5sZ1.js.br +0 -0
- package/build/client/_app/immutable/nodes/25.D4zi5sZ1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/28.B1nPvaNB.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.B1nPvaNB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/29.D7wtqOaX.js +0 -4
- package/build/client/_app/immutable/nodes/29.D7wtqOaX.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.D7wtqOaX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.iBxFH1b4.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.iBxFH1b4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/30.DEvHD32y.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.DEvHD32y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/31.CIs400Zi.js.br +0 -0
- package/build/client/_app/immutable/nodes/31.CIs400Zi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/33.DNvh3W8t.js.br +0 -0
- package/build/client/_app/immutable/nodes/33.DNvh3W8t.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.PnKxDfd7.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.PnKxDfd7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DqNcqf73.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DqNcqf73.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.djUjPqMx.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.djUjPqMx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Ckjx9hvE.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Ckjx9hvE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.Bnmihi3p.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.Bnmihi3p.js.gz +0 -0
- package/build/server/chunks/chunks/forms.js-WRv-eYUw.js +0 -2
- package/build/server/chunks/chunks/forms.js-WRv-eYUw.js.map +0 -1
- package/build/server/chunks/chunks/navigation.js-WRv-eYUw.js +0 -2
- package/build/server/chunks/chunks/navigation.js-WRv-eYUw.js.map +0 -1
- package/build/server/chunks/entries/pages/admin/projects/_id_/_page.svelte.js-D9jhVQUL.js.map +0 -1
- package/build/server/chunks/entries/pages/admin/users/_page.svelte.js-D3DaAMxG.js.map +0 -1
- package/build/server/chunks/entries/pages/projects/_page.svelte.js-CEhBptS3.js.map +0 -1
- package/build/server/chunks/entries/pages/team/members/_page.svelte.js-B9HfGMWI.js.map +0 -1
- package/build/server/chunks/entries/pages/team/settings/_page.server.ts.js-CyvPuBgI.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{$ as e,At as t,B as n,C as r,D as i,F as a,Ft as o,G as s,It as c,K as l,L as u,M as d,Rt as f,V as p,W as m,X as h,_ as g,at as _,dt as v,ft as y,gt as b,h as x,it as S,k as C,kt as w,lt as T,mt as E,n as D,nt as O,o as k,s as A,st as j,ut as M,yt as N,z as P,zt as ee}from"../chunks/Cke4knuE.js";import{i as F}from"../chunks/
|
|
1
|
+
import{$ as e,At as t,B as n,C as r,D as i,F as a,Ft as o,G as s,It as c,K as l,L as u,M as d,Rt as f,V as p,W as m,X as h,_ as g,at as _,dt as v,ft as y,gt as b,h as x,it as S,k as C,kt as w,lt as T,mt as E,n as D,nt as O,o as k,s as A,st as j,ut as M,yt as N,z as P,zt as ee}from"../chunks/Cke4knuE.js";import{i as F}from"../chunks/Ckf7D9mx.js";import"../chunks/xihTtKlq.js";import{i as I}from"../chunks/B2lr8IYb.js";import{n as L}from"../chunks/DSGwkBAQ.js";import{t as R}from"../chunks/DryGTRV9.js";import{t as te}from"../chunks/DX2MELJa.js";import{t as ne}from"../chunks/f9BZlcKm.js";import{t as re}from"../chunks/D46bWE-p.js";import{t as ie}from"../chunks/BVBwPLPv.js";import{t as ae}from"../chunks/BJdlp6TT.js";import{t as oe}from"../chunks/CjPXNCS7.js";import{t as se}from"../chunks/CbBBqIrZ.js";import{t as ce}from"../chunks/BmnySeU9.js";import{t as z}from"../chunks/10viO958.js";import{t as le}from"../chunks/ehM2QOgk.js";import{n as B,t as ue}from"../chunks/DJq7n-sf.js";import{t as V}from"../chunks/D3p1tqid.js";import{n as H}from"../chunks/BVvGdFdF2.js";import{t as de}from"../chunks/DqR8kuM62.js";import"../chunks/Cke7eHHM2.js";var U=new Set([`$$slots`,`$$events`,`$$legacy`]);function fe(e,t){let n=k(t,U),r=[[`path`,{d:`M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21`}],[`path`,{d:`m5.082 11.09 8.828 8.828`}]];L(e,A({name:`eraser`},()=>n,{get iconNode(){return r}}))}var W=new Set([`$$slots`,`$$events`,`$$legacy`]);function pe(e,t){let n=k(t,W),r=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]];L(e,A({name:`power`},()=>n,{get iconNode(){return r}}))}var G=6e4,me=5e3;function K(e){let t=b(y({state:`idle`,reachable:!1,ready:!1,rhinoVersion:null,computeVersion:null,selvaInstalled:!1,selvaVersion:null,plugins:{},activeChildren:null,idleSpanSeconds:null})),n=null,r=0,i=!1;async function a(){if(i)return!1;try{let n=await fetch(`/api/admin/compute/status?serverId=${e()}`);if(i)return!1;if(!n.ok)return E(t,{...h(t),reachable:!1,ready:!1},!0),!1;let r=await n.json(),a=r.reachable,o=r.ready??a;return E(t,{reachable:a,ready:o,rhinoVersion:r.rhinoVersion,computeVersion:r.computeVersion,selvaInstalled:r.selvaInstalled,selvaVersion:r.selvaVersion,plugins:r.plugins??{},activeChildren:r.activeChildren??null,idleSpanSeconds:r.idleSpanSeconds??null,state:a?o?r.selvaInstalled?`ok`:`warning`:`loading`:`error`},!0),o}catch{return i||E(t,{...h(t),reachable:!1,ready:!1},!0),!1}}async function o(){let e=await a();i||e||(Date.now()<r?(h(t).state!==`loading`&&E(t,{...h(t),state:`checking`},!0),n=setTimeout(o,me)):h(t).reachable?E(t,{...h(t),state:`warning`},!0):E(t,{...h(t),state:`error`,reachable:!1,ready:!1},!0))}function s(){i||(n!==null&&(clearTimeout(n),n=null),r=Date.now()+G,E(t,{...h(t),state:`checking`},!0),o())}function c(){i=!0,n!==null&&(clearTimeout(n),n=null)}return{get state(){return h(t)},check:s,stop:c}}var he=p(`<p class="text-muted-foreground text-xs"> </p>`),ge=p(`<div class="space-y-2 rounded-lg border p-4"><div class="flex items-baseline justify-between gap-3"><div><p class="text-sm font-medium"> </p> <p class="text-muted-foreground text-xs"> </p></div> <div class="text-right"><p class="text-2xl font-semibold tabular-nums"> </p> <p class="text-muted-foreground text-xs">hit rate</p></div></div> <dl class="text-muted-foreground grid grid-cols-3 gap-2 text-xs"><div><dt>Hits</dt> <dd class="text-foreground font-mono tabular-nums"> </dd></div> <div><dt>Misses</dt> <dd class="text-foreground font-mono tabular-nums"> </dd></div> <div><dt>Evictions</dt> <dd class="text-foreground font-mono tabular-nums"> </dd></div></dl> <div class="text-muted-foreground flex items-center justify-between gap-3 border-t pt-2 text-xs"><span> </span> <code class="font-mono text-[10px]"> </code></div> <!></div>`),_e=p(`<button class="text-muted-foreground hover:text-foreground ml-auto flex items-center gap-1 text-xs"> <!></button>`),ve=p(`<p class="text-muted-foreground text-xs">No organizations exist yet.</p>`),ye=p(`<label class="hover:bg-muted/40 flex items-center gap-2 rounded px-2 py-1 text-xs"><input type="checkbox" class="h-3.5 w-3.5"/> <span class="truncate"> </span> <span class="text-muted-foreground ml-auto font-mono text-[10px]"> </span></label>`),be=p(`<div class="grid gap-1 sm:grid-cols-2"></div>`),xe=p(`<p class="text-muted-foreground text-xs">This server is the global default — it stays visible to every org regardless of the
|
|
2
2
|
allowlist.</p>`),Se=p(`<p class="text-muted-foreground text-xs">No orgs selected — this server is dormant (admin-only).</p>`),Ce=p(`<div class="space-y-2"><div class="flex items-center gap-3"><p class="text-muted-foreground text-xs">Available to</p> <div class="bg-muted inline-flex rounded-md p-0.5"><button>All orgs</button> <button>Specific orgs</button></div> <!></div> <!> <!></div>`),we=p(`<span class="flex items-center gap-1 rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800 dark:bg-green-900/30 dark:text-green-400"><!> default</span>`),Te=p(`<button class="text-muted-foreground hover:text-foreground text-xs underline-offset-2 hover:underline">set as default</button>`),Ee=p(`<!> `,1),De=p(`<!> <!>`,1),Oe=p(`<span class="text-muted-foreground">Loading…</span>`),ke=p(`<span class="text-red-600 dark:text-red-400">Not installed</span>`),Ae=p(`<div class="grid grid-cols-3 gap-2"><div class="bg-muted/40 rounded-md px-3 py-2"><p class="text-muted-foreground text-xs">Rhino</p> <p class="mt-0.5 text-xs font-medium"> </p></div> <div class="bg-muted/40 rounded-md px-3 py-2"><p class="text-muted-foreground text-xs">Compute</p> <p class="mt-0.5 text-xs font-medium"> </p></div> <div class="bg-muted/40 rounded-md px-3 py-2"><p class="text-muted-foreground text-xs">Selva Plugin</p> <p class="mt-0.5 text-xs font-medium"><!></p></div></div> <div class="grid grid-cols-2 gap-2"><div class="bg-muted/40 rounded-md px-3 py-2"><p class="text-muted-foreground text-xs">Active children</p> <p class="mt-0.5 text-xs font-medium"> </p></div> <div class="bg-muted/40 rounded-md px-3 py-2"><p class="text-muted-foreground text-xs">Idle for</p> <p class="mt-0.5 text-xs font-medium"> </p></div></div>`,1),je=p(`<button class="text-muted-foreground hover:text-destructive shrink-0 text-xs underline-offset-2 hover:underline">Clear</button>`),Me=p(`<button class="text-muted-foreground hover:text-foreground shrink-0 text-xs underline-offset-2 hover:underline">Undo</button>`),Ne=p(`<div class="bg-muted/40 flex items-center justify-between rounded-md px-3 py-1.5"><span class="text-xs font-medium"> </span> <span class="text-muted-foreground text-xs"> </span></div>`),Pe=p(`<div class="mt-2 grid gap-1.5 sm:grid-cols-2 lg:grid-cols-3"></div>`),Fe=p(`<div><button class="text-muted-foreground hover:text-foreground flex items-center gap-1 text-xs"><!> </button> <!></div>`),Ie=p(`<div><div class="flex items-center justify-between"><div class="flex items-center gap-2"><!> <!></div> <div class="flex items-center gap-3"><div class="flex items-center gap-1.5"><!> <span> </span></div> <!> <!> <!> <!></div></div> <!> <div class="grid gap-2 sm:grid-cols-2"><div class="space-y-1"><p class="text-muted-foreground text-xs">Server URL</p> <!></div> <div class="space-y-1"><p class="text-muted-foreground text-xs">API Key (optional)</p> <div class="flex gap-1.5"><!> <!></div></div> <div class="space-y-1"><p class="text-muted-foreground text-xs">Timeout (ms)</p> <!></div> <div class="space-y-1"><p class="text-muted-foreground text-xs">Retries</p> <!></div></div> <!> <!></div>`),Le=p(`<!> Add server`,1),Re=p(`<!> <button type="button" class="border-muted-foreground/30 text-muted-foreground hover:border-foreground/50 hover:text-foreground hover:bg-muted/30 flex w-full items-center justify-center gap-2 rounded-lg border border-dashed py-4 text-sm font-medium transition-colors"><!> Add another server</button>`,1),ze=p(`<div class="space-y-6"><!> <!> <!> <!></div>`);function Be(s,p){t(p,!0);let k=(e,t=f,n=f,r=f,i=f,s=f)=>{let l=N(()=>G(i()));var d=ge(),p=T(d),m=T(p),g=T(m),_=T(g,!0);c(g);var y=v(g,2),b=T(y,!0);c(y),c(m);var x=v(m,2),C=T(x),w=T(C,!0);c(C),o(2),c(x),c(p);var E=v(p,2),D=T(E),O=v(T(D),2),k=T(O,!0);c(O),c(D);var A=v(D,2),j=v(T(A),2),M=T(j,!0);c(j),c(A);var ee=v(A,2),F=v(T(ee),2),I=T(F,!0);c(F),c(ee),c(E);var L=v(E,2),R=T(L),te=T(R);c(R);var ne=v(R,2),re=T(ne,!0);c(ne),c(L);var ie=v(L,2),ae=e=>{var t=he(),n=T(t,!0);c(t),S(()=>u(n,s())),P(e,t)};a(ie,e=>{s()&&e(ae)}),c(d),S((e,a,o,s,c,d)=>{u(_,t()),u(b,n()),u(w,h(l)===null?`—`:`${h(l)}%`),u(k,e),u(M,a),u(I,o),u(te,`${s??``}
|
|
3
3
|
${i().entries===1?`entry`:`entries`} · ${c??``} of ${d??``}`),u(re,r())},[()=>i().hits.toLocaleString(),()=>i().misses.toLocaleString(),()=>i().evictions.toLocaleString(),()=>i().entries.toLocaleString(),()=>W(i().bytes),()=>W(i().budgetBytes)]),P(e,d)},A=(e,t=f)=>{let i=N(()=>t().sharedWith===`all`),o=N(()=>h(i)?new Set:new Set(t().sharedWith)),s=N(()=>t().id===h(J));var m=Ce(),_=T(m),y=v(T(_),2),b=T(y),C=v(b,2);c(y);var w=v(y,2),E=e=>{var n=_e(),r=T(n),i=v(r),s=e=>{ne(e,{class:`h-3 w-3`})},d=e=>{te(e,{class:`h-3 w-3`})};a(i,e=>{Z[t().id]?e(s):e(d,-1)}),c(n),S(()=>u(r,`${h(o).size??``}/${p.data.orgs.length??``} selected `)),l(`click`,n,()=>Z[t().id]=!Z[t().id]),P(e,n)};a(w,e=>{!h(i)&&p.data.orgs.length>0&&e(E)}),c(_);var D=v(_,2),O=e=>{var r=n(),i=M(r),s=e=>{var t=ve();P(e,t)},f=e=>{var n=be();d(n,21,()=>p.data.orgs,e=>e.id,(e,n)=>{var r=ye(),i=T(r);x(i);var a=v(i,2),s=T(a,!0);c(a);var d=v(a,2),f=T(d,!0);c(d),c(r),S(e=>{g(i,e),u(s,h(n).name),u(f,h(n).slug)},[()=>h(o).has(h(n).id)]),l(`change`,i,()=>qe(t(),h(n).id)),P(e,r)}),c(n),P(e,n)};a(i,e=>{p.data.orgs.length===0?e(s):e(f,-1)}),P(e,r)};a(D,e=>{!h(i)&&Z[t().id]&&e(O)});var k=v(D,2),A=e=>{var t=xe();P(e,t)},j=e=>{var t=Se();P(e,t)};a(k,e=>{!h(i)&&h(s)?e(A):!h(i)&&h(o).size===0&&e(j,1)}),c(m),S(()=>{r(b,1,`rounded px-2 py-0.5 text-xs ${h(i)?`bg-background shadow-sm`:`text-muted-foreground hover:text-foreground`}`),r(C,1,`rounded px-2 py-0.5 text-xs ${h(i)?`text-muted-foreground hover:text-foreground`:`bg-background shadow-sm`}`)}),l(`click`,b,()=>Ke(t(),!0)),l(`click`,C,()=>Ke(t(),!1)),P(e,m)},L=(e,t=f,n=f)=>{let i=N(()=>h($)[t().id]?.state),s=N(()=>Be[h(i)?.state??`idle`]),g=N(()=>h(i)?.state===`checking`||h(i)?.state===`loading`),_=N(()=>Object.entries(h(i)?.plugins??{})),y=N(()=>X.has(t().id));var b=Ie(),x=T(b),C=T(x),w=T(C);V(w,{placeholder:`label`,get value(){return t().label},oninput:e=>{let n=e.target;t().label=n.value.toLowerCase().replace(/[^a-z0-9_-]/g,``),n.value=t().label,Q(t().id)},class:`h-7 w-32 font-mono text-xs`});var D=v(w,2),O=e=>{var t=we(),n=T(t);se(n,{class:`h-3 w-3`}),o(),c(t),P(e,t)},k=e=>{var n=Te();l(`click`,n,()=>{E(J,t().id,!0),Q(t().id)}),P(e,n)};a(D,e=>{t().id===h(J)?e(O):e(k,-1)}),c(C);var j=v(C,2),F=T(j),I=T(F);re(I,{get class(){return`h-2.5 w-2.5 shrink-0 fill-current ${h(s).color??``}`}});var L=v(I,2),ie=T(L,!0);c(L),c(F);var oe=v(F,2);R(oe,{variant:`outline`,size:`sm`,onclick:()=>h($)[t().id]?.check(),get disabled(){return h(g)},class:`h-7`,title:`Probe this server's availability (retries for up to 1 min)`,children:(e,t)=>{var n=Ee(),r=M(n);{let e=N(()=>h(g)?`animate-spin`:``);ae(r,{get class(){return`mr-1.5 h-3.5 w-3.5 ${h(e)??``}`}})}var i=v(r);S(()=>u(i,` ${h(g)?`Checking…`:`Check`}`)),P(e,n)},$$slots:{default:!0}});var z=v(oe,2),le=e=>{let n=N(()=>Ye[t().id]);var r=De(),i=M(r);{let e=N(()=>h(n)!==null&&h(n)!==void 0);R(i,{variant:`outline`,size:`sm`,onclick:()=>Xe(t(),`purge`),get disabled(){return h(e)},class:`h-7`,title:`Clear cached solve results across this server's children (best-effort fleet-wide)`,children:(e,t)=>{var r=Ee(),i=M(r);fe(i,{class:`mr-1.5 h-3.5 w-3.5`});var a=v(i);S(()=>u(a,` ${h(n)===`purge`?`Purging…`:`Purge cache`}`)),P(e,r)},$$slots:{default:!0}})}var a=v(i,2);{let e=N(()=>h(n)!==null&&h(n)!==void 0);R(a,{variant:`outline`,size:`sm`,onclick:()=>Xe(t(),`shutdown`),get disabled(){return h(e)},class:`text-destructive hover:text-destructive h-7`,title:`Gracefully shut down all child processes (they auto-respawn on the next request)`,children:(e,t)=>{var r=Ee(),i=M(r);pe(i,{class:`mr-1.5 h-3.5 w-3.5`});var a=v(i);S(()=>u(a,` ${h(n)===`shutdown`?`Shutting down…`:`Shutdown children`}`)),P(e,r)},$$slots:{default:!0}})}P(e,r)};a(z,e=>{h(i)?.reachable&&e(le)});var B=v(z,2),ue=e=>{var n=De(),r=M(n);R(r,{variant:`ghost`,size:`sm`,onclick:()=>He(t().id),get disabled(){return h(Y)},class:`text-muted-foreground hover:text-foreground h-7`,children:(e,t)=>{o();var n=m(`Discard`);P(e,n)},$$slots:{default:!0}});var i=v(r,2);R(i,{size:`sm`,onclick:Je,get disabled(){return h(Y)},class:`h-7`,children:(e,t)=>{o();var n=m();S(()=>u(n,h(Y)?`Saving…`:`Save changes`)),P(e,n)},$$slots:{default:!0}}),P(e,n)};a(B,e=>{h(y)&&e(ue)});var H=v(B,2);{let e=N(()=>t().id===h(J)),r=N(()=>t().id===h(J)?`Set another server as default before deleting`:void 0);R(H,{variant:`ghost`,size:`sm`,onclick:()=>Ge(n()),get disabled(){return h(e)},get title(){return h(r)},class:`text-destructive hover:text-destructive h-7 w-7 p-0`,children:(e,t)=>{ce(e,{class:`h-3.5 w-3.5`})},$$slots:{default:!0}})}c(j),c(x);var de=v(x,2),W=e=>{var t=Ae(),n=M(t),r=T(n),o=v(T(r),2),s=T(o,!0);c(o),c(r);var l=v(r,2),d=v(T(l),2),f=T(d,!0);c(d),c(l);var p=v(l,2),g=v(T(p),2),_=T(g),y=e=>{var t=m();S(()=>u(t,h(i).selvaVersion)),P(e,t)},b=e=>{var t=Oe();P(e,t)},x=e=>{var t=ke();P(e,t)};a(_,e=>{h(i).selvaInstalled?e(y):h(i).ready?e(x,-1):e(b,1)}),c(g),c(p),c(n);var C=v(n,2),w=T(C),E=v(T(w),2),D=T(E,!0);c(E),c(w);var O=v(w,2),k=v(T(O),2),A=T(k,!0);c(k),c(O),c(C),S(e=>{u(s,h(i).rhinoVersion??`-`),u(f,h(i).computeVersion??`-`),u(D,h(i).activeChildren??`-`),u(A,e)},[()=>me(h(i).idleSpanSeconds)]),P(e,t)};a(de,e=>{h(i)?.reachable&&e(W)});var G=v(de,2),K=T(G),he=v(T(K),2);V(he,{placeholder:`http://localhost:5000`,oninput:()=>Q(t().id),class:`font-mono text-xs`,get value(){return t().serverUrl},set value(e){t().serverUrl=e}}),c(K);var ge=v(K,2),_e=v(T(ge),2),ve=T(_e);{let e=N(()=>t().hasApiKey&&t().apiKey!==U&&!t().apiKey?`Key set - enter new value to replace`:t().apiKey===U?`Key will be cleared on save`:``),n=N(()=>t().apiKey===U?``:t().apiKey),r=N(()=>t().apiKey===U);V(ve,{type:`password`,get placeholder(){return h(e)},get value(){return h(n)},get disabled(){return h(r)},oninput:e=>{t().apiKey=e.target.value,Q(t().id)},class:`font-mono text-xs`})}var ye=v(ve,2),be=e=>{var n=je();l(`click`,n,()=>{t().apiKey=U,Q(t().id)}),P(e,n)},xe=e=>{var n=Me();l(`click`,n,()=>t().apiKey=``),P(e,n)};a(ye,e=>{t().hasApiKey&&t().apiKey!==U&&!t().apiKey?e(be):t().apiKey===U&&e(xe,1)}),c(_e),c(ge);var Se=v(ge,2),Ce=v(T(Se),2);V(Ce,{type:`number`,placeholder:`30000`,oninput:()=>Q(t().id),onblur:()=>{t().timeoutMs=Math.min(3e5,Math.max(1e3,Number(t().timeoutMs)||3e4))},class:`text-xs`,get value(){return t().timeoutMs},set value(e){t().timeoutMs=e}}),c(Se);var Le=v(Se,2),Re=v(T(Le),2);V(Re,{type:`number`,placeholder:`0`,oninput:()=>Q(t().id),onblur:()=>{t().retryCount=Math.min(5,Math.max(0,Number(t().retryCount)||0))},class:`text-xs`,get value(){return t().retryCount},set value(e){t().retryCount=e}}),c(Le),c(G);var ze=v(G,2),q=e=>{A(e,t)};a(ze,e=>{p.data.tenancy!==`single`&&e(q)});var Z=v(ze,2),Ue=e=>{var n=Fe(),r=T(n),i=T(r),o=e=>{ne(e,{class:`h-3 w-3`})},s=e=>{te(e,{class:`h-3 w-3`})};a(i,e=>{Ve[t().id]?e(o):e(s,-1)});var f=v(i);c(r);var p=v(r,2),m=e=>{var t=Pe();d(t,21,()=>h(_),([e,t])=>e,(e,t)=>{var n=N(()=>ee(h(t),2));let r=()=>h(n)[0],i=()=>h(n)[1];var a=Ne(),o=T(a),s=T(o,!0);c(o);var l=v(o,2),d=T(l,!0);c(l),c(a),S(()=>{u(s,r()),u(d,i())}),P(e,a)}),c(t),P(e,t)};a(p,e=>{Ve[t().id]&&e(m)}),c(n),S(()=>u(f,` ${h(_).length??``} Grasshopper plugin${h(_).length===1?``:`s`}`)),l(`click`,r,()=>Ve[t().id]=!Ve[t().id]),P(e,n)};a(Z,e=>{h(i)?.reachable&&h(_).length>0&&e(Ue)}),c(b),S(()=>{r(b,1,`space-y-3 rounded-lg border p-4 transition-colors ${h(y)?`border-amber-400/60 bg-amber-50/30 dark:border-amber-500/40 dark:bg-amber-950/10`:`bg-muted/30`}`),r(L,1,`text-xs font-medium ${h(s).color??``}`),u(ie,h(s).label)}),P(e,b)},U=`__clear__`;function W(e){return e>=1073741824?`${(e/1073741824).toFixed(1)} GB`:e>=1048576?`${Math.round(e/1048576)} MB`:e>=1024?`${Math.round(e/1024)} KB`:`${e} B`}function G(e){let t=e.hits+e.misses;return t===0?null:Math.round(e.hits/t*100)}function me(e){if(e===null)return`-`;if(e<5)return`just now`;if(e<60)return`${Math.round(e)}s`;let t=Math.floor(e/60);return t<60?`${t}m`:`${Math.floor(t/60)}h ${t%60}m`}let Be={idle:{label:`Not checked`,color:`text-muted-foreground`},ok:{label:`Online`,color:`text-green-600 dark:text-green-400`},warning:{label:`Warning`,color:`text-yellow-600 dark:text-yellow-400`},error:{label:`Offline`,color:`text-red-600 dark:text-red-400`},checking:{label:`Checking…`,color:`text-blue-600 dark:text-blue-400`},loading:{label:`Loading plugins…`,color:`text-blue-600 dark:text-blue-400`}},q=b(y([])),J=b(``),Y=b(!1),X=new I,Ve=y({}),Z=y({});function Q(e){X.add(e)}function He(e){X.delete(e);let t=p.data.servers.find(t=>t.id===e),n=h(q).findIndex(t=>t.id===e);if(!(n<0)){if(!t){h($)[e]?.stop();let{[e]:t,...n}=h($);E($,n,!0),E(q,h(q).filter(t=>t.id!==e),!0);return}h(q)[n]={id:t.id,label:t.label,serverUrl:t.serverUrl,sharedWith:t.sharedWith===`all`?`all`:[...t.sharedWith],timeoutMs:t.timeoutMs??3e4,retryCount:t.retryCount??0,apiKey:``,hasApiKey:t.hasApiKey},E(J,p.data.defaultServerId,!0)}}let $=b(y({}));function Ue(e){return h($)[e]||(h($)[e]=K(()=>e)),h($)[e]}_(()=>{X.size===0&&(E(q,p.data.servers.map(e=>({id:e.id,label:e.label,serverUrl:e.serverUrl,sharedWith:e.sharedWith===`all`?`all`:[...e.sharedWith],timeoutMs:e.timeoutMs??3e4,retryCount:e.retryCount??0,apiKey:``,hasApiKey:e.hasApiKey})),!0),E(J,p.data.defaultServerId,!0))}),_(()=>{let t=p.data.servers.map(e=>e.id);e(()=>{for(let e of t)Ue(e)})}),D(()=>{for(let e of Object.values(h($)))e.stop()});function We(){let e=de();h(q).length===0&&E(J,e,!0),E(q,[...h(q),{id:e,label:`new-server`,serverUrl:`http://localhost:5000`,sharedWith:`all`,apiKey:``,hasApiKey:!1,timeoutMs:3e4,retryCount:0}],!0),Ue(e),Q(e)}function Ge(e){let t=h(q)[e];h($)[t.id]?.stop();let{[t.id]:n,...r}=h($);E($,r,!0),E(q,h(q).filter((t,n)=>n!==e),!0),h(J)===t.id&&h(q)[0]&&E(J,h(q)[0].id,!0);for(let e of h(q))Q(e.id)}function Ke(e,t){e.sharedWith=t?`all`:[],Q(e.id)}function qe(e,t){e.sharedWith!==`all`&&(e.sharedWith=e.sharedWith.includes(t)?e.sharedWith.filter(e=>e!==t):[...e.sharedWith,t],Q(e.id))}async function Je(){E(Y,!0);try{let e={defaultServerId:h(J),servers:h(q).map(({apiKey:e,hasApiKey:t,retryCount:n,timeoutMs:r,...i})=>({...i,timeoutMs:Math.min(3e5,Math.max(1e3,Number(r)||3e4)),...e===U?{apiKey:null}:e?{apiKey:e}:{},...Number(n)?{retryCount:Math.min(5,Math.max(0,Number(n)))}:{}}))},t=await fetch(`/api/admin/compute`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(t.ok){H.success(`Compute config saved`),await F(),X.clear();for(let e of Object.values(h($)))e.stop();E($,{},!0);for(let e of h(q))Ue(e.id)}else{let e=await t.json().catch(()=>({error:`Unknown error`}));H.error(e.message||e.error||`Failed to save (${t.status})`)}}catch{H.error(`Failed to save compute config`)}finally{E(Y,!1)}}let Ye=y({});async function Xe(e,t){if(!(t===`shutdown`&&!confirm(`Shut down ALL child processes on "${e.label}"?\n\nIn-flight solves on those children will be interrupted. The pool auto-respawns on the next request.`))){Ye[e.id]=t;try{let n=await fetch(`/api/admin/compute/actions`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({serverId:e.id,action:t})}),r=await n.json().catch(()=>({}));if(!n.ok){H.error(r.message||r.error||`Action failed (${n.status})`);return}if(t===`purge`){let{totalPurged:e=0,children:t=0,confident:n}=r;H.success(n?`Purged ${e} cached solve${e===1?``:`s`}`:`Purged ~${e} across ${t} children (best-effort)`)}else{let{shutdown:t=0,active:n=0}=r;H.success(`Shut down ${t} child${t===1?``:`ren`} (${n} still active)`),h($)[e.id]?.check()}}catch{H.error(`Failed to ${t} server`)}finally{Ye[e.id]=null}}}var Ze=ze();i(`1h8e46q`,e=>{O(()=>{j.title=`Admin · Compute`})});var Qe=T(Ze);z(Qe,{eyebrow:`Admin`,title:`Compute`,description:`Manage compute servers. Share servers with specific orgs to expose them in pickers. When ALLOW_ORG_COMPUTE_OVERRIDE is on, org owners can configure their own servers.`});var $e=v(Qe,2);C($e,()=>B,(e,t)=>{t(e,{children:(e,t)=>{var r=n(),i=M(r);C(i,()=>ue,(e,t)=>{t(e,{class:`space-y-3 pt-6`,children:(e,t)=>{var r=n(),i=M(r),s=e=>{le(e,{get icon(){return oe},title:`No servers configured`,actions:e=>{R(e,{variant:`outline`,size:`sm`,onclick:We,children:(e,t)=>{var n=Le(),r=M(n);ie(r,{class:`mr-1.5 h-3.5 w-3.5`}),o(),P(e,n)},$$slots:{default:!0}})},$$slots:{actions:!0}})},u=e=>{var t=Re(),n=M(t);d(n,19,()=>h(q),e=>e.id,(e,t,n)=>{L(e,()=>h(t),()=>h(n))});var r=v(n,2),i=T(r);ie(i,{class:`h-4 w-4`}),o(),c(r),l(`click`,r,We),P(e,t)};a(i,e=>{h(q).length===0?e(s):e(u,-1)}),P(e,r)},$$slots:{default:!0}})}),P(e,r)},$$slots:{default:!0}})});var et=v($e,2);z(et,{title:`Caching`,description:`Whether solves are actually being served from memory. Counters are for this Selva instance and reset when it restarts; behind a load balancer each instance keeps its own.`});var tt=v(et,2);C(tt,()=>B,(e,t)=>{t(e,{children:(e,t)=>{var r=n(),i=M(r);C(i,()=>ue,(e,t)=>{t(e,{class:`grid gap-3 pt-6 sm:grid-cols-2`,children:(e,t)=>{var n=De(),r=M(n);{let e=N(()=>`Budget is per compute server — ${p.data.caches.solve.warmClients} warm, so up to ${W(p.data.caches.solve.budgetTotalBytes)} total right now.`);k(r,()=>`Solve cache`,()=>`Results, so identical inputs skip Rhino entirely`,()=>`COMPUTE_SOLVE_CACHE_MB`,()=>p.data.caches.solve,()=>h(e))}var i=v(r,2);k(i,()=>`Definition cache`,()=>`.gh bytes, so a solve skips the storage read`,()=>`COMPUTE_DEFINITION_CACHE_MB`,()=>p.data.caches.definition,()=>null),P(e,n)},$$slots:{default:!0}})}),P(e,r)},$$slots:{default:!0}})}),c(Ze),P(s,Ze),w()}s([`click`,`change`]);export{Be as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{At as e,B as t,D as n,F as r,Ft as i,It as a,L as o,M as s,Rt as c,V as l,W as u,X as d,at as f,dt as p,g as m,gt as h,it as g,k as _,kt as v,lt as y,mt as b,nt as x,st as S,ut as C,y as w,z as T}from"../chunks/Cke4knuE.js";import{i as E,r as D}from"../chunks/
|
|
1
|
+
import{At as e,B as t,D as n,F as r,Ft as i,It as a,L as o,M as s,Rt as c,V as l,W as u,X as d,at as f,dt as p,g as m,gt as h,it as g,k as _,kt as v,lt as y,mt as b,nt as x,st as S,ut as C,y as w,z as T}from"../chunks/Cke4knuE.js";import{i as E,r as D}from"../chunks/Ckf7D9mx.js";import"../chunks/xihTtKlq.js";import{t as O}from"../chunks/DryGTRV9.js";import{t as k}from"../chunks/iLVM5qSy.js";import{t as A}from"../chunks/BVBwPLPv.js";import{t as j}from"../chunks/C2ulfLBp.js";import{t as M}from"../chunks/10viO958.js";import{t as N}from"../chunks/ehM2QOgk.js";import{n as P,t as F}from"../chunks/DJq7n-sf.js";import{t as I}from"../chunks/D3p1tqid.js";import{n as L}from"../chunks/BVvGdFdF2.js";import{t as R}from"../chunks/DvAc6wqz2.js";import"../chunks/Cke7eHHM2.js";var z=l(`<!> New project`,1),B=l(`<option> </option>`),V=l(`<div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <select id="new-org" class="border-input bg-background h-10 w-full rounded-md border px-3 text-sm"></select> <p class="text-muted-foreground text-xs">Storage and compute use this org. Membership in this org does NOT grant access —
|
|
2
2
|
visibility = platform overrides.</p></div> <div class="flex justify-end gap-2 pt-2"><!> <!></div>`,1),H=l(`<a class="min-w-0 hover:underline"><p class="truncate text-sm font-medium"> </p> <p class="text-muted-foreground truncate font-mono text-xs"> </p></a> <span class="truncate text-sm"> </span> <span class="text-muted-foreground text-right text-xs"> </span>`,1),U=l(`<div class="space-y-6"><!> <!> <!></div>`);function W(l,W){e(W,!0);let G=h(!1),K=h(!1),q=h(``),J=h(``),Y=h(``);f(()=>{d(G)&&!d(Y)&&W.data.orgOptions.length>0&&b(Y,W.data.orgOptions[0].id,!0)});async function X(){if(!d(q).trim()){L.error(`Name is required`);return}b(K,!0);try{let e=await fetch(`/api/admin/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:d(q).trim(),description:d(J).trim()||void 0,orgId:d(Y)||void 0})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??`HTTP ${e.status}`)}let t=await e.json();L.success(`Created “${t.name}”`),b(G,!1),b(q,``),b(J,``),await E(),D(`/admin/projects/${t.id}`)}catch(e){L.error(e.message)}finally{b(K,!1)}}var Z=U();n(`1bzxaev`,e=>{x(()=>{S.title=`Admin · Platform projects`})});var Q=y(Z);M(Q,{eyebrow:`Admin`,title:`Platform projects`,description:`Projects owned by platform admins. Grant orgs or individual users view/solve access without project membership.`,actions:e=>{O(e,{size:`sm`,onclick:()=>b(G,!0),class:`gap-1.5`,children:(e,t)=>{var n=z(),r=C(n);A(r,{class:`h-3.5 w-3.5`}),i(),T(e,n)},$$slots:{default:!0}})},$$slots:{actions:!0}});var $=p(Q,2),ee=e=>{var n=t(),r=C(n);_(r,()=>P,(e,n)=>{n(e,{children:(e,n)=>{var r=t(),c=C(r);_(c,()=>F,(e,t)=>{t(e,{class:`space-y-4 pt-6`,children:(e,t)=>{var n=V(),r=C(n),c=y(r);j(c,{for:`new-name`,children:(e,t)=>{i();var n=u(`Name`);T(e,n)},$$slots:{default:!0}});var l=p(c,2);I(l,{id:`new-name`,placeholder:`Shared templates`,get value(){return d(q)},set value(e){b(q,e,!0)}}),a(r);var f=p(r,2),m=y(f);j(m,{for:`new-desc`,children:(e,t)=>{i();var n=u(`Description (optional)`);T(e,n)},$$slots:{default:!0}});var h=p(m,2);I(h,{id:`new-desc`,get value(){return d(J)},set value(e){b(J,e,!0)}}),a(f);var _=p(f,2),v=y(_);j(v,{for:`new-org`,children:(e,t)=>{i();var n=u(`Host organization`);T(e,n)},$$slots:{default:!0}});var x=p(v,2);s(x,21,()=>W.data.orgOptions,e=>e.id,(e,t)=>{var n=B(),r=y(n);a(n);var i={};g(()=>{o(r,`${d(t).name??``} (${d(t).slug??``})`),i!==(i=d(t).id)&&(n.value=(n.__value=d(t).id)??``)}),T(e,n)}),a(x),i(2),a(_);var S=p(_,2),E=y(S);O(E,{variant:`outline`,size:`sm`,onclick:()=>b(G,!1),children:(e,t)=>{i();var n=u(`Cancel`);T(e,n)},$$slots:{default:!0}});var D=p(E,2);O(D,{size:`sm`,get disabled(){return d(K)},onclick:X,children:(e,t)=>{i();var n=u();g(()=>o(n,d(K)?`Creating…`:`Create`)),T(e,n)},$$slots:{default:!0}}),a(S),w(x,()=>d(Y),e=>b(Y,e)),T(e,n)},$$slots:{default:!0}})}),T(e,r)},$$slots:{default:!0}})}),T(e,n)};r($,e=>{d(G)&&e(ee)});var te=p($,2);_(te,()=>P,(e,n)=>{n(e,{children:(e,n)=>{var i=t(),s=C(i);_(s,()=>F,(e,n)=>{n(e,{class:`pt-6`,children:(e,n)=>{var i=t(),s=C(i),l=e=>{N(e,{get icon(){return k},title:`No platform projects`,description:`Click “New project” to create one. Platform projects are managed by instance admins and granted to orgs or individual users.`})},u=e=>{R(e,{get rows(){return W.data.projects},getKey:e=>e.id,columns:[{label:`Project`},{label:`Host org`,width:`200px`},{label:`Created`,width:`140px`,align:`right`}],row:(e,t=c)=>{var n=H(),r=C(n),i=y(r),s=y(i,!0);a(i);var l=p(i,2),u=y(l,!0);a(l),a(r);var d=p(r,2),f=y(d,!0);a(d);var h=p(d,2),_=y(h,!0);a(h),g(e=>{m(r,`href`,`/admin/projects/${t().id}`),o(s,t().name),o(u,t().slug),o(f,t().hostOrgName),o(_,e)},[()=>new Date(t().createdAt).toLocaleDateString()]),T(e,n)},$$slots:{row:!0}})};r(s,e=>{W.data.projects.length===0?e(l):e(u,-1)}),T(e,i)},$$slots:{default:!0}})}),T(e,i)},$$slots:{default:!0}})}),a(Z),T(l,Z),v()}export{W as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{At as e,B as t,D as n,F as r,Ft as i,It as a,L as o,M as s,Rt as c,V as l,W as u,X as d,at as f,dt as p,ft as m,g as h,gt as g,h as _,it as v,k as y,kt as b,l as ee,lt as x,mt as S,o as C,s as w,st as T,tt as te,ut as E,y as ne,yt as D,z as O}from"../chunks/Cke4knuE.js";import{i as k,r as re}from"../chunks/Ckf7D9mx.js";import"../chunks/xihTtKlq.js";import{n as A}from"../chunks/DSGwkBAQ.js";import{t as j}from"../chunks/DryGTRV9.js";import{t as ie}from"../chunks/oHhA487o.js";import{t as ae}from"../chunks/BVBwPLPv.js";import{t as oe}from"../chunks/ztBd1gZj.js";import{t as se}from"../chunks/COQXRZGa.js";import{t as ce}from"../chunks/BmnySeU9.js";import{t as le}from"../chunks/Dz00jH5u.js";import{t as M}from"../chunks/C2ulfLBp.js";import{a as ue,i as N,n as P,r as de,t as fe}from"../chunks/E0FrUJ1t.js";import{t as pe}from"../chunks/10viO958.js";import{t as F}from"../chunks/ehM2QOgk.js";import{n as I,t as L}from"../chunks/DJq7n-sf.js";import{t as me}from"../chunks/D3p1tqid.js";import{n as R}from"../chunks/BVvGdFdF2.js";import{t as z}from"../chunks/DvAc6wqz2.js";import"../chunks/Cke7eHHM2.js";import{n as he,t as ge}from"../chunks/ByF1UaRp2.js";var B=new Set([`$$slots`,`$$events`,`$$legacy`]);function V(e,t){let n=C(t,B),r=[[`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:`M10 9H8`}],[`path`,{d:`M16 13H8`}],[`path`,{d:`M16 17H8`}]];A(e,w({name:`file-text`},()=>n,{get iconNode(){return r}}))}var _e=l(`<!> Grants <span class="text-muted-foreground ml-1 font-mono text-[11px]"> </span>`,1),ve=l(`<!> Definitions <span class="text-muted-foreground ml-1 font-mono text-[11px]"> </span>`,1),ye=l(`<!> Settings`,1),be=l(`<!> <!> <!>`,1),xe=l(`<!> Add grant`,1),Se=l(`<option> </option>`),Ce=l(`<div class="bg-muted/30 space-y-3 rounded-lg border p-4"><div class="space-y-1.5"><!> <div class="flex gap-2"><!> <!></div></div> <div class="space-y-1.5"><!> <select id="grantee-id" class="border-input bg-background h-10 w-full rounded-md border px-3 text-sm"></select></div> <label class="flex items-center gap-2 text-sm"><input type="checkbox"/> Allow solving (uncheck for view-only)</label> <div class="flex justify-end gap-2"><!> <!></div></div>`),we=l(`<p class="text-muted-foreground truncate text-xs"> </p>`),Te=l(`<div class="min-w-0"><p class="truncate text-sm font-medium"> </p> <!></div> <span class="text-xs capitalize"> </span> <span class="text-xs"> </span> <div class="text-right"><!></div>`,1),Ee=l(`<div class="flex items-center justify-between"><div><p class="text-sm font-medium">Access grants</p> <p class="text-muted-foreground text-xs">Orgs or users you've granted view/solve access. Instance admins always have full
|
|
2
|
+
access.</p></div> <!></div> <!> <!>`,1),De=l(`<a class="min-w-0 hover:underline"><p class="truncate text-sm font-medium"> </p> <p class="text-muted-foreground truncate font-mono text-xs"> </p></a> <span class="text-xs capitalize"> </span> <span class="text-muted-foreground text-right text-xs"> </span>`,1),Oe=l(`<div class="flex items-center justify-between"><div><p class="text-sm font-medium">Definitions</p> <p class="text-muted-foreground text-xs">Upload and edit definitions through the standard project view.</p></div> <!></div> <!>`,1),ke=l(`<!> `,1),Ae=l(`<div class="space-y-1.5"><!> <!></div> <div class="space-y-1.5"><!> <!></div> <div class="flex items-center justify-between pt-2"><!> <!></div>`,1),je=l(`<!> <!> <!> <!>`,1),Me=l(`<div class="space-y-6"><div><a href="/admin/projects" class="text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-xs"><!> Platform projects</a></div> <!> <!></div>`);function H(l,C){e(C,!0);let w=g(m(C.data.project.name)),A=g(m(C.data.project.description??``)),B=g(!1),H=g(!1);f(()=>{S(w,C.data.project.name,!0),S(A,C.data.project.description??``,!0)});async function Ne(){if(!d(w).trim()){R.error(`Name is required`);return}S(B,!0);try{let e=await fetch(`/api/admin/projects/${C.data.project.id}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:d(w).trim(),description:d(A).trim()||null})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??`HTTP ${e.status}`)}R.success(`Saved`),await k()}catch(e){R.error(e.message)}finally{S(B,!1)}}async function Pe(){if(confirm(`Delete “${C.data.project.name}”? This cannot be undone.`)){S(H,!0);try{let e=await fetch(`/api/admin/projects/${C.data.project.id}`,{method:`DELETE`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??`HTTP ${e.status}`)}R.success(`Project deleted`),re(`/admin/projects`)}catch(e){R.error(e.message),S(H,!1)}}}let U=g(!1),W=g(`org`),G=g(``),K=g(!0),q=g(!1),J=g(null),Y=D(()=>d(W)===`org`?C.data.orgOptions.map(e=>({id:e.id,label:e.name,sub:e.slug})):C.data.userOptions.map(e=>({id:e.id,label:he(e,e.id),sub:ge(e)}))),X=D(()=>new Set(C.data.grants.filter(e=>e.granteeType===d(W)).map(e=>e.granteeId)));f(()=>{d(Y).find(e=>e.id===d(G))||S(G,d(Y).find(e=>!d(X).has(e.id))?.id??``,!0)});async function Fe(){if(!d(G)){R.error(`Pick a grantee`);return}S(q,!0);try{let e=await fetch(`/api/admin/projects/${C.data.project.id}/grants`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({granteeType:d(W),granteeId:d(G),canSolve:d(K)})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.message??`HTTP ${e.status}`)}R.success(`Grant added`),S(U,!1),S(G,``),S(K,!0),await k()}catch(e){R.error(e.message)}finally{S(q,!1)}}async function Ie(e){S(J,e,!0);try{let t=await fetch(`/api/admin/projects/${C.data.project.id}/grants/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??`HTTP ${t.status}`)}R.success(`Grant revoked`),await k()}catch(e){R.error(e.message)}finally{S(J,null)}}var Z=Me();n(`t02vfz`,e=>{te(()=>{T.title=`Admin · ${C.data.project.name??``}`})});var Q=x(Z),Le=x(Q),Re=x(Le);ie(Re,{class:`h-3 w-3`}),i(),a(Le),a(Q);var $=p(Q,2);{let e=D(()=>C.data.project.description??void 0);pe($,{eyebrow:`Platform project`,get title(){return C.data.project.name},get description(){return d(e)}})}var ze=p($,2);y(ze,()=>ue,(e,n)=>{n(e,{value:`grants`,children:(e,n)=>{var l=je(),f=E(l);y(f,()=>de,(e,t)=>{t(e,{children:(e,t)=>{var n=be(),r=E(n);y(r,()=>P,(e,t)=>{t(e,{value:`grants`,class:`gap-1.5`,children:(e,t)=>{var n=_e(),r=E(n);se(r,{class:`h-3.5 w-3.5`});var i=p(r,2),s=x(i,!0);a(i),v(()=>o(s,C.data.grants.length)),O(e,n)},$$slots:{default:!0}})});var s=p(r,2);y(s,()=>P,(e,t)=>{t(e,{value:`definitions`,class:`gap-1.5`,children:(e,t)=>{var n=ve(),r=E(n);V(r,{class:`h-3.5 w-3.5`});var i=p(r,2),s=x(i,!0);a(i),v(()=>o(s,C.data.definitions.length)),O(e,n)},$$slots:{default:!0}})});var c=p(s,2);y(c,()=>P,(e,t)=>{t(e,{value:`settings`,class:`gap-1.5`,children:(e,t)=>{var n=ye(),r=E(n);oe(r,{class:`h-3.5 w-3.5`}),i(),O(e,n)},$$slots:{default:!0}})}),O(e,n)},$$slots:{default:!0}})});var m=p(f,2);y(m,()=>N,(e,n)=>{n(e,{value:`grants`,class:`mt-4 space-y-4`,children:(e,n)=>{var l=t(),f=E(l);y(f,()=>I,(e,n)=>{n(e,{children:(e,n)=>{var l=t(),f=E(l);y(f,()=>L,(e,t)=>{t(e,{class:`space-y-4 pt-6`,children:(e,t)=>{var n=Ee(),l=E(n),f=p(x(l),2);j(f,{size:`sm`,onclick:()=>S(U,!d(U)),class:`gap-1.5`,children:(e,t)=>{var n=xe(),r=E(n);ae(r,{class:`h-3.5 w-3.5`}),i(),O(e,n)},$$slots:{default:!0}}),a(l);var m=p(l,2),h=e=>{var t=Ce(),n=x(t),r=x(n);M(r,{children:(e,t)=>{i();var n=u(`Grantee type`);O(e,n)},$$slots:{default:!0}});var c=p(r,2),l=x(c);{let e=D(()=>d(W)===`org`?`default`:`outline`);j(l,{get variant(){return d(e)},size:`sm`,onclick:()=>S(W,`org`),children:(e,t)=>{i();var n=u(`Organization`);O(e,n)},$$slots:{default:!0}})}var f=p(l,2);{let e=D(()=>d(W)===`user`?`default`:`outline`);j(f,{get variant(){return d(e)},size:`sm`,onclick:()=>S(W,`user`),children:(e,t)=>{i();var n=u(`Individual user`);O(e,n)},$$slots:{default:!0}})}a(c),a(n);var m=p(n,2),h=x(m);M(h,{for:`grantee-id`,children:(e,t)=>{i();var n=u();v(()=>o(n,d(W)===`org`?`Organization`:`User`)),O(e,n)},$$slots:{default:!0}});var g=p(h,2);s(g,21,()=>d(Y),e=>e.id,(e,t)=>{var n=Se(),r=x(n);a(n);var i={};v((e,a)=>{n.disabled=e,o(r,`${d(t).label??``}${d(t).sub?` — ${d(t).sub}`:``}${a??``}`),i!==(i=d(t).id)&&(n.value=(n.__value=d(t).id)??``)},[()=>d(X).has(d(t).id),()=>d(X).has(d(t).id)?` (already granted)`:``]),O(e,n)}),a(g),a(m);var y=p(m,2),b=x(y);_(b),i(),a(y);var C=p(y,2),w=x(C);j(w,{variant:`outline`,size:`sm`,onclick:()=>S(U,!1),children:(e,t)=>{i();var n=u(`Cancel`);O(e,n)},$$slots:{default:!0}});var T=p(w,2);{let e=D(()=>d(q)||!d(G));j(T,{size:`sm`,get disabled(){return d(e)},onclick:Fe,children:(e,t)=>{i();var n=u();v(()=>o(n,d(q)?`Adding…`:`Add grant`)),O(e,n)},$$slots:{default:!0}})}a(C),a(t),ne(g,()=>d(G),e=>S(G,e)),ee(b,()=>d(K),e=>S(K,e)),O(e,t)};r(m,e=>{d(U)&&e(h)});var g=p(m,2),y=e=>{F(e,{size:`sm`,get icon(){return se},title:`No grants yet`,description:`Add a grant to share this project with an org or specific user.`})},b=e=>{z(e,{get rows(){return C.data.grants},getKey:e=>e.id,columns:[{label:`Grantee`},{label:`Type`,width:`120px`},{label:`Access`,width:`120px`},{label:``,width:`40px`,align:`right`}],row:(e,t=c)=>{var n=Te(),i=E(n),s=x(i),l=x(s,!0);a(s);var u=p(s,2),f=e=>{var n=we(),r=x(n,!0);a(n),v(()=>o(r,t().granteeSubtitle)),O(e,n)};r(u,e=>{t().granteeSubtitle&&e(f)}),a(i);var m=p(i,2),h=x(m,!0);a(m);var g=p(m,2),_=x(g,!0);a(g);var y=p(g,2),b=x(y);{let e=D(()=>d(J)===t().id);j(b,{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive h-7 w-7 p-0`,get disabled(){return d(e)},onclick:()=>Ie(t().id),children:(e,t)=>{le(e,{class:`h-3.5 w-3.5`})},$$slots:{default:!0}})}a(y),v(()=>{o(l,t().granteeName),o(h,t().granteeType),o(_,t().canSolve?`View + solve`:`View only`)}),O(e,n)},$$slots:{row:!0}})};r(g,e=>{C.data.grants.length===0?e(y):e(b,-1)}),O(e,n)},$$slots:{default:!0}})}),O(e,l)},$$slots:{default:!0}})}),O(e,l)},$$slots:{default:!0}})});var g=p(m,2);y(g,()=>N,(e,n)=>{n(e,{value:`definitions`,class:`mt-4 space-y-4`,children:(e,n)=>{var s=t(),l=E(s);y(l,()=>I,(e,n)=>{n(e,{children:(e,n)=>{var s=t(),l=E(s);y(l,()=>L,(e,t)=>{t(e,{class:`space-y-4 pt-6`,children:(e,t)=>{var n=Oe(),s=E(n),l=p(x(s),2);j(l,{size:`sm`,variant:`outline`,onclick:()=>re(`/projects?project=${C.data.project.slug}`),children:(e,t)=>{i();var n=u(`Open in projects`);O(e,n)},$$slots:{default:!0}}),a(s);var d=p(s,2),f=e=>{F(e,{size:`sm`,get icon(){return V},title:`No definitions yet`,description:`Open this project in the projects view to upload .gh files.`})},m=e=>{z(e,{get rows(){return C.data.definitions},getKey:e=>e.guid,columns:[{label:`Definition`},{label:`Status`,width:`120px`},{label:`Updated`,width:`140px`,align:`right`}],row:(e,t=c)=>{var n=De(),r=E(n),i=x(r),s=x(i,!0);a(i);var l=p(i,2),u=x(l,!0);a(l),a(r);var d=p(r,2),f=x(d,!0);a(d);var m=p(d,2),g=x(m,!0);a(m),v(e=>{h(r,`href`,`/library/${t().guid}`),o(s,t().displayName),o(u,t().guid),o(f,t().status),o(g,e)},[()=>new Date(t().updatedAt).toLocaleDateString()]),O(e,n)},$$slots:{row:!0}})};r(d,e=>{C.data.definitions.length===0?e(f):e(m,-1)}),O(e,n)},$$slots:{default:!0}})}),O(e,s)},$$slots:{default:!0}})}),O(e,s)},$$slots:{default:!0}})});var b=p(g,2);y(b,()=>N,(e,n)=>{n(e,{value:`settings`,class:`mt-4 space-y-4`,children:(e,n)=>{var r=t(),s=E(r);y(s,()=>I,(e,n)=>{n(e,{children:(e,n)=>{var r=t(),s=E(r);y(s,()=>L,(e,t)=>{t(e,{class:`space-y-4 pt-6`,children:(e,t)=>{var n=Ae(),r=E(n),s=x(r);M(s,{for:`proj-name`,children:(e,t)=>{i();var n=u(`Name`);O(e,n)},$$slots:{default:!0}});var c=p(s,2);me(c,{id:`proj-name`,get value(){return d(w)},set value(e){S(w,e,!0)}}),a(r);var l=p(r,2),f=x(l);M(f,{for:`proj-desc`,children:(e,t)=>{i();var n=u(`Description`);O(e,n)},$$slots:{default:!0}});var m=p(f,2);fe(m,{id:`proj-desc`,rows:3,get value(){return d(A)},set value(e){S(A,e,!0)}}),a(l);var h=p(l,2),g=x(h);j(g,{onclick:Pe,variant:`ghost`,size:`sm`,get disabled(){return d(H)},class:`text-destructive hover:text-destructive gap-1.5 px-2`,children:(e,t)=>{var n=ke(),r=E(n);ce(r,{class:`h-3.5 w-3.5`});var i=p(r);v(()=>o(i,` ${d(H)?`Deleting…`:`Delete project`}`)),O(e,n)},$$slots:{default:!0}});var _=p(g,2);j(_,{size:`sm`,get disabled(){return d(B)},onclick:Ne,children:(e,t)=>{i();var n=u();v(()=>o(n,d(B)?`Saving…`:`Save`)),O(e,n)},$$slots:{default:!0}}),a(h),O(e,n)},$$slots:{default:!0}})}),O(e,r)},$$slots:{default:!0}})}),O(e,r)},$$slots:{default:!0}})}),O(e,l)},$$slots:{default:!0}})}),a(Z),O(l,Z),b()}export{H as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$ as e,At as t,B as n,C as r,D as i,E as a,F as o,Ft as s,G as c,It as l,K as u,L as d,M as f,P as p,V as m,W as h,X as g,a as _,at as v,c as y,d as b,dt as x,f as S,ft as C,g as w,gt as T,h as ee,it as E,k as D,kt as O,lt as k,mt as A,nt as j,o as M,s as N,st as P,ut as F,y as I,yt as L,z as R,zt as te}from"../chunks/Cke4knuE.js";import"../chunks/xihTtKlq.js";import{n as z}from"../chunks/DSGwkBAQ.js";import{t as B}from"../chunks/DryGTRV9.js";import{n as V,r as H,t as U}from"../chunks/0lP-Rpma.js";import{t as W}from"../chunks/B5Aipckh.js";import{t as ne}from"../chunks/BJdlp6TT.js";import{t as G}from"../chunks/B4mCYsis.js";import{t as re}from"../chunks/BOS-wpIV.js";import{a as ie,c as ae,i as oe,n as se,o as ce,r as le,s as ue,t as de}from"../chunks/BMa8pQBT.js";import{t as fe}from"../chunks/10viO958.js";import{n as K,t as q}from"../chunks/DJq7n-sf.js";import{t as J}from"../chunks/KXvDoa1V.js";import{n as Y,t as X}from"../chunks/sPP9TUD-.js";import{t as pe}from"../chunks/
|
|
1
|
+
import{$ as e,At as t,B as n,C as r,D as i,E as a,F as o,Ft as s,G as c,It as l,K as u,L as d,M as f,P as p,V as m,W as h,X as g,a as _,at as v,c as y,d as b,dt as x,f as S,ft as C,g as w,gt as T,h as ee,it as E,k as D,kt as O,lt as k,mt as A,nt as j,o as M,s as N,st as P,ut as F,y as I,yt as L,z as R,zt as te}from"../chunks/Cke4knuE.js";import"../chunks/xihTtKlq.js";import{n as z}from"../chunks/DSGwkBAQ.js";import{t as B}from"../chunks/DryGTRV9.js";import{n as V,r as H,t as U}from"../chunks/0lP-Rpma.js";import{t as W}from"../chunks/B5Aipckh.js";import{t as ne}from"../chunks/BJdlp6TT.js";import{t as G}from"../chunks/B4mCYsis.js";import{t as re}from"../chunks/BOS-wpIV.js";import{a as ie,c as ae,i as oe,n as se,o as ce,r as le,s as ue,t as de}from"../chunks/BMa8pQBT.js";import{t as fe}from"../chunks/10viO958.js";import{n as K,t as q}from"../chunks/DJq7n-sf.js";import{t as J}from"../chunks/KXvDoa1V.js";import{n as Y,t as X}from"../chunks/sPP9TUD-.js";import{t as pe}from"../chunks/B9E4JNPD2.js";var me=new Set([`$$slots`,`$$events`,`$$legacy`]);function he(e,t){let n=M(t,me),r=[[`path`,{d:`M12 5v14`}],[`path`,{d:`m19 12-7 7-7-7`}]];z(e,N({name:`arrow-down`},()=>n,{get iconNode(){return r}}))}var ge=new Set([`$$slots`,`$$events`,`$$legacy`]);function _e(e,t){let n=M(t,ge),r=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]];z(e,N({name:`arrow-up`},()=>n,{get iconNode(){return r}}))}var ve=new Set([`$$slots`,`$$events`,`$$legacy`]);function ye(e,t){let n=M(t,ve),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m16 12-4-4-4 4`}],[`path`,{d:`M12 16V8`}]];z(e,N({name:`circle-arrow-up`},()=>n,{get iconNode(){return r}}))}var be=new Set([`$$slots`,`$$events`,`$$legacy`]);function xe(e,t){let n=M(t,be),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m15 9-6 6`}],[`path`,{d:`m9 9 6 6`}]];z(e,N({name:`circle-x`},()=>n,{get iconNode(){return r}}))}var Se=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ce(e,t){let n=M(t,Se),r=[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`}],[`path`,{d:`M6.453 15h11.094`}],[`path`,{d:`M8.5 2h7`}]];z(e,N({name:`flask-conical`},()=>n,{get iconNode(){return r}}))}var we=new Set([`$$slots`,`$$events`,`$$legacy`]);function Te(e,t){let n=M(t,we),r=[[`path`,{d:`M11 2v2`}],[`path`,{d:`M5 2v2`}],[`path`,{d:`M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1`}],[`path`,{d:`M8 15a6 6 0 0 0 12 0v-3`}],[`circle`,{cx:`20`,cy:`10`,r:`2`}]];z(e,N({name:`stethoscope`},()=>n,{get iconNode(){return r}}))}function Z(e,t){let n=t.exec(e);return n?n[1]:void 0}function Ee(e){let t=String.raw`\d+\.\d+\.\d+[^\s]*`,n=new RegExp(String.raw`(?:Target \([^)]*\)|Available):\s*(${t})\s*(?:→|->)\s*(${t})`).exec(e);return{from:Z(e,/Current @selvajs\/selva:\s*v?(\d+\.\d+\.\d+[^\s]*)/)??n?.[1],to:Z(e,/New @selvajs\/selva:\s*v?(\d+\.\d+\.\d+[^\s]*)/)??n?.[2]}}function Q(e,t){return e.includes(t)}function De(e,t){let{from:n,to:r}=Ee(t);if(e===null)return{severity:`pending`,title:`Update in progress…`};if(e===6||Q(t,`Manual recovery required`)||Q(t,`manual intervention required`))return{severity:`critical`,title:`Update failed AND rollback failed — the app may be OFFLINE`,detail:"Both the new version and the rollback failed their health check. SSH into the server and run: `pm2 logs selva-compute`, then `pm2 start ecosystem.config.cjs` from the deployment directory.",from:n,to:r};if(e===-2)return{severity:`critical`,title:`App did not come back online within 15 minutes`,detail:"The update may still be finishing in the background, or the new process is crash-looping. Check `pm2 logs selva-compute`. Do not re-run the update until you have confirmed the current state.",from:n,to:r};if(e===4)return{severity:`critical`,title:`Update failed and the rollback could not reinstall — the app may be OFFLINE`,detail:"The previous version could not be restored from npm. SSH into the server and run `pm2 logs selva-compute`; if the app is down, reinstall explicitly with `npm install --prefer-online @selvajs/cli@<version> @selvajs/selva@<version>` from the deployment directory.",from:n,to:r};if(e===3)return{severity:`critical`,title:`Update failed its health check and could not be rolled back automatically`,detail:"No prior version was recorded, so the previous build could not be restored. Check `pm2 logs selva-compute` to confirm whether the app came back online.",from:n,to:r};if(e===143||e===130||e===129||Q(t,`KILLED`))return{severity:`critical`,title:`Update was killed before it finished — nothing was installed`,detail:"The runner was terminated mid-update, most often by a systemd-supervised PM2 restarting its whole control group. The version on disk is unchanged. Check `pm2 logs selva-compute` and confirm the app is online before retrying; if a global pm2 owns the daemon, reconcile that first.",from:n,to:r};if(e===9||Q(t,`SYSTEMD_PM2`))return{severity:`warning`,title:`Update cancelled — PM2 needs a resync that only a shell can do safely. The app is untouched.`,detail:"This deployment's PM2 runs under systemd, where `pm2 update` restarts the unit and kills the update mid-run. Nothing was installed and the app is still serving. SSH in and run `./node_modules/.bin/pm2 update` from the deployment directory, then retry the update here.",from:n,to:r};if(e===8||Q(t,`PM2_SKEW`)){let e=Z(t,/daemon \(v(\d+\.\d+\.\d+)\)/),i=Z(t,/deployment's pm2 \(v(\d+\.\d+\.\d+)\)/);return{severity:`warning`,title:e&&i?`Update cancelled — a global PM2 (v${e}) owns the daemon, not this deployment's (v${i}). The app is untouched.`:`Update cancelled — a conflicting global PM2 owns the daemon. The app is untouched.`,detail:"Resyncing would have downgraded the daemon and dropped its process table, so the update stopped before taking the app down. On the server: `which -a pm2`, `pm2 -v`, `pm2 ping` — remove or align the global pm2, then retry.",from:n,to:r}}if(e===5||Q(t,`Rolled back`))return{severity:`warning`,title:`Update failed — safely rolled back${n?` to ${n}`:``}. The app is online.`,detail:`The new version failed its health check, so the previous version was restored and is serving normally. Review the log below for why the new version failed before retrying.`,from:n,to:r};if(Q(t,`ENGINE_MISMATCH`)||Q(t,`EBADENGINE`)){let e=Z(t,/requires Node ([^\s]+(?:\s*[<>=]+\s*[\d.]+)*)/),i=Z(t,/this host runs v?(\d+\.\d+\.\d+)/);return{severity:`warning`,title:i?`Updated${r?` to ${r}`:``}, but this release needs Node ${e??`(newer)`} — the host runs v${i}. Expect runtime failures.`:`Updated${r?` to ${r}`:``}, but this release requires a newer Node than the host provides. Expect runtime failures.`,detail:`npm installed it anyway (engine-strict is off) and the health check passed, but it does not exercise the newer APIs — routes that do will throw at request time. Upgrade Node on the server, then re-run the update.`,from:n,to:r}}return Q(t,`npm cache may be stale`)||Q(t,`No version change`)?{severity:`warning`,title:`No version change — npm installed the same version.`,detail:"Your npm cache may be stale. On the server: `npm cache clean --force`, remove node_modules + package-lock.json, then `npm install --prefer-online`.",from:n,to:r}:e===0?Q(t,`Already on the`)||Q(t,`Nothing to do`)?{severity:`info`,title:`Already up to date${n?` (${n})`:``} — nothing to install.`,detail:`No changes were made and the app was not restarted.`,from:n,to:r}:n&&r&&n!==r?{severity:`success`,title:`Updated ${n} → ${r}. The app is back online.`,from:n,to:r}:r?{severity:`success`,title:`Update complete — now on ${r}. The app is back online.`,from:n,to:r}:{severity:`success`,title:`Update completed and the app is back online.`,from:n,to:r}:{severity:`critical`,title:`Update failed (exit code ${e}).`,detail:"The update did not complete cleanly. Review the log below, and check `pm2 logs selva-compute` to confirm whether the app is currently online.",from:n,to:r}}var Oe=m(`<span title="Currently installed @selvajs/selva version"> </span>`),ke=m(`Update @selvajs/* to the latest <span class="font-medium"> </span> release and restart`,1),Ae=m(`<div class="flex items-start justify-between gap-3"><!> <!></div> <!>`,1),je=m(`<div class="border-warning/40 bg-warning/10 text-warning flex items-center gap-2 rounded-md border px-3 py-2 text-sm" role="status"><!> <span> <span class="font-mono"> </span> → <span class="font-mono"> </span></span></div>`),Me=m(`<p class="text-muted-foreground text-sm"> <span class="font-mono"> </span>).</p>`),Ne=m(`<button type="button" class="text-muted-foreground hover:text-foreground text-xs underline underline-offset-2">Override anyway (advanced)</button>`),Pe=m(`<div class="space-y-2"><label class="text-muted-foreground block text-xs" for="node-override">Type <span class="text-foreground font-mono"> </span> to confirm you accept
|
|
2
2
|
a deployment that may fail under real traffic:</label> <input id="node-override" class="border-input bg-background w-full rounded-md border px-2 py-1 font-mono text-xs" autocomplete="off" spellcheck="false"/></div>`),Fe=m(`<div class="border-destructive/40 bg-destructive/10 space-y-3 rounded-md border px-3 py-3 text-sm" role="alert"><div class="text-destructive flex items-start gap-2"><!> <div class="space-y-1"><p class="font-medium">Update blocked — this release needs a newer Node</p> <p class="text-muted-foreground text-xs"><span class="font-mono"> </span> requires Node <span class="font-mono"> </span>, but this host runs <span class="font-mono"> </span>. npm installs it anyway
|
|
3
3
|
and the health check still passes, so a failed update would <span class="font-medium">not</span> roll back automatically. Upgrade Node on the server
|
|
4
4
|
first.</p></div></div> <!></div>`),Ie=m(`<div class="border-border bg-muted/50 text-muted-foreground flex items-center gap-2 rounded-md border px-3 py-2 text-sm"><!> <span>PM2 is restarting the app — waiting for the new process to come online…</span></div>`),Le=m(`<p class="text-muted-foreground font-mono text-xs"> </p>`),Re=m(`<p class="text-muted-foreground text-xs whitespace-pre-line"> </p>`),ze=m(`<div><!> <div class="min-w-0 space-y-1"><p> </p> <!> <!></div></div>`),Be=m(`<div class="space-y-2"><h4 class="text-sm font-medium">Update Logs</h4> <pre class="bg-muted text-foreground max-h-96 overflow-auto rounded-md p-4 font-mono text-xs"> </pre></div>`),Ve=m(`<!> <!> <!> <!> <!> <!>`,1),He=m(`<!> <!>`,1),Ue=m(`<!> <!> <!>`,1);function We(e,i){t(i,!0);let a=_(i,`latestVersion`,3,null),c=_(i,`updateAvailable`,3,!1),f=_(i,`channel`,3,`stable`),p=_(i,`isRunning`,3,!1),m=_(i,`isRestarting`,3,!1),b=_(i,`logs`,3,``),C=_(i,`exitCode`,3,null),j=_(i,`nodeCompatibility`,19,()=>({compatible:null,required:null,running:``})),M=L(()=>j().compatible===!1),N=T(``),P=T(!1),I=L(()=>g(P)&&!!a()&&g(N).trim()===a()),te=L(()=>p()||g(M)&&!g(I)),z=L(()=>f()===`beta`?`beta`:`stable`),U=T(void 0),W=T(!1),G=L(()=>C()===null?null:De(C(),b())),fe={success:{text:`text-success`,border:`border-success/40`,bg:`bg-success/10`,icon:H},info:{text:`text-foreground`,border:`border-border`,bg:`bg-muted/50`,icon:V},warning:{text:`text-warning`,border:`border-warning/40`,bg:`bg-warning/10`,icon:re},critical:{text:`text-destructive`,border:`border-destructive/40`,bg:`bg-destructive/10`,icon:xe},pending:{text:`text-muted-foreground`,border:`border-border`,bg:`bg-muted/50`,icon:ne}};v(()=>{b()&&g(U)&&(g(U).scrollTop=g(U).scrollHeight)});function pe(){return m()?`Restarting & verifying…`:p()?`Running…`:`Run Update`}function me(){A(W,!0)}function he(){A(W,!1),i.onRun?.()}var ge=He(),_e=F(ge);D(_e,()=>K,(e,t)=>{t(e,{children:(e,t)=>{var n=He(),f=F(n);D(f,()=>Y,(e,t)=>{t(e,{children:(e,t)=>{var n=Ae(),a=F(n),u=k(a);D(u,()=>X,(e,t)=>{t(e,{children:(e,t)=>{s();var n=h(`Application Update`);R(e,n)},$$slots:{default:!0}})});var f=x(u,2),p=e=>{var t=Oe(),n=k(t);l(t),E(()=>{r(t,1,`rounded-full border px-2 py-0.5 font-mono text-xs ${c()?`border-warning/40 bg-warning/10 text-warning`:`border-border bg-muted text-muted-foreground`}`),d(n,`v${i.currentVersion??``}`)}),R(e,t)};o(f,e=>{i.currentVersion&&e(p)}),l(a);var m=x(a,2);D(m,()=>J,(e,t)=>{t(e,{children:(e,t)=>{s();var n=ke(),r=x(F(n)),i=k(r,!0);l(r),s(),E(()=>d(i,g(z))),R(e,n)},$$slots:{default:!0}})}),R(e,n)},$$slots:{default:!0}})});var p=x(f,2);D(p,()=>q,(e,t)=>{t(e,{class:`space-y-4`,children:(e,t)=>{var n=Ve(),f=F(n),p=e=>{var t=je(),n=k(t);ye(n,{class:`h-4 w-4 shrink-0`});var r=x(n,2),o=k(r),s=x(o),c=k(s);l(s);var u=x(s,2),f=k(u);l(u),l(r),l(t),E(()=>{d(o,`${g(z)??``} release available — `),d(c,`v${i.currentVersion??``}`),d(f,`v${a()??``}`)}),R(e,t)},_=e=>{var t=Me(),n=k(t),r=x(n),a=k(r);l(r),s(),l(t),E(()=>{d(n,`You're on the latest ${g(z)??``} release (`),d(a,`v${i.currentVersion??``}`)}),R(e,t)};o(f,e=>{c()&&a()?e(p):i.currentVersion&&a()&&e(_,1)});var v=x(f,2),T=e=>{var t=Fe(),n=k(t),r=k(n);re(r,{class:`mt-0.5 h-4 w-4 shrink-0`});var i=x(r,2),c=x(k(i),2),f=k(c),p=k(f);l(f);var m=x(f,2),h=k(m,!0);l(m);var _=x(m,2),v=k(_);l(_),s(3),l(c),l(i),l(n);var y=x(n,2),b=e=>{var t=Ne();u(`click`,t,()=>A(P,!0)),R(e,t)},C=e=>{var t=Pe(),n=k(t),r=x(k(n)),i=k(r,!0);l(r),s(),l(n);var o=x(n,2);ee(o),l(t),E(()=>{d(i,a()),w(o,`placeholder`,a()??``)}),S(o,()=>g(N),e=>A(N,e)),R(e,t)};o(y,e=>{g(P)?e(C,-1):e(b)}),l(t),E(()=>{d(p,`v${a()??``}`),d(h,j().required),d(v,`v${j().running??``}`)}),R(e,t)};o(v,e=>{g(M)&&e(T)});var O=x(v,2);B(O,{onclick:me,get disabled(){return g(te)},variant:`destructive`,children:(e,t)=>{s();var n=h();E(e=>d(n,e),[()=>pe()]),R(e,n)},$$slots:{default:!0}});var I=x(O,2),V=e=>{var t=Ie(),n=k(t);ne(n,{class:`h-4 w-4 animate-spin`}),s(2),l(t),R(e,t)};o(I,e=>{m()&&C()===null&&e(V)});var H=x(I,2),W=e=>{let t=L(()=>fe[g(G).severity]),n=L(()=>g(t).icon);var i=ze(),a=k(i);D(a,()=>g(n),(e,n)=>{n(e,{get class(){return`mt-0.5 h-5 w-5 shrink-0 ${g(t).text??``}`}})});var s=x(a,2),c=k(s),u=k(c,!0);l(c);var f=x(c,2),p=e=>{var t=Le(),n=k(t);l(t),E(()=>d(n,`${g(G).from??``} → ${g(G).to??``}`)),R(e,t)};o(f,e=>{g(G).from&&g(G).to&&g(G).from!==g(G).to&&e(p)});var m=x(f,2),h=e=>{var t=Re(),n=k(t,!0);l(t),E(()=>d(n,g(G).detail)),R(e,t)};o(m,e=>{g(G).detail&&e(h)}),l(s),l(i),E(()=>{r(i,1,`flex items-start gap-3 rounded-md border px-3 py-3 ${g(t).border??``} ${g(t).bg??``}`),w(i,`role`,g(G).severity===`critical`?`alert`:`status`),w(i,`aria-live`,g(G).severity===`critical`?`assertive`:`polite`),r(c,1,`text-sm font-medium ${g(t).text??``}`),d(u,g(G).title)}),R(e,i)};o(H,e=>{g(G)&&e(W)});var ie=x(H,2),ae=e=>{var t=Be(),n=x(k(t),2),r=k(n,!0);l(n),y(n,e=>A(U,e),()=>g(U)),l(t),E(()=>d(r,b())),R(e,t)};o(ie,e=>{b()&&e(ae)}),R(e,n)},$$slots:{default:!0}})}),R(e,n)},$$slots:{default:!0}})});var ve=x(_e,2);D(ve,()=>de,(e,t)=>{t(e,{get open(){return g(W)},onOpenChange:e=>A(W,e,!0),children:(e,t)=>{var r=n(),i=F(r);D(i,()=>le,(e,t)=>{t(e,{children:(e,t)=>{var r=He(),i=F(r);D(i,()=>oe,(e,t)=>{t(e,{children:(e,t)=>{var r=Ue(),i=F(r);D(i,()=>ae,(e,t)=>{t(e,{children:(e,t)=>{s();var n=h();E(()=>d(n,g(M)?`Run Update despite the Node mismatch?`:`Run Update?`)),R(e,n)},$$slots:{default:!0}})});var a=x(i,2),c=e=>{var t=n(),r=F(t);D(r,()=>se,(e,t)=>{t(e,{class:`text-destructive`,children:(e,t)=>{s();var n=h();E(()=>d(n,`This release requires Node ${j().required??``} and the host runs v${j().running??``}.
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{At as e,B as t,C as n,D as r,F as i,Ft as a,G as o,It as s,K as c,L as l,M as u,V as d,W as f,X as p,_ as m,dt as h,ft as g,g as _,gt as v,h as y,it as b,k as x,kt as S,lt as C,mt as w,nt as T,o as E,s as D,st as O,ut as k,y as A,yt as j,z as M}from"../chunks/Cke4knuE.js";import{i as N}from"../chunks/
|
|
2
|
-
permission.`,1),
|
|
3
|
-
Grant them access from <a href="/team/members" class="underline">Members & roles</a>.</p>`),
|
|
4
|
-
selection in <code class="text-xs">.env</code>.`,1),
|
|
1
|
+
import{At as e,B as t,C as n,D as r,F as i,Ft as a,G as o,It as s,K as c,L as l,M as u,V as d,W as f,X as p,_ as m,dt as h,ft as g,g as _,gt as v,h as y,it as b,k as x,kt as S,lt as C,mt as w,nt as T,o as E,s as D,st as O,ut as k,y as A,yt as j,z as M}from"../chunks/Cke4knuE.js";import{i as N}from"../chunks/Ckf7D9mx.js";import"../chunks/xihTtKlq.js";import{n as P}from"../chunks/DSGwkBAQ.js";import{t as F}from"../chunks/DryGTRV9.js";import{t as I}from"../chunks/DX2MELJa.js";import{t as L}from"../chunks/CNcd_3er.js";import{t as R}from"../chunks/Bw8HI0aa.js";import{t as ee}from"../chunks/BVBwPLPv.js";import{t as te}from"../chunks/gu4X15yF.js";import{t as z}from"../chunks/B4mCYsis.js";import{t as B}from"../chunks/BmnySeU9.js";import{t as V}from"../chunks/Dz00jH5u.js";import{t as H}from"../chunks/10viO958.js";import{t as U}from"../chunks/ehM2QOgk.js";import{n as ne,t as re}from"../chunks/DJq7n-sf.js";import{t as ie}from"../chunks/D3p1tqid.js";import{n as W}from"../chunks/BVvGdFdF2.js";import"../chunks/Cke7eHHM2.js";import{i as ae}from"../chunks/BTJ8jaRT2.js";import{n as G,t as K}from"../chunks/ByF1UaRp2.js";import{t as q}from"../chunks/DiCTirHE2.js";var J=new Set([`$$slots`,`$$events`,`$$legacy`]);function Y(e,t){let n=E(t,J),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M4.929 4.929 19.07 19.071`}]];P(e,D({name:`ban`},()=>n,{get iconNode(){return r}}))}var X=d(`<span> </span>`),Z=d(`<span class="border-border bg-muted text-muted-foreground rounded-full border px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">disabled</span>`),oe=d(`<span class="rounded-full border border-amber-500/40 bg-amber-500/5 px-2 py-0.5 font-mono text-[10px] tracking-wide text-amber-600 uppercase dark:text-amber-400" title="Provisioned but has never signed in. Permissions take effect on first login.">never signed in</span>`),se=d(`<span class="rounded-full bg-amber-500/10 px-2 py-0.5 font-mono text-[10px] text-amber-700 dark:text-amber-400"> </span>`),ce=d(`<span class="bg-muted text-muted-foreground rounded-full px-2 py-0.5 font-mono text-[10px]"> </span>`),Q=d(`<div class="mt-1.5 flex flex-wrap gap-1"><!> <!></div>`),le=d(`<label><input type="checkbox" class="mt-0.5 shrink-0"/> <div class="min-w-0"><p class="text-sm leading-tight font-medium"> </p> <p class="text-muted-foreground mt-0.5 text-xs"> </p></div></label>`),ue=d(`<p class="text-muted-foreground text-sm">Not a member of the active organization.</p>`),de=d(`<strong class="text-foreground capitalize"> </strong> hold every organization
|
|
2
|
+
permission.`,1),fe=d(`<p class="text-muted-foreground text-sm"><!></p> <p class="text-muted-foreground mt-2 text-xs">Role and organization permissions are managed at <a href="/team/members" class="underline">Members & roles</a>.</p>`,1),pe=d(`<div class="mt-4 ml-10 space-y-4"><section><h4 class="text-muted-foreground mb-2 text-xs font-medium tracking-wider uppercase">Platform</h4> <div class="grid gap-2 sm:grid-cols-2"></div></section> <section><h4 class="text-muted-foreground mb-2 text-xs font-medium tracking-wider uppercase">Organization</h4> <!></section></div>`),me=d(`<div><div class="flex items-center gap-3"><button type="button" class="text-muted-foreground hover:text-foreground shrink-0 rounded-sm p-0.5"><!></button> <!> <div class="min-w-0 flex-1"><div class="flex items-center gap-2"><p class="truncate text-sm font-medium"> </p> <!> <!></div> <p class="text-muted-foreground truncate font-mono text-xs"> </p> <!></div> <!> <!></div> <!></div>`);function he(t,r){e(r,!0);let o={instance_admin:`Instance admin`,manage_instance_users:`Manage instance users`,manage_compute:`Manage compute`,manage_updates:`Manage updates`,manage_org_members:`Manage org members`,manage_org_compute:`Manage org compute`,manage_definitions:`Manage definitions`,manage_projects:`Manage projects`},d={instance_admin:`Full access to every action on the instance.`,manage_instance_users:`Create, disable, and delete any user on the instance.`,manage_compute:`Configure the instance Rhino.Compute pool.`,manage_updates:`Run the application update script.`,manage_org_members:`Invite, remove, and change roles of org members.`,manage_org_compute:`Configure this org's BYO compute server.`,manage_definitions:`Upload, edit, and delete any definition in the org.`,manage_projects:`Create, edit, and delete any project in the org.`},g={owner:`border-amber-500/40 text-amber-600 dark:text-amber-400 bg-amber-500/5`,admin:`border-blue-500/40 text-blue-600 dark:text-blue-400 bg-blue-500/5`,member:`border-border text-muted-foreground`},v=j(()=>{let e=G(r.user,r.user.id),t=K(r.user);return t?`${e} · ${t}`:e}),x=j(()=>r.user.orgRole===`owner`||r.user.orgRole===`admin`),w=j(()=>p(x)?[]:r.user.orgPermissions),T=j(()=>r.user.platformPermissions.includes(`instance_admin`)),E=j(()=>p(T)&&!r.isPlatformAdmin),D=j(()=>p(E)?`Only a platform admin can remove another platform admin.`:r.soleInstanceAdmin?`Cannot remove the only instance admin. Promote another user first.`:null);function O(e){let t=r.user.platformPermissions.includes(e),n=!r.isPlatformAdmin,i=e===`instance_admin`&&r.soleInstanceAdmin;return{checked:t,locked:n||i,soleAdminLock:i,platformLocked:n}}var A=me(),N=C(A),P=C(N),R=C(P),ee=e=>{I(e,{class:`h-4 w-4`})},te=e=>{L(e,{class:`h-4 w-4`})};i(R,e=>{r.expanded?e(ee):e(te,-1)}),s(P);var z=h(P,2);{let e=j(()=>G(r.user,r.user.id));q(z,{get name(){return p(e)}})}var V=h(z,2),H=C(V),U=C(H),ne=C(U,!0);s(U);var re=h(U,2),ie=e=>{var t=X(),i=C(t,!0);s(t),b(()=>{n(t,1,`rounded-full border px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase ${g[r.user.orgRole]}`),l(i,r.user.orgRole)}),M(e,t)};i(re,e=>{r.user.orgRole&&e(ie)});var W=h(re,2),J=e=>{var t=Z();M(e,t)},he=e=>{var t=oe();M(e,t)};i(W,e=>{r.user.disabled?e(J):r.user.lastLoginAt||e(he,1)}),s(H);var $=h(H,2),ge=C($,!0);s($);var _e=h($,2),ve=e=>{var t=Q(),n=C(t);u(n,16,()=>r.user.platformPermissions,e=>e,(e,t)=>{var n=se(),r=C(n,!0);s(n),b(()=>l(r,o[t])),M(e,n)});var i=h(n,2);u(i,16,()=>p(w),e=>e,(e,t)=>{var n=ce(),r=C(n,!0);s(n),b(()=>l(r,o[t])),M(e,n)}),s(t),M(e,t)};i(_e,e=>{!r.expanded&&(r.user.platformPermissions.length>0||p(w).length>0)&&e(ve)}),s(V);var ye=h(V,2),be=e=>{{let t=j(()=>r.disabling||!!p(D)),n=j(()=>p(D)??`Disable user — they keep their history but cannot sign in`);F(e,{size:`sm`,variant:`ghost`,get disabled(){return p(t)},get onclick(){return r.onDisable},get title(){return p(n)},class:`text-muted-foreground hover:text-foreground h-8 w-8 shrink-0 p-0`,children:(e,t)=>{Y(e,{class:`h-4 w-4`})},$$slots:{default:!0}})}};i(ye,e=>{r.user.disabled||e(be)});var xe=h(ye,2);{let e=j(()=>r.deleting||!!p(D)),t=j(()=>p(D)??`Delete user`);F(xe,{size:`sm`,variant:`ghost`,get disabled(){return p(e)},get onclick(){return r.onDelete},get title(){return p(t)},class:`text-destructive hover:text-destructive h-8 w-8 shrink-0 p-0`,children:(e,t)=>{B(e,{class:`h-4 w-4`})},$$slots:{default:!0}})}s(N);var Se=h(N,2),Ce=e=>{var t=pe(),g=C(t),v=h(C(g),2);u(v,20,()=>ae,e=>e,(e,t)=>{let i=j(()=>O(t));var a=le(),u=C(a);y(u);var f=h(u,2),g=C(f),v=C(g,!0);s(g);var x=h(g,2),S=C(x,!0);s(x),s(f),s(a),b(()=>{n(a,1,`flex items-start gap-2 rounded-md border p-2.5 ${p(i).locked?`border-border cursor-not-allowed opacity-60`:`border-border hover:bg-accent/40 cursor-pointer`}`),_(a,`title`,p(i).soleAdminLock?`Cannot remove the only instance admin.`:void 0),m(u,p(i).checked),u.disabled=r.updating||p(i).locked,l(v,o[t]),l(S,d[t])}),c(`change`,u,e=>r.onTogglePermission(t,e.target.checked)),M(e,a)}),s(v),s(g);var S=h(g,2),w=h(C(S),2),T=e=>{var t=ue();M(e,t)},E=e=>{var t=fe(),n=k(t),c=C(n),u=e=>{var t=de(),n=k(t),i=C(n);s(n),a(),b(()=>l(i,`${r.user.orgRole??``}s`)),M(e,t)},d=e=>{var t=f();b(e=>l(t,`Member, holding ${e??``}.`),[()=>r.user.orgPermissions.map(e=>o[e]).join(`, `)]),M(e,t)},m=e=>{var t=f(`Member, with no organization permissions granted.`);M(e,t)};i(c,e=>{p(x)?e(u):r.user.orgPermissions.length>0?e(d,1):e(m,-1)}),s(n),a(2),M(e,t)};i(w,e=>{r.user.orgRole?e(E,-1):e(T)}),s(S),s(t),M(e,t)};i(Se,e=>{r.expanded&&e(Ce)}),s(A),b(()=>{n(A,1,`px-4 py-3 ${r.expanded?`bg-accent/20`:``}`),_(P,`aria-label`,r.expanded?`Collapse permissions`:`Expand permissions`),l(ne,p(v)),l(ge,r.user.id)}),c(`click`,P,function(...e){r.onToggleExpand?.apply(this,e)}),M(t,A),S()}o([`click`,`change`]);var $=d(`<!> Allowlist user`,1),ge=d(`<!> Invite member`,1),_e=d(`<label class="flex cursor-pointer items-center gap-1.5 text-xs"><input type="checkbox"/> </label>`),ve=d(`<div><p class="mb-2 text-xs font-medium">Instance permissions</p> <p class="text-muted-foreground mb-2 text-xs">Apply across the whole instance. The user joins the active organization as a <span class="font-mono">member</span>; grant them access there from <a href="/team/members" class="underline">Members & roles</a>.</p> <div class="flex flex-wrap gap-3"></div></div>`),ye=d(`<p class="text-muted-foreground text-xs">The user joins the active organization as a <span class="font-mono">member</span>.
|
|
3
|
+
Grant them access from <a href="/team/members" class="underline">Members & roles</a>.</p>`),be=d(`<div class="bg-muted/40 space-y-3 rounded-lg border p-4"><p class="text-sm font-medium">New User</p> <!> <p class="text-muted-foreground text-xs"> </p> <!> <div class="flex gap-2"><!> <!></div></div>`),xe=d(`Set <code class="text-xs">DATA_PATH</code> (local provider) or check your provider
|
|
4
|
+
selection in <code class="text-xs">.env</code>.`,1),Se=d(`<option> </option>`),Ce=d(`<!> Clear`,1),we=d(`<p class="text-muted-foreground text-xs"> </p>`),Te=d(`<div class="divide-y rounded-lg border"></div>`),Ee=d(`<div class="flex flex-col gap-2 sm:flex-row sm:items-center"><div class="relative flex-1"><!> <!></div> <select aria-label="Filter by role in the active organization" class="border-input bg-background h-9 rounded-md border px-3 text-sm"><option>All org roles</option><!></select> <select aria-label="Filter by instance permission" class="border-input bg-background h-9 rounded-md border px-3 text-sm"><option>All instance permissions</option><!></select> <select aria-label="Filter by status" class="border-input bg-background h-9 rounded-md border px-3 text-sm"><option>Any status</option><option>Enabled</option><option>Disabled</option><option>Never signed in</option></select> <!></div> <!> <!>`,1),De=d(`<!> <!>`,1),Oe=d(`<div class="space-y-6"><!> <!></div>`);function ke(n,o){e(o,!0);let d=j(()=>o.data.isPlatformAdmin?[...ae]:[]),_={instance_admin:`Instance admin`,manage_instance_users:`Manage instance users`,manage_compute:`Manage compute`,manage_updates:`Manage updates`},E=[`owner`,`admin`,`member`],D=v(!1),P=v(``),I=v(g([])),L=v(!1),B=v(null),G=v(null),K=v(null),q=v(null),J=v(``),Y=v(`all`),X=v(`all`),Z=v(`all`),oe=j(()=>p(J).trim()!==``||p(Y)!==`all`||p(X)!==`all`||p(Z)!==`all`);function se(e,t){return[e.displayName,e.email,e.id].some(e=>e?.toLowerCase().includes(t))}function ce(e){switch(p(Z)){case`enabled`:return!e.disabled;case`disabled`:return!!e.disabled;case`never-signed-in`:return!e.lastLoginAt;default:return!0}}let Q=j(()=>{let e=p(J).trim().toLowerCase();return(o.data.users??[]).filter(t=>(e===``||se(t,e))&&(p(Y)===`all`||t.orgRole===p(Y))&&(p(X)===`all`||t.platformPermissions.includes(p(X)))&&ce(t))});function le(){w(J,``),w(Y,`all`),w(X,`all`),w(Z,`all`)}let ue=e=>o.data.enabledInstanceAdminCount===1&&!e.disabled&&e.platformPermissions.includes(`instance_admin`);function de(e,t){t?w(I,[...p(I),e],!0):w(I,p(I).filter(t=>t!==e),!0)}async function fe(){w(L,!0);try{let e=await fetch(`/api/admin/users`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:p(P),permissions:p(I)})});if(e.ok)W.success(`${p(P)} can now sign in via ${o.data.provider.name}`),w(P,``),w(I,[],!0),w(D,!1),await N();else{let t=await e.json().catch(()=>({error:`Unknown error`}));W.error(t.message||t.error||`Failed to create user`)}}catch{W.error(`Failed to create user`)}finally{w(L,!1)}}async function pe(e,t){w(K,e,!0);try{let n=await fetch(`/api/admin/users/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({permissions:t})});if(n.ok)W.success(`Permissions updated`),await N();else{let e=await n.json().catch(()=>({}));W.error(e.message||e.error||`Failed to update permissions`),await N()}}catch{W.error(`Failed to update permissions`)}finally{w(K,null)}}async function me(e,t){if(confirm(`Disable "${t}"? They keep their identity and history but cannot sign in. There is no way to re-enable them from this page.`)){w(G,e,!0);try{let n=await fetch(`/api/admin/users/${e}/disable`,{method:`POST`});if(n.ok)W.success(`User "${t}" disabled`),await N();else{let e=await n.json().catch(()=>({}));W.error(e.message||e.error||`Failed to disable user`)}}catch{W.error(`Failed to disable user`)}finally{w(G,null)}}}async function ke(e,t){if(confirm(`Delete user "${t}"? This cannot be undone.`)){w(B,e,!0);try{let n=await fetch(`/api/admin/users/${e}`,{method:`DELETE`});if(n.ok)W.success(`User "${t}" deleted`),await N();else{let e=await n.json().catch(()=>({}));W.error(e.message||e.error||`Failed to delete user`)}}catch{W.error(`Failed to delete user`)}finally{w(B,null)}}}var Ae=Oe();r(`1p497kv`,e=>{T(()=>{O.title=`Admin · Users`})});var je=C(Ae);{let e=e=>{var n=t(),r=k(n),s=e=>{var n=t(),r=k(n),s=e=>{{let t=j(()=>p(D)?`outline`:`default`);F(e,{onclick:()=>w(D,!p(D)),get variant(){return p(t)},children:(e,t)=>{var n=$(),r=k(n);ee(r,{class:`mr-2 h-4 w-4`}),a(),M(e,n)},$$slots:{default:!0}})}},c=e=>{F(e,{href:`/team/members`,variant:`default`,children:(e,t)=>{var n=ge(),r=k(n);R(r,{class:`mr-2 h-4 w-4`}),a(),M(e,n)},$$slots:{default:!0}})};i(r,e=>{o.data.provider.userCreation===`email-only`?e(s):e(c,-1)}),M(e,n)};i(r,e=>{o.data.users!==null&&e(s)}),M(e,n)},n=j(()=>o.data.users===null?`The current auth provider does not expose a user store. Configure DATA_PATH (local provider) or check your provider wiring.`:`${o.data.users.length} user${o.data.users.length===1?``:`s`} on this instance.`);H(je,{eyebrow:`Admin`,title:`Users`,get description(){return p(n)},actions:e,$$slots:{actions:!0}})}var Me=h(je,2);x(Me,()=>ne,(e,n)=>{n(e,{children:(e,n)=>{var r=t(),g=k(r);x(g,()=>re,(e,t)=>{t(e,{class:`space-y-4 pt-6`,children:(e,t)=>{var n=De(),r=k(n),g=e=>{var t=be(),n=h(C(t),2);ie(n,{type:`email`,placeholder:`Email`,get value(){return p(P)},set value(e){w(P,e,!0)}});var r=h(n,2),g=C(r);s(r);var v=h(r,2),x=e=>{var t=ve(),n=h(C(t),4);u(n,20,()=>p(d),e=>e,(e,t)=>{var n=_e(),r=C(n);y(r);var i=h(r);s(n),b(e=>{m(r,e),l(i,` ${_[t]??``}`)},[()=>p(I).includes(t)]),c(`change`,r,e=>de(t,e.target.checked)),M(e,n)}),s(n),s(t),M(e,t)},S=e=>{var t=ye();M(e,t)};i(v,e=>{o.data.isPlatformAdmin?e(x):e(S,-1)});var T=h(v,2),E=C(T);{let e=j(()=>p(L)||!p(P));F(E,{onclick:fe,get disabled(){return p(e)},children:(e,t)=>{a();var n=f();b(()=>l(n,p(L)?`Adding…`:`Allowlist user`)),M(e,n)},$$slots:{default:!0}})}var O=h(E,2);F(O,{variant:`outline`,onclick:()=>w(D,!1),children:(e,t)=>{a();var n=f(`Cancel`);M(e,n)},$$slots:{default:!0}}),s(T),s(t),b(()=>l(g,`This user will authenticate via ${o.data.provider.name??``}. No password is stored.`)),M(e,t)};i(r,e=>{p(D)&&e(g)});var v=h(r,2),x=e=>{U(e,{get icon(){return z},title:`User store unavailable`,body:e=>{a();var t=xe();a(4),M(e,t)},$$slots:{body:!0}})},S=e=>{U(e,{title:`No users yet`,description:`Add your first user above.`})},T=e=>{var t=Ee(),n=k(t),r=C(n),c=C(r);te(c,{class:`text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2`});var f=h(c,2);ie(f,{type:`search`,placeholder:`Search name, email, or ID`,class:`pl-9`,get value(){return p(J)},set value(e){w(J,e,!0)}}),s(r);var m=h(r,2),g=C(m);g.value=g.__value=`all`;var v=h(g);u(v,16,()=>E,e=>e,(e,t)=>{var n=Se(),r=C(n,!0);s(n);var i={};b(()=>{l(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),M(e,n)}),s(m);var y=h(m,2),x=C(y);x.value=x.__value=`all`;var S=h(x);u(S,16,()=>p(d),e=>e,(e,t)=>{var n=Se(),r=C(n,!0);s(n);var i={};b(()=>{l(r,_[t]),i!==(i=t)&&(n.value=(n.__value=t)??``)}),M(e,n)}),s(y);var T=h(y,2),D=C(T);D.value=D.__value=`all`;var O=h(D);O.value=O.__value=`enabled`;var N=h(O);N.value=N.__value=`disabled`;var P=h(N);P.value=P.__value=`never-signed-in`,s(T);var I=h(T,2),L=e=>{F(e,{variant:`ghost`,size:`sm`,onclick:le,children:(e,t)=>{var n=Ce(),r=k(n);V(r,{class:`mr-1.5 h-3.5 w-3.5`}),a(),M(e,n)},$$slots:{default:!0}})};i(I,e=>{p(oe)&&e(L)}),s(n);var R=h(n,2),ee=e=>{var t=we(),n=C(t);s(t),b(()=>l(n,`${p(Q).length??``} of ${o.data.users.length??``} users`)),M(e,t)};i(R,e=>{p(oe)&&e(ee)});var z=h(R,2),H=e=>{U(e,{title:`No matching users`,description:`Adjust or clear the filters above.`})},ne=e=>{var t=Te();u(t,21,()=>p(Q),e=>e.id,(e,t)=>{{let n=j(()=>p(q)===p(t).id),r=j(()=>ue(p(t))),i=j(()=>p(K)===p(t).id),a=j(()=>p(B)===p(t).id),s=j(()=>p(G)===p(t).id);he(e,{get user(){return p(t)},get expanded(){return p(n)},get isPlatformAdmin(){return o.data.isPlatformAdmin},get soleInstanceAdmin(){return p(r)},get updating(){return p(i)},get deleting(){return p(a)},get disabling(){return p(s)},onToggleExpand:()=>w(q,p(q)===p(t).id?null:p(t).id,!0),onTogglePermission:async(e,n)=>{let r=n?[...p(t).platformPermissions,e]:p(t).platformPermissions.filter(t=>t!==e);await pe(p(t).id,r)},onDelete:()=>ke(p(t).id,p(t).email??p(t).id),onDisable:()=>me(p(t).id,p(t).email??p(t).id)})}}),s(t),M(e,t)};i(z,e=>{p(Q).length===0?e(H):e(ne,-1)}),A(m,()=>p(Y),e=>w(Y,e)),A(y,()=>p(X),e=>w(X,e)),A(T,()=>p(Z),e=>w(Z,e)),M(e,t)};i(v,e=>{o.data.users===null?e(x):o.data.users.length===0?e(S,1):e(T,-1)}),M(e,n)},$$slots:{default:!0}})}),M(e,r)},$$slots:{default:!0}})}),s(Ae),M(n,Ae),S()}o([`change`]);export{ke as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{At as e,B as t,D as n,Ft as r,It as i,V as a,W as o,dt as s,k as c,kt as l,lt as u,st as d,tt as f,ut as p,z as m}from"../chunks/Cke4knuE.js";import"../chunks/xihTtKlq.js";import{t as h}from"../chunks/Bw8HI0aa.js";import{t as g}from"../chunks/
|
|
1
|
+
import{At as e,B as t,D as n,Ft as r,It as i,V as a,W as o,dt as s,k as c,kt as l,lt as u,st as d,tt as f,ut as p,z as m}from"../chunks/Cke4knuE.js";import"../chunks/xihTtKlq.js";import{t as h}from"../chunks/Bw8HI0aa.js";import{t as g}from"../chunks/BD8XOylI.js";import{n as _,t as v}from"../chunks/CnTk3f2P2.js";var y=a(`<div class="bg-background flex min-h-screen items-center justify-center px-4 py-12 sm:px-6 lg:px-8"><div class="w-full max-w-sm space-y-6 text-center"><div class="flex justify-center"><div class="bg-muted rounded-full p-4"><!></div></div> <div class="space-y-2"><h2 class="text-foreground text-2xl font-bold tracking-tight">Check your email</h2> <p class="text-muted-foreground text-sm">We sent you a sign-in link. Click the link in the email to continue.</p></div> <!> <a class="text-muted-foreground hover:text-foreground text-sm underline" href="/login">Back to sign in</a></div></div>`);function b(a,b){e(b,!0);var x=y();n(`l70sov`,e=>{f(()=>{d.title=`Check your email - ${g.data.branding.name??``}`})});var S=u(x),C=u(S),w=u(C),T=u(w);h(T,{class:`text-foreground size-8`}),i(w),i(C);var E=s(C,4);c(E,()=>_,(e,n)=>{n(e,{children:(e,n)=>{var i=t(),a=p(i);c(a,()=>v,(e,t)=>{t(e,{children:(e,t)=>{r();var n=o(`The link expires in a few minutes. If it doesn't arrive, check your spam folder or request a
|
|
2
2
|
new one from the sign-in page.`);m(e,n)},$$slots:{default:!0}})}),m(e,i)},$$slots:{default:!0}})}),r(2),i(S),i(x),m(a,x),l()}export{b as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{At as e,C as t,D as n,F as r,Ft as i,It as a,L as o,M as s,V as c,X as l,dt as u,g as d,it as f,kt as p,lt as m,nt as h,st as g,ut as _,z as v}from"../chunks/Cke4knuE.js";import{f as y}from"../chunks/
|
|
1
|
+
import{At as e,C as t,D as n,F as r,Ft as i,It as a,L as o,M as s,V as c,X as l,dt as u,g as d,it as f,kt as p,lt as m,nt as h,st as g,ut as _,z as v}from"../chunks/Cke4knuE.js";import{f as y}from"../chunks/Ckf7D9mx.js";import"../chunks/xihTtKlq.js";import{t as b}from"../chunks/BbNzH4MU.js";var x=c(`<meta name="description" content="The Selva HTTP API — endpoints, pagination, and errors."/>`),S=c(`<code class="bg-background rounded border px-1.5 py-0.5 text-xs"> </code>`),C=c(`<span>Paginated</span>`),w=c(`<span>JSON body</span>`),T=c(`<code> </code> `,1),E=c(`<span>multipart/form-data: <!></span>`),D=c(`<span><code> </code> </span>`),O=c(`<li class="rounded-lg border p-4"><div class="flex flex-wrap items-baseline gap-x-3 gap-y-1"><span> </span> <code class="text-sm font-medium break-all"> </code></div> <p class="text-muted-foreground mt-2 text-sm leading-relaxed"> </p> <div class="text-muted-foreground mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs"><!> <!> <!> <!> <span> </span></div></li>`),k=c(`<section class="mb-10"><h2 class="mb-4 border-b pb-2 text-xl font-semibold tracking-tight"> </h2> <ul class="space-y-3"></ul></section>`),A=c(`<header class="mb-10"><h1 class="text-3xl font-semibold tracking-tight">API reference</h1> <p class="text-muted-foreground mt-3 leading-relaxed">Every endpoint below acts as the calling identity and is confined to that identity's
|
|
2
2
|
organization. Authenticate with a browser session cookie or a bearer token; the full
|
|
3
3
|
machine-readable description is at <a class="underline underline-offset-4" data-sveltekit-reload="">/docs/api/openapi.yaml</a>.</p></header> <section class="mb-10 grid gap-4 sm:grid-cols-2"><div class="bg-muted/40 rounded-lg border p-4"><h2 class="font-medium">Pagination</h2> <p class="text-muted-foreground mt-2 text-sm leading-relaxed">Lists take <code>limit</code> and <code>cursor</code> and return <code></code>. <code>nextCursor</code> </p></div> <div class="bg-muted/40 rounded-lg border p-4"><h2 class="font-medium">Errors</h2> <p class="text-muted-foreground mt-2 text-sm leading-relaxed">Failures return <code></code>. Branch on <code>code</code>, never on
|
|
4
4
|
the human-readable message. A resource you cannot see returns <code>404</code>, not <code>403</code>.</p> <div class="mt-3 flex flex-wrap gap-1.5"></div></div></section> <!>`,1);function j(c,j){e(j,!0);let M={GET:`bg-sky-100 text-sky-800 dark:bg-sky-950 dark:text-sky-300`,POST:`bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300`,PUT:`bg-amber-100 text-amber-800 dark:bg-amber-950 dark:text-amber-300`,PATCH:`bg-amber-100 text-amber-800 dark:bg-amber-950 dark:text-amber-300`,DELETE:`bg-rose-100 text-rose-800 dark:bg-rose-950 dark:text-rose-300`};n(`1c8t0id`,e=>{var t=x();h(()=>{g.title=`API reference`}),v(e,t)}),b(c,{class:`mx-auto max-w-4xl`,children:(e,n)=>{var c=A(),p=_(c),h=u(m(p),2),g=u(m(h));i(),a(h),a(p);var b=u(p,2),x=m(b),N=u(m(x),2),P=u(m(N),5);P.textContent=`{ items, nextCursor? }`;var F=u(P,3);a(N),a(x);var I=u(x,2),L=u(m(I),2),R=u(m(L));R.textContent=`{ message, code }`,i(7),a(L);var z=u(L,2);s(z,20,()=>j.data.errorCodes,e=>e,(e,t)=>{var n=S(),r=m(n,!0);a(n),f(()=>o(r,t)),v(e,n)}),a(z),a(I),a(b);var B=u(b,2);s(B,17,()=>j.data.groups,e=>e.tag,(e,n)=>{var i=k(),c=m(i),d=m(c,!0);a(c);var p=u(c,2);s(p,21,()=>l(n).endpoints,e=>e.method+e.path,(e,n)=>{var i=O(),c=m(i),d=m(c),p=m(d,!0);a(d);var h=u(d,2),g=m(h,!0);a(h),a(c);var y=u(c,2),b=m(y,!0);a(y);var x=u(y,2),S=m(x),k=e=>{var t=C();v(e,t)};r(S,e=>{l(n).paginated&&e(k)});var A=u(S,2),j=e=>{var t=w();v(e,t)};r(A,e=>{l(n).hasBody&&e(j)});var N=u(A,2),P=e=>{var t=E(),r=u(m(t));s(r,19,()=>l(n).multipart,e=>e.field,(e,t,r)=>{var i=T(),s=_(i),c=m(s);a(s);var d=u(s,1,!0);f(()=>{o(c,`${l(t).field??``}${l(t).required?``:`?`}`),o(d,l(r)<l(n).multipart.length-1?`, `:``)}),v(e,i)}),a(t),v(e,t)};r(N,e=>{l(n).multipart&&e(P)});var F=u(N,2);s(F,17,()=>l(n).query,e=>e.name,(e,t)=>{var n=D(),r=m(n),i=m(r);a(r);var s=u(r);a(n),f(()=>{o(i,`?${l(t).name??``}`),o(s,` — ${l(t).description??``}`)}),v(e,n)});var I=u(F,2),L=m(I);a(I),a(x),a(i),f(e=>{t(d,1,`rounded px-2 py-0.5 font-mono text-xs font-semibold ${M[l(n).method]??``}`),o(p,l(n).method),o(g,l(n).path),o(b,l(n).summary),o(L,`Errors: ${e??``}`)},[()=>l(n).errors.join(`, `)]),v(e,i)}),a(p),a(i),f(()=>o(d,l(n).tag)),v(e,i)}),f(e=>{d(g,`href`,e),o(F,` is absent on the last page.
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,At as t,It as n,Rt as r,V as i,X as a,kt as o,lt as s,yt as c,z as l}from"../chunks/Cke4knuE.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/C6Sq7mcd.js";import{t as d}from"../chunks/iLVM5qSy.js";import{t as f}from"../chunks/B5Aipckh.js";import{t as p}from"../chunks/
|
|
1
|
+
import{A as e,At as t,It as n,Rt as r,V as i,X as a,kt as o,lt as s,yt as c,z as l}from"../chunks/Cke4knuE.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/C6Sq7mcd.js";import{t as d}from"../chunks/iLVM5qSy.js";import{t as f}from"../chunks/B5Aipckh.js";import{t as p}from"../chunks/BY-4ri0F.js";import{t as m}from"../chunks/CA6AMHs_.js";import{t as h}from"../chunks/CjPXNCS7.js";import{t as g}from"../chunks/ztBd1gZj.js";import{t as _}from"../chunks/BVkuAaQ6.js";import{t as v}from"../chunks/Bdb8SghE.js";var y=i(`<div class="px-(--page-px) py-(--page-py)"><!></div>`);function b(i,b){t(b,!0);let x=e=>b.data.platformPermissions.includes(`instance_admin`)||b.data.platformPermissions.includes(e)?!0:b.data.orgPermissions.includes(e),S=c(()=>[{href:`/admin`,label:`General`,icon:f,show:!0},{href:`/admin/organizations`,label:`Organizations`,icon:u,match:`prefix`,show:x(`instance_admin`)&&b.data.tenancy!==`single`},{href:`/admin/projects`,label:`Projects`,icon:d,match:`prefix`,show:x(`instance_admin`)&&b.data.platformProjectsEnabled},{href:`/admin/users`,label:`Users`,icon:_,match:`prefix`,show:x(`manage_instance_users`)},{href:`/admin/compute`,label:`Compute`,icon:h,match:`prefix`,show:x(`manage_compute`)},{href:`/admin/system`,label:`System`,icon:g,match:`prefix`,show:x(`manage_updates`)},{href:`/admin/audit`,label:`Audit log`,icon:m,match:`prefix`,show:x(`instance_admin`)&&b.data.auditAvailable}].filter(e=>e.show));p(i,{sidenav:e=>{v(e,{get items(){return a(S)},eyebrow:`Platform`})},children:(t,i)=>{var a=y(),o=s(a);e(o,()=>b.children??r),n(a),l(t,a)},$$slots:{sidenav:!0,default:!0}}),o()}export{b as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{At as e,B as t,C as n,F as r,Ft as i,G as a,It as o,K as s,L as c,M as l,S as u,V as d,X as f,a as p,dt as m,g as h,gt as g,it as _,kt as v,lt as y,mt as b,o as x,s as S,ut as C,w,y as T,yt as E,z as D}from"../chunks/Cke4knuE.js";import{i as O,r as k}from"../chunks/
|
|
1
|
+
import{At as e,B as t,C as n,F as r,Ft as i,G as a,It as o,K as s,L as c,M as l,S as u,V as d,X as f,a as p,dt as m,g as h,gt as g,it as _,kt as v,lt as y,mt as b,o as x,s as S,ut as C,w,y as T,yt as E,z as D}from"../chunks/Cke4knuE.js";import{i as O,r as k}from"../chunks/Ckf7D9mx.js";import"../chunks/xihTtKlq.js";import{n as A}from"../chunks/DSGwkBAQ.js";import{t as j}from"../chunks/WhBuhxSy.js";import{t as M}from"../chunks/BY-4ri0F.js";import{a as N,c as P,o as F,s as ee,t as I}from"../chunks/B49JE7qa.js";import{t as L}from"../chunks/CbBBqIrZ.js";import{t as R}from"../chunks/Dz00jH5u.js";import{t as z}from"../chunks/BbNzH4MU.js";import{t as te}from"../chunks/10viO958.js";import{t as B}from"../chunks/ehM2QOgk.js";import{n as V}from"../chunks/BVvGdFdF2.js";import"../chunks/Cke7eHHM2.js";var H=new Set([`$$slots`,`$$events`,`$$legacy`]);function ne(e,t){let n=x(t,H),r=[[`path`,{d:`M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z`}]];A(e,S({name:`funnel`},()=>n,{get iconNode(){return r}}))}var U=d(`<button type="button"><!></button>`);function W(t,r){e(r,!0);let i=p(r,`busy`,3,!1),a=p(r,`variant`,3,`overlay`);var c=U(),l=y(c);{let e=E(()=>r.starred?`fill-current`:``);L(l,{get class(){return`h-3.5 w-3.5 ${f(e)??``}`}})}o(c),_(()=>{h(c,`title`,r.starred?`Unstar`:`Star`),h(c,`aria-label`,r.starred?`Unstar definition`:`Star definition`),h(c,`aria-pressed`,r.starred),c.disabled=i(),n(c,1,w(a()===`overlay`?`absolute top-2 right-2 flex h-7 w-7 items-center justify-center rounded-full backdrop-blur-sm transition-all disabled:opacity-60 ${r.starred?`bg-amber-400/90 text-white`:`bg-black/40 text-white opacity-0 group-hover:opacity-100 hover:bg-black/55`}`:`flex h-7 w-7 items-center justify-center rounded-full transition-colors disabled:opacity-60 ${r.starred?`text-amber-500 hover:bg-amber-50`:`text-muted-foreground hover:text-foreground hover:bg-muted`}`))}),s(`click`,c,e=>{e.stopPropagation(),e.preventDefault(),r.onToggle()}),D(t,c),v()}a([`click`]);var G=d(`<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>`),K=d(`<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>`),q=d(`<p class="text-muted-foreground truncate text-[12px]"> </p>`),J=d(`<span class="bg-muted text-muted-foreground rounded px-1.5 py-px font-mono text-[10.5px]"> </span>`),Y=d(`<button type="button"><!> <div class="min-w-0"><p class="truncate text-[13.5px] font-semibold"> </p> <!></div> <div class="flex flex-wrap items-center gap-1"><!></div> <span class="text-muted-foreground font-mono text-[12px]"> </span> <div class="flex items-center justify-end gap-1"><!> <!></div></button>`),X=d(`<div class="border-border bg-card overflow-hidden rounded-xl border"></div>`);function re(i,a){e(a,!0);var d=X();l(d,23,()=>a.records,e=>e.guid,(e,i,d)=>{var p=Y();u(p,`grid-template-columns: 40px minmax(0, 1.7fr) minmax(0, 1fr) 90px 36px`);var g=y(p),v=e=>{var t=G(),n=y(t);o(t),_(()=>h(n,`src`,f(i).coverImage)),D(e,t)},b=e=>{let t=E(()=>N(f(i).guid));var n=K();let r;var a=y(n),s=y(a,!0);o(a),o(n),_(e=>{r=u(n,``,r,{"--tool-h1":f(t).h1,"--tool-h2":f(t).h2}),c(s,e)},[()=>F(f(i).displayName)]),D(e,n)};r(g,e=>{f(i).coverImage?e(v):e(b,-1)});var x=m(g,2),S=y(x),w=y(S,!0);o(S);var T=m(S,2),O=e=>{var t=q(),n=y(t,!0);o(t),_(()=>c(n,f(i).description)),D(e,t)};r(T,e=>{f(i).description&&e(O)}),o(x);var k=m(x,2),A=y(k),M=e=>{var n=t(),r=C(n);l(r,16,()=>f(i).tags.slice(0,3),e=>e,(e,t)=>{var n=J(),r=y(n);o(n),_(()=>c(r,`#${t??``}`)),D(e,n)}),D(e,n)};r(A,e=>{f(i).tags?.length&&e(M)}),o(k);var P=m(k,2),ee=y(P,!0);o(P);var I=m(P,2),L=y(I);{let e=E(()=>a.starredIds.has(f(i).guid)),t=E(()=>a.starBusyGuid===f(i).guid);W(L,{get starred(){return f(e)},get busy(){return f(t)},variant:`chip`,onToggle:()=>a.onToggleStar(f(i).guid)})}var R=m(L,2);j(R,{class:`text-muted-foreground h-3.5 w-3.5 opacity-0 transition-opacity group-hover:opacity-100`}),o(I),o(p),_(e=>{p.disabled=a.loadingGuid===f(i).guid,n(p,1,`hover:bg-muted/40 group grid w-full items-center gap-4 px-4 py-3 text-left transition-colors disabled:cursor-not-allowed disabled:opacity-60
|
|
2
2
|
${f(d)<a.records.length-1?`border-border border-b`:``}`),c(w,f(i).displayName),c(ee,e)},[()=>f(i).solveCount>0?`${f(i).solveCount.toLocaleString()} runs`:`—`]),s(`click`,p,()=>a.onOpen(f(i).guid)),D(e,p)}),o(d),D(i,d),v()}a([`click`]);function ie(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return`just now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}var ae=d(`<span class="bg-primary text-primary-foreground rounded-full px-1.5 py-px font-mono text-[10px]"> </span>`),oe=d(`<button type="button"><!> Filters <!></button>`),se=d(`<button type="button" class="text-muted-foreground hover:text-foreground inline-flex h-9 items-center gap-1 rounded-md px-2 text-xs transition-colors"><!> Clear</button>`),Z=d(`<option> </option>`),ce=d(`<div class="space-y-1.5"><label class="text-muted-foreground text-xs font-medium" for="filter-project">Project</label> <select id="filter-project" class="border-input bg-background h-9 w-full rounded-md border px-3 text-sm"><option>All projects</option><!></select></div>`),le=d(`<div class="space-y-1.5"><label class="text-muted-foreground text-xs font-medium" for="filter-category">Category</label> <select id="filter-category" class="border-input bg-background h-9 w-full rounded-md border px-3 text-sm"><option>All categories</option><!></select></div>`),ue=d(`<div class="space-y-1.5"><label class="text-muted-foreground text-xs font-medium" for="filter-tag">Tag</label> <select id="filter-tag" class="border-input bg-background h-9 w-full rounded-md border px-3 text-sm"><option>All tags</option><!></select></div>`),de=d(`<div class="border-border bg-card rounded-md border p-4"><div class="grid gap-4 sm:grid-cols-3"><!> <!> <!></div></div>`),fe=d(`<button style="grid-template-columns: 1fr 120px auto"><span class="truncate font-medium"> </span> <span class="text-muted-foreground font-mono text-xs"> </span> <span class="flex items-center gap-1 text-xs font-medium opacity-0 transition-opacity group-hover:opacity-100">Resume <!></span></button>`),pe=d(`<section><div class="mb-3 flex items-baseline justify-between"><span class="text-muted-foreground text-xs font-medium tracking-wider uppercase">Recent runs</span> <span class="text-muted-foreground text-xs">Resume where you left off</span></div> <div class="border-border bg-card overflow-hidden rounded-md border"></div></section>`),me=d(`<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"></div>`),he=d(`<button class="text-muted-foreground hover:text-foreground text-xs underline underline-offset-2">Clear all filters</button>`),ge=d(`<div class="space-y-6"><!> <div class="flex flex-wrap items-center gap-2"><div class="min-w-60 flex-1"><!></div> <!> <!></div> <!> <!> <!></div>`);function Q(a,u){e(u,!0);let d=g(``),p=g(null),h=g(null),x=g(null),S=g(`grid`),w=g(null),A=g(null),N=g(!1),F=E(()=>new Set(u.data.starredRecords.map(e=>e.guid))),L=E(()=>[...u.data.starredRecords,...u.data.records]),H=E(()=>new Set(f(L).map(e=>e.projectId))),U=E(()=>Object.values(u.data.projects).filter(e=>f(H).has(e.id))),W=E(()=>Array.from(new Set(f(L).map(e=>e.category).filter(e=>!!e))).sort()),G=E(()=>Array.from(new Set(f(L).flatMap(e=>e.tags??[]))).sort());function K(e){return u.data.projects[e]?.name??``}function q(e){return u.data.projectMap[e]?.visibility}function J(e){if(f(p)&&e.projectId!==f(p)||f(h)&&e.category!==f(h)||f(x)&&!(e.tags??[]).includes(f(x)))return!1;if(f(d).trim()){let t=f(d).toLowerCase();if(![e.displayName,e.description,e.category,...e.tags??[]].filter(Boolean).join(` `).toLowerCase().includes(t))return!1}return!0}let Y=E(()=>f(L).filter(J)),X=E(()=>[f(p),f(h),f(x)].filter(e=>e!==null).length),Q=E(()=>f(d).trim()!==``||f(X)>0);function $(e){b(w,e,!0),k(`/library/${e}`).catch(()=>{b(w,null)})}async function _e(e){b(A,e,!0);let t=f(F).has(e);try{let n=await fetch(`/api/v1/me/starred/${e}`,{method:t?`DELETE`:`PUT`});if(!n.ok)throw Error(`${n.status}`);await O()}catch{V.error(t?`Failed to unstar`:`Failed to star`)}finally{b(A,null)}}function ve(){b(d,``),b(p,null),b(h,null),b(x,null),b(N,!1)}M(a,{homeUrl:`/library`,children:(e,a)=>{z(e,{children:(e,a)=>{var g=ge(),v=y(g);{let e=e=>{ee(e,{get mode(){return f(S)},onChange:e=>b(S,e,!0)})},t=E(()=>`${f(Y).length} tool${f(Y).length===1?``:`s`}${f(U).length>0?` across ${f(U).length} project${f(U).length===1?``:`s`}`:``}.`);te(v,{eyebrow:`Workspace`,title:`Library`,get description(){return f(t)},actions:e,$$slots:{actions:!0}})}var O=m(v,2),k=y(O),M=y(k);P(M,{placeholder:`Search tools, descriptions, tags…`,clearable:!0,class:`h-9 rounded-md text-sm`,get value(){return f(d)},set value(e){b(d,e,!0)}}),o(k);var L=m(k,2),z=e=>{var t=oe(),i=y(t);ne(i,{class:`h-3.5 w-3.5`});var a=m(i,2),l=e=>{var t=ae(),n=y(t,!0);o(t),_(()=>c(n,f(X))),D(e,t)};r(a,e=>{f(X)>0&&e(l)}),o(t),_(()=>n(t,1,`relative inline-flex h-9 items-center gap-1.5 rounded-md border px-3 text-sm transition-colors ${f(N)||f(X)>0?`border-border bg-accent text-accent-foreground`:`border-input bg-background text-foreground hover:bg-muted/40`}`)),s(`click`,t,()=>b(N,!f(N))),D(e,t)};r(L,e=>{(f(W).length>0||f(G).length>0||f(U).length>1)&&e(z)});var V=m(L,2),H=e=>{var t=se(),n=y(t);R(n,{class:`h-3 w-3`}),i(),o(t),s(`click`,t,ve),D(e,t)};r(V,e=>{f(Q)&&e(H)}),o(O);var J=m(O,2),ye=e=>{var t=de(),n=y(t),i=y(n),a=e=>{var t=ce(),n=m(y(t),2),r=y(n);r.value=(r.__value=null,``);var i=m(r);l(i,17,()=>f(U),e=>e.id,(e,t)=>{var n=Z(),r=y(n,!0);o(n);var i={};_(()=>{c(r,f(t).name),i!==(i=f(t).id)&&(n.value=(n.__value=f(t).id)??``)}),D(e,n)}),o(n),o(t),T(n,()=>f(p),e=>b(p,e)),D(e,t)};r(i,e=>{f(U).length>1&&e(a)});var s=m(i,2),u=e=>{var t=le(),n=m(y(t),2),r=y(n);r.value=(r.__value=null,``);var i=m(r);l(i,16,()=>f(W),e=>e,(e,t)=>{var n=Z(),r=y(n,!0);o(n);var i={};_(()=>{c(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),D(e,n)}),o(n),o(t),T(n,()=>f(h),e=>b(h,e)),D(e,t)};r(s,e=>{f(W).length>0&&e(u)});var d=m(s,2),g=e=>{var t=ue(),n=m(y(t),2),r=y(n);r.value=(r.__value=null,``);var i=m(r);l(i,16,()=>f(G),e=>e,(e,t)=>{var n=Z(),r=y(n);o(n);var i={};_(()=>{c(r,`#${t??``}`),i!==(i=t)&&(n.value=(n.__value=t)??``)}),D(e,n)}),o(n),o(t),T(n,()=>f(x),e=>b(x,e)),D(e,t)};r(d,e=>{f(G).length>0&&e(g)}),o(n),o(t),D(e,t)};r(J,e=>{f(N)&&e(ye)});var be=m(J,2),xe=e=>{var t=pe(),r=m(y(t),2);l(r,23,()=>u.data.recentRuns.slice(0,5),e=>e.runId,(e,t,r)=>{var i=fe(),a=y(i),l=y(a,!0);o(a);var d=m(a,2),p=y(d,!0);o(d);var h=m(d,2),g=m(y(h));j(g,{class:`h-3 w-3`}),o(h),o(i),_((e,r)=>{i.disabled=f(w)===f(t).definitionId,n(i,1,e),c(l,f(t).definitionName),c(p,r)},[()=>`group hover:bg-muted/40 grid w-full items-center gap-4 px-4 py-3 text-left text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-60 ${f(r)<Math.min(u.data.recentRuns.length,5)-1?`border-border border-b`:``}`,()=>ie(f(t).timestamp)]),s(`click`,i,()=>$(f(t).definitionId)),D(e,i)}),o(r),o(t),D(e,t)};r(be,e=>{u.data.recentRuns.length>0&&!f(Q)&&e(xe)});var Se=m(be,2),Ce=e=>{var n=t(),i=C(n),a=e=>{var t=me();l(t,21,()=>f(Y),e=>e.guid,(e,t)=>{{let n=E(()=>f(F).has(f(t).guid)),r=E(()=>f(w)===f(t).guid),i=E(()=>f(A)===f(t).guid),a=E(()=>f(U).length>1?K(f(t).projectId):void 0),o=E(()=>f(U).length>1?q(f(t).projectId):void 0);I(e,{get record(){return f(t)},get starred(){return f(n)},get loading(){return f(r)},get starBusy(){return f(i)},get projectName(){return f(a)},get projectVisibility(){return f(o)},onOpen:e=>$(e.guid),onToggleStar:_e})}}),o(t),D(e,t)},s=e=>{re(e,{get records(){return f(Y)},get starredIds(){return f(F)},get loadingGuid(){return f(w)},get starBusyGuid(){return f(A)},onOpen:$,onToggleStar:_e})};r(i,e=>{f(S)===`grid`?e(a):e(s,-1)}),D(e,n)},we=e=>{B(e,{size:`lg`,title:`No tools match your filters`,actions:e=>{var t=he();s(`click`,t,ve),D(e,t)},$$slots:{actions:!0}})},Te=e=>{B(e,{size:`lg`,title:`No tools available yet`,description:`Ask an admin to publish a Grasshopper definition.`})};r(Se,e=>{f(Y).length>0?e(Ce):f(Q)?e(we,1):e(Te,-1)}),o(g),D(e,g)},$$slots:{default:!0}})},$$slots:{default:!0}}),v()}a([`click`]);export{Q as component};
|
|
Binary file
|
|
Binary file
|