@selvajs/selva 4.14.0 → 4.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/_app/immutable/chunks/CHNbIR4A2.js +1 -0
- package/build/client/_app/immutable/chunks/CHNbIR4A2.js.br +2 -0
- package/build/client/_app/immutable/chunks/CHNbIR4A2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C91vKAqc.js → CtflU-Cj.js} +1 -1
- package/build/client/_app/immutable/chunks/CtflU-Cj.js.br +0 -0
- package/build/client/_app/immutable/chunks/CtflU-Cj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{pYSRzJMP.js → DKpM_Msv.js} +1 -1
- package/build/client/_app/immutable/chunks/DKpM_Msv.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKpM_Msv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BLa-U_gy.js → DbXFnuqY.js} +1 -1
- package/build/client/_app/immutable/chunks/DbXFnuqY.js.br +2 -0
- package/build/client/_app/immutable/chunks/DbXFnuqY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DkNoNSlE.js +2 -0
- package/build/client/_app/immutable/chunks/DkNoNSlE.js.br +0 -0
- package/build/client/_app/immutable/chunks/DkNoNSlE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cas_r5Cj2.js → DwUuhchs2.js} +1 -1
- package/build/client/_app/immutable/chunks/DwUuhchs2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DwUuhchs2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CT99T8r_2.js → adwRZBKY2.js} +1 -1
- package/build/client/_app/immutable/chunks/adwRZBKY2.js.br +0 -0
- package/build/client/_app/immutable/chunks/adwRZBKY2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CBlVkCNr.js → hndhnWOU.js} +1 -1
- package/build/client/_app/immutable/chunks/hndhnWOU.js.br +0 -0
- package/build/client/_app/immutable/chunks/hndhnWOU.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.GQmlOOd_.js → app.6gdIMOoq.js} +2 -2
- package/build/client/_app/immutable/entry/app.6gdIMOoq.js.br +0 -0
- package/build/client/_app/immutable/entry/app.6gdIMOoq.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CYaoq1tx.js +1 -0
- package/build/client/_app/immutable/entry/start.CYaoq1tx.js.br +1 -0
- package/build/client/_app/immutable/entry/start.CYaoq1tx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Da2ygAPH.js → 1.dxQPBYJ8.js} +1 -1
- package/build/client/_app/immutable/nodes/1.dxQPBYJ8.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.dxQPBYJ8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.C5XqRFlQ.js → 11.DhdutceD.js} +1 -1
- package/build/client/_app/immutable/nodes/11.DhdutceD.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.DhdutceD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.B0URBchi.js → 13.Drf4S-0F.js} +1 -1
- package/build/client/_app/immutable/nodes/13.Drf4S-0F.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.Drf4S-0F.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{14.BQQCdbLS.js → 14.osi6amCN.js} +1 -1
- package/build/client/_app/immutable/nodes/14.osi6amCN.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.osi6amCN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{15.pgcpxj56.js → 15.BCHElUur.js} +1 -1
- package/build/client/_app/immutable/nodes/15.BCHElUur.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.BCHElUur.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.SIXYWFzX.js → 16.CUsNw0Yu.js} +1 -1
- package/build/client/_app/immutable/nodes/16.CUsNw0Yu.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.CUsNw0Yu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{17.Ar6dEz3w.js → 17.DXZ6X9u0.js} +1 -1
- package/build/client/_app/immutable/nodes/17.DXZ6X9u0.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.DXZ6X9u0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{19.Dd1AxZGU.js → 19.CDD562Nm.js} +1 -1
- package/build/client/_app/immutable/nodes/19.CDD562Nm.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.CDD562Nm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.D3f1Htz1.js → 2.BLpbcIlV.js} +1 -1
- package/build/client/_app/immutable/nodes/2.BLpbcIlV.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BLpbcIlV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{20.CfAtIhIQ.js → 20.DlEbv2pO.js} +1 -1
- package/build/client/_app/immutable/nodes/20.DlEbv2pO.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.DlEbv2pO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{21.DLe_5KFi.js → 21.B7CVTm8z.js} +1 -1
- package/build/client/_app/immutable/nodes/21.B7CVTm8z.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.B7CVTm8z.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{22.CnObDwUV.js → 22.CxLJ8y90.js} +1 -1
- package/build/client/_app/immutable/nodes/22.CxLJ8y90.js.br +0 -0
- package/build/client/_app/immutable/nodes/22.CxLJ8y90.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{24.Bt5i_Mi7.js → 24.Dm9_aJkY.js} +1 -1
- package/build/client/_app/immutable/nodes/24.Dm9_aJkY.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.Dm9_aJkY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{25.BxMUUxpU.js → 25.B2dvtpTX.js} +1 -1
- package/build/client/_app/immutable/nodes/25.B2dvtpTX.js.br +0 -0
- package/build/client/_app/immutable/nodes/25.B2dvtpTX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{28.C6_OKS4M.js → 28.UaeuWtgE.js} +1 -1
- package/build/client/_app/immutable/nodes/28.UaeuWtgE.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.UaeuWtgE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{29.D3vp5WnX.js → 29.COj_cQVK.js} +1 -1
- package/build/client/_app/immutable/nodes/29.COj_cQVK.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.COj_cQVK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.CCH-pM9W.js → 3.JTz5F94Q.js} +1 -1
- package/build/client/_app/immutable/nodes/3.JTz5F94Q.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.JTz5F94Q.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{30.DSWC5S_b.js → 30.BB4vsX6W.js} +1 -1
- package/build/client/_app/immutable/nodes/30.BB4vsX6W.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.BB4vsX6W.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{31.BWTgUx9w.js → 31.CKzLT-Ii.js} +1 -1
- package/build/client/_app/immutable/nodes/31.CKzLT-Ii.js.br +0 -0
- package/build/client/_app/immutable/nodes/31.CKzLT-Ii.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{33.BLZDo2P4.js → 33.PM9mwTnY.js} +1 -1
- package/build/client/_app/immutable/nodes/33.PM9mwTnY.js.br +0 -0
- package/build/client/_app/immutable/nodes/33.PM9mwTnY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.9Lrvi_FE.js → 5.DVX-VKed.js} +1 -1
- package/build/client/_app/immutable/nodes/5.DVX-VKed.js.br +1 -0
- package/build/client/_app/immutable/nodes/5.DVX-VKed.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.DjBPfXJ8.js → 6.DgJ7Wg5W.js} +1 -1
- package/build/client/_app/immutable/nodes/6.DgJ7Wg5W.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DgJ7Wg5W.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.DVPq8TUt.js → 7.XgHQEGbJ.js} +1 -1
- package/build/client/_app/immutable/nodes/7.XgHQEGbJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.XgHQEGbJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.1-HJk-Oo.js → 8.DuK_qXK8.js} +1 -1
- package/build/client/_app/immutable/nodes/8.DuK_qXK8.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DuK_qXK8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.CsO4rxYN.js → 9.CfRi7pKk.js} +1 -1
- package/build/client/_app/immutable/nodes/9.CfRi7pKk.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CfRi7pKk.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-DnzmTq4X.js → AppHeader.js-CZLvDVj8.js} +3 -3
- package/build/server/chunks/chunks/{AppHeader.js-DnzmTq4X.js.map → AppHeader.js-CZLvDVj8.js.map} +1 -1
- package/build/server/chunks/chunks/{SideNav.js-B5A8NgLK.js → SideNav.js-C62Nc8M7.js} +2 -2
- package/build/server/chunks/chunks/{SideNav.js-B5A8NgLK.js.map → SideNav.js-C62Nc8M7.js.map} +1 -1
- package/build/server/chunks/chunks/{UserChip.js-DYW2Utyx.js → UserChip.js-Cfffcz1F.js} +3 -3
- package/build/server/chunks/chunks/{UserChip.js-DYW2Utyx.js.map → UserChip.js-Cfffcz1F.js.map} +1 -1
- package/build/server/chunks/chunks/{client.js-CPlZyPu8.js → client.js-B5zjaxEd.js} +2 -2
- package/build/server/chunks/chunks/{client.js-CPlZyPu8.js.map → client.js-B5zjaxEd.js.map} +1 -1
- package/build/server/chunks/chunks/forms.js-BQH7KYyi.js +2 -0
- package/build/server/chunks/chunks/forms.js-BQH7KYyi.js.map +1 -0
- package/build/server/chunks/chunks/internal.js-D-PIqUmO.js.map +1 -1
- package/build/server/chunks/chunks/{internal2.js-XevcNT_G.js → internal2.js-qTBwxhwo.js} +3 -3
- package/build/server/chunks/chunks/{internal2.js-XevcNT_G.js.map → internal2.js-qTBwxhwo.js.map} +1 -1
- package/build/server/chunks/chunks/navigation.js-BQH7KYyi.js +2 -0
- package/build/server/chunks/chunks/navigation.js-BQH7KYyi.js.map +1 -0
- package/build/server/chunks/chunks/{package.js-BKh7flYo.js → package.js-BEqfa7_s.js} +2 -2
- package/build/server/chunks/chunks/{package.js-BKh7flYo.js.map → package.js-BEqfa7_s.js.map} +1 -1
- package/build/server/chunks/chunks/{paths.js-BJujam6o.js → paths.js-sHF6DM-M.js} +2 -2
- package/build/server/chunks/chunks/{paths.js-BJujam6o.js.map → paths.js-sHF6DM-M.js.map} +1 -1
- package/build/server/chunks/chunks/{selfUpdate.server.js-D4yWhGGI.js → selfUpdate.server.js-l0l1xNus.js} +2 -2
- package/build/server/chunks/chunks/{selfUpdate.server.js-D4yWhGGI.js.map → selfUpdate.server.js-l0l1xNus.js.map} +1 -1
- package/build/server/chunks/chunks/{state.js-BCTfzewE.js → state.js-DE7Wux-S.js} +2 -2
- package/build/server/chunks/chunks/{state.js-BCTfzewE.js.map → state.js-DE7Wux-S.js.map} +1 -1
- package/build/server/chunks/chunks/{stores.js-pSZxdsnL.js → stores.js-C_lo-FMR.js} +2 -2
- package/build/server/chunks/chunks/{stores.js-pSZxdsnL.js.map → stores.js-C_lo-FMR.js.map} +1 -1
- package/build/server/chunks/chunks/{update-outcome.js-Djn7e2VC.js → update-outcome.js-D6m3udZN.js} +20 -1
- package/build/server/chunks/chunks/update-outcome.js-D6m3udZN.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/admin/system/update/{_server.ts.js-QCEcceeo.js → _server.ts.js-BPM7_gnV.js} +38 -4
- package/build/server/chunks/entries/endpoints/api/admin/system/update/{_server.ts.js-QCEcceeo.js.map → _server.ts.js-BPM7_gnV.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-CMVIHzYs.js → hooks.server.js-DkaJFT25.js} +3 -3
- package/build/server/chunks/entries/{hooks.server.js-CMVIHzYs.js.map → hooks.server.js-DkaJFT25.js.map} +1 -1
- package/build/server/chunks/entries/pages/{_error.svelte.js-C__RMX5H.js → _error.svelte.js-B0k_AdL1.js} +4 -4
- package/build/server/chunks/entries/pages/{_error.svelte.js-C__RMX5H.js.map → _error.svelte.js-B0k_AdL1.js.map} +1 -1
- package/build/server/chunks/entries/pages/{_page.svelte.js-CIerO8GF.js → _page.svelte.js-DrER7xBY.js} +6 -6
- package/build/server/chunks/entries/pages/{_page.svelte.js-CIerO8GF.js.map → _page.svelte.js-DrER7xBY.js.map} +1 -1
- package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-BtZWrs7T.js → _page.svelte.js-CsOMotAt.js} +4 -4
- package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-BtZWrs7T.js.map → _page.svelte.js-CsOMotAt.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_error.svelte.js-DymBLoCU.js → _error.svelte.js-puECh8ot.js} +4 -4
- package/build/server/chunks/entries/pages/admin/{_error.svelte.js-DymBLoCU.js.map → _error.svelte.js-puECh8ot.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-BxCqidMY.js → _layout.svelte.js-DFeopfG_.js} +7 -7
- package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-BxCqidMY.js.map → _layout.svelte.js-DFeopfG_.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-u104sMJi.js → _page.server.ts.js-C1df5eYu.js} +2 -2
- package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-u104sMJi.js.map → _page.server.ts.js-C1df5eYu.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_page.svelte.js-PgFZOp80.js → _page.svelte.js-Bzm_L5OW.js} +4 -4
- package/build/server/chunks/entries/pages/admin/{_page.svelte.js-PgFZOp80.js.map → _page.svelte.js-Bzm_L5OW.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-DPQ-1Wni.js → _page.svelte.js-Ce4Dm4yA.js} +3 -3
- package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-DPQ-1Wni.js.map → _page.svelte.js-Ce4Dm4yA.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-BjrGXukP.js → _page.svelte.js-CITQ8dQm.js} +3 -3
- package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-BjrGXukP.js.map → _page.svelte.js-CITQ8dQm.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-BVuCLbhC.js → _page.svelte.js-yuUaYdYT.js} +3 -3
- package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-BVuCLbhC.js.map → _page.svelte.js-yuUaYdYT.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-BA-wsByB.js → _page.server.ts.js-BNX-Pska.js} +2 -2
- package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-BA-wsByB.js.map → _page.server.ts.js-BNX-Pska.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-cBDN8M-p.js → _page.svelte.js-DWi0PkCo.js} +4 -4
- package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-cBDN8M-p.js.map → _page.svelte.js-DWi0PkCo.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-CrOy0Fmk.js → _page.svelte.js-DqEw38-9.js} +3 -3
- package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-CrOy0Fmk.js.map → _page.svelte.js-DqEw38-9.js.map} +1 -1
- package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-BRxau0-7.js → _page.svelte.js-C5arDt6o.js} +4 -4
- package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-BRxau0-7.js.map → _page.svelte.js-C5arDt6o.js.map} +1 -1
- package/build/server/chunks/entries/pages/docs/api/{_page.svelte.js-BCjb2Bs-.js → _page.svelte.js-CpiMj7Qm.js} +3 -3
- package/build/server/chunks/entries/pages/docs/api/{_page.svelte.js-BCjb2Bs-.js.map → _page.svelte.js-CpiMj7Qm.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-DcxIoLF4.js → _page.svelte.js-DXBnEm48.js} +5 -5
- package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-DcxIoLF4.js.map → _page.svelte.js-DXBnEm48.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/{_page.svelte.js-fIx2Y7Ma.js → _page.svelte.js-BWoG67r9.js} +6 -6
- package/build/server/chunks/entries/pages/library/{_page.svelte.js-fIx2Y7Ma.js.map → _page.svelte.js-BWoG67r9.js.map} +1 -1
- package/build/server/chunks/entries/pages/login/{_page.svelte.js-BagWa6gN.js → _page.svelte.js-C-arkV81.js} +4 -4
- package/build/server/chunks/entries/pages/login/{_page.svelte.js-BagWa6gN.js.map → _page.svelte.js-C-arkV81.js.map} +1 -1
- package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-DnobE8t5.js → _layout.svelte.js-ccKdytrj.js} +6 -6
- package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-DnobE8t5.js.map → _layout.svelte.js-ccKdytrj.js.map} +1 -1
- package/build/server/chunks/entries/pages/projects/{_page.svelte.js-83Y8gjyo.js → _page.svelte.js-DkozUMxR.js} +4 -4
- package/build/server/chunks/entries/pages/projects/{_page.svelte.js-83Y8gjyo.js.map → _page.svelte.js-DkozUMxR.js.map} +1 -1
- package/build/server/chunks/entries/pages/setup/{_page.svelte.js-ClSST1JJ.js → _page.svelte.js-6HFP3cRT.js} +4 -4
- package/build/server/chunks/entries/pages/setup/{_page.svelte.js-ClSST1JJ.js.map → _page.svelte.js-6HFP3cRT.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/{_layout.svelte.js-ChhWeFxE.js → _layout.svelte.js-BSzvcciC.js} +8 -8
- package/build/server/chunks/entries/pages/team/{_layout.svelte.js-ChhWeFxE.js.map → _layout.svelte.js-BSzvcciC.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-CNUIiwwN.js → _page.svelte.js-l_oRSwNG.js} +4 -4
- package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-CNUIiwwN.js.map → _page.svelte.js-l_oRSwNG.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-BM_M3moU.js → _page.svelte.js-MtUm7QgR.js} +3 -3
- package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-BM_M3moU.js.map → _page.svelte.js-MtUm7QgR.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-Ci4Fz8ss.js → _page.svelte.js-Bpw8mONK.js} +3 -3
- package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-Ci4Fz8ss.js.map → _page.svelte.js-Bpw8mONK.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-BvhyLLcv.js → _page.svelte.js-CrgahGAI.js} +3 -3
- package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-BvhyLLcv.js.map → _page.svelte.js-CrgahGAI.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/shares/{_page.svelte.js-CF-ylBd5.js → _page.svelte.js-DWu7Zxst.js} +3 -3
- package/build/server/chunks/entries/pages/team/shares/{_page.svelte.js-CF-ylBd5.js.map → _page.svelte.js-DWu7Zxst.js.map} +1 -1
- package/build/server/chunks/{handler-Db7sp23S.js → handler-CErcKJbW.js} +3 -3
- package/build/server/chunks/{handler-Db7sp23S.js.map → handler-CErcKJbW.js.map} +1 -1
- package/build/server/chunks/{index.js-WbrPodQ8.js → index.js-CiGKxztc.js} +2 -2
- package/build/server/chunks/{index.js-WbrPodQ8.js.map → index.js-CiGKxztc.js.map} +1 -1
- package/build/server/chunks/{manifest.js-DM9fpA0I.js → manifest.js-DxLkYjgb.js} +28 -28
- package/build/server/chunks/{manifest.js-DM9fpA0I.js.map → manifest.js-DxLkYjgb.js.map} +1 -1
- package/build/server/chunks/nodes/{1.js--S3VIL2y.js → 1.js-BMzusg4_.js} +3 -3
- package/build/server/chunks/nodes/{1.js--S3VIL2y.js.map → 1.js-BMzusg4_.js.map} +1 -1
- package/build/server/chunks/nodes/{11.js-BtMALlGm.js → 11.js-y9bzTk3X.js} +3 -3
- package/build/server/chunks/nodes/{11.js-BtMALlGm.js.map → 11.js-y9bzTk3X.js.map} +1 -1
- package/build/server/chunks/nodes/{13.js-kH7PhWsz.js → 13.js-XxmBGyny.js} +3 -3
- package/build/server/chunks/nodes/{13.js-kH7PhWsz.js.map → 13.js-XxmBGyny.js.map} +1 -1
- package/build/server/chunks/nodes/{14.js-B31tspX2.js → 14.js-DWCWJ5Y8.js} +3 -3
- package/build/server/chunks/nodes/{14.js-B31tspX2.js.map → 14.js-DWCWJ5Y8.js.map} +1 -1
- package/build/server/chunks/nodes/{15.js-CVCag1g6.js → 15.js-DvDQCJIu.js} +5 -5
- package/build/server/chunks/nodes/{15.js-CVCag1g6.js.map → 15.js-DvDQCJIu.js.map} +1 -1
- package/build/server/chunks/nodes/{16.js-DJucqku9.js → 16.js-BqGz2kLy.js} +3 -3
- package/build/server/chunks/nodes/{16.js-DJucqku9.js.map → 16.js-BqGz2kLy.js.map} +1 -1
- package/build/server/chunks/nodes/{17.js-C0LRiU0I.js → 17.js-DypDCC8w.js} +3 -3
- package/build/server/chunks/nodes/{17.js-C0LRiU0I.js.map → 17.js-DypDCC8w.js.map} +1 -1
- package/build/server/chunks/nodes/{19.js-DExgnmKp.js → 19.js-BxRT6M4T.js} +3 -3
- package/build/server/chunks/nodes/{19.js-DExgnmKp.js.map → 19.js-BxRT6M4T.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-C7Btl6z0.js → 2.js-BJ788LyU.js} +3 -3
- package/build/server/chunks/nodes/{2.js-C7Btl6z0.js.map → 2.js-BJ788LyU.js.map} +1 -1
- package/build/server/chunks/nodes/{20.js-CYWZVdA_.js → 20.js-ClXB_G6j.js} +3 -3
- package/build/server/chunks/nodes/{20.js-CYWZVdA_.js.map → 20.js-ClXB_G6j.js.map} +1 -1
- package/build/server/chunks/nodes/{21.js-Dt_G3nFk.js → 21.js-CGhSNvQT.js} +3 -3
- package/build/server/chunks/nodes/{21.js-Dt_G3nFk.js.map → 21.js-CGhSNvQT.js.map} +1 -1
- package/build/server/chunks/nodes/{22.js-DHefiJ0j.js → 22.js-CqtlOHkp.js} +3 -3
- package/build/server/chunks/nodes/{22.js-DHefiJ0j.js.map → 22.js-CqtlOHkp.js.map} +1 -1
- package/build/server/chunks/nodes/{24.js-Czu3Svdn.js → 24.js-DPAhYEgB.js} +3 -3
- package/build/server/chunks/nodes/{24.js-Czu3Svdn.js.map → 24.js-DPAhYEgB.js.map} +1 -1
- package/build/server/chunks/nodes/{25.js-B7Diit5l.js → 25.js-D2-QtZDO.js} +3 -3
- package/build/server/chunks/nodes/{25.js-B7Diit5l.js.map → 25.js-D2-QtZDO.js.map} +1 -1
- package/build/server/chunks/nodes/{28.js-LN8NOwwK.js → 28.js-D0ja56yM.js} +3 -3
- package/build/server/chunks/nodes/{28.js-LN8NOwwK.js.map → 28.js-D0ja56yM.js.map} +1 -1
- package/build/server/chunks/nodes/{29.js-DuoFmfaj.js → 29.js-I1wrCZu-.js} +3 -3
- package/build/server/chunks/nodes/{29.js-DuoFmfaj.js.map → 29.js-I1wrCZu-.js.map} +1 -1
- package/build/server/chunks/nodes/{3.js-DemO_299.js → 3.js-DKl3WQA6.js} +3 -3
- package/build/server/chunks/nodes/{3.js-DemO_299.js.map → 3.js-DKl3WQA6.js.map} +1 -1
- package/build/server/chunks/nodes/{30.js-CZDTt8tS.js → 30.js-CVNtUf7m.js} +3 -3
- package/build/server/chunks/nodes/{30.js-CZDTt8tS.js.map → 30.js-CVNtUf7m.js.map} +1 -1
- package/build/server/chunks/nodes/{31.js-DuLEfw4L.js → 31.js-CidOHZ3v.js} +3 -3
- package/build/server/chunks/nodes/{31.js-DuLEfw4L.js.map → 31.js-CidOHZ3v.js.map} +1 -1
- package/build/server/chunks/nodes/{33.js-DddrkYrt.js → 33.js-CXDM-9zH.js} +3 -3
- package/build/server/chunks/nodes/{33.js-DddrkYrt.js.map → 33.js-CXDM-9zH.js.map} +1 -1
- package/build/server/chunks/nodes/{5.js-BnGcv-U7.js → 5.js-BZoY_6WN.js} +3 -3
- package/build/server/chunks/nodes/{5.js-BnGcv-U7.js.map → 5.js-BZoY_6WN.js.map} +1 -1
- package/build/server/chunks/nodes/{6.js-DfedPr6r.js → 6.js-C7EDrGBk.js} +3 -3
- package/build/server/chunks/nodes/{6.js-DfedPr6r.js.map → 6.js-C7EDrGBk.js.map} +1 -1
- package/build/server/chunks/nodes/{7.js-D6CaHfwd.js → 7.js-Bt0BBWEq.js} +3 -3
- package/build/server/chunks/nodes/{7.js-D6CaHfwd.js.map → 7.js-Bt0BBWEq.js.map} +1 -1
- package/build/server/chunks/nodes/{8.js-C5DLz4it.js → 8.js-D9YU1fpd.js} +3 -3
- package/build/server/chunks/nodes/{8.js-C5DLz4it.js.map → 8.js-D9YU1fpd.js.map} +1 -1
- package/build/server/chunks/nodes/{9.js-Bksndc3V.js → 9.js-D1oquyfg.js} +5 -5
- package/build/server/chunks/nodes/{9.js-Bksndc3V.js.map → 9.js-D1oquyfg.js.map} +1 -1
- package/package.json +3 -3
- package/build/client/_app/immutable/chunks/BLa-U_gy.js.br +0 -0
- package/build/client/_app/immutable/chunks/BLa-U_gy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BNZDNHpq.js +0 -2
- package/build/client/_app/immutable/chunks/BNZDNHpq.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNZDNHpq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C91vKAqc.js.br +0 -0
- package/build/client/_app/immutable/chunks/C91vKAqc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CBlVkCNr.js.br +0 -0
- package/build/client/_app/immutable/chunks/CBlVkCNr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CT99T8r_2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CT99T8r_2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cas_r5Cj2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cas_r5Cj2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D6m5a0OT2.js +0 -1
- package/build/client/_app/immutable/chunks/D6m5a0OT2.js.br +0 -2
- package/build/client/_app/immutable/chunks/D6m5a0OT2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pYSRzJMP.js.br +0 -0
- package/build/client/_app/immutable/chunks/pYSRzJMP.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.GQmlOOd_.js.br +0 -0
- package/build/client/_app/immutable/entry/app.GQmlOOd_.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.3NYpksfg.js +0 -1
- package/build/client/_app/immutable/entry/start.3NYpksfg.js.br +0 -0
- package/build/client/_app/immutable/entry/start.3NYpksfg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Da2ygAPH.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Da2ygAPH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.C5XqRFlQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.C5XqRFlQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.B0URBchi.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.B0URBchi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.BQQCdbLS.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.BQQCdbLS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.pgcpxj56.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.pgcpxj56.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.SIXYWFzX.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.SIXYWFzX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.Ar6dEz3w.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.Ar6dEz3w.js.gz +0 -0
- package/build/client/_app/immutable/nodes/19.Dd1AxZGU.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.Dd1AxZGU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.D3f1Htz1.js.br +0 -3
- package/build/client/_app/immutable/nodes/2.D3f1Htz1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/20.CfAtIhIQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.CfAtIhIQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/21.DLe_5KFi.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.DLe_5KFi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/22.CnObDwUV.js.br +0 -0
- package/build/client/_app/immutable/nodes/22.CnObDwUV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/24.Bt5i_Mi7.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.Bt5i_Mi7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/25.BxMUUxpU.js.br +0 -0
- package/build/client/_app/immutable/nodes/25.BxMUUxpU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/28.C6_OKS4M.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.C6_OKS4M.js.gz +0 -0
- package/build/client/_app/immutable/nodes/29.D3vp5WnX.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.D3vp5WnX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CCH-pM9W.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CCH-pM9W.js.gz +0 -0
- package/build/client/_app/immutable/nodes/30.DSWC5S_b.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.DSWC5S_b.js.gz +0 -0
- package/build/client/_app/immutable/nodes/31.BWTgUx9w.js.br +0 -0
- package/build/client/_app/immutable/nodes/31.BWTgUx9w.js.gz +0 -0
- package/build/client/_app/immutable/nodes/33.BLZDo2P4.js.br +0 -0
- package/build/client/_app/immutable/nodes/33.BLZDo2P4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.9Lrvi_FE.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.9Lrvi_FE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DjBPfXJ8.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DjBPfXJ8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DVPq8TUt.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DVPq8TUt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.1-HJk-Oo.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.1-HJk-Oo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CsO4rxYN.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CsO4rxYN.js.gz +0 -0
- package/build/server/chunks/chunks/forms.js-CjvtmFhm.js +0 -2
- package/build/server/chunks/chunks/forms.js-CjvtmFhm.js.map +0 -1
- package/build/server/chunks/chunks/navigation.js-CjvtmFhm.js +0 -2
- package/build/server/chunks/chunks/navigation.js-CjvtmFhm.js.map +0 -1
- package/build/server/chunks/chunks/update-outcome.js-Djn7e2VC.js.map +0 -1
|
@@ -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,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/CaPGMcGG.js";import{i as k,r as re}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,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/CaPGMcGG.js";import{i as k,r as re}from"../chunks/DkNoNSlE.js";import"../chunks/xihTtKlq.js";import{n as A}from"../chunks/BHJluY8_.js";import{t as j}from"../chunks/aVYDX1GV.js";import{t as ie}from"../chunks/DvqsoxXS.js";import{t as ae}from"../chunks/DAJWbK0s.js";import{t as oe}from"../chunks/DFMaom1y.js";import{t as se}from"../chunks/uSpnQjAy.js";import{t as ce}from"../chunks/CppRe4Bu.js";import{t as le}from"../chunks/D3q2NY-v.js";import{t as M}from"../chunks/DIterJyj.js";import{a as ue,i as de,n as fe,r as N,t as P}from"../chunks/Cfxaj6gD.js";import{t as pe}from"../chunks/CdpwgFYV.js";import{t as F}from"../chunks/D-XQc9b_.js";import{t as me}from"../chunks/D7tSv1sM.js";import{n as I,t as L}from"../chunks/oYxDpI1j.js";import{n as R}from"../chunks/BSPU_62Z2.js";import{t as z}from"../chunks/BkfPai612.js";import"../chunks/CHNbIR4A2.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
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,()=>de,(e,n)=>{n(e,{value:`grants`,children:(e,n)=>{var l=je(),f=E(l);y(f,()=>fe,(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);ue(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 E,it as D,k as O,kt as k,lt as A,mt as j,nt as M,o as N,s as P,st as F,ut as I,y as L,yt as R,z,zt as ee}from"../chunks/CaPGMcGG.js";import"../chunks/xihTtKlq.js";import{n as B}from"../chunks/BHJluY8_.js";import{t as V}from"../chunks/aVYDX1GV.js";import{t as H}from"../chunks/CIUuF6SP.js";import{n as te,r as U,t as W}from"../chunks/BMLetflF.js";import{t as G}from"../chunks/kjQmmFm7.js";import{t as ne}from"../chunks/CNtyPyn9.js";import{t as re}from"../chunks/Cbf_X7a2.js";import{t as K}from"../chunks/DqO3dAVD.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/BwnV67np.js";import{t as fe}from"../chunks/CdpwgFYV.js";import{n as q,t as J}from"../chunks/oYxDpI1j.js";import{t as Y}from"../chunks/CNn6iyi3.js";import{n as X,t as Z}from"../chunks/dM2tDLNE2.js";import{t as pe}from"../chunks/Cas_r5Cj2.js";var me=new Set([`$$slots`,`$$events`,`$$legacy`]);function he(e,t){let n=N(t,me),r=[[`path`,{d:`M12 5v14`}],[`path`,{d:`m19 12-7 7-7-7`}]];B(e,P({name:`arrow-down`},()=>n,{get iconNode(){return r}}))}var ge=new Set([`$$slots`,`$$events`,`$$legacy`]);function _e(e,t){let n=N(t,ge),r=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]];B(e,P({name:`arrow-up`},()=>n,{get iconNode(){return r}}))}var ve=new Set([`$$slots`,`$$events`,`$$legacy`]);function ye(e,t){let n=N(t,ve),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m16 12-4-4-4 4`}],[`path`,{d:`M12 16V8`}]];B(e,P({name:`circle-arrow-up`},()=>n,{get iconNode(){return r}}))}var be=new Set([`$$slots`,`$$events`,`$$legacy`]);function xe(e,t){let n=N(t,be),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m15 9-6 6`}],[`path`,{d:`m9 9 6 6`}]];B(e,P({name:`circle-x`},()=>n,{get iconNode(){return r}}))}var Se=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ce(e,t){let n=N(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`}]];B(e,P({name:`flask-conical`},()=>n,{get iconNode(){return r}}))}var we=new Set([`$$slots`,`$$events`,`$$legacy`]);function Te(e,t){let n=N(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`}]];B(e,P({name:`stethoscope`},()=>n,{get iconNode(){return r}}))}function Q(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:Q(e,/Current @selvajs\/selva:\s*v?(\d+\.\d+\.\d+[^\s]*)/)??n?.[1],to:Q(e,/New @selvajs\/selva:\s*v?(\d+\.\d+\.\d+[^\s]*)/)??n?.[2]}}function $(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||$(t,`Manual recovery required`)||$(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||$(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||$(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||$(t,`PM2_SKEW`)){let e=Q(t,/daemon \(v(\d+\.\d+\.\d+)\)/),i=Q(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||$(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($(t,`ENGINE_MISMATCH`)||$(t,`EBADENGINE`)){let e=Q(t,/requires Node ([^\s]+(?:\s*[<>=]+\s*[\d.]+)*)/),i=Q(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 $(t,`npm cache may be stale`)||$(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?$(t,`Already on the`)||$(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
|
|
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 E,it as D,k as O,kt as k,lt as A,mt as j,nt as M,o as N,s as P,st as F,ut as I,y as L,yt as R,z,zt as ee}from"../chunks/CaPGMcGG.js";import"../chunks/xihTtKlq.js";import{n as B}from"../chunks/BHJluY8_.js";import{t as V}from"../chunks/aVYDX1GV.js";import{t as H}from"../chunks/CIUuF6SP.js";import{n as te,r as U,t as W}from"../chunks/BMLetflF.js";import{t as G}from"../chunks/kjQmmFm7.js";import{t as ne}from"../chunks/CNtyPyn9.js";import{t as re}from"../chunks/Cbf_X7a2.js";import{t as K}from"../chunks/DqO3dAVD.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/BwnV67np.js";import{t as fe}from"../chunks/CdpwgFYV.js";import{n as q,t as J}from"../chunks/oYxDpI1j.js";import{t as Y}from"../chunks/CNn6iyi3.js";import{n as X,t as Z}from"../chunks/dM2tDLNE2.js";import{t as pe}from"../chunks/DwUuhchs2.js";var me=new Set([`$$slots`,`$$events`,`$$legacy`]);function he(e,t){let n=N(t,me),r=[[`path`,{d:`M12 5v14`}],[`path`,{d:`m19 12-7 7-7-7`}]];B(e,P({name:`arrow-down`},()=>n,{get iconNode(){return r}}))}var ge=new Set([`$$slots`,`$$events`,`$$legacy`]);function _e(e,t){let n=N(t,ge),r=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]];B(e,P({name:`arrow-up`},()=>n,{get iconNode(){return r}}))}var ve=new Set([`$$slots`,`$$events`,`$$legacy`]);function ye(e,t){let n=N(t,ve),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m16 12-4-4-4 4`}],[`path`,{d:`M12 16V8`}]];B(e,P({name:`circle-arrow-up`},()=>n,{get iconNode(){return r}}))}var be=new Set([`$$slots`,`$$events`,`$$legacy`]);function xe(e,t){let n=N(t,be),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m15 9-6 6`}],[`path`,{d:`m9 9 6 6`}]];B(e,P({name:`circle-x`},()=>n,{get iconNode(){return r}}))}var Se=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ce(e,t){let n=N(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`}]];B(e,P({name:`flask-conical`},()=>n,{get iconNode(){return r}}))}var we=new Set([`$$slots`,`$$events`,`$$legacy`]);function Te(e,t){let n=N(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`}]];B(e,P({name:`stethoscope`},()=>n,{get iconNode(){return r}}))}function Q(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:Q(e,/Current @selvajs\/selva:\s*v?(\d+\.\d+\.\d+[^\s]*)/)??n?.[1],to:Q(e,/New @selvajs\/selva:\s*v?(\d+\.\d+\.\d+[^\s]*)/)??n?.[2]}}function $(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||$(t,`Manual recovery required`)||$(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||$(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||$(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||$(t,`PM2_SKEW`)){let e=Q(t,/daemon \(v(\d+\.\d+\.\d+)\)/),i=Q(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($(t,`SCHEMA_SKEW`)){let e=Q(t,/expects database migration head (\S+?),/),i=Q(t,/this database is at (\S+?)\./),a=e&&i?` The database is at ${i}; ${r??`it`} needs ${e}.`:``;return{severity:`warning`,title:`Update rolled back — the database migrations for ${r??`the new version`} have not been applied.${a} The app is online${n?` on ${n}`:``}.`,detail:"Nothing is wrong with the new version. Selva does not apply migrations during an update, because they cannot be rolled back — auto-migrating and then rolling the code back would leave the app and database on different heads. Apply them on the server, then re-run this update: `npx @selvajs/supabase-provider sync-migrations` followed by `npx supabase db push`. Retrying without this will fail in exactly the same way.",from:n,to:r}}if($(t,`AT_REST_SECRETS`))return{severity:`warning`,title:`Update rolled back — stored compute server keys do not decrypt under this host's SELVA_AT_REST_KEY. The app is online${n?` on ${n}`:``}.`,detail:`This is a configuration problem on the server, not a fault in the new version, so retrying alone will fail identically. Re-enter the affected keys at /admin/compute, or restore the SELVA_AT_REST_KEY the values were encrypted with, then re-run the update.`,from:n,to:r};if(e===5||$(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($(t,`ENGINE_MISMATCH`)||$(t,`EBADENGINE`)){let e=Q(t,/requires Node ([^\s]+(?:\s*[<>=]+\s*[\d.]+)*)/),i=Q(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 $(t,`npm cache may be stale`)||$(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?$(t,`Already on the`)||$(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),M=_(i,`nodeCompatibility`,19,()=>({compatible:null,required:null,running:``})),N=R(()=>M().compatible===!1),P=T(``),F=T(!1),L=R(()=>g(F)&&!!a()&&g(P).trim()===a()),ee=R(()=>p()||g(N)&&!g(L)),B=R(()=>f()===`beta`?`beta`:`stable`),H=T(void 0),W=T(!1),G=R(()=>C()===null?null:De(C(),b())),re={success:{text:`text-success`,border:`border-success/40`,bg:`bg-success/10`,icon:U},info:{text:`text-foreground`,border:`border-border`,bg:`bg-muted/50`,icon:te},warning:{text:`text-warning`,border:`border-warning/40`,bg:`bg-warning/10`,icon:K},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(H)&&(g(H).scrollTop=g(H).scrollHeight)});function fe(){return m()?`Restarting & verifying…`:p()?`Running…`:`Run Update`}function pe(){j(W,!0)}function me(){j(W,!1),i.onRun?.()}var he=He(),ge=I(he);O(ge,()=>q,(e,t)=>{t(e,{children:(e,t)=>{var n=He(),f=I(n);O(f,()=>X,(e,t)=>{t(e,{children:(e,t)=>{var n=Ae(),a=I(n),u=A(a);O(u,()=>Z,(e,t)=>{t(e,{children:(e,t)=>{s();var n=h(`Application Update`);z(e,n)},$$slots:{default:!0}})});var f=x(u,2),p=e=>{var t=Oe(),n=A(t);l(t),D(()=>{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??``}`)}),z(e,t)};o(f,e=>{i.currentVersion&&e(p)}),l(a);var m=x(a,2);O(m,()=>Y,(e,t)=>{t(e,{children:(e,t)=>{s();var n=ke(),r=x(I(n)),i=A(r,!0);l(r),s(),D(()=>d(i,g(B))),z(e,n)},$$slots:{default:!0}})}),z(e,n)},$$slots:{default:!0}})});var p=x(f,2);O(p,()=>J,(e,t)=>{t(e,{class:`space-y-4`,children:(e,t)=>{var n=Ve(),f=I(n),p=e=>{var t=je(),n=A(t);ye(n,{class:`h-4 w-4 shrink-0`});var r=x(n,2),o=A(r),s=x(o),c=A(s);l(s);var u=x(s,2),f=A(u);l(u),l(r),l(t),D(()=>{d(o,`${g(B)??``} release available — `),d(c,`v${i.currentVersion??``}`),d(f,`v${a()??``}`)}),z(e,t)},_=e=>{var t=Me(),n=A(t),r=x(n),a=A(r);l(r),s(),l(t),D(()=>{d(n,`You're on the latest ${g(B)??``} release (`),d(a,`v${i.currentVersion??``}`)}),z(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=A(t),r=A(n);K(r,{class:`mt-0.5 h-4 w-4 shrink-0`});var i=x(r,2),c=x(A(i),2),f=A(c),p=A(f);l(f);var m=x(f,2),h=A(m,!0);l(m);var _=x(m,2),v=A(_);l(_),s(3),l(c),l(i),l(n);var y=x(n,2),b=e=>{var t=Ne();u(`click`,t,()=>j(F,!0)),z(e,t)},C=e=>{var t=Pe(),n=A(t),r=x(A(n)),i=A(r,!0);l(r),s(),l(n);var o=x(n,2);E(o),l(t),D(()=>{d(i,a()),w(o,`placeholder`,a()??``)}),S(o,()=>g(P),e=>j(P,e)),z(e,t)};o(y,e=>{g(F)?e(C,-1):e(b)}),l(t),D(()=>{d(p,`v${a()??``}`),d(h,M().required),d(v,`v${M().running??``}`)}),z(e,t)};o(v,e=>{g(N)&&e(T)});var k=x(v,2);V(k,{onclick:pe,get disabled(){return g(ee)},variant:`destructive`,children:(e,t)=>{s();var n=h();D(e=>d(n,e),[()=>fe()]),z(e,n)},$$slots:{default:!0}});var L=x(k,2),te=e=>{var t=Ie(),n=A(t);ne(n,{class:`h-4 w-4 animate-spin`}),s(2),l(t),z(e,t)};o(L,e=>{m()&&C()===null&&e(te)});var U=x(L,2),W=e=>{let t=R(()=>re[g(G).severity]),n=R(()=>g(t).icon);var i=ze(),a=A(i);O(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=A(s),u=A(c,!0);l(c);var f=x(c,2),p=e=>{var t=Le(),n=A(t);l(t),D(()=>d(n,`${g(G).from??``} → ${g(G).to??``}`)),z(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=A(t,!0);l(t),D(()=>d(n,g(G).detail)),z(e,t)};o(m,e=>{g(G).detail&&e(h)}),l(s),l(i),D(()=>{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)}),z(e,i)};o(U,e=>{g(G)&&e(W)});var ie=x(U,2),ae=e=>{var t=Be(),n=x(A(t),2),r=A(n,!0);l(n),y(n,e=>j(H,e),()=>g(H)),l(t),D(()=>d(r,b())),z(e,t)};o(ie,e=>{b()&&e(ae)}),z(e,n)},$$slots:{default:!0}})}),z(e,n)},$$slots:{default:!0}})});var _e=x(ge,2);O(_e,()=>de,(e,t)=>{t(e,{get open(){return g(W)},onOpenChange:e=>j(W,e,!0),children:(e,t)=>{var r=n(),i=I(r);O(i,()=>le,(e,t)=>{t(e,{children:(e,t)=>{var r=He(),i=I(r);O(i,()=>oe,(e,t)=>{t(e,{children:(e,t)=>{var r=Ue(),i=I(r);O(i,()=>ae,(e,t)=>{t(e,{children:(e,t)=>{s();var n=h();D(()=>d(n,g(N)?`Run Update despite the Node mismatch?`:`Run Update?`)),z(e,n)},$$slots:{default:!0}})});var a=x(i,2),c=e=>{var t=n(),r=I(t);O(r,()=>se,(e,t)=>{t(e,{class:`text-destructive`,children:(e,t)=>{s();var n=h();D(()=>d(n,`This release requires Node ${M().required??``} and the host runs v${M().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,at as h,dt as g,ft as _,g as v,gt as y,h as b,it as x,k as S,kt as C,lt as w,mt as T,nt as E,o as D,s as O,st as k,ut as A,y as j,yt as M,z as N}from"../chunks/CaPGMcGG.js";import{i as P}from"../chunks/
|
|
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,at as h,dt as g,ft as _,g as v,gt as y,h as b,it as x,k as S,kt as C,lt as w,mt as T,nt as E,o as D,s as O,st as k,ut as A,y as j,yt as M,z as N}from"../chunks/CaPGMcGG.js";import{i as P}from"../chunks/DkNoNSlE.js";import"../chunks/xihTtKlq.js";import{n as F}from"../chunks/BHJluY8_.js";import{t as I}from"../chunks/aVYDX1GV.js";import{t as L}from"../chunks/tvZyX0B8.js";import{i as R,n as z,o as ee,r as B,t as V}from"../chunks/DXJWlZBg.js";import{t as H}from"../chunks/CIUuF6SP.js";import{t as U}from"../chunks/DAJWbK0s.js";import{t as te}from"../chunks/D1CmR2E2.js";import{t as W}from"../chunks/Cbf_X7a2.js";import{t as G}from"../chunks/CppRe4Bu.js";import{t as ne}from"../chunks/E3mmm22F.js";import{t as re}from"../chunks/D3q2NY-v.js";import{t as ie}from"../chunks/CdpwgFYV.js";import{t as K}from"../chunks/D-XQc9b_.js";import{t as ae}from"../chunks/D7tSv1sM.js";import{n as oe,t as se}from"../chunks/oYxDpI1j.js";import{n as q}from"../chunks/BSPU_62Z2.js";import"../chunks/CHNbIR4A2.js";import{i as ce}from"../chunks/BTJ8jaRT2.js";var J=new Set([`$$slots`,`$$events`,`$$legacy`]);function Y(e,t){let n=D(t,J),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M4.929 4.929 19.07 19.071`}]];F(e,O({name:`ban`},()=>n,{get iconNode(){return r}}))}var X=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>`),Z=d(`<span class="bg-muted text-muted-foreground rounded-full px-2 py-0.5 font-mono text-[10px]"> </span>`),le=d(`<div class="mt-1.5 flex flex-wrap gap-1"><!> <!></div>`),ue=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>`),Q=d(`<p class="text-muted-foreground text-sm">Not a member of the active organization.</p>`),$=d(`<strong class="text-foreground capitalize"> </strong> hold every organization
|
|
2
2
|
permission.`,1),de=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),fe=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>`),pe=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> <!></div>`);function me(r,o){e(o,!0);let d=M(()=>o.user.orgRole===`owner`||o.user.orgRole===`admin`),h=M(()=>p(d)?[]:o.user.orgPermissions),_=M(()=>o.user.platformPermissions.includes(`instance_admin`)),y=M(()=>p(_)&&!o.isPlatformAdmin),S=M(()=>p(y)?`Only a platform admin can remove another platform admin.`:o.soleInstanceAdmin?`Cannot remove the only instance admin. Promote another user first.`:null);function T(e){let t=o.user.platformPermissions.includes(e),n=!o.isPlatformAdmin,r=e===`instance_admin`&&o.soleInstanceAdmin;return{checked:t,locked:n||r,soleAdminLock:r,platformLocked:n}}var E=pe(),D=w(E),O=w(D),k=w(O),j=e=>{L(e,{class:`h-4 w-4`})},P=e=>{H(e,{class:`h-4 w-4`})};i(k,e=>{o.expanded?e(j):e(P,-1)}),s(O);var F=g(O,2);V(F,{get user(){return o.user},get id(){return o.user.id},get role(){return o.user.orgRole},get disabled(){return o.user.disabled},get lastLoginAt(){return o.user.lastLoginAt},children:(e,n)=>{var r=t(),a=A(r),c=e=>{var t=le(),n=w(t);u(n,16,()=>o.user.platformPermissions,e=>e,(e,t)=>{var n=X(),r=w(n,!0);s(n),x(()=>l(r,R[t])),N(e,n)});var r=g(n,2);u(r,16,()=>p(h),e=>e,(e,t)=>{var n=Z(),r=w(n,!0);s(n),x(()=>l(r,R[t])),N(e,n)}),s(t),N(e,t)};i(a,e=>{!o.expanded&&(o.user.platformPermissions.length>0||p(h).length>0)&&e(c)}),N(e,r)},$$slots:{default:!0}});var z=g(F,2),ee=e=>{{let t=M(()=>o.disabling||!!p(S)),n=M(()=>p(S)??`Disable user — they keep their history but cannot sign in`);I(e,{size:`sm`,variant:`ghost`,get disabled(){return p(t)},get onclick(){return o.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(z,e=>{o.user.disabled||e(ee)});var U=g(z,2);{let e=M(()=>o.deleting||!!p(S)),t=M(()=>p(S)??`Delete user`);I(U,{size:`sm`,variant:`ghost`,get disabled(){return p(e)},get onclick(){return o.onDelete},get title(){return p(t)},class:`text-destructive hover:text-destructive h-8 w-8 shrink-0 p-0`,children:(e,t)=>{G(e,{class:`h-4 w-4`})},$$slots:{default:!0}})}s(D);var te=g(D,2),W=e=>{var t=fe(),r=w(t),h=g(w(r),2);u(h,20,()=>ce,e=>e,(e,t)=>{let r=M(()=>T(t));var i=ue(),a=w(i);b(a);var u=g(a,2),d=w(u),f=w(d,!0);s(d);var h=g(d,2),_=w(h,!0);s(h),s(u),s(i),x(()=>{n(i,1,`flex items-start gap-2 rounded-md border p-2.5 ${p(r).locked?`border-border cursor-not-allowed opacity-60`:`border-border hover:bg-accent/40 cursor-pointer`}`),v(i,`title`,p(r).soleAdminLock?`Cannot remove the only instance admin.`:void 0),m(a,p(r).checked),a.disabled=o.updating||p(r).locked,l(f,R[t]),l(_,B[t])}),c(`change`,a,e=>o.onTogglePermission(t,e.target.checked)),N(e,i)}),s(h),s(r);var _=g(r,2),y=g(w(_),2),S=e=>{var t=Q();N(e,t)},C=e=>{var t=de(),n=A(t),r=w(n),c=e=>{var t=$(),n=A(t),r=w(n);s(n),a(),x(()=>l(r,`${o.user.orgRole??``}s`)),N(e,t)},u=e=>{var t=f();x(e=>l(t,`Member, holding ${e??``}.`),[()=>o.user.orgPermissions.map(e=>R[e]).join(`, `)]),N(e,t)},m=e=>{var t=f(`Member, with no organization permissions granted.`);N(e,t)};i(r,e=>{p(d)?e(c):o.user.orgPermissions.length>0?e(u,1):e(m,-1)}),s(n),a(2),N(e,t)};i(y,e=>{o.user.orgRole?e(C,-1):e(S)}),s(_),s(t),N(e,t)};i(te,e=>{o.expanded&&e(W)}),s(E),x(()=>{n(E,1,`px-4 py-3 ${o.expanded?`bg-accent/20`:``}`),v(O,`aria-label`,o.expanded?`Collapse permissions`:`Expand permissions`)}),c(`click`,O,function(...e){o.onToggleExpand?.apply(this,e)}),N(r,E),C()}o([`click`,`change`]);var he=d(`<!> Allowlist user`,1),ge=d(`<!> Members & roles`,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
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
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> <!>`,1),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=M(()=>o.data.isPlatformAdmin?[...ce]:[]),v=y(!1),D=y(``),O=y(_([])),F=y(!1),L=y(null),B=y(null),V=y(null),H=y(null),G=y(``),J=y(`all`),Y=y(`all`),X=y(`all`),Z=M(()=>p(G).trim()!==``||p(J)!==`all`||p(Y)!==`all`||p(X)!==`all`);function le(e,t){return[e.displayName,e.email,e.id].some(e=>e?.toLowerCase().includes(t))}function ue(e){switch(p(X)){case`enabled`:return!e.disabled;case`disabled`:return!!e.disabled;case`never-signed-in`:return!e.lastLoginAt;default:return!0}}let Q=M(()=>{let e=p(G).trim().toLowerCase();return(o.data.users??[]).filter(t=>(e===``||le(t,e))&&(p(J)===`all`||t.orgRole===p(J))&&(p(Y)===`all`||t.platformPermissions.includes(p(Y)))&&ue(t))}),$=y(1),de=M(()=>`${p(G)} ${p(J)} ${p(Y)} ${p(X)}`);h(()=>{p(de),T($,1)});let fe=M(()=>p(Q).slice((p($)-1)*25,p($)*25));function pe(){T(G,``),T(J,`all`),T(Y,`all`),T(X,`all`)}let ke=e=>o.data.enabledInstanceAdminCount===1&&!e.disabled&&e.platformPermissions.includes(`instance_admin`);function Ae(e,t){t?T(O,[...p(O),e],!0):T(O,p(O).filter(t=>t!==e),!0)}async function je(){T(F,!0);try{let e=await fetch(`/api/admin/users`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:p(D),permissions:p(O)})});if(e.ok)q.success(`${p(D)} can now sign in via ${o.data.provider.name}`),T(D,``),T(O,[],!0),T(v,!1),await P();else{let t=await e.json().catch(()=>({error:`Unknown error`}));q.error(t.message||t.error||`Failed to create user`)}}catch{q.error(`Failed to create user`)}finally{T(F,!1)}}async function Me(e,t){T(V,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)q.success(`Permissions updated`),await P();else{let e=await n.json().catch(()=>({}));q.error(e.message||e.error||`Failed to update permissions`),await P()}}catch{q.error(`Failed to update permissions`)}finally{T(V,null)}}async function Ne(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.`)){T(B,e,!0);try{let n=await fetch(`/api/admin/users/${e}/disable`,{method:`POST`});if(n.ok)q.success(`User "${t}" disabled`),await P();else{let e=await n.json().catch(()=>({}));q.error(e.message||e.error||`Failed to disable user`)}}catch{q.error(`Failed to disable user`)}finally{T(B,null)}}}async function Pe(e,t){if(confirm(`Delete user "${t}"? This cannot be undone.`)){T(L,e,!0);try{let n=await fetch(`/api/admin/users/${e}`,{method:`DELETE`});if(n.ok)q.success(`User "${t}" deleted`),await P();else{let e=await n.json().catch(()=>({}));q.error(e.message||e.error||`Failed to delete user`)}}catch{q.error(`Failed to delete user`)}finally{T(L,null)}}}var Fe=Oe();r(`1p497kv`,e=>{E(()=>{k.title=`Admin · Users`})});var Ie=w(Fe);{let e=e=>{var n=t(),r=A(n),s=e=>{var n=t(),r=A(n),s=e=>{{let t=M(()=>p(v)?`outline`:`default`);I(e,{onclick:()=>T(v,!p(v)),get variant(){return p(t)},children:(e,t)=>{var n=he(),r=A(n);U(r,{class:`mr-2 h-4 w-4`}),a(),N(e,n)},$$slots:{default:!0}})}},c=e=>{I(e,{href:`/team/members`,variant:`outline`,children:(e,t)=>{var n=ge(),r=A(n);ne(r,{class:`mr-2 h-4 w-4`}),a(),N(e,n)},$$slots:{default:!0}})};i(r,e=>{o.data.provider.userCreation===`email-only`?e(s):e(c,-1)}),N(e,n)};i(r,e=>{o.data.users!==null&&e(s)}),N(e,n)},n=M(()=>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. Org roles live in Members & roles.`);ie(Ie,{eyebrow:`Admin`,title:`Users`,get description(){return p(n)},actions:e,$$slots:{actions:!0}})}var Le=g(Ie,2);S(Le,()=>oe,(e,n)=>{n(e,{children:(e,n)=>{var r=t(),h=A(r);S(h,()=>se,(e,t)=>{t(e,{class:`space-y-4 pt-6`,children:(e,t)=>{var n=De(),r=A(n),h=e=>{var t=be(),n=g(w(t),2);ae(n,{type:`email`,placeholder:`Email`,get value(){return p(D)},set value(e){T(D,e,!0)}});var r=g(n,2),h=w(r);s(r);var _=g(r,2),y=e=>{var t=ve(),n=g(w(t),4);u(n,20,()=>p(d),e=>e,(e,t)=>{var n=_e(),r=w(n);b(r);var i=g(r);s(n),x(e=>{m(r,e),l(i,` ${R[t]??``}`)},[()=>p(O).includes(t)]),c(`change`,r,e=>Ae(t,e.target.checked)),N(e,n)}),s(n),s(t),N(e,t)},S=e=>{var t=ye();N(e,t)};i(_,e=>{o.data.isPlatformAdmin?e(y):e(S,-1)});var C=g(_,2),E=w(C);{let e=M(()=>p(F)||!p(D));I(E,{onclick:je,get disabled(){return p(e)},children:(e,t)=>{a();var n=f();x(()=>l(n,p(F)?`Adding…`:`Allowlist user`)),N(e,n)},$$slots:{default:!0}})}var k=g(E,2);I(k,{variant:`outline`,onclick:()=>T(v,!1),children:(e,t)=>{a();var n=f(`Cancel`);N(e,n)},$$slots:{default:!0}}),s(C),s(t),x(()=>l(h,`This user will authenticate via ${o.data.provider.name??``}. No password is stored.`)),N(e,t)};i(r,e=>{p(v)&&e(h)});var _=g(r,2),y=e=>{K(e,{get icon(){return W},title:`User store unavailable`,body:e=>{a();var t=xe();a(4),N(e,t)},$$slots:{body:!0}})},S=e=>{K(e,{title:`No users yet`,description:`Add your first user above.`})},C=e=>{var t=Ee(),n=A(t),r=w(n),c=w(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=g(c,2);ae(f,{type:`search`,placeholder:`Search name, email, or ID`,class:`pl-9`,get value(){return p(G)},set value(e){T(G,e,!0)}}),s(r);var m=g(r,2),h=w(m);h.value=h.__value=`all`;var _=g(h);u(_,16,()=>z,e=>e,(e,t)=>{var n=Se(),r=w(n,!0);s(n);var i={};x(()=>{l(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),N(e,n)}),s(m);var v=g(m,2),y=w(v);y.value=y.__value=`all`;var b=g(y);u(b,16,()=>p(d),e=>e,(e,t)=>{var n=Se(),r=w(n,!0);s(n);var i={};x(()=>{l(r,R[t]),i!==(i=t)&&(n.value=(n.__value=t)??``)}),N(e,n)}),s(v);var S=g(v,2),C=w(S);C.value=C.__value=`all`;var E=g(C);E.value=E.__value=`enabled`;var D=g(E);D.value=D.__value=`disabled`;var O=g(D);O.value=O.__value=`never-signed-in`,s(S);var k=g(S,2),P=e=>{I(e,{variant:`ghost`,size:`sm`,onclick:pe,children:(e,t)=>{var n=Ce(),r=A(n);re(r,{class:`mr-1.5 h-3.5 w-3.5`}),a(),N(e,n)},$$slots:{default:!0}})};i(k,e=>{p(Z)&&e(P)}),s(n);var F=g(n,2),U=e=>{var t=we(),n=w(t);s(t),x(()=>l(n,`${p(Q).length??``} of ${o.data.users.length??``} users match`)),N(e,t)};i(F,e=>{p(Z)&&e(U)});var W=g(F,2),ne=e=>{K(e,{title:`No matching users`,description:`Adjust or clear the filters above.`})},ie=e=>{var t=Te(),n=A(t);u(n,21,()=>p(fe),e=>e.id,(e,t)=>{{let n=M(()=>p(H)===p(t).id),r=M(()=>ke(p(t))),i=M(()=>p(V)===p(t).id),a=M(()=>p(L)===p(t).id),s=M(()=>p(B)===p(t).id);me(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:()=>T(H,p(H)===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 Me(p(t).id,r)},onDelete:()=>Pe(p(t).id,p(t).email??p(t).id),onDisable:()=>Ne(p(t).id,p(t).email??p(t).id)})}}),s(n);var r=g(n,2);ee(r,{get total(){return p(Q).length},perPage:25,label:`users`,get page(){return p($)},set page(e){T($,e,!0)}}),N(e,t)};i(W,e=>{p(Q).length===0?e(ne):e(ie,-1)}),j(m,()=>p(J),e=>T(J,e)),j(v,()=>p(Y),e=>T(Y,e)),j(S,()=>p(X),e=>T(X,e)),N(e,t)};i(_,e=>{o.data.users===null?e(y):o.data.users.length===0?e(S,1):e(C,-1)}),N(e,n)},$$slots:{default:!0}})}),N(e,r)},$$slots:{default:!0}})}),s(Fe),N(n,Fe),C()}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/CaPGMcGG.js";import"../chunks/xihTtKlq.js";import{t as h}from"../chunks/BSAg7Tp9.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/CaPGMcGG.js";import"../chunks/xihTtKlq.js";import{t as h}from"../chunks/BSAg7Tp9.js";import{t as g}from"../chunks/DbXFnuqY.js";import{n as _,t as v}from"../chunks/azI_l3bK2.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/CaPGMcGG.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/CaPGMcGG.js";import{f as y}from"../chunks/DkNoNSlE.js";import"../chunks/xihTtKlq.js";import{t as b}from"../chunks/CBitrApi.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/CaPGMcGG.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/Cjx_JJfF.js";import{t as d}from"../chunks/CN3KYLH5.js";import{t as f}from"../chunks/kjQmmFm7.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/CaPGMcGG.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/Cjx_JJfF.js";import{t as d}from"../chunks/CN3KYLH5.js";import{t as f}from"../chunks/kjQmmFm7.js";import{t as p}from"../chunks/CtflU-Cj.js";import{t as m}from"../chunks/BC4Rq9lo.js";import{t as h}from"../chunks/IhW8M1WT.js";import{t as g}from"../chunks/DFMaom1y.js";import{t as _}from"../chunks/E3mmm22F.js";import{t as v}from"../chunks/DKpM_Msv.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/CaPGMcGG.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/CaPGMcGG.js";import{i as O,r as k}from"../chunks/DkNoNSlE.js";import"../chunks/xihTtKlq.js";import{n as A}from"../chunks/BHJluY8_.js";import{t as j}from"../chunks/CF4pe2Bw.js";import{t as M}from"../chunks/CtflU-Cj.js";import{n as N,t as ee}from"../chunks/BHUmplNG.js";import{t as P}from"../chunks/CpUHMI2m.js";import{t as F}from"../chunks/D3q2NY-v.js";import{t as I}from"../chunks/CBitrApi.js";import{t as te}from"../chunks/CdpwgFYV.js";import{t as L}from"../chunks/D-XQc9b_.js";import{n as R}from"../chunks/BSPU_62Z2.js";import"../chunks/CHNbIR4A2.js";import{a as z,o as B,t as ne}from"../chunks/BnnAv3Xn2.js";import{t as re}from"../chunks/BCidrmpi2.js";var V=new Set([`$$slots`,`$$events`,`$$legacy`]);function ie(e,t){let n=x(t,V),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 H=d(`<button type="button"><!></button>`);function U(t,r){e(r,!0);let i=p(r,`busy`,3,!1),a=p(r,`variant`,3,`overlay`);var c=H(),l=y(c);{let e=E(()=>r.starred?`fill-current`:``);P(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 W=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>`),G=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>`),K=d(`<p class="text-muted-foreground truncate text-[12px]"> </p>`),q=d(`<span class="bg-muted text-muted-foreground rounded px-1.5 py-px font-mono text-[10.5px]"> </span>`),J=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>`),Y=d(`<div class="border-border bg-card overflow-hidden rounded-xl border"></div>`);function ae(i,a){e(a,!0);var d=Y();l(d,23,()=>a.records,e=>e.guid,(e,i,d)=>{var p=J();u(p,`grid-template-columns: 40px minmax(0, 1.7fr) minmax(0, 1fr) 90px 36px`);var g=y(p),v=e=>{var t=W(),n=y(t);o(t),_(()=>h(n,`src`,f(i).coverImage)),D(e,t)},b=e=>{let t=E(()=>z(f(i).guid));var n=G();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)},[()=>B(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=K(),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=q(),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 N=m(k,2),ee=y(N,!0);o(N);var P=m(N,2),F=y(P);{let e=E(()=>a.starredIds.has(f(i).guid)),t=E(()=>a.starBusyGuid===f(i).guid);U(F,{get starred(){return f(e)},get busy(){return f(t)},variant:`chip`,onToggle:()=>a.onToggleStar(f(i).guid)})}var I=m(F,2);j(I,{class:`text-muted-foreground h-3.5 w-3.5 opacity-0 transition-opacity group-hover:opacity-100`}),o(P),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`]);var oe=d(`<span class="bg-primary text-primary-foreground rounded-full px-1.5 py-px font-mono text-[10px]"> </span>`),se=d(`<button type="button"><!> Filters <!></button>`),ce=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>`),X=d(`<option> </option>`),le=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>`),ue=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>`),de=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>`),fe=d(`<div class="border-border bg-card rounded-md border p-4"><div class="grid gap-4 sm:grid-cols-3"><!> <!> <!></div></div>`),pe=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>`),me=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>`),he=d(`<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"></div>`),ge=d(`<button class="text-muted-foreground hover:text-foreground text-xs underline underline-offset-2">Clear all filters</button>`),_e=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 Z(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),P=g(!1),z=E(()=>new Set(u.data.starredRecords.map(e=>e.guid))),B=E(()=>[...u.data.starredRecords,...u.data.records]),V=E(()=>new Set(f(B).map(e=>e.projectId))),H=E(()=>Object.values(u.data.projects).filter(e=>f(V).has(e.id))),U=E(()=>Array.from(new Set(f(B).map(e=>e.category).filter(e=>!!e))).sort()),W=E(()=>Array.from(new Set(f(B).flatMap(e=>e.tags??[]))).sort());function G(e){return u.data.projects[e]?.name??``}function K(e){return u.data.projectMap[e]?.visibility}function q(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 J=E(()=>f(B).filter(q)),Y=E(()=>[f(p),f(h),f(x)].filter(e=>e!==null).length),Z=E(()=>f(d).trim()!==``||f(Y)>0);function Q(e){b(w,e,!0),k(`/library/${e}`).catch(()=>{b(w,null)})}async function ve(e){b(A,e,!0);let t=f(z).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{R.error(t?`Failed to unstar`:`Failed to star`)}finally{b(A,null)}}function ye(){b(d,``),b(p,null),b(h,null),b(x,null),b(P,!1)}M(a,{children:(e,a)=>{I(e,{children:(e,a)=>{var g=_e(),v=y(g);{let e=e=>{ee(e,{get mode(){return f(S)},onChange:e=>b(S,e,!0)})},t=E(()=>`${f(J).length} tool${f(J).length===1?``:`s`}${f(H).length>0?` across ${f(H).length} project${f(H).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);N(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 I=m(k,2),R=e=>{var t=se(),i=y(t);ie(i,{class:`h-3.5 w-3.5`});var a=m(i,2),l=e=>{var t=oe(),n=y(t,!0);o(t),_(()=>c(n,f(Y))),D(e,t)};r(a,e=>{f(Y)>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(P)||f(Y)>0?`border-border bg-accent text-accent-foreground`:`border-input bg-background text-foreground hover:bg-muted/40`}`)),s(`click`,t,()=>b(P,!f(P))),D(e,t)};r(I,e=>{(f(U).length>0||f(W).length>0||f(H).length>1)&&e(R)});var B=m(I,2),V=e=>{var t=ce(),n=y(t);F(n,{class:`h-3 w-3`}),i(),o(t),s(`click`,t,ye),D(e,t)};r(B,e=>{f(Z)&&e(V)}),o(O);var q=m(O,2),be=e=>{var t=fe(),n=y(t),i=y(n),a=e=>{var t=le(),n=m(y(t),2),r=y(n);r.value=(r.__value=null,``);var i=m(r);l(i,17,()=>f(H),e=>e.id,(e,t)=>{var n=X(),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(H).length>1&&e(a)});var s=m(i,2),u=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(U),e=>e,(e,t)=>{var n=X(),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(U).length>0&&e(u)});var d=m(s,2),g=e=>{var t=de(),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=X(),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(W).length>0&&e(g)}),o(n),o(t),D(e,t)};r(q,e=>{f(P)&&e(be)});var $=m(q,2),xe=e=>{var t=me(),r=m(y(t),2);l(r,23,()=>u.data.recentRuns.slice(0,5),e=>e.runId,(e,t,r)=>{var i=pe(),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`:``}`,()=>re(f(t).timestamp)]),s(`click`,i,()=>Q(f(t).definitionId)),D(e,i)}),o(r),o(t),D(e,t)};r($,e=>{u.data.recentRuns.length>0&&!f(Z)&&e(xe)});var Se=m($,2),Ce=e=>{var n=t(),i=C(n),a=e=>{var t=he();l(t,21,()=>f(J),e=>e.guid,(e,t)=>{{let n=E(()=>f(z).has(f(t).guid)),r=E(()=>f(w)===f(t).guid),i=E(()=>f(A)===f(t).guid),a=E(()=>f(H).length>1?G(f(t).projectId):void 0),o=E(()=>f(H).length>1?K(f(t).projectId):void 0);ne(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=>Q(e.guid),onToggleStar:ve})}}),o(t),D(e,t)},s=e=>{ae(e,{get records(){return f(J)},get starredIds(){return f(z)},get loadingGuid(){return f(w)},get starBusyGuid(){return f(A)},onOpen:Q,onToggleStar:ve})};r(i,e=>{f(S)===`grid`?e(a):e(s,-1)}),D(e,n)},we=e=>{L(e,{size:`lg`,title:`No tools match your filters`,actions:e=>{var t=ge();s(`click`,t,ye),D(e,t)},$$slots:{actions:!0}})},Te=e=>{L(e,{size:`lg`,title:`No tools available yet`,description:`Ask an admin to publish a Grasshopper definition.`})};r(Se,e=>{f(J).length>0?e(Ce):f(Z)?e(we,1):e(Te,-1)}),o(g),D(e,g)},$$slots:{default:!0}})},$$slots:{default:!0}}),v()}a([`click`]);export{Z as component};
|
|
Binary file
|
|
Binary file
|