@edge-base/server 0.1.1 → 0.1.2
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/LICENSE +21 -0
- package/admin-build/_app/immutable/chunks/{zfauFM8P.js → BF8I5XXQ.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BdrwyZv8.js → BK8YUsyH.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CCKNu7m7.js → BMMOfNi6.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CxCPv_Ut.js → BOjkBtym.js} +1 -1
- package/admin-build/_app/immutable/chunks/{cOYbrQxx.js → BhjcOf7X.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BsokvhWC.js → Br0qug7_.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B-h2afW5.js → C0LrJucL.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BY92tFS2.js → CB8xN3_t.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DttM2zNO.js → CLHXYVje.js} +1 -1
- package/admin-build/_app/immutable/chunks/{8wJeQ7LN.js → CY1F93Wv.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BkrCkgYp.js → DOxNYcs9.js} +1 -1
- package/admin-build/_app/immutable/chunks/{w89G9Xpi.js → DYDZ2Kma.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DuXuUBWN.js → Ga6XaOJm.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BcR-Rdj9.js → p-WBlAu3.js} +1 -1
- package/admin-build/_app/immutable/entry/{app.CcO-Uos3.js → app.BcgNsUX3.js} +2 -2
- package/admin-build/_app/immutable/entry/start.otAJzcqZ.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.CjtHKU-6.js → 0.B13aXl3s.js} +1 -1
- package/admin-build/_app/immutable/nodes/{1.DEisjlM0.js → 1.we4dgVtx.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.CvhdyWVB.js → 10.hrAvOhgI.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.DjHqcOvy.js → 11.BZM_Cbjk.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.mQLz4Mj_.js → 12.pfrTdfHj.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.CBonZZyP.js → 13.BvR9UoZX.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.d-oiZL0j.js → 14.BCE_g1DT.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.CKPQsUYF.js → 15.DZrUjo5V.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.wPzAPQGx.js → 16.B_K_CGU4.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.DayhKyEZ.js → 17.D7RlNUbd.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.DKwS0Ir0.js → 18.dw9OGxA1.js} +1 -1
- package/admin-build/_app/immutable/nodes/{19.wPzAPQGx.js → 19.B_K_CGU4.js} +1 -1
- package/admin-build/_app/immutable/nodes/{20.BvIkkkrW.js → 20.Bij6g6xR.js} +1 -1
- package/admin-build/_app/immutable/nodes/{21.DMaFhdHk.js → 21.DyYxtUDl.js} +1 -1
- package/admin-build/_app/immutable/nodes/{22.3xdgwuK1.js → 22.wLPyRbDg.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.8Bvgjbsl.js → 23.DnjIdPPl.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.DzSSzRhG.js → 24.PhJEmwPf.js} +1 -1
- package/admin-build/_app/immutable/nodes/{25.9KKYBnAE.js → 25.HUYuEeiI.js} +1 -1
- package/admin-build/_app/immutable/nodes/{26.Bhn9dfhY.js → 26.CtrQ3jI5.js} +1 -1
- package/admin-build/_app/immutable/nodes/{27.kRLiC24G.js → 27.CMM8T90I.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.BVIN1-7N.js → 28.CH6XAnHt.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.3yabZWj4.js → 29.Bos0u5_B.js} +1 -1
- package/admin-build/_app/immutable/nodes/{3.BFtSOkX7.js → 3.BPnU2jxx.js} +1 -1
- package/admin-build/_app/immutable/nodes/{30.CyCQlwaP.js → 30.ScIH1W0H.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.C4LDXjES.js → 31.CXHVAiwb.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.CvbiMlCa.js → 4.BY6Ri1gh.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.C6BLv2eM.js → 5.D0tPp_Kt.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.BcXvfl2P.js → 6.BuWVNVH1.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.CIuqhPiK.js → 7.B26-qam0.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.BQOR_JfO.js → 8.CdDKHsMK.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.NZqXQxPy.js → 9.BSo7a28L.js} +1 -1
- package/admin-build/_app/version.json +1 -1
- package/admin-build/index.html +7 -7
- package/package.json +64 -65
- package/admin-build/_app/immutable/entry/start.COebYq3I.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as xt,g as $t}from"../chunks/DoPXzH7F.js";import{p as Lt,a as Rt,b,g as e,f as X,c as o,s as r,r as n,ag as Qe,t as F,d as x,ae as q,u as d}from"../chunks/glwixJlP.js";import{d as Ot,s as We,a as Et}from"../chunks/D5h5A1cc.js";import{i as Q}from"../chunks/UUazaC_N.js";import{a as J,A as St,c as Ye,t as be,e as Ze}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as xt,g as $t}from"../chunks/DoPXzH7F.js";import{p as Lt,a as Rt,b,g as e,f as X,c as o,s as r,r as n,ag as Qe,t as F,d as x,ae as q,u as d}from"../chunks/glwixJlP.js";import{d as Ot,s as We,a as Et}from"../chunks/D5h5A1cc.js";import{i as Q}from"../chunks/UUazaC_N.js";import{a as J,A as St,c as Ye,t as be,e as Ze}from"../chunks/BMMOfNi6.js";import{c as Dt,a as h,t as W,f as A}from"../chunks/BR_fL5Yv.js";import{a as et,s as It}from"../chunks/C6puvcoR.js";import{b as tt}from"../chunks/NuUjtcO2.js";import{b as Pt}from"../chunks/BOjkBtym.js";import{l as Ct,d as Mt}from"../chunks/Ga6XaOJm.js";import{P as Nt}from"../chunks/CwROoZK0.js";import{c as Ut}from"../chunks/Q2nPFxS6.js";import{B as he}from"../chunks/Cs0GwzJA.js";import{B as N}from"../chunks/eFQHTGwA.js";import{I as O}from"../chunks/DrQSgw-f.js";import{T as E}from"../chunks/vApWTCBs.js";var Bt=A("<!> <!>",1),zt=A("<a><!></a> <!>",1),Ht=A('<div class="loading-state svelte-wg73a1"><span class="spinner svelte-wg73a1"></span> Loading settings...</div>'),qt=A('<div class="error-state svelte-wg73a1">Failed to load authentication settings.</div>'),Gt=A('<button type="button" role="tab"> </button>'),jt=A('<div class="target-switch svelte-wg73a1" role="tablist" aria-label="OAuth environment target"></div>'),Jt=A('<div class="provider-card svelte-wg73a1"><div class="provider-card__header svelte-wg73a1"><div><h4 class="provider-card__title svelte-wg73a1"> </h4> <p class="provider-card__hint svelte-wg73a1">Toggle the provider and set its OAuth credentials.</p></div> <div class="provider-card__status svelte-wg73a1"><!> <!></div></div> <div class="provider-card__fields svelte-wg73a1"><!> <!></div></div>'),Vt=A("Core auth behavior is written to <code>edgebase.config.ts</code> and shared across environments. OAuth provider enablement and secrets follow the selected target: <code>Development</code> writes to <code>.env.development</code> and syncs <code>.dev.vars</code>, while <code>Release</code> writes to <code>.env.release</code>, which the deploy pipeline syncs to Cloudflare secrets.",1),Kt=A("The dashboard detected an older dev sidecar that does not support auth editing yet. Restart <code>pnpm dev</code> to enable edits.",1),Xt=A('<div class="settings-grid svelte-wg73a1"><div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Core Methods</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body card__body--stack svelte-wg73a1"><div class="toggle-row svelte-wg73a1"><!> <!></div> <div class="toggle-row svelte-wg73a1"><!> <!></div> <div class="subsection svelte-wg73a1"><div class="subsection__row svelte-wg73a1"><!> <!></div> <!></div> <div class="subsection svelte-wg73a1"><div class="subsection__row svelte-wg73a1"><!> <!></div></div></div></div> <div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><h3 class="card__title svelte-wg73a1">Session</h3></div> <div class="card__body card__body--stack svelte-wg73a1"><!> <!> <!></div></div> <div class="card svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Passkeys</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body card__body--stack svelte-wg73a1"><!> <!> <!> <label class="textarea-field svelte-wg73a1"><span class="textarea-field__label svelte-wg73a1">Allowed Origins</span> <textarea class="textarea-field__input svelte-wg73a1" rows="4" placeholder="https://example.com"></textarea></label></div></div> <div class="card card--wide svelte-wg73a1"><div class="card__header svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">Allowed Redirect URLs</h3> <p class="card__subtitle svelte-wg73a1">Shared across Development and Release.</p></div> <!></div> <div class="card__body svelte-wg73a1"><label class="textarea-field svelte-wg73a1"><span class="textarea-field__label svelte-wg73a1">One URL or wildcard per line</span> <textarea class="textarea-field__input svelte-wg73a1" rows="5" placeholder="https://app.example.com/auth/*"></textarea></label></div></div> <div class="card card--wide svelte-wg73a1"><div class="card__header card__header--wrap svelte-wg73a1"><div><h3 class="card__title svelte-wg73a1">OAuth Providers</h3> <p class="card__subtitle svelte-wg73a1">Provider allowlists and credentials are stored per target environment.</p></div> <div class="oauth-header-controls svelte-wg73a1"><!> <!></div></div> <div class="card__body provider-grid svelte-wg73a1"></div></div></div> <div class="notice svelte-wg73a1"><!></div>',1);function ua(at,st){Lt(st,!0);const S=[{id:"google",label:"Google"},{id:"github",label:"GitHub"},{id:"apple",label:"Apple"},{id:"discord",label:"Discord"},{id:"microsoft",label:"Microsoft"},{id:"facebook",label:"Facebook"},{id:"kakao",label:"Kakao"},{id:"naver",label:"Naver"},{id:"x",label:"X"},{id:"reddit",label:"Reddit"},{id:"line",label:"Line"},{id:"slack",label:"Slack"},{id:"spotify",label:"Spotify"},{id:"twitch",label:"Twitch"}],lt=[{id:"development",label:"Development"},{id:"release",label:"Release"}];let fe=x(!0),V=x(!1),u=x(!1),ke=x(!1),p=x("development"),l=x(null),U=x(null),m=x(null),$=x(null);function Y(t){return t.split(/\r?\n/).map(i=>i.trim()).filter(Boolean)}function D(t){const i=t.trim();return i||null}function we(t){const i=t.trim();if(!i)return null;const c=Number(i);return Number.isFinite(c)?c:null}function K(t){return{...t}}function it(t){var i,c,v,g,B,z,k,_,f,L,w,T;return{emailAuth:t.emailAuth!==!1,anonymousAuth:!!t.anonymousAuth,allowedRedirectUrlsText:(t.allowedRedirectUrls??[]).join(`
|
|
2
2
|
`),sessionAccessTokenTTL:((i=t.session)==null?void 0:i.accessTokenTTL)??"",sessionRefreshTokenTTL:((c=t.session)==null?void 0:c.refreshTokenTTL)??"",sessionMaxActiveSessions:typeof((v=t.session)==null?void 0:v.maxActiveSessions)=="number"?String(t.session.maxActiveSessions):"",magicLinkEnabled:!!((g=t.magicLink)!=null&&g.enabled),magicLinkAutoCreate:((B=t.magicLink)==null?void 0:B.autoCreate)!==!1,magicLinkTokenTTL:((z=t.magicLink)==null?void 0:z.tokenTTL)??"",emailOtpEnabled:!!((k=t.emailOtp)!=null&&k.enabled),emailOtpAutoCreate:((_=t.emailOtp)==null?void 0:_.autoCreate)!==!1,passkeysEnabled:!!((f=t.passkeys)!=null&&f.enabled),passkeysRpName:((L=t.passkeys)==null?void 0:L.rpName)??"",passkeysRpID:((w=t.passkeys)==null?void 0:w.rpID)??"",passkeysOriginText:(((T=t.passkeys)==null?void 0:T.origin)??[]).join(`
|
|
3
3
|
`)}}function Te(t){var c;const i={};for(const v of S){const g=(c=t.oauth)==null?void 0:c[v.id];i[v.id]={enabled:t.providers.includes(v.id),clientId:(g==null?void 0:g.clientId)??"",clientSecret:(g==null?void 0:g.clientSecret)??""}}return i}function I(t){const i={};for(const c of S)i[c.id]={...t[c.id]};return i}function Z(t){return`auth/settings?target=${t}`}function ee(t,i){const c=S.filter(g=>i[g.id].enabled).map(g=>g.id),v={};for(const g of S)v[g.id]={clientId:D(i[g.id].clientId),clientSecret:D(i[g.id].clientSecret)};return{emailAuth:t.emailAuth,anonymousAuth:t.anonymousAuth,allowedOAuthProviders:c,allowedRedirectUrls:Y(t.allowedRedirectUrlsText),session:{accessTokenTTL:D(t.sessionAccessTokenTTL),refreshTokenTTL:D(t.sessionRefreshTokenTTL),maxActiveSessions:we(t.sessionMaxActiveSessions)},magicLink:{enabled:t.magicLinkEnabled,autoCreate:t.magicLinkAutoCreate,tokenTTL:D(t.magicLinkTokenTTL)},emailOtp:{enabled:t.emailOtpEnabled,autoCreate:t.emailOtpAutoCreate},passkeys:{enabled:t.passkeysEnabled,rpName:D(t.passkeysRpName),rpID:D(t.passkeysRpID),origin:Y(t.passkeysOriginText)},oauth:v}}function te(){return e(m)?e(m)[e(p)]:null}function rt(t,i){for(const c of S){const v=i[c.id];if(v.enabled&&(!v.clientId.trim()||!v.clientSecret.trim()))return`${c.label} requires both a client ID and client secret.`}if(t.passkeysEnabled){if(!t.passkeysRpName.trim()||!t.passkeysRpID.trim())return"Passkeys require both RP Name and RP ID.";if(Y(t.passkeysOriginText).length===0)return"Passkeys require at least one allowed origin."}return t.sessionMaxActiveSessions.trim()&&we(t.sessionMaxActiveSessions)===null?"Max active sessions must be a valid number.":null}function ae(t,i){const c=it(t),v={development:Te(t),release:Te(i??t)};b(U,K(c),!0),b(l,K(c),!0),b($,{development:I(v.development),release:I(v.release)},!0),b(m,{development:I(v.development),release:I(v.release)},!0)}function nt(){!e(U)||!e($)||!e(m)||(b(l,K(e(U)),!0),b(m,{...e(m),[e(p)]:I(e($)[e(p)])},!0))}const ye=d(()=>(()=>{const t=te();return!e(l)||!e(U)||!t||!e($)?!1:JSON.stringify(ee(e(l),t))!==JSON.stringify(ee(e(U),e($)[e(p)]))})()),Ae=d(()=>(()=>{const t=te();return t?S.filter(i=>{var c;return(c=t[i.id])==null?void 0:c.enabled}).length:0})());async function dt(){const t=te();if(!e(u)||!e(l)||!t||!e($))return;const i=rt(e(l),t);if(i){be(i);return}b(V,!0);try{const c=ee(e(l),t);await J.schemaMutation(Z(e(p)),{method:"PUT",body:c}),b(U,K(e(l)),!0),b($,{...e($),[e(p)]:I(t)},!0),b(m,{...e(m),[e(p)]:I(t)},!0),Ye({type:"success",message:e(p)==="release"?"Release auth settings saved to edgebase.config.ts and .env.release.":"Development auth settings saved to edgebase.config.ts and local env files."})}catch(c){be(c instanceof Error?c.message:"Failed to save auth settings")}finally{b(V,!1)}}xt(async()=>{try{if(await Ct(),b(u,$t(Mt).devMode,!0),e(u))try{const t=await J.schemaMutation(Z("development")),i=await J.schemaMutation(Z("release"));ae(t,i)}catch(t){if(t instanceof St&&t.status===404){b(ke,!0),b(u,!1),Ye({type:"warning",message:"Dev sidecar is outdated. Showing read-only auth settings until you restart `pnpm dev`."});const i=await J.fetch("data/auth/settings");ae(i)}else throw t}else{const t=await J.fetch("data/auth/settings");ae(t)}}catch(t){be(t instanceof Error?t.message:"Failed to load auth settings")}finally{b(fe,!1)}}),Nt(at,{title:"Auth Settings",description:"Manage authentication methods and OAuth providers",get docsHref(){return Ut},actions:i=>{var c=zt(),v=X(c),g=o(v);he(g,{variant:"ghost",size:"sm",children:(k,_)=>{q();var f=W("Back to Users");h(k,f)},$$slots:{default:!0}}),n(v);var B=r(v,2);{var z=k=>{var _=Bt(),f=X(_);{let w=d(()=>!e(ye)||e(V));he(f,{variant:"secondary",size:"sm",onclick:nt,get disabled(){return e(w)},children:(T,se)=>{q();var H=W("Reset");h(T,H)},$$slots:{default:!0}})}var L=r(f,2);{let w=d(()=>!e(ye));he(L,{size:"sm",onclick:dt,get disabled(){return e(w)},get loading(){return e(V)},children:(T,se)=>{q();var H=W("Save Changes");h(T,H)},$$slots:{default:!0}})}h(k,_)};Q(B,k=>{e(u)&&e(l)&&k(z)})}F(()=>et(v,"href",`${Pt??""}/auth`)),h(i,c)},children:(i,c)=>{var v=Dt(),g=X(v);{var B=_=>{var f=Ht();h(_,f)},z=_=>{var f=qt();h(_,f)},k=_=>{var f=Xt(),L=X(f),w=o(L),T=o(w),se=r(o(T),2);N(se,{variant:"default",text:"Shared Config"}),n(T);var H=r(T,2),le=o(H),xe=o(le);{let s=d(()=>!e(u));E(xe,{label:"Email / Password",get disabled(){return e(s)},get checked(){return e(l).emailAuth},set checked(a){e(l).emailAuth=a}})}var ot=r(xe,2);{let s=d(()=>e(l).emailAuth?"success":"default"),a=d(()=>e(l).emailAuth?"Enabled":"Disabled");N(ot,{get variant(){return e(s)},get text(){return e(a)}})}n(le);var ie=r(le,2),$e=o(ie);{let s=d(()=>!e(u));E($e,{label:"Anonymous Sign-In",get disabled(){return e(s)},get checked(){return e(l).anonymousAuth},set checked(a){e(l).anonymousAuth=a}})}var ct=r($e,2);{let s=d(()=>e(l).anonymousAuth?"success":"default"),a=d(()=>e(l).anonymousAuth?"Enabled":"Disabled");N(ct,{get variant(){return e(s)},get text(){return e(a)}})}n(ie);var re=r(ie,2),ne=o(re),Le=o(ne);{let s=d(()=>!e(u));E(Le,{label:"Magic Link",get disabled(){return e(s)},get checked(){return e(l).magicLinkEnabled},set checked(a){e(l).magicLinkEnabled=a}})}var vt=r(Le,2);{let s=d(()=>!e(u));E(vt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).magicLinkAutoCreate},set checked(a){e(l).magicLinkAutoCreate=a}})}n(ne);var ut=r(ne,2);{let s=d(()=>!e(u));O(ut,{label:"Magic Link Token TTL",placeholder:"15m",get disabled(){return e(s)},get value(){return e(l).magicLinkTokenTTL},set value(a){e(l).magicLinkTokenTTL=a}})}n(re);var Re=r(re,2),Oe=o(Re),Ee=o(Oe);{let s=d(()=>!e(u));E(Ee,{label:"Email OTP",get disabled(){return e(s)},get checked(){return e(l).emailOtpEnabled},set checked(a){e(l).emailOtpEnabled=a}})}var gt=r(Ee,2);{let s=d(()=>!e(u));E(gt,{label:"Auto-create User",get disabled(){return e(s)},get checked(){return e(l).emailOtpAutoCreate},set checked(a){e(l).emailOtpAutoCreate=a}})}n(Oe),n(Re),n(H),n(w);var de=r(w,2),Se=r(o(de),2),De=o(Se);{let s=d(()=>!e(u));O(De,{label:"Access Token TTL",placeholder:"15m",get disabled(){return e(s)},get value(){return e(l).sessionAccessTokenTTL},set value(a){e(l).sessionAccessTokenTTL=a}})}var Ie=r(De,2);{let s=d(()=>!e(u));O(Ie,{label:"Refresh Token TTL",placeholder:"7d",get disabled(){return e(s)},get value(){return e(l).sessionRefreshTokenTTL},set value(a){e(l).sessionRefreshTokenTTL=a}})}var pt=r(Ie,2);{let s=d(()=>!e(u));O(pt,{label:"Max Active Sessions",type:"number",placeholder:"Blank = unlimited",get disabled(){return e(s)},get value(){return e(l).sessionMaxActiveSessions},set value(a){e(l).sessionMaxActiveSessions=a}})}n(Se),n(de);var oe=r(de,2),ce=o(oe),mt=r(o(ce),2);{let s=d(()=>e(l).passkeysEnabled?"success":"default"),a=d(()=>e(l).passkeysEnabled?"Enabled":"Disabled");N(mt,{get variant(){return e(s)},get text(){return e(a)}})}n(ce);var Pe=r(ce,2),Ce=o(Pe);{let s=d(()=>!e(u));E(Ce,{label:"Enable Passkeys",get disabled(){return e(s)},get checked(){return e(l).passkeysEnabled},set checked(a){e(l).passkeysEnabled=a}})}var Me=r(Ce,2);{let s=d(()=>!e(u));O(Me,{label:"RP Name",placeholder:"My App",get disabled(){return e(s)},get value(){return e(l).passkeysRpName},set value(a){e(l).passkeysRpName=a}})}var Ne=r(Me,2);{let s=d(()=>!e(u));O(Ne,{label:"RP ID",placeholder:"example.com",get disabled(){return e(s)},get value(){return e(l).passkeysRpID},set value(a){e(l).passkeysRpID=a}})}var Ue=r(Ne,2),ve=r(o(Ue),2);Qe(ve),n(Ue),n(Pe),n(oe);var ue=r(oe,2),ge=o(ue),_t=r(o(ge),2);N(_t,{variant:"default",text:"Shared Config"}),n(ge);var Be=r(ge,2),ze=o(Be),pe=r(o(ze),2);Qe(pe),n(ze),n(Be),n(ue);var He=r(ue,2),me=o(He),qe=r(o(me),2),Ge=o(qe);{let s=d(()=>e(Ae)>0?"primary":"default"),a=d(()=>`${e(Ae)} enabled`);N(Ge,{get variant(){return e(s)},get text(){return e(a)}})}var bt=r(Ge,2);{var ht=s=>{var a=jt();Ze(a,21,()=>lt,P=>P.id,(P,R)=>{var y=Gt();let G;var _e=o(y,!0);n(y),F(()=>{G=It(y,1,"target-switch__button svelte-wg73a1",null,G,{"target-switch__button--active":e(p)===e(R).id}),et(y,"aria-selected",e(p)===e(R).id),We(_e,e(R).label)}),Et("click",y,()=>{b(p,e(R).id,!0)}),h(P,y)}),n(a),h(s,a)};Q(bt,s=>{e(u)&&s(ht)})}n(qe),n(me);var je=r(me,2);Ze(je,21,()=>S,s=>s.id,(s,a)=>{var P=Jt(),R=o(P),y=o(R),G=o(y),_e=o(G,!0);n(G),q(2),n(y);var Ve=r(y,2),Ke=o(Ve);{let C=d(()=>e(m)[e(p)][e(a).id].enabled?"success":"default"),M=d(()=>e(m)[e(p)][e(a).id].enabled?"Enabled":"Disabled");N(Ke,{get variant(){return e(C)},get text(){return e(M)}})}var yt=r(Ke,2);{let C=d(()=>`Enable ${e(a).label}`),M=d(()=>!e(u));E(yt,{get label(){return e(C)},get disabled(){return e(M)},get checked(){return e(m)[e(p)][e(a).id].enabled},set checked(j){e(m)[e(p)][e(a).id].enabled=j}})}n(Ve),n(R);var Xe=r(R,2),Fe=o(Xe);{let C=d(()=>`${e(a).label} client ID`),M=d(()=>!e(u));O(Fe,{label:"Client ID",get placeholder(){return e(C)},get disabled(){return e(M)},get value(){return e(m)[e(p)][e(a).id].clientId},set value(j){e(m)[e(p)][e(a).id].clientId=j}})}var At=r(Fe,2);{let C=d(()=>`${e(a).label} client secret`),M=d(()=>!e(u));O(At,{label:"Client Secret",type:"password",get placeholder(){return e(C)},get disabled(){return e(M)},get value(){return e(m)[e(p)][e(a).id].clientSecret},set value(j){e(m)[e(p)][e(a).id].clientSecret=j}})}n(Xe),n(P),F(()=>We(_e,e(a).label)),h(s,P)}),n(je),n(He),n(L);var Je=r(L,2),ft=o(Je);{var kt=s=>{var a=Vt();q(12),h(s,a)},wt=s=>{var a=Kt();q(2),h(s,a)},Tt=s=>{var a=W("This dashboard is showing runtime auth configuration only. Editing remains disabled outside local dev mode.");h(s,a)};Q(ft,s=>{e(u)?s(kt):e(ke)?s(wt,1):s(Tt,!1)})}n(Je),F(()=>{ve.disabled=!e(u),pe.disabled=!e(u)}),tt(ve,()=>e(l).passkeysOriginText,s=>e(l).passkeysOriginText=s),tt(pe,()=>e(l).allowedRedirectUrlsText,s=>e(l).allowedRedirectUrlsText=s),h(_,f)};Q(g,_=>{e(fe)?_(B):!e(l)||!e(m)?_(z,1):_(k,!1)})}h(i,v)}}),Rt()}Ot(["click"]);export{ua as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as ce}from"../chunks/DoPXzH7F.js";import{p as pe,d as m,M as ve,f as I,a as ue,b as t,g as a,s as l,c as o,r,ae as J,t as A,u as fe}from"../chunks/glwixJlP.js";import{d as me,a as be,s as $}from"../chunks/D5h5A1cc.js";import{i as Q}from"../chunks/UUazaC_N.js";import{a as y,b as L,t as S,e as _e,d as ge}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as ce}from"../chunks/DoPXzH7F.js";import{p as pe,d as m,M as ve,f as I,a as ue,b as t,g as a,s as l,c as o,r,ae as J,t as A,u as fe}from"../chunks/glwixJlP.js";import{d as me,a as be,s as $}from"../chunks/D5h5A1cc.js";import{i as Q}from"../chunks/UUazaC_N.js";import{a as y,b as L,t as S,e as _e,d as ge}from"../chunks/BMMOfNi6.js";import{a as f,f as k,t as M}from"../chunks/BR_fL5Yv.js";import{d as W}from"../chunks/wJsUhbfZ.js";import{P as he}from"../chunks/CwROoZK0.js";import{b as ye}from"../chunks/Q2nPFxS6.js";import{B as U}from"../chunks/Cs0GwzJA.js";import{B as ke}from"../chunks/eFQHTGwA.js";import{C as we}from"../chunks/Bh56EfQ_.js";var De=k('<p class="card__loading svelte-lb9q8r">Loading DO list...</p>'),qe=k('<div class="do-item svelte-lb9q8r"><!> <span class="do-item__name svelte-lb9q8r"> </span></div>'),Oe=k('<div class="do-list svelte-lb9q8r"></div> <div class="card__actions svelte-lb9q8r"><!> <!></div>',1),$e=k('<div class="restore-preview svelte-lb9q8r"><p class="restore-preview__label svelte-lb9q8r">Backup Contents:</p> <ul class="restore-preview__list svelte-lb9q8r"><li> </li> <li> </li> <li> </li></ul></div> <div class="card__actions svelte-lb9q8r"><!></div>',1),Se=k('<div class="backup-layout svelte-lb9q8r"><div class="card svelte-lb9q8r"><div class="card__header svelte-lb9q8r"><h3 class="card__title svelte-lb9q8r">Create Backup</h3></div> <div class="card__body svelte-lb9q8r"><p class="card__desc svelte-lb9q8r">Download a full backup of all Durable Objects and Auth data.</p> <!></div></div> <div class="card svelte-lb9q8r"><div class="card__header svelte-lb9q8r"><h3 class="card__title svelte-lb9q8r">Restore from Backup</h3></div> <div class="card__body svelte-lb9q8r"><p class="card__desc svelte-lb9q8r">Upload a backup JSON file to restore. This will <strong>overwrite existing data</strong>.</p> <div class="restore-upload svelte-lb9q8r"><input type="file" accept=".json" class="restore-input svelte-lb9q8r"/></div> <!></div></div></div>'),Be=k("<!> <!>",1);function Ue(X,Y){pe(Y,!0);let H=m(!0),B=m(ve([])),P=m(!1),T=m(!1),w=m(null),u=m(null),R=m(!1),x=m(!1);ce(async()=>{try{const e=await y.fetch("data/backup/list-dos",{method:"POST"});t(B,e.dos,!0)}catch(e){S(e instanceof Error?e.message:"Failed to load DO list")}finally{t(H,!1)}});async function Z(){t(P,!0);try{const e={version:1,timestamp:new Date().toISOString(),dos:[]},i=[];for(const s of a(B))try{const C=await y.fetch("data/backup/dump-do",{method:"POST",body:{doName:s.doName,type:s.type}});i.push(C)}catch{i.push({doName:s.doName,type:s.type,error:"Failed to dump"})}let n={};try{n=await y.fetch("data/backup/dump-d1",{method:"POST"})}catch(s){console.warn("[EdgeBase] D1 dump failed:",s)}e.dos=i,e.d1=n;const d=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});W(d,`edgebase-backup-${new Date().toISOString().slice(0,10)}.json`),L("Backup downloaded")}catch(e){S(e instanceof Error?e.message:"Backup failed")}finally{t(P,!1)}}async function ee(){t(T,!0);try{const e=await y.fetch("data/backup/dump-d1",{method:"POST"}),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"});W(i,`edgebase-d1-backup-${new Date().toISOString().slice(0,10)}.json`),L("D1 backup downloaded")}catch(e){S(e instanceof Error?e.message:"D1 backup failed")}finally{t(T,!1)}}async function ae(e){var n;const i=e.target;if((n=i.files)!=null&&n[0]){t(w,i.files[0],!0);try{const d=await a(w).text();t(u,JSON.parse(d),!0),ge(`Backup loaded: ${a(w).name}`)}catch{S("Invalid backup file. Please select a valid EdgeBase JSON backup file."),t(w,null),t(u,null)}}}async function te(){if(t(x,!1),!!a(u)){t(R,!0);try{const e=a(u);let i=0;const n=e.dos??[];for(const s of n)if(!(s.error||!s.tables))try{await y.fetch("data/backup/restore-do",{method:"POST",body:{doName:s.doName,type:s.type,tables:s.tables}}),i++}catch{}const d=e.d1;if(d!=null&&d.tables)try{await y.fetch("data/backup/restore-d1",{method:"POST",body:{tables:d.tables}}),i++}catch{}L(`Restored ${i} components`),t(w,null),t(u,null)}catch(e){S(e instanceof Error?e.message:"Restore failed")}finally{t(R,!1)}}}var V=Be(),z=I(V);he(z,{title:"Backup & Restore",description:"Create backups and restore data",get docsHref(){return ye},children:(e,i)=>{var n=Se(),d=o(n),s=l(o(d),2),C=l(o(s),2);{var se=v=>{var b=De();f(v,b)},oe=v=>{var b=Oe(),_=I(b);_e(_,21,()=>a(B),c=>c.doName,(c,g)=>{var p=qe(),N=o(p);{let O=fe(()=>a(g).type==="auth"?"warning":"primary");ke(N,{get variant(){return a(O)},get text(){return a(g).type}})}var q=l(N,2),F=o(q,!0);r(q),r(p),A(()=>$(F,a(g).doName)),f(c,p)}),r(_);var D=l(_,2),h=o(D);U(h,{variant:"primary",onclick:Z,get loading(){return a(P)},children:(c,g)=>{J();var p=M();A(()=>$(p,`Download Full Backup (${a(B).length??""} DOs + D1)`)),f(c,p)},$$slots:{default:!0}});var j=l(h,2);U(j,{variant:"secondary",onclick:ee,get loading(){return a(T)},children:(c,g)=>{J();var p=M("D1 Only");f(c,p)},$$slots:{default:!0}}),r(D),f(v,b)};Q(C,v=>{a(H)?v(se):v(oe,!1)})}r(s),r(d);var G=l(d,2),K=l(o(G),2),E=l(o(K),2),le=o(E);r(E);var ie=l(E,2);{var de=v=>{var b=$e(),_=I(b),D=l(o(_),2),h=o(D),j=o(h);r(h);var c=l(h,2),g=o(c);r(c);var p=l(c,2),N=o(p);r(p),r(D),r(_);var q=l(_,2),F=o(q);U(F,{variant:"danger",onclick:()=>t(x,!0),get loading(){return a(R)},children:(O,xe)=>{J();var ne=M("Restore Backup");f(O,ne)},$$slots:{default:!0}}),r(q),A(O=>{$(j,`DOs: ${(a(u).dos??[]).length??""} components`),$(g,`D1: ${a(u).d1?"Included":"Not included"}`),$(N,`Timestamp: ${O??""}`)},[()=>String(a(u).timestamp??"Unknown")]),f(v,b)};Q(ie,v=>{a(u)&&v(de)})}r(K),r(G),r(n),be("change",le,ae),f(e,n)}});var re=l(z,2);we(re,{title:"Confirm Restore",message:"This will overwrite existing data with the backup contents. This action cannot be undone. Are you sure?",confirmLabel:"Restore",confirmVariant:"danger",onconfirm:te,get open(){return a(x)},set open(e){t(x,e,!0)}}),f(X,V),ue()}me(["change"]);export{Ue as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/glwixJlP.js";import{g as r}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/glwixJlP.js";import{g as r}from"../chunks/CB8xN3_t.js";import{b as p}from"../chunks/BOjkBtym.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{o as Je}from"../chunks/DoPXzH7F.js";import{p as Qe,d as U,M as lt,w as tn,g as t,a as en,b as z,ab as nn,f as st,c as M,r as L,s as f,ae as ue,t as H,u as F}from"../chunks/glwixJlP.js";import{d as sn,s as N,a as Kt}from"../chunks/D5h5A1cc.js";import{i as mt}from"../chunks/UUazaC_N.js";import{e as xt,i as an}from"../chunks/CCKNu7m7.js";import{c as ve,a as R,f as xe,d as Z}from"../chunks/BR_fL5Yv.js";import{a as s,c as rn,s as on}from"../chunks/C6puvcoR.js";import{b as cn}from"../chunks/CyqB6g-D.js";import{b as ln}from"../chunks/CxCPv_Ut.js";import{s as me}from"../chunks/B-h2afW5.js";import{P as dn}from"../chunks/CwROoZK0.js";import{d as fn}from"../chunks/Q2nPFxS6.js";import{E as hn}from"../chunks/DnyL7Zq-.js";var un=xe('<button type="button" class="erd-jump svelte-1n6qz2s"><span class="erd-jump__dot svelte-1n6qz2s"></span> </button>'),vn=Z('<rect height="24" rx="12" stroke-width="1"></rect><text class="erd-svg__badge svelte-1n6qz2s" text-anchor="middle"> </text>',1),mn=Z('<rect rx="4" fill="#ffffff" stroke="#d4d4d8" stroke-dasharray="5,4"></rect><text class="erd-svg__empty-title svelte-1n6qz2s">No tables yet</text><text class="erd-svg__empty-copy svelte-1n6qz2s">This database block exists in config, but there are no tables to draw.</text>',1),xn=Z('<g><rect rx="6" fill="#fbfbfa" stroke="#cfcfc9" stroke-width="1.4"></rect><line stroke="#d8d8d4" stroke-width="1"></line><text class="erd-svg__block-title svelte-1n6qz2s"> </text><text class="erd-svg__block-copy svelte-1n6qz2s"> </text><!><!></g>'),_n=Z('<rect height="18" rx="3" fill="#ffffff" stroke="#d4d4d8" stroke-width="1"></rect><text class="erd-svg__relation-label svelte-1n6qz2s" text-anchor="middle"> </text>',1),pn=Z('<path fill="none" stroke="#f8fafc" stroke-linecap="square" stroke-linejoin="miter"></path><path fill="none" stroke-linecap="square" stroke-linejoin="miter"></path><circle r="2.6" fill="#44403c"></circle><circle r="2.6" fill="#44403c"></circle><!>',1),yn=Z('<line stroke="#d6d6d6" stroke-width="1"></line>'),gn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s" fill="#111827">PK</text>'),bn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s">FK</text>'),wn=Z('<!><!><text> </text><text class="erd-svg__field-type svelte-1n6qz2s" text-anchor="end"> </text>',1),Mn=Z('<g><rect fill="#ffffff" stroke="#585858" stroke-width="1.3"></rect><rect fill="#dddddd"></rect><line stroke="#585858" stroke-width="1.1"></line><text class="erd-svg__table-title svelte-1n6qz2s"> </text><text class="erd-svg__table-meta svelte-1n6qz2s"> </text><a><rect rx="3" fill="#ffffff" stroke-width="1"></rect><text class="erd-svg__open svelte-1n6qz2s" text-anchor="middle">Open</text></a><!></g>'),Ln=xe('<div class="erd-toolbar svelte-1n6qz2s"><div class="erd-counts svelte-1n6qz2s"><span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span></div> <div class="erd-legend svelte-1n6qz2s"><span class="erd-legend__title svelte-1n6qz2s">Providers</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#2563eb"></span>D1</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#0f766e"></span>DO</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c2410c"></span>Postgres</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c026d3"></span>Neon</span></div></div> <div class="erd-jumpbar svelte-1n6qz2s"><span class="erd-jumpbar__title svelte-1n6qz2s">Jump to DB</span> <!></div> <div class="erd-container svelte-1n6qz2s" role="region" aria-label="Entity relationship diagram. Use the mouse wheel to scroll, drag to pan, and use the controls to zoom or reset the view."><svg class="erd-svg svelte-1n6qz2s" preserveAspectRatio="xMinYMin meet"><rect x="0" y="0" fill="#f5f5f4"></rect><!><!><!></svg> <div class="erd-controls svelte-1n6qz2s"><button type="button" class="erd-control erd-control--wide svelte-1n6qz2s">Reset</button> <button type="button" class="erd-control svelte-1n6qz2s">+</button> <span class="erd-controls__zoom svelte-1n6qz2s"> </span> <button type="button" class="erd-control svelte-1n6qz2s">-</button></div> <div class="erd-hint svelte-1n6qz2s"><span>Readable first</span> <span>Wheel to scroll</span> <span>Drag to pan</span> <span>Use the buttons to zoom</span></div></div>',1);function Yn(_e,pe){Qe(pe,!0);const O=300,it=42,Lt=26,Pt=3,Wt=54,ye=22,at=56,tt=18,Ht=72,It=24,St=28,ge=40,be=20,Ft=24,jt=88,we=900,Me=20,Le=520,_t=1220,pt=760,ke=980,De=680,Ee=.6,$e=2.25,kt=1.1,ze={do:"#0f766e",d1:"#2563eb",postgres:"#c2410c",neon:"#c026d3"};let Dt=U(lt([])),Xt=U(lt([])),rt=U(lt([])),J=U(lt({w:_t,h:pt})),yt=U(lt({x:0,y:0,w:_t,h:pt})),h=U(lt({x:0,y:0,w:_t,h:pt})),j=U(kt),Rt=U(!1),Et=U(lt({x:0,y:0})),D=U(null);function At(e,r){const n=e.replace("#","");if(n.length!==6)return`rgba(107, 114, 128, ${r})`;const a=Number.parseInt(n.slice(0,2),16),c=Number.parseInt(n.slice(2,4),16),l=Number.parseInt(n.slice(4,6),16);return`rgba(${a}, ${c}, ${l}, ${r})`}function Vt(e){const r=["#64748b","#2563eb","#0f766e","#c2410c","#c026d3","#7c3aed"];let n=0;for(const a of e)n=n*33+a.charCodeAt(0)>>>0;return r[n%r.length]??"#64748b"}function Oe(e,r){return e?ze[e]??Vt(r):Vt(r)}function qe(e){return e==="neon"?"NEON":e==="postgres"?"POSTGRES":e==="d1"?"D1":e==="do"?"DO":"UNKNOWN"}function Ce(e){return e?"Per-tenant DB":"Single DB"}function Gt(e){return Math.max(60,e.length*7+18)}function Ut(e){return e.reduce((r,n,a)=>r+Gt(n.label)+(a>0?8:0),0)}function Be(e,r,n){let a=r;return e.map(c=>{const l=Gt(c.label),d={...c,x:a,y:n,width:l};return a+=l+8,d})}function Ke(e){return Math.max(44,e.length*7+14)}function Zt(e,r,n=0){return Math.max(n,e.length*r+10)}function Yt(e){return e?typeof e=="string"?{table:e,column:"id"}:{table:e.table,column:e.column??"id"}:null}function We(e){const r=[{name:"id",type:"uuid",pk:!0}];for(const[n,a]of Object.entries(e||{})){const c=Yt(a.references);r.push({name:n,type:a.type??"text",fk:c==null?void 0:c.table})}return r}function Xe(e){return it+e.length*Lt+8}function dt(e){const r=Math.min(e.w,t(J).w),n=Math.min(e.h,t(J).h),a=Math.max(0,t(J).w-r),c=Math.max(0,t(J).h-n);return{x:Math.min(Math.max(e.x,0),a),y:Math.min(Math.max(e.y,0),c),w:r,h:n}}function Jt(e,r){const n=Math.max(Ee,Math.min($e,e)),a=t(yt).w/n,c=t(yt).h/n;{const l=t(h).x+t(h).w/2,d=t(h).y+t(h).h/2;z(h,dt({x:l-a/2,y:d-c/2,w:a,h:c}),!0)}z(j,n,!0)}function Re(){var n,a;const e=(n=t(D))!=null&&n.clientWidth?Math.max(ke,t(D).clientWidth):_t,r=(a=t(D))!=null&&a.clientHeight?Math.max(De,t(D).clientHeight):pt;return{w:Math.min(t(J).w,e),h:Math.min(t(J).h,r)}}function Tt(e=!1){const r=Re();if(z(yt,{x:0,y:0,w:r.w,h:r.h},!0),e){z(j,kt),z(h,dt({x:0,y:0,w:r.w/kt,h:r.h/kt}),!0);return}const n=r.w/t(j),a=r.h/t(j),c=t(h).x+t(h).w/2,l=t(h).y+t(h).h/2;z(h,dt({x:c-n/2,y:l-a/2,w:n,h:a}),!0)}function Ae(){Tt(!0)}function Ye(e){const r=t(rt).find(c=>c.key===e);if(!r)return;const n=t(yt).w/t(j),a=t(yt).h/t(j);z(h,dt({x:Math.max(0,r.x-24),y:Math.max(0,r.y-24),w:n,h:a}),!0)}function Qt(e){var u,q;e.preventDefault();const r=Math.max(((u=t(D))==null?void 0:u.clientWidth)??1,1),n=Math.max(((q=t(D))==null?void 0:q.clientHeight)??1,1),a=t(h).w/r,c=t(h).h/n;let l=t(h).x+e.deltaX*a,d=t(h).y+e.deltaY*c;e.shiftKey&&Math.abs(e.deltaX)<Math.abs(e.deltaY)&&(l=t(h).x+e.deltaY*a,d=t(h).y),z(h,dt({...t(h),x:l,y:d}),!0)}function te(e){if(e.button!==0)return;const r=e.target;r instanceof Element&&r.closest("a, button, input, textarea, select, [data-no-pan]")||(z(Rt,!0),z(Et,{x:e.clientX,y:e.clientY},!0))}function ee(e){var a,c;if(!t(Rt))return;const r=(e.clientX-t(Et).x)*(t(h).w/Math.max(((a=t(D))==null?void 0:a.clientWidth)??1,1)),n=(e.clientY-t(Et).y)*(t(h).h/Math.max(((c=t(D))==null?void 0:c.clientHeight)??1,1));z(h,dt({...t(h),x:t(h).x-r,y:t(h).y-n}),!0),z(Et,{x:e.clientX,y:e.clientY},!0)}function ne(){z(Rt,!1)}function Te(e,r,n){var a,c,l;return r[n]??{provider:(a=e[0])==null?void 0:a[1].provider,dynamic:(c=e[0])==null?void 0:c[1].dynamic,instanceDiscovery:(l=e[0])==null?void 0:l[1].instanceDiscovery}}function se(e){const r=new Set(e.map(([a])=>a)),n=new Map;for(const[a,c]of e){const l=[];for(const d of Object.values(c.fields||{})){const u=Yt(d.references);u&&r.has(u.table)&&l.push(u.table)}n.set(a,l)}return n}function Ne(e){const r=se(e),n=new Map,a=new Set;function c(l){if(n.has(l))return n.get(l);if(a.has(l))return 0;a.add(l);let d=0;for(const u of r.get(l)??[])d=Math.max(d,c(u)+1);return a.delete(l),n.set(l,d),d}for(const[l]of e)c(l);return n}function Pe(e){const r=se(e),n=new Map;for(const[a]of e)n.set(a,0);for(const[a,c]of r){n.set(a,(n.get(a)??0)+c.length);for(const l of c)n.set(l,(n.get(l)??0)+1)}return n}function He(e){var n;const r=[];for(const[a,c]of Object.entries(e))for(const[l,d]of Object.entries(c.fields||{})){const u=Yt(d.references);u&&r.push({id:`${a}.${l}->${u.table}.${u.column}`,from:a,fromField:l,to:u.table,toField:u.column,fromDatabaseKey:c.namespace||"default",toDatabaseKey:((n=e[u.table])==null?void 0:n.namespace)||"default"})}return r}function Ie(e,r){const n=[];let a=[],c=0;for(const l of e){const d=a.length===0?l.height:c+St+l.height;if(a.length>0&&d>we){n.push({level:r,tables:a,height:c}),a=[l],c=l.height;continue}a.push(l),c=d}return a.length>0&&n.push({level:r,tables:a,height:c}),n}function ae(e,r,n){var l;const a=((l=r.get(e))==null?void 0:l.length)??0;return[n.filter(d=>d.fromDatabaseKey===e||d.toDatabaseKey===e).length,a,e]}function re(e,r){return`${e} internal relation${e===1?"":"s"}`+(r>0?` · ${r} cross-db`:"")}function oe(e){return[{label:qe(e.provider),fill:At(e.color,.12),stroke:At(e.color,.28),color:e.color},{label:Ce(e.dynamic),fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.tableCount} table${e.tableCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.relationCount} relation${e.relationCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"}]}function Se(e,r,n){const a=Zt(e,10,110),c=Zt(n,7,210),l=Math.max(a,c),d=tt*2+l+Me+Ut(r);return Math.max(Le,d)}function ce(e){return t(Dt).find(r=>r.name===e)}function le(e,r){const n=e.fields.findIndex(a=>a.name===r);return e.y+it+(n>=0?n:0)*Lt+Lt/2}function Fe(e,r){const n=ce(e.from),a=ce(e.to);if(!n||!a)return null;const c=le(n,e.fromField),l=le(a,e.toField),d=28+r%5*10;if(a.x>=n.x+O){const m=n.x+O,y=a.x,C=m+(y-m)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}if(a.x+O<=n.x){const m=n.x,y=a.x+O,C=y+(m-y)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}const u=e.toDatabaseKey!==e.fromDatabaseKey||a.y>=n.y,q=u?n.x+O:n.x,p=u?a.x+O:a.x,v=u?Math.max(q,p)+d:Math.min(q,p)-d;return{d:`M ${q} ${c} L ${v} ${c} L ${v} ${l} L ${p} ${l}`,startX:q,startY:c,endX:p,endY:l,labelX:v,labelY:(c+l)/2}}Je(()=>(me.loadSchema(),me.subscribe(r=>{const n=new Map;for(const[p,v]of Object.entries(r.schema).sort(([m],[y])=>m.localeCompare(y))){const m=v.namespace||"default",y=n.get(m)??[];y.push([p,v]),n.set(m,y)}const a=He(r.schema),c=Array.from(new Set([...Object.keys(r.namespaces),...n.keys()])).sort((p,v)=>{const[m,y]=ae(p,n,a),[C,et]=ae(v,n,a);return C!==m?C-m:et!==y?et-y:p.localeCompare(v)}),l=[],d=[];let u=be,q=_t;for(const p of c){const v=n.get(p)??[],m=Te(v,r.namespaces,p),y=Oe(m.provider,p),C=Ne(v),et=Pe(v),Nt=new Map(v),gt=v.length===0?1:Math.max(...C.values(),0)+1,bt=Array.from({length:gt},()=>[]);for(const[i]of v){const x=C.get(i)??0,E=Nt.get(i);if(!E)continue;const b=We(E.fields);bt[x].push({name:i,fields:b,height:Xe(b)})}for(const i of bt)i.sort((x,E)=>{const b=(et.get(E.name)??0)-(et.get(x.name)??0);return b!==0?b:x.name.localeCompare(E.name)});const V=bt.flatMap((i,x)=>Ie(i,x)),ot=v.length===0?jt:Math.max(...V.map(i=>i.height),0),wt=V.reduce((i,x,E)=>{if(E===0)return i;const b=V[E-1];return i+((b==null?void 0:b.level)===x.level?It:Ht)},0),ft=a.filter(i=>i.fromDatabaseKey===p||i.toDatabaseKey===p).length,ht=a.filter(i=>i.fromDatabaseKey===p&&i.toDatabaseKey===p).length,$t=ft-ht,zt=oe({provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft}),Ot=re(ht,$t),Mt=v.length===0?O:V.length*O+wt,ct=Math.max(tt*2+Mt,Se(p,zt,Ot)),qt=at+tt*2+ot,Ct=Ft,g=u;let W=Ct+tt+Math.max(0,(ct-tt*2-Mt)/2);for(const[i,x]of V.entries()){let E=g+at+tt+(ot-x.height)/2;for(const k of x.tables)l.push({name:k.name,databaseKey:p,fields:k.fields,x:W,y:E,height:k.height}),E+=k.height+St;const b=V[i+1];b&&(W+=O+(x.level===b.level?It:Ht))}d.push({key:p,provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft,internalRelationCount:ht,crossRelationCount:$t,x:Ct,y:g,width:ct,height:qt,empty:v.length===0}),u+=qt+ge,q=Math.max(q,ct+Ft*2)}z(Dt,l,!0),z(Xt,a,!0),z(rt,d,!0),z(J,{w:q,h:Math.max(u,pt)},!0),nn().then(()=>{Tt(!0)})}))),tn(()=>{if(!t(D)||typeof window>"u")return;const e=typeof ResizeObserver<"u"?new ResizeObserver(()=>{Tt(!1)}):null,r=()=>ne(),n=()=>ne();return t(D).addEventListener("wheel",Qt,{passive:!1}),t(D).addEventListener("mousedown",te),t(D).addEventListener("mousemove",ee),t(D).addEventListener("mouseleave",n),window.addEventListener("mouseup",r),e==null||e.observe(t(D)),()=>{var a,c,l,d;(a=t(D))==null||a.removeEventListener("wheel",Qt),(c=t(D))==null||c.removeEventListener("mousedown",te),(l=t(D))==null||l.removeEventListener("mousemove",ee),(d=t(D))==null||d.removeEventListener("mouseleave",n),window.removeEventListener("mouseup",r),e==null||e.disconnect()}}),dn(_e,{title:"Schema ERD",description:"Database blocks come directly from edgebase.config.ts, including provider and single vs per-tenant topology.",get docsHref(){return fn},children:(e,r)=>{var n=ve(),a=st(n);{var c=d=>{hn(d,{title:"No databases",description:"Define database blocks in your config to see the ERD."})},l=d=>{var u=Ln(),q=st(u),p=M(q),v=M(p),m=M(v);L(v);var y=f(v,2),C=M(y);L(y);var et=f(y,2),Nt=M(et);L(et),L(p),ue(2),L(q);var gt=f(q,2),bt=f(M(gt),2);xt(bt,17,()=>t(rt),g=>g.key,(g,o)=>{var W=un(),i=M(W),x=f(i);L(W),H(()=>{rn(i,`background:${t(o).color}`),N(x,` ${t(o).key??""}`)}),Kt("click",W,()=>Ye(t(o).key)),R(g,W)}),L(gt);var V=f(gt,2),ot=M(V),wt=M(ot),ft=f(wt);xt(ft,17,()=>t(rt),g=>g.key,(g,o)=>{const W=F(()=>oe(t(o))),i=F(()=>re(t(o).internalRelationCount,t(o).crossRelationCount)),x=F(()=>t(o).x+(t(o).width-O)/2),E=F(()=>Be(t(W),t(o).x+t(o).width-tt-Ut(t(W)),t(o).y+15));var b=xn(),k=M(b),B=f(k),K=f(B),A=M(K,!0);L(K);var I=f(K),S=M(I,!0);L(I);var ut=f(I);xt(ut,17,()=>t(E),Y=>Y.label,(Y,$)=>{var w=vn(),_=st(w),T=f(_),nt=M(T,!0);L(T),H(()=>{s(_,"x",t($).x),s(_,"y",t($).y),s(_,"width",t($).width),s(_,"fill",t($).fill),s(_,"stroke",t($).stroke),s(T,"x",t($).x+t($).width/2),s(T,"y",t($).y+16),s(T,"fill",t($).color),N(nt,t($).label)}),R(Y,w)});var Q=f(ut);{var P=Y=>{var $=mn(),w=st($);s(w,"width",O),s(w,"height",jt);var _=f(w),T=f(_);H(()=>{s(w,"x",t(x)),s(w,"y",t(o).y+at+tt),s(_,"x",t(x)+16),s(_,"y",t(o).y+at+50),s(T,"x",t(x)+16),s(T,"y",t(o).y+at+72)}),R(Y,$)};mt(Q,Y=>{t(o).empty&&Y(P)})}L(b),H(()=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"width",t(o).width),s(k,"height",t(o).height),s(B,"x1",t(o).x),s(B,"y1",t(o).y+at),s(B,"x2",t(o).x+t(o).width),s(B,"y2",t(o).y+at),s(K,"x",t(o).x+18),s(K,"y",t(o).y+25),N(A,t(o).key),s(I,"x",t(o).x+18),s(I,"y",t(o).y+43),N(S,t(i))}),R(g,b)});var ht=f(ft);xt(ht,19,()=>t(Xt),g=>g.id,(g,o,W)=>{const i=F(()=>Fe(t(o),t(W)));var x=ve(),E=st(x);{var b=k=>{var B=pn(),K=st(B),A=f(K),I=f(A),S=f(I),ut=f(S);{var Q=P=>{const Y=F(()=>Ke(t(o).fromField));var $=_n(),w=st($),_=f(w),T=M(_,!0);L(_),H(()=>{s(w,"x",t(i).labelX-t(Y)/2),s(w,"y",t(i).labelY-10),s(w,"width",t(Y)),s(_,"x",t(i).labelX),s(_,"y",t(i).labelY+2),N(T,t(o).fromField)}),R(P,$)};mt(ut,P=>{t(j)>=.95&&P(Q)})}H(()=>{s(K,"d",t(i).d),s(K,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"5.6":"5"),s(A,"d",t(i).d),s(A,"stroke",t(o).fromDatabaseKey===t(o).toDatabaseKey?"#52525b":"#64748b"),s(A,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"2.2":"1.9"),s(A,"stroke-dasharray",t(o).fromDatabaseKey===t(o).toDatabaseKey?void 0:"7 5"),s(I,"cx",t(i).startX),s(I,"cy",t(i).startY),s(S,"cx",t(i).endX),s(S,"cy",t(i).endY)}),R(k,B)};mt(E,k=>{t(i)&&k(b)})}R(g,x)});var $t=f(ht);xt($t,17,()=>t(Dt),g=>g.name,(g,o)=>{const W=F(()=>t(rt).find(w=>w.key===t(o).databaseKey)),i=F(()=>{var w;return((w=t(W))==null?void 0:w.color)??"#64748b"}),x=F(()=>t(o).x+O-Wt-12),E=F(()=>t(o).y+10);var b=Mn(),k=M(b);s(k,"width",O),s(k,"rx",Pt);var B=f(k);s(B,"width",O),s(B,"height",it),s(B,"rx",Pt);var K=f(B),A=f(K),I=M(A,!0);L(A);var S=f(A),ut=M(S,!0);L(S);var Q=f(S),P=M(Q);s(P,"width",Wt),s(P,"height",ye);var Y=f(P);L(Q);var $=f(Q);xt($,17,()=>t(o).fields,an,(w,_,T)=>{const nt=F(()=>t(o).y+it+T*Lt);var ie=wn(),de=st(ie);{var je=G=>{var X=yn();H(()=>{s(X,"x1",t(o).x),s(X,"y1",t(nt)),s(X,"x2",t(o).x+O),s(X,"y2",t(nt))}),R(G,X)};mt(de,G=>{T>0&&G(je)})}var fe=f(de);{var Ve=G=>{var X=gn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17)}),R(G,X)},Ge=G=>{var X=bn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17),s(X,"fill",t(i))}),R(G,X)};mt(fe,G=>{t(_).pk?G(Ve):t(_).fk&&G(Ge,1)})}var vt=f(fe);let he;var Ue=M(vt,!0);L(vt);var Bt=f(vt),Ze=M(Bt,!0);L(Bt),H(()=>{s(vt,"x",t(o).x+(t(_).pk||t(_).fk?36:12)),s(vt,"y",t(nt)+17),he=on(vt,0,"erd-svg__field-name svelte-1n6qz2s",null,he,{"erd-svg__field-name--key":t(_).pk||t(_).fk}),N(Ue,t(_).name),s(Bt,"x",t(o).x+O-12),s(Bt,"y",t(nt)+17),N(Ze,t(_).type)}),R(w,ie)}),L(b),H(w=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"height",t(o).height),s(B,"x",t(o).x),s(B,"y",t(o).y),s(K,"x1",t(o).x),s(K,"y1",t(o).y+it),s(K,"x2",t(o).x+O),s(K,"y2",t(o).y+it),s(A,"x",t(o).x+14),s(A,"y",t(o).y+26),N(I,t(o).name),s(S,"x",t(o).x+14),s(S,"y",t(o).y+39),N(ut,t(o).databaseKey),s(Q,"href",`${ln}/database/tables/${t(o).name}`),s(Q,"aria-label",`Open table ${t(o).name}`),s(P,"x",t(x)),s(P,"y",t(E)),s(P,"stroke",w),s(Y,"x",t(x)+Wt/2),s(Y,"y",t(E)+15)},[()=>At(t(i),.45)]),R(g,b)}),L(ot);var zt=f(ot,2),Ot=M(zt),Mt=f(Ot,2),ct=f(Mt,2),qt=M(ct);L(ct);var Ct=f(ct,2);L(zt),ue(2),L(V),cn(V,g=>z(D,g),()=>t(D)),H(g=>{N(m,`${t(rt).length??""} DB`),N(C,`${t(Dt).length??""} Tables`),N(Nt,`${t(Xt).length??""} Relations`),s(ot,"viewBox",`${t(h).x} ${t(h).y} ${t(h).w} ${t(h).h}`),s(wt,"width",t(J).w),s(wt,"height",t(J).h),N(qt,`${g??""}%`)},[()=>Math.round(t(j)*100)]),Kt("click",Ot,Ae),Kt("click",Mt,()=>Jt(t(j)*1.12)),Kt("click",Ct,()=>Jt(t(j)/1.12)),R(d,u)};mt(a,d=>{t(rt).length===0?d(c):d(l,!1)})}R(e,n)}}),en()}sn(["click"]);export{Yn as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{o as Je}from"../chunks/DoPXzH7F.js";import{p as Qe,d as U,M as lt,w as tn,g as t,a as en,b as z,ab as nn,f as st,c as M,r as L,s as f,ae as ue,t as H,u as F}from"../chunks/glwixJlP.js";import{d as sn,s as N,a as Kt}from"../chunks/D5h5A1cc.js";import{i as mt}from"../chunks/UUazaC_N.js";import{e as xt,i as an}from"../chunks/BMMOfNi6.js";import{c as ve,a as R,f as xe,d as Z}from"../chunks/BR_fL5Yv.js";import{a as s,c as rn,s as on}from"../chunks/C6puvcoR.js";import{b as cn}from"../chunks/CyqB6g-D.js";import{b as ln}from"../chunks/BOjkBtym.js";import{s as me}from"../chunks/C0LrJucL.js";import{P as dn}from"../chunks/CwROoZK0.js";import{d as fn}from"../chunks/Q2nPFxS6.js";import{E as hn}from"../chunks/DnyL7Zq-.js";var un=xe('<button type="button" class="erd-jump svelte-1n6qz2s"><span class="erd-jump__dot svelte-1n6qz2s"></span> </button>'),vn=Z('<rect height="24" rx="12" stroke-width="1"></rect><text class="erd-svg__badge svelte-1n6qz2s" text-anchor="middle"> </text>',1),mn=Z('<rect rx="4" fill="#ffffff" stroke="#d4d4d8" stroke-dasharray="5,4"></rect><text class="erd-svg__empty-title svelte-1n6qz2s">No tables yet</text><text class="erd-svg__empty-copy svelte-1n6qz2s">This database block exists in config, but there are no tables to draw.</text>',1),xn=Z('<g><rect rx="6" fill="#fbfbfa" stroke="#cfcfc9" stroke-width="1.4"></rect><line stroke="#d8d8d4" stroke-width="1"></line><text class="erd-svg__block-title svelte-1n6qz2s"> </text><text class="erd-svg__block-copy svelte-1n6qz2s"> </text><!><!></g>'),_n=Z('<rect height="18" rx="3" fill="#ffffff" stroke="#d4d4d8" stroke-width="1"></rect><text class="erd-svg__relation-label svelte-1n6qz2s" text-anchor="middle"> </text>',1),pn=Z('<path fill="none" stroke="#f8fafc" stroke-linecap="square" stroke-linejoin="miter"></path><path fill="none" stroke-linecap="square" stroke-linejoin="miter"></path><circle r="2.6" fill="#44403c"></circle><circle r="2.6" fill="#44403c"></circle><!>',1),yn=Z('<line stroke="#d6d6d6" stroke-width="1"></line>'),gn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s" fill="#111827">PK</text>'),bn=Z('<text class="erd-svg__field-flag svelte-1n6qz2s">FK</text>'),wn=Z('<!><!><text> </text><text class="erd-svg__field-type svelte-1n6qz2s" text-anchor="end"> </text>',1),Mn=Z('<g><rect fill="#ffffff" stroke="#585858" stroke-width="1.3"></rect><rect fill="#dddddd"></rect><line stroke="#585858" stroke-width="1.1"></line><text class="erd-svg__table-title svelte-1n6qz2s"> </text><text class="erd-svg__table-meta svelte-1n6qz2s"> </text><a><rect rx="3" fill="#ffffff" stroke-width="1"></rect><text class="erd-svg__open svelte-1n6qz2s" text-anchor="middle">Open</text></a><!></g>'),Ln=xe('<div class="erd-toolbar svelte-1n6qz2s"><div class="erd-counts svelte-1n6qz2s"><span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span> <span class="erd-count svelte-1n6qz2s"> </span></div> <div class="erd-legend svelte-1n6qz2s"><span class="erd-legend__title svelte-1n6qz2s">Providers</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#2563eb"></span>D1</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#0f766e"></span>DO</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c2410c"></span>Postgres</span> <span class="erd-legend__item svelte-1n6qz2s"><span class="erd-legend__dot svelte-1n6qz2s" style="background:#c026d3"></span>Neon</span></div></div> <div class="erd-jumpbar svelte-1n6qz2s"><span class="erd-jumpbar__title svelte-1n6qz2s">Jump to DB</span> <!></div> <div class="erd-container svelte-1n6qz2s" role="region" aria-label="Entity relationship diagram. Use the mouse wheel to scroll, drag to pan, and use the controls to zoom or reset the view."><svg class="erd-svg svelte-1n6qz2s" preserveAspectRatio="xMinYMin meet"><rect x="0" y="0" fill="#f5f5f4"></rect><!><!><!></svg> <div class="erd-controls svelte-1n6qz2s"><button type="button" class="erd-control erd-control--wide svelte-1n6qz2s">Reset</button> <button type="button" class="erd-control svelte-1n6qz2s">+</button> <span class="erd-controls__zoom svelte-1n6qz2s"> </span> <button type="button" class="erd-control svelte-1n6qz2s">-</button></div> <div class="erd-hint svelte-1n6qz2s"><span>Readable first</span> <span>Wheel to scroll</span> <span>Drag to pan</span> <span>Use the buttons to zoom</span></div></div>',1);function Yn(_e,pe){Qe(pe,!0);const O=300,it=42,Lt=26,Pt=3,Wt=54,ye=22,at=56,tt=18,Ht=72,It=24,St=28,ge=40,be=20,Ft=24,jt=88,we=900,Me=20,Le=520,_t=1220,pt=760,ke=980,De=680,Ee=.6,$e=2.25,kt=1.1,ze={do:"#0f766e",d1:"#2563eb",postgres:"#c2410c",neon:"#c026d3"};let Dt=U(lt([])),Xt=U(lt([])),rt=U(lt([])),J=U(lt({w:_t,h:pt})),yt=U(lt({x:0,y:0,w:_t,h:pt})),h=U(lt({x:0,y:0,w:_t,h:pt})),j=U(kt),Rt=U(!1),Et=U(lt({x:0,y:0})),D=U(null);function At(e,r){const n=e.replace("#","");if(n.length!==6)return`rgba(107, 114, 128, ${r})`;const a=Number.parseInt(n.slice(0,2),16),c=Number.parseInt(n.slice(2,4),16),l=Number.parseInt(n.slice(4,6),16);return`rgba(${a}, ${c}, ${l}, ${r})`}function Vt(e){const r=["#64748b","#2563eb","#0f766e","#c2410c","#c026d3","#7c3aed"];let n=0;for(const a of e)n=n*33+a.charCodeAt(0)>>>0;return r[n%r.length]??"#64748b"}function Oe(e,r){return e?ze[e]??Vt(r):Vt(r)}function qe(e){return e==="neon"?"NEON":e==="postgres"?"POSTGRES":e==="d1"?"D1":e==="do"?"DO":"UNKNOWN"}function Ce(e){return e?"Per-tenant DB":"Single DB"}function Gt(e){return Math.max(60,e.length*7+18)}function Ut(e){return e.reduce((r,n,a)=>r+Gt(n.label)+(a>0?8:0),0)}function Be(e,r,n){let a=r;return e.map(c=>{const l=Gt(c.label),d={...c,x:a,y:n,width:l};return a+=l+8,d})}function Ke(e){return Math.max(44,e.length*7+14)}function Zt(e,r,n=0){return Math.max(n,e.length*r+10)}function Yt(e){return e?typeof e=="string"?{table:e,column:"id"}:{table:e.table,column:e.column??"id"}:null}function We(e){const r=[{name:"id",type:"uuid",pk:!0}];for(const[n,a]of Object.entries(e||{})){const c=Yt(a.references);r.push({name:n,type:a.type??"text",fk:c==null?void 0:c.table})}return r}function Xe(e){return it+e.length*Lt+8}function dt(e){const r=Math.min(e.w,t(J).w),n=Math.min(e.h,t(J).h),a=Math.max(0,t(J).w-r),c=Math.max(0,t(J).h-n);return{x:Math.min(Math.max(e.x,0),a),y:Math.min(Math.max(e.y,0),c),w:r,h:n}}function Jt(e,r){const n=Math.max(Ee,Math.min($e,e)),a=t(yt).w/n,c=t(yt).h/n;{const l=t(h).x+t(h).w/2,d=t(h).y+t(h).h/2;z(h,dt({x:l-a/2,y:d-c/2,w:a,h:c}),!0)}z(j,n,!0)}function Re(){var n,a;const e=(n=t(D))!=null&&n.clientWidth?Math.max(ke,t(D).clientWidth):_t,r=(a=t(D))!=null&&a.clientHeight?Math.max(De,t(D).clientHeight):pt;return{w:Math.min(t(J).w,e),h:Math.min(t(J).h,r)}}function Tt(e=!1){const r=Re();if(z(yt,{x:0,y:0,w:r.w,h:r.h},!0),e){z(j,kt),z(h,dt({x:0,y:0,w:r.w/kt,h:r.h/kt}),!0);return}const n=r.w/t(j),a=r.h/t(j),c=t(h).x+t(h).w/2,l=t(h).y+t(h).h/2;z(h,dt({x:c-n/2,y:l-a/2,w:n,h:a}),!0)}function Ae(){Tt(!0)}function Ye(e){const r=t(rt).find(c=>c.key===e);if(!r)return;const n=t(yt).w/t(j),a=t(yt).h/t(j);z(h,dt({x:Math.max(0,r.x-24),y:Math.max(0,r.y-24),w:n,h:a}),!0)}function Qt(e){var u,q;e.preventDefault();const r=Math.max(((u=t(D))==null?void 0:u.clientWidth)??1,1),n=Math.max(((q=t(D))==null?void 0:q.clientHeight)??1,1),a=t(h).w/r,c=t(h).h/n;let l=t(h).x+e.deltaX*a,d=t(h).y+e.deltaY*c;e.shiftKey&&Math.abs(e.deltaX)<Math.abs(e.deltaY)&&(l=t(h).x+e.deltaY*a,d=t(h).y),z(h,dt({...t(h),x:l,y:d}),!0)}function te(e){if(e.button!==0)return;const r=e.target;r instanceof Element&&r.closest("a, button, input, textarea, select, [data-no-pan]")||(z(Rt,!0),z(Et,{x:e.clientX,y:e.clientY},!0))}function ee(e){var a,c;if(!t(Rt))return;const r=(e.clientX-t(Et).x)*(t(h).w/Math.max(((a=t(D))==null?void 0:a.clientWidth)??1,1)),n=(e.clientY-t(Et).y)*(t(h).h/Math.max(((c=t(D))==null?void 0:c.clientHeight)??1,1));z(h,dt({...t(h),x:t(h).x-r,y:t(h).y-n}),!0),z(Et,{x:e.clientX,y:e.clientY},!0)}function ne(){z(Rt,!1)}function Te(e,r,n){var a,c,l;return r[n]??{provider:(a=e[0])==null?void 0:a[1].provider,dynamic:(c=e[0])==null?void 0:c[1].dynamic,instanceDiscovery:(l=e[0])==null?void 0:l[1].instanceDiscovery}}function se(e){const r=new Set(e.map(([a])=>a)),n=new Map;for(const[a,c]of e){const l=[];for(const d of Object.values(c.fields||{})){const u=Yt(d.references);u&&r.has(u.table)&&l.push(u.table)}n.set(a,l)}return n}function Ne(e){const r=se(e),n=new Map,a=new Set;function c(l){if(n.has(l))return n.get(l);if(a.has(l))return 0;a.add(l);let d=0;for(const u of r.get(l)??[])d=Math.max(d,c(u)+1);return a.delete(l),n.set(l,d),d}for(const[l]of e)c(l);return n}function Pe(e){const r=se(e),n=new Map;for(const[a]of e)n.set(a,0);for(const[a,c]of r){n.set(a,(n.get(a)??0)+c.length);for(const l of c)n.set(l,(n.get(l)??0)+1)}return n}function He(e){var n;const r=[];for(const[a,c]of Object.entries(e))for(const[l,d]of Object.entries(c.fields||{})){const u=Yt(d.references);u&&r.push({id:`${a}.${l}->${u.table}.${u.column}`,from:a,fromField:l,to:u.table,toField:u.column,fromDatabaseKey:c.namespace||"default",toDatabaseKey:((n=e[u.table])==null?void 0:n.namespace)||"default"})}return r}function Ie(e,r){const n=[];let a=[],c=0;for(const l of e){const d=a.length===0?l.height:c+St+l.height;if(a.length>0&&d>we){n.push({level:r,tables:a,height:c}),a=[l],c=l.height;continue}a.push(l),c=d}return a.length>0&&n.push({level:r,tables:a,height:c}),n}function ae(e,r,n){var l;const a=((l=r.get(e))==null?void 0:l.length)??0;return[n.filter(d=>d.fromDatabaseKey===e||d.toDatabaseKey===e).length,a,e]}function re(e,r){return`${e} internal relation${e===1?"":"s"}`+(r>0?` · ${r} cross-db`:"")}function oe(e){return[{label:qe(e.provider),fill:At(e.color,.12),stroke:At(e.color,.28),color:e.color},{label:Ce(e.dynamic),fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.tableCount} table${e.tableCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"},{label:`${e.relationCount} relation${e.relationCount===1?"":"s"}`,fill:"#f8fafc",stroke:"#cbd5e1",color:"#475569"}]}function Se(e,r,n){const a=Zt(e,10,110),c=Zt(n,7,210),l=Math.max(a,c),d=tt*2+l+Me+Ut(r);return Math.max(Le,d)}function ce(e){return t(Dt).find(r=>r.name===e)}function le(e,r){const n=e.fields.findIndex(a=>a.name===r);return e.y+it+(n>=0?n:0)*Lt+Lt/2}function Fe(e,r){const n=ce(e.from),a=ce(e.to);if(!n||!a)return null;const c=le(n,e.fromField),l=le(a,e.toField),d=28+r%5*10;if(a.x>=n.x+O){const m=n.x+O,y=a.x,C=m+(y-m)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}if(a.x+O<=n.x){const m=n.x,y=a.x+O,C=y+(m-y)/2;return{d:`M ${m} ${c} L ${C} ${c} L ${C} ${l} L ${y} ${l}`,startX:m,startY:c,endX:y,endY:l,labelX:C,labelY:(c+l)/2}}const u=e.toDatabaseKey!==e.fromDatabaseKey||a.y>=n.y,q=u?n.x+O:n.x,p=u?a.x+O:a.x,v=u?Math.max(q,p)+d:Math.min(q,p)-d;return{d:`M ${q} ${c} L ${v} ${c} L ${v} ${l} L ${p} ${l}`,startX:q,startY:c,endX:p,endY:l,labelX:v,labelY:(c+l)/2}}Je(()=>(me.loadSchema(),me.subscribe(r=>{const n=new Map;for(const[p,v]of Object.entries(r.schema).sort(([m],[y])=>m.localeCompare(y))){const m=v.namespace||"default",y=n.get(m)??[];y.push([p,v]),n.set(m,y)}const a=He(r.schema),c=Array.from(new Set([...Object.keys(r.namespaces),...n.keys()])).sort((p,v)=>{const[m,y]=ae(p,n,a),[C,et]=ae(v,n,a);return C!==m?C-m:et!==y?et-y:p.localeCompare(v)}),l=[],d=[];let u=be,q=_t;for(const p of c){const v=n.get(p)??[],m=Te(v,r.namespaces,p),y=Oe(m.provider,p),C=Ne(v),et=Pe(v),Nt=new Map(v),gt=v.length===0?1:Math.max(...C.values(),0)+1,bt=Array.from({length:gt},()=>[]);for(const[i]of v){const x=C.get(i)??0,E=Nt.get(i);if(!E)continue;const b=We(E.fields);bt[x].push({name:i,fields:b,height:Xe(b)})}for(const i of bt)i.sort((x,E)=>{const b=(et.get(E.name)??0)-(et.get(x.name)??0);return b!==0?b:x.name.localeCompare(E.name)});const V=bt.flatMap((i,x)=>Ie(i,x)),ot=v.length===0?jt:Math.max(...V.map(i=>i.height),0),wt=V.reduce((i,x,E)=>{if(E===0)return i;const b=V[E-1];return i+((b==null?void 0:b.level)===x.level?It:Ht)},0),ft=a.filter(i=>i.fromDatabaseKey===p||i.toDatabaseKey===p).length,ht=a.filter(i=>i.fromDatabaseKey===p&&i.toDatabaseKey===p).length,$t=ft-ht,zt=oe({provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft}),Ot=re(ht,$t),Mt=v.length===0?O:V.length*O+wt,ct=Math.max(tt*2+Mt,Se(p,zt,Ot)),qt=at+tt*2+ot,Ct=Ft,g=u;let W=Ct+tt+Math.max(0,(ct-tt*2-Mt)/2);for(const[i,x]of V.entries()){let E=g+at+tt+(ot-x.height)/2;for(const k of x.tables)l.push({name:k.name,databaseKey:p,fields:k.fields,x:W,y:E,height:k.height}),E+=k.height+St;const b=V[i+1];b&&(W+=O+(x.level===b.level?It:Ht))}d.push({key:p,provider:m.provider,dynamic:m.dynamic,color:y,tableCount:v.length,relationCount:ft,internalRelationCount:ht,crossRelationCount:$t,x:Ct,y:g,width:ct,height:qt,empty:v.length===0}),u+=qt+ge,q=Math.max(q,ct+Ft*2)}z(Dt,l,!0),z(Xt,a,!0),z(rt,d,!0),z(J,{w:q,h:Math.max(u,pt)},!0),nn().then(()=>{Tt(!0)})}))),tn(()=>{if(!t(D)||typeof window>"u")return;const e=typeof ResizeObserver<"u"?new ResizeObserver(()=>{Tt(!1)}):null,r=()=>ne(),n=()=>ne();return t(D).addEventListener("wheel",Qt,{passive:!1}),t(D).addEventListener("mousedown",te),t(D).addEventListener("mousemove",ee),t(D).addEventListener("mouseleave",n),window.addEventListener("mouseup",r),e==null||e.observe(t(D)),()=>{var a,c,l,d;(a=t(D))==null||a.removeEventListener("wheel",Qt),(c=t(D))==null||c.removeEventListener("mousedown",te),(l=t(D))==null||l.removeEventListener("mousemove",ee),(d=t(D))==null||d.removeEventListener("mouseleave",n),window.removeEventListener("mouseup",r),e==null||e.disconnect()}}),dn(_e,{title:"Schema ERD",description:"Database blocks come directly from edgebase.config.ts, including provider and single vs per-tenant topology.",get docsHref(){return fn},children:(e,r)=>{var n=ve(),a=st(n);{var c=d=>{hn(d,{title:"No databases",description:"Define database blocks in your config to see the ERD."})},l=d=>{var u=Ln(),q=st(u),p=M(q),v=M(p),m=M(v);L(v);var y=f(v,2),C=M(y);L(y);var et=f(y,2),Nt=M(et);L(et),L(p),ue(2),L(q);var gt=f(q,2),bt=f(M(gt),2);xt(bt,17,()=>t(rt),g=>g.key,(g,o)=>{var W=un(),i=M(W),x=f(i);L(W),H(()=>{rn(i,`background:${t(o).color}`),N(x,` ${t(o).key??""}`)}),Kt("click",W,()=>Ye(t(o).key)),R(g,W)}),L(gt);var V=f(gt,2),ot=M(V),wt=M(ot),ft=f(wt);xt(ft,17,()=>t(rt),g=>g.key,(g,o)=>{const W=F(()=>oe(t(o))),i=F(()=>re(t(o).internalRelationCount,t(o).crossRelationCount)),x=F(()=>t(o).x+(t(o).width-O)/2),E=F(()=>Be(t(W),t(o).x+t(o).width-tt-Ut(t(W)),t(o).y+15));var b=xn(),k=M(b),B=f(k),K=f(B),A=M(K,!0);L(K);var I=f(K),S=M(I,!0);L(I);var ut=f(I);xt(ut,17,()=>t(E),Y=>Y.label,(Y,$)=>{var w=vn(),_=st(w),T=f(_),nt=M(T,!0);L(T),H(()=>{s(_,"x",t($).x),s(_,"y",t($).y),s(_,"width",t($).width),s(_,"fill",t($).fill),s(_,"stroke",t($).stroke),s(T,"x",t($).x+t($).width/2),s(T,"y",t($).y+16),s(T,"fill",t($).color),N(nt,t($).label)}),R(Y,w)});var Q=f(ut);{var P=Y=>{var $=mn(),w=st($);s(w,"width",O),s(w,"height",jt);var _=f(w),T=f(_);H(()=>{s(w,"x",t(x)),s(w,"y",t(o).y+at+tt),s(_,"x",t(x)+16),s(_,"y",t(o).y+at+50),s(T,"x",t(x)+16),s(T,"y",t(o).y+at+72)}),R(Y,$)};mt(Q,Y=>{t(o).empty&&Y(P)})}L(b),H(()=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"width",t(o).width),s(k,"height",t(o).height),s(B,"x1",t(o).x),s(B,"y1",t(o).y+at),s(B,"x2",t(o).x+t(o).width),s(B,"y2",t(o).y+at),s(K,"x",t(o).x+18),s(K,"y",t(o).y+25),N(A,t(o).key),s(I,"x",t(o).x+18),s(I,"y",t(o).y+43),N(S,t(i))}),R(g,b)});var ht=f(ft);xt(ht,19,()=>t(Xt),g=>g.id,(g,o,W)=>{const i=F(()=>Fe(t(o),t(W)));var x=ve(),E=st(x);{var b=k=>{var B=pn(),K=st(B),A=f(K),I=f(A),S=f(I),ut=f(S);{var Q=P=>{const Y=F(()=>Ke(t(o).fromField));var $=_n(),w=st($),_=f(w),T=M(_,!0);L(_),H(()=>{s(w,"x",t(i).labelX-t(Y)/2),s(w,"y",t(i).labelY-10),s(w,"width",t(Y)),s(_,"x",t(i).labelX),s(_,"y",t(i).labelY+2),N(T,t(o).fromField)}),R(P,$)};mt(ut,P=>{t(j)>=.95&&P(Q)})}H(()=>{s(K,"d",t(i).d),s(K,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"5.6":"5"),s(A,"d",t(i).d),s(A,"stroke",t(o).fromDatabaseKey===t(o).toDatabaseKey?"#52525b":"#64748b"),s(A,"stroke-width",t(o).fromDatabaseKey===t(o).toDatabaseKey?"2.2":"1.9"),s(A,"stroke-dasharray",t(o).fromDatabaseKey===t(o).toDatabaseKey?void 0:"7 5"),s(I,"cx",t(i).startX),s(I,"cy",t(i).startY),s(S,"cx",t(i).endX),s(S,"cy",t(i).endY)}),R(k,B)};mt(E,k=>{t(i)&&k(b)})}R(g,x)});var $t=f(ht);xt($t,17,()=>t(Dt),g=>g.name,(g,o)=>{const W=F(()=>t(rt).find(w=>w.key===t(o).databaseKey)),i=F(()=>{var w;return((w=t(W))==null?void 0:w.color)??"#64748b"}),x=F(()=>t(o).x+O-Wt-12),E=F(()=>t(o).y+10);var b=Mn(),k=M(b);s(k,"width",O),s(k,"rx",Pt);var B=f(k);s(B,"width",O),s(B,"height",it),s(B,"rx",Pt);var K=f(B),A=f(K),I=M(A,!0);L(A);var S=f(A),ut=M(S,!0);L(S);var Q=f(S),P=M(Q);s(P,"width",Wt),s(P,"height",ye);var Y=f(P);L(Q);var $=f(Q);xt($,17,()=>t(o).fields,an,(w,_,T)=>{const nt=F(()=>t(o).y+it+T*Lt);var ie=wn(),de=st(ie);{var je=G=>{var X=yn();H(()=>{s(X,"x1",t(o).x),s(X,"y1",t(nt)),s(X,"x2",t(o).x+O),s(X,"y2",t(nt))}),R(G,X)};mt(de,G=>{T>0&&G(je)})}var fe=f(de);{var Ve=G=>{var X=gn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17)}),R(G,X)},Ge=G=>{var X=bn();H(()=>{s(X,"x",t(o).x+12),s(X,"y",t(nt)+17),s(X,"fill",t(i))}),R(G,X)};mt(fe,G=>{t(_).pk?G(Ve):t(_).fk&&G(Ge,1)})}var vt=f(fe);let he;var Ue=M(vt,!0);L(vt);var Bt=f(vt),Ze=M(Bt,!0);L(Bt),H(()=>{s(vt,"x",t(o).x+(t(_).pk||t(_).fk?36:12)),s(vt,"y",t(nt)+17),he=on(vt,0,"erd-svg__field-name svelte-1n6qz2s",null,he,{"erd-svg__field-name--key":t(_).pk||t(_).fk}),N(Ue,t(_).name),s(Bt,"x",t(o).x+O-12),s(Bt,"y",t(nt)+17),N(Ze,t(_).type)}),R(w,ie)}),L(b),H(w=>{s(k,"x",t(o).x),s(k,"y",t(o).y),s(k,"height",t(o).height),s(B,"x",t(o).x),s(B,"y",t(o).y),s(K,"x1",t(o).x),s(K,"y1",t(o).y+it),s(K,"x2",t(o).x+O),s(K,"y2",t(o).y+it),s(A,"x",t(o).x+14),s(A,"y",t(o).y+26),N(I,t(o).name),s(S,"x",t(o).x+14),s(S,"y",t(o).y+39),N(ut,t(o).databaseKey),s(Q,"href",`${ln}/database/tables/${t(o).name}`),s(Q,"aria-label",`Open table ${t(o).name}`),s(P,"x",t(x)),s(P,"y",t(E)),s(P,"stroke",w),s(Y,"x",t(x)+Wt/2),s(Y,"y",t(E)+15)},[()=>At(t(i),.45)]),R(g,b)}),L(ot);var zt=f(ot,2),Ot=M(zt),Mt=f(Ot,2),ct=f(Mt,2),qt=M(ct);L(ct);var Ct=f(ct,2);L(zt),ue(2),L(V),cn(V,g=>z(D,g),()=>t(D)),H(g=>{N(m,`${t(rt).length??""} DB`),N(C,`${t(Dt).length??""} Tables`),N(Nt,`${t(Xt).length??""} Relations`),s(ot,"viewBox",`${t(h).x} ${t(h).y} ${t(h).w} ${t(h).h}`),s(wt,"width",t(J).w),s(wt,"height",t(J).h),N(qt,`${g??""}%`)},[()=>Math.round(t(j)*100)]),Kt("click",Ot,Ae),Kt("click",Mt,()=>Jt(t(j)*1.12)),Kt("click",Ct,()=>Jt(t(j)/1.12)),R(d,u)};mt(a,d=>{t(rt).length===0?d(c):d(l,!1)})}R(e,n)}}),en()}sn(["click"]);export{Yn as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as bt,d as p,M as yt,w as pe,g as e,b as t,a as Nt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/glwixJlP.js";import{s as C}from"../chunks/D5h5A1cc.js";import{t as D,a as d,f,c as Pt}from"../chunks/BR_fL5Yv.js";import{i as E}from"../chunks/UUazaC_N.js";import{a as ge,t as V,b as ze,e as $t}from"../chunks/CCKNu7m7.js";import{a as wt,b as ue}from"../chunks/C6puvcoR.js";import{s as kt,a as xt}from"../chunks/B8vJP3wz.js";import{g as Le}from"../chunks/BY92tFS2.js";import{b as me}from"../chunks/CxCPv_Ut.js";import{P as Ct}from"../chunks/CwROoZK0.js";import{d as Dt}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/Cs0GwzJA.js";import{I as L}from"../chunks/DrQSgw-f.js";import{d as Et}from"../chunks/DuXuUBWN.js";import{s as Re}from"../chunks/B-h2afW5.js";var St=f('<div class="create-error svelte-gjmjph"> </div>'),It=f('<div class="readonly-banner svelte-gjmjph">Creating database blocks requires dev mode. Start <code class="svelte-gjmjph">pnpm dev</code> to enable schema edits and Neon helpers.</div>'),Bt=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Ot=f("<option> </option>"),Kt=f("<option> </option>"),Tt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),zt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Lt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),Rt=f('<div class="field-group field-group--helper svelte-gjmjph"><label class="field-label svelte-gjmjph" for="recommended-postgres-env-key">Automatic Postgres Env Key</label> <div id="recommended-postgres-env-key" class="field-static-display svelte-gjmjph"><code class="svelte-gjmjph"> </code></div> <p class="field-help svelte-gjmjph">EdgeBase will write this key into config automatically. Only override it if you already use a specific env key name.</p> <div class="helper-actions svelte-gjmjph"><!></div> <!></div> <div class="field-group field-group--helper neon-helper svelte-gjmjph"><div class="neon-helper__intro svelte-gjmjph"><div class="field-label svelte-gjmjph">Neon Setup (Optional)</div> <p class="field-help svelte-gjmjph">Need Neon right now? Pick one shortcut below. If you already have a connection string, skip this section and use <strong>Create Database</strong>.</p></div> <div class="neon-helper__grid svelte-gjmjph"><section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Existing project</div> <h3 class="neon-helper__option-title svelte-gjmjph">1. Connect an existing Neon project</h3> <p class="field-help svelte-gjmjph">Best when the Neon project already exists in your account.</p></div> <label class="field-label svelte-gjmjph" for="existing-neon-project">Existing Neon Project</label> <select id="existing-neon-project" class="field-select svelte-gjmjph"><!></select> <div class="helper-actions helper-actions--compact svelte-gjmjph"><!></div> <!> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section> <section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Provision new project</div> <h3 class="neon-helper__option-title svelte-gjmjph">2. Create a new Neon project</h3> <p class="field-help svelte-gjmjph">Best when you want EdgeBase to provision Neon for this block.</p></div> <!> <p class="field-help svelte-gjmjph">EdgeBase will try this name first, then append a suffix if Neon already has one.</p> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section></div></div>',1),Mt=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-provider">Provider</label> <select id="db-provider" class="field-select svelte-gjmjph"><option>D1 (default)</option><option>Durable Object</option><option>Postgres</option></select></div> <!>',1),At=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="dynamic-provider">Provider</label> <input id="dynamic-provider" class="field-static svelte-gjmjph" value="Durable Object" disabled=""/> <p class="field-help svelte-gjmjph">Per-tenant DB blocks always use Durable Objects for physical isolation.</p></div> <!> <!> <!>',1),qt=f('<div class="create-page svelte-gjmjph"><!> <!> <div class="create-card svelte-gjmjph"><!> <div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-topology">Type</label> <select id="db-topology" class="field-select svelte-gjmjph"><option>Single DB</option><option>Per-tenant DB</option></select> <p class="field-help svelte-gjmjph"><!></p></div> <!></div> <div class="create-actions svelte-gjmjph"><a><!></a> <!></div></div>');function sa(Me,Ae){bt(Ae,!0);const qe=()=>xt(Et,"$devInfoStore",Fe),[Fe,Ue]=kt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),S=p(null),g=p(""),$=p(!1),H=p(""),I=p(yt([])),b=p(!1),ae=p(!1),M=p(""),O=p(""),w=T(()=>qe().devMode);function Z(i){const y=i.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function he(i){return i.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"edgebase-db"}function W(){return e($)?e(R).trim()||Z(e(c)):Z(e(c))}function re(){return e(H).trim()||he(e(c))}function fe(){const i=e(c).trim();return i?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)?e(m)==="single"&&e(h)==="postgres"&&!W()?(t(g,"Connection string env key is required for postgres."),!1):(e(m)==="single"&&e(h)==="postgres"&&e(S)==="create"&&re(),t(g,""),!0):(t(g,"Database block name must start with a letter or underscore."),!1):(t(g,"Database block name is required."),!1)}async function _e(i=!1){var y;if(e(w)&&!(!i&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(M,"");try{const k=await ge.schemaMutation(i?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(I,k.items??[],!0),t(O,((y=e(I)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(k){t(M,k instanceof Error?k.message:"Failed to load Neon projects.",!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&_e()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function Ge(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function He(){if(!e(w)){t(g,"Creating database blocks requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(fe()){t(te,!0);try{await ge.schemaMutation("schema/databases",{method:"POST",body:{name:e(c).trim(),topology:e(m),provider:e(m)==="single"?e(h):"do",connectionString:e(m)==="single"&&e(h)==="postgres"?W():void 0,targetLabel:e(X).trim()||void 0,placeholder:e(Y).trim()||void 0,helperText:e(ee).trim()||void 0}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" created`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(i){t(g,i instanceof Error?i.message:"Failed to create database block.",!0),V(e(g))}finally{t(te,!1)}}}async function je(i){if(!e(w)){t(g,"Neon helpers require dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(e(m)!=="single"){t(g,"Neon helper only supports single database blocks.");return}if(e(h)!=="postgres"&&t(h,"postgres"),i==="create"&&re(),!!fe()){if(i==="reuse"&&!e(O)){t(g,e(M)||"Choose an existing Neon project first, or create a new one.",!0);return}t(S,i,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:i==="reuse"?e(O):void 0,projectName:i==="create"?re():void 0,mode:i,...e($)?{envKey:W()}:{}}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" connected to Neon`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,y instanceof Error?y.message:"Failed to connect with Neon.",!0),V(e(g))}finally{t(S,null)}}}function Ze(){return!e(b)&&e(I).length>0&&!!e(O)}Ct(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Dt},children:(i,y)=>{var k=qt(),be=l(k);{var We=r=>{var v=St(),_=l(v,!0);n(v),P(()=>C(_,e(g))),d(r,v)};E(be,r=>{e(g)&&r(We)})}var ye=o(be,2);{var Je=r=>{var v=It();d(r,v)};E(ye,r=>{e(w)||r(Je)})}var oe=o(ye,2),Ne=l(oe);L(Ne,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Ne,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var Pe=o(le);Pe.value=Pe.__value="dynamic",n(J);var $e=o(J,2),Qe=l($e);{var Ve=r=>{var v=D("One database shared by the whole app.");d(r,v)},Xe=r=>{var v=D("One isolated database per target ID.");d(r,v)};E(Qe,r=>{e(m)==="single"?r(Ve):r(Xe,!1)})}n($e),n(se);var Ye=o(se,2);{var et=r=>{var v=Mt(),_=G(v),x=o(l(_),2),A=l(x);A.value=A.__value="d1";var N=o(A);N.value=N.__value="do";var ke=o(N);ke.value=ke.__value="postgres",n(x),n(_);var ot=o(_,2);{var st=q=>{var xe=Rt(),ne=G(xe),ie=o(l(ne),2),Ce=l(ie),lt=l(Ce,!0);n(Ce),n(ie);var de=o(ie,4),nt=l(de);z(nt,{variant:"ghost",onclick:Ge,children:(a,s)=>{B();var u=D();P(()=>C(u,e($)?"Hide Env Key Override":"Customize Env Key")),d(a,u)},$$slots:{default:!0}}),n(de);var it=o(de,2);{var dt=a=>{var s=Bt(),u=G(s);{let j=T(()=>Z(e(c)));L(u,{label:"Custom Connection String Env Key",get placeholder(){return e(j)},get value(){return e(R)},set value(K){t(R,K,!0)}})}B(2),d(a,s)};E(it,a=>{e($)&&a(dt)})}n(ne);var De=o(ne,2),Ee=o(l(De),2),ce=l(Ee),F=o(l(ce),4),ct=l(F);{var vt=a=>{var s=Ot(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>C(u,e(b)?"Loading Neon projects...":"No Neon projects found")),d(a,s)},pt=a=>{var s=Pt(),u=G(s);$t(u,17,()=>e(I),j=>j.projectId,(j,K)=>{var U=Kt(),jt=l(U);n(U);var Te={};P(()=>{C(jt,`${e(K).projectName??""} (${e(K).orgName??""})`),Te!==(Te=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),d(j,U)}),d(a,s)};E(ct,a=>{e(I).length===0?a(vt):a(pt,!1)})}n(F);var ve=o(F,2),gt=l(ve);z(gt,{variant:"ghost",onclick:()=>_e(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=D("Refresh Projects");d(a,u)},$$slots:{default:!0}}),n(ve);var Se=o(ve,2);{var ut=a=>{var s=Tt(),u=l(s,!0);n(s),P(()=>C(u,e(M))),d(a,s)},mt=a=>{var s=zt();d(a,s)},ht=a=>{var s=Lt();d(a,s)};E(Se,a=>{e(M)?a(ut):!e(b)&&e(I).length===0?a(mt,1):e(b)||a(ht,2)})}var Ie=o(Se,2),ft=l(Ie);{let a=T(()=>!e(w)||!Ze()||e(S)!==null);z(ft,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("reuse"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),d(s,j)},$$slots:{default:!0}})}n(Ie),n(ce);var Be=o(ce,2),Oe=o(l(Be),2);{let a=T(()=>he(e(c)));L(Oe,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Ke=o(Oe,4),_t=l(Ke);{let a=T(()=>!e(w)||e(S)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("create"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="create"?"Creating Neon Project...":"Create New Neon Project")),d(s,j)},$$slots:{default:!0}})}n(Ke),n(Be),n(Ee),n(De),P(a=>{C(lt,a),F.disabled=e(b)||e(I).length===0},[W]),ue(F,()=>e(O),a=>t(O,a)),d(q,xe)};E(ot,q=>{e(h)==="postgres"&&q(st)})}ue(x,()=>e(h),q=>t(h,q)),d(r,v)},tt=r=>{var v=At(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var x=o(_,2);L(x,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var A=o(x,2);L(A,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),d(r,v)};E(Ye,r=>{e(m)==="single"?r(et):r(tt,!1)})}n(oe);var we=o(oe,2),Q=l(we),at=l(Q);z(at,{variant:"secondary",children:(r,v)=>{B();var _=D("Cancel");d(r,_)},$$slots:{default:!0}}),n(Q);var rt=o(Q,2);{let r=T(()=>!e(w));z(rt,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:He,children:(v,_)=>{B();var x=D("Create Database");d(v,x)},$$slots:{default:!0}})}n(we),n(k),P(()=>wt(Q,"href",`${me??""}/database/tables`)),ue(J,()=>e(m),r=>t(m,r)),d(i,k)}}),Nt(),Ue()}export{sa as component};
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{p as bt,d as p,M as yt,w as pe,g as e,b as t,a as Nt,u as T,c as l,s as o,r as n,ae as B,t as P,f as G}from"../chunks/glwixJlP.js";import{s as C}from"../chunks/D5h5A1cc.js";import{t as D,a as d,f,c as Pt}from"../chunks/BR_fL5Yv.js";import{i as E}from"../chunks/UUazaC_N.js";import{a as ge,t as V,b as ze,e as $t}from"../chunks/BMMOfNi6.js";import{a as wt,b as ue}from"../chunks/C6puvcoR.js";import{s as kt,a as xt}from"../chunks/B8vJP3wz.js";import{g as Le}from"../chunks/CB8xN3_t.js";import{b as me}from"../chunks/BOjkBtym.js";import{P as Ct}from"../chunks/CwROoZK0.js";import{d as Dt}from"../chunks/Q2nPFxS6.js";import{B as z}from"../chunks/Cs0GwzJA.js";import{I as L}from"../chunks/DrQSgw-f.js";import{d as Et}from"../chunks/Ga6XaOJm.js";import{s as Re}from"../chunks/C0LrJucL.js";var St=f('<div class="create-error svelte-gjmjph"> </div>'),It=f('<div class="readonly-banner svelte-gjmjph">Creating database blocks requires dev mode. Start <code class="svelte-gjmjph">pnpm dev</code> to enable schema edits and Neon helpers.</div>'),Bt=f('<!> <p class="field-help svelte-gjmjph">Only change this if you already use a specific env key name.</p>',1),Ot=f("<option> </option>"),Kt=f("<option> </option>"),Tt=f('<p class="field-help field-help--error svelte-gjmjph"> </p>'),zt=f('<p class="field-help svelte-gjmjph">No existing Neon projects were found.</p>'),Lt=f('<p class="field-help svelte-gjmjph">EdgeBase will use the selected project and write the env key above.</p>'),Rt=f('<div class="field-group field-group--helper svelte-gjmjph"><label class="field-label svelte-gjmjph" for="recommended-postgres-env-key">Automatic Postgres Env Key</label> <div id="recommended-postgres-env-key" class="field-static-display svelte-gjmjph"><code class="svelte-gjmjph"> </code></div> <p class="field-help svelte-gjmjph">EdgeBase will write this key into config automatically. Only override it if you already use a specific env key name.</p> <div class="helper-actions svelte-gjmjph"><!></div> <!></div> <div class="field-group field-group--helper neon-helper svelte-gjmjph"><div class="neon-helper__intro svelte-gjmjph"><div class="field-label svelte-gjmjph">Neon Setup (Optional)</div> <p class="field-help svelte-gjmjph">Need Neon right now? Pick one shortcut below. If you already have a connection string, skip this section and use <strong>Create Database</strong>.</p></div> <div class="neon-helper__grid svelte-gjmjph"><section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Existing project</div> <h3 class="neon-helper__option-title svelte-gjmjph">1. Connect an existing Neon project</h3> <p class="field-help svelte-gjmjph">Best when the Neon project already exists in your account.</p></div> <label class="field-label svelte-gjmjph" for="existing-neon-project">Existing Neon Project</label> <select id="existing-neon-project" class="field-select svelte-gjmjph"><!></select> <div class="helper-actions helper-actions--compact svelte-gjmjph"><!></div> <!> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section> <section class="neon-helper__option svelte-gjmjph"><div class="neon-helper__option-header svelte-gjmjph"><div class="neon-helper__eyebrow svelte-gjmjph">Provision new project</div> <h3 class="neon-helper__option-title svelte-gjmjph">2. Create a new Neon project</h3> <p class="field-help svelte-gjmjph">Best when you want EdgeBase to provision Neon for this block.</p></div> <!> <p class="field-help svelte-gjmjph">EdgeBase will try this name first, then append a suffix if Neon already has one.</p> <div class="helper-actions neon-helper__primary-actions svelte-gjmjph"><!></div></section></div></div>',1),Mt=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-provider">Provider</label> <select id="db-provider" class="field-select svelte-gjmjph"><option>D1 (default)</option><option>Durable Object</option><option>Postgres</option></select></div> <!>',1),At=f('<div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="dynamic-provider">Provider</label> <input id="dynamic-provider" class="field-static svelte-gjmjph" value="Durable Object" disabled=""/> <p class="field-help svelte-gjmjph">Per-tenant DB blocks always use Durable Objects for physical isolation.</p></div> <!> <!> <!>',1),qt=f('<div class="create-page svelte-gjmjph"><!> <!> <div class="create-card svelte-gjmjph"><!> <div class="field-group svelte-gjmjph"><label class="field-label svelte-gjmjph" for="db-topology">Type</label> <select id="db-topology" class="field-select svelte-gjmjph"><option>Single DB</option><option>Per-tenant DB</option></select> <p class="field-help svelte-gjmjph"><!></p></div> <!></div> <div class="create-actions svelte-gjmjph"><a><!></a> <!></div></div>');function sa(Me,Ae){bt(Ae,!0);const qe=()=>xt(Et,"$devInfoStore",Fe),[Fe,Ue]=kt();let c=p(""),m=p("single"),h=p("d1"),R=p(""),X=p(""),Y=p(""),ee=p(""),te=p(!1),S=p(null),g=p(""),$=p(!1),H=p(""),I=p(yt([])),b=p(!1),ae=p(!1),M=p(""),O=p(""),w=T(()=>qe().devMode);function Z(i){const y=i.trim().toUpperCase().replace(/[^A-Z0-9_]+/g,"_");return y?`DB_POSTGRES_${y}_URL`:"DB_POSTGRES_APP_URL"}function he(i){return i.trim().toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"edgebase-db"}function W(){return e($)?e(R).trim()||Z(e(c)):Z(e(c))}function re(){return e(H).trim()||he(e(c))}function fe(){const i=e(c).trim();return i?/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(i)?e(m)==="single"&&e(h)==="postgres"&&!W()?(t(g,"Connection string env key is required for postgres."),!1):(e(m)==="single"&&e(h)==="postgres"&&e(S)==="create"&&re(),t(g,""),!0):(t(g,"Database block name must start with a letter or underscore."),!1):(t(g,"Database block name is required."),!1)}async function _e(i=!1){var y;if(e(w)&&!(!i&&(e(ae)||e(b)||e(h)!=="postgres"))){t(b,!0),t(M,"");try{const k=await ge.schemaMutation(i?"integrations/neon/projects?refresh=1":"integrations/neon/projects",{method:"GET"});t(I,k.items??[],!0),t(O,((y=e(I)[0])==null?void 0:y.projectId)??"",!0),t(ae,!0)}catch(k){t(M,k instanceof Error?k.message:"Failed to load Neon projects.",!0)}finally{t(b,!1)}}}pe(()=>{e(w)&&e(m)==="single"&&e(h)==="postgres"&&!e(ae)&&!e(b)&&_e()}),pe(()=>{(e(m)!=="single"||e(h)!=="postgres")&&t($,!1)}),pe(()=>{(e(h)!=="postgres"||e(m)!=="single")&&t(H,"")});function Ge(){t($,!e($)),e($)&&!e(R).trim()&&t(R,Z(e(c)),!0)}async function He(){if(!e(w)){t(g,"Creating database blocks requires dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(fe()){t(te,!0);try{await ge.schemaMutation("schema/databases",{method:"POST",body:{name:e(c).trim(),topology:e(m),provider:e(m)==="single"?e(h):"do",connectionString:e(m)==="single"&&e(h)==="postgres"?W():void 0,targetLabel:e(X).trim()||void 0,placeholder:e(Y).trim()||void 0,helperText:e(ee).trim()||void 0}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" created`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(i){t(g,i instanceof Error?i.message:"Failed to create database block.",!0),V(e(g))}finally{t(te,!1)}}}async function je(i){if(!e(w)){t(g,"Neon helpers require dev mode with the schema sidecar. Start `pnpm dev` and try again."),V(e(g));return}if(e(m)!=="single"){t(g,"Neon helper only supports single database blocks.");return}if(e(h)!=="postgres"&&t(h,"postgres"),i==="create"&&re(),!!fe()){if(i==="reuse"&&!e(O)){t(g,e(M)||"Choose an existing Neon project first, or create a new one.",!0);return}t(S,i,!0);try{await ge.schemaMutation("integrations/neon/databases",{method:"POST",body:{name:e(c).trim(),topology:"single",projectId:i==="reuse"?e(O):void 0,projectName:i==="create"?re():void 0,mode:i,...e($)?{envKey:W()}:{}}}),await Re.waitForNamespaceReady(e(c).trim(),{timeoutMessage:`Database block "${e(c).trim()}" is still syncing. Please try again in a moment.`}),ze(`Database block "${e(c).trim()}" connected to Neon`),Le(`${me}/database/tables/new?dbKey=${encodeURIComponent(e(c).trim())}`)}catch(y){t(g,y instanceof Error?y.message:"Failed to connect with Neon.",!0),V(e(g))}finally{t(S,null)}}}function Ze(){return!e(b)&&e(I).length>0&&!!e(O)}Ct(Me,{title:"Create Database",description:"Add a new DB block to edgebase.config.ts",get docsHref(){return Dt},children:(i,y)=>{var k=qt(),be=l(k);{var We=r=>{var v=St(),_=l(v,!0);n(v),P(()=>C(_,e(g))),d(r,v)};E(be,r=>{e(g)&&r(We)})}var ye=o(be,2);{var Je=r=>{var v=It();d(r,v)};E(ye,r=>{e(w)||r(Je)})}var oe=o(ye,2),Ne=l(oe);L(Ne,{label:"Database Block Name",placeholder:"app",get value(){return e(c)},set value(r){t(c,r,!0)}});var se=o(Ne,2),J=o(l(se),2),le=l(J);le.value=le.__value="single";var Pe=o(le);Pe.value=Pe.__value="dynamic",n(J);var $e=o(J,2),Qe=l($e);{var Ve=r=>{var v=D("One database shared by the whole app.");d(r,v)},Xe=r=>{var v=D("One isolated database per target ID.");d(r,v)};E(Qe,r=>{e(m)==="single"?r(Ve):r(Xe,!1)})}n($e),n(se);var Ye=o(se,2);{var et=r=>{var v=Mt(),_=G(v),x=o(l(_),2),A=l(x);A.value=A.__value="d1";var N=o(A);N.value=N.__value="do";var ke=o(N);ke.value=ke.__value="postgres",n(x),n(_);var ot=o(_,2);{var st=q=>{var xe=Rt(),ne=G(xe),ie=o(l(ne),2),Ce=l(ie),lt=l(Ce,!0);n(Ce),n(ie);var de=o(ie,4),nt=l(de);z(nt,{variant:"ghost",onclick:Ge,children:(a,s)=>{B();var u=D();P(()=>C(u,e($)?"Hide Env Key Override":"Customize Env Key")),d(a,u)},$$slots:{default:!0}}),n(de);var it=o(de,2);{var dt=a=>{var s=Bt(),u=G(s);{let j=T(()=>Z(e(c)));L(u,{label:"Custom Connection String Env Key",get placeholder(){return e(j)},get value(){return e(R)},set value(K){t(R,K,!0)}})}B(2),d(a,s)};E(it,a=>{e($)&&a(dt)})}n(ne);var De=o(ne,2),Ee=o(l(De),2),ce=l(Ee),F=o(l(ce),4),ct=l(F);{var vt=a=>{var s=Ot(),u=l(s,!0);n(s),s.value=s.__value="",P(()=>C(u,e(b)?"Loading Neon projects...":"No Neon projects found")),d(a,s)},pt=a=>{var s=Pt(),u=G(s);$t(u,17,()=>e(I),j=>j.projectId,(j,K)=>{var U=Kt(),jt=l(U);n(U);var Te={};P(()=>{C(jt,`${e(K).projectName??""} (${e(K).orgName??""})`),Te!==(Te=e(K).projectId)&&(U.value=(U.__value=e(K).projectId)??"")}),d(j,U)}),d(a,s)};E(ct,a=>{e(I).length===0?a(vt):a(pt,!1)})}n(F);var ve=o(F,2),gt=l(ve);z(gt,{variant:"ghost",onclick:()=>_e(!0),get loading(){return e(b)},children:(a,s)=>{B();var u=D("Refresh Projects");d(a,u)},$$slots:{default:!0}}),n(ve);var Se=o(ve,2);{var ut=a=>{var s=Tt(),u=l(s,!0);n(s),P(()=>C(u,e(M))),d(a,s)},mt=a=>{var s=zt();d(a,s)},ht=a=>{var s=Lt();d(a,s)};E(Se,a=>{e(M)?a(ut):!e(b)&&e(I).length===0?a(mt,1):e(b)||a(ht,2)})}var Ie=o(Se,2),ft=l(Ie);{let a=T(()=>!e(w)||!Ze()||e(S)!==null);z(ft,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("reuse"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="reuse"?"Connecting Existing Neon...":"Connect Existing Neon")),d(s,j)},$$slots:{default:!0}})}n(Ie),n(ce);var Be=o(ce,2),Oe=o(l(Be),2);{let a=T(()=>he(e(c)));L(Oe,{label:"New Neon Project Name",get placeholder(){return e(a)},get value(){return e(H)},set value(s){t(H,s,!0)}})}var Ke=o(Oe,4),_t=l(Ke);{let a=T(()=>!e(w)||e(S)!==null);z(_t,{variant:"secondary",get disabled(){return e(a)},onclick:()=>je("create"),children:(s,u)=>{B();var j=D();P(()=>C(j,e(S)==="create"?"Creating Neon Project...":"Create New Neon Project")),d(s,j)},$$slots:{default:!0}})}n(Ke),n(Be),n(Ee),n(De),P(a=>{C(lt,a),F.disabled=e(b)||e(I).length===0},[W]),ue(F,()=>e(O),a=>t(O,a)),d(q,xe)};E(ot,q=>{e(h)==="postgres"&&q(st)})}ue(x,()=>e(h),q=>t(h,q)),d(r,v)},tt=r=>{var v=At(),_=o(G(v),2);L(_,{label:"Target Label",placeholder:"Workspace",get value(){return e(X)},set value(N){t(X,N,!0)}});var x=o(_,2);L(x,{label:"Target ID Placeholder",placeholder:"Enter workspace ID",get value(){return e(Y)},set value(N){t(Y,N,!0)}});var A=o(x,2);L(A,{label:"Helper Text",placeholder:"Pick a workspace or enter an ID.",get value(){return e(ee)},set value(N){t(ee,N,!0)}}),d(r,v)};E(Ye,r=>{e(m)==="single"?r(et):r(tt,!1)})}n(oe);var we=o(oe,2),Q=l(we),at=l(Q);z(at,{variant:"secondary",children:(r,v)=>{B();var _=D("Cancel");d(r,_)},$$slots:{default:!0}}),n(Q);var rt=o(Q,2);{let r=T(()=>!e(w));z(rt,{variant:"primary",get loading(){return e(te)},get disabled(){return e(r)},onclick:He,children:(v,_)=>{B();var x=D("Create Database");d(v,x)},$$slots:{default:!0}})}n(we),n(k),P(()=>wt(Q,"href",`${me??""}/database/tables`)),ue(J,()=>e(m),r=>t(m,r)),d(i,k)}}),Nt(),Ue()}export{sa as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/glwixJlP.js";import{g as r}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{p as o,w as t,a as e}from"../chunks/glwixJlP.js";import{g as r}from"../chunks/CB8xN3_t.js";import{b as p}from"../chunks/BOjkBtym.js";function n(s,a){o(a,!0),t(()=>{r(`${p}/database/tables`,{replaceState:!0})}),e()}export{n as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{i as x}from"../chunks/BmRjiP5k.js";import{p as V,t as v,a as z,c as k,s as a,r as f,f as $}from"../chunks/glwixJlP.js";import{a as s,f as n}from"../chunks/BR_fL5Yv.js";import{i as D}from"../chunks/UUazaC_N.js";import{a as r}from"../chunks/C6puvcoR.js";import{s as S,a as B}from"../chunks/B8vJP3wz.js";import{b as i}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{i as x}from"../chunks/BmRjiP5k.js";import{p as V,t as v,a as z,c as k,s as a,r as f,f as $}from"../chunks/glwixJlP.js";import{a as s,f as n}from"../chunks/BR_fL5Yv.js";import{i as D}from"../chunks/UUazaC_N.js";import{a as r}from"../chunks/C6puvcoR.js";import{s as S,a as B}from"../chunks/B8vJP3wz.js";import{b as i}from"../chunks/BOjkBtym.js";import{d as y}from"../chunks/Ga6XaOJm.js";import{E as j}from"../chunks/DnyL7Zq-.js";import{e as E}from"../chunks/Q2nPFxS6.js";var I=n('<a class="hint-link svelte-zaw5ak"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 4.5C3 3.67157 3.67157 3 4.5 3H11.5C12.3284 3 13 3.67157 13 4.5V11.5C13 12.3284 12.3284 13 11.5 13H4.5C3.67157 13 3 12.3284 3 11.5V4.5Z" stroke="currentColor" stroke-width="1.5"></path><path d="M8 5.5V10.5M5.5 8H10.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg> Create Database</a> <a class="hint-link hint-link--primary svelte-zaw5ak"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 3V13M3 8H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg> Create Table</a>',1),q=n('<span class="hint-note svelte-zaw5ak">Create DB, create table, schema edits, and upgrades require dev mode. Start <code class="svelte-zaw5ak">pnpm dev</code>.</span>'),Z=n('<div class="tables-welcome svelte-zaw5ak"><!> <div class="tables-hint svelte-zaw5ak"><!> <a class="hint-link svelte-zaw5ak"><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> View ERD Diagram</a> <a class="hint-link svelte-zaw5ak" target="_blank" rel="noreferrer"><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> Open Docs</a></div></div>');function Q(m,w){V(w,!1);const u=()=>B(y,"$devInfoStore",g),[g,b]=S();x();var o=Z(),l=k(o);j(l,{title:"Select a table",description:"Choose a table from the sidebar to inspect schema, browse records, or run queries against the current database target."});var d=a(l,2),h=k(d);{var C=e=>{var t=I(),c=$(t),M=a(c,2);v(()=>{r(c,"href",`${i??""}/database/new`),r(M,"href",`${i??""}/database/tables/new`)}),s(e,t)},_=e=>{var t=q();s(e,t)};D(h,e=>{u().devMode?e(C):e(_,!1)})}var p=a(h,2),H=a(p,2);f(d),f(o),v(()=>{r(p,"href",`${i??""}/database/erd`),r(H,"href",E)}),s(m,o),z(),b()}export{Q as component};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"../chunks/CWj6FrbW.js";import{p as ea,M as nt,w as Ot,g as e,at as fr,f as Ve,a as ta,d as N,s as d,c as s,r,t as y,ag as Da,b as a,u as A,I as Pr,ae as Ae,af as Er}from"../chunks/glwixJlP.js";import{d as la,e as na,s as I,a as ie}from"../chunks/D5h5A1cc.js";import{c as Yt,a as l,f as c,t as Qe}from"../chunks/BR_fL5Yv.js";import{i as D}from"../chunks/UUazaC_N.js";import{e as tt,i as Bt,t as lt,b as Et,A as Tr,a as pt}from"../chunks/
|
|
1
|
+
import"../chunks/CWj6FrbW.js";import{p as ea,M as nt,w as Ot,g as e,at as fr,f as Ve,a as ta,d as N,s as d,c as s,r,t as y,ag as Da,b as a,u as A,I as Pr,ae as Ae,af as Er}from"../chunks/glwixJlP.js";import{d as la,e as na,s as I,a as ie}from"../chunks/D5h5A1cc.js";import{c as Yt,a as l,f as c,t as Qe}from"../chunks/BR_fL5Yv.js";import{i as D}from"../chunks/UUazaC_N.js";import{e as tt,i as Bt,t as lt,b as Et,A as Tr,a as pt}from"../chunks/BMMOfNi6.js";import{a as Ce,s as Tt,b as da,r as Ft,c as Ha,e as Ta,i as Rr,h as zr}from"../chunks/C6puvcoR.js";import{b as $t,a as Ua}from"../chunks/NuUjtcO2.js";import{a as pa,s as Ia}from"../chunks/B8vJP3wz.js";import{g as Aa}from"../chunks/CB8xN3_t.js";import{p as Dr}from"../chunks/p-WBlAu3.js";import{b as Ra}from"../chunks/BOjkBtym.js";import{M as pr}from"../chunks/7B47DvSx.js";import{B as ct}from"../chunks/Cs0GwzJA.js";import{s as qt,b as jr,a as Oa,c as Ga}from"../chunks/C0LrJucL.js";import{d as Ya}from"../chunks/wJsUhbfZ.js";import{A as $a,S as qr,C as Qr}from"../chunks/BhjcOf7X.js";import{b as ja}from"../chunks/CyqB6g-D.js";import{p as wt}from"../chunks/C4D51vTW.js";import{g as Ur,p as er}from"../chunks/Ce-ngf4p.js";import{o as Lr,a as Br}from"../chunks/DoPXzH7F.js";import{e as Fr,b as Ar,l as Mr,m as Kr,i as Vr,c as Jr,f as Xr,s as Wr,t as ft,E as Zr,L as Hr,g as Gr,q as La,v as Yr,w as $r,x as es,y as ts,z as as,A as rs,B as ss,D as ns,F as ls}from"../chunks/MdeqaOQx.js";import{d as mr}from"../chunks/Ga6XaOJm.js";import{T as os}from"../chunks/CY1F93Wv.js";import{C as tr}from"../chunks/Bh56EfQ_.js";import{I as is}from"../chunks/DrQSgw-f.js";import{T as ds}from"../chunks/vApWTCBs.js";import{e as cs}from"../chunks/Q2nPFxS6.js";const vs=/^[A-Za-z0-9_-]+$/,us="Record ID must use English letters, numbers, hyphen (-), or underscore (_).";function fs(n){return n?vs.test(n)?null:us:null}var ps=c(`<div class="crp-note svelte-sxc7i5">Leave <strong>Record ID</strong> blank to let EdgeBase generate <code>id</code>, <code>createdAt</code>,
|
|
2
2
|
and <code>updatedAt</code> automatically.</div>`),ms=c('<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>'),_s=c("<select><option>Unset</option><option>true</option><option>false</option></select>"),hs=c("<option> </option>"),bs=c("<select><option>Select value</option><!></select>"),gs=c('<textarea rows="6"></textarea>'),ys=c("<input/>"),ws=c(`<p class="crp-helper svelte-sxc7i5">Optional. Leave blank to auto-generate. Custom IDs may only use English letters, numbers,
|
|
3
3
|
hyphen (-), or underscore (_).</p>`),ks=c('<p class="crp-error svelte-sxc7i5"> </p>'),xs=c('<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>'),Ss=c('<span class="crp-spinner svelte-sxc7i5"></span>'),Os=c('<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 Cs(n,t){ea(t,!0);let u=wt(t,"columns",19,()=>[]),o=wt(t,"values",31,()=>nt({})),h=wt(t,"errors",31,()=>nt({})),_=wt(t,"saving",3,!1);const P=new Set(["createdAt","updatedAt"]);let x=N(null),R=A(()=>u().find(T=>T.key==="id")??null),M=A(()=>u().filter(T=>!P.has(T.key)&&T.key!=="id"&&T.editable!==!1)),ee=A(()=>[...e(R)?[{...e(R),label:"Record ID",editable:!0}]:[],...e(M)]),F=A(()=>!!e(R)&&e(M).length===0),U=A(()=>e(ee).length===0);Ot(()=>{t.open&&requestAnimationFrame(()=>{var W;const T=(W=e(x))==null?void 0:W.querySelector("input, select, textarea");T==null||T.focus()})});function ve(T){t.open&&T.key==="Escape"&&!_()&&t.onClose()}function G(T){return T.type==="number"?"number":T.type==="datetime"?"datetime-local":"text"}function de(T){return T.key==="id"?"Leave blank to auto-generate":T.type==="json"?'{ "key": "value" }':T.type==="number"?"0":T.label}function S(T){return`create-row-${T}`}function Y(T){if(!h()[T])return;const W={...h()};delete W[T],h(W)}var re=Yt();na("keydown",fr,ve);var ae=Ve(re);{var pe=T=>{var W=Os(),k=Ve(W),j=d(k,2),$=s(j),fe=s($),b=d(s(fe),2),L=s(b);{var me=w=>{var z=Qe("This table only uses auto-managed fields. Creating a row will generate the record automatically.");l(w,z)},Se=w=>{var z=Qe("This table only uses auto-managed fields. You can optionally set a custom record ID.");l(w,z)},ke=w=>{var z=Qe("Fill in the fields for the new row. Record ID is optional.");l(w,z)};D(L,w=>{e(U)?w(me):e(F)?w(Se,1):w(ke,!1)})}r(b),r(fe);var Z=d(fe,2);r($);var q=d($,2),Q=s(q);{var be=w=>{var z=ps();l(w,z)},ze=w=>{var z=ms();l(w,z)};D(Q,w=>{e(F)?w(be):e(U)&&w(ze,1)})}var ge=d(Q,2);tt(ge,17,()=>e(ee),w=>w.key,(w,z)=>{var Fe=xs(),xe=s(Fe),m=s(xe),B=s(m,!0);r(m);var _e=d(m,2),je=s(_e,!0);r(_e),r(xe);var Ct=d(xe,2);{var Qt=Ne=>{var f=_s();let g;var K=s(f);K.value=K.__value="";var E=d(K);E.value=E.__value="true";var J=d(E);J.value=J.__value="false",r(f),y((X,V)=>{Ce(f,"id",X),g=Tt(f,1,"crp-input svelte-sxc7i5",null,g,V),f.disabled=_()},[()=>S(e(z).key),()=>({"crp-input--error":!!h()[e(z).key]})]),ie("change",f,()=>Y(e(z).key)),da(f,()=>o()[e(z).key],X=>o(o()[e(z).key]=X,!0)),l(Ne,f)},Rt=Ne=>{var f=bs();let g;var K=s(f);K.value=K.__value="";var E=d(K);tt(E,17,()=>e(z).enumValues,Bt,(J,X)=>{var V=hs(),se=s(V,!0);r(V);var he={};y(()=>{I(se,e(X)),he!==(he=e(X))&&(V.value=(V.__value=e(X))??"")}),l(J,V)}),r(f),y((J,X)=>{Ce(f,"id",J),g=Tt(f,1,"crp-input svelte-sxc7i5",null,g,X),f.disabled=_()},[()=>S(e(z).key),()=>({"crp-input--error":!!h()[e(z).key]})]),ie("change",f,()=>Y(e(z).key)),da(f,()=>o()[e(z).key],J=>o(o()[e(z).key]=J,!0)),l(Ne,f)},Jt=Ne=>{var f=gs();Da(f);let g;y((K,E,J)=>{Ce(f,"id",K),g=Tt(f,1,"crp-input crp-input--textarea svelte-sxc7i5",null,g,E),Ce(f,"placeholder",J),f.disabled=_()},[()=>S(e(z).key),()=>({"crp-input--error":!!h()[e(z).key]}),()=>de(e(z))]),ie("input",f,()=>Y(e(z).key)),$t(f,()=>o()[e(z).key],K=>o(o()[e(z).key]=K,!0)),l(Ne,f)},Xt=Ne=>{var f=ys();Ft(f);let g;y((K,E,J,X)=>{Ce(f,"id",K),g=Tt(f,1,"crp-input svelte-sxc7i5",null,g,E),Ce(f,"type",J),Ce(f,"placeholder",X),f.disabled=_()},[()=>S(e(z).key),()=>({"crp-input--error":!!h()[e(z).key]}),()=>G(e(z)),()=>de(e(z))]),ie("input",f,()=>Y(e(z).key)),$t(f,()=>o()[e(z).key],K=>o(o()[e(z).key]=K,!0)),l(Ne,f)};D(Ct,Ne=>{e(z).type==="boolean"?Ne(Qt):e(z).type==="enum"&&e(z).enumValues?Ne(Rt,1):e(z).type==="json"?Ne(Jt,2):Ne(Xt,!1)})}var Ke=d(Ct,2);{var Ee=Ne=>{var f=ws();l(Ne,f)};D(Ke,Ne=>{e(z).key==="id"&&Ne(Ee)})}var st=d(Ke,2);{var ot=Ne=>{var f=ks(),g=s(f,!0);r(f),y(()=>I(g,h()[e(z).key])),l(Ne,f)};D(st,Ne=>{h()[e(z).key]&&Ne(ot)})}r(Fe),y(Ne=>{Ce(m,"for",Ne),I(B,e(z).label),I(je,e(z).type)},[()=>S(e(z).key)]),l(w,Fe)});var Me=d(ge,2),De=s(Me),Re=d(De,2),We=s(Re);{var at=w=>{var z=Ss();l(w,z)},oe=w=>{var z=Qe();y(()=>I(z,e(U)?"Create Empty Row":"Create Row")),l(w,z)};D(We,w=>{_()?w(at):w(oe,!1)})}r(Re),r(Me),r(q),r(j),ja(j,w=>a(x,w),()=>e(x)),y(()=>{Z.disabled=_(),De.disabled=_(),Re.disabled=_()}),ie("click",k,()=>!_()&&t.onClose()),ie("click",Z,function(...w){var z;(z=t.onClose)==null||z.apply(this,w)}),na("submit",q,w=>{w.preventDefault(),t.onSubmit()}),ie("click",De,function(...w){var z;(z=t.onClose)==null||z.apply(this,w)}),l(T,W)};D(ae,T=>{t.open&&T(pe)})}l(n,re),ta()}la(["click","change","input"]);var Ns=c('<button class="dg-btn svelte-45rfpz"> </button>'),Is=c('<button class="dg-btn dg-btn--danger svelte-45rfpz"> </button> <!>',1),Ps=c('<button class="dg-btn dg-btn--primary svelte-45rfpz">Save All Changes</button> <button class="dg-btn svelte-45rfpz">Revert All</button>',1),Es=c('<label class="dg-col-picker__item svelte-45rfpz"><input type="checkbox" class="svelte-45rfpz"/> <span class="svelte-45rfpz"> </span></label>'),Ts=c('<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),Rs=c('<div class="dg-col-picker-wrap svelte-45rfpz"><button class="dg-btn svelte-45rfpz" aria-haspopup="dialog"> </button> <!></div>'),zs=c('<button class="dg-btn dg-btn--primary svelte-45rfpz">+ Add Row</button>'),Ds=c('<div class="dg-toolbar svelte-45rfpz"><div class="dg-toolbar__left svelte-45rfpz"><!> <!></div> <div class="dg-toolbar__right svelte-45rfpz"><!> <!></div></div>'),js=c('<th class="dg-th dg-th--checkbox svelte-45rfpz" style="width:36px;"><input type="checkbox"/></th>'),qs=c('<span class="dg-sort-icon svelte-45rfpz"> </span>'),Qs=c('<button type="button" class="dg-resize-handle svelte-45rfpz" tabindex="-1"></button>'),Us=c('<th class="dg-th svelte-45rfpz"><div class="dg-th__inner svelte-45rfpz"><button class="dg-sort-btn svelte-45rfpz"> <!></button> <!></div></th>'),Ls=c('<th class="dg-th dg-th--actions svelte-45rfpz" style="width:80px;">Actions</th>'),Bs=c('<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=c('<tr><td class="dg-td dg-td--empty svelte-45rfpz"> </td></tr>'),As=c('<td class="dg-td dg-td--checkbox svelte-45rfpz"><input type="checkbox"/></td>'),Ms=c('<select class="dg-cell-editor svelte-45rfpz"><option>null</option><option>true</option><option>false</option></select>'),Ks=c("<option> </option>"),Vs=c('<select class="dg-cell-editor svelte-45rfpz"><option>—</option><!></select>'),Js=c('<textarea class="dg-cell-editor dg-cell-editor--json svelte-45rfpz" rows="4"></textarea>'),Xs=c('<input class="dg-cell-editor svelte-45rfpz"/>'),Ws=c('<a class="dg-cell-link svelte-45rfpz" title="Navigate to related record"> </a>'),Zs=c("<em>null</em>"),Hs=c('<span class="dg-bool svelte-45rfpz"> </span>'),Gs=c('<button type="button"><span><!></span></button>'),Ys=c("<td><!></td>"),$s=c('<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>'),en=c('<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>'),tn=c('<span class="dg-spinner-sm svelte-45rfpz"></span>'),an=c('<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),rn=c('<td class="dg-td dg-td--actions svelte-45rfpz"><!> <!> <!></td>'),sn=c("<tr><!><!><!></tr>"),nn=c('<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>'),ln=c('<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>'),on=c('<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 _r(n,t){ea(t,!0);let u=wt(t,"columns",19,()=>[]),o=wt(t,"rows",19,()=>[]),h=wt(t,"loading",3,!1),_=wt(t,"readonly",3,!1),P=wt(t,"emptyMessage",3,"No data available."),x=wt(t,"totalCount",3,0),R=wt(t,"page",3,1),M=wt(t,"pageSize",3,20),ee=wt(t,"tableName",3,""),F=N(nt(new Set)),U=N(nt(new Map)),ve=N(nt(new Set)),G=N(null),de=N(null),S=N(""),Y=N(null),re=N("asc"),ae=N(nt(new Map)),pe=N(null),T=N(0),W=N(0),k=N(null),j=N(nt(new Set)),$=N(!1),fe=N(!1),b=N(nt({})),L=N(nt({})),me=N(!1),Se=A(()=>o().length>0&&o().every(i=>e(F).has(String(i.id)))),ke=A(()=>e(F).size>0),Z=A(()=>Math.max(1,Math.ceil(x()/M()))),q=A(()=>e(U).size>0),Q=A(()=>u().filter(i=>!e(j).has(i.key)));function be(i,p){requestAnimationFrame(()=>{var H;const O=(H=e(k))==null?void 0:H.querySelector(`[data-row-id="${i}"][data-col-key="${p}"]`);O==null||O.focus()})}Ot(()=>{!e(G)||e(de)||be(e(G).rowId,e(G).colKey)}),Ot(()=>{if(ee())try{const i=localStorage.getItem(`edgebase_grid_columns_${ee()}`);a(j,i?new Set(JSON.parse(i)):new Set,!0)}catch{a(j,new Set,!0)}});function ze(i){const p=new Set(e(j));if(p.has(i)?p.delete(i):p.add(i),a(j,p,!0),ee())try{localStorage.setItem(`edgebase_grid_columns_${ee()}`,JSON.stringify([...p]))}catch{}}function ge(i){return e(ae).get(i.key)??i.width??Me(i)}function Me(i){return i.type==="boolean"?80:i.type==="number"?120:i.type==="datetime"?180:i.type==="json"?200:160}function De(){e(Se)?a(F,new Set,!0):a(F,new Set(o().map(i=>String(i.id))),!0)}function Re(i){const p=new Set(e(F));p.has(i)?p.delete(i):p.add(i),a(F,p,!0)}function We(i){var p;e(Y)===i?a(re,e(re)==="asc"?"desc":"asc",!0):(a(Y,i,!0),a(re,"asc")),(p=t.onSort)==null||p.call(t,i,e(re))}function at(i,p){const O=e(U).get(String(i.id));return O!=null&&O.has(p)?O.get(p):i[p]}function oe(i,p){if(i==null)return"";if(p.type==="boolean")return i?"true":"false";if(p.type==="json"&&typeof i=="object")return JSON.stringify(i);if(p.type==="datetime"&&typeof i=="string")try{return new Date(i).toLocaleString()}catch{return String(i)}return String(i)}function w(i){return i==null}function z(i,p){var O;return((O=e(U).get(i))==null?void 0:O.has(p))??!1}async function Fe(i){const p=i==null?"":typeof i=="object"?JSON.stringify(i):String(i);try{await navigator.clipboard.writeText(p),Et("Copied to clipboard")}catch{}}function xe(i,p,O){if(_())return;const H=u().find(ye=>ye.key===p);!H||H.editable===!1||p==="id"||p==="createdAt"||p==="updatedAt"||(a(de,{rowId:i,colKey:p},!0),O==null?a(S,""):typeof O=="object"?a(S,JSON.stringify(O,null,2),!0):a(S,String(O),!0),requestAnimationFrame(()=>{const ye=document.querySelector(".dg-cell-editor");ye==null||ye.focus()}))}function m(){if(!e(de))return;const{rowId:i,colKey:p}=e(de),O=u().find(rt=>rt.key===p);if(!O){B();return}let H;if(e(S)===""&&O.type!=="text")H=null;else if(O.type==="number"){if(H=e(S)===""?null:Number(e(S)),H!==null&&isNaN(H)){B();return}}else if(O.type==="boolean")H=e(S)==="true"||e(S)==="1";else if(O.type==="json")try{H=e(S)?JSON.parse(e(S)):null}catch{lt("Invalid JSON");return}else H=e(S);const ye=o().find(rt=>String(rt.id)===i),ce=ye==null?void 0:ye[p];if(JSON.stringify(H)===JSON.stringify(ce)){const rt=e(U).get(i);rt&&(rt.delete(p),rt.size===0&&e(U).delete(i),a(U,new Map(e(U)),!0))}else e(U).has(i)||e(U).set(i,new Map),e(U).get(i).set(p,H),a(U,new Map(e(U)),!0);a(de,null)}function B(){a(de,null)}async function _e(i){const p=e(U).get(i);if(!(!p||!t.onSave)){a(ve,new Set([...e(ve),i]),!0);try{const O={};for(const[H,ye]of p)O[H]=ye;await t.onSave(i,O),e(U).delete(i),a(U,new Map(e(U)),!0)}catch(O){lt(O instanceof Error?O.message:"Save failed")}finally{const O=new Set(e(ve));O.delete(i),a(ve,O,!0)}}}function je(i){e(U).delete(i),a(U,new Map(e(U)),!0)}async function Ct(){for(const i of e(U).keys())await _e(i)}function Qt(){a(U,new Map,!0)}async function Rt(){if(e(F).size===0||!t.onDelete)return;const i=[...e(F)];try{await t.onDelete(i),a(F,new Set,!0)}catch(p){lt(p instanceof Error?p.message:"Delete failed")}}function Jt(){a(fe,!0),a(b,{},!0),a(L,{},!0)}function Xt(i){if(!(i instanceof Tr)||!i.data||typeof i.data!="object")return{};const p={};for(const[O,H]of Object.entries(i.data))H&&typeof H=="object"&&"message"in H&&typeof H.message=="string"&&(p[O]=H.message);return p}async function Ke(){if(t.onCreate){a(me,!0),a(L,{},!0);try{const i={};for(const p of u()){if(p.key==="createdAt"||p.key==="updatedAt")continue;const O=e(b)[p.key];if(p.key==="id"){const H=String(O??"").trim(),ye=fs(H);if(ye){a(L,{id:ye},!0);return}H&&(i.id=H);continue}if(!(!O&&O!=="0"))if(p.type==="number")i[p.key]=Number(O);else if(p.type==="boolean")i[p.key]=O==="true"||O==="1";else if(p.type==="json")try{i[p.key]=JSON.parse(O)}catch{a(L,{[p.key]:`Invalid JSON for ${p.label}`},!0);return}else i[p.key]=O}await t.onCreate(i),a(fe,!1),a(b,{},!0),a(L,{},!0)}catch(i){const p=Xt(i);if(Object.keys(p).length>0){a(L,p,!0);return}lt(i instanceof Error?i.message:"Create failed")}finally{a(me,!1)}}}function Ee(){a(fe,!1),a(b,{},!0),a(L,{},!0)}function st(i,p){i.preventDefault(),i.stopPropagation(),a(pe,p,!0),a(T,i.clientX,!0),a(W,ge(u().find(O=>O.key===p)),!0),document.addEventListener("mousemove",ot),document.addEventListener("mouseup",Ne)}function ot(i){if(!e(pe))return;const p=i.clientX-e(T),O=u().find(ce=>ce.key===e(pe)),H=(O==null?void 0:O.minWidth)??60,ye=Math.max(H,e(W)+p);e(ae).set(e(pe),ye),a(ae,new Map(e(ae)),!0)}function Ne(){a(pe,null),document.removeEventListener("mousemove",ot),document.removeEventListener("mouseup",Ne)}function f(i){if(i.target instanceof HTMLAnchorElement&&i.key==="Enter")return;if(e(de)){if(i.key==="Escape")B(),i.preventDefault();else if(i.key==="Enter"&&!i.shiftKey){const ce=u().find(rt=>rt.key===e(de).colKey);(ce==null?void 0:ce.type)!=="json"&&(m(),i.preventDefault())}else i.key==="Tab"&&m();return}if(!e(G))return;const p=o().map(ce=>String(ce.id)),O=e(Q).map(ce=>ce.key),H=p.indexOf(e(G).rowId),ye=O.indexOf(e(G).colKey);if(i.key==="ArrowDown"&&H<p.length-1)a(G,{rowId:p[H+1],colKey:e(G).colKey},!0),i.preventDefault();else if(i.key==="ArrowUp"&&H>0)a(G,{rowId:p[H-1],colKey:e(G).colKey},!0),i.preventDefault();else if(i.key==="ArrowRight"&&ye<O.length-1)a(G,{rowId:e(G).rowId,colKey:O[ye+1]},!0),i.preventDefault();else if(i.key==="ArrowLeft"&&ye>0)a(G,{rowId:e(G).rowId,colKey:O[ye-1]},!0),i.preventDefault();else if(i.key==="Enter"||i.key==="F2"){const ce=at(o().find(rt=>String(rt.id)===e(G).rowId),e(G).colKey);xe(e(G).rowId,e(G).colKey,ce),i.preventDefault()}else if(i.key==="c"&&(i.metaKey||i.ctrlKey)){const ce=at(o().find(rt=>String(rt.id)===e(G).rowId),e(G).colKey);Fe(ce),i.preventDefault()}else i.key==="Delete"&&e(ke)&&!_()&&(Rt(),i.preventDefault())}function g(){var i;R()>1&&((i=t.onPageChange)==null||i.call(t,R()-1))}function K(){var i;R()<e(Z)&&((i=t.onPageChange)==null||i.call(t,R()+1))}function E(i){var O;const p=parseInt(i.target.value,10);(O=t.onPageSizeChange)==null||O.call(t,p)}var J=on(),X=Ve(J),V=s(X);{var se=i=>{var p=Ds(),O=s(p),H=s(O);{var ye=ue=>{var Le=Is(),te=Ve(Le),le=s(te);r(te);var Oe=d(te,2);{var _t=Ze=>{var kt=Ns(),He=s(kt);r(kt),y(()=>I(He,`Edit ${e(F).size??""} row${e(F).size>1?"s":""}`)),ie("click",kt,()=>{var ht;return(ht=t.onBulkEdit)==null?void 0:ht.call(t,[...e(F)])}),l(Ze,kt)};D(Oe,Ze=>{t.onBulkEdit&&Ze(_t)})}y(()=>I(le,`Delete ${e(F).size??""} row${e(F).size>1?"s":""}`)),ie("click",te,Rt),l(ue,Le)};D(H,ue=>{e(ke)&&ue(ye)})}var ce=d(H,2);{var rt=ue=>{var Le=Ps(),te=Ve(Le),le=d(te,2);ie("click",te,Ct),ie("click",le,Qt),l(ue,Le)};D(ce,ue=>{e(q)&&ue(rt)})}r(O);var At=d(O,2),Vt=s(At);{var v=ue=>{var Le=Rs(),te=s(Le),le=s(te);r(te);var Oe=d(te,2);{var _t=Ze=>{var kt=Ts(),He=Ve(kt),ht=d(He,2);tt(ht,21,u,bt=>bt.key,(bt,xt)=>{var dt=Es(),Je=s(dt);Ft(Je);var vt=d(Je,2),Be=s(vt,!0);r(vt),r(dt),y(Nt=>{Ta(Je,Nt),Je.disabled=e(xt).key==="id",I(Be,e(xt).label)},[()=>!e(j).has(e(xt).key)]),ie("change",Je,()=>ze(e(xt).key)),l(bt,dt)}),r(ht),ie("click",He,()=>a($,!1)),l(Ze,kt)};D(Oe,Ze=>{e($)&&Ze(_t)})}r(Le),y(()=>{Ce(te,"aria-expanded",e($)),I(le,`Columns (${e(Q).length??""}/${u().length??""})`)}),ie("click",te,()=>a($,!e($))),l(ue,Le)};D(Vt,ue=>{ee()&&ue(v)})}var C=d(Vt,2);{var ne=ue=>{var Le=zs();ie("click",Le,Jt),l(ue,Le)};D(C,ue=>{e(fe)||ue(ne)})}r(At),r(p),l(i,p)};D(V,i=>{_()||i(se)})}var he=d(V,2),Ie=s(he),Ue=s(Ie),Ut=s(Ue),Lt=s(Ut);{var it=i=>{var p=js(),O=s(p);Ft(O),r(p),y(()=>Ta(O,e(Se))),ie("change",O,De),l(i,p)};D(Lt,i=>{_()||i(it)})}var mt=d(Lt);tt(mt,17,()=>e(Q),i=>i.key,(i,p)=>{var O=Us(),H=s(O),ye=s(H),ce=s(ye),rt=d(ce);{var At=C=>{var ne=qs(),ue=s(ne,!0);r(ne),y(()=>I(ue,e(re)==="asc"?"▲":"▼")),l(C,ne)};D(rt,C=>{e(Y)===e(p).key&&C(At)})}r(ye);var Vt=d(ye,2);{var v=C=>{var ne=Qs();y(()=>Ce(ne,"aria-label",`Resize ${e(p).label} column`)),ie("mousedown",ne,ue=>st(ue,e(p).key)),l(C,ne)};D(Vt,C=>{_()||C(v)})}r(H),r(O),y(C=>{Ha(O,`width:${C??""}px;min-width:${e(p).minWidth??60??""}px;`),I(ce,`${e(p).label??""} `)},[()=>ge(e(p))]),ie("click",ye,()=>We(e(p).key)),l(i,O)});var Mt=d(mt);{var ca=i=>{var p=Ls();l(i,p)};D(Mt,i=>{_()||i(ca)})}r(Ut),r(Ue);var va=d(Ue),ya=s(va);{var ma=i=>{var p=Bs(),O=s(p);r(p),y(()=>Ce(O,"colspan",e(Q).length+(_()?0:2))),l(i,p)},ua=i=>{var p=Fs(),O=s(p),H=s(O,!0);r(O),r(p),y(()=>{Ce(O,"colspan",e(Q).length+(_()?0:2)),I(H,P())}),l(i,p)},wa=i=>{var p=Yt(),O=Ve(p);tt(O,17,o,H=>H.id??o().indexOf(H),(H,ye)=>{const ce=A(()=>String(e(ye).id)),rt=A(()=>e(U).has(e(ce)));var At=sn();let Vt;var v=s(At);{var C=te=>{var le=As(),Oe=s(le);Ft(Oe),r(le),y(_t=>Ta(Oe,_t),[()=>e(F).has(e(ce))]),ie("change",Oe,()=>Re(e(ce))),l(te,le)};D(v,te=>{_()||te(C)})}var ne=d(v);tt(ne,17,()=>e(Q),te=>te.key,(te,le)=>{const Oe=A(()=>at(e(ye),e(le).key)),_t=A(()=>z(e(ce),e(le).key)),Ze=A(()=>{var Je,vt;return((Je=e(de))==null?void 0:Je.rowId)===e(ce)&&((vt=e(de))==null?void 0:vt.colKey)===e(le).key}),kt=A(()=>{var Je,vt;return((Je=e(G))==null?void 0:Je.rowId)===e(ce)&&((vt=e(G))==null?void 0:vt.colKey)===e(le).key});var He=Ys();let ht;var bt=s(He);{var xt=Je=>{var vt=Yt(),Be=Ve(vt);{var Nt=Pe=>{var qe=Ms(),yt=s(qe);yt.value=yt.__value="";var Ht=d(yt);Ht.value=Ht.__value="true";var Xe=d(Ht);Xe.value=Xe.__value="false",r(qe),na("blur",qe,m),ie("keydown",qe,Ge=>{Ge.key==="Escape"&&B()}),da(qe,()=>e(S),Ge=>a(S,Ge)),l(Pe,qe)},Zt=Pe=>{var qe=Vs(),yt=s(qe);yt.value=yt.__value="";var Ht=d(yt);tt(Ht,17,()=>e(le).enumValues,Bt,(Xe,Ge)=>{var St=Ks(),sa=s(St,!0);r(St);var Dt={};y(()=>{I(sa,e(Ge)),Dt!==(Dt=e(Ge))&&(St.value=(St.__value=e(Ge))??"")}),l(Xe,St)}),r(qe),na("blur",qe,m),ie("keydown",qe,Xe=>{Xe.key==="Escape"&&B()}),da(qe,()=>e(S),Xe=>a(S,Xe)),l(Pe,qe)},It=Pe=>{var qe=Js();Da(qe),na("blur",qe,m),$t(qe,()=>e(S),yt=>a(S,yt)),l(Pe,qe)},gt=Pe=>{var qe=Xs();Ft(qe),y(()=>Ce(qe,"type",e(le).type==="number"?"number":e(le).type==="datetime"?"datetime-local":"text")),na("blur",qe,m),$t(qe,()=>e(S),yt=>a(S,yt)),l(Pe,qe)};D(Be,Pe=>{e(le).type==="boolean"?Pe(Nt):e(le).type==="enum"&&e(le).enumValues?Pe(Zt,1):e(le).type==="json"?Pe(It,2):Pe(gt,!1)})}l(Je,vt)},dt=Je=>{const vt=A(()=>e(le).linkFn&&!w(e(Oe))?e(le).linkFn(e(Oe)):null);var Be=Yt(),Nt=Ve(Be);{var Zt=gt=>{var Pe=Ws(),qe=s(Pe,!0);r(Pe),y(yt=>{Ce(Pe,"href",e(vt)),Ce(Pe,"data-row-id",e(ce)),Ce(Pe,"data-col-key",e(le).key),I(qe,yt)},[()=>oe(e(Oe),e(le))]),na("focus",Pe,()=>{a(G,{rowId:e(ce),colKey:e(le).key},!0)}),l(gt,Pe)},It=gt=>{var Pe=Gs();let qe;var yt=s(Pe);let Ht;var Xe=s(yt);{var Ge=Ye=>{var $e=Zs();l(Ye,$e)},St=A(()=>w(e(Oe))),sa=Ye=>{var $e=Hs(),Pt=s($e,!0);r($e),y(()=>I(Pt,e(Oe)?"✔":"✘")),l(Ye,$e)},Dt=Ye=>{var $e=Qe();y(Pt=>I($e,Pt),[()=>oe(e(Oe),e(le))]),l(Ye,$e)};D(Xe,Ye=>{e(St)?Ye(Ge):e(le).type==="boolean"?Ye(sa,1):Ye(Dt,!1)})}r(yt),r(Pe),y((Ye,$e,Pt)=>{qe=Tt(Pe,1,"dg-cell-trigger svelte-45rfpz",null,qe,Ye),Ce(Pe,"data-row-id",e(ce)),Ce(Pe,"data-col-key",e(le).key),Ce(Pe,"aria-label",$e),Ht=Tt(yt,1,"dg-cell-value svelte-45rfpz",null,Ht,Pt)},[()=>({"dg-cell-trigger--null":w(e(Oe))}),()=>`${e(le).label}: ${w(e(Oe))?"null":oe(e(Oe),e(le))}`,()=>({"dg-cell-value--null":w(e(Oe))})]),ie("click",Pe,()=>{a(G,{rowId:e(ce),colKey:e(le).key},!0)}),ie("dblclick",Pe,()=>xe(e(ce),e(le).key,e(Oe))),na("focus",Pe,()=>{a(G,{rowId:e(ce),colKey:e(le).key},!0)}),l(gt,Pe)};D(Nt,gt=>{e(vt)?gt(Zt):gt(It,!1)})}l(Je,Be)};D(bt,Je=>{e(Ze)?Je(xt):Je(dt,!1)})}r(He),y(Je=>{ht=Tt(He,1,"dg-td svelte-45rfpz",null,ht,{"dg-td--dirty":e(_t),"dg-td--focused":e(kt),"dg-td--editing":e(Ze)}),Ha(He,`width:${Je??""}px;`)},[()=>ge(e(le))]),l(te,He)});var ue=d(ne);{var Le=te=>{var le=rn(),Oe=s(le);{var _t=bt=>{var xt=$s();ie("click",xt,()=>{var dt;return(dt=t.onDuplicate)==null?void 0:dt.call(t,e(ye))}),l(bt,xt)};D(Oe,bt=>{t.onDuplicate&&bt(_t)})}var Ze=d(Oe,2);{var kt=bt=>{var xt=en();ie("click",xt,()=>{var dt;return(dt=t.onRowInspect)==null?void 0:dt.call(t,e(ye))}),l(bt,xt)};D(Ze,bt=>{t.onRowInspect&&bt(kt)})}var He=d(Ze,2);{var ht=bt=>{var xt=an(),dt=Ve(xt),Je=s(dt);{var vt=It=>{var gt=tn();l(It,gt)},Be=A(()=>e(ve).has(e(ce))),Nt=It=>{var gt=Qe("✔");l(It,gt)};D(Je,It=>{e(Be)?It(vt):It(Nt,!1)})}r(dt);var Zt=d(dt,2);y(It=>dt.disabled=It,[()=>e(ve).has(e(ce))]),ie("click",dt,()=>_e(e(ce))),ie("click",Zt,()=>je(e(ce))),l(bt,xt)};D(He,bt=>{e(rt)&&bt(ht)})}r(le),l(te,le)};D(ue,te=>{_()||te(Le)})}r(At),y(te=>Vt=Tt(At,1,"dg-row svelte-45rfpz",null,Vt,te),[()=>({"dg-row--selected":e(F).has(e(ce)),"dg-row--dirty":e(rt)})]),l(H,At)}),l(i,p)};D(ya,i=>{h()?i(ma):o().length===0?i(ua,1):i(wa,!1)})}r(va),r(Ie),r(he),ja(he,i=>a(k,i),()=>e(k));var _a=d(he,2),aa=s(_a),Kt=s(aa),zt=s(Kt);r(Kt);var Wt=d(Kt,2);{var ha=i=>{var p=nn(),O=s(p);O.value=O.__value="20";var H=d(O);H.value=H.__value="50";var ye=d(H);ye.value=ye.__value="100";var ce=d(ye);ce.value=ce.__value="200";var rt=d(ce);rt.value=rt.__value="500",r(p);var At;Rr(p),y(Vt=>{At!==(At=Vt)&&(p.value=(p.__value=Vt)??"",zr(p,Vt))},[()=>String(M())]),ie("change",p,E),l(i,p)};D(Wt,i=>{_()||i(ha)})}r(aa);var ra=d(aa,2);{var oa=i=>{var p=ln(),O=s(p),H=d(O,2),ye=s(H);r(H);var ce=d(H,2);r(p),y(()=>{O.disabled=R()<=1,I(ye,`Page ${R()??""} / ${e(Z)??""}`),ce.disabled=R()>=e(Z)}),ie("click",O,g),ie("click",ce,K),l(i,p)};D(ra,i=>{e(Z)>1&&i(oa)})}r(_a),r(X);var ka=d(X,2);{var fa=i=>{Cs(i,{get columns(){return u()},get saving(){return e(me)},onClose:Ee,onSubmit:Ke,get open(){return e(fe)},set open(p){a(fe,p,!0)},get values(){return e(b)},set values(p){a(b,p,!0)},get errors(){return e(L)},set errors(p){a(L,p,!0)}})};D(ka,i=>{_()||i(fa)})}y(()=>I(zt,`${x()??""} row${x()!==1?"s":""}`)),ie("keydown",X,f),l(n,J),ta()}la(["keydown","click","change","mousedown","dblclick"]);function ar({limit:n,offset:t,search:u,sortKey:o,sortDir:h="asc",includeTotal:_}){const P=new URLSearchParams({limit:String(n),offset:String(t)});return u&&P.set("search",u),o&&P.set("sort",`${o}:${h}`),_===!1&&P.set("includeTotal","0"),P.toString()}var dn=c('<label class="rdp-field__name svelte-yphh8m"> </label>'),cn=c('<span class="rdp-field__name svelte-yphh8m"> </span>'),vn=c('<select class="rdp-input svelte-yphh8m"><option>Unset</option><option>true</option><option>false</option></select>'),un=c("<option> </option>"),fn=c('<select class="rdp-input svelte-yphh8m"><option>Select value</option><!></select>'),pn=c('<textarea class="rdp-input rdp-input--textarea svelte-yphh8m" rows="6"></textarea>'),mn=c('<input class="rdp-input svelte-yphh8m"/>'),_n=c("<em>null</em>"),hn=c('<span class="rdp-bool svelte-yphh8m"> </span>'),bn=c('<pre class="rdp-json svelte-yphh8m"> </pre>'),gn=c('<a class="rdp-link svelte-yphh8m"> </a>'),yn=c("<div><!></div>"),wn=c('<div class="rdp-field svelte-yphh8m"><div class="rdp-field__header svelte-yphh8m"><!> <span class="rdp-field__type svelte-yphh8m"> </span></div> <!></div>'),kn=c('<span class="rdp-spinner svelte-yphh8m"></span>'),xn=c('<button type="button" class="rdp-btn svelte-yphh8m">Reset</button> <button type="button" class="rdp-btn rdp-btn--primary svelte-yphh8m"><!></button>',1),Sn=c('<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 On(n,t){ea(t,!0);const u=new Set(["id","createdAt","updatedAt"]),o=Symbol("invalid-value");let h=N(null),_=N(nt({})),P=N(null),x=N(!1),R=A(()=>t.columns.filter(b=>!u.has(b.key)&&b.editable!==!1)),M=A(()=>e(R).length>0&&!!t.onSave),ee=A(()=>!!ae());Ot(()=>{!t.open||!t.row||(a(P,{...t.row},!0),a(_,F(t.row),!0),requestAnimationFrame(()=>{var L;const b=(L=e(h))==null?void 0:L.querySelector("input, select, textarea");b==null||b.focus()}))});function F(b){const L={};for(const me of t.columns){const Se=b[me.key];if(Se==null){L[me.key]="";continue}if(me.type==="boolean"){L[me.key]=Se?"true":"false";continue}if(me.type==="json"&&typeof Se=="object"){L[me.key]=JSON.stringify(Se,null,2);continue}if(me.type==="datetime"&&typeof Se=="string"){L[me.key]=U(Se);continue}L[me.key]=String(Se)}return L}function U(b){const L=new Date(b);return Number.isNaN(L.getTime())?b:new Date(L.getTime()-L.getTimezoneOffset()*6e4).toISOString().slice(0,16)}function ve(b){t.open&&b.key==="Escape"&&!e(x)&&t.onClose()}function G(b,L){if(b==null)return"null";if(L.type==="boolean")return b?"true":"false";if(L.type==="json"&&typeof b=="object")return JSON.stringify(b,null,2);if(L.type==="datetime"&&typeof b=="string")try{return new Date(b).toLocaleString()}catch{return String(b)}return String(b)}function de(b,L){if(L===""&&b.type!=="text")return null;if(b.type==="number"){const me=Number(L);return Number.isNaN(me)?o:me}if(b.type==="boolean")return L===""?null:L==="true"||L==="1";if(b.type==="json"){if(L==="")return null;try{return JSON.parse(L)}catch{return o}}return L}function S(b){return b==null}function Y(b){return typeof b=="object"&&b!==null}function re(b,L){return JSON.stringify(b)===JSON.stringify(L)}function ae(){if(!e(P))return null;const b={};for(const L of e(R)){const me=de(L,e(_)[L.key]??"");if(me===o)return null;re(me,e(P)[L.key])||(b[L.key]=me)}return Object.keys(b).length>0?b:null}function pe(b){return b.type==="number"?"number":b.type==="datetime"?"datetime-local":"text"}function T(b){return`row-detail-field-${b}`}async function W(){if(!e(P)||!t.onSave)return;const b=ae();if(b){for(const L of e(R))if(de(L,e(_)[L.key]??"")===o){lt(`Invalid ${L.type} value for ${L.label}`);return}a(x,!0);try{await t.onSave(String(e(P).id),b),a(P,{...e(P),...b},!0),a(_,F(e(P)),!0)}catch(L){lt(L instanceof Error?L.message:"Save failed")}finally{a(x,!1)}}}function k(){e(P)&&a(_,F(e(P)),!0)}var j=Yt();na("keydown",fr,ve);var $=Ve(j);{var fe=b=>{var L=Sn(),me=Ve(L),Se=d(me,2),ke=s(Se),Z=s(ke),q=d(s(Z),2),Q=s(q);{var be=oe=>{var w=Qe("Inspect and update this record without leaving the table.");l(oe,w)},ze=oe=>{var w=Qe("This record is read-only.");l(oe,w)};D(Q,oe=>{e(M)?oe(be):oe(ze,!1)})}r(q),r(Z);var ge=d(Z,2);r(ke);var Me=d(ke,2);tt(Me,21,()=>t.columns,oe=>oe.key,(oe,w)=>{const z=A(()=>e(P)[e(w).key]),Fe=A(()=>!u.has(e(w).key)&&e(w).editable!==!1&&!!t.onSave);var xe=wn(),m=s(xe),B=s(m);{var _e=Ke=>{var Ee=dn(),st=s(Ee,!0);r(Ee),y(ot=>{Ce(Ee,"for",ot),I(st,e(w).label)},[()=>T(e(w).key)]),l(Ke,Ee)},je=Ke=>{var Ee=cn(),st=s(Ee,!0);r(Ee),y(()=>I(st,e(w).label)),l(Ke,Ee)};D(B,Ke=>{e(Fe)?Ke(_e):Ke(je,!1)})}var Ct=d(B,2),Qt=s(Ct,!0);r(Ct),r(m);var Rt=d(m,2);{var Jt=Ke=>{var Ee=Yt(),st=Ve(Ee);{var ot=K=>{var E=vn(),J=s(E);J.value=J.__value="";var X=d(J);X.value=X.__value="true";var V=d(X);V.value=V.__value="false",r(E),y(se=>{Ce(E,"id",se),E.disabled=e(x)},[()=>T(e(w).key)]),da(E,()=>e(_)[e(w).key],se=>e(_)[e(w).key]=se),l(K,E)},Ne=K=>{var E=fn(),J=s(E);J.value=J.__value="";var X=d(J);tt(X,17,()=>e(w).enumValues,Bt,(V,se)=>{var he=un(),Ie=s(he,!0);r(he);var Ue={};y(()=>{I(Ie,e(se)),Ue!==(Ue=e(se))&&(he.value=(he.__value=e(se))??"")}),l(V,he)}),r(E),y(V=>{Ce(E,"id",V),E.disabled=e(x)},[()=>T(e(w).key)]),da(E,()=>e(_)[e(w).key],V=>e(_)[e(w).key]=V),l(K,E)},f=K=>{var E=pn();Da(E),y(J=>{Ce(E,"id",J),E.disabled=e(x)},[()=>T(e(w).key)]),$t(E,()=>e(_)[e(w).key],J=>e(_)[e(w).key]=J),l(K,E)},g=K=>{var E=mn();Ft(E),y((J,X)=>{Ce(E,"id",J),Ce(E,"type",X),E.disabled=e(x)},[()=>T(e(w).key),()=>pe(e(w))]),$t(E,()=>e(_)[e(w).key],J=>e(_)[e(w).key]=J),l(K,E)};D(st,K=>{e(w).type==="boolean"?K(ot):e(w).type==="enum"&&e(w).enumValues?K(Ne,1):e(w).type==="json"?K(f,2):K(g,!1)})}l(Ke,Ee)},Xt=Ke=>{var Ee=yn();let st;var ot=s(Ee);{var Ne=V=>{var se=_n();l(V,se)},f=A(()=>S(e(z))),g=V=>{var se=hn(),he=s(se,!0);r(se),y(()=>I(he,e(z)?"true":"false")),l(V,se)},K=V=>{var se=bn(),he=s(se,!0);r(se),y(Ie=>I(he,Ie),[()=>JSON.stringify(e(z),null,2)]),l(V,se)},E=A(()=>e(w).type==="json"&&Y(e(z))),J=V=>{const se=A(()=>e(w).linkFn(e(z)));var he=Yt(),Ie=Ve(he);{var Ue=Lt=>{var it=gn(),mt=s(it,!0);r(it),y(Mt=>{Ce(it,"href",e(se)),I(mt,Mt)},[()=>G(e(z),e(w))]),l(Lt,it)},Ut=Lt=>{var it=Qe();y(mt=>I(it,mt),[()=>G(e(z),e(w))]),l(Lt,it)};D(Ie,Lt=>{e(se)?Lt(Ue):Lt(Ut,!1)})}l(V,he)},X=V=>{var se=Qe();y(he=>I(se,he),[()=>G(e(z),e(w))]),l(V,se)};D(ot,V=>{e(f)?V(Ne):e(w).type==="boolean"?V(g,1):e(E)?V(K,2):e(w).linkFn?V(J,3):V(X,!1)})}r(Ee),y(V=>st=Tt(Ee,1,"rdp-field__value svelte-yphh8m",null,st,V),[()=>({"rdp-field__value--null":S(e(z))})]),l(Ke,Ee)};D(Rt,Ke=>{e(Fe)?Ke(Jt):Ke(Xt,!1)})}r(xe),y(()=>I(Qt,e(w).type)),l(oe,xe)}),r(Me);var De=d(Me,2),Re=s(De),We=d(Re,2);{var at=oe=>{var w=xn(),z=Ve(w),Fe=d(z,2),xe=s(Fe);{var m=_e=>{var je=kn();l(_e,je)},B=_e=>{var je=Qe("Save Changes");l(_e,je)};D(xe,_e=>{e(x)?_e(m):_e(B,!1)})}r(Fe),y(()=>{z.disabled=e(x)||!e(ee),Fe.disabled=e(x)||!e(ee)}),ie("click",z,k),ie("click",Fe,W),l(oe,w)};D(We,oe=>{e(M)&&oe(at)})}r(De),r(Se),ja(Se,oe=>a(h,oe),()=>e(h)),y(()=>{ge.disabled=e(x),Re.disabled=e(x)}),ie("click",me,()=>!e(x)&&t.onClose()),ie("click",ge,function(...oe){var w;(w=t.onClose)==null||w.apply(this,oe)}),ie("click",Re,function(...oe){var w;(w=t.onClose)==null||w.apply(this,oe)}),l(b,L)};D($,b=>{t.open&&e(P)&&b(fe)})}l(n,j),ta()}la(["click"]);var Cn=c("<!> <!>",1),Nn=c('<div class="csv-error svelte-198lwhz"> </div>'),In=c('<span class="csv-filename svelte-198lwhz"> </span>'),Pn=c("<option> </option>"),En=c('<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>'),Tn=c('<th class="csv-preview-th svelte-198lwhz"> </th>'),Rn=c('<td class="csv-preview-td svelte-198lwhz"> </td>'),zn=c("<tr></tr>"),Dn=c('<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),jn=c('<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>'),qn=c('<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 Qn(n,t){ea(t,!0);const u=()=>pa(qt,"$schemaStore",o),[o,h]=Ia();let _=N(!0),P=N(nt([])),x=N(nt({})),R=N(0),M=N(void 0),ee=N(1),F=N(20),U=N(""),ve=N(""),G=N(""),de=N("asc"),S=N(null),Y=N(!1),re=N(!1),ae=N(null),pe=N(nt([])),T=N(nt([])),W=N(nt({})),k=N(!1),j=N(""),$=A(()=>Object.entries(e(x)).filter(([f])=>!$a.includes(f))),fe=A(()=>Object.keys(e(x))),b=A(()=>e(fe).map(f=>{const g=e(x)[f],K=$a.includes(f);let E="text";(g==null?void 0:g.type)==="number"||(g==null?void 0:g.type)==="integer"||(g==null?void 0:g.type)==="float"?E="number":(g==null?void 0:g.type)==="boolean"?E="boolean":(g==null?void 0:g.type)==="json"?E="json":(g==null?void 0:g.type)==="datetime"||(g==null?void 0:g.type)==="date"?E="datetime":g!=null&&g.enum&&g.enum.length>0&&(E="enum");let J;if(g!=null&&g.references){const X=g.references,V=typeof X=="string"?X:X.table;J=se=>se==null||se===""?null:jr(Ra,V,{instanceId:t.instanceId,search:String(se)})}return{key:f,label:f,type:E,editable:!K&&f!=="id",width:f==="id"?280:E==="json"?200:150,enumValues:g==null?void 0:g.enum,linkFn:J}}));function L(f){const g=f?`data/tables/${encodeURIComponent(t.tableName)}/records/${encodeURIComponent(f)}`:`data/tables/${encodeURIComponent(t.tableName)}/records`;if(!t.instanceId)return g;const K=new URLSearchParams({instanceId:t.instanceId});return`${g}?${K.toString()}`}function me(){return e(M)==="postgres"||e(M)==="neon"}async function Se(){try{const f=ar({limit:1,offset:0,search:e(U),includeTotal:!0}),g=await pt.fetch(Oa(t.tableName,{instanceId:t.instanceId,params:new URLSearchParams(f)}));typeof g.total=="number"&&a(R,g.total,!0)}catch{}}async function ke(f={}){a(_,!0);try{const g=(e(ee)-1)*e(F),K=ar({limit:e(F),offset:g,search:e(U),sortKey:e(G),sortDir:e(de),includeTotal:!me()}),E=await pt.fetch(Oa(t.tableName,{instanceId:t.instanceId,params:new URLSearchParams(K)})),J=E.items??E.data??E.rows??[];if(a(P,J,!0),a(R,typeof E.total=="number"?E.total:e(P).length,!0),e(Y)&&e(S)){const X=J.find(V=>{var se;return String(V.id)===String((se=e(S))==null?void 0:se.id)});X&&a(S,X,!0)}me()&&f.refreshTotal!==!1&&Se()}catch(g){lt(g instanceof Error?g.message:"Failed to load records"),a(P,[],!0)}finally{a(_,!1)}}Ot(()=>{const f=t.tableName;if(t.instanceId,f){const g=u().schema[t.tableName];g&&(a(x,g.fields,!0),a(M,g.provider,!0)),a(ee,1),a(U,""),a(ve,""),a(G,""),a(de,"asc"),Pr(()=>ke())}});function Z(){a(U,e(ve),!0),a(ee,1),ke()}function q(){a(ve,""),a(U,""),a(ee,1),ke()}async function Q(f,g){await pt.fetch(L(f),{method:"PUT",body:g}),e(S)&&String(e(S).id)===f&&a(S,{...e(S),...g},!0),Et("Record updated"),await ke({refreshTotal:!1})}async function be(f){for(const g of f)await pt.fetch(L(g),{method:"DELETE"});Et(`${f.length} record${f.length>1?"s":""} deleted`),await ke()}async function ze(f){await pt.fetch(Oa(t.tableName,{instanceId:t.instanceId}),{method:"POST",body:f}),Et("Record created"),await ke()}function ge(f){a(ee,f,!0),ke({refreshTotal:!1})}function Me(f){a(F,f,!0),a(ee,1),ke()}function De(f,g){a(G,f,!0),a(de,g,!0),ke({refreshTotal:!1})}function Re(f){a(S,f,!0),a(Y,!0)}async function We(){try{const f=await pt.fetch(Oa(t.tableName,{instanceId:t.instanceId,params:{limit:1e4,includeTotal:0}})),g=f.items??f.data??f.rows??[];if(g.length===0){lt("No records to export");return}const K=Ur(e(fe),g),E=new Blob([K],{type:"text/csv;charset=utf-8;"});Ya(E,`${t.tableName}.csv`),Et("CSV exported")}catch(f){lt(f instanceof Error?f.message:"Export failed")}}async function at(){try{const f=await pt.fetch(Oa(t.tableName,{instanceId:t.instanceId,params:{limit:1e4,includeTotal:0}})),g=f.items??f.data??f.rows??[];if(g.length===0){lt("No records to export");return}const K=new Blob([JSON.stringify(g,null,2)],{type:"application/json"});Ya(K,`${t.tableName}.json`),Et("JSON exported")}catch(f){lt(f instanceof Error?f.message:"JSON export failed")}}function oe(){a(ae,null),a(pe,[],!0),a(T,[],!0),a(W,{},!0),a(j,""),a(re,!0)}async function w(f){var E;const K=(E=f.target.files)==null?void 0:E[0];if(K){a(ae,K,!0),a(j,"");try{const J=await K.text(),X=er(J);a(pe,X.headers,!0),a(T,X.rows.slice(0,5),!0);const V={};for(const se of X.headers){const he=se.toLowerCase().trim();for(const[Ie]of e($))if(Ie.toLowerCase()===he){V[se]=Ie;break}}a(W,V,!0)}catch{a(j,"Failed to parse CSV file")}}}async function z(){if(e(ae)){a(k,!0),a(j,"");try{const f=await e(ae).text(),g=er(f),K=[];for(const J of g.rows){const X={};for(let V=0;V<g.headers.length;V++){const se=g.headers[V],he=e(W)[se];if(!he)continue;const Ie=J[V];if(Ie===""||Ie===void 0)continue;const Ue=e(x)[he];if((Ue==null?void 0:Ue.type)==="number"||(Ue==null?void 0:Ue.type)==="integer"||(Ue==null?void 0:Ue.type)==="float")X[he]=Number(Ie);else if((Ue==null?void 0:Ue.type)==="boolean")X[he]=Ie==="true"||Ie==="1";else if((Ue==null?void 0:Ue.type)==="json")try{X[he]=JSON.parse(Ie)}catch{X[he]=Ie}else X[he]=Ie}Object.keys(X).length>0&&K.push(X)}if(K.length===0){a(j,"No valid records to import. Check column mapping.");return}const E=await pt.fetch(`data/tables/${encodeURIComponent(t.tableName)}/import`,{method:"POST",body:{records:K,mode:"create"}});E.errors&&E.errors.length>0?lt(`Imported ${E.imported} records with ${E.errors.length} errors`):Et(`Imported ${E.imported} records`),a(re,!1),await ke()}catch(f){a(j,f instanceof Error?f.message:"Import failed",!0)}finally{a(k,!1)}}}var Fe=qn(),xe=s(Fe),m=s(xe),B=s(m);Ft(B);var _e=d(B,2);ct(_e,{variant:"secondary",size:"sm",type:"submit",children:(f,g)=>{Ae();var K=Qe("Search");l(f,K)},$$slots:{default:!0}});var je=d(_e,2);{var Ct=f=>{ct(f,{variant:"ghost",size:"sm",onclick:q,children:(g,K)=>{Ae();var E=Qe("Clear");l(g,E)},$$slots:{default:!0}})};D(je,f=>{e(U)&&f(Ct)})}r(m);var Qt=d(m,2),Rt=s(Qt),Jt=s(Rt);r(Rt);var Xt=d(Rt,2);ct(Xt,{variant:"ghost",size:"sm",onclick:oe,children:(f,g)=>{Ae();var K=Qe("Import CSV");l(f,K)},$$slots:{default:!0}});var Ke=d(Xt,2);ct(Ke,{variant:"ghost",size:"sm",onclick:We,children:(f,g)=>{Ae();var K=Qe("Export CSV");l(f,K)},$$slots:{default:!0}});var Ee=d(Ke,2);ct(Ee,{variant:"ghost",size:"sm",onclick:at,children:(f,g)=>{Ae();var K=Qe("Export JSON");l(f,K)},$$slots:{default:!0}}),r(Qt),r(xe);var st=d(xe,2);{let f=A(()=>e(U)?"No records match your search.":"This table has no records yet.");_r(st,{get columns(){return e(b)},get rows(){return e(P)},get tableName(){return t.tableName},get loading(){return e(_)},get totalCount(){return e(R)},get page(){return e(ee)},get pageSize(){return e(F)},get emptyMessage(){return e(f)},onSave:Q,onDelete:be,onCreate:ze,onPageChange:ge,onPageSizeChange:Me,onSort:De,onRowInspect:Re})}var ot=d(st,2);pr(ot,{title:"Import CSV",get open(){return e(re)},set open(g){a(re,g,!0)},footer:g=>{var K=Cn(),E=Ve(K);ct(E,{variant:"secondary",onclick:()=>a(re,!1),children:(X,V)=>{Ae();var se=Qe("Cancel");l(X,se)},$$slots:{default:!0}});var J=d(E,2);{let X=A(()=>!e(ae)||e(pe).length===0);ct(J,{variant:"primary",get disabled(){return e(X)},get loading(){return e(k)},onclick:z,children:(V,se)=>{Ae();var he=Qe("Import");l(V,he)},$$slots:{default:!0}})}l(g,K)},children:(g,K)=>{var E=jn(),J=s(E);{var X=it=>{var mt=Nn(),Mt=s(mt,!0);r(mt),y(()=>I(Mt,e(j))),l(it,mt)};D(J,it=>{e(j)&&it(X)})}var V=d(J,2),se=s(V),he=d(s(se),2);r(se);var Ie=d(se,2);{var Ue=it=>{var mt=In(),Mt=s(mt,!0);r(mt),y(()=>I(Mt,e(ae).name)),l(it,mt)};D(Ie,it=>{e(ae)&&it(Ue)})}r(V);var Ut=d(V,2);{var Lt=it=>{var mt=Dn(),Mt=Ve(mt),ca=d(s(Mt),2);tt(ca,21,()=>e(pe),Bt,(aa,Kt)=>{var zt=En(),Wt=s(zt),ha=s(Wt,!0);r(Wt);var ra=d(Wt,4),oa=s(ra);oa.value=oa.__value="";var ka=d(oa);tt(ka,17,()=>e($),Bt,(fa,i)=>{var p=A(()=>Er(e(i),1));let O=()=>e(p)[0];var H=Pn(),ye=s(H,!0);r(H);var ce={};y(()=>{I(ye,O()),ce!==(ce=O())&&(H.value=(H.__value=O())??"")}),l(fa,H)}),r(ra),r(zt),y(()=>I(ha,e(Kt))),da(ra,()=>e(W)[e(Kt)],fa=>e(W)[e(Kt)]=fa),l(aa,zt)}),r(ca),r(Mt);var va=d(Mt,2),ya=d(s(va),2),ma=s(ya),ua=s(ma),wa=s(ua);tt(wa,21,()=>e(pe),Bt,(aa,Kt)=>{var zt=Tn(),Wt=s(zt,!0);r(zt),y(()=>I(Wt,e(Kt))),l(aa,zt)}),r(wa),r(ua);var _a=d(ua);tt(_a,21,()=>e(T),Bt,(aa,Kt)=>{var zt=zn();tt(zt,21,()=>e(Kt),Bt,(Wt,ha)=>{var ra=Rn(),oa=s(ra,!0);r(ra),y(()=>I(oa,e(ha))),l(Wt,ra)}),r(zt),l(aa,zt)}),r(_a),r(ma),r(ya),r(va),l(it,mt)};D(Ut,it=>{e(pe).length>0&&it(Lt)})}r(E),ie("change",he,w),l(g,E)},$$slots:{footer:!0,default:!0}});var Ne=d(ot,2);On(Ne,{get row(){return e(S)},get columns(){return e(b)},onSave:Q,onClose:()=>{a(Y,!1)},get open(){return e(Y)},set open(f){a(Y,f,!0)}}),r(Fe),y(()=>I(Jt,`${e(R)??""} record${e(R)!==1?"s":""}`)),na("submit",m,f=>{f.preventDefault(),Z()}),$t(B,()=>e(ve),f=>a(ve,f)),l(n,Fe),ta(),h()}la(["change"]);const Un=36,rr=1,Ln=2,Sa=3,Ba=4,Bn=5,Fn=6,An=7,Mn=8,Kn=9,Vn=10,Jn=11,Xn=12,Wn=13,Zn=14,Hn=15,Gn=16,Yn=17,sr=18,$n=19,hr=20,br=21,nr=22,el=23,tl=24;function Ma(n){return n>=65&&n<=90||n>=97&&n<=122||n>=48&&n<=57}function al(n){return n>=48&&n<=57||n>=97&&n<=102||n>=65&&n<=70}function ga(n,t,u){for(let o=!1;;){if(n.next<0)return;if(n.next==t&&!o){n.advance();return}o=u&&!o&&n.next==92,n.advance()}}function rl(n,t){e:for(;;){if(n.next<0)return;if(n.next==36){n.advance();for(let u=0;u<t.length;u++){if(n.next!=t.charCodeAt(u))continue e;n.advance()}if(n.next==36){n.advance();return}}else n.advance()}}function sl(n,t){let u="[{<(".indexOf(String.fromCharCode(t)),o=u<0?t:"]}>)".charCodeAt(u);for(;;){if(n.next<0)return;if(n.next==o&&n.peek(1)==39){n.advance(2);return}n.advance()}}function Ka(n,t){for(;!(n.next!=95&&!Ma(n.next));)t!=null&&(t+=String.fromCharCode(n.next)),n.advance();return t}function nl(n){if(n.next==39||n.next==34||n.next==96){let t=n.next;n.advance(),ga(n,t,!1)}else Ka(n)}function lr(n,t){for(;n.next==48||n.next==49;)n.advance();t&&n.next==t&&n.advance()}function or(n,t){for(;;){if(n.next==46){if(t)break;t=!0}else if(n.next<48||n.next>57)break;n.advance()}if(n.next==69||n.next==101)for(n.advance(),(n.next==43||n.next==45)&&n.advance();n.next>=48&&n.next<=57;)n.advance()}function ir(n){for(;!(n.next<0||n.next==10);)n.advance()}function ba(n,t){for(let u=0;u<t.length;u++)if(t.charCodeAt(u)==n)return!0;return!1}const Fa=` \r
|
|
4
4
|
`;function gr(n,t,u){let o=Object.create(null);o.true=o.false=Bn,o.null=o.unknown=Fn;for(let h of n.split(" "))h&&(o[h]=hr);for(let h of t.split(" "))h&&(o[h]=br);for(let h of(u||"").split(" "))h&&(o[h]=tl);return o}const yr="array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying ",wr="absolute action add after all allocate alter and any are as asc assertion at authorization before begin between both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone ",Va={backslashEscapes:!1,hashComments:!1,spaceAfterDashes:!1,slashComments:!1,doubleQuotedStrings:!1,doubleDollarQuotedStrings:!1,unquotedBitLiterals:!1,treatBitsAsBytes:!1,charSetCasts:!1,plsqlQuotingMechanism:!1,operatorChars:"*+-%<>!=&|~^/",specialVar:"?",identifierQuotes:'"',caseInsensitiveIdentifiers:!1,words:gr(wr,yr)};function ll(n,t,u,o){let h={};for(let _ in Va)h[_]=(n.hasOwnProperty(_)?n:Va)[_];return t&&(h.words=gr(t,u||"",o)),h}function kr(n){return new Zr(t=>{var u;let{next:o}=t;if(t.advance(),ba(o,Fa)){for(;ba(t.next,Fa);)t.advance();t.acceptToken(Un)}else if(o==36&&n.doubleDollarQuotedStrings){let h=Ka(t,"");t.next==36&&(t.advance(),rl(t,h),t.acceptToken(Sa))}else if(o==39||o==34&&n.doubleQuotedStrings)ga(t,o,n.backslashEscapes),t.acceptToken(Sa);else if(o==35&&n.hashComments||o==47&&t.next==47&&n.slashComments)ir(t),t.acceptToken(rr);else if(o==45&&t.next==45&&(!n.spaceAfterDashes||t.peek(1)==32))ir(t),t.acceptToken(rr);else if(o==47&&t.next==42){t.advance();for(let h=1;;){let _=t.next;if(t.next<0)break;if(t.advance(),_==42&&t.next==47){if(h--,t.advance(),!h)break}else _==47&&t.next==42&&(h++,t.advance())}t.acceptToken(Ln)}else if((o==101||o==69)&&t.next==39)t.advance(),ga(t,39,!0),t.acceptToken(Sa);else if((o==110||o==78)&&t.next==39&&n.charSetCasts)t.advance(),ga(t,39,n.backslashEscapes),t.acceptToken(Sa);else if(o==95&&n.charSetCasts)for(let h=0;;h++){if(t.next==39&&h>1){t.advance(),ga(t,39,n.backslashEscapes),t.acceptToken(Sa);break}if(!Ma(t.next))break;t.advance()}else if(n.plsqlQuotingMechanism&&(o==113||o==81)&&t.next==39&&t.peek(1)>0&&!ba(t.peek(1),Fa)){let h=t.peek(1);t.advance(2),sl(t,h),t.acceptToken(Sa)}else if(ba(o,n.identifierQuotes)){const h=o==91?93:o;ga(t,h,!1),t.acceptToken($n)}else if(o==40)t.acceptToken(An);else if(o==41)t.acceptToken(Mn);else if(o==123)t.acceptToken(Kn);else if(o==125)t.acceptToken(Vn);else if(o==91)t.acceptToken(Jn);else if(o==93)t.acceptToken(Xn);else if(o==59)t.acceptToken(Wn);else if(n.unquotedBitLiterals&&o==48&&t.next==98)t.advance(),lr(t),t.acceptToken(nr);else if((o==98||o==66)&&(t.next==39||t.next==34)){const h=t.next;t.advance(),n.treatBitsAsBytes?(ga(t,h,n.backslashEscapes),t.acceptToken(el)):(lr(t,h),t.acceptToken(nr))}else if(o==48&&(t.next==120||t.next==88)||(o==120||o==88)&&t.next==39){let h=t.next==39;for(t.advance();al(t.next);)t.advance();h&&t.next==39&&t.advance(),t.acceptToken(Ba)}else if(o==46&&t.next>=48&&t.next<=57)or(t,!0),t.acceptToken(Ba);else if(o==46)t.acceptToken(Zn);else if(o>=48&&o<=57)or(t,!1),t.acceptToken(Ba);else if(ba(o,n.operatorChars)){for(;ba(t.next,n.operatorChars);)t.advance();t.acceptToken(Hn)}else if(ba(o,n.specialVar))t.next==o&&t.advance(),nl(t),t.acceptToken(Yn);else if(o==58||o==44)t.acceptToken(Gn);else if(Ma(o)){let h=Ka(t,String.fromCharCode(o));t.acceptToken(t.next==46||t.peek(-h.length-1)==46?sr:(u=n.words[h.toLowerCase()])!==null&&u!==void 0?u:sr)}})}const xr=kr(Va),ol=Hr.deserialize({version:14,states:"%vQ]QQOOO#wQRO'#DSO$OQQO'#CwO%eQQO'#CxO%lQQO'#CyO%sQQO'#CzOOQQ'#DS'#DSOOQQ'#C}'#C}O'UQRO'#C{OOQQ'#Cv'#CvOOQQ'#C|'#C|Q]QQOOQOQQOOO'`QQO'#DOO(xQRO,59cO)PQQO,59cO)UQQO'#DSOOQQ,59d,59dO)cQQO,59dOOQQ,59e,59eO)jQQO,59eOOQQ,59f,59fO)qQQO,59fOOQQ-E6{-E6{OOQQ,59b,59bOOQQ-E6z-E6zOOQQ,59j,59jOOQQ-E6|-E6|O+VQRO1G.}O+^QQO,59cOOQQ1G/O1G/OOOQQ1G/P1G/POOQQ1G/Q1G/QP+kQQO'#C}O+rQQO1G.}O)PQQO,59cO,PQQO'#Cw",stateData:",[~OtOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O^]ORvXSvXTvXUvXVvXXvXZvX]vX_vX`vXavXbvXcvXdvXevXfvXgvXhvX~OsvX~P!jOa_Ob_Oc_O~ORUOSUOTUOUUOVROXSOZTO^tO_UO`UOa`Ob`Oc`OdUOeUOfUOgUOhUO~OWaO~P$ZOYcO~P$ZO[eO~P$ZORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUOgUOhUO~O]hOsoX~P%zOajObjOcjO~O^]ORkaSkaTkaUkaVkaXkaZka]ka_ka`kaakabkackadkaekafkagkahka~Oska~P'kO^]O~OWvXYvX[vX~P!jOWnO~P$ZOYoO~P$ZO[pO~P$ZO^]ORkiSkiTkiUkiVkiXkiZki]ki_ki`kiakibkickidkiekifkigkihki~Oski~P)xOWkaYka[ka~P'kO]hO~P$ZOWkiYki[ki~P)xOasObsOcsO~O",goto:"#hwPPPPPPPPPPPPPPPPPPPPPPPPPPx||||!Y!^!d!xPPP#[TYOZeUORSTWZbdfqT[OZQZORiZSWOZQbRQdSQfTZgWbdfqQ^PWk^lmrQl_Qm`RrseVORSTWZbdfq",nodeNames:"⚠ LineComment BlockComment String Number Bool Null ( ) { } [ ] ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Bits Bytes Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement",maxTerm:38,nodeProps:[["isolate",-4,1,2,3,19,""]],skippedNodes:[0,1,2],repeatNodeCount:3,tokenData:"RORO",tokenizers:[0,xr],topRules:{Script:[0,25]},tokenPrec:0});function Ja(n){let t=n.cursor().moveTo(n.from,-1);for(;/Comment/.test(t.name);)t.moveTo(t.from,-1);return t.node}function Ca(n,t){let u=n.sliceString(t.from,t.to),o=/^([`'"\[])(.*)([`'"\]])$/.exec(u);return o?o[2]:u}function za(n){return n&&(n.name=="Identifier"||n.name=="QuotedIdentifier")}function il(n,t){if(t.name=="CompositeIdentifier"){let u=[];for(let o=t.firstChild;o;o=o.nextSibling)za(o)&&u.push(Ca(n,o));return u}return[Ca(n,t)]}function dr(n,t){for(let u=[];;){if(!t||t.name!=".")return u;let o=Ja(t);if(!za(o))return u;u.unshift(Ca(n,o)),t=Ja(o)}}function dl(n,t){let u=Gr(n).resolveInner(t,-1),o=vl(n.doc,u);return u.name=="Identifier"||u.name=="QuotedIdentifier"||u.name=="Keyword"?{from:u.from,quoted:u.name=="QuotedIdentifier"?n.doc.sliceString(u.from,u.from+1):null,parents:dr(n.doc,Ja(u)),aliases:o}:u.name=="."?{from:t,quoted:null,parents:dr(n.doc,u),aliases:o}:{from:t,quoted:null,parents:[],empty:!0,aliases:o}}const cl=new Set("where group having order union intersect except all distinct limit offset fetch for".split(" "));function vl(n,t){let u;for(let h=t;!u;h=h.parent){if(!h)return null;h.name=="Statement"&&(u=h)}let o=null;for(let h=u.firstChild,_=!1,P=null;h;h=h.nextSibling){let x=h.name=="Keyword"?n.sliceString(h.from,h.to).toLowerCase():null,R=null;if(!_)_=x=="from";else if(x=="as"&&P&&za(h.nextSibling))R=Ca(n,h.nextSibling);else{if(x&&cl.has(x))break;P&&za(h)&&(R=Ca(n,h))}R&&(o||(o=Object.create(null)),o[R]=il(n,P)),P=/Identifier$/.test(h.name)?h:null}return o}function ul(n,t,u){return u.map(o=>({...o,label:o.label[0]==n?o.label:n+o.label+t,apply:void 0}))}const fl=/^\w*$/,pl=/^[`'"\[]?\w*[`'"\]]?$/;function cr(n){return n.self&&typeof n.self.label=="string"}class Xa{constructor(t,u){this.idQuote=t,this.idCaseInsensitive=u,this.list=[],this.children=void 0}child(t){let u=this.children||(this.children=Object.create(null)),o=u[t];return o||(t&&!this.list.some(h=>h.label==t)&&this.list.push(vr(t,"type",this.idQuote,this.idCaseInsensitive)),u[t]=new Xa(this.idQuote,this.idCaseInsensitive))}maybeChild(t){return this.children?this.children[t]:null}addCompletion(t){let u=this.list.findIndex(o=>o.label==t.label);u>-1?this.list[u]=t:this.list.push(t)}addCompletions(t){for(let u of t)this.addCompletion(typeof u=="string"?vr(u,"property",this.idQuote,this.idCaseInsensitive):u)}addNamespace(t){Array.isArray(t)?this.addCompletions(t):cr(t)?this.addNamespace(t.children):this.addNamespaceObject(t)}addNamespaceObject(t){for(let u of Object.keys(t)){let o=t[u],h=null,_=u.replace(/\\?\./g,x=>x=="."?"\0":x).split("\0"),P=this;cr(o)&&(h=o.self,o=o.children);for(let x=0;x<_.length;x++)h&&x==_.length-1&&P.addCompletion(h),P=P.child(_[x].replace(/\\\./g,"."));P.addNamespace(o)}}}function vr(n,t,u,o){return new RegExp("^[a-z_][a-z_\\d]*$",o?"i":"").test(n)?{label:n,type:t}:{label:n,type:t,apply:u+n+Sr(u)}}function Sr(n){return n==="["?"]":n}function ml(n,t,u,o,h,_){var P;let x=((P=_==null?void 0:_.spec.identifierQuotes)===null||P===void 0?void 0:P[0])||'"',R=new Xa(x,!!(_!=null&&_.spec.caseInsensitiveIdentifiers)),M=h?R.child(h):null;return R.addNamespace(n),t&&(M||R).addCompletions(t),u&&R.addCompletions(u),M&&R.addCompletions(M.list),o&&R.addCompletions((M||R).child(o).list),ee=>{let{parents:F,from:U,quoted:ve,empty:G,aliases:de}=dl(ee.state,ee.pos);if(G&&!ee.explicit)return null;de&&F.length==1&&(F=de[F[0]]||F);let S=R;for(let re of F){for(;!S.children||!S.children[re];)if(S==R&&M)S=M;else if(S==M&&o)S=S.child(o);else return null;let ae=S.maybeChild(re);if(!ae)return null;S=ae}let Y=S.list;if(S==R&&de&&(Y=Y.concat(Object.keys(de).map(re=>({label:re,type:"constant"})))),ve){let re=ve[0],ae=Sr(re),pe=ee.state.sliceDoc(ee.pos,ee.pos+1)==ae;return{from:U,to:pe?ee.pos+1:void 0,options:ul(re,ae,Y),validFor:pl}}else return{from:U,options:Y,validFor:fl}}}function _l(n){return n==br?"type":n==hr?"keyword":"variable"}function hl(n,t,u){let o=Object.keys(n).map(h=>u(t?h.toUpperCase():h,_l(n[h])));return Mr(["QuotedIdentifier","String","LineComment","BlockComment","."],Kr(o))}let bl=ol.configure({props:[Vr.add({Statement:Jr()}),Xr.add({Statement(n,t){return{from:Math.min(n.from+100,t.doc.lineAt(n.from).to),to:n.to}},BlockComment(n){return{from:n.from+2,to:n.to-2}}}),Wr({Keyword:ft.keyword,Type:ft.typeName,Builtin:ft.standard(ft.name),Bits:ft.number,Bytes:ft.string,Bool:ft.bool,Null:ft.null,Number:ft.number,String:ft.string,Identifier:ft.name,QuotedIdentifier:ft.special(ft.string),SpecialVar:ft.special(ft.name),LineComment:ft.lineComment,BlockComment:ft.blockComment,Operator:ft.operator,"Semi Punctuation":ft.punctuation,"( )":ft.paren,"{ }":ft.brace,"[ ]":ft.squareBracket})]});class Na{constructor(t,u,o){this.dialect=t,this.language=u,this.spec=o}get extension(){return this.language.extension}configureLanguage(t,u){return new Na(this.dialect,this.language.configure(t,u),this.spec)}static define(t){let u=ll(t,t.keywords,t.types,t.builtin),o=Ar.define({name:"sql",parser:bl.configure({tokenizers:[{from:xr,to:kr(u)}]}),languageData:{commentTokens:{line:"--",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"`"]}}});return new Na(u,o,t)}}function gl(n,t){return{label:n,type:t,boost:-1}}function yl(n,t=!1,u){return hl(n.dialect.words,t,u||gl)}function wl(n){return n.schema?ml(n.schema,n.tables,n.schemas,n.defaultTable,n.defaultSchema,n.dialect||Wa):()=>null}function kl(n){return n.schema?(n.dialect||Wa).language.data.of({autocomplete:wl(n)}):[]}function xl(n={}){let t=n.dialect||Wa;return new Fr(t.language,[kl(n),t.language.data.of({autocomplete:yl(t,n.upperCaseKeywords,n.keywordCompletion)})])}const Wa=Na.define({}),Sl=Na.define({keywords:wr+"abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual",types:yr+"bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 unsigned signed real",builtin:"auth backup bail changes clone databases dbinfo dump echo eqp explain fullschema headers help import imposter indexes iotrace lint load log mode nullvalue once print prompt quit restore save scanstats separator shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width",operatorChars:"*+-%<>!=&|/~",identifierQuotes:'`"',specialVar:"@:?$"});var Ol=c('<div class="sql-editor-wrap svelte-392xt8"></div>');function Cl(n,t){ea(t,!0);let u=wt(t,"placeholder",3,""),o=wt(t,"schema",19,()=>({})),h,_,P=N(!1);function x(){return document.documentElement.dataset.theme==="dark"||document.documentElement.dataset.theme!=="light"&&window.matchMedia("(prefers-color-scheme: dark)").matches}function R(){const F=[xl({dialect:Sl,schema:o()}),$r(),es.of([...ts,as,{key:"Mod-Enter",run:()=>{var U;return(U=t.onExecute)==null||U.call(t),!0}}]),La.updateListener.of(U=>{if(U.docChanged){const ve=U.state.doc.toString();t.onchange(ve)}}),La.theme({"&":{fontSize:"13px",maxHeight:"300px"},".cm-scroller":{overflow:"auto",fontFamily:"var(--font-mono)"},".cm-content":{minHeight:"100px",padding:"8px 0"},"&.cm-focused":{outline:"none"}})];return u()&&F.push(rs(u())),e(P)?F.push(ss):F.push(ns(ls)),F}function M(){_&&_.destroy(),_=new La({state:Yr.create({doc:t.value,extensions:R()}),parent:h})}Lr(()=>{a(P,x(),!0),M();const F=new MutationObserver(()=>{const U=x();if(U!==e(P)){a(P,U,!0);const ve=(_==null?void 0:_.state.doc.toString())??t.value;M(),ve!==t.value&&(_==null||_.dispatch({changes:{from:0,to:_.state.doc.length,insert:ve}}))}});return F.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>{F.disconnect(),_==null||_.destroy()}}),Br(()=>{_==null||_.destroy()}),Ot(()=>{_&&t.value!==_.state.doc.toString()&&_.dispatch({changes:{from:0,to:_.state.doc.length,insert:t.value}})});var ee=Ol();ja(ee,F=>h=F,()=>h),l(n,ee),ta()}var Nl=c('<div class="table-sql__target svelte-1syrthj"><span class="table-sql__target-label svelte-1syrthj"> </span> <code class="svelte-1syrthj"> </code></div>'),Il=c('<div><button type="button" class="table-sql__result-open svelte-1syrthj"><span> </span></button> <button type="button" class="table-sql__result-close svelte-1syrthj">×</button></div>'),Pl=c('<span class="table-sql__result-error svelte-1syrthj"> </span>'),El=c("<span> </span>"),Tl=c('<pre class="table-sql__error-block svelte-1syrthj"> </pre>'),Rl=c('<div class="table-sql__empty svelte-1syrthj">Query returned no rows.</div>'),zl=c('<div class="table-sql__result-panel svelte-1syrthj"><div class="table-sql__result-meta svelte-1syrthj"><!></div> <!></div>'),Dl=c('<div class="table-sql__result-tabs svelte-1syrthj"></div> <!>',1),jl=c('<div class="table-sql__empty svelte-1syrthj">Run a query against <code> </code> to inspect rows, joins, or aggregates for this target.</div>'),ql=c('<div class="table-sql svelte-1syrthj"><div class="table-sql__toolbar svelte-1syrthj"><div class="table-sql__target svelte-1syrthj"><span class="table-sql__target-label svelte-1syrthj">Database</span> <code class="svelte-1syrthj"> </code></div> <!> <!> <span class="table-sql__shortcut svelte-1syrthj"></span></div> <!> <!></div>');function Ql(n,t){var ke;ea(t,!0);const u=()=>pa(qt,"$schemaStore",o),[o,h]=Ia();let _=N(""),P=N(!1),x=N(nt([])),R=N(0),M=N(0),ee=A(()=>u().schema[t.tableName]),F=A(()=>(()=>{const Z={},q=u().schema;for(const[Q,be]of Object.entries(q)){const ze=be.fields;Z[Q]=ze?Object.keys(ze):[]}return Z})()),U=A(()=>{var Z;return(Z=e(ee))!=null&&Z.dynamic?"Per-tenant DB":"Single DB"}),ve=A(()=>{var Z,q,Q;return((Q=(q=(Z=e(ee))==null?void 0:Z.instanceDiscovery)==null?void 0:q.targetLabel)==null?void 0:Q.trim())||"Target"}),G=A(()=>t.instanceId||"Not selected");function de(Z){return`SELECT * FROM "${Z}" LIMIT 100;`}Ot(()=>{a(_,de(t.tableName),!0)}),Ot(()=>{Object.keys(u().schema).length===0&&qt.loadSchema({silent:!0})});async function S(){if(e(_).trim()){a(P,!0);try{const Z=await pt.fetch("data/sql",{method:"POST",body:{namespace:t.namespace,id:t.instanceId||void 0,sql:e(_).trim()}}),q=(Z.columns??[]).map(Q=>({key:Q,label:Q,type:"text",editable:!1}));a(M,e(M)+1),a(x,[...e(x),{id:e(M),sql:e(_).trim(),columns:q,rows:Z.rows??[],rowCount:Z.rowCount??0,time:Z.time??0}],!0),a(R,e(x).length-1)}catch(Z){const q=Z instanceof Error?Z.message:"Query failed";lt(q),a(M,e(M)+1),a(x,[...e(x),{id:e(M),sql:e(_).trim(),columns:[],rows:[],rowCount:0,time:0,error:q}],!0),a(R,e(x).length-1)}finally{a(P,!1)}}}function Y(Z){const q=e(x).filter((Q,be)=>be!==Z);e(R)>Z?a(R,e(R)-1):e(R)===Z&&a(R,Math.min(Z,Math.max(0,q.length-1)),!0),a(x,q,!0)}var re=ql(),ae=s(re),pe=s(ae),T=d(s(pe),2),W=s(T,!0);r(T),r(pe);var k=d(pe,2);{var j=Z=>{var q=Nl(),Q=s(q),be=s(Q,!0);r(Q);var ze=d(Q,2),ge=s(ze,!0);r(ze),r(q),y(()=>{I(be,e(ve)),I(ge,e(G))}),l(Z,q)};D(k,Z=>{var q;(q=e(ee))!=null&&q.dynamic&&Z(j)})}var $=d(k,2);{let Z=A(()=>e(P)||!e(_).trim());ct($,{variant:"primary",size:"sm",onclick:S,get loading(){return e(P)},get disabled(){return e(Z)},children:(q,Q)=>{Ae();var be=Qe();y(()=>I(be,e(P)?"Executing...":"Execute")),l(q,be)},$$slots:{default:!0}})}var fe=d($,2);fe.textContent=`${(ke=navigator.platform)!=null&&ke.includes("Mac")?"⌘":"Ctrl"}+Enter`,r(ae);var b=d(ae,2);{let Z=A(()=>`SELECT * FROM "${t.tableName}" LIMIT 100;`);Cl(b,{get value(){return e(_)},onchange:q=>a(_,q,!0),onExecute:S,get placeholder(){return e(Z)},get schema(){return e(F)}})}var L=d(b,2);{var me=Z=>{var q=Dl(),Q=Ve(q);tt(Q,23,()=>e(x),ge=>ge.id,(ge,Me,De)=>{var Re=Il();let We;var at=s(Re),oe=s(at),w=s(oe);r(oe),r(at);var z=d(at,2);r(Re),y(()=>{We=Tt(Re,1,"table-sql__result-tab svelte-1syrthj",null,We,{"table-sql__result-tab--active":e(De)===e(R)}),I(w,`Result ${e(De)+1}`),Ce(z,"aria-label",`Close result ${e(De)+1}`)}),ie("click",at,()=>a(R,e(De),!0)),ie("click",z,Fe=>{Fe.stopPropagation(),Y(e(De))}),l(ge,Re)}),r(Q);var be=d(Q,2);{var ze=ge=>{var Me=zl(),De=s(Me),Re=s(De);{var We=xe=>{var m=Pl(),B=s(m,!0);r(m),y(()=>I(B,e(x)[e(R)].error)),l(xe,m)},at=xe=>{var m=El(),B=s(m);r(m),y(()=>I(B,`${e(x)[e(R)].rowCount??""} row${e(x)[e(R)].rowCount===1?"":"s"} · ${e(x)[e(R)].time??""}ms`)),l(xe,m)};D(Re,xe=>{e(x)[e(R)].error?xe(We):xe(at,!1)})}r(De);var oe=d(De,2);{var w=xe=>{var m=Tl(),B=s(m,!0);r(m),y(()=>I(B,e(x)[e(R)].sql)),l(xe,m)},z=xe=>{var m=Rl();l(xe,m)},Fe=xe=>{_r(xe,{get columns(){return e(x)[e(R)].columns},get rows(){return e(x)[e(R)].rows},readonly:!0})};D(oe,xe=>{e(x)[e(R)].error?xe(w):e(x)[e(R)].rows.length===0?xe(z,1):xe(Fe,!1)})}r(Me),l(ge,Me)};D(be,ge=>{e(x)[e(R)]&&ge(ze)})}l(Z,q)},Se=Z=>{var q=jl(),Q=d(s(q)),be=s(Q,!0);r(Q),Ae(),r(q),y(()=>I(be,t.tableName)),l(Z,q)};D(L,Z=>{e(x).length>0?Z(me):Z(Se,!1)})}r(re),y(()=>I(W,e(U))),l(n,re),ta(),h()}la(["click"]);var Ul=c('<div class="index-error svelte-v6rf4z"> </div>'),Ll=c('<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>'),Bl=c('<div class="index-empty svelte-v6rf4z">No indexes defined.</div>'),Fl=c('<span class="index-unique svelte-v6rf4z">UNIQUE</span>'),Al=c('<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>'),Ml=c('<div class="index-row svelte-v6rf4z"><code class="index-fields svelte-v6rf4z"> </code> <!> <!></div>'),Kl=c('<div class="index-editor svelte-v6rf4z"><div class="index-editor__header svelte-v6rf4z"><span class="index-editor__title svelte-v6rf4z"> </span> <!></div> <!> <!></div>');function Vl(n,t){ea(t,!0);let u=wt(t,"indexes",19,()=>[]),o=wt(t,"availableFields",19,()=>[]),h=wt(t,"readonly",3,!1),_=N(!1),P=N(""),x=N(!1),R=N("");function M(){var k;const T=e(P).split(",").map(j=>j.trim()).filter(Boolean);if(T.length===0){a(R,"At least one field is required.");return}const W=T.filter(j=>!o().includes(j));if(W.length>0){a(R,`Unknown field(s): ${W.join(", ")}`);return}(k=t.onadd)==null||k.call(t,{fields:T,unique:e(x)||void 0}),a(P,""),a(x,!1),a(R,""),a(_,!1)}var ee=Kl(),F=s(ee),U=s(F),ve=s(U);r(U);var G=d(U,2);{var de=T=>{ct(T,{variant:"secondary",size:"sm",onclick:()=>a(_,!e(_)),children:(W,k)=>{Ae();var j=Qe();y(()=>I(j,e(_)?"Cancel":"Add Index")),l(W,j)},$$slots:{default:!0}})};D(G,T=>{h()||T(de)})}r(F);var S=d(F,2);{var Y=T=>{var W=Ll(),k=s(W);{var j=ke=>{var Z=Ul(),q=s(Z,!0);r(Z),y(()=>I(q,e(R))),l(ke,Z)};D(k,ke=>{e(R)&&ke(j)})}var $=d(k,2),fe=s($);is(fe,{placeholder:"field1, field2",label:"Fields (comma-separated)",get value(){return e(P)},set value(ke){a(P,ke,!0)}}),r($);var b=d($,2),L=s(b);ds(L,{label:"Unique index",get checked(){return e(x)},set checked(ke){a(x,ke,!0)}}),r(b);var me=d(b,2),Se=s(me);ct(Se,{variant:"primary",size:"sm",onclick:M,children:(ke,Z)=>{Ae();var q=Qe("Add");l(ke,q)},$$slots:{default:!0}}),r(me),r(W),l(T,W)};D(S,T=>{e(_)&&T(Y)})}var re=d(S,2);{var ae=T=>{var W=Bl();l(T,W)},pe=T=>{var W=Yt(),k=Ve(W);tt(k,17,u,Bt,(j,$,fe)=>{var b=Ml(),L=s(b),me=s(L,!0);r(L);var Se=d(L,2);{var ke=Q=>{var be=Fl();l(Q,be)};D(Se,Q=>{e($).unique&&Q(ke)})}var Z=d(Se,2);{var q=Q=>{var be=Al();ie("click",be,()=>{var ze;return(ze=t.ondelete)==null?void 0:ze.call(t,fe)}),l(Q,be)};D(Z,Q=>{h()||Q(q)})}r(b),y(Q=>I(me,Q),[()=>e($).fields.join(", ")]),l(j,b)}),l(T,W)};D(re,T=>{u().length===0&&!e(_)?T(ae):T(pe,!1)})}r(ee),y(()=>I(ve,`Indexes (${u().length??""})`)),l(n,ee),ta()}la(["click"]);var Jl=c('<div class="fts-empty svelte-974m0i">No string/text fields available for FTS.</div>'),Xl=c('<span class="fts-active svelte-974m0i">active</span>'),Wl=c('<label class="fts-item svelte-974m0i"><input type="checkbox"/> <code class="svelte-974m0i"> </code> <!></label>'),Zl=c('<div class="fts-list svelte-974m0i"></div>'),Hl=c('<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 Gl(n,t){ea(t,!0);let u=wt(t,"ftsFields",19,()=>[]),o=wt(t,"availableFields",19,()=>[]),h=wt(t,"readonly",3,!1),_=N(nt({})),P=N(!1);Ot(()=>{const S={};for(const Y of o())S[Y]=u().includes(Y);a(_,S,!0),a(P,!1)});function x(S){e(_)[S]=!e(_)[S],a(P,!0)}function R(){var Y;const S=Object.entries(e(_)).filter(([,re])=>re).map(([re])=>re);(Y=t.onsave)==null||Y.call(t,S),a(P,!1)}var M=Hl(),ee=s(M),F=d(s(ee),2);{var U=S=>{ct(S,{variant:"primary",size:"sm",onclick:R,children:(Y,re)=>{Ae();var ae=Qe("Save FTS");l(Y,ae)},$$slots:{default:!0}})};D(F,S=>{!h()&&e(P)&&S(U)})}r(ee);var ve=d(ee,2);{var G=S=>{var Y=Jl();l(S,Y)},de=S=>{var Y=Zl();tt(Y,20,o,re=>re,(re,ae)=>{var pe=Wl(),T=s(pe);Ft(T);var W=d(T,2),k=s(W,!0);r(W);var j=d(W,2);{var $=b=>{var L=Xl();l(b,L)},fe=A(()=>u().includes(ae));D(j,b=>{e(fe)&&b($)})}r(pe),y(()=>{Ta(T,e(_)[ae]??!1),T.disabled=h(),I(k,ae)}),ie("change",T,()=>x(ae)),l(re,pe)}),r(Y),l(S,Y)};D(ve,S=>{o().length===0?S(G):S(de,!1)})}r(M),l(n,M),ta()}la(["change"]);var Yl=c('<div class="schema-empty svelte-aw0zhs">Loading schema...</div>'),$l=c('<div class="schema-empty svelte-aw0zhs"> </div>'),eo=c('<div class="readonly-banner svelte-aw0zhs">Schema editing requires dev mode. Viewing in read-only mode.</div>'),to=c('<div class="rename-inline svelte-aw0zhs"><input class="rename-input svelte-aw0zhs" placeholder="new_name"/> <!> <!></div>'),ao=c("<!> <!>",1),ro=c('<div class="schema-note svelte-aw0zhs"> </div>'),so=c('<div class="schema-actions svelte-aw0zhs"><!></div> <!>',1),no=c('<!> <!> <div class="schema-namespace svelte-aw0zhs">Namespace: <code class="svelte-aw0zhs"> </code></div> <!>',1),lo=c('<div class="schema-tab svelte-aw0zhs"><!></div> <!> <!> <!>',1);function oo(n,t){ea(t,!0);const u=()=>pa(mr,"$devInfoStore",h),o=()=>pa(qt,"$schemaStore",h),[h,_]=Ia();let P=N(null),x=N("columns"),R=A(()=>u().devMode),M=N(!1),ee=N("create"),F=N(""),U=N(nt({type:"string"})),ve=N(!1),G=N(""),de=N(!1),S=N(!1),Y=N("");const re=[{id:"columns",label:"Columns"},{id:"indexes",label:"Indexes"},{id:"fts",label:"FTS"}];Ot(()=>{const m=o();t.tableName&&m.schema[t.tableName]?a(P,m.schema[t.tableName],!0):a(P,null)});let ae=A(()=>{var m;return((m=e(P))==null?void 0:m.fields)??{}}),pe=A(()=>{var m;return((m=e(P))==null?void 0:m.indexes)??[]}),T=A(()=>{var m;return((m=e(P))==null?void 0:m.fts)??[]}),W=A(()=>{var m;return((m=e(P))==null?void 0:m.namespace)??"default"}),k=A(()=>{var m;return(m=e(P))!=null&&m.dynamic?"Table rename is unavailable for per-tenant databases because each tenant instance has its own physical database.":""}),j=A(()=>Object.entries(e(ae)).filter(([,m])=>m.type==="string"||m.type==="text").map(([m])=>m));function $(){a(ee,"create"),a(F,""),a(U,{type:"string"},!0),a(M,!0)}function fe(m,B){a(ee,"edit"),a(F,m,!0),a(U,{...B},!0),a(M,!0)}function b(m){a(G,m,!0),a(ve,!0)}function L(m){return JSON.stringify({fields:m.fields,unique:m.unique===!0?!0:void 0})}function me(m,B){return JSON.stringify(m??null)===JSON.stringify(B)}function Se(m,B){return m.length!==B.length?!1:m.every((_e,je)=>L(_e)===L(B[je]))}function ke(m,B){if(m.length!==B.length)return!1;const _e=[...m].sort(),je=[...B].sort();return _e.every((Ct,Qt)=>Ct===je[Qt])}async function Z(m,B){try{e(ee)==="create"?(await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/columns`,{method:"POST",body:{dbKey:e(W),columnName:m,fieldDef:B}}),Et(`Column "${m}" added`)):(await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/columns/${m}`,{method:"PUT",body:{dbKey:e(W),fieldDef:B}}),Et(`Column "${m}" updated`)),await qt.waitForSchema(_e=>{const je=_e[t.tableName];return!!(je&&me(je.fields[m],B))})}catch(_e){lt(_e instanceof Error?_e.message:"Failed to save column")}}async function q(){a(ve,!1);try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/columns/${e(G)}`,{method:"DELETE",body:{dbKey:e(W)}}),Et(`Column "${e(G)}" deleted`),await qt.waitForSchema(m=>{const B=m[t.tableName];return!!(B&&!(e(G)in B.fields))})}catch(m){lt(m instanceof Error?m.message:"Failed to delete column")}}async function Q(m){try{const B=[...e(pe),m];await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/indexes`,{method:"POST",body:{dbKey:e(W),indexDef:m}}),Et("Index added"),await qt.waitForSchema(_e=>{const je=_e[t.tableName];return!!(je&&Se(je.indexes??[],B))})}catch(B){lt(B instanceof Error?B.message:"Failed to add index")}}async function be(m){try{const B=e(pe).filter((_e,je)=>je!==m);await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/indexes/${m}`,{method:"DELETE",body:{dbKey:e(W)}}),Et("Index removed"),await qt.waitForSchema(_e=>{const je=_e[t.tableName];return!!(je&&Se(je.indexes??[],B))})}catch(B){lt(B instanceof Error?B.message:"Failed to remove index")}}async function ze(m){try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/fts`,{method:"PUT",body:{dbKey:e(W),fields:m}}),Et("FTS configuration updated"),await qt.waitForSchema(B=>{const _e=B[t.tableName];return!!(_e&&ke(_e.fts??[],m))})}catch(B){lt(B instanceof Error?B.message:"Failed to update FTS")}}async function ge(){a(de,!1);try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}`,{method:"DELETE",body:{dbKey:e(W)}}),Et(`Table "${t.tableName}" deleted`),await qt.waitForSchema(m=>!(t.tableName in m)),Aa(`${Ra}/database/tables`)}catch(m){lt(m instanceof Error?m.message:"Failed to delete table")}}async function Me(){const m=e(Y).trim();if(m)try{await pt.schemaMutation(`schema/tables/${encodeURIComponent(t.tableName)}/rename`,{method:"PUT",body:{dbKey:e(W),newName:m}}),Et(`Table renamed to "${m}"`),await qt.waitForSchema(B=>!(t.tableName in B)&&!!B[m],{timeoutMessage:`Table rename to "${m}" did not propagate in time.`}),await qt.waitForTableReady(m,{namespace:e(W)}),Aa(`${Ra}/database/tables/${encodeURIComponent(m)}`)}catch(B){lt(B instanceof Error?B.message:"Failed to rename table")}finally{a(S,!1)}}var De=lo(),Re=Ve(De),We=s(Re);{var at=m=>{var B=Yl();l(m,B)},oe=m=>{var B=$l(),_e=s(B);r(B),y(()=>I(_e,`Table "${t.tableName??""}" not found.`)),l(m,B)},w=m=>{var B=no(),_e=Ve(B);{var je=Ee=>{var st=eo();l(Ee,st)};D(_e,Ee=>{e(R)||Ee(je)})}var Ct=d(_e,2);{var Qt=Ee=>{var st=so(),ot=Ve(st),Ne=s(ot);{var f=J=>{var X=to(),V=s(X);Ft(V);var se=d(V,2);ct(se,{variant:"primary",size:"sm",onclick:Me,children:(Ie,Ue)=>{Ae();var Ut=Qe("Rename");l(Ie,Ut)},$$slots:{default:!0}});var he=d(se,2);ct(he,{variant:"secondary",size:"sm",onclick:()=>a(S,!1),children:(Ie,Ue)=>{Ae();var Ut=Qe("Cancel");l(Ie,Ut)},$$slots:{default:!0}}),r(X),ie("keydown",V,Ie=>Ie.key==="Enter"&&Me()),$t(V,()=>e(Y),Ie=>a(Y,Ie)),l(J,X)},g=J=>{var X=ao(),V=Ve(X);{let he=A(()=>!!e(k));ct(V,{variant:"secondary",size:"sm",get disabled(){return e(he)},onclick:()=>{a(S,!0),a(Y,t.tableName,!0)},children:(Ie,Ue)=>{Ae();var Ut=Qe("Rename");l(Ie,Ut)},$$slots:{default:!0}})}var se=d(V,2);ct(se,{variant:"danger",size:"sm",onclick:()=>a(de,!0),children:(he,Ie)=>{Ae();var Ue=Qe("Delete Table");l(he,Ue)},$$slots:{default:!0}}),l(J,X)};D(Ne,J=>{e(S)?J(f):J(g,!1)})}r(ot);var K=d(ot,2);{var E=J=>{var X=ro(),V=s(X,!0);r(X),y(()=>I(V,e(k))),l(J,X)};D(K,J=>{e(k)&&J(E)})}l(Ee,st)};D(Ct,Ee=>{e(R)&&Ee(Qt)})}var Rt=d(Ct,2),Jt=d(s(Rt)),Xt=s(Jt,!0);r(Jt),r(Rt);var Ke=d(Rt,2);os(Ke,{get tabs(){return re},get activeTab(){return e(x)},set activeTab(Ee){a(x,Ee,!0)},children:(Ee,st)=>{var ot=Yt(),Ne=Ve(ot);{var f=E=>{{let J=A(()=>!e(R));Qr(E,{get fields(){return e(ae)},get readonly(){return e(J)},onaddclick:$,oneditclick:fe,ondeleteclick:b})}},g=E=>{{let J=A(()=>Object.keys(e(ae))),X=A(()=>!e(R));Vl(E,{get indexes(){return e(pe)},get availableFields(){return e(J)},get readonly(){return e(X)},onadd:Q,ondelete:be})}},K=E=>{{let J=A(()=>!e(R));Gl(E,{get ftsFields(){return e(T)},get availableFields(){return e(j)},get readonly(){return e(J)},onsave:ze})}};D(Ne,E=>{e(x)==="columns"?E(f):e(x)==="indexes"?E(g,1):e(x)==="fts"&&E(K,2)})}l(Ee,ot)},$$slots:{default:!0}}),y(()=>I(Xt,e(W))),l(m,B)};D(We,m=>{o().loading?m(at):e(P)?m(w,!1):m(oe,1)})}r(Re);var z=d(Re,2);{let m=A(()=>Object.keys(e(ae)));qr(z,{get mode(){return e(ee)},get columnName(){return e(F)},get field(){return e(U)},get existingColumns(){return e(m)},onsave:Z,get open(){return e(M)},set open(B){a(M,B,!0)}})}var Fe=d(z,2);tr(Fe,{title:"Delete Column",get message(){return`Are you sure you want to delete column "${e(G)??""}"? This action will modify edgebase.config.ts.`},confirmLabel:"Delete",confirmVariant:"danger",onconfirm:q,get open(){return e(ve)},set open(m){a(ve,m,!0)}});var xe=d(Fe,2);tr(xe,{title:"Delete Table",get message(){return`Are you sure you want to delete table "${t.tableName??""}"? This will remove it from edgebase.config.ts.`},confirmLabel:"Delete Table",confirmVariant:"danger",onconfirm:ge,get open(){return e(de)},set open(m){a(de,m,!0)}}),l(n,De),ta(),_()}la(["keydown"]);var io=c("<option> </option>"),co=c('<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>'),vo=c('<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>'),uo=c('<div class="rt-result-error svelte-wqn9yg"> </div>'),fo=c('<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>'),po=c('<div class="rt-results"><h3 class="rt-results-title svelte-wqn9yg">Results</h3> <div class="rt-results-grid svelte-wqn9yg"></div></div>'),mo=c('<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 _o(n,t){ea(t,!0);const u=[];let o=N(nt([])),h=N(!1),_=N("shared"),P=N("anonymous"),x=N(""),R=N(`{
|