@edge-base/server 0.2.5 → 0.2.7
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/admin-build/_app/immutable/chunks/{DILS_-VJ.js → B3CvhH3c.js} +1 -1
- package/admin-build/_app/immutable/chunks/BDYewzou.js +1 -0
- package/admin-build/_app/immutable/chunks/{Cdm5zBRA.js → BEM1BeVF.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Dt4vL4Df.js → BYL_uBga.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B94PilAN.js → BYyykAbh.js} +1 -1
- package/admin-build/_app/immutable/chunks/BaUG2TJ-.js +1 -0
- package/admin-build/_app/immutable/chunks/{C72lTcG0.js → Bcs4KYNp.js} +1 -1
- package/admin-build/_app/immutable/chunks/{D2j3I1VQ.js → BfpUQYr3.js} +1 -1
- package/admin-build/_app/immutable/chunks/BhCO1Fpt.js +1 -0
- package/admin-build/_app/immutable/chunks/{B8s_s9QY.js → BkZCgsc3.js} +1 -1
- package/admin-build/_app/immutable/chunks/CIOC1v_q.js +128 -0
- package/admin-build/_app/immutable/chunks/CjcrXziO.js +2 -0
- package/admin-build/_app/immutable/chunks/CvczjTXx.js +1 -0
- package/admin-build/_app/immutable/chunks/D1u3u7xu.js +1 -0
- package/admin-build/_app/immutable/chunks/{B0HRJ657.js → DOOPbWwG.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BqTb6Mxk.js → DaXO-sFP.js} +1 -1
- package/admin-build/_app/immutable/chunks/DnpbvAPi.js +1 -0
- package/admin-build/_app/immutable/chunks/{B6MschND.js → Dz9cUCuv.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CaVKAiCe.js → Tea2dBJ8.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Z41NK6i6.js → bguI1TeA.js} +1 -1
- package/admin-build/_app/immutable/chunks/{J2Gw0SMu.js → ejoEf2I5.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B2TnDKF7.js → iEyeblJR.js} +1 -1
- package/admin-build/_app/immutable/chunks/{_teD5ji5.js → nlAMTi52.js} +1 -1
- package/admin-build/_app/immutable/chunks/qKdzaeX3.js +1 -0
- package/admin-build/_app/immutable/entry/{app.D3flihMw.js → app.DoUaxnew.js} +2 -2
- package/admin-build/_app/immutable/entry/start.MmZh8oBH.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.CdczqZLK.js → 0.Dsxi8s7i.js} +1 -1
- package/admin-build/_app/immutable/nodes/1.Cp2l-hol.js +1 -0
- package/admin-build/_app/immutable/nodes/10.4oY6m8Nz.js +1 -0
- package/admin-build/_app/immutable/nodes/11.DfcozD4J.js +1 -0
- package/admin-build/_app/immutable/nodes/12.uJgZdCIA.js +1 -0
- package/admin-build/_app/immutable/nodes/13.CaN1kRev.js +110 -0
- package/admin-build/_app/immutable/nodes/14.DQ5xIi3s.js +3 -0
- package/admin-build/_app/immutable/nodes/15.B_EkebTJ.js +1 -0
- package/admin-build/_app/immutable/nodes/{16.BR7WwQrS.js → 16.Tko1ZX8-.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.Cm57KKXV.js → 17.BCmWMJX9.js} +1 -1
- package/admin-build/_app/immutable/nodes/18.hmGhl1O2.js +1 -0
- package/admin-build/_app/immutable/nodes/19.D-1infOo.js +2 -0
- package/admin-build/_app/immutable/nodes/{20.DnHeFlTv.js → 20.CY4KKcBL.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.B9lbNUQr.js +1 -0
- package/admin-build/_app/immutable/nodes/22.14Vd7bnt.js +1 -0
- package/admin-build/_app/immutable/nodes/{23.CWSGMcKJ.js → 23.Be6jK77o.js} +2 -2
- package/admin-build/_app/immutable/nodes/24.CSTFkr6R.js +2 -0
- package/admin-build/_app/immutable/nodes/25.DRTg8fHc.js +2 -0
- package/admin-build/_app/immutable/nodes/26.DKt-9lwQ.js +1 -0
- package/admin-build/_app/immutable/nodes/27.D5caPu0F.js +1 -0
- package/admin-build/_app/immutable/nodes/28.hJhlnlyY.js +1 -0
- package/admin-build/_app/immutable/nodes/29.CDYBzFyT.js +1 -0
- package/admin-build/_app/immutable/nodes/{3.B6q-7qr8.js → 3.DMyKwkGn.js} +1 -1
- package/admin-build/_app/immutable/nodes/30.BaHNeEmc.js +1 -0
- package/admin-build/_app/immutable/nodes/31.C6PV5L-2.js +1 -0
- package/admin-build/_app/immutable/nodes/4.9E118Ftm.js +1 -0
- package/admin-build/_app/immutable/nodes/5.D8guAl3v.js +1 -0
- package/admin-build/_app/immutable/nodes/6.D1u__DtT.js +1 -0
- package/admin-build/_app/immutable/nodes/7.DWXHnRFf.js +1 -0
- package/admin-build/_app/immutable/nodes/8.Dojd8krc.js +1 -0
- package/admin-build/_app/immutable/nodes/9.CLtrr0K_.js +1 -0
- package/admin-build/_app/version.json +1 -1
- package/admin-build/index.html +7 -7
- package/openapi.json +6 -1941
- package/package.json +3 -3
- package/src/__tests__/openapi-coverage.test.ts +0 -6
- package/src/__tests__/push-handlers.test.ts +1 -1
- package/src/__tests__/room-auth-state-loss.test.ts +6 -0
- package/src/__tests__/room-handler-context.test.ts +0 -31
- package/src/__tests__/room-rate-limit-scopes.test.ts +1 -5
- package/src/__tests__/room-runtime-routing.test.ts +24 -111
- package/src/__tests__/route-parser.test.ts +6 -0
- package/src/__tests__/schema.test.ts +15 -6
- package/src/__tests__/smoke-skip-report.test.ts +1 -1
- package/src/durable-objects/database-do.ts +7 -1
- package/src/durable-objects/room-runtime-base.ts +290 -57
- package/src/durable-objects/rooms-do.ts +212 -1336
- package/src/index.ts +23 -9
- package/src/lib/d1-handler.ts +32 -17
- package/src/lib/openapi.ts +1 -4
- package/src/lib/postgres-handler.ts +24 -12
- package/src/lib/route-parser.ts +3 -0
- package/src/lib/schemas.ts +12 -2
- package/src/middleware/captcha-verify.ts +16 -3
- package/src/middleware/error-handler.ts +1 -1
- package/src/middleware/rules.ts +28 -9
- package/src/routes/admin-auth.ts +3 -3
- package/src/routes/admin.ts +13 -8
- package/src/routes/analytics-api.ts +3 -3
- package/src/routes/auth.ts +1 -1
- package/src/routes/backup.ts +1 -1
- package/src/routes/d1.ts +14 -7
- package/src/routes/database-live.ts +13 -6
- package/src/routes/kv.ts +21 -10
- package/src/routes/oauth.ts +1 -1
- package/src/routes/push.ts +119 -77
- package/src/routes/room.ts +203 -280
- package/src/routes/schema-endpoint.ts +2 -2
- package/src/routes/sql.ts +10 -6
- package/src/routes/storage.ts +4 -2
- package/src/routes/vectorize.ts +16 -4
- package/src/types.ts +1 -14
- package/admin-build/_app/immutable/chunks/6oMK_164.js +0 -1
- package/admin-build/_app/immutable/chunks/BEW7Ez_g.js +0 -1
- package/admin-build/_app/immutable/chunks/BoOooyH6.js +0 -1
- package/admin-build/_app/immutable/chunks/BvHnF5tV.js +0 -1
- package/admin-build/_app/immutable/chunks/CoI6jjbg.js +0 -2
- package/admin-build/_app/immutable/chunks/CrOZMmdF.js +0 -1
- package/admin-build/_app/immutable/chunks/Cw6OYcq-.js +0 -1
- package/admin-build/_app/immutable/chunks/DPdQ7z0T.js +0 -128
- package/admin-build/_app/immutable/chunks/pUxw8jfq.js +0 -1
- package/admin-build/_app/immutable/entry/start.Cl6sLxnz.js +0 -1
- package/admin-build/_app/immutable/nodes/1.DxcSsEqS.js +0 -1
- package/admin-build/_app/immutable/nodes/10.DuAd4aIm.js +0 -1
- package/admin-build/_app/immutable/nodes/11.0jgHQL92.js +0 -1
- package/admin-build/_app/immutable/nodes/12.CKNPqmyy.js +0 -1
- package/admin-build/_app/immutable/nodes/13.B1p2POXS.js +0 -110
- package/admin-build/_app/immutable/nodes/14.Bb-REBND.js +0 -3
- package/admin-build/_app/immutable/nodes/15.1uBFCX0X.js +0 -1
- package/admin-build/_app/immutable/nodes/18.CoiwfAuQ.js +0 -1
- package/admin-build/_app/immutable/nodes/19.B8ZdLlXj.js +0 -2
- package/admin-build/_app/immutable/nodes/21.CJFaf0Ia.js +0 -1
- package/admin-build/_app/immutable/nodes/22.CItETFzy.js +0 -1
- package/admin-build/_app/immutable/nodes/24.CWbEqNMB.js +0 -2
- package/admin-build/_app/immutable/nodes/25.DRkLEhKi.js +0 -2
- package/admin-build/_app/immutable/nodes/26.BRxO8AYH.js +0 -1
- package/admin-build/_app/immutable/nodes/27.BLs-nVHz.js +0 -1
- package/admin-build/_app/immutable/nodes/28.G79qkdBK.js +0 -1
- package/admin-build/_app/immutable/nodes/29.BOcI6g0N.js +0 -1
- package/admin-build/_app/immutable/nodes/30.DAIC7dKd.js +0 -1
- package/admin-build/_app/immutable/nodes/31.pl0XXjXF.js +0 -1
- package/admin-build/_app/immutable/nodes/4.DOdvVlZj.js +0 -1
- package/admin-build/_app/immutable/nodes/5.BW_zlgye.js +0 -1
- package/admin-build/_app/immutable/nodes/6.Dxy1CAI2.js +0 -1
- package/admin-build/_app/immutable/nodes/7.BG98w_o7.js +0 -1
- package/admin-build/_app/immutable/nodes/8.DoG5R2rG.js +0 -1
- package/admin-build/_app/immutable/nodes/9.Dmxf6zAC.js +0 -1
- package/src/__tests__/cloudflare-realtime.test.ts +0 -113
- package/src/lib/cloudflare-realtime.ts +0 -251
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./6oMK_164.js","./CWj6FrbW.js","./BdTBlfLy.js","./DtZk82gG.js","./DEELgv7K.js","./Y22E1hJM.js","./Bb0e0sAP.js","./BEW7Ez_g.js","./Bn2NtlTj.js","./BoOooyH6.js","./Cw6OYcq-.js","./CaVKAiCe.js","./CoI6jjbg.js","./Cp8V0Xy2.js","./C72lTcG0.js","./XmteHKH_.js","./F9_4wRrd.js","../assets/Button.DpzMRTjK.css","./lSpxLU5p.js","./CGgVJi7f.js","./gtu8uwJD.js","../assets/SqlEditor.Bbp1RIk0.css","./BvHnF5tV.js","../assets/TableSqlTab.yeNZfhgG.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as lr,c as or}from"./B2bEC_Hm.js";import"./CWj6FrbW.js";import{h as Ia,e as ir,bh as dr,x as vr,bi as Ma,A as cr,n as ur,B as fr,D as Oa,I as pr,aw as ja,aO as _r,bj as br,bk as gr,aK as mr,aD as Ba,bf as hr,a7 as Ka,bl as yr,p as la,M as lt,w as yt,g as e,at as $a,f as Ke,a as oa,d as y,s as o,c as r,r as a,t as g,ag as Ra,b as t,u as A,J as wr,ae as He,af as kr}from"./BdTBlfLy.js";import{d as ca,e as na,s as N,a as ee}from"./DtZk82gG.js";import{c as Kt,a as s,f as d,t as je}from"./DEELgv7K.js";import{B as xr}from"./Bb0e0sAP.js";import{i as E}from"./Y22E1hJM.js";import{e as $e,i as jt,t as ot,b as xt,A as Sr,a as pt}from"./BEW7Ez_g.js";import{a as xe,s as It,b as va,r as Ft,c as Ja,e as Ea,i as Cr,h as Nr}from"./CoI6jjbg.js";import{b as $t,a as Fa}from"./CYatlt7w.js";import{a as ma,s as Da}from"./Cp8V0Xy2.js";import{g as Aa}from"./CrOZMmdF.js";import{p as Ir}from"./B6MschND.js";import{b as za}from"./Cw6OYcq-.js";import{M as er}from"./Dt4vL4Df.js";import{B as ut}from"./C72lTcG0.js";import{s as Bt,b as Er,c as Sa,d as Va}from"./BvHnF5tV.js";import{d as Ha}from"./wJsUhbfZ.js";import{A as Wa,S as zr,C as Rr}from"./Cdm5zBRA.js";import{b as qa}from"./CGgVJi7f.js";import{p as ht}from"./F9_4wRrd.js";import{g as Dr,p as Ga}from"./Ce-ngf4p.js";import{d as tr}from"./CaVKAiCe.js";import{T as Tr}from"./B2TnDKF7.js";import{C as Ya}from"./DILS_-VJ.js";import{I as Pr}from"./_teD5ji5.js";import{T as Or}from"./Z41NK6i6.js";import{e as jr}from"./Q2nPFxS6.js";const Qa=0,La=1;function Fr(_e,l,Z,U,ae){Ia&&ir();var z=dr(),D=hr,V=z?Ba(D):Ka(D,!1,!1),X=z?Ba(D):Ka(D,!1,!1),J=new xr(_e);vr(()=>{var re=l(),H=!1;let T=Ia&&Ma(re)===(_e.data===cr);if(T&&(ur(fr()),Oa(!1)),Ma(re)){var be=yr(),M=!1;const de=x=>{if(!H){M=!0,be(!1),_r.ensure(),Ia&&Oa(!1);try{x()}finally{br(),gr||mr()}}};re.then(x=>{de(()=>{ja(V,x),J.ensure(La,U&&(Y=>U(Y,V)))})},x=>{de(()=>{if(ja(X,x),J.ensure(La,ae&&(Y=>ae(Y,X))),!ae)throw X.v})}),Ia?J.ensure(Qa,Z):pr(()=>{M||de(()=>{J.ensure(Qa,Z)})})}else ja(V,re),J.ensure(La,U&&(de=>U(de,V)));return T&&Oa(!0),()=>{H=!0}})}const Lr=/^[A-Za-z0-9_-]+$/,Ar="Record ID must use English letters, numbers, hyphen (-), or underscore (_).";function qr(_e){return _e?Lr.test(_e)?null:Ar:null}var Ur=d(`<div class="crp-note svelte-sxc7i5">Leave <strong>Record ID</strong> blank to let EdgeBase generate <code>id</code>, <code>createdAt</code>,
|
|
3
|
-
and <code>updatedAt</code> automatically.</div>`),Mr=d('<div class="crp-note svelte-sxc7i5">This table does not expose any manual fields. EdgeBase will create the row with auto-managed values only.</div>'),Br=d("<select><option>Unset</option><option>true</option><option>false</option></select>"),Kr=d("<option> </option>"),Jr=d("<select><option>Select value</option><!></select>"),Vr=d('<textarea rows="6"></textarea>'),Hr=d("<input/>"),Wr=d(`<p class="crp-helper svelte-sxc7i5">Optional. Leave blank to auto-generate. Custom IDs may only use English letters, numbers,
|
|
4
|
-
hyphen (-), or underscore (_).</p>`),Gr=d('<p class="crp-error svelte-sxc7i5"> </p>'),Yr=d('<div class="crp-field svelte-sxc7i5"><div class="crp-field__header svelte-sxc7i5"><label class="crp-field__name svelte-sxc7i5"> </label> <span class="crp-field__type svelte-sxc7i5"> </span></div> <!> <!> <!></div>'),Qr=d('<span class="crp-spinner svelte-sxc7i5"></span>'),Zr=d('<button type="button" class="crp-overlay svelte-sxc7i5" aria-label="Close create record panel"></button> <div class="crp svelte-sxc7i5" role="dialog" aria-modal="true" aria-labelledby="create-record-title"><div class="crp-header svelte-sxc7i5"><div><h3 id="create-record-title" class="crp-title svelte-sxc7i5">Create Record</h3> <p class="crp-subtitle svelte-sxc7i5"><!></p></div> <button type="button" class="crp-close svelte-sxc7i5" aria-label="Close create record panel">×</button></div> <form class="crp-body svelte-sxc7i5"><!> <!> <div class="crp-footer svelte-sxc7i5"><button type="button" class="crp-btn svelte-sxc7i5">Cancel</button> <button type="submit" class="crp-btn crp-btn--primary svelte-sxc7i5"><!></button></div></form></div>',1);function Xr(_e,l){la(l,!0);let Z=ht(l,"columns",19,()=>[]),U=ht(l,"values",31,()=>lt({})),ae=ht(l,"errors",31,()=>lt({})),z=ht(l,"saving",3,!1);const D=new Set(["createdAt","updatedAt"]);let V=y(null),X=A(()=>Z().find(C=>C.key==="id")??null),J=A(()=>Z().filter(C=>!D.has(C.key)&&C.key!=="id"&&C.editable!==!1)),re=A(()=>[...e(X)?[{...e(X),label:"Record ID",editable:!0}]:[],...e(J)]),H=A(()=>!!e(X)&&e(J).length===0),T=A(()=>e(re).length===0);yt(()=>{l.open&&requestAnimationFrame(()=>{var K;const C=(K=e(V))==null?void 0:K.querySelector("input, select, textarea");C==null||C.focus()})});function be(C){l.open&&C.key==="Escape"&&!z()&&l.onClose()}function M(C){return C.type==="number"?"number":C.type==="datetime"?"datetime-local":"text"}function de(C){return C.key==="id"?"Leave blank to auto-generate":C.type==="json"?'{ "key": "value" }':C.type==="number"?"0":C.label}function x(C){return`create-row-${C}`}function Y(C){if(!ae()[C])return;const K={...ae()};delete K[C],ae(K)}var se=Kt();na("keydown",$a,be);var oe=Ke(se);{var ce=C=>{var K=Zr(),w=Ke(K),h=o(w,2),W=r(h),ve=r(W),_=o(r(ve),2),S=r(_);{var ue=b=>{var I=je("This table only uses auto-managed fields. Creating a row will generate the record automatically.");s(b,I)},Ie=b=>{var I=je("This table only uses auto-managed fields. You can optionally set a custom record ID.");s(b,I)},fe=b=>{var I=je("Fill in the fields for the new row. Record ID is optional.");s(b,I)};E(S,b=>{e(T)?b(ue):e(H)?b(Ie,1):b(fe,!1)})}a(_),a(ve);var Je=o(ve,2);a(W);var te=o(W,2),G=r(te);{var Se=b=>{var I=Ur();s(b,I)},We=b=>{var I=Mr();s(b,I)};E(G,b=>{e(H)?b(Se):e(T)&&b(We,1)})}var Pe=o(G,2);$e(Pe,17,()=>e(re),b=>b.key,(b,I)=>{var Oe=Yr(),tt=r(Oe),u=r(tt),P=r(u,!0);a(u);var ne=o(u,2),Te=r(ne,!0);a(ne),a(tt);var mt=o(tt,2);{var Et=we=>{var v=Br();let f;var O=r(v);O.value=O.__value="";var k=o(O);k.value=k.__value="true";var R=o(k);R.value=R.__value="false",a(v),g((L,j)=>{xe(v,"id",L),f=It(v,1,"crp-input svelte-sxc7i5",null,f,j),v.disabled=z()},[()=>x(e(I).key),()=>({"crp-input--error":!!ae()[e(I).key]})]),ee("change",v,()=>Y(e(I).key)),va(v,()=>U()[e(I).key],L=>U(U()[e(I).key]=L,!0)),s(we,v)},St=we=>{var v=Jr();let f;var O=r(v);O.value=O.__value="";var k=o(O);$e(k,17,()=>e(I).enumValues,jt,(R,L)=>{var j=Kr(),Q=r(j,!0);a(j);var ie={};g(()=>{N(Q,e(L)),ie!==(ie=e(L))&&(j.value=(j.__value=e(L))??"")}),s(R,j)}),a(v),g((R,L)=>{xe(v,"id",R),f=It(v,1,"crp-input svelte-sxc7i5",null,f,L),v.disabled=z()},[()=>x(e(I).key),()=>({"crp-input--error":!!ae()[e(I).key]})]),ee("change",v,()=>Y(e(I).key)),va(v,()=>U()[e(I).key],R=>U(U()[e(I).key]=R,!0)),s(we,v)},Gt=we=>{var v=Vr();Ra(v);let f;g((O,k,R)=>{xe(v,"id",O),f=It(v,1,"crp-input crp-input--textarea svelte-sxc7i5",null,f,k),xe(v,"placeholder",R),v.disabled=z()},[()=>x(e(I).key),()=>({"crp-input--error":!!ae()[e(I).key]}),()=>de(e(I))]),ee("input",v,()=>Y(e(I).key)),$t(v,()=>U()[e(I).key],O=>U(U()[e(I).key]=O,!0)),s(we,v)},Jt=we=>{var v=Hr();Ft(v);let f;g((O,k,R,L)=>{xe(v,"id",O),f=It(v,1,"crp-input svelte-sxc7i5",null,f,k),xe(v,"type",R),xe(v,"placeholder",L),v.disabled=z()},[()=>x(e(I).key),()=>({"crp-input--error":!!ae()[e(I).key]}),()=>M(e(I)),()=>de(e(I))]),ee("input",v,()=>Y(e(I).key)),$t(v,()=>U()[e(I).key],O=>U(U()[e(I).key]=O,!0)),s(we,v)};E(mt,we=>{e(I).type==="boolean"?we(Et):e(I).type==="enum"&&e(I).enumValues?we(St,1):e(I).type==="json"?we(Gt,2):we(Jt,!1)})}var Qe=o(mt,2);{var Ce=we=>{var v=Wr();s(we,v)};E(Qe,we=>{e(I).key==="id"&&we(Ce)})}var at=o(Qe,2);{var Ze=we=>{var v=Gr(),f=r(v,!0);a(v),g(()=>N(f,ae()[e(I).key])),s(we,v)};E(at,we=>{ae()[e(I).key]&&we(Ze)})}a(Oe),g(we=>{xe(u,"for",we),N(P,e(I).label),N(Te,e(I).type)},[()=>x(e(I).key)]),s(b,Oe)});var it=o(Pe,2),et=r(it),Me=o(et,2),dt=r(Me);{var gt=b=>{var I=Qr();s(b,I)},ge=b=>{var I=je();g(()=>N(I,e(T)?"Create Empty Row":"Create Row")),s(b,I)};E(dt,b=>{z()?b(gt):b(ge,!1)})}a(Me),a(it),a(te),a(h),qa(h,b=>t(V,b),()=>e(V)),g(()=>{Je.disabled=z(),et.disabled=z(),Me.disabled=z()}),ee("click",w,()=>!z()&&l.onClose()),ee("click",Je,function(...b){var I;(I=l.onClose)==null||I.apply(this,b)}),na("submit",te,b=>{b.preventDefault(),l.onSubmit()}),ee("click",et,function(...b){var I;(I=l.onClose)==null||I.apply(this,b)}),s(C,K)};E(oe,C=>{l.open&&C(ce)})}s(_e,se),oa()}ca(["click","change","input"]);var $r=d('<button class="dg-btn svelte-45rfpz"> </button>'),es=d('<button class="dg-btn dg-btn--danger svelte-45rfpz"> </button> <!>',1),ts=d('<button class="dg-btn dg-btn--primary svelte-45rfpz">Save All Changes</button> <button class="dg-btn svelte-45rfpz">Revert All</button>',1),as=d('<label class="dg-col-picker__item svelte-45rfpz"><input type="checkbox" class="svelte-45rfpz"/> <span class="svelte-45rfpz"> </span></label>'),rs=d('<button type="button" class="dg-col-picker-backdrop svelte-45rfpz" aria-label="Close column picker"></button> <div class="dg-col-picker svelte-45rfpz" role="dialog" aria-modal="true" aria-label="Column picker"></div>',1),ss=d('<div class="dg-col-picker-wrap svelte-45rfpz"><button class="dg-btn svelte-45rfpz" aria-haspopup="dialog"> </button> <!></div>'),ns=d('<button class="dg-btn dg-btn--primary svelte-45rfpz">+ Add Row</button>'),ls=d('<div class="dg-toolbar svelte-45rfpz"><div class="dg-toolbar__left svelte-45rfpz"><!> <!></div> <div class="dg-toolbar__right svelte-45rfpz"><!> <!></div></div>'),os=d('<th class="dg-th dg-th--checkbox svelte-45rfpz" style="width:36px;"><input type="checkbox"/></th>'),is=d('<span class="dg-sort-icon svelte-45rfpz"> </span>'),ds=d('<button type="button" class="dg-resize-handle svelte-45rfpz" tabindex="-1"></button>'),vs=d('<th class="dg-th svelte-45rfpz"><div class="dg-th__inner svelte-45rfpz"><button class="dg-sort-btn svelte-45rfpz"> <!></button> <!></div></th>'),cs=d('<th class="dg-th dg-th--actions svelte-45rfpz" style="width:80px;">Actions</th>'),us=d('<tr><td class="dg-td dg-td--empty svelte-45rfpz"><div class="dg-loading svelte-45rfpz"><span class="dg-spinner svelte-45rfpz"></span> Loading...</div></td></tr>'),fs=d('<tr><td class="dg-td dg-td--empty svelte-45rfpz"> </td></tr>'),ps=d('<td class="dg-td dg-td--checkbox svelte-45rfpz"><input type="checkbox"/></td>'),_s=d('<select class="dg-cell-editor svelte-45rfpz"><option>null</option><option>true</option><option>false</option></select>'),bs=d("<option> </option>"),gs=d('<select class="dg-cell-editor svelte-45rfpz"><option>—</option><!></select>'),ms=d('<textarea class="dg-cell-editor dg-cell-editor--json svelte-45rfpz" rows="4"></textarea>'),hs=d('<input class="dg-cell-editor svelte-45rfpz"/>'),ys=d('<a class="dg-cell-link svelte-45rfpz" title="Navigate to related record"> </a>'),ws=d("<em>null</em>"),ks=d('<span class="dg-bool svelte-45rfpz"> </span>'),xs=d('<button type="button"><span><!></span></button>'),Ss=d("<td><!></td>"),Cs=d('<button class="dg-act-btn svelte-45rfpz" title="Duplicate"><svg width="14" height="14" viewBox="0 0 16 16" fill="none"><rect x="5" y="5" width="8" height="8" rx="1.5" stroke="currentColor" stroke-width="1.5"></rect><path d="M3 11V3.5C3 2.67 3.67 2 4.5 2H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></button>'),Ns=d('<button class="dg-act-btn svelte-45rfpz" title="Inspect"><svg width="14" height="14" viewBox="0 0 16 16" fill="none"><circle cx="7" cy="7" r="4.5" stroke="currentColor" stroke-width="1.5"></circle><path d="M10.5 10.5L14 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></button>'),Is=d('<span class="dg-spinner-sm svelte-45rfpz"></span>'),Es=d('<button class="dg-act-btn dg-act-btn--save svelte-45rfpz" title="Save"><!></button> <button class="dg-act-btn svelte-45rfpz" title="Revert">↩</button>',1),zs=d('<td class="dg-td dg-td--actions svelte-45rfpz"><!> <!> <!></td>'),Rs=d("<tr><!><!><!></tr>"),Ds=d('<select class="dg-page-size svelte-45rfpz"><option>20 / page</option><option>50 / page</option><option>100 / page</option><option>200 / page</option><option>500 / page</option></select>'),Ts=d('<div class="dg-footer__right svelte-45rfpz"><button class="dg-btn dg-btn--sm svelte-45rfpz">← Prev</button> <span class="dg-page-info svelte-45rfpz"> </span> <button class="dg-btn dg-btn--sm svelte-45rfpz">Next →</button></div>'),Ps=d('<div class="dg svelte-45rfpz" role="grid" tabindex="0"><!> <div class="dg-table-wrap svelte-45rfpz"><table class="dg-table svelte-45rfpz"><thead><tr><!><!><!></tr></thead><tbody><!></tbody></table></div> <div class="dg-footer svelte-45rfpz"><div class="dg-footer__left svelte-45rfpz"><span class="dg-count svelte-45rfpz"> </span> <!></div> <!></div></div> <!>',1);function Os(_e,l){la(l,!0);let Z=ht(l,"columns",19,()=>[]),U=ht(l,"rows",19,()=>[]),ae=ht(l,"loading",3,!1),z=ht(l,"readonly",3,!1),D=ht(l,"emptyMessage",3,"No data available."),V=ht(l,"totalCount",3,0),X=ht(l,"page",3,1),J=ht(l,"pageSize",3,20),re=ht(l,"tableName",3,""),H=y(lt(new Set)),T=y(lt(new Map)),be=y(lt(new Set)),M=y(null),de=y(null),x=y(""),Y=y(null),se=y("asc"),oe=y(lt(new Map)),ce=y(null),C=y(0),K=y(0),w=y(null),h=y(lt(new Set)),W=y(!1),ve=y(!1),_=y(lt({})),S=y(lt({})),ue=y(!1),Ie=A(()=>U().length>0&&U().every(n=>e(H).has(String(n.id)))),fe=A(()=>e(H).size>0),Je=A(()=>Math.max(1,Math.ceil(V()/J()))),te=A(()=>e(T).size>0),G=A(()=>Z().filter(n=>!e(h).has(n.key)));function Se(n,c){requestAnimationFrame(()=>{var B;const m=(B=e(w))==null?void 0:B.querySelector(`[data-row-id="${n}"][data-col-key="${c}"]`);m==null||m.focus()})}yt(()=>{!e(M)||e(de)||Se(e(M).rowId,e(M).colKey)}),yt(()=>{if(re())try{const n=localStorage.getItem(`edgebase_grid_columns_${re()}`);t(h,n?new Set(JSON.parse(n)):new Set,!0)}catch{t(h,new Set,!0)}});function We(n){const c=new Set(e(h));if(c.has(n)?c.delete(n):c.add(n),t(h,c,!0),re())try{localStorage.setItem(`edgebase_grid_columns_${re()}`,JSON.stringify([...c]))}catch{}}function Pe(n){return e(oe).get(n.key)??n.width??it(n)}function it(n){return n.type==="boolean"?80:n.type==="number"?120:n.type==="datetime"?180:n.type==="json"?200:160}function et(){e(Ie)?t(H,new Set,!0):t(H,new Set(U().map(n=>String(n.id))),!0)}function Me(n){const c=new Set(e(H));c.has(n)?c.delete(n):c.add(n),t(H,c,!0)}function dt(n){var c;e(Y)===n?t(se,e(se)==="asc"?"desc":"asc",!0):(t(Y,n,!0),t(se,"asc")),(c=l.onSort)==null||c.call(l,n,e(se))}function gt(n,c){const m=e(T).get(String(n.id));return m!=null&&m.has(c)?m.get(c):n[c]}function ge(n,c){if(n==null)return"";if(c.type==="boolean")return n?"true":"false";if(c.type==="json"&&typeof n=="object")return JSON.stringify(n);if(c.type==="datetime"&&typeof n=="string")try{return new Date(n).toLocaleString()}catch{return String(n)}return String(n)}function b(n){return n==null}function I(n,c){var m;return((m=e(T).get(n))==null?void 0:m.has(c))??!1}async function Oe(n){const c=n==null?"":typeof n=="object"?JSON.stringify(n):String(n);try{await navigator.clipboard.writeText(c),xt("Copied to clipboard")}catch{}}function tt(n,c,m){if(z())return;const B=Z().find(le=>le.key===c);!B||B.editable===!1||c==="id"||c==="createdAt"||c==="updatedAt"||(t(de,{rowId:n,colKey:c},!0),m==null?t(x,""):typeof m=="object"?t(x,JSON.stringify(m,null,2),!0):t(x,String(m),!0),requestAnimationFrame(()=>{const le=document.querySelector(".dg-cell-editor");le==null||le.focus()}))}function u(){if(!e(de))return;const{rowId:n,colKey:c}=e(de),m=Z().find(Xe=>Xe.key===c);if(!m){P();return}let B;if(e(x)===""&&m.type!=="text")B=null;else if(m.type==="number"){if(B=e(x)===""?null:Number(e(x)),B!==null&&isNaN(B)){P();return}}else if(m.type==="boolean")B=e(x)==="true"||e(x)==="1";else if(m.type==="json")try{B=e(x)?JSON.parse(e(x)):null}catch{ot("Invalid JSON");return}else B=e(x);const le=U().find(Xe=>String(Xe.id)===n),$=le==null?void 0:le[c];if(JSON.stringify(B)===JSON.stringify($)){const Xe=e(T).get(n);Xe&&(Xe.delete(c),Xe.size===0&&e(T).delete(n),t(T,new Map(e(T)),!0))}else e(T).has(n)||e(T).set(n,new Map),e(T).get(n).set(c,B),t(T,new Map(e(T)),!0);t(de,null)}function P(){t(de,null)}async function ne(n){const c=e(T).get(n);if(!(!c||!l.onSave)){t(be,new Set([...e(be),n]),!0);try{const m={};for(const[B,le]of c)m[B]=le;await l.onSave(n,m),e(T).delete(n),t(T,new Map(e(T)),!0)}catch(m){ot(m instanceof Error?m.message:"Save failed")}finally{const m=new Set(e(be));m.delete(n),t(be,m,!0)}}}function Te(n){e(T).delete(n),t(T,new Map(e(T)),!0)}async function mt(){for(const n of e(T).keys())await ne(n)}function Et(){t(T,new Map,!0)}async function St(){if(e(H).size===0||!l.onDelete)return;const n=[...e(H)];try{await l.onDelete(n),t(H,new Set,!0)}catch(c){ot(c instanceof Error?c.message:"Delete failed")}}function Gt(){t(ve,!0),t(_,{},!0),t(S,{},!0)}function Jt(n){if(!(n instanceof Sr)||!n.data||typeof n.data!="object")return{};const c={};for(const[m,B]of Object.entries(n.data))B&&typeof B=="object"&&"message"in B&&typeof B.message=="string"&&(c[m]=B.message);return c}async function Qe(){if(l.onCreate){t(ue,!0),t(S,{},!0);try{const n={};for(const c of Z()){if(c.key==="createdAt"||c.key==="updatedAt")continue;const m=e(_)[c.key];if(c.key==="id"){const B=String(m??"").trim(),le=qr(B);if(le){t(S,{id:le},!0);return}B&&(n.id=B);continue}if(!(!m&&m!=="0"))if(c.type==="number")n[c.key]=Number(m);else if(c.type==="boolean")n[c.key]=m==="true"||m==="1";else if(c.type==="json")try{n[c.key]=JSON.parse(m)}catch{t(S,{[c.key]:`Invalid JSON for ${c.label}`},!0);return}else n[c.key]=m}await l.onCreate(n),t(ve,!1),t(_,{},!0),t(S,{},!0)}catch(n){const c=Jt(n);if(Object.keys(c).length>0){t(S,c,!0);return}ot(n instanceof Error?n.message:"Create failed")}finally{t(ue,!1)}}}function Ce(){t(ve,!1),t(_,{},!0),t(S,{},!0)}function at(n,c){n.preventDefault(),n.stopPropagation(),t(ce,c,!0),t(C,n.clientX,!0),t(K,Pe(Z().find(m=>m.key===c)),!0),document.addEventListener("mousemove",Ze),document.addEventListener("mouseup",we)}function Ze(n){if(!e(ce))return;const c=n.clientX-e(C),m=Z().find($=>$.key===e(ce)),B=(m==null?void 0:m.minWidth)??60,le=Math.max(B,e(K)+c);e(oe).set(e(ce),le),t(oe,new Map(e(oe)),!0)}function we(){t(ce,null),document.removeEventListener("mousemove",Ze),document.removeEventListener("mouseup",we)}function v(n){if(n.target instanceof HTMLAnchorElement&&n.key==="Enter")return;if(e(de)){if(n.key==="Escape")P(),n.preventDefault();else if(n.key==="Enter"&&!n.shiftKey){const $=Z().find(Xe=>Xe.key===e(de).colKey);($==null?void 0:$.type)!=="json"&&(u(),n.preventDefault())}else n.key==="Tab"&&u();return}if(!e(M))return;const c=U().map($=>String($.id)),m=e(G).map($=>$.key),B=c.indexOf(e(M).rowId),le=m.indexOf(e(M).colKey);if(n.key==="ArrowDown"&&B<c.length-1)t(M,{rowId:c[B+1],colKey:e(M).colKey},!0),n.preventDefault();else if(n.key==="ArrowUp"&&B>0)t(M,{rowId:c[B-1],colKey:e(M).colKey},!0),n.preventDefault();else if(n.key==="ArrowRight"&&le<m.length-1)t(M,{rowId:e(M).rowId,colKey:m[le+1]},!0),n.preventDefault();else if(n.key==="ArrowLeft"&&le>0)t(M,{rowId:e(M).rowId,colKey:m[le-1]},!0),n.preventDefault();else if(n.key==="Enter"||n.key==="F2"){const $=gt(U().find(Xe=>String(Xe.id)===e(M).rowId),e(M).colKey);tt(e(M).rowId,e(M).colKey,$),n.preventDefault()}else if(n.key==="c"&&(n.metaKey||n.ctrlKey)){const $=gt(U().find(Xe=>String(Xe.id)===e(M).rowId),e(M).colKey);Oe($),n.preventDefault()}else n.key==="Delete"&&e(fe)&&!z()&&(St(),n.preventDefault())}function f(){var n;X()>1&&((n=l.onPageChange)==null||n.call(l,X()-1))}function O(){var n;X()<e(Je)&&((n=l.onPageChange)==null||n.call(l,X()+1))}function k(n){var m;const c=parseInt(n.target.value,10);(m=l.onPageSizeChange)==null||m.call(l,c)}var R=Ps(),L=Ke(R),j=r(L);{var Q=n=>{var c=ls(),m=r(c),B=r(m);{var le=i=>{var p=es(),F=Ke(p),q=r(F);a(F);var me=o(F,2);{var he=Ae=>{var Be=$r(),qe=r(Be);a(Be),g(()=>N(qe,`Edit ${e(H).size??""} row${e(H).size>1?"s":""}`)),ee("click",Be,()=>{var Ue;return(Ue=l.onBulkEdit)==null?void 0:Ue.call(l,[...e(H)])}),s(Ae,Be)};E(me,Ae=>{l.onBulkEdit&&Ae(he)})}g(()=>N(q,`Delete ${e(H).size??""} row${e(H).size>1?"s":""}`)),ee("click",F,St),s(i,p)};E(B,i=>{e(fe)&&i(le)})}var $=o(B,2);{var Xe=i=>{var p=ts(),F=Ke(p),q=o(F,2);ee("click",F,mt),ee("click",q,Et),s(i,p)};E($,i=>{e(te)&&i(Xe)})}a(m);var Lt=o(m,2),Ht=r(Lt);{var _a=i=>{var p=ss(),F=r(p),q=r(F);a(F);var me=o(F,2);{var he=Ae=>{var Be=rs(),qe=Ke(Be),Ue=o(qe,2);$e(Ue,21,Z,Le=>Le.key,(Le,ze)=>{var Fe=as(),Ve=r(Fe);Ft(Ve);var vt=o(Ve,2),qt=r(vt,!0);a(vt),a(Fe),g(Zt=>{Ea(Ve,Zt),Ve.disabled=e(ze).key==="id",N(qt,e(ze).label)},[()=>!e(h).has(e(ze).key)]),ee("change",Ve,()=>We(e(ze).key)),s(Le,Fe)}),a(Ue),ee("click",qe,()=>t(W,!1)),s(Ae,Be)};E(me,Ae=>{e(W)&&Ae(he)})}a(p),g(()=>{xe(F,"aria-expanded",e(W)),N(q,`Columns (${e(G).length??""}/${Z().length??""})`)}),ee("click",F,()=>t(W,!e(W))),s(i,p)};E(Ht,i=>{re()&&i(_a)})}var Tt=o(Ht,2);{var At=i=>{var p=ns();ee("click",p,Gt),s(i,p)};E(Tt,i=>{e(ve)||i(At)})}a(Lt),a(c),s(n,c)};E(j,n=>{z()||n(Q)})}var ie=o(j,2),ke=r(ie),Ee=r(ke),Ct=r(Ee),zt=r(Ct);{var rt=n=>{var c=os(),m=r(c);Ft(m),a(c),g(()=>Ea(m,e(Ie))),ee("change",m,et),s(n,c)};E(zt,n=>{z()||n(rt)})}var _t=o(zt);$e(_t,17,()=>e(G),n=>n.key,(n,c)=>{var m=vs(),B=r(m),le=r(B),$=r(le),Xe=o($);{var Lt=Tt=>{var At=is(),i=r(At,!0);a(At),g(()=>N(i,e(se)==="asc"?"▲":"▼")),s(Tt,At)};E(Xe,Tt=>{e(Y)===e(c).key&&Tt(Lt)})}a(le);var Ht=o(le,2);{var _a=Tt=>{var At=ds();g(()=>xe(At,"aria-label",`Resize ${e(c).label} column`)),ee("mousedown",At,i=>at(i,e(c).key)),s(Tt,At)};E(Ht,Tt=>{z()||Tt(_a)})}a(B),a(m),g(Tt=>{Ja(m,`width:${Tt??""}px;min-width:${e(c).minWidth??60??""}px;`),N($,`${e(c).label??""} `)},[()=>Pe(e(c))]),ee("click",le,()=>dt(e(c).key)),s(n,m)});var Rt=o(_t);{var ha=n=>{var c=cs();s(n,c)};E(Rt,n=>{z()||n(ha)})}a(Ct),a(Ee);var ia=o(Ee),ya=r(ia);{var ua=n=>{var c=us(),m=r(c);a(c),g(()=>xe(m,"colspan",e(G).length+(z()?0:2))),s(n,c)},fa=n=>{var c=fs(),m=r(c),B=r(m,!0);a(m),a(c),g(()=>{xe(m,"colspan",e(G).length+(z()?0:2)),N(B,D())}),s(n,c)},wa=n=>{var c=Kt(),m=Ke(c);$e(m,17,U,B=>B.id??U().indexOf(B),(B,le)=>{const $=A(()=>String(e(le).id)),Xe=A(()=>e(T).has(e($)));var Lt=Rs();let Ht;var _a=r(Lt);{var Tt=F=>{var q=ps(),me=r(q);Ft(me),a(q),g(he=>Ea(me,he),[()=>e(H).has(e($))]),ee("change",me,()=>Me(e($))),s(F,q)};E(_a,F=>{z()||F(Tt)})}var At=o(_a);$e(At,17,()=>e(G),F=>F.key,(F,q)=>{const me=A(()=>gt(e(le),e(q).key)),he=A(()=>I(e($),e(q).key)),Ae=A(()=>{var Ve,vt;return((Ve=e(de))==null?void 0:Ve.rowId)===e($)&&((vt=e(de))==null?void 0:vt.colKey)===e(q).key}),Be=A(()=>{var Ve,vt;return((Ve=e(M))==null?void 0:Ve.rowId)===e($)&&((vt=e(M))==null?void 0:vt.colKey)===e(q).key});var qe=Ss();let Ue;var Le=r(qe);{var ze=Ve=>{var vt=Kt(),qt=Ke(vt);{var Zt=ye=>{var De=_s(),Ge=r(De);Ge.value=Ge.__value="";var Ut=o(Ge);Ut.value=Ut.__value="true";var Pt=o(Ut);Pt.value=Pt.__value="false",a(De),na("blur",De,u),ee("keydown",De,Wt=>{Wt.key==="Escape"&&P()}),va(De,()=>e(x),Wt=>t(x,Wt)),s(ye,De)},ta=ye=>{var De=gs(),Ge=r(De);Ge.value=Ge.__value="";var Ut=o(Ge);$e(Ut,17,()=>e(q).enumValues,jt,(Pt,Wt)=>{var aa=bs(),bt=r(aa,!0);a(aa);var ft={};g(()=>{N(bt,e(Wt)),ft!==(ft=e(Wt))&&(aa.value=(aa.__value=e(Wt))??"")}),s(Pt,aa)}),a(De),na("blur",De,u),ee("keydown",De,Pt=>{Pt.key==="Escape"&&P()}),va(De,()=>e(x),Pt=>t(x,Pt)),s(ye,De)},Re=ye=>{var De=ms();Ra(De),na("blur",De,u),$t(De,()=>e(x),Ge=>t(x,Ge)),s(ye,De)},st=ye=>{var De=hs();Ft(De),g(()=>xe(De,"type",e(q).type==="number"?"number":e(q).type==="datetime"?"datetime-local":"text")),na("blur",De,u),$t(De,()=>e(x),Ge=>t(x,Ge)),s(ye,De)};E(qt,ye=>{e(q).type==="boolean"?ye(Zt):e(q).type==="enum"&&e(q).enumValues?ye(ta,1):e(q).type==="json"?ye(Re,2):ye(st,!1)})}s(Ve,vt)},Fe=Ve=>{const vt=A(()=>e(q).linkFn&&!b(e(me))?e(q).linkFn(e(me)):null);var qt=Kt(),Zt=Ke(qt);{var ta=st=>{var ye=ys(),De=r(ye,!0);a(ye),g(Ge=>{xe(ye,"href",e(vt)),xe(ye,"data-row-id",e($)),xe(ye,"data-col-key",e(q).key),N(De,Ge)},[()=>ge(e(me),e(q))]),na("focus",ye,()=>{t(M,{rowId:e($),colKey:e(q).key},!0)}),s(st,ye)},Re=st=>{var ye=xs();let De;var Ge=r(ye);let Ut;var Pt=r(Ge);{var Wt=nt=>{var wt=ws();s(nt,wt)},aa=A(()=>b(e(me))),bt=nt=>{var wt=ks(),kt=r(wt,!0);a(wt),g(()=>N(kt,e(me)?"✔":"✘")),s(nt,wt)},ft=nt=>{var wt=je();g(kt=>N(wt,kt),[()=>ge(e(me),e(q))]),s(nt,wt)};E(Pt,nt=>{e(aa)?nt(Wt):e(q).type==="boolean"?nt(bt,1):nt(ft,!1)})}a(Ge),a(ye),g((nt,wt,kt)=>{De=It(ye,1,"dg-cell-trigger svelte-45rfpz",null,De,nt),xe(ye,"data-row-id",e($)),xe(ye,"data-col-key",e(q).key),xe(ye,"aria-label",wt),Ut=It(Ge,1,"dg-cell-value svelte-45rfpz",null,Ut,kt)},[()=>({"dg-cell-trigger--null":b(e(me))}),()=>`${e(q).label}: ${b(e(me))?"null":ge(e(me),e(q))}`,()=>({"dg-cell-value--null":b(e(me))})]),ee("click",ye,()=>{t(M,{rowId:e($),colKey:e(q).key},!0)}),ee("dblclick",ye,()=>tt(e($),e(q).key,e(me))),na("focus",ye,()=>{t(M,{rowId:e($),colKey:e(q).key},!0)}),s(st,ye)};E(Zt,st=>{e(vt)?st(ta):st(Re,!1)})}s(Ve,qt)};E(Le,Ve=>{e(Ae)?Ve(ze):Ve(Fe,!1)})}a(qe),g(Ve=>{Ue=It(qe,1,"dg-td svelte-45rfpz",null,Ue,{"dg-td--dirty":e(he),"dg-td--focused":e(Be),"dg-td--editing":e(Ae)}),Ja(qe,`width:${Ve??""}px;`)},[()=>Pe(e(q))]),s(F,qe)});var i=o(At);{var p=F=>{var q=zs(),me=r(q);{var he=Le=>{var ze=Cs();ee("click",ze,()=>{var Fe;return(Fe=l.onDuplicate)==null?void 0:Fe.call(l,e(le))}),s(Le,ze)};E(me,Le=>{l.onDuplicate&&Le(he)})}var Ae=o(me,2);{var Be=Le=>{var ze=Ns();ee("click",ze,()=>{var Fe;return(Fe=l.onRowInspect)==null?void 0:Fe.call(l,e(le))}),s(Le,ze)};E(Ae,Le=>{l.onRowInspect&&Le(Be)})}var qe=o(Ae,2);{var Ue=Le=>{var ze=Es(),Fe=Ke(ze),Ve=r(Fe);{var vt=Re=>{var st=Is();s(Re,st)},qt=A(()=>e(be).has(e($))),Zt=Re=>{var st=je("✔");s(Re,st)};E(Ve,Re=>{e(qt)?Re(vt):Re(Zt,!1)})}a(Fe);var ta=o(Fe,2);g(Re=>Fe.disabled=Re,[()=>e(be).has(e($))]),ee("click",Fe,()=>ne(e($))),ee("click",ta,()=>Te(e($))),s(Le,ze)};E(qe,Le=>{e(Xe)&&Le(Ue)})}a(q),s(F,q)};E(i,F=>{z()||F(p)})}a(Lt),g(F=>Ht=It(Lt,1,"dg-row svelte-45rfpz",null,Ht,F),[()=>({"dg-row--selected":e(H).has(e($)),"dg-row--dirty":e(Xe)})]),s(B,Lt)}),s(n,c)};E(ya,n=>{ae()?n(ua):U().length===0?n(fa,1):n(wa,!1)})}a(ia),a(ke),a(ie),qa(ie,n=>t(w,n),()=>e(w));var pa=o(ie,2),Yt=r(pa),Vt=r(Yt),Dt=r(Vt);a(Vt);var ea=o(Vt,2);{var ba=n=>{var c=Ds(),m=r(c);m.value=m.__value="20";var B=o(m);B.value=B.__value="50";var le=o(B);le.value=le.__value="100";var $=o(le);$.value=$.__value="200";var Xe=o($);Xe.value=Xe.__value="500",a(c);var Lt;Cr(c),g(Ht=>{Lt!==(Lt=Ht)&&(c.value=(c.__value=Ht)??"",Nr(c,Ht))},[()=>String(J())]),ee("change",c,k),s(n,c)};E(ea,n=>{z()||n(ba)})}a(Yt);var Qt=o(Yt,2);{var sa=n=>{var c=Ts(),m=r(c),B=o(m,2),le=r(B);a(B);var $=o(B,2);a(c),g(()=>{m.disabled=X()<=1,N(le,`Page ${X()??""} / ${e(Je)??""}`),$.disabled=X()>=e(Je)}),ee("click",m,f),ee("click",$,O),s(n,c)};E(Qt,n=>{e(Je)>1&&n(sa)})}a(pa),a(L);var xa=o(L,2);{var ga=n=>{Xr(n,{get columns(){return Z()},get saving(){return e(ue)},onClose:Ce,onSubmit:Qe,get open(){return e(ve)},set open(c){t(ve,c,!0)},get values(){return e(_)},set values(c){t(_,c,!0)},get errors(){return e(S)},set errors(c){t(S,c,!0)}})};E(xa,n=>{z()||n(ga)})}g(()=>N(Dt,`${V()??""} row${V()!==1?"s":""}`)),ee("keydown",L,v),s(_e,R),oa()}ca(["keydown","click","change","mousedown","dblclick"]);function Za({limit:_e,offset:l,search:Z,sortKey:U,sortDir:ae="asc",includeTotal:z}){const D=new URLSearchParams({limit:String(_e),offset:String(l)});return Z&&D.set("search",Z),U&&D.set("sort",`${U}:${ae}`),z===!1&&D.set("includeTotal","0"),D.toString()}var js=d('<label class="rdp-field__name svelte-yphh8m"> </label>'),Fs=d('<span class="rdp-field__name svelte-yphh8m"> </span>'),Ls=d('<select class="rdp-input svelte-yphh8m"><option>Unset</option><option>true</option><option>false</option></select>'),As=d("<option> </option>"),qs=d('<select class="rdp-input svelte-yphh8m"><option>Select value</option><!></select>'),Us=d('<textarea class="rdp-input rdp-input--textarea svelte-yphh8m" rows="6"></textarea>'),Ms=d('<input class="rdp-input svelte-yphh8m"/>'),Bs=d("<em>null</em>"),Ks=d('<span class="rdp-bool svelte-yphh8m"> </span>'),Js=d('<pre class="rdp-json svelte-yphh8m"> </pre>'),Vs=d('<a class="rdp-link svelte-yphh8m"> </a>'),Hs=d("<div><!></div>"),Ws=d('<div class="rdp-field svelte-yphh8m"><div class="rdp-field__header svelte-yphh8m"><!> <span class="rdp-field__type svelte-yphh8m"> </span></div> <!></div>'),Gs=d('<span class="rdp-spinner svelte-yphh8m"></span>'),Ys=d('<button type="button" class="rdp-btn svelte-yphh8m">Reset</button> <button type="button" class="rdp-btn rdp-btn--primary svelte-yphh8m"><!></button>',1),Qs=d('<button type="button" class="rdp-overlay svelte-yphh8m" aria-label="Close row detail"></button> <div class="rdp svelte-yphh8m" role="dialog" aria-modal="true" aria-labelledby="row-detail-title"><div class="rdp-header svelte-yphh8m"><div><h3 id="row-detail-title" class="rdp-title svelte-yphh8m">Row Detail</h3> <p class="rdp-subtitle svelte-yphh8m"><!></p></div> <button type="button" class="rdp-close svelte-yphh8m" aria-label="Close row detail">×</button></div> <div class="rdp-body svelte-yphh8m"></div> <div class="rdp-footer svelte-yphh8m"><button type="button" class="rdp-btn svelte-yphh8m">Close</button> <!></div></div>',1);function Zs(_e,l){la(l,!0);const Z=new Set(["id","createdAt","updatedAt"]),U=Symbol("invalid-value");let ae=y(null),z=y(lt({})),D=y(null),V=y(!1),X=A(()=>l.columns.filter(_=>!Z.has(_.key)&&_.editable!==!1)),J=A(()=>e(X).length>0&&!!l.onSave),re=A(()=>!!oe());yt(()=>{!l.open||!l.row||(t(D,{...l.row},!0),t(z,H(l.row),!0),requestAnimationFrame(()=>{var S;const _=(S=e(ae))==null?void 0:S.querySelector("input, select, textarea");_==null||_.focus()}))});function H(_){const S={};for(const ue of l.columns){const Ie=_[ue.key];if(Ie==null){S[ue.key]="";continue}if(ue.type==="boolean"){S[ue.key]=Ie?"true":"false";continue}if(ue.type==="json"&&typeof Ie=="object"){S[ue.key]=JSON.stringify(Ie,null,2);continue}if(ue.type==="datetime"&&typeof Ie=="string"){S[ue.key]=T(Ie);continue}S[ue.key]=String(Ie)}return S}function T(_){const S=new Date(_);return Number.isNaN(S.getTime())?_:new Date(S.getTime()-S.getTimezoneOffset()*6e4).toISOString().slice(0,16)}function be(_){l.open&&_.key==="Escape"&&!e(V)&&l.onClose()}function M(_,S){if(_==null)return"null";if(S.type==="boolean")return _?"true":"false";if(S.type==="json"&&typeof _=="object")return JSON.stringify(_,null,2);if(S.type==="datetime"&&typeof _=="string")try{return new Date(_).toLocaleString()}catch{return String(_)}return String(_)}function de(_,S){if(S===""&&_.type!=="text")return null;if(_.type==="number"){const ue=Number(S);return Number.isNaN(ue)?U:ue}if(_.type==="boolean")return S===""?null:S==="true"||S==="1";if(_.type==="json"){if(S==="")return null;try{return JSON.parse(S)}catch{return U}}return S}function x(_){return _==null}function Y(_){return typeof _=="object"&&_!==null}function se(_,S){return JSON.stringify(_)===JSON.stringify(S)}function oe(){if(!e(D))return null;const _={};for(const S of e(X)){const ue=de(S,e(z)[S.key]??"");if(ue===U)return null;se(ue,e(D)[S.key])||(_[S.key]=ue)}return Object.keys(_).length>0?_:null}function ce(_){return _.type==="number"?"number":_.type==="datetime"?"datetime-local":"text"}function C(_){return`row-detail-field-${_}`}async function K(){if(!e(D)||!l.onSave)return;const _=oe();if(_){for(const S of e(X))if(de(S,e(z)[S.key]??"")===U){ot(`Invalid ${S.type} value for ${S.label}`);return}t(V,!0);try{await l.onSave(String(e(D).id),_),t(D,{...e(D),..._},!0),t(z,H(e(D)),!0)}catch(S){ot(S instanceof Error?S.message:"Save failed")}finally{t(V,!1)}}}function w(){e(D)&&t(z,H(e(D)),!0)}var h=Kt();na("keydown",$a,be);var W=Ke(h);{var ve=_=>{var S=Qs(),ue=Ke(S),Ie=o(ue,2),fe=r(Ie),Je=r(fe),te=o(r(Je),2),G=r(te);{var Se=ge=>{var b=je("Inspect and update this record without leaving the table.");s(ge,b)},We=ge=>{var b=je("This record is read-only.");s(ge,b)};E(G,ge=>{e(J)?ge(Se):ge(We,!1)})}a(te),a(Je);var Pe=o(Je,2);a(fe);var it=o(fe,2);$e(it,21,()=>l.columns,ge=>ge.key,(ge,b)=>{const I=A(()=>e(D)[e(b).key]),Oe=A(()=>!Z.has(e(b).key)&&e(b).editable!==!1&&!!l.onSave);var tt=Ws(),u=r(tt),P=r(u);{var ne=Qe=>{var Ce=js(),at=r(Ce,!0);a(Ce),g(Ze=>{xe(Ce,"for",Ze),N(at,e(b).label)},[()=>C(e(b).key)]),s(Qe,Ce)},Te=Qe=>{var Ce=Fs(),at=r(Ce,!0);a(Ce),g(()=>N(at,e(b).label)),s(Qe,Ce)};E(P,Qe=>{e(Oe)?Qe(ne):Qe(Te,!1)})}var mt=o(P,2),Et=r(mt,!0);a(mt),a(u);var St=o(u,2);{var Gt=Qe=>{var Ce=Kt(),at=Ke(Ce);{var Ze=O=>{var k=Ls(),R=r(k);R.value=R.__value="";var L=o(R);L.value=L.__value="true";var j=o(L);j.value=j.__value="false",a(k),g(Q=>{xe(k,"id",Q),k.disabled=e(V)},[()=>C(e(b).key)]),va(k,()=>e(z)[e(b).key],Q=>e(z)[e(b).key]=Q),s(O,k)},we=O=>{var k=qs(),R=r(k);R.value=R.__value="";var L=o(R);$e(L,17,()=>e(b).enumValues,jt,(j,Q)=>{var ie=As(),ke=r(ie,!0);a(ie);var Ee={};g(()=>{N(ke,e(Q)),Ee!==(Ee=e(Q))&&(ie.value=(ie.__value=e(Q))??"")}),s(j,ie)}),a(k),g(j=>{xe(k,"id",j),k.disabled=e(V)},[()=>C(e(b).key)]),va(k,()=>e(z)[e(b).key],j=>e(z)[e(b).key]=j),s(O,k)},v=O=>{var k=Us();Ra(k),g(R=>{xe(k,"id",R),k.disabled=e(V)},[()=>C(e(b).key)]),$t(k,()=>e(z)[e(b).key],R=>e(z)[e(b).key]=R),s(O,k)},f=O=>{var k=Ms();Ft(k),g((R,L)=>{xe(k,"id",R),xe(k,"type",L),k.disabled=e(V)},[()=>C(e(b).key),()=>ce(e(b))]),$t(k,()=>e(z)[e(b).key],R=>e(z)[e(b).key]=R),s(O,k)};E(at,O=>{e(b).type==="boolean"?O(Ze):e(b).type==="enum"&&e(b).enumValues?O(we,1):e(b).type==="json"?O(v,2):O(f,!1)})}s(Qe,Ce)},Jt=Qe=>{var Ce=Hs();let at;var Ze=r(Ce);{var we=j=>{var Q=Bs();s(j,Q)},v=A(()=>x(e(I))),f=j=>{var Q=Ks(),ie=r(Q,!0);a(Q),g(()=>N(ie,e(I)?"true":"false")),s(j,Q)},O=j=>{var Q=Js(),ie=r(Q,!0);a(Q),g(ke=>N(ie,ke),[()=>JSON.stringify(e(I),null,2)]),s(j,Q)},k=A(()=>e(b).type==="json"&&Y(e(I))),R=j=>{const Q=A(()=>e(b).linkFn(e(I)));var ie=Kt(),ke=Ke(ie);{var Ee=zt=>{var rt=Vs(),_t=r(rt,!0);a(rt),g(Rt=>{xe(rt,"href",e(Q)),N(_t,Rt)},[()=>M(e(I),e(b))]),s(zt,rt)},Ct=zt=>{var rt=je();g(_t=>N(rt,_t),[()=>M(e(I),e(b))]),s(zt,rt)};E(ke,zt=>{e(Q)?zt(Ee):zt(Ct,!1)})}s(j,ie)},L=j=>{var Q=je();g(ie=>N(Q,ie),[()=>M(e(I),e(b))]),s(j,Q)};E(Ze,j=>{e(v)?j(we):e(b).type==="boolean"?j(f,1):e(k)?j(O,2):e(b).linkFn?j(R,3):j(L,!1)})}a(Ce),g(j=>at=It(Ce,1,"rdp-field__value svelte-yphh8m",null,at,j),[()=>({"rdp-field__value--null":x(e(I))})]),s(Qe,Ce)};E(St,Qe=>{e(Oe)?Qe(Gt):Qe(Jt,!1)})}a(tt),g(()=>N(Et,e(b).type)),s(ge,tt)}),a(it);var et=o(it,2),Me=r(et),dt=o(Me,2);{var gt=ge=>{var b=Ys(),I=Ke(b),Oe=o(I,2),tt=r(Oe);{var u=ne=>{var Te=Gs();s(ne,Te)},P=ne=>{var Te=je("Save Changes");s(ne,Te)};E(tt,ne=>{e(V)?ne(u):ne(P,!1)})}a(Oe),g(()=>{I.disabled=e(V)||!e(re),Oe.disabled=e(V)||!e(re)}),ee("click",I,w),ee("click",Oe,K),s(ge,b)};E(dt,ge=>{e(J)&&ge(gt)})}a(et),a(Ie),qa(Ie,ge=>t(ae,ge),()=>e(ae)),g(()=>{Pe.disabled=e(V),Me.disabled=e(V)}),ee("click",ue,()=>!e(V)&&l.onClose()),ee("click",Pe,function(...ge){var b;(b=l.onClose)==null||b.apply(this,ge)}),ee("click",Me,function(...ge){var b;(b=l.onClose)==null||b.apply(this,ge)}),s(_,S)};E(W,_=>{l.open&&e(D)&&_(ve)})}s(_e,h),oa()}ca(["click"]);var Xs=d("<!> <!>",1),$s=d('<div class="csv-error svelte-198lwhz"> </div>'),en=d('<span class="csv-filename svelte-198lwhz"> </span>'),tn=d("<option> </option>"),an=d('<div class="csv-map-row svelte-198lwhz"><span class="csv-map-from svelte-198lwhz"> </span> <span class="csv-map-arrow svelte-198lwhz">→</span> <select class="csv-map-select svelte-198lwhz"><option>— Skip —</option><!></select></div>'),rn=d('<th class="csv-preview-th svelte-198lwhz"> </th>'),sn=d('<td class="csv-preview-td svelte-198lwhz"> </td>'),nn=d("<tr></tr>"),ln=d('<div class="csv-section svelte-198lwhz"><h4 class="csv-section-title svelte-198lwhz">Column Mapping</h4> <div class="csv-mappings svelte-198lwhz"></div></div> <div class="csv-section svelte-198lwhz"><h4 class="csv-section-title svelte-198lwhz">Preview (first 5 rows)</h4> <div class="csv-preview-wrap svelte-198lwhz"><table class="csv-preview-table svelte-198lwhz"><thead><tr></tr></thead><tbody></tbody></table></div></div>',1),on=d('<div class="csv-import svelte-198lwhz"><!> <div class="csv-upload svelte-198lwhz"><label class="csv-upload-label svelte-198lwhz"><span>Choose CSV file</span> <input type="file" accept=".csv,text/csv" class="csv-file-input svelte-198lwhz"/></label> <!></div> <!></div>'),dn=d('<div class="records-tab svelte-198lwhz"><div class="toolbar svelte-198lwhz"><form class="search-bar svelte-198lwhz"><input class="search-input svelte-198lwhz" type="text" placeholder="Search records..."/> <!> <!></form> <div class="toolbar__right svelte-198lwhz"><div class="toolbar__meta svelte-198lwhz"> </div> <!> <!> <!></div></div> <!> <!> <!></div>');function vn(_e,l){la(l,!0);const Z=()=>ma(Bt,"$schemaStore",U),[U,ae]=Da();let z=y(!0),D=y(lt([])),V=y(lt({})),X=y(0),J=y(void 0),re=y(1),H=y(20),T=y(""),be=y(""),M=y(""),de=y("asc"),x=y(null),Y=y(!1),se=y(!1),oe=y(null),ce=y(lt([])),C=y(lt([])),K=y(lt({})),w=y(!1),h=y(""),W=A(()=>Object.entries(e(V)).filter(([v])=>!Wa.includes(v))),ve=A(()=>Object.keys(e(V))),_=A(()=>e(ve).map(v=>{const f=e(V)[v],O=Wa.includes(v);let k="text";(f==null?void 0:f.type)==="number"||(f==null?void 0:f.type)==="integer"||(f==null?void 0:f.type)==="float"?k="number":(f==null?void 0:f.type)==="boolean"?k="boolean":(f==null?void 0:f.type)==="json"?k="json":(f==null?void 0:f.type)==="datetime"||(f==null?void 0:f.type)==="date"?k="datetime":f!=null&&f.enum&&f.enum.length>0&&(k="enum");let R;if(f!=null&&f.references){const L=f.references,j=typeof L=="string"?L:L.table;R=Q=>Q==null||Q===""?null:Er(za,j,{instanceId:l.instanceId,search:String(Q)})}return{key:v,label:v,type:k,editable:!O&&v!=="id",width:v==="id"?280:k==="json"?200:150,enumValues:f==null?void 0:f.enum,linkFn:R}}));function S(v){const f=v?`data/tables/${encodeURIComponent(l.tableName)}/records/${encodeURIComponent(v)}`:`data/tables/${encodeURIComponent(l.tableName)}/records`;if(!l.instanceId)return f;const O=new URLSearchParams({instanceId:l.instanceId});return`${f}?${O.toString()}`}function ue(){return e(J)==="postgres"||e(J)==="neon"}async function Ie(){try{const v=Za({limit:1,offset:0,search:e(T),includeTotal:!0}),f=await pt.fetch(Sa(l.tableName,{instanceId:l.instanceId,params:new URLSearchParams(v)}));typeof f.total=="number"&&t(X,f.total,!0)}catch{}}async function fe(v={}){t(z,!0);try{const f=(e(re)-1)*e(H),O=Za({limit:e(H),offset:f,search:e(T),sortKey:e(M),sortDir:e(de),includeTotal:!ue()}),k=await pt.fetch(Sa(l.tableName,{instanceId:l.instanceId,params:new URLSearchParams(O)})),R=k.items??k.data??k.rows??[];if(t(D,R,!0),t(X,typeof k.total=="number"?k.total:e(D).length,!0),e(Y)&&e(x)){const L=R.find(j=>{var Q;return String(j.id)===String((Q=e(x))==null?void 0:Q.id)});L&&t(x,L,!0)}ue()&&v.refreshTotal!==!1&&Ie()}catch(f){ot(f instanceof Error?f.message:"Failed to load records"),t(D,[],!0)}finally{t(z,!1)}}yt(()=>{const v=l.tableName;if(l.instanceId,v){const f=Z().schema[l.tableName];f&&(t(V,f.fields,!0),t(J,f.provider,!0)),t(re,1),t(T,""),t(be,""),t(M,""),t(de,"asc"),wr(()=>fe())}});function Je(){t(T,e(be),!0),t(re,1),fe()}function te(){t(be,""),t(T,""),t(re,1),fe()}async function G(v,f){await pt.fetch(S(v),{method:"PUT",body:f}),e(x)&&String(e(x).id)===v&&t(x,{...e(x),...f},!0),xt("Record updated"),await fe({refreshTotal:!1})}async function Se(v){for(const f of v)await pt.fetch(S(f),{method:"DELETE"});xt(`${v.length} record${v.length>1?"s":""} deleted`),await fe()}async function We(v){await pt.fetch(Sa(l.tableName,{instanceId:l.instanceId}),{method:"POST",body:v}),xt("Record created"),await fe()}function Pe(v){t(re,v,!0),fe({refreshTotal:!1})}function it(v){t(H,v,!0),t(re,1),fe()}function et(v,f){t(M,v,!0),t(de,f,!0),fe({refreshTotal:!1})}function Me(v){t(x,v,!0),t(Y,!0)}async function dt(){try{const v=await pt.fetch(Sa(l.tableName,{instanceId:l.instanceId,params:{limit:1e4,includeTotal:0}})),f=v.items??v.data??v.rows??[];if(f.length===0){ot("No records to export");return}const O=Dr(e(ve),f),k=new Blob([O],{type:"text/csv;charset=utf-8;"});Ha(k,`${l.tableName}.csv`),xt("CSV exported")}catch(v){ot(v instanceof Error?v.message:"Export failed")}}async function gt(){try{const v=await pt.fetch(Sa(l.tableName,{instanceId:l.instanceId,params:{limit:1e4,includeTotal:0}})),f=v.items??v.data??v.rows??[];if(f.length===0){ot("No records to export");return}const O=new Blob([JSON.stringify(f,null,2)],{type:"application/json"});Ha(O,`${l.tableName}.json`),xt("JSON exported")}catch(v){ot(v instanceof Error?v.message:"JSON export failed")}}function ge(){t(oe,null),t(ce,[],!0),t(C,[],!0),t(K,{},!0),t(h,""),t(se,!0)}async function b(v){var k;const O=(k=v.target.files)==null?void 0:k[0];if(O){t(oe,O,!0),t(h,"");try{const R=await O.text(),L=Ga(R);t(ce,L.headers,!0),t(C,L.rows.slice(0,5),!0);const j={};for(const Q of L.headers){const ie=Q.toLowerCase().trim();for(const[ke]of e(W))if(ke.toLowerCase()===ie){j[Q]=ke;break}}t(K,j,!0)}catch{t(h,"Failed to parse CSV file")}}}async function I(){if(e(oe)){t(w,!0),t(h,"");try{const v=await e(oe).text(),f=Ga(v),O=[];for(const R of f.rows){const L={};for(let j=0;j<f.headers.length;j++){const Q=f.headers[j],ie=e(K)[Q];if(!ie)continue;const ke=R[j];if(ke===""||ke===void 0)continue;const Ee=e(V)[ie];if((Ee==null?void 0:Ee.type)==="number"||(Ee==null?void 0:Ee.type)==="integer"||(Ee==null?void 0:Ee.type)==="float")L[ie]=Number(ke);else if((Ee==null?void 0:Ee.type)==="boolean")L[ie]=ke==="true"||ke==="1";else if((Ee==null?void 0:Ee.type)==="json")try{L[ie]=JSON.parse(ke)}catch{L[ie]=ke}else L[ie]=ke}Object.keys(L).length>0&&O.push(L)}if(O.length===0){t(h,"No valid records to import. Check column mapping.");return}const k=await pt.fetch(`data/tables/${encodeURIComponent(l.tableName)}/import`,{method:"POST",body:{records:O,mode:"create"}});k.errors&&k.errors.length>0?ot(`Imported ${k.imported} records with ${k.errors.length} errors`):xt(`Imported ${k.imported} records`),t(se,!1),await fe()}catch(v){t(h,v instanceof Error?v.message:"Import failed",!0)}finally{t(w,!1)}}}var Oe=dn(),tt=r(Oe),u=r(tt),P=r(u);Ft(P);var ne=o(P,2);ut(ne,{variant:"secondary",size:"sm",type:"submit",children:(v,f)=>{He();var O=je("Search");s(v,O)},$$slots:{default:!0}});var Te=o(ne,2);{var mt=v=>{ut(v,{variant:"ghost",size:"sm",onclick:te,children:(f,O)=>{He();var k=je("Clear");s(f,k)},$$slots:{default:!0}})};E(Te,v=>{e(T)&&v(mt)})}a(u);var Et=o(u,2),St=r(Et),Gt=r(St);a(St);var Jt=o(St,2);ut(Jt,{variant:"ghost",size:"sm",onclick:ge,children:(v,f)=>{He();var O=je("Import CSV");s(v,O)},$$slots:{default:!0}});var Qe=o(Jt,2);ut(Qe,{variant:"ghost",size:"sm",onclick:dt,children:(v,f)=>{He();var O=je("Export CSV");s(v,O)},$$slots:{default:!0}});var Ce=o(Qe,2);ut(Ce,{variant:"ghost",size:"sm",onclick:gt,children:(v,f)=>{He();var O=je("Export JSON");s(v,O)},$$slots:{default:!0}}),a(Et),a(tt);var at=o(tt,2);{let v=A(()=>e(T)?"No records match your search.":"This table has no records yet.");Os(at,{get columns(){return e(_)},get rows(){return e(D)},get tableName(){return l.tableName},get loading(){return e(z)},get totalCount(){return e(X)},get page(){return e(re)},get pageSize(){return e(H)},get emptyMessage(){return e(v)},onSave:G,onDelete:Se,onCreate:We,onPageChange:Pe,onPageSizeChange:it,onSort:et,onRowInspect:Me})}var Ze=o(at,2);er(Ze,{title:"Import CSV",get open(){return e(se)},set open(f){t(se,f,!0)},footer:f=>{var O=Xs(),k=Ke(O);ut(k,{variant:"secondary",onclick:()=>t(se,!1),children:(L,j)=>{He();var Q=je("Cancel");s(L,Q)},$$slots:{default:!0}});var R=o(k,2);{let L=A(()=>!e(oe)||e(ce).length===0);ut(R,{variant:"primary",get disabled(){return e(L)},get loading(){return e(w)},onclick:I,children:(j,Q)=>{He();var ie=je("Import");s(j,ie)},$$slots:{default:!0}})}s(f,O)},children:(f,O)=>{var k=on(),R=r(k);{var L=rt=>{var _t=$s(),Rt=r(_t,!0);a(_t),g(()=>N(Rt,e(h))),s(rt,_t)};E(R,rt=>{e(h)&&rt(L)})}var j=o(R,2),Q=r(j),ie=o(r(Q),2);a(Q);var ke=o(Q,2);{var Ee=rt=>{var _t=en(),Rt=r(_t,!0);a(_t),g(()=>N(Rt,e(oe).name)),s(rt,_t)};E(ke,rt=>{e(oe)&&rt(Ee)})}a(j);var Ct=o(j,2);{var zt=rt=>{var _t=ln(),Rt=Ke(_t),ha=o(r(Rt),2);$e(ha,21,()=>e(ce),jt,(Yt,Vt)=>{var Dt=an(),ea=r(Dt),ba=r(ea,!0);a(ea);var Qt=o(ea,4),sa=r(Qt);sa.value=sa.__value="";var xa=o(sa);$e(xa,17,()=>e(W),jt,(ga,n)=>{var c=A(()=>kr(e(n),1));let m=()=>e(c)[0];var B=tn(),le=r(B,!0);a(B);var $={};g(()=>{N(le,m()),$!==($=m())&&(B.value=(B.__value=m())??"")}),s(ga,B)}),a(Qt),a(Dt),g(()=>N(ba,e(Vt))),va(Qt,()=>e(K)[e(Vt)],ga=>e(K)[e(Vt)]=ga),s(Yt,Dt)}),a(ha),a(Rt);var ia=o(Rt,2),ya=o(r(ia),2),ua=r(ya),fa=r(ua),wa=r(fa);$e(wa,21,()=>e(ce),jt,(Yt,Vt)=>{var Dt=rn(),ea=r(Dt,!0);a(Dt),g(()=>N(ea,e(Vt))),s(Yt,Dt)}),a(wa),a(fa);var pa=o(fa);$e(pa,21,()=>e(C),jt,(Yt,Vt)=>{var Dt=nn();$e(Dt,21,()=>e(Vt),jt,(ea,ba)=>{var Qt=sn(),sa=r(Qt,!0);a(Qt),g(()=>N(sa,e(ba))),s(ea,Qt)}),a(Dt),s(Yt,Dt)}),a(pa),a(ua),a(ya),a(ia),s(rt,_t)};E(Ct,rt=>{e(ce).length>0&&rt(zt)})}a(k),ee("change",ie,b),s(f,k)},$$slots:{footer:!0,default:!0}});var we=o(Ze,2);Zs(we,{get row(){return e(x)},get columns(){return e(_)},onSave:G,onClose:()=>{t(Y,!1)},get open(){return e(Y)},set open(v){t(Y,v,!0)}}),a(Oe),g(()=>N(Gt,`${e(X)??""} record${e(X)!==1?"s":""}`)),na("submit",u,v=>{v.preventDefault(),Je()}),$t(P,()=>e(be),v=>t(be,v)),s(_e,Oe),oa(),ae()}ca(["change"]);var cn=d('<div class="index-error svelte-v6rf4z"> </div>'),un=d('<div class="index-form svelte-v6rf4z"><!> <div class="index-form__row"><!></div> <div class="index-form__row"><!></div> <div class="index-form__actions svelte-v6rf4z"><!></div></div>'),fn=d('<div class="index-empty svelte-v6rf4z">No indexes defined.</div>'),pn=d('<span class="index-unique svelte-v6rf4z">UNIQUE</span>'),_n=d('<button class="index-delete svelte-v6rf4z" title="Remove index"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M4 4L10 10M10 4L4 10" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"></path></svg></button>'),bn=d('<div class="index-row svelte-v6rf4z"><code class="index-fields svelte-v6rf4z"> </code> <!> <!></div>'),gn=d('<div class="index-editor svelte-v6rf4z"><div class="index-editor__header svelte-v6rf4z"><span class="index-editor__title svelte-v6rf4z"> </span> <!></div> <!> <!></div>');function mn(_e,l){la(l,!0);let Z=ht(l,"indexes",19,()=>[]),U=ht(l,"availableFields",19,()=>[]),ae=ht(l,"readonly",3,!1),z=y(!1),D=y(""),V=y(!1),X=y("");function J(){var w;const C=e(D).split(",").map(h=>h.trim()).filter(Boolean);if(C.length===0){t(X,"At least one field is required.");return}const K=C.filter(h=>!U().includes(h));if(K.length>0){t(X,`Unknown field(s): ${K.join(", ")}`);return}(w=l.onadd)==null||w.call(l,{fields:C,unique:e(V)||void 0}),t(D,""),t(V,!1),t(X,""),t(z,!1)}var re=gn(),H=r(re),T=r(H),be=r(T);a(T);var M=o(T,2);{var de=C=>{ut(C,{variant:"secondary",size:"sm",onclick:()=>t(z,!e(z)),children:(K,w)=>{He();var h=je();g(()=>N(h,e(z)?"Cancel":"Add Index")),s(K,h)},$$slots:{default:!0}})};E(M,C=>{ae()||C(de)})}a(H);var x=o(H,2);{var Y=C=>{var K=un(),w=r(K);{var h=fe=>{var Je=cn(),te=r(Je,!0);a(Je),g(()=>N(te,e(X))),s(fe,Je)};E(w,fe=>{e(X)&&fe(h)})}var W=o(w,2),ve=r(W);Pr(ve,{placeholder:"field1, field2",label:"Fields (comma-separated)",get value(){return e(D)},set value(fe){t(D,fe,!0)}}),a(W);var _=o(W,2),S=r(_);Or(S,{label:"Unique index",get checked(){return e(V)},set checked(fe){t(V,fe,!0)}}),a(_);var ue=o(_,2),Ie=r(ue);ut(Ie,{variant:"primary",size:"sm",onclick:J,children:(fe,Je)=>{He();var te=je("Add");s(fe,te)},$$slots:{default:!0}}),a(ue),a(K),s(C,K)};E(x,C=>{e(z)&&C(Y)})}var se=o(x,2);{var oe=C=>{var K=fn();s(C,K)},ce=C=>{var K=Kt(),w=Ke(K);$e(w,17,Z,jt,(h,W,ve)=>{var _=bn(),S=r(_),ue=r(S,!0);a(S);var Ie=o(S,2);{var fe=G=>{var Se=pn();s(G,Se)};E(Ie,G=>{e(W).unique&&G(fe)})}var Je=o(Ie,2);{var te=G=>{var Se=_n();ee("click",Se,()=>{var We;return(We=l.ondelete)==null?void 0:We.call(l,ve)}),s(G,Se)};E(Je,G=>{ae()||G(te)})}a(_),g(G=>N(ue,G),[()=>e(W).fields.join(", ")]),s(h,_)}),s(C,K)};E(se,C=>{Z().length===0&&!e(z)?C(oe):C(ce,!1)})}a(re),g(()=>N(be,`Indexes (${Z().length??""})`)),s(_e,re),oa()}ca(["click"]);var hn=d('<div class="fts-empty svelte-974m0i">No string/text fields available for FTS.</div>'),yn=d('<span class="fts-active svelte-974m0i">active</span>'),wn=d('<label class="fts-item svelte-974m0i"><input type="checkbox"/> <code class="svelte-974m0i"> </code> <!></label>'),kn=d('<div class="fts-list svelte-974m0i"></div>'),xn=d('<div class="fts-editor svelte-974m0i"><div class="fts-editor__header svelte-974m0i"><span class="fts-editor__title svelte-974m0i">Full-Text Search</span> <!></div> <!></div>');function Sn(_e,l){la(l,!0);let Z=ht(l,"ftsFields",19,()=>[]),U=ht(l,"availableFields",19,()=>[]),ae=ht(l,"readonly",3,!1),z=y(lt({})),D=y(!1);yt(()=>{const x={};for(const Y of U())x[Y]=Z().includes(Y);t(z,x,!0),t(D,!1)});function V(x){e(z)[x]=!e(z)[x],t(D,!0)}function X(){var Y;const x=Object.entries(e(z)).filter(([,se])=>se).map(([se])=>se);(Y=l.onsave)==null||Y.call(l,x),t(D,!1)}var J=xn(),re=r(J),H=o(r(re),2);{var T=x=>{ut(x,{variant:"primary",size:"sm",onclick:X,children:(Y,se)=>{He();var oe=je("Save FTS");s(Y,oe)},$$slots:{default:!0}})};E(H,x=>{!ae()&&e(D)&&x(T)})}a(re);var be=o(re,2);{var M=x=>{var Y=hn();s(x,Y)},de=x=>{var Y=kn();$e(Y,20,U,se=>se,(se,oe)=>{var ce=wn(),C=r(ce);Ft(C);var K=o(C,2),w=r(K,!0);a(K);var h=o(K,2);{var W=_=>{var S=yn();s(_,S)},ve=A(()=>Z().includes(oe));E(h,_=>{e(ve)&&_(W)})}a(ce),g(()=>{Ea(C,e(z)[oe]??!1),C.disabled=ae(),N(w,oe)}),ee("change",C,()=>V(oe)),s(se,ce)}),a(Y),s(x,Y)};E(be,x=>{U().length===0?x(M):x(de,!1)})}a(J),s(_e,J),oa()}ca(["change"]);var Cn=d('<div class="schema-empty svelte-aw0zhs">Loading schema...</div>'),Nn=d('<div class="schema-empty svelte-aw0zhs"> </div>'),In=d('<div class="readonly-banner svelte-aw0zhs">Schema editing requires dev mode. Viewing in read-only mode.</div>'),En=d('<div class="rename-inline svelte-aw0zhs"><input class="rename-input svelte-aw0zhs" placeholder="new_name"/> <!> <!></div>'),zn=d("<!> <!>",1),Rn=d('<div class="schema-note svelte-aw0zhs"> </div>'),Dn=d('<div class="schema-actions svelte-aw0zhs"><!></div> <!>',1),Tn=d('<!> <!> <div class="schema-namespace svelte-aw0zhs">Namespace: <code class="svelte-aw0zhs"> </code></div> <!>',1),Pn=d('<div class="schema-tab svelte-aw0zhs"><!></div> <!> <!> <!>',1);function On(_e,l){la(l,!0);const Z=()=>ma(tr,"$devInfoStore",ae),U=()=>ma(Bt,"$schemaStore",ae),[ae,z]=Da();let D=y(null),V=y("columns"),X=A(()=>Z().devMode),J=y(!1),re=y("create"),H=y(""),T=y(lt({type:"string"})),be=y(!1),M=y(""),de=y(!1),x=y(!1),Y=y("");const se=[{id:"columns",label:"Columns"},{id:"indexes",label:"Indexes"},{id:"fts",label:"FTS"}];yt(()=>{const u=U();l.tableName&&u.schema[l.tableName]?t(D,u.schema[l.tableName],!0):t(D,null)});let oe=A(()=>{var u;return((u=e(D))==null?void 0:u.fields)??{}}),ce=A(()=>{var u;return((u=e(D))==null?void 0:u.indexes)??[]}),C=A(()=>{var u;return((u=e(D))==null?void 0:u.fts)??[]}),K=A(()=>{var u;return((u=e(D))==null?void 0:u.namespace)??"default"}),w=A(()=>{var u;return(u=e(D))!=null&&u.dynamic?"Table rename is unavailable for per-tenant databases because each tenant instance has its own physical database.":""}),h=A(()=>Object.entries(e(oe)).filter(([,u])=>u.type==="string"||u.type==="text").map(([u])=>u));function W(){t(re,"create"),t(H,""),t(T,{type:"string"},!0),t(J,!0)}function ve(u,P){t(re,"edit"),t(H,u,!0),t(T,{...P},!0),t(J,!0)}function _(u){t(M,u,!0),t(be,!0)}function S(u){return JSON.stringify({fields:u.fields,unique:u.unique===!0?!0:void 0})}function ue(u,P){return JSON.stringify(u??null)===JSON.stringify(P)}function Ie(u,P){return u.length!==P.length?!1:u.every((ne,Te)=>S(ne)===S(P[Te]))}function fe(u,P){if(u.length!==P.length)return!1;const ne=[...u].sort(),Te=[...P].sort();return ne.every((mt,Et)=>mt===Te[Et])}async function Je(u,P){try{e(re)==="create"?(await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/columns`,{method:"POST",body:{dbKey:e(K),columnName:u,fieldDef:P}}),xt(`Column "${u}" added`)):(await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/columns/${u}`,{method:"PUT",body:{dbKey:e(K),fieldDef:P}}),xt(`Column "${u}" updated`)),await Bt.waitForSchema(ne=>{const Te=ne[l.tableName];return!!(Te&&ue(Te.fields[u],P))})}catch(ne){ot(ne instanceof Error?ne.message:"Failed to save column")}}async function te(){t(be,!1);try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/columns/${e(M)}`,{method:"DELETE",body:{dbKey:e(K)}}),xt(`Column "${e(M)}" deleted`),await Bt.waitForSchema(u=>{const P=u[l.tableName];return!!(P&&!(e(M)in P.fields))})}catch(u){ot(u instanceof Error?u.message:"Failed to delete column")}}async function G(u){try{const P=[...e(ce),u];await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/indexes`,{method:"POST",body:{dbKey:e(K),indexDef:u}}),xt("Index added"),await Bt.waitForSchema(ne=>{const Te=ne[l.tableName];return!!(Te&&Ie(Te.indexes??[],P))})}catch(P){ot(P instanceof Error?P.message:"Failed to add index")}}async function Se(u){try{const P=e(ce).filter((ne,Te)=>Te!==u);await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/indexes/${u}`,{method:"DELETE",body:{dbKey:e(K)}}),xt("Index removed"),await Bt.waitForSchema(ne=>{const Te=ne[l.tableName];return!!(Te&&Ie(Te.indexes??[],P))})}catch(P){ot(P instanceof Error?P.message:"Failed to remove index")}}async function We(u){try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/fts`,{method:"PUT",body:{dbKey:e(K),fields:u}}),xt("FTS configuration updated"),await Bt.waitForSchema(P=>{const ne=P[l.tableName];return!!(ne&&fe(ne.fts??[],u))})}catch(P){ot(P instanceof Error?P.message:"Failed to update FTS")}}async function Pe(){t(de,!1);try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}`,{method:"DELETE",body:{dbKey:e(K)}}),xt(`Table "${l.tableName}" deleted`),await Bt.waitForSchema(u=>!(l.tableName in u)),Aa(`${za}/database/tables`)}catch(u){ot(u instanceof Error?u.message:"Failed to delete table")}}async function it(){const u=e(Y).trim();if(u)try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(l.tableName)}/rename`,{method:"PUT",body:{dbKey:e(K),newName:u}}),xt(`Table renamed to "${u}"`),await Bt.waitForSchema(P=>!(l.tableName in P)&&!!P[u],{timeoutMessage:`Table rename to "${u}" did not propagate in time.`}),await Bt.waitForTableReady(u,{namespace:e(K)}),Aa(`${za}/database/tables/${encodeURIComponent(u)}`)}catch(P){ot(P instanceof Error?P.message:"Failed to rename table")}finally{t(x,!1)}}var et=Pn(),Me=Ke(et),dt=r(Me);{var gt=u=>{var P=Cn();s(u,P)},ge=u=>{var P=Nn(),ne=r(P);a(P),g(()=>N(ne,`Table "${l.tableName??""}" not found.`)),s(u,P)},b=u=>{var P=Tn(),ne=Ke(P);{var Te=Ce=>{var at=In();s(Ce,at)};E(ne,Ce=>{e(X)||Ce(Te)})}var mt=o(ne,2);{var Et=Ce=>{var at=Dn(),Ze=Ke(at),we=r(Ze);{var v=R=>{var L=En(),j=r(L);Ft(j);var Q=o(j,2);ut(Q,{variant:"primary",size:"sm",onclick:it,children:(ke,Ee)=>{He();var Ct=je("Rename");s(ke,Ct)},$$slots:{default:!0}});var ie=o(Q,2);ut(ie,{variant:"secondary",size:"sm",onclick:()=>t(x,!1),children:(ke,Ee)=>{He();var Ct=je("Cancel");s(ke,Ct)},$$slots:{default:!0}}),a(L),ee("keydown",j,ke=>ke.key==="Enter"&&it()),$t(j,()=>e(Y),ke=>t(Y,ke)),s(R,L)},f=R=>{var L=zn(),j=Ke(L);{let ie=A(()=>!!e(w));ut(j,{variant:"secondary",size:"sm",get disabled(){return e(ie)},onclick:()=>{t(x,!0),t(Y,l.tableName,!0)},children:(ke,Ee)=>{He();var Ct=je("Rename");s(ke,Ct)},$$slots:{default:!0}})}var Q=o(j,2);ut(Q,{variant:"danger",size:"sm",onclick:()=>t(de,!0),children:(ie,ke)=>{He();var Ee=je("Delete Table");s(ie,Ee)},$$slots:{default:!0}}),s(R,L)};E(we,R=>{e(x)?R(v):R(f,!1)})}a(Ze);var O=o(Ze,2);{var k=R=>{var L=Rn(),j=r(L,!0);a(L),g(()=>N(j,e(w))),s(R,L)};E(O,R=>{e(w)&&R(k)})}s(Ce,at)};E(mt,Ce=>{e(X)&&Ce(Et)})}var St=o(mt,2),Gt=o(r(St)),Jt=r(Gt,!0);a(Gt),a(St);var Qe=o(St,2);Tr(Qe,{get tabs(){return se},get activeTab(){return e(V)},set activeTab(Ce){t(V,Ce,!0)},children:(Ce,at)=>{var Ze=Kt(),we=Ke(Ze);{var v=k=>{{let R=A(()=>!e(X));Rr(k,{get fields(){return e(oe)},get readonly(){return e(R)},onaddclick:W,oneditclick:ve,ondeleteclick:_})}},f=k=>{{let R=A(()=>Object.keys(e(oe))),L=A(()=>!e(X));mn(k,{get indexes(){return e(ce)},get availableFields(){return e(R)},get readonly(){return e(L)},onadd:G,ondelete:Se})}},O=k=>{{let R=A(()=>!e(X));Sn(k,{get ftsFields(){return e(C)},get availableFields(){return e(h)},get readonly(){return e(R)},onsave:We})}};E(we,k=>{e(V)==="columns"?k(v):e(V)==="indexes"?k(f,1):e(V)==="fts"&&k(O,2)})}s(Ce,Ze)},$$slots:{default:!0}}),g(()=>N(Jt,e(K))),s(u,P)};E(dt,u=>{U().loading?u(gt):e(D)?u(b,!1):u(ge,1)})}a(Me);var I=o(Me,2);{let u=A(()=>Object.keys(e(oe)));zr(I,{get mode(){return e(re)},get columnName(){return e(H)},get field(){return e(T)},get existingColumns(){return e(u)},onsave:Je,get open(){return e(J)},set open(P){t(J,P,!0)}})}var Oe=o(I,2);Ya(Oe,{title:"Delete Column",get message(){return`Are you sure you want to delete column "${e(M)??""}"? This action will modify edgebase.config.ts.`},confirmLabel:"Delete",confirmVariant:"danger",onconfirm:te,get open(){return e(be)},set open(u){t(be,u,!0)}});var tt=o(Oe,2);Ya(tt,{title:"Delete Table",get message(){return`Are you sure you want to delete table "${l.tableName??""}"? This will remove it from edgebase.config.ts.`},confirmLabel:"Delete Table",confirmVariant:"danger",onconfirm:Pe,get open(){return e(de)},set open(u){t(de,u,!0)}}),s(_e,et),oa(),z()}ca(["keydown"]);var jn=d("<option> </option>"),Fn=d('<div class="rt-field svelte-wqn9yg"><label class="rt-label svelte-wqn9yg">User</label> <select class="rt-select svelte-wqn9yg"><option>Select a user...</option><!></select></div>'),Ln=d('<div class="rt-field svelte-wqn9yg"><label class="rt-label svelte-wqn9yg">Auth JSON</label> <textarea class="rt-textarea svelte-wqn9yg" rows="5" spellcheck="false"></textarea></div>'),An=d('<div class="rt-result-error svelte-wqn9yg"> </div>'),qn=d('<div><div class="rt-result-header svelte-wqn9yg"><span class="rt-result-op svelte-wqn9yg"> </span> <span> </span></div> <code class="rt-result-rule svelte-wqn9yg"> </code> <!></div>'),Un=d('<div class="rt-results"><h3 class="rt-results-title svelte-wqn9yg">Results</h3> <div class="rt-results-grid svelte-wqn9yg"></div></div>'),Mn=d('<div class="rt-layout svelte-wqn9yg"><div class="rt-form svelte-wqn9yg"><fieldset class="rt-field svelte-wqn9yg"><legend class="rt-label svelte-wqn9yg">Auth Context</legend> <div class="rt-radio-group svelte-wqn9yg"><label class="rt-radio svelte-wqn9yg"><input type="radio"/> Anonymous (null)</label> <label class="rt-radio svelte-wqn9yg"><input type="radio"/> Select User</label> <label class="rt-radio svelte-wqn9yg"><input type="radio"/> Custom JSON</label></div></fieldset> <!> <!> <!></div> <!></div>');function Bn(_e,l){la(l,!0);const Z=[];let U=y(lt([])),ae=y(!1),z=y("shared"),D=y("anonymous"),V=y(""),X=y(`{
|
|
5
|
-
"id": "",
|
|
6
|
-
"email": "",
|
|
7
|
-
"role": ""
|
|
8
|
-
}`),J=lt(["read","insert","update","delete","access"]),re=y(lt([])),H=y(!1);const T=`rules-user-${Math.random().toString(36).slice(2,9)}`,be=`rules-auth-json-${Math.random().toString(36).slice(2,9)}`;yt(()=>{l.tableName&&(Bt.subscribe(G=>{const Se=G.schema[l.tableName];Se&&t(z,Se.namespace,!0)})(),t(re,[],!0),t(H,!1))}),yt(()=>{M()});async function M(){try{const te=await pt.fetch("data/users?limit=100");t(U,(te.users??[]).map(G=>({id:G.id,email:G.email??`user-${G.id.slice(0,8)}`,role:G.role})),!0)}catch{}}async function de(){t(ae,!0),t(H,!1),t(re,[],!0);let te=null;if(e(D)==="user"&&e(V)){const G=e(U).find(Se=>Se.id===e(V));G&&(te={id:G.id,email:G.email,role:G.role})}else if(e(D)==="custom")try{te=JSON.parse(e(X))}catch{ot("Invalid JSON for custom auth context"),t(ae,!1);return}try{const G=await pt.fetch("data/rules-test",{method:"POST",body:{namespace:e(z),table:l.tableName,auth:te,operations:J}});t(re,G.results??[],!0),t(H,!0)}catch(G){ot(G instanceof Error?G.message:"Test failed")}finally{t(ae,!1)}}var x=Mn(),Y=r(x),se=r(Y),oe=o(r(se),2),ce=r(oe),C=r(ce);Ft(C),C.value=C.__value="anonymous",He(),a(ce);var K=o(ce,2),w=r(K);Ft(w),w.value=w.__value="user",He(),a(K);var h=o(K,2),W=r(h);Ft(W),W.value=W.__value="custom",He(),a(h),a(oe),a(se);var ve=o(se,2);{var _=te=>{var G=Fn(),Se=r(G),We=o(Se,2),Pe=r(We);Pe.value=Pe.__value="";var it=o(Pe);$e(it,17,()=>e(U),jt,(et,Me)=>{var dt=jn(),gt=r(dt);a(dt);var ge={};g(()=>{N(gt,`${e(Me).email??""} ${e(Me).role?`(${e(Me).role})`:""}`),ge!==(ge=e(Me).id)&&(dt.value=(dt.__value=e(Me).id)??"")}),s(et,dt)}),a(We),a(G),g(()=>{xe(Se,"for",T),xe(We,"id",T)}),va(We,()=>e(V),et=>t(V,et)),s(te,G)};E(ve,te=>{e(D)==="user"&&te(_)})}var S=o(ve,2);{var ue=te=>{var G=Ln(),Se=r(G),We=o(Se,2);Ra(We),a(G),g(()=>{xe(Se,"for",be),xe(We,"id",be)}),$t(We,()=>e(X),Pe=>t(X,Pe)),s(te,G)};E(S,te=>{e(D)==="custom"&&te(ue)})}var Ie=o(S,2);ut(Ie,{variant:"primary",onclick:de,get loading(){return e(ae)},children:(te,G)=>{He();var Se=je("Test Rules");s(te,Se)},$$slots:{default:!0}}),a(Y);var fe=o(Y,2);{var Je=te=>{var G=Un(),Se=o(r(G),2);$e(Se,21,()=>e(re),jt,(We,Pe)=>{var it=qn();let et;var Me=r(it),dt=r(Me),gt=r(dt,!0);a(dt);var ge=o(dt,2);let b;var I=r(ge,!0);a(ge),a(Me);var Oe=o(Me,2),tt=r(Oe,!0);a(Oe);var u=o(Oe,2);{var P=ne=>{var Te=An(),mt=r(Te,!0);a(Te),g(()=>N(mt,e(Pe).error)),s(ne,Te)};E(u,ne=>{e(Pe).error&&ne(P)})}a(it),g(()=>{et=It(it,1,"rt-result-card svelte-wqn9yg",null,et,{"rt-result-card--allowed":e(Pe).allowed,"rt-result-card--denied":!e(Pe).allowed}),N(gt,e(Pe).operation),b=It(ge,1,"rt-result-badge svelte-wqn9yg",null,b,{"rt-badge--allowed":e(Pe).allowed,"rt-badge--denied":!e(Pe).allowed}),N(I,e(Pe).allowed?"✔ Allowed":"✘ Denied"),N(tt,e(Pe).rule)}),s(We,it)}),a(Se),a(G),s(te,G)};E(fe,te=>{e(H)&&te(Je)})}a(x),Fa(Z,[],C,()=>e(D),te=>t(D,te)),Fa(Z,[],w,()=>e(D),te=>t(D,te)),Fa(Z,[],W,()=>e(D),te=>t(D,te)),s(_e,x),oa()}var Kn=d("<button> </button>"),Jn=d("<button> </button>"),Vn=d('<div class="sdk-snippets svelte-hdcl64"><div class="lang-tabs svelte-hdcl64"></div> <div class="op-tabs svelte-hdcl64"></div> <div class="code-block svelte-hdcl64"><button class="copy-btn svelte-hdcl64" title="Copy to clipboard"><svg width="14" height="14" viewBox="0 0 16 16" fill="none"><rect x="5" y="5" width="9" height="9" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M11 5V3C11 2.448 10.552 2 10 2H3C2.448 2 2 2.448 2 3V10C2 10.552 2.448 11 3 11H5" stroke="currentColor" stroke-width="1.5"></path></svg> Copy</button> <pre class="code-pre svelte-hdcl64"><code> </code></pre></div></div>');function Hn(_e,l){la(l,!0);const Z=()=>ma(Bt,"$schemaStore",U),[U,ae]=Da();let z=y("javascript"),D=y("query");const V=[{id:"javascript",label:"JavaScript"},{id:"python",label:"Python"},{id:"dart",label:"Dart"},{id:"swift",label:"Swift"},{id:"kotlin",label:"Kotlin"}],X=[{id:"query",label:"Query"},{id:"insert",label:"Insert"},{id:"update",label:"Update"},{id:"delete",label:"Delete"},{id:"subscribe",label:"Subscribe"}];let J=A(()=>(()=>{const w=Z().schema[l.tableName];return(w==null?void 0:w.fields)??{}})()),re=A(()=>Object.keys(e(J)).filter(w=>w!=="id"&&w!=="createdAt"&&w!=="updatedAt"));function H(w,h){return h.type==="number"||h.type==="integer"||h.type==="float"?"42":h.type==="boolean"?"true":h.type==="json"?'{"key": "value"}':h.type==="datetime"||h.type==="date"?'"2024-01-01T00:00:00Z"':h.enum&&h.enum.length>0?`"${h.enum[0]}"`:`"sample ${w}"`}function T(w){const h=e(re).slice(0,4).map(W=>{const ve=e(J)[W],_=H(W,ve);return w==="python"?` "${W}": ${_}`:w==="dart"?` "${W}": ${_}`:w==="swift"?` "${W}": ${_}`:w==="kotlin"?` "${W}" to ${_}`:` ${W}: ${_}`});return h.join(`,
|
|
9
|
-
`)}let be=A(()=>(()=>{var ve;const w=l.tableName,h=T(e(z));return((ve={javascript:{query:`import { createClient } from '@edge-base/web';
|
|
10
|
-
|
|
11
|
-
const client = createClient('YOUR_URL');
|
|
12
|
-
|
|
13
|
-
const result = await client
|
|
14
|
-
.db('shared').table('${w}')
|
|
15
|
-
.limit(20)
|
|
16
|
-
.getList();
|
|
17
|
-
|
|
18
|
-
console.log(result.items);`,insert:`const record = await client
|
|
19
|
-
.db('shared').table('${w}')
|
|
20
|
-
.insert({
|
|
21
|
-
${h}
|
|
22
|
-
});`,update:`const updated = await client
|
|
23
|
-
.db('shared').table('${w}')
|
|
24
|
-
.update('RECORD_ID', {
|
|
25
|
-
${h}
|
|
26
|
-
});`,delete:`await client
|
|
27
|
-
.db('shared').table('${w}')
|
|
28
|
-
.delete('RECORD_ID');`,subscribe:`const unsubscribe = client
|
|
29
|
-
.db('shared').table('${w}')
|
|
30
|
-
.onSnapshot((snapshot) => {
|
|
31
|
-
console.log(snapshot.items);
|
|
32
|
-
console.log(snapshot.changes);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
// Later: unsubscribe();`},python:{query:`from edgebase import EdgeBase
|
|
36
|
-
|
|
37
|
-
client = EdgeBase("YOUR_URL")
|
|
38
|
-
|
|
39
|
-
result = client.db("shared").table("${w}").limit(20).get_list()
|
|
40
|
-
print(result.items)`,insert:`record = client.db("shared").table("${w}").insert({
|
|
41
|
-
${h}
|
|
42
|
-
})`,update:`updated = client.db("shared").table("${w}").doc("RECORD_ID").update({
|
|
43
|
-
${h}
|
|
44
|
-
})`,delete:`client.db("shared").table("${w}").doc("RECORD_ID").delete()`,subscribe:`def on_change(change):
|
|
45
|
-
print(change)
|
|
46
|
-
|
|
47
|
-
unsub = client.db("shared").table("${w}").doc("RECORD_ID").on_snapshot(on_change)
|
|
48
|
-
|
|
49
|
-
# Later: unsub()`},dart:{query:`import 'package:edgebase/edgebase.dart';
|
|
50
|
-
|
|
51
|
-
final client = EdgeBase.client('YOUR_URL');
|
|
52
|
-
|
|
53
|
-
final result = await client
|
|
54
|
-
.db('shared').table('${w}')
|
|
55
|
-
.limit(20)
|
|
56
|
-
.getList();
|
|
57
|
-
|
|
58
|
-
print(result.items);`,insert:`final record = await client
|
|
59
|
-
.db('shared').table('${w}')
|
|
60
|
-
.insert({
|
|
61
|
-
${h}
|
|
62
|
-
});`,update:`final updated = await client
|
|
63
|
-
.db('shared').table('${w}')
|
|
64
|
-
.doc('RECORD_ID')
|
|
65
|
-
.update({
|
|
66
|
-
${h}
|
|
67
|
-
});`,delete:`await client
|
|
68
|
-
.db('shared').table('${w}')
|
|
69
|
-
.doc('RECORD_ID')
|
|
70
|
-
.delete();`,subscribe:`final stream = client
|
|
71
|
-
.db('shared').table('${w}')
|
|
72
|
-
.onSnapshot();
|
|
73
|
-
|
|
74
|
-
stream.listen((change) {
|
|
75
|
-
print('\${change.event}: \${change.record}');
|
|
76
|
-
});`},swift:{query:`import EdgeBase
|
|
77
|
-
|
|
78
|
-
let client = EdgeBaseClient("YOUR_URL")
|
|
79
|
-
|
|
80
|
-
let result = try await client
|
|
81
|
-
.db("shared").table("${w}")
|
|
82
|
-
.limit(20)
|
|
83
|
-
.getList()
|
|
84
|
-
|
|
85
|
-
print(result.items)`,insert:`let record = try await client
|
|
86
|
-
.db("shared").table("${w}")
|
|
87
|
-
.insert([
|
|
88
|
-
${h}
|
|
89
|
-
])`,update:`let updated = try await client
|
|
90
|
-
.db("shared").table("${w}")
|
|
91
|
-
.doc("RECORD_ID")
|
|
92
|
-
.update([
|
|
93
|
-
${h}
|
|
94
|
-
])`,delete:`try await client
|
|
95
|
-
.db("shared").table("${w}")
|
|
96
|
-
.doc("RECORD_ID")
|
|
97
|
-
.delete()`,subscribe:`let stream = client
|
|
98
|
-
.db("shared").table("${w}")
|
|
99
|
-
.onSnapshot()
|
|
100
|
-
|
|
101
|
-
for await change in stream {
|
|
102
|
-
print("\\(change.event): \\(change.record)")
|
|
103
|
-
}`},kotlin:{query:`import dev.edgebase.sdk.client.ClientEdgeBase
|
|
104
|
-
|
|
105
|
-
val client = ClientEdgeBase("YOUR_URL")
|
|
106
|
-
|
|
107
|
-
val result = client
|
|
108
|
-
.db("shared").table("${w}")
|
|
109
|
-
.limit(20)
|
|
110
|
-
.getList()
|
|
111
|
-
|
|
112
|
-
println(result.items)`,insert:`val record = client
|
|
113
|
-
.db("shared").table("${w}")
|
|
114
|
-
.insert(mapOf(
|
|
115
|
-
${h}
|
|
116
|
-
))`,update:`val updated = client
|
|
117
|
-
.db("shared").table("${w}")
|
|
118
|
-
.update("RECORD_ID", mapOf(
|
|
119
|
-
${h}
|
|
120
|
-
))`,delete:`client
|
|
121
|
-
.db("shared").table("${w}")
|
|
122
|
-
.delete("RECORD_ID")`,subscribe:`val flow = client
|
|
123
|
-
.db("shared").table("${w}")
|
|
124
|
-
.onSnapshot()
|
|
125
|
-
|
|
126
|
-
flow.collect { change ->
|
|
127
|
-
println("\${change.event}: \${change.record}")
|
|
128
|
-
}`}}[e(z)])==null?void 0:ve[e(D)])??""})());async function M(){try{await navigator.clipboard.writeText(e(be)),xt("Copied to clipboard")}catch{}}var de=Vn(),x=r(de);$e(x,21,()=>V,jt,(w,h)=>{var W=Kn();let ve;var _=r(W,!0);a(W),g(()=>{ve=It(W,1,"lang-tab svelte-hdcl64",null,ve,{"lang-tab--active":e(z)===e(h).id}),N(_,e(h).label)}),ee("click",W,()=>t(z,e(h).id,!0)),s(w,W)}),a(x);var Y=o(x,2);$e(Y,21,()=>X,jt,(w,h)=>{var W=Jn();let ve;var _=r(W,!0);a(W),g(()=>{ve=It(W,1,"op-tab svelte-hdcl64",null,ve,{"op-tab--active":e(D)===e(h).id}),N(_,e(h).label)}),ee("click",W,()=>t(D,e(h).id,!0)),s(w,W)}),a(Y);var se=o(Y,2),oe=r(se),ce=o(oe,2),C=r(ce),K=r(C,!0);a(C),a(ce),a(se),a(de),g(()=>N(K,e(be))),ee("click",oe,M),s(_e,de),oa(),ae()}ca(["click"]);const ar="edgebase_admin_recent_instances",Wn=6;function rr(){try{const _e=localStorage.getItem(ar);if(!_e)return{};const l=JSON.parse(_e);return l&&typeof l=="object"?l:{}}catch{return{}}}function Gn(_e){try{localStorage.setItem(ar,JSON.stringify(_e))}catch{}}function Yn(_e){var Z,U;const l=_e.id.trim();return l?{id:l,label:((Z=_e.label)==null?void 0:Z.trim())||void 0,description:((U=_e.description)==null?void 0:U.trim())||void 0}:null}function Xa(_e){return(rr()[_e]??[]).slice().sort((U,ae)=>ae.lastUsedAt-U.lastUsedAt).map(({id:U,label:ae,description:z})=>({id:U,label:ae,description:z}))}function Qn(_e,l){const Z=Yn(l);if(!Z)return;const U=rr(),ae=U[_e]??[],z=[{...Z,lastUsedAt:Date.now()},...ae.filter(D=>D.id!==Z.id)].slice(0,Wn);Gn({...U,[_e]:z})}var Zn=d("<span><!></span>"),Xn=d('<div class="table-header__hint svelte-11vdap9">Start <code class="svelte-11vdap9">pnpm dev</code> to enable DB block upgrades.</div>'),$n=d('<input id="upgrade-env-key" class="upgrade-modal__input svelte-11vdap9"/> <p class="upgrade-modal__hint svelte-11vdap9">Only change this if you already use a specific Postgres env key name.</p>',1),el=d("<option> </option>"),tl=d("<option> </option>"),al=d('<p class="upgrade-modal__hint upgrade-modal__hint--error svelte-11vdap9"> </p>'),rl=d('<p class="upgrade-modal__hint svelte-11vdap9">No existing Neon projects were found.</p>'),sl=d('<p class="upgrade-modal__hint svelte-11vdap9">EdgeBase will use the selected project, restart on Postgres, and restore every table in this block.</p>'),nl=d("<li> </li>"),ll=d('<div class="upgrade-modal__status svelte-11vdap9" role="status" aria-live="polite"><div class="upgrade-modal__status-title svelte-11vdap9"> </div> <p class="upgrade-modal__status-copy svelte-11vdap9">EdgeBase is migrating the full <strong> </strong> database block. This can take a while because every table is exported, the worker restarts on Postgres, and then the block is restored.</p> <div class="upgrade-modal__status-current svelte-11vdap9"> </div> <ol class="upgrade-modal__steps upgrade-modal__steps--status svelte-11vdap9"></ol></div>'),ol=d('<div class="upgrade-modal svelte-11vdap9"><p class="upgrade-modal__text svelte-11vdap9">This migrates the entire <strong> </strong> database block from D1 to Postgres. The current table is just the entry point. Every table in this block is exported, the dev worker restarts on Postgres, and then the full block is restored.</p> <div class="upgrade-modal__notice svelte-11vdap9"><div class="upgrade-modal__notice-title svelte-11vdap9">What happens during this migration</div> <ol class="upgrade-modal__steps svelte-11vdap9"><li>Export all tables from the current D1-backed database block.</li> <li>Connect an existing Neon project or create a new one.</li> <li>Restart the dev worker with `provider: \'postgres\'`.</li> <li>Restore every table in the database block into Postgres.</li></ol></div> <div class="upgrade-modal__field svelte-11vdap9"><label class="upgrade-modal__label svelte-11vdap9" for="upgrade-env-key-display">Automatic Postgres Env Key</label> <div id="upgrade-env-key-display" class="upgrade-modal__static svelte-11vdap9"><code class="svelte-11vdap9"> </code></div> <p class="upgrade-modal__hint svelte-11vdap9">EdgeBase will write this key during migration. Only override it if you already use a specific Postgres env key name.</p> <div class="upgrade-modal__actions-row svelte-11vdap9"><!></div> <!></div> <div class="upgrade-modal__choices svelte-11vdap9"><div class="upgrade-modal__choices-copy svelte-11vdap9"><div class="upgrade-modal__notice-title svelte-11vdap9">Neon Setup</div> <p class="upgrade-modal__hint svelte-11vdap9">Both options migrate the same database block and use the env key above. Pick the path that matches whether the Neon project already exists.</p></div> <div class="upgrade-modal__choice-grid svelte-11vdap9"><section class="upgrade-modal__choice-card svelte-11vdap9"><div class="upgrade-modal__choice-header svelte-11vdap9"><div class="upgrade-modal__choice-eyebrow svelte-11vdap9">Existing project</div> <h3 class="upgrade-modal__choice-title svelte-11vdap9">1. Connect an existing Neon project</h3> <p class="upgrade-modal__hint svelte-11vdap9">Best when the Neon project already exists in your account.</p></div> <label class="upgrade-modal__label svelte-11vdap9" for="upgrade-neon-project">Existing Neon Project</label> <select id="upgrade-neon-project" class="upgrade-modal__select svelte-11vdap9"><!></select> <div class="upgrade-modal__actions-row svelte-11vdap9"><!></div> <!> <div class="upgrade-modal__actions-row upgrade-modal__choice-actions svelte-11vdap9"><!></div></section> <section class="upgrade-modal__choice-card svelte-11vdap9"><div class="upgrade-modal__choice-header svelte-11vdap9"><div class="upgrade-modal__choice-eyebrow svelte-11vdap9">Provision new project</div> <h3 class="upgrade-modal__choice-title svelte-11vdap9">2. Create a new Neon project</h3> <p class="upgrade-modal__hint svelte-11vdap9">Best when you want EdgeBase to provision Neon before migrating.</p></div> <label class="upgrade-modal__label svelte-11vdap9" for="upgrade-project-name">New Neon Project Name</label> <input id="upgrade-project-name" class="upgrade-modal__input svelte-11vdap9"/> <p class="upgrade-modal__hint svelte-11vdap9">EdgeBase will try this name first, then append a suffix if Neon already has one.</p> <div class="upgrade-modal__actions-row upgrade-modal__choice-actions svelte-11vdap9"><!></div></section></div></div> <!></div>'),il=d('<button class="target-bar__button svelte-11vdap9">Clear</button>'),dl=d('<span class="target-chip__meta svelte-11vdap9"> </span>'),vl=d('<button class="target-chip svelte-11vdap9" type="button"><span class="target-chip__label svelte-11vdap9"> </span> <!></button>'),cl=d('<div class="target-bar__section svelte-11vdap9"><div class="target-bar__section-label svelte-11vdap9"> </div> <div class="target-bar__chip-row svelte-11vdap9"></div></div>'),ul=d('<span class="target-chip__meta svelte-11vdap9"> </span>'),fl=d('<button class="target-chip svelte-11vdap9" type="button"><span class="target-chip__label svelte-11vdap9"> </span> <!></button>'),pl=d('<div class="target-bar__section svelte-11vdap9"><div class="target-bar__section-label svelte-11vdap9"> </div> <div class="target-bar__chip-row svelte-11vdap9"></div></div>'),_l=d('<div class="target-bar__status svelte-11vdap9">Loading instance suggestions...</div>'),bl=d('<div class="target-bar__status target-bar__status--error svelte-11vdap9"> </div>'),gl=d('<div class="target-bar__suggestions svelte-11vdap9"><!> <!> <!></div>'),ml=d('<div class="target-bar svelte-11vdap9"><div class="target-bar__copy svelte-11vdap9"><div class="target-bar__title svelte-11vdap9"> </div> <div class="target-bar__description svelte-11vdap9"> </div></div> <div class="target-bar__controls svelte-11vdap9"><div class="target-bar__field svelte-11vdap9"><label class="target-bar__field-label svelte-11vdap9" for="database-target-input"> </label> <input id="database-target-input" class="target-bar__input svelte-11vdap9" type="text" maxlength="128"/></div> <button class="target-bar__button target-bar__button--primary svelte-11vdap9"> </button> <!></div> <!></div>'),hl=d("<button> </button>"),yl=d('<div class="target-empty svelte-11vdap9"><h3 class="svelte-11vdap9"> </h3> <p class="svelte-11vdap9"> </p></div>'),wl=d('<div class="target-empty svelte-11vdap9"><h3 class="svelte-11vdap9"> </h3> <p class="svelte-11vdap9"> </p></div>'),kl=d('<div class="target-empty svelte-11vdap9"><h3 class="svelte-11vdap9">Query tools unavailable</h3> <p class="svelte-11vdap9"> </p></div>'),xl=d('<div class="tab-loading svelte-11vdap9">Loading query tools...</div>'),Sl=d('<div class="table-detail svelte-11vdap9"><div class="table-header svelte-11vdap9"><div class="table-header__meta svelte-11vdap9"><h2 class="table-title svelte-11vdap9"> </h2> <div class="table-badges svelte-11vdap9"><span class="table-badge svelte-11vdap9"> </span> <span class="table-badge svelte-11vdap9"> </span> <span> </span></div></div> <div class="table-header__actions svelte-11vdap9"><!> <a class="erd-link svelte-11vdap9" title="View ERD Diagram"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="2" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"></rect><rect x="10" y="10" width="5" height="4" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M6 4H8.5V12H10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg> ERD</a> <a class="erd-link svelte-11vdap9" target="_blank" rel="noreferrer" title="Open database docs"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 2H10L13 5V14H3V2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M10 2V5H13" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path><path d="M6 8H10M6 10.5H9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg> Docs</a> <!></div></div> <!> <!> <div class="tab-bar svelte-11vdap9"></div> <div class="tab-content svelte-11vdap9"><!></div></div>');function $l(_e,l){la(l,!0);const Z=()=>ma(Ir,"$page",z),U=()=>ma(Bt,"$schemaStore",z),ae=()=>ma(tr,"$devInfoStore",z),[z,D]=Da();let V=A(()=>Z().params.table??""),X=A(()=>U().schema[e(V)]??void 0),J=A(()=>{var i;return((i=e(X))==null?void 0:i.namespace)??""}),re=A(()=>{var i;return((i=e(X))==null?void 0:i.provider)??"do"}),H=A(()=>{var i;return!!((i=e(X))!=null&&i.dynamic)}),T=A(()=>{var i;return(i=e(X))==null?void 0:i.instanceDiscovery}),be=A(()=>Va(Z().url.searchParams.get("instance"))),M=y("records");function de(i){const p=i.get("tab");return e(X)?p==="sql"?"query":p==="records"||p==="query"||p==="schema"||p==="rules"||p==="sdk"?p:e(H)&&!e(be)?"schema":"records":p==="query"||p==="sql"?"query":"schema"}yt(()=>{t(M,de(Z().url.searchParams),!0)});let x=y(""),Y=y(!1),se=y(""),oe=y(lt([])),ce=y(lt([])),C=y(!1),K=y(""),w=y(!1),h=y(null),W=y(0),ve=y(""),_=y(lt([])),S=y(!1),ue=y(!1),Ie=y(""),fe=y(""),Je=y(null),te=A(()=>ae().devMode);yt(()=>{t(x,e(be)??"",!0)}),yt(()=>{if(typeof window>"u"||!e(H)||!e(J)){t(ce,[],!0);return}t(ce,Xa(e(J)),!0)}),yt(()=>{var me;if(!e(H)||!e(J)){t(Y,!1),t(se,""),t(oe,[],!0);return}if(((me=e(T))==null?void 0:me.source)==="manual"){t(Y,!1),t(se,""),t(oe,[],!0);return}const i=e(x).trim();let p=!1;const F=i?160:0;t(Y,!0),t(se,"");const q=window.setTimeout(async()=>{try{const he=new URLSearchParams({limit:"8"});i&&he.set("q",i);const Ae=await pt.fetch(`data/namespaces/${encodeURIComponent(e(J))}/instances?${he.toString()}`);if(p)return;t(oe,Ae.items??[],!0),t(se,"")}catch(he){if(p)return;t(oe,[],!0),t(se,he instanceof Error?he.message:"Failed to load instance suggestions",!0)}finally{p||t(Y,!1)}},F);return()=>{p=!0,window.clearTimeout(q)}});function G(i){return i==="postgres"||i==="neon"?"PG":i==="d1"?"D1":"DO"}function Se(i){const p=i.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return p?`DB_POSTGRES_${p}_URL`:"DB_POSTGRES_SHARED_URL"}function We(i){return i.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"edgebase-db"}yt(()=>{e(J)&&(!e(C)||!e(K).trim())&&!e(w)&&t(K,Se(e(J)),!0)}),yt(()=>{dt()&&!e(ue)&&!e(S)&&I()});function Pe(){return t(Je,e(Je)??lr(()=>import("./6oMK_164.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]),import.meta.url),!0),e(Je)}yt(()=>{e(M)==="query"&&Pe()});function it(i){return i?"Per-tenant DB":"Single DB"}function et(){return e(w)?e(K).trim()||Se(e(J)):Se(e(J))}function Me(){return e(ve).trim()||We(e(J))}function dt(){return e(te)&>()}function gt(){return!e(H)&&e(re)==="d1"}function ge(){return gt()?e(te)?"":"Database block upgrades require dev mode with the schema sidecar. Start `pnpm dev` to enable Neon/Postgres migration.":""}function b(){t(w,!e(w)),e(w)&&!e(K).trim()&&t(K,Se(e(J)),!0)}yt(()=>{e(J)&&(e(ve).trim()||t(ve,We(e(J)),!0))}),yt(()=>{if(!e(h)||typeof window>"u"){t(W,0);return}t(W,0);const i=[window.setTimeout(()=>t(W,1),1200),window.setTimeout(()=>t(W,2),4200),window.setTimeout(()=>t(W,3),8200)];return()=>{for(const p of i)window.clearTimeout(p)}});async function I(i=!1){var p;if(!(!i&&(e(ue)||e(S)))){t(S,!0),t(Ie,"");try{const F=await pt.schemaMutation(i?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(_,F.items??[],!0),t(fe,((p=e(_)[0])==null?void 0:p.projectId)??"",!0),t(ue,!0)}catch(F){t(Ie,F instanceof Error?F.message:"Failed to load Neon projects.",!0)}finally{t(S,!1)}}}function Oe(i){var F;return((F=i==null?void 0:i.targetLabel)==null?void 0:F.trim())||"Target"}function tt(i){return`Choose ${Oe(i)}`}function u(i){return`${Oe(i)} ID`}function P(i){return`Paste ${Oe(i).toLowerCase()} ID`}function ne(i){return Oe(i)==="Target"?"Apply":"Open"}function Te(i){const p=i==null?void 0:i.helperText;return p||`Pick a ${Oe(i).toLowerCase()} to view this table's records or run queries.`}function mt(i){return`${tt(i)} First`}function Et(i,p){const F=Oe(i).toLowerCase();return p==="records"?`Select a ${F} above to view records for this table.`:`Select a ${F} above to run queries for this table.`}function St(i){const p=Oe(i);return p==="Target"?"Recent":`Recent ${p}s`}function Gt(i){const p=Oe(i);return p==="Target"?"Suggestions":`Suggested ${p}s`}async function Jt(i){const p=new URL(Z().url);i(p.searchParams),await Aa(`${p.pathname}${p.search}`,{replaceState:!0,keepFocus:!0,noScroll:!0})}function Qe(i){i==="query"&&Pe(),t(M,i,!0),Jt(p=>{i==="records"?p.delete("tab"):p.set("tab",i)})}function Ce(i){return e(oe).find(p=>p.id===i)??e(ce).find(p=>p.id===i)}function at(i){typeof window>"u"||!e(J)||(Qn(e(J),i),t(ce,Xa(e(J)),!0))}function Ze(i){const p=Va((i==null?void 0:i.id)??e(x));Jt(F=>{if(p){const q=i??Ce(p)??{id:p};at(q),F.set("instance",p),e(H)&&e(M)==="schema"&&F.delete("tab")}else F.delete("instance"),e(H)&&e(M)==="records"&&F.set("tab","schema")})}function we(){t(x,""),Ze()}function v(i){t(x,i.id,!0),Ze(i)}async function f(i){if(e(J)){if(i==="reuse"&&!e(fe)){ot(e(Ie)||"Choose an existing Neon project first, or create a new one.");return}i==="create"&&Me(),t(h,i,!0);try{await pt.schemaMutation("integrations/neon/upgrade",{method:"POST",body:{namespace:e(J),projectId:i==="reuse"?e(fe):void 0,projectName:i==="create"?Me():void 0,mode:i,...e(w)?{envKey:et()}:{}}}),await Bt.loadSchema({silent:!0}),t(C,!1),xt(`"${e(J)}" upgraded from D1 to Postgres`)}catch(p){const F=p instanceof Error?p.message:"Failed to upgrade database block.";ot(F)}finally{t(h,null)}}}function O(){return!e(S)&&e(_).length>0&&!!e(fe)}function k(){return e(h)==="reuse"?"Migrating Database Block to Postgres":e(h)==="create"?"Creating Neon Project and Migrating Database Block":"Database Block Migration"}function R(i){return i<e(W)?"done":i===e(W)?"active":"pending"}function L(){return[{label:`Export every table in the "${e(J)}" database block from D1`,state:R(0)},{label:e(h)==="create"?`Create the Neon project "${Me()}" and write the Postgres env key`:"Connect the selected Neon project and write the Postgres env key",state:R(1)},{label:"Restart the dev worker on Postgres",state:R(2)},{label:`Restore all rows back into the "${e(J)}" database block`,state:R(3)}]}function j(){var i;return((i=L()[e(W)])==null?void 0:i.label)??"Preparing migration..."}let Q=A(()=>{const i=new Set(e(ce).map(p=>p.id));return e(oe).filter(p=>!i.has(p.id))});const ie=[{id:"records",label:"Records"},{id:"query",label:"Query"},{id:"schema",label:"Schema"},{id:"rules",label:"Rules"},{id:"sdk",label:"SDK"}];var ke=Sl(),Ee=r(ke),Ct=r(Ee),zt=r(Ct),rt=r(zt,!0);a(zt);var _t=o(zt,2),Rt=r(_t),ha=r(Rt,!0);a(Rt);var ia=o(Rt,2),ya=r(ia,!0);a(ia);var ua=o(ia,2);let fa;var wa=r(ua,!0);a(ua),a(_t),a(Ct);var pa=o(Ct,2),Yt=r(pa);{var Vt=i=>{ut(i,{variant:"secondary",size:"sm",onclick:()=>t(C,!0),children:(p,F)=>{He();var q=je("Upgrade to Postgres");s(p,q)},$$slots:{default:!0}})},Dt=A(()=>dt()),ea=i=>{var p=Zn(),F=r(p);ut(F,{variant:"secondary",size:"sm",disabled:!0,children:(q,me)=>{He();var he=je("Upgrade to Postgres");s(q,he)},$$slots:{default:!0}}),a(p),g(q=>xe(p,"title",q),[ge]),s(i,p)},ba=A(()=>gt());E(Yt,i=>{e(Dt)?i(Vt):e(ba)&&i(ea,1)})}var Qt=o(Yt,2),sa=o(Qt,2),xa=o(sa,2);{var ga=i=>{var p=Xn();s(i,p)},n=A(()=>ge());E(xa,i=>{e(n)&&i(ga)})}a(pa),a(Ee);var c=o(Ee,2);er(c,{title:"Migrate Database Block to Postgres",maxWidth:"560px",get open(){return e(C)},set open(p){t(C,p,!0)},footer:p=>{{let F=A(()=>e(h)!==null);ut(p,{variant:"secondary",get disabled(){return e(F)},onclick:()=>t(C,!1),children:(q,me)=>{He();var he=je("Cancel");s(q,he)},$$slots:{default:!0}})}},children:(p,F)=>{var q=ol(),me=r(q),he=o(r(me)),Ae=r(he,!0);a(he),He(),a(me);var Be=o(me,4),qe=o(r(Be),2),Ue=r(qe),Le=r(Ue,!0);a(Ue),a(qe);var ze=o(qe,4),Fe=r(ze);{let pe=A(()=>e(h)!==null);ut(Fe,{variant:"ghost",onclick:b,get disabled(){return e(pe)},children:(Ne,ct)=>{He();var Ye=je();g(()=>N(Ye,e(w)?"Hide Env Key Override":"Customize Env Key")),s(Ne,Ye)},$$slots:{default:!0}})}a(ze);var Ve=o(ze,2);{var vt=pe=>{var Ne=$n(),ct=Ke(Ne);Ft(ct),He(2),g(Ye=>xe(ct,"placeholder",Ye),[()=>Se(e(J))]),$t(ct,()=>e(K),Ye=>t(K,Ye)),s(pe,Ne)};E(Ve,pe=>{e(w)&&pe(vt)})}a(Be);var qt=o(Be,2),Zt=o(r(qt),2),ta=r(Zt),Re=o(r(ta),4),st=r(Re);{var ye=pe=>{var Ne=el(),ct=r(Ne,!0);a(Ne),Ne.value=Ne.__value="",g(()=>N(ct,e(S)?"Loading Neon projects...":"No Neon projects found")),s(pe,Ne)},De=pe=>{var Ne=Kt(),ct=Ke(Ne);$e(ct,17,()=>e(_),Ye=>Ye.projectId,(Ye,Nt)=>{var Xt=tl(),Ta=r(Xt);a(Xt);var ka={};g(()=>{N(Ta,`${e(Nt).projectName??""} (${e(Nt).orgName??""})`),ka!==(ka=e(Nt).projectId)&&(Xt.value=(Xt.__value=e(Nt).projectId)??"")}),s(Ye,Xt)}),s(pe,Ne)};E(st,pe=>{e(_).length===0?pe(ye):pe(De,!1)})}a(Re);var Ge=o(Re,2),Ut=r(Ge);ut(Ut,{variant:"ghost",onclick:()=>I(!0),get loading(){return e(S)},children:(pe,Ne)=>{He();var ct=je("Refresh Projects");s(pe,ct)},$$slots:{default:!0}}),a(Ge);var Pt=o(Ge,2);{var Wt=pe=>{var Ne=al(),ct=r(Ne,!0);a(Ne),g(()=>N(ct,e(Ie))),s(pe,Ne)},aa=pe=>{var Ne=rl();s(pe,Ne)},bt=pe=>{var Ne=sl();s(pe,Ne)};E(Pt,pe=>{e(Ie)?pe(Wt):!e(S)&&e(_).length===0?pe(aa,1):e(S)||pe(bt,2)})}var ft=o(Pt,2),nt=r(ft);{let pe=A(()=>!O()||e(h)!==null);ut(nt,{variant:"secondary",get disabled(){return e(pe)},onclick:()=>f("reuse"),children:(Ne,ct)=>{He();var Ye=je();g(()=>N(Ye,e(h)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),s(Ne,Ye)},$$slots:{default:!0}})}a(ft),a(ta);var wt=o(ta,2),kt=o(r(wt),4);Ft(kt);var Mt=o(kt,4),Ot=r(Mt);{let pe=A(()=>e(h)!==null);ut(Ot,{variant:"primary",get disabled(){return e(pe)},onclick:()=>f("create"),children:(Ne,ct)=>{He();var Ye=je();g(()=>N(Ye,e(h)==="create"?"Creating Neon Project...":"Create New Neon Project")),s(Ne,Ye)},$$slots:{default:!0}})}a(Mt),a(wt),a(Zt),a(qt);var ra=o(qt,2);{var da=pe=>{var Ne=ll(),ct=r(Ne),Ye=r(ct,!0);a(ct);var Nt=o(ct,2),Xt=o(r(Nt)),Ta=r(Xt,!0);a(Xt),He(),a(Nt);var ka=o(Nt,2),sr=r(ka);a(ka);var Ua=o(ka,2);$e(Ua,21,L,jt,(Pa,Ca)=>{var Na=nl(),nr=r(Na,!0);a(Na),g(()=>{It(Na,1,`upgrade-modal__step upgrade-modal__step--${e(Ca).state}`,"svelte-11vdap9"),N(nr,e(Ca).label)}),s(Pa,Na)}),a(Ua),a(Ne),g((Pa,Ca)=>{N(Ye,Pa),N(Ta,e(J)),N(sr,`Current step: ${Ca??""}`)},[k,j]),s(pe,Ne)};E(ra,pe=>{e(h)&&pe(da)})}a(q),g((pe,Ne)=>{N(Ae,e(J)),N(Le,pe),Re.disabled=e(S)||e(_).length===0,xe(kt,"placeholder",Ne),kt.disabled=e(h)!==null},[et,()=>We(e(J))]),va(Re,()=>e(fe),pe=>t(fe,pe)),$t(kt,()=>e(ve),pe=>t(ve,pe)),s(p,q)},$$slots:{footer:!0,default:!0}});var m=o(c,2);{var B=i=>{var p=ml(),F=r(p),q=r(F),me=r(q,!0);a(q);var he=o(q,2),Ae=r(he,!0);a(he),a(F);var Be=o(F,2),qe=r(Be),Ue=r(qe),Le=r(Ue,!0);a(Ue);var ze=o(Ue,2);Ft(ze),a(qe);var Fe=o(qe,2),Ve=r(Fe,!0);a(Fe);var vt=o(Fe,2);{var qt=Re=>{var st=il();ee("click",st,we),s(Re,st)};E(vt,Re=>{e(be)&&Re(qt)})}a(Be);var Zt=o(Be,2);{var ta=Re=>{var st=gl(),ye=r(st);{var De=bt=>{var ft=cl(),nt=r(ft),wt=r(nt,!0);a(nt);var kt=o(nt,2);$e(kt,21,()=>e(ce),Mt=>Mt.id,(Mt,Ot)=>{var ra=vl(),da=r(ra),pe=r(da,!0);a(da);var Ne=o(da,2);{var ct=Ye=>{var Nt=dl(),Xt=r(Nt,!0);a(Nt),g(()=>N(Xt,e(Ot).id)),s(Ye,Nt)};E(Ne,Ye=>{e(Ot).label&&Ye(ct)})}a(ra),g(()=>N(pe,e(Ot).label??e(Ot).id)),ee("click",ra,()=>v(e(Ot))),s(Mt,ra)}),a(kt),a(ft),g(Mt=>N(wt,Mt),[()=>St(e(T))]),s(bt,ft)};E(ye,bt=>{e(ce).length>0&&bt(De)})}var Ge=o(ye,2);{var Ut=bt=>{var ft=pl(),nt=r(ft),wt=r(nt,!0);a(nt);var kt=o(nt,2);$e(kt,21,()=>e(Q),Mt=>Mt.id,(Mt,Ot)=>{var ra=fl(),da=r(ra),pe=r(da,!0);a(da);var Ne=o(da,2);{var ct=Ye=>{var Nt=ul(),Xt=r(Nt,!0);a(Nt),g(()=>N(Xt,e(Ot).description??e(Ot).id)),s(Ye,Nt)};E(Ne,Ye=>{(e(Ot).label||e(Ot).description)&&Ye(ct)})}a(ra),g(()=>N(pe,e(Ot).label??e(Ot).id)),ee("click",ra,()=>v(e(Ot))),s(Mt,ra)}),a(kt),a(ft),g(Mt=>N(wt,Mt),[()=>Gt(e(T))]),s(bt,ft)};E(Ge,bt=>{e(Q).length>0&&bt(Ut)})}var Pt=o(Ge,2);{var Wt=bt=>{var ft=_l();s(bt,ft)},aa=bt=>{var ft=bl(),nt=r(ft,!0);a(ft),g(()=>N(nt,e(se))),s(bt,ft)};E(Pt,bt=>{e(Y)?bt(Wt):e(se)&&bt(aa,1)})}a(st),s(Re,st)};E(Zt,Re=>{(e(ce).length>0||e(Q).length>0||e(Y)||e(se))&&Re(ta)})}a(p),g((Re,st,ye,De,Ge,Ut)=>{N(me,Re),N(Ae,st),N(Le,ye),xe(ze,"aria-label",De),xe(ze,"placeholder",Ge),N(Ve,Ut)},[()=>tt(e(T)),()=>Te(e(T)),()=>u(e(T)),()=>u(e(T)),()=>{var Re;return((Re=e(T))==null?void 0:Re.placeholder)??P(e(T))},()=>ne(e(T))]),ee("keydown",ze,Re=>{Re.key==="Enter"&&Ze()}),$t(ze,()=>e(x),Re=>t(x,Re)),ee("click",Fe,()=>Ze()),s(i,p)};E(m,i=>{e(H)&&i(B)})}var le=o(m,2);$e(le,21,()=>ie,jt,(i,p)=>{var F=hl();let q;var me=r(F,!0);a(F),g(()=>{q=It(F,1,"tab-btn svelte-11vdap9",null,q,{"tab-btn--active":e(M)===e(p).id}),N(me,e(p).label)}),ee("click",F,()=>Qe(e(p).id)),s(i,F)}),a(le);var $=o(le,2),Xe=r($);{var Lt=i=>{var p=Kt(),F=Ke(p);{var q=he=>{var Ae=yl(),Be=r(Ae),qe=r(Be,!0);a(Be);var Ue=o(Be,2),Le=r(Ue,!0);a(Ue),a(Ae),g((ze,Fe)=>{N(qe,ze),N(Le,Fe)},[()=>mt(e(T)),()=>Et(e(T),"records")]),s(he,Ae)},me=he=>{vn(he,{get tableName(){return e(V)},get instanceId(){return e(be)}})};E(F,he=>{e(H)&&!e(be)?he(q):he(me,!1)})}s(i,p)},Ht=i=>{var p=Kt(),F=Ke(p);{var q=he=>{var Ae=wl(),Be=r(Ae),qe=r(Be,!0);a(Be);var Ue=o(Be,2),Le=r(Ue,!0);a(Ue),a(Ae),g((ze,Fe)=>{N(qe,ze),N(Le,Fe)},[()=>mt(e(T)),()=>Et(e(T),"query")]),s(he,Ae)},me=he=>{var Ae=Kt(),Be=Ke(Ae);Fr(Be,Pe,qe=>{var Ue=xl();s(qe,Ue)},(qe,Ue)=>{const Le=A(()=>e(Ue).default);var ze=Kt(),Fe=Ke(ze);or(Fe,()=>e(Le),(Ve,vt)=>{vt(Ve,{get tableName(){return e(V)},get namespace(){return e(J)},get instanceId(){return e(be)}})}),s(qe,ze)},(qe,Ue)=>{var Le=kl(),ze=o(r(Le),2),Fe=r(ze,!0);a(ze),a(Le),g(()=>N(Fe,e(Ue)instanceof Error?e(Ue).message:"Failed to load query tools.")),s(qe,Le)}),s(he,Ae)};E(F,he=>{e(H)&&!e(be)?he(q):he(me,!1)})}s(i,p)},_a=i=>{On(i,{get tableName(){return e(V)}})},Tt=i=>{Bn(i,{get tableName(){return e(V)}})},At=i=>{Hn(i,{get tableName(){return e(V)}})};E(Xe,i=>{e(M)==="records"?i(Lt):e(M)==="query"?i(Ht,1):e(M)==="schema"?i(_a,2):e(M)==="rules"?i(Tt,3):e(M)==="sdk"&&i(At,4)})}a($),a(ke),g((i,p)=>{N(rt,e(V)),N(ha,e(J)),N(ya,i),fa=It(ua,1,"table-badge svelte-11vdap9",null,fa,{"table-badge--dynamic":e(H)}),N(wa,p),xe(Qt,"href",`${za??""}/database/erd`),xe(sa,"href",jr)},[()=>G(e(re)),()=>it(e(H))]),s(_e,ke),oa(),D()}ca(["keydown","click"]);export{Os as D,$l as _};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as n}from"./Cw6OYcq-.js";import{g as c}from"./BoOooyH6.js";const u="http://edgebase.local",s=`${n}/login`,r="edgebase_admin_manual_logout";function i(t){return`${t.pathname}${t.search}${t.hash}`}function f(t){return n?t===n||t.startsWith(`${n}/`):t.startsWith("/")}function a(t){if(!t)return null;try{const e=typeof t=="string"?new URL(t,u):t;return!f(e.pathname)||e.pathname===s||e.pathname===`${s}/`?null:i(e)}catch{return null}}function l(t){const e=a(t);if(!e)return s;const o=new URL(s,u);return o.searchParams.set("next",e),i(o)}function m(t){return a(t.searchParams.get("next"))??a(t.searchParams.get("returnTo"))??`${n}/`}function P(){if(!(typeof sessionStorage>"u"))try{sessionStorage.setItem(r,"1")}catch{}}function d(){if(typeof sessionStorage>"u")return!1;try{const t=sessionStorage.getItem(r)==="1";return sessionStorage.removeItem(r),t}catch{return!1}}async function p(){const t=await fetch(c("setup/status"));if(!t.ok)throw new Error(`Failed to load setup status (${t.status})`);return t.json()}export{l as b,d as c,p as f,m as g,P as m};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as r}from"../chunks/CrOZMmdF.js";import{w as t}from"../chunks/Cw6OYcq-.js";export{t as load_css,r as start};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as y,t as $,a as j,c as e,r,s as p,g as x,u as q}from"../chunks/BdTBlfLy.js";import{s as l}from"../chunks/DtZk82gG.js";import{a as B,f as k}from"../chunks/DEELgv7K.js";import{a as M}from"../chunks/CoI6jjbg.js";import{s as P,a as R}from"../chunks/Cp8V0Xy2.js";import{p as S}from"../chunks/B6MschND.js";import{b as A}from"../chunks/Cw6OYcq-.js";var D=k('<div class="error-page svelte-1j96wlh"><div class="error-card svelte-1j96wlh"><h1 class="error-code svelte-1j96wlh"> </h1> <p class="error-status svelte-1j96wlh"> </p> <p class="error-message svelte-1j96wlh"> </p> <a class="error-link svelte-1j96wlh">Back to Dashboard</a></div></div>');function H(u,c){y(c,!0);const s=()=>R(S,"$page",d),[d,g]=P(),n={400:"Bad Request",401:"Authentication required",403:"You don't have permission to access this page",404:"Page not found",408:"Request timed out",429:"Too many requests — please try again later",500:"Internal server error",502:"Bad gateway — the server may be restarting",503:"Service temporarily unavailable"},h=q(()=>{var m;return((m=s().error)==null?void 0:m.message)||n[s().status]||"Something went wrong. Please try reloading the page."});var a=D(),v=e(a),t=e(v),f=e(t,!0);r(t);var o=p(t,2),_=e(o,!0);r(o);var i=p(o,2),w=e(i,!0);r(i);var b=p(i,2);r(v),r(a),$(()=>{l(f,s().status),l(_,n[s().status]??"Error"),l(w,x(h)),M(b,"href",`${A??""}/`)}),B(u,a),j(),g()}export{H as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as U}from"../chunks/Bn2NtlTj.js";import{p as B,a as j,f as z,c as h,g as t,s as m,r as g,u as o,b as y,d as D,t as G}from"../chunks/BdTBlfLy.js";import{d as J,s as K,a as N}from"../chunks/DtZk82gG.js";import{a as Q,t as V,e as W,i as X}from"../chunks/BEW7Ez_g.js";import{a as T,f as k}from"../chunks/DEELgv7K.js";import{s as Y}from"../chunks/CoI6jjbg.js";import{g as Z}from"../chunks/R6arueIl.js";import{P as tt}from"../chunks/B8s_s9QY.js";import{a as et}from"../chunks/Q2nPFxS6.js";import{M as _,T as at}from"../chunks/BqTb6Mxk.js";import{D as rt,T as ot}from"../chunks/D2j3I1VQ.js";var st=k("<button> </button>"),lt=k('<div class="range-selector"></div>'),nt=k('<div class="analytics-grid"><!> <!> <!> <!></div> <div class="analytics-chart"><!></div> <div class="analytics-bottom"><!> <!></div>',1);function _t(R,q){B(q,!0);let s=D(!0),l=D(null),p=D("24h");const A=[{value:"1h",label:"1H"},{value:"6h",label:"6H"},{value:"24h",label:"24H"},{value:"7d",label:"7D"},{value:"30d",label:"30D"}];async function $(){try{const e=await Q.fetch(`data/analytics?range=${t(p)}&category=storage&metric=overview`);y(l,e,!0)}catch(e){V(e instanceof Error?e.message:"Failed to load storage analytics")}finally{y(s,!1)}}function I(e){y(p,e,!0),y(s,!0),$()}U(()=>{$();const e=setInterval(()=>void $(),3e4);return()=>clearInterval(e)});const M=o(()=>()=>{var d;if(!((d=t(l))!=null&&d.summary))return 0;const{totalRequests:e,totalErrors:a}=t(l).summary;return e>0?a/e*100:0}),S=o(()=>()=>{var e;return(((e=t(l))==null?void 0:e.timeSeries)||[]).map(a=>({timestamp:a.timestamp,value:a.requests??a.value??0}))}),H=o(()=>Z(t(p))),L=o(()=>()=>{var e;return(((e=t(l))==null?void 0:e.breakdown)||[]).map(a=>({label:a.label||"other",value:a.count}))}),C=o(()=>()=>{var e;return(((e=t(l))==null?void 0:e.topItems)||[]).map(a=>({label:a.label,count:a.count,secondary:`${Math.round(a.avgLatency)}ms · ${a.errorRate.toFixed(1)}% 5xx`}))});tt(R,{title:"Storage Analytics",description:"File upload, download, and bucket usage metrics",get docsHref(){return et},actions:a=>{var d=lt();W(d,21,()=>A,X,(f,c)=>{var n=st();let v;var b=h(n,!0);g(n),G(()=>{v=Y(n,1,"range-btn",null,v,{"range-btn--active":t(p)===t(c).value}),K(b,t(c).label)}),N("click",n,()=>I(t(c).value)),T(f,n)}),g(d),T(a,d)},children:(a,d)=>{var f=nt(),c=z(f),n=h(c);{let r=o(()=>{var i,u;return((u=(i=t(l))==null?void 0:i.summary)==null?void 0:u.totalRequests)??0});_(n,{label:"Storage Ops",get value(){return t(r)},get loading(){return t(s)}})}var v=m(n,2);{let r=o(()=>{var i,u;return((u=(i=t(l))==null?void 0:i.summary)==null?void 0:u.uniqueUsers)??0});_(v,{label:"Unique Users",get value(){return t(r)},get loading(){return t(s)}})}var b=m(v,2);{let r=o(()=>t(M)().toFixed(1));_(b,{label:"5xx Rate",get value(){return t(r)},unit:"%",get loading(){return t(s)}})}var E=m(b,2);{let r=o(()=>{var i,u;return Math.round(((u=(i=t(l))==null?void 0:i.summary)==null?void 0:u.avgLatency)??0)});_(E,{label:"Avg Latency",get value(){return t(r)},unit:"ms",get loading(){return t(s)}})}g(c);var x=m(c,2),O=h(x);{let r=o(()=>t(S)());at(O,{get data(){return t(r)},type:"line",height:240,label:"Storage operations over time",get formatTime(){return t(H)},get loading(){return t(s)},color:"#d97706"})}g(x);var w=m(x,2),F=h(w);{let r=o(()=>t(L)());rt(F,{get items(){return t(r)},title:"Operation Distribution (upload, download, list...)",get loading(){return t(s)}})}var P=m(F,2);{let r=o(()=>t(C)());ot(P,{get items(){return t(r)},title:"Top Buckets / Operations",get loading(){return t(s)}})}g(w),T(a,f)}}),j()}J(["click"]);export{_t as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as ht}from"../chunks/Bn2NtlTj.js";import{p as Ge,a as He,c as r,b as t,g as e,s as l,ae as N,r as a,t as le,f as fe,d,M as Re,w as mt,u as E}from"../chunks/BdTBlfLy.js";import{e as pt,s as W,d as bt,a as _e}from"../chunks/DtZk82gG.js";import{i as ne}from"../chunks/Y22E1hJM.js";import{a as be,b as Ze,t as Ce,e as qe,i as gt}from"../chunks/BEW7Ez_g.js";import{a as i,t as X,f as $}from"../chunks/DEELgv7K.js";import{r as Le,e as Ne,a as pe,s as $t}from"../chunks/CoI6jjbg.js";import{g as zt}from"../chunks/CrOZMmdF.js";import{b as Oe}from"../chunks/Cw6OYcq-.js";import{P as yt}from"../chunks/B8s_s9QY.js";import{c as xt}from"../chunks/Q2nPFxS6.js";import{B as Y}from"../chunks/C72lTcG0.js";import{I as ge}from"../chunks/_teD5ji5.js";import{B as Ve}from"../chunks/B0HRJ657.js";import{C as wt}from"../chunks/DILS_-VJ.js";import{E as St}from"../chunks/m9eWh0Cd.js";import{p as je}from"../chunks/F9_4wRrd.js";import{M as kt}from"../chunks/Dt4vL4Df.js";import{S as Ae}from"../chunks/B94PilAN.js";import{S as re}from"../chunks/J2Gw0SMu.js";var Pt=$("<!> <!>",1),Ut=$('<p class="form__error svelte-17zxii7"> </p>'),Ct=$('<form class="form svelte-17zxii7"><!> <!> <!> <!> <!> <button class="form__submit svelte-17zxii7" type="submit" aria-hidden="true" tabindex="-1">Create User</button></form>');function At($e,oe){Ge(oe,!0);let O=je(oe,"open",15,!1),ze=je(oe,"onCreated",3,()=>{}),P=d(""),U=d(""),C=d(""),T=d("user"),M=d(!1),b=d("");const ie=[{value:"user",label:"User"},{value:"admin",label:"Admin"}];function V(){t(P,""),t(U,""),t(C,""),t(T,"user"),t(b,"")}async function A(){if(t(b,""),!e(P).trim()){t(b,"Email is required.");return}if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e(P).trim())){t(b,"Invalid email format.");return}if(!e(U)){t(b,"Password is required.");return}if(e(U).length<8){t(b,"Password must be at least 8 characters.");return}t(M,!0);try{await be.fetch("data/users",{method:"POST",body:{email:e(P).trim(),password:e(U),displayName:e(C).trim()||void 0,role:e(T)}}),Ze("User created successfully"),O(!1),V(),ze()()}catch(w){t(b,w instanceof Error?w.message:"Failed to create user",!0),Ce(e(b))}finally{t(M,!1)}}kt($e,{title:"Create User",onclose:V,get open(){return O()},set open(Z){O(Z)},footer:Z=>{var de=Pt(),h=fe(de);Y(h,{variant:"secondary",onclick:()=>{O(!1),V()},children:(u,B)=>{N();var I=X("Cancel");i(u,I)},$$slots:{default:!0}});var n=l(h,2);Y(n,{variant:"primary",onclick:A,get loading(){return e(M)},children:(u,B)=>{N();var I=X("Create User");i(u,I)},$$slots:{default:!0}}),i(Z,de)},children:(Z,de)=>{var h=Ct(),n=r(h);ge(n,{label:"Email",type:"email",placeholder:"user@example.com",required:!0,get value(){return e(P)},set value(m){t(P,m,!0)}});var u=l(n,2);ge(u,{label:"Password",type:"password",placeholder:"Minimum 8 characters",required:!0,get value(){return e(U)},set value(m){t(U,m,!0)}});var B=l(u,2);ge(B,{label:"Display Name",placeholder:"(optional)",get value(){return e(C)},set value(m){t(C,m,!0)}});var I=l(B,2);Ae(I,{label:"Role",get options(){return ie},get value(){return e(T)},set value(m){t(T,m,!0)}});var he=l(I,2);{var ye=m=>{var ue=Ut(),xe=r(ue,!0);a(ue),le(()=>W(xe,e(b))),i(m,ue)};ne(he,m=>{e(b)&&m(ye)})}N(2),a(h),pt("submit",h,m=>{m.preventDefault(),A()}),i(Z,h)},$$slots:{footer:!0,default:!0}}),He()}var Dt=$("<!> <a><!></a>",1),Et=$('<div class="bulk-bar svelte-1s728sz"><span class="bulk-bar__count svelte-1s728sz"> </span> <div class="bulk-bar__actions svelte-1s728sz"><!> <!></div> <button class="bulk-bar__clear svelte-1s728sz">Clear</button></div>'),Tt=$('<tr class="table__row svelte-1s728sz"><td class="table__td svelte-1s728sz" style="width:40px"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td></tr>'),Mt=$('<div class="table-wrapper svelte-1s728sz"><table class="table svelte-1s728sz"><thead><tr><th class="table__th table__th--checkbox svelte-1s728sz" style="width:40px"></th><th class="table__th svelte-1s728sz">ID</th><th class="table__th svelte-1s728sz">Email</th><th class="table__th svelte-1s728sz">Status</th><th class="table__th svelte-1s728sz">Role</th><th class="table__th svelte-1s728sz">Created</th></tr></thead><tbody></tbody></table></div>'),Bt=$('<tr role="button"><td class="table__td table__td--checkbox svelte-1s728sz"><input type="checkbox" class="svelte-1s728sz"/></td><td class="table__td table__td--mono svelte-1s728sz"> </td><td class="table__td svelte-1s728sz"> </td><td class="table__td svelte-1s728sz"><!></td><td class="table__td svelte-1s728sz"><!></td><td class="table__td table__td--secondary svelte-1s728sz"> </td><td class="table__td table__td--secondary svelte-1s728sz"> </td></tr>'),It=$('<span class="pagination__info svelte-1s728sz"> </span>'),Ft=$('<div class="pagination svelte-1s728sz"><!> <!></div>'),Rt=$('<div class="table-wrapper svelte-1s728sz"><table class="table svelte-1s728sz"><thead><tr><th class="table__th table__th--checkbox svelte-1s728sz"><input type="checkbox" aria-label="Select all users" class="svelte-1s728sz"/></th><th class="table__th svelte-1s728sz">ID</th><th class="table__th svelte-1s728sz">Email</th><th class="table__th svelte-1s728sz">Status</th><th class="table__th svelte-1s728sz">Role</th><th class="table__th svelte-1s728sz">Created</th><th class="table__th svelte-1s728sz">Last Sign-in</th></tr></thead><tbody></tbody></table></div> <!>',1),qt=$('<div class="toolbar svelte-1s728sz"><div class="toolbar__search svelte-1s728sz"><!></div> <div class="toolbar__filters svelte-1s728sz"><!> <!></div></div> <!> <!>',1),Lt=$("<!> <!> <!>",1);function ia($e,oe){Ge(oe,!0);let O=d(!1);const ze=20;let P=d(!0),U=d(Re([])),C=d(null),T=d(null),M=d(""),b=null,ie=d(!1),V=0,A=d("all"),w=d("all");const Z=[{value:"all",label:"All Status"},{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"banned",label:"Banned"},{value:"disabled",label:"Disabled"}],de=[{value:"all",label:"All Roles"},{value:"user",label:"User"},{value:"admin",label:"Admin"}],h=E(()=>e(U).filter(s=>!(e(A)!=="all"&&s.status!==e(A)||e(w)!=="all"&&s.role!==e(w))));let n=d(Re(new Set)),u=d(null),B=d(!1),I=d("all"),he=d("all");mt(()=>{(e(A)!==e(I)||e(w)!==e(he))&&(t(n,new Set,!0),t(I,e(A),!0),t(he,e(w),!0))});function ye(s){const f=new Set(e(n));f.has(s)?f.delete(s):f.add(s),t(n,f,!0)}function m(){e(n).size===e(h).length?t(n,new Set,!0):t(n,new Set(e(h).map(s=>s.id)),!0)}function ue(){t(n,new Set,!0)}function xe(){return e(u)?`${e(u)==="delete"?"Delete":"Ban"} ${e(n).size} user${e(n).size!==1?"s":""}?`:"Confirm"}function Je(){return e(u)?e(u)==="delete"?"This will permanently delete the selected users and all associated data. This action cannot be undone.":"This will ban the selected users, preventing them from signing in.":"Are you sure?"}async function Ke(){const s=e(u);if(!s||e(n).size===0)return;t(u,null),t(B,!0);const f=[...e(n)],z=await Promise.allSettled(f.map(async y=>{s==="delete"?await be.fetch(`data/users/${y}`,{method:"DELETE"}):s==="ban"&&await be.fetch(`data/users/${y}`,{method:"PUT",body:{status:"banned"}})})),_=z.filter(y=>y.status==="fulfilled").length,v=z.filter(y=>y.status==="rejected").length;v===0?Ze(`${s==="delete"?"Deleted":"Banned"} ${_} user${_!==1?"s":""}`):Ce(`${_} succeeded, ${v} failed`),t(n,new Set,!0),t(B,!1),ce()}async function ce(s=0,f=!1){const z=++V;f?t(ie,!0):t(P,!0);try{let _=`data/users?limit=${ze}&cursor=${s}`;e(M).trim()&&(_+=`&email=${encodeURIComponent(e(M).trim())}`);const v=await be.fetch(_);if(z!==V)return;t(U,f?[...e(U),...v.users]:v.users,!0),t(C,v.cursor,!0),v.total!=null&&t(T,v.total,!0)}catch(_){if(z!==V)return;Ce(_ instanceof Error?_.message:"Failed to load users")}finally{z===V&&(t(P,!1),t(ie,!1))}}ht(()=>{ce()});function Qe(){t(n,new Set,!0),b&&clearTimeout(b),b=setTimeout(()=>{ce()},300)}function We(){e(C)&&ce(e(C),!0)}function De(s){zt(`${Oe}/auth/${s}`)}function Xe(s){return s.length<=12?s:s.slice(0,8)+"..."}function Ye(s){switch(s){case"active":return"success";case"suspended":return"warning";case"banned":return"danger";case"disabled":return"danger";default:return"default"}}function et(s){return s==="admin"?"primary":"default"}function Ee(s){return s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}var Te=Lt(),Me=fe(Te);yt(Me,{title:"Users",description:"Manage user accounts",get docsHref(){return xt},actions:f=>{var z=Dt(),_=fe(z);Y(_,{variant:"primary",size:"sm",onclick:()=>t(O,!0),children:(ve,me)=>{N();var ee=X("+ Create User");i(ve,ee)},$$slots:{default:!0}});var v=l(_,2),y=r(v);Y(y,{variant:"secondary",size:"sm",children:(ve,me)=>{N();var ee=X("Auth Settings");i(ve,ee)},$$slots:{default:!0}}),a(v),le(()=>pe(v,"href",`${Oe??""}/auth/settings`)),i(f,z)},children:(f,z)=>{var _=qt(),v=fe(_),y=r(v),ve=r(y);ge(ve,{placeholder:"Search by email...",oninput:Qe,get value(){return e(M)},set value(c){t(M,c,!0)}}),a(y);var me=l(y,2),ee=r(me);Ae(ee,{get options(){return Z},get value(){return e(A)},set value(c){t(A,c,!0)}});var at=l(ee,2);Ae(at,{get options(){return de},get value(){return e(w)},set value(c){t(w,c,!0)}}),a(me),a(v);var Ie=l(v,2);{var st=c=>{var x=Et(),D=r(x),J=r(D);a(D);var F=l(D,2),te=r(F);Y(te,{variant:"secondary",size:"sm",onclick:()=>t(u,"ban"),get disabled(){return e(B)},children:(G,K)=>{N();var Q=X("Ban Selected");i(G,Q)},$$slots:{default:!0}});var j=l(te,2);Y(j,{variant:"danger",size:"sm",onclick:()=>t(u,"delete"),get disabled(){return e(B)},children:(G,K)=>{N();var Q=X("Delete Selected");i(G,Q)},$$slots:{default:!0}}),a(F);var R=l(F,2);a(x),le(()=>W(J,`${e(n).size??""} selected`)),_e("click",R,ue),i(c,x)};ne(Ie,c=>{e(n).size>0&&c(st)})}var rt=l(Ie,2);{var lt=c=>{var x=Mt(),D=r(x),J=l(r(D));qe(J,20,()=>Array(8),gt,(F,te)=>{var j=Tt(),R=r(j),G=r(R);re(G,{width:"16px",height:"16px"}),a(R);var K=l(R),Q=r(K);re(Q,{width:"70px",height:"14px"}),a(K);var S=l(K),o=r(S);re(o,{width:"160px",height:"14px"}),a(S);var g=l(S),ae=r(g);re(ae,{width:"60px",height:"20px"}),a(g);var q=l(g),H=r(q);re(H,{width:"50px",height:"14px"}),a(q);var p=l(q),L=r(p);re(L,{width:"80px",height:"14px"}),a(p),a(j),i(F,j)}),a(J),a(D),a(x),i(c,x)},nt=c=>{{let x=E(()=>e(M)||e(A)!=="all"||e(w)!=="all"?"Try adjusting your search or filters.":"No users have been created yet.");St(c,{title:"No users found",get description(){return e(x)}})}},ot=c=>{var x=Rt(),D=fe(x),J=r(D),F=r(J),te=r(F),j=r(te),R=r(j);Le(R),a(j),N(6),a(te),a(F);var G=l(F);qe(G,21,()=>e(h),S=>S.id,(S,o)=>{var g=Bt();let ae;pe(g,"tabindex",0);var q=r(g),H=r(q);Le(H),a(q);var p=l(q),L=r(p,!0);a(p);var se=l(p),we=r(se,!0);a(se);var Se=l(se),it=r(Se);{let k=E(()=>Ye(e(o).status||"active")),Ue=E(()=>e(o).status||"active");Ve(it,{get variant(){return e(k)},get text(){return e(Ue)}})}a(Se);var ke=l(Se),dt=r(ke);{let k=E(()=>et(e(o).role));Ve(dt,{get variant(){return e(k)},get text(){return e(o).role}})}a(ke);var Pe=l(ke),ut=r(Pe,!0);a(Pe);var Fe=l(Pe),ct=r(Fe,!0);a(Fe),a(g),le((k,Ue,vt,_t,ft)=>{ae=$t(g,1,"table__row table__row--clickable svelte-1s728sz",null,ae,k),Ne(H,Ue),pe(H,"aria-label",`Select user ${e(o).email??""}`),pe(p,"title",e(o).id),W(L,vt),W(we,e(o).email),W(ut,_t),W(ct,ft)},[()=>({"table__row--selected":e(n).has(e(o).id)}),()=>e(n).has(e(o).id),()=>Xe(e(o).id),()=>Ee(e(o).createdAt),()=>Ee(e(o).lastSignedInAt)]),_e("click",g,()=>De(e(o).id)),_e("keydown",g,k=>{(k.key==="Enter"||k.key===" ")&&(k.preventDefault(),De(e(o).id))}),_e("change",H,k=>{k.stopPropagation(),ye(e(o).id)}),i(S,g)}),a(G),a(J),a(D);var K=l(D,2);{var Q=S=>{var o=Ft(),g=r(o);{var ae=p=>{var L=It(),se=r(L);a(L),le(()=>W(se,`Showing ${e(h).length??""} of ${e(T)??""} users`)),i(p,L)};ne(g,p=>{e(T)!=null&&p(ae)})}var q=l(g,2);{var H=p=>{Y(p,{variant:"secondary",onclick:We,get loading(){return e(ie)},children:(L,se)=>{N();var we=X("Load More");i(L,we)},$$slots:{default:!0}})};ne(q,p=>{e(C)&&p(H)})}a(o),i(S,o)};ne(K,S=>{(e(C)||e(T)!=null)&&S(Q)})}le(()=>Ne(R,e(h).length>0&&e(n).size===e(h).length)),_e("change",R,m),i(c,x)};ne(rt,c=>{e(P)?c(lt):e(h).length===0?c(nt,1):c(ot,!1)})}i(f,_)}});var Be=l(Me,2);{let s=E(()=>e(u)!==null),f=E(xe),z=E(Je),_=E(()=>e(u)==="delete"?"Delete":"Ban"),v=E(()=>e(u)==="delete"?"danger":"primary");wt(Be,{get open(){return e(s)},get title(){return e(f)},get message(){return e(z)},get confirmLabel(){return e(_)},get confirmVariant(){return e(v)},oncancel:()=>t(u,null),onconfirm:Ke})}var tt=l(Be,2);At(tt,{onCreated:()=>ce(),get open(){return e(O)},set open(s){t(O,s,!0)}}),i($e,Te),He()}bt(["click","change","keydown"]);export{ia as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as ya}from"../chunks/Bn2NtlTj.js";import{p as $a,d as v,M as wa,f as Fe,a as Sa,b as l,g as e,s as r,u as g,c as t,ae as x,r as a,t as C,af as Da}from"../chunks/BdTBlfLy.js";import{s as A}from"../chunks/DtZk82gG.js";import{i as Me}from"../chunks/Y22E1hJM.js";import{a as h,b as E,t as P,e as ka}from"../chunks/BEW7Ez_g.js";import{a as o,f as p,c as Aa,t as b}from"../chunks/DEELgv7K.js";import{a as Te}from"../chunks/CoI6jjbg.js";import{s as Ea,a as Pa}from"../chunks/Cp8V0Xy2.js";import{p as Ua}from"../chunks/B6MschND.js";import{g as Ra}from"../chunks/CrOZMmdF.js";import{b as ie}from"../chunks/Cw6OYcq-.js";import{P as Fa}from"../chunks/B8s_s9QY.js";import{c as Ma}from"../chunks/Q2nPFxS6.js";import{B as y}from"../chunks/C72lTcG0.js";import{B as Le}from"../chunks/B0HRJ657.js";import{S as Oe}from"../chunks/B94PilAN.js";import{C as ne}from"../chunks/DILS_-VJ.js";var Ta=p("<a><!></a>"),La=p('<div class="loading-state svelte-1579lxm"><span class="spinner svelte-1579lxm"></span> Loading user...</div>'),Oa=p('<div class="error-state svelte-1579lxm"><p>User not found.</p> <a><!></a></div>'),Ba=p('<p class="no-data svelte-1579lxm">No profile data available.</p>'),Ia=p('<div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm"> </span> <span class="info-value svelte-1579lxm"> </span></div>'),za=p('<div class="info-grid svelte-1579lxm"></div>'),Ca=p(`<div class="user-layout svelte-1579lxm"><div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Account Info</h3></div> <div class="card__body svelte-1579lxm"><div class="info-grid svelte-1579lxm"><div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">ID</span> <span class="info-value info-value--mono svelte-1579lxm"> </span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Email</span> <span class="info-value svelte-1579lxm"> </span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Status</span> <span class="info-value svelte-1579lxm"><!></span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Role</span> <span class="info-value svelte-1579lxm"><!></span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Created</span> <span class="info-value svelte-1579lxm"> </span></div> <div class="info-row svelte-1579lxm"><span class="info-label svelte-1579lxm">Last Sign-in</span> <span class="info-value svelte-1579lxm"> </span></div></div></div></div> <div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Manage User</h3></div> <div class="card__body svelte-1579lxm"><div class="form-fields svelte-1579lxm"><!> <!></div> <div class="card__actions svelte-1579lxm"><!></div></div></div> <div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Profile</h3></div> <div class="card__body svelte-1579lxm"><!></div></div> <div class="card svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title svelte-1579lxm">Actions</h3></div> <div class="card__body svelte-1579lxm"><div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Send Password Reset Email</p> <p class="danger-desc svelte-1579lxm">Send a password reset link to the user's email address.</p></div> <!></div></div></div> <div class="card card--danger svelte-1579lxm"><div class="card__header svelte-1579lxm"><h3 class="card__title card__title--danger svelte-1579lxm">Danger Zone</h3></div> <div class="card__body svelte-1579lxm"><div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Revoke All Sessions</p> <p class="danger-desc svelte-1579lxm">Force sign-out from all devices. The user will need to sign in again.</p></div> <!></div> <hr class="danger-divider svelte-1579lxm"/> <div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Disable MFA</p> <p class="danger-desc svelte-1579lxm">Remove all multi-factor authentication methods. The user can re-enroll later.</p></div> <!></div> <hr class="danger-divider svelte-1579lxm"/> <div class="danger-row svelte-1579lxm"><div class="danger-info svelte-1579lxm"><p class="danger-title svelte-1579lxm">Delete User</p> <p class="danger-desc svelte-1579lxm">Permanently delete this user and all associated data. This cannot be undone.</p></div> <!></div></div></div></div>`),Va=p("<!> <!> <!> <!>",1);function is(Be,Ie){$a(Ie,!0);const ze=()=>Pa(Ua,"$page",Ce),[Ce,Ve]=Ea();let f=g(()=>ze().params.userId??""),U=v(!1),n=v(null),R=v(wa({})),$=v(""),w=v(""),V=v(!1),F=v(!1),j=v(!1),M=v(!1),N=v(!1),T=v(!1),H=v(!1),J=v(!1);const je=[{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"banned",label:"Banned"},{value:"disabled",label:"Disabled"}],Ne=[{value:"user",label:"User"},{value:"admin",label:"Admin"}];let He=g(()=>e(n)!==null&&(e($)!==e(n).status||e(w)!==e(n).role));async function Je(){l(n,null),l(U,!1),l(R,{},!0);try{const s=await h.fetch(`data/users/${e(f)}`);l(n,s.user,!0),l($,s.user.status??"active",!0),l(w,s.user.role??"user",!0);try{const S=await h.fetch(`data/users/${e(f)}/profile`),{id:D,...k}=S;l(R,k,!0)}catch{l(R,{},!0)}}catch{l(U,!0)}}ya(()=>{Je()});async function Ze(){l(V,!0);try{await h.fetch(`data/users/${e(f)}`,{method:"PUT",body:{status:e($),role:e(w)}}),e(n)&&l(n,{...e(n),status:e($),role:e(w)},!0),E("User updated successfully")}catch(s){P(s instanceof Error?s.message:"Failed to update user")}finally{l(V,!1)}}async function qe(){l(F,!1),l(j,!0);try{await h.fetch(`data/users/${e(f)}/sessions`,{method:"DELETE"}),E("All sessions revoked")}catch(s){P(s instanceof Error?s.message:"Failed to revoke sessions")}finally{l(j,!1)}}function Ge(s){switch(s){case"active":return"success";case"suspended":return"warning";case"banned":return"danger";case"disabled":return"danger";default:return"default"}}function oe(s){return s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}async function Ke(){l(M,!1),l(N,!0);try{await h.fetch(`data/users/${e(f)}`,{method:"DELETE"}),E("User deleted"),Ra(`${ie}/auth`)}catch(s){P(s instanceof Error?s.message:"Failed to delete user")}finally{l(N,!1)}}async function Qe(){l(J,!0);try{await h.fetch(`data/users/${e(f)}/send-password-reset`,{method:"POST"}),E("Password reset email sent")}catch(s){P(s instanceof Error?s.message:"Failed to send password reset email")}finally{l(J,!1)}}async function We(){l(T,!1),l(H,!0);try{await h.fetch(`data/users/${e(f)}/mfa`,{method:"DELETE"}),E("MFA disabled")}catch(s){P(s instanceof Error?s.message:"Failed to disable MFA")}finally{l(H,!1)}}function Xe(s){return s==null?"-":typeof s=="object"?JSON.stringify(s):String(s)}let de=g(()=>Object.entries(e(R)));var ve=Va(),ce=Fe(ve);Fa(ce,{title:"User Detail",get description(){return`User ID: ${e(f)??""}`},get docsHref(){return Ma},actions:S=>{var D=Ta(),k=t(D);y(k,{variant:"ghost",size:"sm",children:(Z,fe)=>{x();var q=b("Back to Users");o(Z,q)},$$slots:{default:!0}}),a(D),C(()=>Te(D,"href",`${ie??""}/auth`)),o(S,D)},children:(S,D)=>{var k=Aa(),Z=Fe(k);{var fe=u=>{var m=La();o(u,m)},q=u=>{var m=Oa(),_=r(t(m),2),L=t(_);y(L,{variant:"secondary",children:(O,B)=>{x();var I=b("Back to Users");o(O,I)},$$slots:{default:!0}}),a(_),a(m),C(()=>Te(_,"href",`${ie??""}/auth`)),o(u,m)},ea=u=>{var m=Ca(),_=t(m),L=r(t(_),2),O=t(L),B=t(O),I=r(t(B),2),aa=t(I,!0);a(I),a(B);var G=r(B,2),pe=r(t(G),2),sa=t(pe,!0);a(pe),a(G);var K=r(G,2),_e=r(t(K),2),ta=t(_e);{let i=g(()=>Ge(e(n).status));Le(ta,{get variant(){return e(i)},get text(){return e(n).status}})}a(_e),a(K);var Q=r(K,2),ge=r(t(Q),2),ra=t(ge);{let i=g(()=>e(n).role==="admin"?"primary":"default");Le(ra,{get variant(){return e(i)},get text(){return e(n).role}})}a(ge),a(Q);var W=r(Q,2),xe=r(t(W),2),la=t(xe,!0);a(xe),a(W);var he=r(W,2),be=r(t(he),2),ia=t(be,!0);a(be),a(he),a(O),a(L),a(_);var X=r(_,2),ye=r(t(X),2),Y=t(ye),$e=t(Y);Oe($e,{label:"Status",get options(){return je},get value(){return e($)},set value(i){l($,i,!0)}});var na=r($e,2);Oe(na,{label:"Role",get options(){return Ne},get value(){return e(w)},set value(i){l(w,i,!0)}}),a(Y);var we=r(Y,2),oa=t(we);{let i=g(()=>!e(He));y(oa,{variant:"primary",onclick:Ze,get disabled(){return e(i)},get loading(){return e(V)},children:(d,c)=>{x();var z=b("Save Changes");o(d,z)},$$slots:{default:!0}})}a(we),a(ye),a(X);var ee=r(X,2),Se=r(t(ee),2),da=t(Se);{var va=i=>{var d=Ba();o(i,d)},ca=i=>{var d=za();ka(d,21,()=>e(de),([c,z])=>c,(c,z)=>{var Ue=g(()=>Da(e(z),2));let _a=()=>e(Ue)[0],ga=()=>e(Ue)[1];var re=Ia(),le=t(re),xa=t(le,!0);a(le);var Re=r(le,2),ha=t(Re,!0);a(Re),a(re),C(ba=>{A(xa,_a()),A(ha,ba)},[()=>Xe(ga())]),o(c,re)}),a(d),o(i,d)};Me(da,i=>{e(de).length===0?i(va):i(ca,!1)})}a(Se),a(ee);var ae=r(ee,2),De=r(t(ae),2),ke=t(De),ua=r(t(ke),2);y(ua,{variant:"secondary",size:"sm",onclick:Qe,get loading(){return e(J)},children:(i,d)=>{x();var c=b("Send Reset Email");o(i,c)},$$slots:{default:!0}}),a(ke),a(De),a(ae);var Ae=r(ae,2),Ee=r(t(Ae),2),se=t(Ee),ma=r(t(se),2);y(ma,{variant:"danger",size:"sm",onclick:()=>l(F,!0),get loading(){return e(j)},children:(i,d)=>{x();var c=b("Revoke Sessions");o(i,c)},$$slots:{default:!0}}),a(se);var te=r(se,4),fa=r(t(te),2);y(fa,{variant:"danger",size:"sm",onclick:()=>l(T,!0),get loading(){return e(H)},children:(i,d)=>{x();var c=b("Disable MFA");o(i,c)},$$slots:{default:!0}}),a(te);var Pe=r(te,4),pa=r(t(Pe),2);y(pa,{variant:"danger",size:"sm",onclick:()=>l(M,!0),get loading(){return e(N)},children:(i,d)=>{x();var c=b("Delete User");o(i,c)},$$slots:{default:!0}}),a(Pe),a(Ee),a(Ae),a(m),C((i,d)=>{A(aa,e(n).id),A(sa,e(n).email),A(la,i),A(ia,d)},[()=>oe(e(n).createdAt),()=>oe(e(n).lastSignedInAt)]),o(u,m)};Me(Z,u=>{!e(n)&&!e(U)?u(fe):e(U)?u(q,1):e(n)&&u(ea,2)})}o(S,k)}});var ue=r(ce,2);ne(ue,{title:"Revoke All Sessions",message:"Are you sure you want to revoke all sessions for this user? They will be signed out from all devices immediately.",confirmLabel:"Revoke",confirmVariant:"danger",onconfirm:qe,get open(){return e(F)},set open(s){l(F,s,!0)}});var me=r(ue,2);ne(me,{title:"Disable MFA",message:"Are you sure you want to disable all multi-factor authentication methods for this user?",confirmLabel:"Disable MFA",confirmVariant:"danger",onconfirm:We,get open(){return e(T)},set open(s){l(T,s,!0)}});var Ye=r(me,2);ne(Ye,{title:"Delete User",message:"Are you sure you want to permanently delete this user? All associated data (auth indexes, sessions, push tokens) will be removed. This action cannot be undone.",confirmLabel:"Delete User",confirmVariant:"danger",onconfirm:Ke,get open(){return e(M)},set open(s){l(M,s,!0)}}),o(Be,ve),Sa(),Ve()}export{is as component};
|