@lunora/studio 1.0.0-alpha.90 → 1.0.0-alpha.91
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/dist/index.js +1 -1
- package/dist/mount.js +1 -1
- package/dist/packem_chunks/AdvisorHealthPanel.js +1 -1
- package/dist/packem_chunks/ApiTab.js +1 -1
- package/dist/packem_chunks/AuditPanel.js +1 -1
- package/dist/packem_chunks/DeploymentHealthPanel.js +1 -1
- package/dist/packem_chunks/ExportImportPanel.js +1 -1
- package/dist/packem_chunks/FileBrowser.js +1 -1
- package/dist/packem_chunks/FunctionRunner.js +1 -1
- package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
- package/dist/packem_chunks/HealthPanel.js +1 -1
- package/dist/packem_chunks/InsightsPanel.js +1 -1
- package/dist/packem_chunks/LogsPanel.js +1 -1
- package/dist/packem_chunks/MailPanel.js +1 -1
- package/dist/packem_chunks/MetricsPanel.js +1 -1
- package/dist/packem_chunks/NotificationsPanel.js +1 -1
- package/dist/packem_chunks/PitrPanel.js +1 -1
- package/dist/packem_chunks/SchemaViewer.js +1 -1
- package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
- package/dist/packem_chunks/SettingsPanel.js +1 -1
- package/dist/packem_chunks/SqlEditorPanel.js +1 -1
- package/dist/packem_chunks/TableEditor.js +1 -1
- package/dist/packem_chunks/agents-panel.js +1 -1
- package/dist/packem_chunks/analytics-panel.js +1 -1
- package/dist/packem_chunks/auth-audit-panel.js +1 -1
- package/dist/packem_chunks/auth-config-panel.js +1 -1
- package/dist/packem_chunks/auth-sessions-panel.js +1 -1
- package/dist/packem_chunks/containers-panel.js +1 -1
- package/dist/packem_chunks/dashboards-panel.js +1 -1
- package/dist/packem_chunks/fanout-panel.js +1 -1
- package/dist/packem_chunks/flags-panel.js +1 -1
- package/dist/packem_chunks/issues-panel.js +1 -1
- package/dist/packem_chunks/kv-browser.js +1 -1
- package/dist/packem_chunks/log-drains-panel.js +1 -1
- package/dist/packem_chunks/migrations-route.js +1 -1
- package/dist/packem_chunks/organizations-panel.js +1 -1
- package/dist/packem_chunks/payments-panel.js +1 -1
- package/dist/packem_chunks/permissions-panel.js +1 -1
- package/dist/packem_chunks/queues-panel.js +1 -1
- package/dist/packem_chunks/rls-panel.js +1 -1
- package/dist/packem_chunks/schedule-panel.js +1 -1
- package/dist/packem_chunks/storage-rules-panel.js +1 -1
- package/dist/packem_chunks/subscriptions-panel.js +1 -1
- package/dist/packem_chunks/sync-client-panel.js +1 -1
- package/dist/packem_chunks/traces-panel.js +1 -1
- package/dist/packem_chunks/users-panel.js +1 -1
- package/dist/packem_chunks/vector-browser.js +1 -1
- package/dist/packem_chunks/workflows-panel.js +1 -1
- package/dist/packem_shared/{ApiDocsPanel-DLMeLZ5-.js → ApiDocsPanel-Cu_QmzO0.js} +1 -1
- package/dist/packem_shared/{ApiReferencePanel-9q8BbJl-.js → ApiReferencePanel-DuIU1P8B.js} +1 -1
- package/dist/packem_shared/{CommandPalette--SQwfTW1.js → CommandPalette-mPR8-vIm.js} +1 -1
- package/dist/packem_shared/DataBrowser-BPRDaOHx.js +1 -0
- package/dist/packem_shared/{GlobalDataBrowser-DpkjHfDg.js → GlobalDataBrowser-CeA8bDjX.js} +1 -1
- package/dist/packem_shared/HomePanel-DLP1nQdC.js +1 -0
- package/dist/packem_shared/{MigrationsPanel-dygzHUvg.js → MigrationsPanel-dm_M75mR.js} +1 -1
- package/dist/packem_shared/{OpenRpcReferencePanel-qOZcWXMs.js → OpenRpcReferencePanel-DXeffPFr.js} +1 -1
- package/dist/packem_shared/{ScheduledJobs-D8kBZWBu.js → ScheduledJobs-DDJG9Je7.js} +1 -1
- package/dist/packem_shared/{Studio-forQt-PC.js → Studio-BYg65qWq.js} +1 -1
- package/dist/packem_shared/{StudioApp-B1AWsBzi.js → StudioApp-D0UOg0a_.js} +1 -1
- package/dist/packem_shared/{advisor-view-Pa8HLtBv.js → advisor-view-Coipc04R.js} +1 -1
- package/dist/packem_shared/{data-grid-DcxyIXwG.js → data-grid-Ci4-tZkk.js} +1 -1
- package/dist/packem_shared/{error-alert-t6cpEi0z.js → error-alert--Ie7ofJ0.js} +1 -1
- package/dist/packem_shared/{grid-features-jnrD0SpX.js → grid-features-Db_BNYRo.js} +3 -3
- package/dist/packem_shared/{home-panel-CeeqqV0z.js → home-panel-BtxdqXDe.js} +1 -1
- package/dist/packem_shared/internal-zkEvTqy8.js +2 -0
- package/dist/packem_shared/{recording-client-DRAZEmzE.js → recording-client-DtUxwVNY.js} +1 -1
- package/dist/packem_shared/{reference-view-DnYYWr7I.js → reference-view-DncEStdm.js} +1 -1
- package/dist/packem_shared/{result-chart-DzJOVsaw.js → result-chart-Gywg9DOk.js} +1 -1
- package/dist/packem_shared/{schema-diagram-cg-bz_VL.js → schema-diagram-DTRaCp6Y.js} +1 -1
- package/dist/packem_shared/{studio-BtC7WPbz.js → studio-Drf4en3j.js} +1 -1
- package/dist/packem_shared/{table-list-sidebar-D9Bd4qgi.js → table-list-sidebar-fz0m_4I4.js} +1 -1
- package/dist/packem_shared/{use-admin-query-QJ-ibl5u.js → use-admin-query-CnnyWJXM.js} +1 -1
- package/dist/packem_shared/{use-async-submit-q3ymBJkD.js → use-async-submit-BFIMhRqh.js} +1 -1
- package/dist/packem_shared/{use-auth-config-BObBpdsi.js → use-auth-config-0EnNCdLu.js} +1 -1
- package/dist/packem_shared/{use-sql-assistant-C6dl2_Ty.js → use-sql-assistant-Dtw55kKM.js} +1 -1
- package/dist/packem_shared/wire-codec-BUrWLklj.js +1 -0
- package/dist/standalone/{chunk-ZPLWCC4I.js → chunk-2NX5QU44.js} +1 -1
- package/dist/standalone/{chunk-WB5IUUUU.js → chunk-2QWHVQ6P.js} +1 -1
- package/dist/standalone/{chunk-WLZ7YPBH.js → chunk-3FIN5PH4.js} +4 -4
- package/dist/standalone/{chunk-XZSGE5ST.js → chunk-3XQMTTW2.js} +1 -1
- package/dist/standalone/{chunk-SHMNA6UL.js → chunk-4D7XIQ5Q.js} +1 -1
- package/dist/standalone/{chunk-SF4MF2FT.js → chunk-4PLB4ZNI.js} +1 -1
- package/dist/standalone/{chunk-PB7FNRDB.js → chunk-4VEAVSAZ.js} +1 -1
- package/dist/standalone/{chunk-3AV5CV6K.js → chunk-6QKJ6JPJ.js} +1 -1
- package/dist/standalone/{chunk-IC64YIX5.js → chunk-6WWX4FJB.js} +1 -1
- package/dist/standalone/{chunk-62EKHKTS.js → chunk-6XKVQES4.js} +1 -1
- package/dist/standalone/{chunk-C3HXK3A5.js → chunk-7QMX3D4D.js} +1 -1
- package/dist/standalone/{chunk-ULCZDGWQ.js → chunk-7YXDJXNL.js} +1 -1
- package/dist/standalone/{chunk-DMCYISRF.js → chunk-A7647FJE.js} +1 -1
- package/dist/standalone/{chunk-D3HXVA33.js → chunk-AQT6EPZT.js} +1 -1
- package/dist/standalone/{chunk-QXXIJAD5.js → chunk-AREBQI6D.js} +1 -1
- package/dist/standalone/{chunk-TBBJPPZ3.js → chunk-BCGEI67L.js} +1 -1
- package/dist/standalone/chunk-BENJFRZL.js +1 -0
- package/dist/standalone/{chunk-LQAKPCFX.js → chunk-BYIS2KWZ.js} +1 -1
- package/dist/standalone/{chunk-QYIOW7CD.js → chunk-C6GLTSPO.js} +1 -1
- package/dist/standalone/{chunk-JFW3YNVQ.js → chunk-CMP33R3N.js} +1 -1
- package/dist/standalone/{chunk-5ZXDB6LB.js → chunk-CRHCAN4W.js} +1 -1
- package/dist/standalone/{chunk-BRQMMGOS.js → chunk-CUAGAM2B.js} +1 -1
- package/dist/standalone/chunk-DBWOWJYT.js +11 -0
- package/dist/standalone/{chunk-QV6KV4SD.js → chunk-ESEEVSPC.js} +1 -1
- package/dist/standalone/chunk-F3TP5L34.js +1 -0
- package/dist/standalone/{chunk-6MKDYZ7A.js → chunk-FBNRATNR.js} +1 -1
- package/dist/standalone/{chunk-LAHYLAT4.js → chunk-HKG5I64M.js} +1 -1
- package/dist/standalone/{chunk-GKSRVABT.js → chunk-HWOD25QD.js} +1 -1
- package/dist/standalone/{chunk-XR7RBXKA.js → chunk-IBVBIKUI.js} +1 -1
- package/dist/standalone/{chunk-CTNB2KIA.js → chunk-IGCNMZSB.js} +1 -1
- package/dist/standalone/{chunk-IAKPXGTQ.js → chunk-IUUSMC2R.js} +1 -1
- package/dist/standalone/{chunk-OG4N2XHD.js → chunk-IUYFXK4X.js} +9 -9
- package/dist/standalone/{chunk-E7TB4USI.js → chunk-IZ3ISXSM.js} +1 -1
- package/dist/standalone/{chunk-BUTBQGUU.js → chunk-J3FR2XBV.js} +1 -1
- package/dist/standalone/{chunk-QP7IQOKF.js → chunk-JWXKUXYA.js} +1 -1
- package/dist/standalone/{chunk-OG2AMGOC.js → chunk-KUFAOKU3.js} +1 -1
- package/dist/standalone/{chunk-PM37X2V3.js → chunk-LDYOCGEG.js} +1 -1
- package/dist/standalone/{chunk-CT6ZDXLL.js → chunk-LUU4SDHW.js} +1 -1
- package/dist/standalone/chunk-LYQY7L72.js +4 -0
- package/dist/standalone/{chunk-GSKOAKQ2.js → chunk-LZH7RDRV.js} +1 -1
- package/dist/standalone/{chunk-LJISXTZJ.js → chunk-ML5IJMH6.js} +1 -1
- package/dist/standalone/{chunk-DG7YINFM.js → chunk-N233NOIN.js} +1 -1
- package/dist/standalone/{chunk-QWBRD6PX.js → chunk-NH3VWHCL.js} +1 -1
- package/dist/standalone/{chunk-ARP36PTE.js → chunk-NNRFDPSD.js} +1 -1
- package/dist/standalone/{chunk-AQX2QFCN.js → chunk-O2QUUHGF.js} +1 -1
- package/dist/standalone/{chunk-U6TNNM5U.js → chunk-Q2Q7FR3R.js} +1 -1
- package/dist/standalone/{chunk-Z7G74IH4.js → chunk-Q4AI6JRP.js} +1 -1
- package/dist/standalone/{chunk-AZAGCJVI.js → chunk-QGA2HITH.js} +1 -1
- package/dist/standalone/{chunk-6VTLIGVX.js → chunk-QWJ4HKPY.js} +1 -1
- package/dist/standalone/{chunk-Y7JXGNXD.js → chunk-QZGTDXV5.js} +1 -1
- package/dist/standalone/{chunk-24JLZ2Z5.js → chunk-RHPP74O4.js} +1 -1
- package/dist/standalone/{chunk-AUQKJYHL.js → chunk-RKGCSNAW.js} +1 -1
- package/dist/standalone/{chunk-X665E2HU.js → chunk-RMN2JN4S.js} +1 -1
- package/dist/standalone/{chunk-S4ILMYP5.js → chunk-RNOSWEMO.js} +1 -1
- package/dist/standalone/{chunk-MHAXZQVO.js → chunk-ULYM26IH.js} +1 -1
- package/dist/standalone/{chunk-PGC523I2.js → chunk-WOEGO5M6.js} +1 -1
- package/dist/standalone/{chunk-67DKQC23.js → chunk-XDEDCAYN.js} +1 -1
- package/dist/standalone/{chunk-YOUKADZH.js → chunk-XGMZESWC.js} +1 -1
- package/dist/standalone/{chunk-T6OAYQTX.js → chunk-XKKP2VFZ.js} +1 -1
- package/dist/standalone/{chunk-SP5SBO2W.js → chunk-XTEWLG3J.js} +2 -2
- package/dist/standalone/{chunk-BL6NO3U3.js → chunk-XXXMUP6L.js} +1 -1
- package/dist/standalone/{chunk-LJIFMW67.js → chunk-ZKTWHB7Q.js} +1 -1
- package/dist/standalone/{chunk-53KJRSHE.js → chunk-ZNMZQXWN.js} +1 -1
- package/dist/standalone/{chunk-YU5CI2FD.js → chunk-ZWSTXAG3.js} +1 -1
- package/dist/standalone/studio.js +1 -1
- package/package.json +1 -1
- package/dist/packem_shared/DataBrowser-CZZ_WkJ-.js +0 -1
- package/dist/packem_shared/HomePanel-3baDsDBU.js +0 -1
- package/dist/packem_shared/internal-BSIsQVC6.js +0 -2
- package/dist/standalone/chunk-4COKHD2C.js +0 -1
- package/dist/standalone/chunk-V2U5CL3S.js +0 -11
- package/dist/standalone/chunk-VFQDHG7I.js +0 -4
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{c as L}from"react/compiler-runtime";import{useNavigate as Qe}from"@tanstack/react-router";import{useState as Ee,useEffect as Fe,lazy as nt,Suspense as at}from"react";import{g as Ye}from"./badge-BbuuAio7.js";import{u as Ze,c as K}from"./card-CIDGUN6K.js";import{E as rt}from"./empty-state-Cg7t_8qu.js";import{N as _e}from"./use-admin-query-
|
|
1
|
+
import{c as L}from"react/compiler-runtime";import{useNavigate as Qe}from"@tanstack/react-router";import{useState as Ee,useEffect as Fe,lazy as nt,Suspense as at}from"react";import{g as Ye}from"./badge-BbuuAio7.js";import{u as Ze,c as K}from"./card-CIDGUN6K.js";import{E as rt}from"./empty-state-Cg7t_8qu.js";import{N as _e}from"./use-admin-query-CnnyWJXM.js";import{useT as I}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Ne}from"./ADMIN_FUNCTIONS-4aE59aDq.js";import{f as Se,d as st,g as ot,r as lt,c as it,l as ct}from"./internal-zkEvTqy8.js";import{c as Xe}from"./utils-bhneXptQ.js";import{deriveInsights as dt}from"./DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{useLunora as et}from"@lunora/react";import{jsx as r,jsxs as h}from"react/jsx-runtime";import{u as We}from"./button-BkCrNcAs.js";const mt=ot(Ne.studioFeatures),tt={analytics:!0,auth:!0,containers:!0,flags:!0,kv:!0,mail:!0,notifications:!0,payments:!0,queues:!0,scheduler:!0,storage:!0,vectors:!0,workflows:!0},ut=t=>{if(t===null||typeof t!="object")return tt;const e=t,a=n=>typeof e[n]=="boolean"?e[n]:!0;return{analytics:a("analytics"),auth:a("auth"),containers:a("containers"),flags:a("flags"),kv:a("kv"),mail:a("mail"),notifications:a("notifications"),payments:a("payments"),queues:a("queues"),scheduler:a("scheduler"),storage:a("storage"),vectors:a("vectors"),workflows:a("workflows")}},pt=()=>{const t=L(3),e=et(),[a,n]=Ee(tt);let s,o;return t[0]!==e?(s=()=>{Se((async()=>{try{n(ut(await e.query(mt,{},st(""))))}catch{}})())},o=[e],t[0]=e,t[1]=s,t[2]=o):(s=t[1],o=t[2]),Fe(s,o),a},ft=()=>{const t=L(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=r("svg",{"aria-hidden":"true",className:"size-4 text-muted-foreground",fill:"none",stroke:"currentColor",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"m9 6 6 6-6 6",strokeLinecap:"round",strokeLinejoin:"round"})}),t[0]=e):e=t[0],e},ht=t=>{const e=L(24),{group:a}=t,n=I(),s=Qe();let o;e[0]!==a.tab||e[1]!==s?(o=()=>{Se(s({to:`/${a.tab}`}))},e[0]=a.tab,e[1]=s,e[2]=o):o=e[2];const l=o,i=a.bindings.length;let c;e[3]!==a.label?(c=r("span",{className:"text-sm font-medium text-foreground",children:a.label}),e[3]=a.label,e[4]=c):c=e[4];let u;e[5]===Symbol.for("react.memo_cache_sentinel")?(u=r(ft,{}),e[5]=u):u=e[5];let d;e[6]!==c?(d=h("div",{className:"flex items-center justify-between",children:[c,u]}),e[6]=c,e[7]=d):d=e[7];let p;e[8]!==i||e[9]!==n?(p=i===1?n("1 binding"):n("{count} bindings",{count:i}),e[8]=i,e[9]=n,e[10]=p):p=e[10];let m;e[11]!==p?(m=r("span",{className:"text-xs text-muted-foreground",children:p}),e[11]=p,e[12]=m):m=e[12];let f;e[13]!==i||e[14]!==a.bindings?(f=i>0&&r("div",{className:"flex flex-wrap gap-1.5",children:a.bindings.map(bt)}),e[13]=i,e[14]=a.bindings,e[15]=f):f=e[15];let g;e[16]!==d||e[17]!==m||e[18]!==f?(g=h(Ze,{className:"flex flex-col gap-2 py-4",children:[d,m,f]}),e[16]=d,e[17]=m,e[18]=f,e[19]=g):g=e[19];let x;return e[20]!==a.testId||e[21]!==l||e[22]!==g?(x=r(K,{className:"cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/40","data-testid":a.testId,onClick:l,children:g}),e[20]=a.testId,e[21]=l,e[22]=g,e[23]=x):x=e[23],x},Ue=["kv","files","vectors"],gt=(t,e)=>[...t.filter(a=>a.tab!==e.tab),e].toSorted((a,n)=>Ue.indexOf(a.tab)-Ue.indexOf(n.tab)),xt=()=>{const t=L(19),e=et(),a=pt(),n=I();let s;t[0]===Symbol.for("react.memo_cache_sentinel")?(s=[],t[0]=s):s=t[0];const[o,l]=Ee(s);let i,c;if(t[1]!==e||t[2]!==a.kv||t[3]!==a.storage||t[4]!==a.vectors||t[5]!==n?(i=()=>{const g={cancelled:!1},x=[{enabled:a.kv,label:n("KV Namespaces"),load:async()=>(await e.listKvNamespaces()).map(yt),tab:"kv",testId:"home-binding-kv"},{enabled:a.storage,label:n("R2 Buckets"),load:()=>e.listStorageBuckets(),tab:"files",testId:"home-binding-r2"},{enabled:a.vectors,label:n("Vectorize Indexes"),load:async()=>(await e.listVectorIndexes()).map(vt),tab:"vectors",testId:"home-binding-vectors"}];for(const b of x)b.enabled&&Se((async()=>{try{const y=await b.load();if(!g.cancelled){const S={bindings:y,label:b.label,tab:b.tab,testId:b.testId};l(M=>gt(M,S))}}catch{}})());return()=>{g.cancelled=!0}},c=[e,a.kv,a.storage,a.vectors,n],t[1]=e,t[2]=a.kv,t[3]=a.storage,t[4]=a.vectors,t[5]=n,t[6]=i,t[7]=c):(i=t[6],c=t[7]),Fe(i,c),o.length===0)return null;let u;t[8]!==n?(u=n("Bindings"),t[8]=n,t[9]=u):u=t[9];let d;t[10]!==u?(d=r("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:u}),t[10]=u,t[11]=d):d=t[11];let p;t[12]!==o?(p=o.map(Nt),t[12]=o,t[13]=p):p=t[13];let m;t[14]!==p?(m=r("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:p}),t[14]=p,t[15]=m):m=t[15];let f;return t[16]!==d||t[17]!==m?(f=h("section",{className:"flex flex-col gap-3","data-testid":"home-bindings",children:[d,m]}),t[16]=d,t[17]=m,t[18]=f):f=t[18],f};function bt(t){return r(Ye,{variant:"secondary",children:t},t)}function yt(t){return t.binding}function vt(t){return t.name}function Nt(t){return r(ht,{group:t},t.tab)}const _t=[{name:"lunora_list_functions",summary:"list every query, mutation, and action with its path"},{name:"lunora_list_tables",summary:"list the schema's tables"},{name:"lunora_get_function_schema",summary:"read a function's argument JSON Schema before calling it"},{name:"lunora_run_query",summary:"run a read-only query"},{name:"lunora_run_mutation",summary:"run a mutation — writes; only when LUNORA_MCP_ALLOW_WRITES is set"},{name:"lunora_run_action",summary:"run an action — writes/effects; only when LUNORA_MCP_ALLOW_WRITES is set"}],St=t=>JSON.stringify({mcpServers:{lunora:{args:["-y","@lunora/mcp"],command:"npx",env:{LUNORA_ADMIN_TOKEN:"<your-admin-token>",LUNORA_URL:t}}}},null,2),kt=t=>{const e=_t.map(a=>`- ${a.name} — ${a.summary}`).join(`
|
|
2
2
|
`);return[`You have a Lunora MCP server connected to the deployment at ${t}.`,"It exposes this backend's functions and schema so you can inspect and operate it:",e,"",`Start by calling lunora_list_functions and lunora_list_tables to learn what exists, then lunora_get_function_schema before any run call. The full HTTP API is also documented at ${t}/_lunora/admin/openapi (that endpoint needs the same admin token the MCP server is configured with).`].join(`
|
|
3
3
|
`)},wt=1500,$t=()=>{const t=L(35),e=I();let a;t[0]===Symbol.for("react.memo_cache_sentinel")?(a=lt(),t[0]=a):a=t[0];const n=a,[s,o]=Ee(null);let l,i;t[1]!==s?(l=()=>{if(s===null)return;const A=globalThis.setTimeout(()=>{o(null)},wt);return()=>{globalThis.clearTimeout(A)}},i=[s],t[1]=s,t[2]=l,t[3]=i):(l=t[2],i=t[3]),Fe(l,i);let c;t[4]===Symbol.for("react.memo_cache_sentinel")?(c=(A,C)=>{it(C)&&o(A)},t[4]=c):c=t[4];const u=c;let d;t[5]===Symbol.for("react.memo_cache_sentinel")?(d=()=>{u("config",St(n))},t[5]=d):d=t[5];const p=d;let m;t[6]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{u("prompt",kt(n))},t[6]=m):m=t[6];const f=m;let g;t[7]!==e?(g=e("Connect an AI agent"),t[7]=e,t[8]=g):g=t[8];let x;t[9]!==g?(x=r("span",{className:"text-sm font-medium text-foreground",children:g}),t[9]=g,t[10]=x):x=t[10];let b;t[11]!==e?(b=e("Drive this deployment from an AI agent over the Model Context Protocol — it can list functions and tables, read schemas, and run read-only queries. Writes stay off unless you opt in."),t[11]=e,t[12]=b):b=t[12];let y;t[13]!==b?(y=r("span",{className:"text-xs text-muted-foreground",children:b}),t[13]=b,t[14]=y):y=t[14];let S;t[15]!==x||t[16]!==y?(S=h("div",{className:"flex flex-col gap-1.5 p-4",children:[x,y]}),t[15]=x,t[16]=y,t[17]=S):S=t[17];let M;t[18]===Symbol.for("react.memo_cache_sentinel")?(M=r("code",{className:"font-mono text-xs text-muted-foreground","data-testid":"home-connect-agent-command",children:"npx -y @lunora/mcp"}),t[18]=M):M=t[18];let k;t[19]!==s||t[20]!==e?(k=e(s==="config"?"Copied":"Copy MCP config"),t[19]=s,t[20]=e,t[21]=k):k=t[21];let v;t[22]!==k?(v=r(We,{"data-testid":"home-connect-agent-copy-config",onClick:p,size:"xs",variant:"outline",children:k}),t[22]=k,t[23]=v):v=t[23];let w;t[24]!==s||t[25]!==e?(w=e(s==="prompt"?"Copied":"Copy agent prompt"),t[24]=s,t[25]=e,t[26]=w):w=t[26];let $;t[27]!==w?($=r(We,{"data-testid":"home-connect-agent-copy-prompt",onClick:f,size:"xs",variant:"outline",children:w}),t[27]=w,t[28]=$):$=t[28];let N;t[29]!==v||t[30]!==$?(N=h("div",{className:"flex flex-col gap-3 border-t border-border bg-muted/50 px-4 py-3",children:[M,h("div",{className:"flex flex-wrap gap-2",children:[v,$]})]}),t[29]=v,t[30]=$,t[31]=N):N=t[31];let _;return t[32]!==S||t[33]!==N?(_=h(K,{className:"gap-0 py-0","data-testid":"home-connect-agent",children:[S,N]}),t[32]=S,t[33]=N,t[34]=_):_=t[34],_},Lt=nt(()=>import("../packem_chunks/sparkline.js").then(t=>({default:t.Sparkline}))),Be=t=>{if(t<1e3)return`${String(Math.round(t))}ms`;const e=t>=1e4?0:1;return`${(t/1e3).toFixed(e)}s`},Mt=(t,e)=>{const a=Math.max(0,Math.round((e-t)/1e3));if(a<60)return`${String(a)}s ago`;const n=Math.round(a/60);if(n<60)return`${String(n)}m ago`;const s=Math.round(n/60);return s<24?`${String(s)}h ago`:`${String(Math.round(s/24))}d ago`},He=(t,e)=>{if(t===void 0||t.length===0)return[];const a=new Map;for(const n of t)a.set(n.bucketMs,(a.get(n.bucketMs)??0)+n[e]);return[...a.entries()].toSorted(([n],[s])=>n-s).map(([,n])=>n)},Je=(t,e=!0)=>{if(t.length<4)return null;const a=Math.floor(t.length/2),n=t.slice(0,a).reduce((l,i)=>l+i,0),s=t.slice(a).reduce((l,i)=>l+i,0);if(n===0)return null;const o=(s-n)/n*100;return{positive:e?o>=0:o<=0,text:`${o>=0?"+":""}${o.toFixed(1)}%`}},Oe=t=>{const e=L(24),{delta:a,footer:n,label:s,trend:o,unit:l,value:i}=t,c=I();let u;e[0]!==s?(u=r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s}),e[0]=s,e[1]=u):u=e[1];let d;e[2]!==i?(d=r("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:i}),e[2]=i,e[3]=d):d=e[3];let p;e[4]!==l?(p=l!==void 0&&r("span",{className:"text-xs text-muted-foreground",children:l}),e[4]=l,e[5]=p):p=e[5];let m;e[6]!==d||e[7]!==p?(m=h("span",{className:"flex items-baseline gap-1.5",children:[d,p]}),e[6]=d,e[7]=p,e[8]=m):m=e[8];let f;e[9]!==o?(f=o!==void 0&&r(at,{fallback:r("div",{"aria-hidden":"true",className:"h-8 w-28"}),children:r(Lt,{data:o})}),e[9]=o,e[10]=f):f=e[10];let g;e[11]!==m||e[12]!==f?(g=h("div",{className:"flex items-center justify-between gap-3",children:[m,f]}),e[11]=m,e[12]=f,e[13]=g):g=e[13];let x;e[14]!==u||e[15]!==g?(x=h("div",{className:"flex flex-col gap-2.5 p-4",children:[u,g]}),e[14]=u,e[15]=g,e[16]=x):x=e[16];let b;e[17]!==a||e[18]!==n||e[19]!==c?(b=a==null?n!=null&&r("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:n}):h("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px]",children:[r("span",{className:Xe("font-semibold",a.positive?"text-success":"text-destructive"),children:a.text})," ",r("span",{className:"text-muted-foreground",children:c("vs. prev.")})]}),e[17]=a,e[18]=n,e[19]=c,e[20]=b):b=e[20];let y;return e[21]!==x||e[22]!==b?(y=h(K,{className:"justify-between gap-0 py-0",children:[x,b]}),e[21]=x,e[22]=b,e[23]=y):y=e[23],y},At=()=>{const t=L(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=r("svg",{"aria-hidden":"true",className:"size-3.5",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.8,viewBox:"0 0 24 24",children:r("path",{d:"m9 6 6 6-6 6"})}),t[0]=e):e=t[0],e},De=t=>{const e=L(7),{command:a,label:n}=t;let s;e[0]!==n?(s=r("div",{className:"p-4",children:r("span",{className:"text-sm font-medium text-foreground",children:n})}),e[0]=n,e[1]=s):s=e[1];let o;e[2]!==a?(o=r("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5",children:r("code",{className:"font-mono text-xs text-muted-foreground",children:a})}),e[2]=a,e[3]=o):o=e[3];let l;return e[4]!==s||e[5]!==o?(l=h(K,{className:"justify-between gap-0 py-0",children:[s,o]}),e[4]=s,e[5]=o,e[6]=l):l=e[6],l},Ge=t=>{const e=L(18),{count:a,onView:n,testId:s,title:o}=t,l=I();let i;e[0]!==o?(i=r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:o}),e[0]=o,e[1]=i):i=e[1];let c;e[2]!==a||e[3]!==l?(c=a===null?r("span",{className:"text-xs text-muted-foreground",children:l("No data yet")}):r(Ye,{variant:a>0?"destructive":"success",children:a>0?a:l("All clear")}),e[2]=a,e[3]=l,e[4]=c):c=e[4];let u;e[5]!==i||e[6]!==c?(u=h("div",{className:"flex items-start justify-between gap-2 p-4",children:[i,c]}),e[5]=i,e[6]=c,e[7]=u):u=e[7];let d;e[8]!==l?(d=l("View"),e[8]=l,e[9]=d):d=e[9];let p;e[10]===Symbol.for("react.memo_cache_sentinel")?(p=r(At,{}),e[10]=p):p=e[10];let m;e[11]!==n||e[12]!==d?(m=h("button",{className:"flex items-center gap-1 border-t border-border bg-muted/50 px-4 py-2.5 text-[12px] font-medium text-foreground outline-none transition-colors hover:bg-muted focus-visible:bg-muted",onClick:n,type:"button",children:[d,p]}),e[11]=n,e[12]=d,e[13]=m):m=e[13];let f;return e[14]!==u||e[15]!==m||e[16]!==s?(f=h(K,{className:"justify-between gap-0 py-0","data-testid":s,children:[u,m]}),e[14]=u,e[15]=m,e[16]=s,e[17]=f):f=e[17],f},Ct=t=>{const e=L(7),{functions:a}=t,n=I();let s;if(e[0]!==a||e[1]!==n){const o=[...a].toSorted(Ot).slice(0,5);let l;e[3]!==n?(l=n("Top functions"),e[3]=n,e[4]=l):l=e[4];let i;e[5]!==l?(i=r("div",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:l})}),e[5]=l,e[6]=i):i=e[6],s=h(K,{className:"gap-0 py-0","data-testid":"home-top-functions",children:[i,o.length===0?r("p",{className:"px-4 py-8 text-center text-xs text-muted-foreground",children:n("No functions called yet.")}):h("div",{className:"divide-y divide-border",children:[h("div",{className:"grid grid-cols-[1fr_auto_auto_auto] gap-4 px-4 py-1.5 font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:[r("span",{children:n("Function")}),r("span",{className:"text-end",children:n("Calls")}),r("span",{className:"w-12 text-end",children:n("Avg")}),r("span",{className:"w-8 text-end",children:n("Err")})]}),o.map(Rt)]})]}),e[0]=a,e[1]=n,e[2]=s}else s=e[2];return s},It=t=>{const e=L(26),{subs:a}=t,n=I();let s;e[0]!==n?(s=n("Live connections"),e[0]=n,e[1]=s):s=e[1];let o;e[2]!==s?(o=r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:s}),e[2]=s,e[3]=o):o=e[3];const l=a?.totalConnections??0;let i;e[4]!==l?(i=l.toLocaleString(),e[4]=l,e[5]=i):i=e[5];let c;e[6]!==i?(c=r("span",{className:"text-2xl font-semibold tabular-nums text-foreground",children:i}),e[6]=i,e[7]=c):c=e[7];let u;e[8]!==n?(u=n("sockets"),e[8]=n,e[9]=u):u=e[9];let d;e[10]!==u?(d=r("span",{className:"text-xs text-muted-foreground",children:u}),e[10]=u,e[11]=d):d=e[11];let p;e[12]!==c||e[13]!==d?(p=h("span",{className:"flex items-baseline gap-1.5",children:[c,d]}),e[12]=c,e[13]=d,e[14]=p):p=e[14];const m=a?.totalSubscriptions??0;let f;e[15]!==m?(f=m.toLocaleString(),e[15]=m,e[16]=f):f=e[16];let g;e[17]!==n?(g=n("active subscriptions"),e[17]=n,e[18]=g):g=e[18];let x;e[19]!==f||e[20]!==g?(x=h("span",{className:"text-[11px] text-muted-foreground",children:[f," ",g]}),e[19]=f,e[20]=g,e[21]=x):x=e[21];let b;return e[22]!==x||e[23]!==o||e[24]!==p?(b=r(K,{"data-testid":"home-live-connections",children:h(Ze,{className:"flex flex-col gap-2.5 py-4",children:[o,p,x]})}),e[22]=x,e[23]=o,e[24]=p,e[25]=b):b=e[25],b},jt=t=>{const e=L(7),{entries:a}=t,n=I();let s;if(e[0]!==a||e[1]!==n){const o=Date.now();let l;e[3]!==n?(l=n("Recent activity"),e[3]=n,e[4]=l):l=e[4];let i;e[5]!==l?(i=r("div",{className:"border-b border-border px-4 py-3",children:r("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:l})}),e[5]=l,e[6]=i):i=e[6],s=h(K,{className:"gap-0 py-0","data-testid":"home-recent-activity",children:[i,a.length===0?r("p",{className:"px-4 py-8 text-center text-xs text-muted-foreground",children:n("No recent activity.")}):r("ul",{className:"divide-y divide-border",children:a.slice(0,5).map(c=>h("li",{className:"flex items-center justify-between gap-3 px-4 py-2 text-[13px]",children:[h("span",{className:"flex min-w-0 items-center gap-2",children:[r("span",{"aria-hidden":"true",className:"size-1.5 shrink-0 rounded-full bg-muted-foreground/40"}),h("span",{className:"truncate text-foreground",children:[c.op,c.table!==void 0&&h("span",{className:"text-muted-foreground",children:[" · ",c.table,c.id===void 0?"":`#${c.id}`]})]})]}),r("span",{className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:Mt(c.ts,o)})]},c.seq))})]}),e[0]=a,e[1]=n,e[2]=s}else s=e[2];return s},Tt=t=>{const e=t.reduce((a,n)=>a+n.calls,0);return e===0?null:t.reduce((a,n)=>a+n.totalDurationMs,0)/e},Zt=t=>{const e=L(151),{initialShardKey:a}=t,n=I(),s=Qe(),o=a??"";let l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l={},e[0]=l):l=e[0];let i;e[1]!==o?(i={shardKey:o},e[1]=o,e[2]=i):i=e[2];const c=_e(Ne.getMetrics,l,i);let u;e[3]===Symbol.for("react.memo_cache_sentinel")?(u={},e[3]=u):u=e[3];let d;e[4]!==o?(d={shardKey:o},e[4]=o,e[5]=d):d=e[5];const p=_e(Ne.getFunctionStats,u,d);let m,f;e[6]===Symbol.for("react.memo_cache_sentinel")?(m={},f={shardKey:""},e[6]=m,e[7]=f):(m=e[6],f=e[7]);const g=_e(Ne.getSecurityAudit,m,f);let x;e[8]===Symbol.for("react.memo_cache_sentinel")?(x={},e[8]=x):x=e[8];let b;e[9]!==o?(b={shardKey:o},e[9]=o,e[10]=b):b=e[10];const y=_e(Ne.listSubscriptions,x,b);let S;e[11]===Symbol.for("react.memo_cache_sentinel")?(S={},e[11]=S):S=e[11];let M;e[12]!==o?(M={shardKey:o},e[12]=o,e[13]=M):M=e[13];const k=_e(Ne.getAuditLog,S,M),v=c.data??null;let w,$,N,_,A,C,P,j,T,z,D,B,O,R,E,F,V,W;if(e[14]!==k.data||e[15]!==g.data||e[16]!==v||e[17]!==c.data||e[18]!==s||e[19]!==p.data||e[20]!==y.data||e[21]!==n){_=Array.isArray(p.data?.functions)?p.data.functions:[],P=y.data??null;let Le;e[40]!==k.data?(Le=Array.isArray(k.data?.entries)?k.data.entries:[],e[40]=k.data,e[41]=Le):Le=e[41],$=Le,A=c.data===void 0||p.data===void 0?null:dt(v,_).length,C=Array.isArray(g.data?.findings)?g.data.findings.length:null;let Me;e[42]!==s?(Me=()=>{Se(s({to:"/security"}))},e[42]=s,e[43]=Me):Me=e[43],W=Me;let Ae;e[44]!==s?(Ae=()=>{Se(s({to:"/insights"}))},e[44]=s,e[45]=Ae):Ae=e[45],V=Ae;const Ce=He(v?.history,"calls"),Ie=He(v?.history,"errors"),Ve=Tt(_),je=Math.max(0,..._.map(qt)),q=v?.cache;let Te;e[46]!==q?(Te=q!=null&&q.hits+q.misses>0?Math.round(q.hits/(q.hits+q.misses)*100):null,e[46]=q,e[47]=Te):Te=e[47],N=Te,E="flex flex-col gap-6",F="lunora-home",D="grid gap-3 sm:grid-cols-2 xl:grid-cols-4",B="home-health";const qe=Je(Ce);let xe;e[48]!==n?(xe=n("Requests"),e[48]=n,e[49]=xe):xe=e[49];const Ke=v?.requests??0;let be;e[50]!==Ke?(be=Ke.toLocaleString(),e[50]=Ke,e[51]=be):be=e[51],e[52]!==Ce||e[53]!==qe||e[54]!==xe||e[55]!==be?(O=r(Oe,{delta:qe,label:xe,trend:Ce,value:be}),e[52]=Ce,e[53]=qe,e[54]=xe,e[55]=be,e[56]=O):O=e[56];const Pe=Je(Ie,!1);let ye;e[57]!==n?(ye=n("Errors"),e[57]=n,e[58]=ye):ye=e[58];const ze=v?.errors??0;let ve;e[59]!==ze?(ve=ze.toLocaleString(),e[59]=ze,e[60]=ve):ve=e[60],e[61]!==Ie||e[62]!==Pe||e[63]!==ye||e[64]!==ve?(R=r(Oe,{delta:Pe,label:ye,trend:Ie,value:ve}),e[61]=Ie,e[62]=Pe,e[63]=ye,e[64]=ve,e[65]=R):R=e[65],w=Oe,e[66]!==je||e[67]!==n?(j=je>0?`${n("max")} ${Be(je)}`:void 0,e[66]=je,e[67]=n,e[68]=j):j=e[68],e[69]!==n?(T=n("Avg latency"),e[69]=n,e[70]=T):T=e[70],z=Ve===null?"—":Be(Ve),e[14]=k.data,e[15]=g.data,e[16]=v,e[17]=c.data,e[18]=s,e[19]=p.data,e[20]=y.data,e[21]=n,e[22]=w,e[23]=$,e[24]=N,e[25]=_,e[26]=A,e[27]=C,e[28]=P,e[29]=j,e[30]=T,e[31]=z,e[32]=D,e[33]=B,e[34]=O,e[35]=R,e[36]=E,e[37]=F,e[38]=V,e[39]=W}else w=e[22],$=e[23],N=e[24],_=e[25],A=e[26],C=e[27],P=e[28],j=e[29],T=e[30],z=e[31],D=e[32],B=e[33],O=e[34],R=e[35],E=e[36],F=e[37],V=e[38],W=e[39];let U;e[71]!==w||e[72]!==j||e[73]!==T||e[74]!==z?(U=r(w,{footer:j,label:T,value:z}),e[71]=w,e[72]=j,e[73]=T,e[74]=z,e[75]=U):U=e[75];let H;e[76]!==N||e[77]!==n?(H=N===null?void 0:`${String(N)}% ${n("cache hit")}`,e[76]=N,e[77]=n,e[78]=H):H=e[78];let J;e[79]!==n?(J=n("Database size"),e[79]=n,e[80]=J):J=e[80];const Re=v?.databaseSize??null;let G;e[81]!==Re?(G=ct(Re),e[81]=Re,e[82]=G):G=e[82];let Q;e[83]!==H||e[84]!==J||e[85]!==G?(Q=r(Oe,{footer:H,label:J,value:G}),e[83]=H,e[84]=J,e[85]=G,e[86]=Q):Q=e[86];let Y;e[87]!==D||e[88]!==B||e[89]!==O||e[90]!==R||e[91]!==U||e[92]!==Q?(Y=h("div",{className:D,"data-testid":B,children:[O,R,U,Q]}),e[87]=D,e[88]=B,e[89]=O,e[90]=R,e[91]=U,e[92]=Q,e[93]=Y):Y=e[93];let ke;e[94]===Symbol.for("react.memo_cache_sentinel")?(ke=r(xt,{}),e[94]=ke):ke=e[94];let Z;e[95]!==_?(Z=r("div",{className:"lg:col-span-2",children:r(Ct,{functions:_})}),e[95]=_,e[96]=Z):Z=e[96];let X;e[97]!==P?(X=r(It,{subs:P}),e[97]=P,e[98]=X):X=e[98];let ee;e[99]!==$?(ee=r(jt,{entries:$}),e[99]=$,e[100]=ee):ee=e[100];let te;e[101]!==X||e[102]!==ee?(te=h("div",{className:"flex flex-col gap-3",children:[X,ee]}),e[101]=X,e[102]=ee,e[103]=te):te=e[103];let ne;e[104]!==Z||e[105]!==te?(ne=h("div",{className:"grid gap-3 lg:grid-cols-3",children:[Z,te]}),e[104]=Z,e[105]=te,e[106]=ne):ne=e[106];let ae;e[107]!==n?(ae=n("Advisors"),e[107]=n,e[108]=ae):ae=e[108];let re;e[109]!==ae?(re=r("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:ae}),e[109]=ae,e[110]=re):re=e[110];let se;e[111]!==A||e[112]!==C||e[113]!==n||e[114]!==V||e[115]!==W?(se=C===0&&A===0?r(rt,{description:n("No security or performance issues detected."),icon:h("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[r("path",{d:"M12 3 4 6v5c0 5 3.4 8.5 8 10 4.6-1.5 8-5 8-10V6l-8-3Z"}),r("path",{d:"m9 12 2 2 4-4"})]}),testId:"home-advisors-clear",title:n("No issues found")}):h("div",{className:"grid gap-3 sm:grid-cols-2",children:[r(Ge,{count:C,onView:W,testId:"home-security",title:n("Security findings")}),r(Ge,{count:A,onView:V,testId:"home-performance",title:n("Performance issues")})]}),e[111]=A,e[112]=C,e[113]=n,e[114]=V,e[115]=W,e[116]=se):se=e[116];let oe;e[117]!==re||e[118]!==se?(oe=h("section",{className:"flex flex-col gap-3","data-testid":"home-advisors",children:[re,se]}),e[117]=re,e[118]=se,e[119]=oe):oe=e[119];let le;e[120]!==n?(le=n("Get connected"),e[120]=n,e[121]=le):le=e[121];let ie;e[122]!==le?(ie=r("h2",{className:"text-sm font-semibold tracking-tight text-foreground",children:le}),e[122]=le,e[123]=ie):ie=e[123];let ce;e[124]!==n?(ce=n("Client SDK"),e[124]=n,e[125]=ce):ce=e[125];let de;e[126]!==ce?(de=r(De,{command:"npm i @lunora/client",label:ce}),e[126]=ce,e[127]=de):de=e[127];let me;e[128]!==n?(me=n("React"),e[128]=n,e[129]=me):me=e[129];let ue;e[130]!==me?(ue=r(De,{command:"npm i @lunora/react",label:me}),e[130]=me,e[131]=ue):ue=e[131];let pe;e[132]!==n?(pe=n("CLI"),e[132]=n,e[133]=pe):pe=e[133];let fe;e[134]!==pe?(fe=r(De,{command:"lunora dev",label:pe}),e[134]=pe,e[135]=fe):fe=e[135];let he;e[136]!==de||e[137]!==ue||e[138]!==fe?(he=h("div",{className:"grid gap-3 sm:grid-cols-3",children:[de,ue,fe]}),e[136]=de,e[137]=ue,e[138]=fe,e[139]=he):he=e[139];let we;e[140]===Symbol.for("react.memo_cache_sentinel")?(we=r($t,{}),e[140]=we):we=e[140];let ge;e[141]!==ie||e[142]!==he?(ge=h("section",{className:"flex flex-col gap-3","data-testid":"home-get-connected",children:[ie,he,we]}),e[141]=ie,e[142]=he,e[143]=ge):ge=e[143];let $e;return e[144]!==E||e[145]!==F||e[146]!==Y||e[147]!==ne||e[148]!==oe||e[149]!==ge?($e=h("div",{className:E,"data-testid":F,children:[Y,ke,ne,oe,ge]}),e[144]=E,e[145]=F,e[146]=Y,e[147]=ne,e[148]=oe,e[149]=ge,e[150]=$e):$e=e[150],$e};function Ot(t,e){return e.calls-t.calls}function Rt(t){return h("div",{className:"grid grid-cols-[1fr_auto_auto_auto] items-center gap-4 px-4 py-2 text-[13px]",children:[r("span",{className:"truncate font-mono text-xs text-foreground",children:t.path}),r("span",{className:"text-end tabular-nums",children:t.calls.toLocaleString()}),r("span",{className:"w-12 text-end tabular-nums text-muted-foreground",children:Be(t.calls>0?t.totalDurationMs/t.calls:0)}),r("span",{className:Xe("w-8 text-end tabular-nums",t.errors>0?"text-destructive":"text-muted-foreground"),children:t.errors})]},t.path)}function qt(t){return t.maxDurationMs}export{Zt as H,pt as S};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const c=(r,t,e,o,i)=>{switch(t){case"action":return r.action(e,o,i);case"mutation":return r.mutation(e,o,i);default:return r.query(e,o,i)}},l=r=>({__lunoraRef:r}),u=r=>{const t=r.trim();return t===""?{}:{shardKey:t}},f=r=>r instanceof Error?r.message:String(r),g=r=>{if(r===null||typeof r!="object"||!("code"in r))return;const{code:t}=r;return typeof t=="string"?t:void 0},y=r=>{if(r===null||typeof r!="object"||!("hint"in r))return;const{hint:t}=r;return typeof t=="string"?t:Array.isArray(t)?t.filter(e=>typeof e=="string").join(`
|
|
2
|
+
`):void 0},d=r=>{if(r===null||typeof r!="object"||!("docsUrl"in r))return;const t=r.docsUrl;if(typeof t=="string")try{const{protocol:e}=new URL(t);return e==="http:"||e==="https:"?t:void 0}catch{return}},a=r=>{if(r==null)return"—";if(r<1024)return`${r.toString()} B`;const t=["KB","MB","GB","TB"];let e=r/1024,o=0;for(;e>=1024&&o<t.length-1;)e/=1024,o+=1;return`${e.toFixed(1)} ${t[o]??"TB"}`},s=r=>{if(r==null)return"";switch(typeof r){case"bigint":case"boolean":case"number":return r.toString();case"string":return r;case"symbol":return r.toString();default:return r instanceof ArrayBuffer||ArrayBuffer.isView(r)?`<bytes: ${a(r.byteLength)}>`:JSON.stringify(r)}},p=(r,t)=>typeof t=="bigint"||t instanceof ArrayBuffer||ArrayBuffer.isView(t)?s(t):t,n=(r,t)=>{r.catch(e=>{})},h=r=>{if(r!==void 0&&r!=="")return r;const t=globalThis.location;return t?.origin!==void 0&&t.origin!==""?t.origin:"http://localhost:5173"},b=r=>{const t="navigator"in globalThis?globalThis.navigator.clipboard:void 0;return t===void 0?!1:(n(t.writeText(r)),!0)},m=(r,t="")=>{if(r==null||r==="")return t;const e=new Date(r);return Number.isNaN(e.getTime())?String(r):e.toLocaleString()};export{d as a,f as b,b as c,u as d,y as e,n as f,l as g,s as h,m as i,p as j,c as k,a as l,g as m,h as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{y as c}from"./use-admin-query-
|
|
1
|
+
import{y as c}from"./use-admin-query-CnnyWJXM.js";const p="__lunora_admin__:",b=new Set(["action","mutation","query"]),i=Symbol("lunora.operationSeq"),j=t=>{if(typeof t!="object"||t===null)return;const e=t[i];return typeof e=="number"?e:void 0},g=(t,e)=>{if(!(typeof t!="object"||t===null||!Object.isExtensible(t)))try{Object.defineProperty(t,i,{configurable:!0,enumerable:!1,value:e,writable:!0})}catch{}},d=t=>{if(typeof t!="object"||t===null)return;const e=t.__lunoraRef;return typeof e=="string"&&e.startsWith(p)?e:void 0},m=t=>{if(typeof t!="object"||t===null)return"";const{shardKey:e}=t;return typeof e=="string"?e:""},_=t=>new Proxy(t,{get(e,u,l){const n=Reflect.get(e,u,l);if(typeof n!="function"||typeof u!="string"||!b.has(u))return typeof n=="function"?n.bind(e):n;const a=n;return async(...o)=>{const f=d(o[0]);if(f===void 0)return a.apply(e,o);const y=typeof o[1]=="object"&&o[1]!==null?o[1]:{},s=c.start(f,y,m(o[2]));try{const r=await a.apply(e,o);return c.settle(s,{result:r}),r}catch(r){throw c.settle(s,{error:r instanceof Error?r.message:String(r)}),g(r,s),r}}}});export{j as b,_ as h};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as E}from"react/compiler-runtime";import{useState as A,useEffect as ne,createContext as se,use as ie}from"react";import{b as z,c as Q,f as le,
|
|
1
|
+
import{c as E}from"react/compiler-runtime";import{useState as A,useEffect as ne,createContext as se,use as ie}from"react";import{b as z,c as Q,f as le,k as de,d as ce,g as me}from"./internal-zkEvTqy8.js";import{SentIcon as ue,Copy01Icon as pe,Search01Icon as fe}from"@hugeicons/core-free-icons";import{HugeiconsIcon as F}from"@hugeicons/react";import{u as he}from"./input-JHu63lTv.js";import{useT as L}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{u as D}from"./button-BkCrNcAs.js";import{jsx as n,jsxs as $,Fragment as xe}from"react/jsx-runtime";import{g as ge}from"./badge-BbuuAio7.js";import{ShardInput as be}from"./ShardInput-BVn2iCU0.js";import{p as H}from"./label-6uP1obNF.js";import{l as ye}from"./textarea-Bu2-jKAs.js";import{LunoraError as ve}from"@lunora/errors";import{useLunora as Ne}from"@lunora/react";import{c as V}from"./utils-bhneXptQ.js";const gt=function(t,e,r){const o=E(10);let a;o[0]===Symbol.for("react.memo_cache_sentinel")?(a={kind:"loading"},o[0]=a):a=o[0];const[s,i]=A(a);let l,u;o[1]!==r||o[2]!==e||o[3]!==t?(l=()=>{if(t!==void 0)return;let c=!1;return e().then(m=>(c||i(r(m)),m)).catch(m=>{c||i({kind:"error",message:z(m)})}),()=>{c=!0}},u=[r,e,t],o[1]=r,o[2]=e,o[3]=t,o[4]=l,o[5]=u):(l=o[4],u=o[5]),ne(l,u);let d;return o[6]!==r||o[7]!==s||o[8]!==t?(d=t===void 0?s:r(t),o[6]=r,o[7]=s,o[8]=t,o[9]=d):d=o[9],d},$e=t=>typeof t=="number"?"number":typeof t=="boolean"?"boolean":"string",X=t=>{if(t.enum!==void 0&&t.enum.length>0)return t.enum;if(t.anyOf!==void 0&&t.anyOf.length>0&&t.anyOf.every(e=>e.const!==void 0))return t.anyOf.map(e=>e.const)},B=t=>t===void 0?"any":t.const!==void 0?JSON.stringify(t.const):t.enum!==void 0&&t.enum.length>0?t.enum.map(e=>JSON.stringify(e)).join(" | "):t.anyOf!==void 0&&t.anyOf.length>0?t.anyOf.map(e=>B(e)).join(" | "):t.type==="array"?`array<${B(t.items)}>`:t.type??"any",ke=t=>{const e=X(t);return e!==void 0?t.type??$e(e[0]):B(t)},Se=t=>{const e=X(t);return e===void 0?void 0:e.map(r=>JSON.stringify(r)).join(" | ")},we=t=>{const e=[];t.minimum!==void 0?e.push(`${String(t.minimum)} ≤`):t.exclusiveMinimum!==void 0&&e.push(`${String(t.exclusiveMinimum)} <`);const r=e.length>0;e.push("value"),t.maximum!==void 0?e.push(`≤ ${String(t.maximum)}`):t.exclusiveMaximum!==void 0&&e.push(`< ${String(t.exclusiveMaximum)}`);const o=e.length>(r?2:1);return r||o?e.join(" "):void 0},Oe=t=>{if(t.type==="object"&&t.properties!==void 0)return t;if(t.type==="array"&&t.items?.type==="object"&&t.items.properties!==void 0)return t.items},q=t=>{if(t===void 0)return null;if(t.const!==void 0)return t.const;if(t.enum!==void 0&&t.enum.length>0)return t.enum[0];if(t.anyOf!==void 0&&t.anyOf.length>0)return q(t.anyOf[0]);switch(t.type){case"array":return[];case"boolean":return!1;case"number":return 0;case"object":{const e={};for(const[r,o]of Object.entries(t.properties??{}))e[r]=q(o);return e}case"string":return"";default:return null}},W=t=>{const e=E(7),{label:r,value:o}=t;let a;e[0]!==r?(a=n("span",{className:"text-muted-foreground",children:r}),e[0]=r,e[1]=a):a=e[1];let s;e[2]!==o?(s=n("span",{className:"text-foreground",children:o}),e[2]=o,e[3]=s):s=e[3];let i;return e[4]!==a||e[5]!==s?(i=$("span",{className:"inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 font-mono text-[10px]",children:[a,s]}),e[4]=a,e[5]=s,e[6]=i):i=e[6],i},je=t=>{const e=E(40),{name:r,required:o,schema:a}=t,s=L();let i;e[0]!==a?(i=we(a),e[0]=a,e[1]=i):i=e[1];const l=i;let u;e[2]!==a?(u=Se(a),e[2]=a,e[3]=u):u=e[3];const d=u,c=a["x-lunora-table"],m=a.format!==void 0||l!==void 0||d!==void 0||c!==void 0;let y;e[4]!==a?(y=Oe(a),e[4]=a,e[5]=y):y=e[5];const b=y,p=o?"*":"?";let x;e[6]!==p?(x=n("span",{className:"text-muted-foreground",children:p}),e[6]=p,e[7]=x):x=e[7];let v;e[8]!==r||e[9]!==x?(v=$("span",{className:"font-mono text-foreground",children:[r,x]}),e[8]=r,e[9]=x,e[10]=v):v=e[10];let N;e[11]!==a?(N=ke(a),e[11]=a,e[12]=N):N=e[12];let h;e[13]!==N?(h=n("span",{className:"font-mono text-muted-foreground",children:N}),e[13]=N,e[14]=h):h=e[14];let f;e[15]!==v||e[16]!==h?(f=$("div",{className:"flex items-baseline gap-2",children:[v,h]}),e[15]=v,e[16]=h,e[17]=f):f=e[17];let g;e[18]!==a.description?(g=a.description!==void 0&&n("p",{className:"max-w-prose text-muted-foreground",children:a.description}),e[18]=a.description,e[19]=g):g=e[19];let S;e[20]!==m||e[21]!==l||e[22]!==c||e[23]!==a.format||e[24]!==s||e[25]!==d?(S=m&&$("div",{className:"flex flex-wrap gap-1",children:[a.format!==void 0&&n(W,{label:s("Format"),value:a.format}),l!==void 0&&n(W,{label:s("Range"),value:l}),d!==void 0&&n(W,{label:s("Value in"),value:d}),c!==void 0&&n(W,{label:s("relation"),value:c})]}),e[20]=m,e[21]=l,e[22]=c,e[23]=a.format,e[24]=s,e[25]=d,e[26]=S):S=e[26];let w;e[27]!==g||e[28]!==S||e[29]!==f?(w=$("div",{className:"flex flex-col gap-1 py-2",children:[f,g,S]}),e[27]=g,e[28]=S,e[29]=f,e[30]=w):w=e[30];const k=w;if(b===void 0){let O;return e[31]!==k?(O=n("div",{className:"border-b border-border/50 last:border-b-0",children:k}),e[31]=k,e[32]=O):O=e[32],O}let j;e[33]!==k?(j=n("summary",{className:"cursor-pointer marker:text-muted-foreground",children:k}),e[33]=k,e[34]=j):j=e[34];let P;e[35]!==b?(P=n("div",{className:"mb-2 ml-2 border-l border-border pl-3",children:n(Y,{schema:b})}),e[35]=b,e[36]=P):P=e[36];let _;return e[37]!==j||e[38]!==P?(_=$("details",{className:"border-b border-border/50 last:border-b-0",children:[j,P]}),e[37]=j,e[38]=P,e[39]=_):_=e[39],_},Y=t=>{const e=E(7),{schema:r}=t;let o;e[0]!==r.required?(o=new Set(r.required),e[0]=r.required,e[1]=o):o=e[1];const a=o;let s;e[2]!==r.properties?(s=Object.entries(r.properties??{}),e[2]=r.properties,e[3]=s):s=e[3];const i=s;let l;return e[4]!==a||e[5]!==i?(l=n("div",{className:"flex flex-col",children:i.map(u=>{const[d,c]=u;return n(je,{name:d,required:a.has(d),schema:c},d)})}),e[4]=a,e[5]=i,e[6]=l):l=e[6],l},G=t=>{const e=E(10),{schema:r,testId:o}=t;if(r?.type!=="object"||Object.keys(r.properties??{}).length===0){let i;e[0]!==r?(i=B(r),e[0]=r,e[1]=i):i=e[1];let l;return e[2]!==i||e[3]!==o?(l=n("p",{className:"font-mono text-xs text-muted-foreground","data-testid":o,children:i}),e[2]=i,e[3]=o,e[4]=l):l=e[4],l}let a;e[5]!==r?(a=n(Y,{schema:r}),e[5]=r,e[6]=a):a=e[6];let s;return e[7]!==a||e[8]!==o?(s=n("div",{className:"text-xs","data-testid":o,children:a}),e[7]=a,e[8]=o,e[9]=s):s=e[9],s},_e=["curl","javascript","lunora"],Ce={lunora:"Lunora",curl:"cURL",javascript:"JavaScript"},Pe=t=>`api.${t.replaceAll(/[/:]/g,".")}`,Te=t=>{const e=q(t.argsSchema)??{};return t.functionPath===void 0?e:{args:e,functionPath:t.functionPath}},Ie=(t,e,r)=>{const o=`${r}${e.httpPath}`,a=JSON.stringify(Te(e),void 0,2),s=JSON.stringify(q(e.argsSchema)??{},void 0,2);switch(t){case"curl":{const i=e.method!=="GET"&&e.method!=="HEAD",l=[`curl -X ${e.method} ${JSON.stringify(o)}`];return i&&l.push(' -H "Content-Type: application/json"',` -d '${a}'`),l.join(` \\
|
|
2
2
|
`)}case"lunora":return e.functionPath===void 0?`await fetch(${JSON.stringify(e.httpPath)}, { method: ${JSON.stringify(e.method)} });`:`import { useLunora } from "@lunora/react";
|
|
3
3
|
import { api } from "./_generated/api";
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as C}from"react/compiler-runtime";import{AreaChart as X,CartesianGrid as g,XAxis as L,Area as B,LineChart as E,Line as T}from"recharts";import{useT as $}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{h as j}from"./internal-
|
|
1
|
+
import{c as C}from"react/compiler-runtime";import{AreaChart as X,CartesianGrid as g,XAxis as L,Area as B,LineChart as E,Line as T}from"recharts";import{useT as $}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{h as j}from"./internal-zkEvTqy8.js";import{E as q,X as O,B as S,T as F,L as G,A as N,a as A}from"./bar-chart-DraN_srt.js";import{jsx as l,jsxs as b}from"react/jsx-runtime";const H=50,K={value:{colors:{dark:["var(--chart-1)"],light:["var(--chart-1)"]},label:"value"}},I=s=>{const a=s.columns.find(e=>s.rows.length>0&&s.rows.every(t=>typeof t[e]=="number"))??null;return{label:s.columns.find(e=>e!==a)??null,value:a}},W=s=>{const a=C(3),{data:e,kind:t}=s;let o;return a[0]!==e||a[1]!==t?(o=l(G,{className:"h-full w-full",config:K,children:t==="area"?b(X,{data:e,children:[l(g,{vertical:!1}),l(L,{axisLine:!1,dataKey:"label",tickLine:!1}),l(N,{content:l(A,{})}),l(B,{dataKey:"value",fill:"var(--color-value-0)",fillOpacity:.2,stroke:"var(--color-value-0)",type:"monotone"})]}):b(E,{data:e,children:[l(g,{vertical:!1}),l(L,{axisLine:!1,dataKey:"label",tickLine:!1}),l(N,{content:l(A,{})}),l(T,{dataKey:"value",dot:!1,stroke:"var(--color-value-0)",strokeWidth:2,type:"monotone"})]})}),a[0]=e,a[1]=t,a[2]=o):o=a[2],o},R=s=>{const a=C(21),{axes:e,result:t}=s,o=$();let u;a[0]!==t?(u=I(t),a[0]=t,a[1]=u):u=a[1];const k=u;let m;a[2]!==t.columns?(m=new Set(t.columns),a[2]=t.columns,a[3]=m):m=a[3];const f=m,h=e!==void 0&&f.has(e.x)?e.x:k.label;let v;a[4]!==e?.y||a[5]!==f?(v=e?.y.find(r=>f.has(r)),a[4]=e?.y,a[5]=f,a[6]=v):v=a[6];const w=v,d=w??k.value;let p;a[7]!==h||a[8]!==t.rows||a[9]!==d?(p=d===null?[]:t.rows.slice(0,H).map((r,c)=>({label:h===null?`#${(c+1).toString()}`:j(r[h]),value:Number(r[d])||0})),a[7]=h,a[8]=t.rows,a[9]=d,a[10]=p):p=a[10];const y=p;if(d===null){let r;a[11]!==o?(r=o("No numeric column to chart."),a[11]=o,a[12]=r):r=a[12];let c;return a[13]!==r?(c=l("p",{className:"p-4 text-sm text-muted-foreground","data-testid":"sql-chart-empty",children:r}),a[13]=r,a[14]=c):c=a[14],c}const n=e!==void 0&&w!==void 0?e.kind:"bar";let i;a[15]!==y||a[16]!==n?(i=n==="bar"?b(q,{className:"h-full w-full",config:K,data:y,children:[l(O,{dataKey:"label"}),l(S,{dataKey:"value"}),l(F,{})]}):l(W,{data:y,kind:n}),a[15]=y,a[16]=n,a[17]=i):i=a[17];let x;return a[18]!==n||a[19]!==i?(x=l("div",{className:"h-80 w-full p-3","data-chart-kind":n,"data-testid":"sql-chart",children:i}),a[18]=n,a[19]=i,a[20]=x):x=a[20],x};export{R as I};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import{c as w}from"react/compiler-runtime";import{Download01Icon as X}from"@hugeicons/core-free-icons";import{HugeiconsIcon as ee}from"@hugeicons/react";import{Handle as F,Position as P,getNodesBounds as te,getViewportForBounds as ae,useNodesState as re,useEdgesState as oe,ReactFlow as ne,Background as se,Panel as R,Controls as le,MiniMap as de,useNodes as ie,useReactFlow as K,useNodesInitialized as ce}from"@xyflow/react";import{useState as T,useMemo as C,useRef as me,useEffect as j}from"react";import{g as ue,d as y}from"./storage-tier-DznqOf-q.js";import{g as v}from"./badge-BbuuAio7.js";import{u as I}from"./button-BkCrNcAs.js";import{h as fe,$ as pe,b as ge,N as M}from"./dropdown-menu-C3RQ_HlW.js";import{u as he}from"./input-JHu63lTv.js";import{useT as S}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{f as E}from"./internal-BSIsQVC6.js";import{c as N}from"./utils-bhneXptQ.js";import{jsx as d,jsxs as p}from"react/jsx-runtime";import{LunoraError as be}from"@lunora/errors";import{toBlob as xe,toSvg as ye}from"html-to-image";function Ne(a){const e=w(10);let t,s,o;e[0]!==a?({className:t,selected:o,...s}=a,e[0]=a,e[1]=t,e[2]=s,e[3]=o):(t=e[1],s=e[2],o=e[3]);const n=o===!0?"":void 0;let r;e[4]!==t?(r=N("rounded-md border border-border bg-card text-card-foreground shadow-sm transition-colors","data-[selected]:border-ring data-[selected]:ring-[3px] data-[selected]:ring-ring/30",t),e[4]=t,e[5]=r):r=e[5];let l;return e[6]!==s||e[7]!==n||e[8]!==r?(l=d("div",{"data-slot":"base-node","data-selected":n,className:r,...s}),e[6]=s,e[7]=n,e[8]=r,e[9]=l):l=e[9],l}function we(a){const e=w(8);let t,s;e[0]!==a?({className:t,...s}=a,e[0]=a,e[1]=t,e[2]=s):(t=e[1],s=e[2]);let o;e[3]!==t?(o=N("flex items-center gap-2 rounded-t-md bg-muted/50 px-3 py-1.5",t),e[3]=t,e[4]=o):o=e[4];let n;return e[5]!==s||e[6]!==o?(n=d("div",{"data-slot":"base-node-header",className:o,...s}),e[5]=s,e[6]=o,e[7]=n):n=e[7],n}function ve(a){const e=w(8);let t,s;e[0]!==a?({className:t,...s}=a,e[0]=a,e[1]=t,e[2]=s):(t=e[1],s=e[2]);let o;e[3]!==t?(o=N("flex flex-col",t),e[3]=t,e[4]=o):o=e[4];let n;return e[5]!==s||e[6]!==o?(n=d("div",{"data-slot":"base-node-content",className:o,...s}),e[5]=s,e[6]=o,e[7]=n):n=e[7],n}const U=a=>{const e=a.ref===void 0?a.type:`${a.type} → ${a.ref}`;return a.optional===!0?`${e}?`:e},$e=a=>{const e=w(22),{data:t,selected:s}=a,o=S();let n;e[0]!==t.label||e[1]!==t.loadError||e[2]!==o?(n=t.loadError===!0?d("span",{className:"px-3 py-1.5 text-xs text-destructive","data-testid":`sd-node-${t.label}-error`,children:o("Columns unavailable")}):d("span",{className:"px-3 py-1.5 text-xs text-muted-foreground",children:"—"}),e[0]=t.label,e[1]=t.loadError,e[2]=o,e[3]=n):n=e[3];const r=n,l=`sd-node-${t.label}`;let c;e[4]!==t.label?(c=d("span",{className:"truncate font-mono text-xs font-semibold",title:t.label,children:t.label}),e[4]=t.label,e[5]=c):c=e[5];let m;e[6]!==t.tier?(m=d("span",{className:"ms-auto",children:d(ue,{tier:t.tier})}),e[6]=t.tier,e[7]=m):m=e[7];let i;e[8]!==c||e[9]!==m?(i=p(we,{children:[c,m]}),e[8]=c,e[9]=m,e[10]=i):i=e[10];let u;e[11]!==t.columns||e[12]!==t.label||e[13]!==r?(u=t.columns.length===0?r:t.columns.map(g=>p("div",{className:N("relative flex items-center gap-2 border-t border-border px-3 py-1.5 text-xs first:border-t-0",g.pk===!0&&"bg-muted/30"),"data-testid":`sd-col-${t.label}-${g.name}`,children:[d(F,{className:"!h-2 !w-2 !-left-1 !border-border !bg-muted-foreground/70",id:g.name,isConnectable:!1,position:P.Left,type:"target"}),d("span",{className:"truncate font-mono",title:g.name,children:g.name}),g.pk===!0&&d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"secondary",children:"PK"}),g.ref!==void 0&&d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"outline",children:"FK"}),d("span",{className:"ms-auto truncate text-muted-foreground",title:U(g),children:U(g)}),d(F,{className:"!h-2 !w-2 !-right-1 !border-border !bg-muted-foreground/70",id:g.name,isConnectable:!1,position:P.Right,type:"source"})]},g.name)),e[11]=t.columns,e[12]=t.label,e[13]=r,e[14]=u):u=e[14];let f;e[15]!==u?(f=d(ve,{children:u}),e[15]=u,e[16]=f):f=e[16];let b;return e[17]!==s||e[18]!==l||e[19]!==i||e[20]!==f?(b=p(Ne,{className:"w-64 overflow-hidden","data-testid":l,selected:s,children:[i,f]}),e[17]=s,e[18]=l,e[19]=i,e[20]=f,e[21]=b):b=e[21],b},x=1920,$=1080,D=32,L=(a,e)=>{const t=globalThis.document.createElement("a");t.href=a,t.download=e,globalThis.document.body.append(t),t.click(),t.remove()},Se=(a,e,t="schema-diagram.json")=>{const s={edges:e,exportedAt:new Date().toISOString(),nodes:a},o=JSON.stringify(s,void 0,2),n=globalThis.URL.createObjectURL(new globalThis.Blob([o],{type:"application/json"}));L(n,t),globalThis.setTimeout(()=>{globalThis.URL.revokeObjectURL(n)},0)},H=(a,e,t,s)=>{const o=te(a),{x:n,y:r,zoom:l}=ae(o,e,t,.1,2,s);return{transform:[n,r,l],zoom:l}},ke=async(a,e,t="schema-diagram.png")=>{const{transform:s}=H(e,x,$,D),[o,n,r]=s,l=await xe(a,{backgroundColor:"#ffffff",height:$,style:{transform:`translate(${o.toString()}px, ${n.toString()}px) scale(${r.toString()})`,transformOrigin:"top left",width:`${x.toString()}px`},width:x});if(l===null)throw new be("INTERNAL","html-to-image produced no blob");const c=globalThis.URL.createObjectURL(l);L(c,t),globalThis.setTimeout(()=>{globalThis.URL.revokeObjectURL(c)},0)},Ce=async(a,e,t="schema-diagram.svg")=>{const{transform:s}=H(e,x,$,D),[o,n,r]=s,l=await ye(a,{backgroundColor:"#ffffff",height:$,style:{transform:`translate(${o.toString()}px, ${n.toString()}px) scale(${r.toString()})`,transformOrigin:"top left",width:`${x.toString()}px`},width:x});L(l,t)},Me=a=>{const e=Math.max(1,Math.round(Math.sqrt(1.4*a/368)));return Math.max(480,a/e)},B=a=>38+Math.max(1,a)*28,Re=(a,e)=>{const t=new Map;for(const r of a)t.set(r,[]);for(const r of e)r.to!==r.from&&t.has(r.from)&&t.has(r.to)&&t.get(r.from)?.push(r.to);const s=new Map,o=new Set,n=r=>{const l=s.get(r);if(l!==void 0)return l;if(o.has(r))return 0;o.add(r);let c=0;for(const m of t.get(r)??[])c=Math.max(c,n(m)+1);return o.delete(r),s.set(r,c),c};for(const r of a)n(r);return s},Te=(a,e,t)=>{const s=Re(a,e),o=new Map;for(const m of a){const i=s.get(m)??0,u=o.get(i);u===void 0?o.set(i,[m]):u.push(m)}const n=a.reduce((m,i)=>m+B(t.get(i)??0)+36,0),r=Me(n),l=[];let c=0;for(const m of[...o.keys()].toSorted((i,u)=>i-u)){let i=0,u=24;for(const f of o.get(m)??[]){const b=B(t.get(f)??0);u>24&&u+b>r&&(i+=1,u=24),l.push({name:f,x:24+(c+i)*368,y:u}),u+=b+36}c+=i+1}return l},je={databaseSchema:$e},V={backgroundColor:y.shard.color},A={backgroundColor:y.global.color},Ee={global:!0,shard:!0},Le={},_e=a=>{const e=a.find(t=>t.pk===!0)?.name;return e!==void 0?e:a.some(t=>t.name==="_id")?"_id":a.some(t=>t.name==="id")?"id":a[0]?.name??"_id"},q=a=>a.flatMap(e=>e.columns.filter(t=>t.ref!==void 0).map(t=>({column:t.name,from:e.name,to:t.ref}))),ze=(a,e,t)=>{const s=a.map(l=>l.name),o=new Map(a.map(l=>[l.name,l.columns.length])),n=Te(s,q(a),o),r=new Map(a.map(l=>[l.name,l]));return n.flatMap(({name:l,x:c,y:m})=>{const i=r.get(l);return i===void 0?[]:[{className:t[l],data:{columns:i.columns,label:l,loadError:e,tier:i.tier},id:l,position:{x:c,y:m},type:"databaseSchema"}]})},Oe=a=>{const e=new Map(a.map(t=>[t.name,t.columns]));return q(a).flatMap(t=>{const s=e.get(t.to)??[],o=e.get(t.from)??[],n=_e(s);return!s.some(r=>r.name===n)||!o.some(r=>r.name===t.column)?[]:[{id:`${t.from}.${t.column}->${t.to}`,source:t.to,sourceHandle:n,target:t.from,targetHandle:t.column}]})},Fe=()=>{const a=w(15),e=S();let t;a[0]===Symbol.for("react.memo_cache_sentinel")?(t=p("span",{className:"flex items-center gap-1",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:V}),y.shard.label]}),a[0]=t):t=a[0];let s;a[1]===Symbol.for("react.memo_cache_sentinel")?(s=p("span",{className:"flex items-center gap-1",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:A}),y.global.label]}),a[1]=s):s=a[1];let o;a[2]===Symbol.for("react.memo_cache_sentinel")?(o=d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"secondary",children:"PK"}),a[2]=o):o=a[2];let n;a[3]!==e?(n=e("Primary key"),a[3]=e,a[4]=n):n=a[4];let r;a[5]!==n?(r=p("span",{className:"flex items-center gap-1",children:[o,n]}),a[5]=n,a[6]=r):r=a[6];let l;a[7]===Symbol.for("react.memo_cache_sentinel")?(l=d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"outline",children:"FK"}),a[7]=l):l=a[7];let c;a[8]!==e?(c=e("Foreign key"),a[8]=e,a[9]=c):c=a[9];let m;a[10]!==c?(m=p("span",{className:"flex items-center gap-1",children:[l,c]}),a[10]=c,a[11]=m):m=a[11];let i;return a[12]!==r||a[13]!==m?(i=p("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 rounded-xl border border-border bg-card/95 px-2.5 py-1.5 text-[11px] text-muted-foreground shadow-xs",children:[t,s,r,m]}),a[12]=r,a[13]=m,a[14]=i):i=a[14],i},Pe=12,Ie=a=>{const e=w(9),{containerRef:t,seedKey:s}=a,o=ce(),{fitView:n}=K();let r;e[0]!==t||e[1]!==n||e[2]!==o?(r=()=>{if(!o)return;const c=()=>{E(n({duration:0,maxZoom:1.6,padding:.14}))};c();const m=t.current;if(m===null)return;const i=new ResizeObserver(()=>{c()});return i.observe(m),()=>{i.disconnect()}},e[0]=t,e[1]=n,e[2]=o,e[3]=r):r=e[3];let l;return e[4]!==t||e[5]!==n||e[6]!==o||e[7]!==s?(l=[t,n,o,s],e[4]=t,e[5]=n,e[6]=o,e[7]=s,e[8]=l):l=e[8],j(r,l),null},Ue=({containerRef:a,testIdPrefix:e})=>{const t=S(),s=ie(),{getEdges:o}=K(),[n,r]=T(null),l=async()=>{const f=a.current?.querySelector(".react-flow__viewport");if(f){r("png");try{await ke(f,s,`${e}-schema-diagram.png`)}finally{r(null)}}},c=async()=>{const f=a.current?.querySelector(".react-flow__viewport");if(f){r("svg");try{await Ce(f,s,`${e}-schema-diagram.svg`)}finally{r(null)}}},m=()=>{r("json");try{Se(s,o(),`${e}-schema-diagram.json`)}finally{r(null)}},i=()=>{E(l())},u=()=>{E(c())};return d(R,{position:"top-right",children:p(fe,{children:[p(pe,{className:"group/button inline-flex shrink-0 cursor-pointer items-center justify-center gap-1 rounded-md border border-border bg-background px-2 text-xs font-medium whitespace-nowrap hover:bg-muted disabled:pointer-events-none disabled:opacity-50","data-testid":`${e}-export-trigger`,disabled:n!==null,children:[d(ee,{className:"size-3.5",icon:X,strokeWidth:2}),t("Export")]}),p(ge,{align:"end",children:[d(M,{"data-testid":`${e}-export-png`,disabled:n!==null,onClick:i,children:t("PNG")}),d(M,{"data-testid":`${e}-export-svg`,disabled:n!==null,onClick:u,children:t("SVG")}),d(M,{"data-testid":`${e}-export-json`,disabled:n!==null,onClick:m,children:t("JSON")})]})]})})},at=({columnsError:a,fill:e=!1,nodeClasses:t,tables:s,testIdPrefix:o})=>{const n=S(),[r,l]=T(Ee),[c,m]=T(""),i=C(()=>{const h=c.trim().toLowerCase();return s.filter(O=>r[O.tier]&&O.name.toLowerCase().includes(h))},[s,r,c]),u=C(()=>ze(i,a??!1,t??Le),[i,a,t]),f=C(()=>Oe(i),[i]),b=i.map(h=>h.name).join(","),[g,_,G]=re(u),[J,z,W]=oe(f),k=me(null);j(()=>{_(u)},[u,_]),j(()=>{z(f)},[f,z]);const Z=h=>{m(h.target.value)},Y=()=>{l(h=>({...h,shard:!h.shard}))},Q=()=>{l(h=>({...h,global:!h.global}))};return s.length===0?d("section",{className:"flex flex-col gap-2","data-testid":`${o}-section`,children:d("p",{className:"text-sm text-muted-foreground","data-testid":`${o}-empty`,children:n("No tables to graph.")})}):d("section",{className:N("flex flex-col",e&&"min-h-0 flex-1"),"data-testid":`${o}-section`,children:d("div",{className:N("w-full overflow-hidden border border-border bg-muted/20",e?"min-h-0 flex-1":"h-[560px]"),"data-testid":`${o}-canvas`,ref:k,children:p(ne,{edges:J,elementsSelectable:!0,fitView:!0,minZoom:.2,nodes:g,nodesConnectable:!1,nodeTypes:je,onEdgesChange:W,onNodesChange:G,children:[d(se,{}),d(R,{position:"top-left",children:p("div",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card/95 p-2 shadow-xs",children:[d(he,{"aria-label":n("Find table…"),className:"h-7 w-44 text-xs","data-testid":`${o}-find`,onChange:Z,placeholder:n("Find table…"),value:c}),p("div",{"aria-label":n("Storage tiers"),className:"flex items-center gap-1.5",role:"group",children:[p(I,{"aria-pressed":r.shard,className:"gap-1.5","data-testid":`${o}-tier-shard`,onClick:Y,size:"xs",type:"button",variant:r.shard?"default":"outline",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:V}),y.shard.label]}),p(I,{"aria-pressed":r.global,className:"gap-1.5","data-testid":`${o}-tier-global`,onClick:Q,size:"xs",type:"button",variant:r.global?"default":"outline",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:A}),y.global.label]})]})]})}),d(R,{position:"bottom-center",children:d(Fe,{})}),d(le,{showInteractive:!1}),i.length>Pe&&d(de,{className:"!border !border-border !bg-card",maskColor:"var(--color-muted)",nodeColor:"var(--color-muted-foreground)",nodeStrokeWidth:0,pannable:!0,zoomable:!0}),d(Ue,{containerRef:k,testIdPrefix:o}),d(Ie,{containerRef:k,seedKey:b})]})})})};export{at as S};
|
|
2
|
+
import{c as w}from"react/compiler-runtime";import{Download01Icon as X}from"@hugeicons/core-free-icons";import{HugeiconsIcon as ee}from"@hugeicons/react";import{Handle as F,Position as P,getNodesBounds as te,getViewportForBounds as ae,useNodesState as re,useEdgesState as oe,ReactFlow as ne,Background as se,Panel as R,Controls as le,MiniMap as de,useNodes as ie,useReactFlow as K,useNodesInitialized as ce}from"@xyflow/react";import{useState as T,useMemo as C,useRef as me,useEffect as j}from"react";import{g as ue,d as y}from"./storage-tier-DznqOf-q.js";import{g as v}from"./badge-BbuuAio7.js";import{u as I}from"./button-BkCrNcAs.js";import{h as fe,$ as pe,b as ge,N as M}from"./dropdown-menu-C3RQ_HlW.js";import{u as he}from"./input-JHu63lTv.js";import{useT as S}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{f as E}from"./internal-zkEvTqy8.js";import{c as N}from"./utils-bhneXptQ.js";import{jsx as d,jsxs as p}from"react/jsx-runtime";import{LunoraError as be}from"@lunora/errors";import{toBlob as xe,toSvg as ye}from"html-to-image";function Ne(a){const e=w(10);let t,s,o;e[0]!==a?({className:t,selected:o,...s}=a,e[0]=a,e[1]=t,e[2]=s,e[3]=o):(t=e[1],s=e[2],o=e[3]);const n=o===!0?"":void 0;let r;e[4]!==t?(r=N("rounded-md border border-border bg-card text-card-foreground shadow-sm transition-colors","data-[selected]:border-ring data-[selected]:ring-[3px] data-[selected]:ring-ring/30",t),e[4]=t,e[5]=r):r=e[5];let l;return e[6]!==s||e[7]!==n||e[8]!==r?(l=d("div",{"data-slot":"base-node","data-selected":n,className:r,...s}),e[6]=s,e[7]=n,e[8]=r,e[9]=l):l=e[9],l}function we(a){const e=w(8);let t,s;e[0]!==a?({className:t,...s}=a,e[0]=a,e[1]=t,e[2]=s):(t=e[1],s=e[2]);let o;e[3]!==t?(o=N("flex items-center gap-2 rounded-t-md bg-muted/50 px-3 py-1.5",t),e[3]=t,e[4]=o):o=e[4];let n;return e[5]!==s||e[6]!==o?(n=d("div",{"data-slot":"base-node-header",className:o,...s}),e[5]=s,e[6]=o,e[7]=n):n=e[7],n}function ve(a){const e=w(8);let t,s;e[0]!==a?({className:t,...s}=a,e[0]=a,e[1]=t,e[2]=s):(t=e[1],s=e[2]);let o;e[3]!==t?(o=N("flex flex-col",t),e[3]=t,e[4]=o):o=e[4];let n;return e[5]!==s||e[6]!==o?(n=d("div",{"data-slot":"base-node-content",className:o,...s}),e[5]=s,e[6]=o,e[7]=n):n=e[7],n}const U=a=>{const e=a.ref===void 0?a.type:`${a.type} → ${a.ref}`;return a.optional===!0?`${e}?`:e},$e=a=>{const e=w(22),{data:t,selected:s}=a,o=S();let n;e[0]!==t.label||e[1]!==t.loadError||e[2]!==o?(n=t.loadError===!0?d("span",{className:"px-3 py-1.5 text-xs text-destructive","data-testid":`sd-node-${t.label}-error`,children:o("Columns unavailable")}):d("span",{className:"px-3 py-1.5 text-xs text-muted-foreground",children:"—"}),e[0]=t.label,e[1]=t.loadError,e[2]=o,e[3]=n):n=e[3];const r=n,l=`sd-node-${t.label}`;let c;e[4]!==t.label?(c=d("span",{className:"truncate font-mono text-xs font-semibold",title:t.label,children:t.label}),e[4]=t.label,e[5]=c):c=e[5];let m;e[6]!==t.tier?(m=d("span",{className:"ms-auto",children:d(ue,{tier:t.tier})}),e[6]=t.tier,e[7]=m):m=e[7];let i;e[8]!==c||e[9]!==m?(i=p(we,{children:[c,m]}),e[8]=c,e[9]=m,e[10]=i):i=e[10];let u;e[11]!==t.columns||e[12]!==t.label||e[13]!==r?(u=t.columns.length===0?r:t.columns.map(g=>p("div",{className:N("relative flex items-center gap-2 border-t border-border px-3 py-1.5 text-xs first:border-t-0",g.pk===!0&&"bg-muted/30"),"data-testid":`sd-col-${t.label}-${g.name}`,children:[d(F,{className:"!h-2 !w-2 !-left-1 !border-border !bg-muted-foreground/70",id:g.name,isConnectable:!1,position:P.Left,type:"target"}),d("span",{className:"truncate font-mono",title:g.name,children:g.name}),g.pk===!0&&d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"secondary",children:"PK"}),g.ref!==void 0&&d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"outline",children:"FK"}),d("span",{className:"ms-auto truncate text-muted-foreground",title:U(g),children:U(g)}),d(F,{className:"!h-2 !w-2 !-right-1 !border-border !bg-muted-foreground/70",id:g.name,isConnectable:!1,position:P.Right,type:"source"})]},g.name)),e[11]=t.columns,e[12]=t.label,e[13]=r,e[14]=u):u=e[14];let f;e[15]!==u?(f=d(ve,{children:u}),e[15]=u,e[16]=f):f=e[16];let b;return e[17]!==s||e[18]!==l||e[19]!==i||e[20]!==f?(b=p(Ne,{className:"w-64 overflow-hidden","data-testid":l,selected:s,children:[i,f]}),e[17]=s,e[18]=l,e[19]=i,e[20]=f,e[21]=b):b=e[21],b},x=1920,$=1080,D=32,L=(a,e)=>{const t=globalThis.document.createElement("a");t.href=a,t.download=e,globalThis.document.body.append(t),t.click(),t.remove()},Se=(a,e,t="schema-diagram.json")=>{const s={edges:e,exportedAt:new Date().toISOString(),nodes:a},o=JSON.stringify(s,void 0,2),n=globalThis.URL.createObjectURL(new globalThis.Blob([o],{type:"application/json"}));L(n,t),globalThis.setTimeout(()=>{globalThis.URL.revokeObjectURL(n)},0)},H=(a,e,t,s)=>{const o=te(a),{x:n,y:r,zoom:l}=ae(o,e,t,.1,2,s);return{transform:[n,r,l],zoom:l}},ke=async(a,e,t="schema-diagram.png")=>{const{transform:s}=H(e,x,$,D),[o,n,r]=s,l=await xe(a,{backgroundColor:"#ffffff",height:$,style:{transform:`translate(${o.toString()}px, ${n.toString()}px) scale(${r.toString()})`,transformOrigin:"top left",width:`${x.toString()}px`},width:x});if(l===null)throw new be("INTERNAL","html-to-image produced no blob");const c=globalThis.URL.createObjectURL(l);L(c,t),globalThis.setTimeout(()=>{globalThis.URL.revokeObjectURL(c)},0)},Ce=async(a,e,t="schema-diagram.svg")=>{const{transform:s}=H(e,x,$,D),[o,n,r]=s,l=await ye(a,{backgroundColor:"#ffffff",height:$,style:{transform:`translate(${o.toString()}px, ${n.toString()}px) scale(${r.toString()})`,transformOrigin:"top left",width:`${x.toString()}px`},width:x});L(l,t)},Me=a=>{const e=Math.max(1,Math.round(Math.sqrt(1.4*a/368)));return Math.max(480,a/e)},B=a=>38+Math.max(1,a)*28,Re=(a,e)=>{const t=new Map;for(const r of a)t.set(r,[]);for(const r of e)r.to!==r.from&&t.has(r.from)&&t.has(r.to)&&t.get(r.from)?.push(r.to);const s=new Map,o=new Set,n=r=>{const l=s.get(r);if(l!==void 0)return l;if(o.has(r))return 0;o.add(r);let c=0;for(const m of t.get(r)??[])c=Math.max(c,n(m)+1);return o.delete(r),s.set(r,c),c};for(const r of a)n(r);return s},Te=(a,e,t)=>{const s=Re(a,e),o=new Map;for(const m of a){const i=s.get(m)??0,u=o.get(i);u===void 0?o.set(i,[m]):u.push(m)}const n=a.reduce((m,i)=>m+B(t.get(i)??0)+36,0),r=Me(n),l=[];let c=0;for(const m of[...o.keys()].toSorted((i,u)=>i-u)){let i=0,u=24;for(const f of o.get(m)??[]){const b=B(t.get(f)??0);u>24&&u+b>r&&(i+=1,u=24),l.push({name:f,x:24+(c+i)*368,y:u}),u+=b+36}c+=i+1}return l},je={databaseSchema:$e},V={backgroundColor:y.shard.color},A={backgroundColor:y.global.color},Ee={global:!0,shard:!0},Le={},_e=a=>{const e=a.find(t=>t.pk===!0)?.name;return e!==void 0?e:a.some(t=>t.name==="_id")?"_id":a.some(t=>t.name==="id")?"id":a[0]?.name??"_id"},q=a=>a.flatMap(e=>e.columns.filter(t=>t.ref!==void 0).map(t=>({column:t.name,from:e.name,to:t.ref}))),ze=(a,e,t)=>{const s=a.map(l=>l.name),o=new Map(a.map(l=>[l.name,l.columns.length])),n=Te(s,q(a),o),r=new Map(a.map(l=>[l.name,l]));return n.flatMap(({name:l,x:c,y:m})=>{const i=r.get(l);return i===void 0?[]:[{className:t[l],data:{columns:i.columns,label:l,loadError:e,tier:i.tier},id:l,position:{x:c,y:m},type:"databaseSchema"}]})},Oe=a=>{const e=new Map(a.map(t=>[t.name,t.columns]));return q(a).flatMap(t=>{const s=e.get(t.to)??[],o=e.get(t.from)??[],n=_e(s);return!s.some(r=>r.name===n)||!o.some(r=>r.name===t.column)?[]:[{id:`${t.from}.${t.column}->${t.to}`,source:t.to,sourceHandle:n,target:t.from,targetHandle:t.column}]})},Fe=()=>{const a=w(15),e=S();let t;a[0]===Symbol.for("react.memo_cache_sentinel")?(t=p("span",{className:"flex items-center gap-1",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:V}),y.shard.label]}),a[0]=t):t=a[0];let s;a[1]===Symbol.for("react.memo_cache_sentinel")?(s=p("span",{className:"flex items-center gap-1",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:A}),y.global.label]}),a[1]=s):s=a[1];let o;a[2]===Symbol.for("react.memo_cache_sentinel")?(o=d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"secondary",children:"PK"}),a[2]=o):o=a[2];let n;a[3]!==e?(n=e("Primary key"),a[3]=e,a[4]=n):n=a[4];let r;a[5]!==n?(r=p("span",{className:"flex items-center gap-1",children:[o,n]}),a[5]=n,a[6]=r):r=a[6];let l;a[7]===Symbol.for("react.memo_cache_sentinel")?(l=d(v,{className:"px-1 py-0 text-[10px] leading-tight",variant:"outline",children:"FK"}),a[7]=l):l=a[7];let c;a[8]!==e?(c=e("Foreign key"),a[8]=e,a[9]=c):c=a[9];let m;a[10]!==c?(m=p("span",{className:"flex items-center gap-1",children:[l,c]}),a[10]=c,a[11]=m):m=a[11];let i;return a[12]!==r||a[13]!==m?(i=p("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 rounded-xl border border-border bg-card/95 px-2.5 py-1.5 text-[11px] text-muted-foreground shadow-xs",children:[t,s,r,m]}),a[12]=r,a[13]=m,a[14]=i):i=a[14],i},Pe=12,Ie=a=>{const e=w(9),{containerRef:t,seedKey:s}=a,o=ce(),{fitView:n}=K();let r;e[0]!==t||e[1]!==n||e[2]!==o?(r=()=>{if(!o)return;const c=()=>{E(n({duration:0,maxZoom:1.6,padding:.14}))};c();const m=t.current;if(m===null)return;const i=new ResizeObserver(()=>{c()});return i.observe(m),()=>{i.disconnect()}},e[0]=t,e[1]=n,e[2]=o,e[3]=r):r=e[3];let l;return e[4]!==t||e[5]!==n||e[6]!==o||e[7]!==s?(l=[t,n,o,s],e[4]=t,e[5]=n,e[6]=o,e[7]=s,e[8]=l):l=e[8],j(r,l),null},Ue=({containerRef:a,testIdPrefix:e})=>{const t=S(),s=ie(),{getEdges:o}=K(),[n,r]=T(null),l=async()=>{const f=a.current?.querySelector(".react-flow__viewport");if(f){r("png");try{await ke(f,s,`${e}-schema-diagram.png`)}finally{r(null)}}},c=async()=>{const f=a.current?.querySelector(".react-flow__viewport");if(f){r("svg");try{await Ce(f,s,`${e}-schema-diagram.svg`)}finally{r(null)}}},m=()=>{r("json");try{Se(s,o(),`${e}-schema-diagram.json`)}finally{r(null)}},i=()=>{E(l())},u=()=>{E(c())};return d(R,{position:"top-right",children:p(fe,{children:[p(pe,{className:"group/button inline-flex shrink-0 cursor-pointer items-center justify-center gap-1 rounded-md border border-border bg-background px-2 text-xs font-medium whitespace-nowrap hover:bg-muted disabled:pointer-events-none disabled:opacity-50","data-testid":`${e}-export-trigger`,disabled:n!==null,children:[d(ee,{className:"size-3.5",icon:X,strokeWidth:2}),t("Export")]}),p(ge,{align:"end",children:[d(M,{"data-testid":`${e}-export-png`,disabled:n!==null,onClick:i,children:t("PNG")}),d(M,{"data-testid":`${e}-export-svg`,disabled:n!==null,onClick:u,children:t("SVG")}),d(M,{"data-testid":`${e}-export-json`,disabled:n!==null,onClick:m,children:t("JSON")})]})]})})},at=({columnsError:a,fill:e=!1,nodeClasses:t,tables:s,testIdPrefix:o})=>{const n=S(),[r,l]=T(Ee),[c,m]=T(""),i=C(()=>{const h=c.trim().toLowerCase();return s.filter(O=>r[O.tier]&&O.name.toLowerCase().includes(h))},[s,r,c]),u=C(()=>ze(i,a??!1,t??Le),[i,a,t]),f=C(()=>Oe(i),[i]),b=i.map(h=>h.name).join(","),[g,_,G]=re(u),[J,z,W]=oe(f),k=me(null);j(()=>{_(u)},[u,_]),j(()=>{z(f)},[f,z]);const Z=h=>{m(h.target.value)},Y=()=>{l(h=>({...h,shard:!h.shard}))},Q=()=>{l(h=>({...h,global:!h.global}))};return s.length===0?d("section",{className:"flex flex-col gap-2","data-testid":`${o}-section`,children:d("p",{className:"text-sm text-muted-foreground","data-testid":`${o}-empty`,children:n("No tables to graph.")})}):d("section",{className:N("flex flex-col",e&&"min-h-0 flex-1"),"data-testid":`${o}-section`,children:d("div",{className:N("w-full overflow-hidden border border-border bg-muted/20",e?"min-h-0 flex-1":"h-[560px]"),"data-testid":`${o}-canvas`,ref:k,children:p(ne,{edges:J,elementsSelectable:!0,fitView:!0,minZoom:.2,nodes:g,nodesConnectable:!1,nodeTypes:je,onEdgesChange:W,onNodesChange:G,children:[d(se,{}),d(R,{position:"top-left",children:p("div",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card/95 p-2 shadow-xs",children:[d(he,{"aria-label":n("Find table…"),className:"h-7 w-44 text-xs","data-testid":`${o}-find`,onChange:Z,placeholder:n("Find table…"),value:c}),p("div",{"aria-label":n("Storage tiers"),className:"flex items-center gap-1.5",role:"group",children:[p(I,{"aria-pressed":r.shard,className:"gap-1.5","data-testid":`${o}-tier-shard`,onClick:Y,size:"xs",type:"button",variant:r.shard?"default":"outline",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:V}),y.shard.label]}),p(I,{"aria-pressed":r.global,className:"gap-1.5","data-testid":`${o}-tier-global`,onClick:Q,size:"xs",type:"button",variant:r.global?"default":"outline",children:[d("span",{"aria-hidden":"true",className:"size-1.5 rounded-full",style:A}),y.global.label]})]})]})}),d(R,{position:"bottom-center",children:d(Fe,{})}),d(le,{showInteractive:!1}),i.length>Pe&&d(de,{className:"!border !border-border !bg-card",maskColor:"var(--color-muted)",nodeColor:"var(--color-muted-foreground)",nodeStrokeWidth:0,pannable:!0,zoomable:!0}),d(Ue,{containerRef:k,testIdPrefix:o}),d(Ie,{containerRef:k,seedKey:b})]})})})};export{at as S};
|