@lunora/studio 1.0.0-alpha.78 → 1.0.0-alpha.79

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.
Files changed (119) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.js +1 -1
  3. package/dist/mount.js +1 -1
  4. package/dist/packem_chunks/ApiTab.js +1 -1
  5. package/dist/packem_chunks/AuditPanel.js +1 -1
  6. package/dist/packem_chunks/ExportImportPanel.js +1 -1
  7. package/dist/packem_chunks/FileBrowser.js +1 -1
  8. package/dist/packem_chunks/FunctionRunner.js +1 -1
  9. package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
  10. package/dist/packem_chunks/HealthPanel.js +1 -1
  11. package/dist/packem_chunks/InsightsPanel.js +1 -1
  12. package/dist/packem_chunks/LogsPanel.js +1 -1
  13. package/dist/packem_chunks/MailPanel.js +1 -1
  14. package/dist/packem_chunks/MetricsPanel.js +1 -1
  15. package/dist/packem_chunks/MigrationsPanel.js +1 -1
  16. package/dist/packem_chunks/NotificationsPanel.js +1 -1
  17. package/dist/packem_chunks/PitrPanel.js +1 -1
  18. package/dist/packem_chunks/SchemaViewer.js +1 -1
  19. package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
  20. package/dist/packem_chunks/SettingsPanel.js +1 -1
  21. package/dist/packem_chunks/SqlEditorPanel.js +1 -1
  22. package/dist/packem_chunks/TableEditor.js +1 -1
  23. package/dist/packem_chunks/agents-panel.js +1 -1
  24. package/dist/packem_chunks/auth-audit-panel.js +1 -1
  25. package/dist/packem_chunks/containers-panel.js +1 -1
  26. package/dist/packem_chunks/dashboards-panel.js +1 -1
  27. package/dist/packem_chunks/fanout-panel.js +1 -1
  28. package/dist/packem_chunks/flags-panel.js +1 -1
  29. package/dist/packem_chunks/issues-panel.js +1 -1
  30. package/dist/packem_chunks/kv-browser.js +1 -1
  31. package/dist/packem_chunks/organizations-panel.js +1 -1
  32. package/dist/packem_chunks/payments-panel.js +1 -1
  33. package/dist/packem_chunks/permissions-panel.js +1 -1
  34. package/dist/packem_chunks/queues-panel.js +1 -1
  35. package/dist/packem_chunks/rls-panel.js +1 -1
  36. package/dist/packem_chunks/storage-rules-panel.js +1 -1
  37. package/dist/packem_chunks/subscriptions-panel.js +1 -1
  38. package/dist/packem_chunks/traces-panel.js +1 -1
  39. package/dist/packem_chunks/users-panel.js +1 -1
  40. package/dist/packem_chunks/workflows-panel.js +1 -1
  41. package/dist/packem_shared/ADMIN_FUNCTIONS-CpgIo9pj.js +1 -0
  42. package/dist/packem_shared/{ApiDocsPanel-eJYZlylw.js → ApiDocsPanel-CjdsxN1t.js} +1 -1
  43. package/dist/packem_shared/{DataBrowser-B8J5lHjP.js → DataBrowser-Bfstz_au.js} +1 -1
  44. package/dist/packem_shared/{HomePanel-DL1HupAN.js → HomePanel-B8EFM4u3.js} +1 -1
  45. package/dist/packem_shared/{Studio-BWBclm_C.js → Studio-BDtS9C5g.js} +1 -1
  46. package/dist/packem_shared/{StudioApp-BFm73yVr.js → StudioApp-DjLzIO9E.js} +1 -1
  47. package/dist/packem_shared/{home-panel-B-8BCffw.js → home-panel-Cm88Nvqh.js} +1 -1
  48. package/dist/packem_shared/{studio-BHA7hnI3.js → studio-BmWFd-Rz.js} +1 -1
  49. package/dist/packem_shared/use-async-submit-DLNCqLFq.js +1 -0
  50. package/dist/packem_shared/use-auth-config-9S_K_W-G.js +1 -0
  51. package/dist/standalone/{chunk-EVN46TVV.js → chunk-2SHUN7KF.js} +1 -1
  52. package/dist/standalone/{chunk-C43X4M5U.js → chunk-3EXLKL6V.js} +1 -1
  53. package/dist/standalone/{chunk-KDOC2DP5.js → chunk-3KAERFMC.js} +1 -1
  54. package/dist/standalone/{chunk-GSPTEMYN.js → chunk-4XDMVUS5.js} +1 -1
  55. package/dist/standalone/{chunk-YD5NF6UT.js → chunk-5YWJNF5X.js} +1 -1
  56. package/dist/standalone/chunk-66YJ3IOZ.js +1 -0
  57. package/dist/standalone/{chunk-2F7G7IWQ.js → chunk-6CULAILE.js} +1 -1
  58. package/dist/standalone/{chunk-D7XXWV4E.js → chunk-6KHEBRBB.js} +1 -1
  59. package/dist/standalone/{chunk-4WLYA3XE.js → chunk-6WCIFGDW.js} +1 -1
  60. package/dist/standalone/{chunk-OHKRN65U.js → chunk-7RG3AKPY.js} +1 -1
  61. package/dist/standalone/{chunk-65OTWFS3.js → chunk-A2FPLOMJ.js} +1 -1
  62. package/dist/standalone/chunk-AADILRJW.js +14 -0
  63. package/dist/standalone/chunk-AADXUXZO.js +1 -0
  64. package/dist/standalone/{chunk-L7N7F3DA.js → chunk-ARI4JTIH.js} +1 -1
  65. package/dist/standalone/chunk-AVZGVZZ7.js +1 -0
  66. package/dist/standalone/{chunk-5U2THBI7.js → chunk-BDO4J5AP.js} +1 -1
  67. package/dist/standalone/{chunk-XSD4Y6SQ.js → chunk-BMQJ4CAO.js} +1 -1
  68. package/dist/standalone/{chunk-5L2MD6F6.js → chunk-CMUP7HPS.js} +1 -1
  69. package/dist/standalone/{chunk-QGKAJTQQ.js → chunk-CP7AUUOU.js} +1 -1
  70. package/dist/standalone/{chunk-UIS34ZPB.js → chunk-DX3RMFQU.js} +1 -1
  71. package/dist/standalone/{chunk-5OWIOACV.js → chunk-E2CJUP53.js} +1 -1
  72. package/dist/standalone/{chunk-FGTK44LR.js → chunk-EIT7ERYE.js} +1 -1
  73. package/dist/standalone/{chunk-35II7U25.js → chunk-EN2QAEO4.js} +1 -1
  74. package/dist/standalone/{chunk-QVEHPYA5.js → chunk-FLYO3XY5.js} +1 -1
  75. package/dist/standalone/{chunk-DVOBKIUX.js → chunk-FWCKM2CU.js} +1 -1
  76. package/dist/standalone/{chunk-VPAXCQ2Y.js → chunk-GITJXQOS.js} +1 -1
  77. package/dist/standalone/{chunk-SA3MDZC3.js → chunk-GP6IRITM.js} +1 -1
  78. package/dist/standalone/{chunk-VGHSEUEX.js → chunk-GXU3ATKS.js} +1 -1
  79. package/dist/standalone/{chunk-FPLGBHY4.js → chunk-H5Y5NQPL.js} +1 -1
  80. package/dist/standalone/{chunk-34UVAASH.js → chunk-HALNNKTC.js} +1 -1
  81. package/dist/standalone/{chunk-UNUU7CJJ.js → chunk-HK4OVYG3.js} +1 -1
  82. package/dist/standalone/{chunk-ZNNAGR6N.js → chunk-HQEMYD2K.js} +1 -1
  83. package/dist/standalone/{chunk-F6GOKFMU.js → chunk-HYT2ZUNP.js} +2 -2
  84. package/dist/standalone/{chunk-7RXOPYR5.js → chunk-I4WGRDL2.js} +1 -1
  85. package/dist/standalone/{chunk-P24JBHEZ.js → chunk-ISZSYNTI.js} +1 -1
  86. package/dist/standalone/chunk-JWG3VRGB.js +1 -0
  87. package/dist/standalone/{chunk-RAA2RGG6.js → chunk-KDYNM3GV.js} +1 -1
  88. package/dist/standalone/{chunk-T2JIUFOD.js → chunk-KP6JQSH2.js} +1 -1
  89. package/dist/standalone/{chunk-IDNNI63H.js → chunk-LSEZN2ZL.js} +1 -1
  90. package/dist/standalone/{chunk-LJDP7NRB.js → chunk-LU3GW7HI.js} +1 -1
  91. package/dist/standalone/chunk-MVGE3JJN.js +1 -0
  92. package/dist/standalone/chunk-MXSHWB3M.js +1 -0
  93. package/dist/standalone/{chunk-BEH5N5ZA.js → chunk-NG6LYBPJ.js} +1 -1
  94. package/dist/standalone/{chunk-HP2UCWND.js → chunk-NL2DZKFI.js} +1 -1
  95. package/dist/standalone/{chunk-EXFBIISG.js → chunk-OGVCXKRL.js} +1 -1
  96. package/dist/standalone/{chunk-EKRN4ZQM.js → chunk-OPC233PZ.js} +1 -1
  97. package/dist/standalone/{chunk-TLHJRWNK.js → chunk-P4CWOYFL.js} +1 -1
  98. package/dist/standalone/{chunk-QLJJ5YYZ.js → chunk-PRJ4RJDU.js} +1 -1
  99. package/dist/standalone/{chunk-XEDU5FO4.js → chunk-PUY3YDXI.js} +1 -1
  100. package/dist/standalone/{chunk-FGTABSAK.js → chunk-QZMR6MUG.js} +1 -1
  101. package/dist/standalone/{chunk-F5QWLENA.js → chunk-W6TE2I2D.js} +1 -1
  102. package/dist/standalone/{chunk-PF7V3G2Z.js → chunk-WCWYSOCN.js} +1 -1
  103. package/dist/standalone/{chunk-BNUJ7QMG.js → chunk-WEO3YVP6.js} +1 -1
  104. package/dist/standalone/{chunk-6DWCIIHE.js → chunk-XIZNYKOD.js} +1 -1
  105. package/dist/standalone/{chunk-3FUFEZ65.js → chunk-XS6Q6GGV.js} +1 -1
  106. package/dist/standalone/{chunk-XQBTNJUQ.js → chunk-Y3CQDULJ.js} +1 -1
  107. package/dist/standalone/{chunk-7J5N6DGQ.js → chunk-YCRMVBPW.js} +1 -1
  108. package/dist/standalone/{chunk-H7NIIBHH.js → chunk-Z2JPEI2V.js} +1 -1
  109. package/dist/standalone/studio.js +1 -1
  110. package/dist/styles.css +1 -1
  111. package/package.json +6 -6
  112. package/dist/packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js +0 -1
  113. package/dist/packem_shared/use-async-submit-H68GHPz8.js +0 -1
  114. package/dist/standalone/chunk-3QRTYSSX.js +0 -1
  115. package/dist/standalone/chunk-B43FTQJ7.js +0 -1
  116. package/dist/standalone/chunk-GXZAXNZI.js +0 -1
  117. package/dist/standalone/chunk-LE56LPNH.js +0 -13
  118. package/dist/standalone/chunk-PWWHP76O.js +0 -1
  119. package/dist/standalone/chunk-YI3WYUXK.js +0 -1
@@ -1 +1 @@
1
- import{c as V}from"react/compiler-runtime";import{useLunora as kt}from"@lunora/react";import{useState as R,useRef as U,useEffect as de,useMemo as Ce,useCallback as wt}from"react";import{ConfirmButton as Nt}from"./ConfirmButton-CTL3f3kr.js";import{ShardInput as Jt}from"./ShardInput-BVn2iCU0.js";import{E as Gt}from"./empty-state-Cg7t_8qu.js";import{useT as X}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"./ADMIN_FUNCTIONS-BYNSbBVE.js";import{h as fe,f as oe,c as le,a as se,i as Ht}from"./internal-AtZ4bTal.js";import{useReactTable as Qt,getSortedRowModel as Ut,getCoreRowModel as Wt,flexRender as Zt}from"@tanstack/react-table";import{useVirtualizer as Yt}from"@tanstack/react-virtual";import{f as $t}from"./checkbox-StT4Gob6.js";import{c as Tt}from"./utils-bhneXptQ.js";import{l as Xt}from"./virtual-rect-1o1veP7R.js";import{_ as en,y as ht,v as tn}from"./data-grid-BMBKzMEJ.js";import{jsx as c,jsxs as k,Fragment as Je}from"react/jsx-runtime";import{u as nn,_ as rn,a as on,$ as ln}from"./table-list-sidebar-CMCcNALK.js";import{toFilterClauses as be,DataFilters as an}from"./DataFilters-Csb30F0C.js";import{M as zt}from"./modal-shell-CUwwWC2o.js";import{n as sn,l as dn}from"./grid-features-uZCUj955.js";import{K as Ke}from"./use-admin-query-Di3fLE8H.js";import Et from"./useDebounced-Ihdiid_k.js";import{r as cn,l as un}from"./shard-history-DMEW5VBE.js";const mn=/([a-z\d])([A-Z])/gu,gn=/[\s_-]+/u,bn=new Set(["access_token","api_key","apikey","card_number","client_secret","credit_card","cvv","passwd","password","private_key","pwd","refresh_token","secret","ssn","token"]),fn=r=>{const e=r.replaceAll(mn,"$1 $2").split(gn).map(n=>n.toLowerCase()).filter(n=>n.length>0),t=new Set(e);for(let n=0;n<e.length-1;n+=1){const s=e[n],o=e[n+1];s===void 0||o===void 0||(t.add(`${s}${o}`),t.add(`${s}_${o}`))}return[...t]},Rt="•••",pn=r=>{let e=2166136261;for(let t=0;t<r.length;t+=1)e^=r.codePointAt(t)??0,e=Math.imul(e,16777619);return(e>>>0).toString(16).padStart(8,"0")},At=(r,e)=>{try{return e==="redact"?null:e==="hash"?r==null?r:pn(typeof r=="string"?r:JSON.stringify(r)):Rt}catch{return Rt}},hn=(r,e)=>{const t=new Map;for(const n of r)n.table===e&&t.set(n.column,n.strategy);return t},xn=r=>{for(const e of fn(r))if(bn.has(e))return!0;return!1},vn=(r,e)=>{const t=e.filter(s=>!r.has(s)&&xn(s));if(t.length===0)return r;const n=new Map(r);for(const s of t)n.set(s,"redact");return n},yn=(r,e,t)=>{if(!t.enabled)return r;const n=t.columns.get(e);return n===void 0?r:At(r,n)},Dt=(r,e)=>!e.enabled||e.columns.size===0?r:r.map(t=>{const n={...t};for(const[s,o]of e.columns)s in n&&(n[s]=At(n[s],o));return n}),wn=()=>{const r=V(11);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={},r[0]=e):e=r[0];const[t,n]=R(e);let s;r[1]===Symbol.for("react.memo_cache_sentinel")?(s=(m,p,h)=>{n(v=>({...v,[m]:{...v[m],[p]:h}}))},r[1]=s):s=r[1];const o=s;let a;r[2]===Symbol.for("react.memo_cache_sentinel")?(a=()=>{n({})},r[2]=a):a=r[2];const l=a;let i;r[3]!==t?(i=(m,p)=>{const h=t[m];return h!==void 0&&p in h?{value:h[p]}:void 0},r[3]=t,r[4]=i):i=r[4];const d=i;let u;r[5]!==t?(u=Object.values(t).reduce(Cn,0),r[5]=t,r[6]=u):u=r[6];const g=u;let b;return r[7]!==g||r[8]!==t||r[9]!==d?(b={clear:l,count:g,stage:o,staged:t,stagedValue:d},r[7]=g,r[8]=t,r[9]=d,r[10]=b):b=r[10],b},Nn=(r,e)=>{if(typeof e=="number"){const t=Number(r);return r.trim()===""||Number.isNaN(t)?r:t}if(typeof e=="boolean"){if(r==="true")return!0;if(r==="false")return!1}return r},Sn=r=>{const e=V(29),{changes:t,committing:n,onCommit:s,onDiscard:o}=r,a=X();let l;e[0]!==t.length||e[1]!==a?(l=a("{count} pending changes",{count:t.length}),e[0]=t.length,e[1]=a,e[2]=l):l=e[2];let i;e[3]!==l?(i=c("span",{className:"font-mono text-[11px] tracking-wide uppercase text-warning","data-testid":"db-staged-count",children:l}),e[3]=l,e[4]=i):i=e[4];let d;e[5]!==n||e[6]!==a?(d=a(n?"Committing…":"Commit"),e[5]=n,e[6]=a,e[7]=d):d=e[7];let u;e[8]!==n||e[9]!==s||e[10]!==d?(u=c("button",{className:"ms-auto rounded-md bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground outline-none transition-colors hover:bg-primary/90 focus-visible:bg-primary/90 disabled:pointer-events-none disabled:opacity-50","data-testid":"db-staged-commit",disabled:n,onClick:s,type:"button",children:d}),e[8]=n,e[9]=s,e[10]=d,e[11]=u):u=e[11];let g;e[12]!==a?(g=a("Discard"),e[12]=a,e[13]=g):g=e[13];let b;e[14]!==n||e[15]!==o||e[16]!==g?(b=c("button",{className:"rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50","data-testid":"db-staged-discard",disabled:n,onClick:o,type:"button",children:g}),e[14]=n,e[15]=o,e[16]=g,e[17]=b):b=e[17];let m;e[18]!==i||e[19]!==u||e[20]!==b?(m=k("div",{className:"flex flex-wrap items-center gap-2",children:[i,u,b]}),e[18]=i,e[19]=u,e[20]=b,e[21]=m):m=e[21];let p;e[22]!==t?(p=t.map(kn),e[22]=t,e[23]=p):p=e[23];let h;e[24]!==p?(h=c("ul",{className:"flex flex-col gap-1","data-testid":"db-staged-list",children:p}),e[24]=p,e[25]=h):h=e[25];let v;return e[26]!==m||e[27]!==h?(v=k("div",{className:"flex flex-col gap-2 border border-warning/40 bg-warning/5 p-3","data-testid":"db-staged",children:[m,h]}),e[26]=m,e[27]=h,e[28]=v):v=e[28],v};function Cn(r,e){return r+Object.keys(e).length}function kn(r){return k("li",{className:"flex flex-wrap items-center gap-2 font-mono text-xs",children:[k("span",{className:"text-muted-foreground",children:[r.rowId,".",r.column]}),c("span",{className:"text-destructive line-through",children:fe(r.oldValue)}),c("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"→"}),c("span",{className:"text-foreground",children:fe(r.newValue)})]},`${r.rowId}:${r.column}`)}const It=400,$n=36,Tn={flex:"1 1 0%",minHeight:0,overflow:"auto",position:"relative"},_n={width:"100%"},En={alignItems:"center",display:"flex",left:0,position:"absolute",top:0,width:"100%"},Rn={display:"flex",width:"100%"},Mt={flex:"0 0 8.5rem",padding:"0.375rem 0.75rem"},Dn="2.5rem",Vt={alignItems:"center",display:"flex",flex:"0 0 2.5rem",justifyContent:"center",left:0,padding:"0.375rem 0",position:"sticky",zIndex:2},_t=r=>({flex:"0 0 auto",overflow:"hidden",padding:"0.375rem 0.75rem",position:"relative",textOverflow:"ellipsis",whiteSpace:"nowrap",width:`${r.toString()}px`}),Lt=r=>({..._t(r),left:Dn,position:"sticky",zIndex:2}),Ft="rounded-md px-2 py-0.5 text-xs font-medium text-muted-foreground outline-none transition-colors hover:bg-accent hover:text-foreground focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",ae=r=>{for(const e of["id","__id__","_id"]){const t=r[e];if(typeof t=="string"||typeof t=="number")return String(t)}return null},Bt=(r,e)=>ae(r)??`row-${e.toString()}`,In=8,Mn=r=>{const e=V(16),{anchor:t,state:n}=r,s=X();let o;e[0]!==t.left||e[1]!==t.top?(o={left:t.left,position:"fixed",top:t.top,zIndex:50},e[0]=t.left,e[1]=t.top,e[2]=o):o=e[2];const a=o;let l;if(n==="loading"){let d;e[3]!==s?(d=s("Loading…"),e[3]=s,e[4]=d):d=e[4];let u;e[5]!==d?(u=c("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:d}),e[5]=d,e[6]=u):u=e[6],l=u}else if(n.row===null){let d;e[7]!==s?(d=s("No matching row."),e[7]=s,e[8]=d):d=e[8];let u;e[9]!==d?(u=c("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:d}),e[9]=d,e[10]=u):u=e[10],l=u}else{let d;if(e[11]!==n.row){const u=Object.entries(n.row).slice(0,In);d=c("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 px-3 py-2",children:u.map(Kn)}),e[11]=n.row,e[12]=d}else d=e[12];l=d}let i;return e[13]!==l||e[14]!==a?(i=c("div",{className:"pointer-events-none w-72 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground","data-testid":"db-ref-preview",role:"tooltip",style:a,children:l}),e[13]=l,e[14]=a,e[15]=i):i=e[15],i},Fn=r=>{const e=V(22),{column:t,id:n,onNavigate:s,onPreview:o,target:a}=r,[l,i]=R(null),[d,u]=R("idle");let g;e[0]!==n||e[1]!==s||e[2]!==a?(g=()=>{s(a,n)},e[0]=n,e[1]=s,e[2]=a,e[3]=g):g=e[3];const b=g;let m;e[4]!==n||e[5]!==o||e[6]!==d||e[7]!==a?(m=$=>{const y=$.currentTarget.getBoundingClientRect();i({left:y.left,top:y.bottom+4}),d==="idle"&&(u("loading"),oe((async()=>{try{u({row:await o(a,n)})}catch{u({row:null})}})()))},e[4]=n,e[5]=o,e[6]=d,e[7]=a,e[8]=m):m=e[8];const p=m;let h;e[9]===Symbol.for("react.memo_cache_sentinel")?(h=()=>{i(null)},e[9]=h):h=e[9];const v=h,w=`db-ref-${t}`,f=`Open ${a} ${n}`;let x;e[10]!==n||e[11]!==b||e[12]!==p||e[13]!==w||e[14]!==f?(x=k("button",{"data-testid":w,onBlur:v,onClick:b,onFocus:p,onMouseEnter:p,onMouseLeave:v,title:f,type:"button",children:[n," ↗"]}),e[10]=n,e[11]=b,e[12]=p,e[13]=w,e[14]=f,e[15]=x):x=e[15];let N;e[16]!==l||e[17]!==d?(N=l!==null&&d!=="idle"&&c(Mn,{anchor:l,state:d}),e[16]=l,e[17]=d,e[18]=N):N=e[18];let _;return e[19]!==x||e[20]!==N?(_=k(Je,{children:[x,N]}),e[19]=x,e[20]=N,e[21]=_):_=e[21],_},On=r=>r==="asc"?" ▲":r==="desc"?" ▼":"",jn="absolute end-1 top-1/2 hidden -translate-y-1/2 items-center justify-center rounded text-muted-foreground outline-none group-hover/cell:flex hover:text-foreground focus-visible:flex",Ot=r=>{const e=V(8),{column:t,onExpand:n,value:s}=r;let o;e[0]!==t||e[1]!==n||e[2]!==s?(o=()=>{n(t,s)},e[0]=t,e[1]=n,e[2]=s,e[3]=o):o=e[3];const a=o,l=`db-expand-${t}`;let i;e[4]===Symbol.for("react.memo_cache_sentinel")?(i=c("svg",{"aria-hidden":"true",className:"size-3",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.8,viewBox:"0 0 24 24",children:c("path",{d:"M9 21H5a2 2 0 0 1-2-2v-4m18 0v4a2 2 0 0 1-2 2h-4M3 9V5a2 2 0 0 1 2-2h4m6 0h4a2 2 0 0 1 2 2v4"})}),e[4]=i):i=e[4];let d;return e[5]!==a||e[6]!==l?(d=c("button",{"aria-label":"Expand cell",className:jn,"data-testid":l,onClick:a,type:"button",children:i}),e[5]=a,e[6]=l,e[7]=d):d=e[7],d},Pn=r=>{const e=V(14),{column:t,initial:n,onCancel:s,onCommit:o,recordId:a}=r,l=U(null);let i,d;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=()=>{l.current?.select()},d=[],e[0]=i,e[1]=d):(i=e[0],d=e[1]),de(i,d);let u;e[2]!==s||e[3]!==o?(u=w=>{w.key==="Enter"?(w.preventDefault(),o(w.currentTarget.value)):w.key==="Escape"&&(w.preventDefault(),s())},e[2]=s,e[3]=o,e[4]=u):u=e[4];const g=u;let b;e[5]!==o?(b=w=>{o(w.currentTarget.value)},e[5]=o,e[6]=b):b=e[6];const m=b,p=`db-cell-input-${a}-${t}`;let h;e[7]!==n?(h=fe(n),e[7]=n,e[8]=h):h=e[8];let v;return e[9]!==m||e[10]!==g||e[11]!==p||e[12]!==h?(v=c("input",{className:"w-full rounded border border-ring bg-background px-1 py-0.5 font-mono text-xs outline-none","data-testid":p,defaultValue:h,onBlur:m,onKeyDown:g,ref:l}),e[9]=m,e[10]=g,e[11]=p,e[12]=h,e[13]=v):v=e[13],v},zn=r=>{const e=V(63),{cell:t,edit:n,mask:s,refs:o}=r,a=t.column.id;let l,i,d,u;if(e[0]!==t||e[1]!==a||e[2]!==n||e[3]!==s||e[4]!==o.columns||e[5]!==o.onNavigate||e[6]!==o.onPreview){u=Symbol.for("react.early_return_sentinel");e:{i=t.getValue(),l=ae(t.row.original);const y=o.columns?.[a];if(s.enabled&&s.columns.has(a)){const S=`db-masked-${a}`,E=c(ht,{value:yn(i,a,s)});let D;e[11]!==S||e[12]!==E?(D=c("span",{className:"text-muted-foreground italic","data-testid":S,title:"Masked (preview)",children:E}),e[11]=S,e[12]=E,e[13]=D):D=e[13],u=D;break e}if(y!==void 0&&(typeof i=="string"||typeof i=="number")&&String(i)!==""){const S=String(i),E=`${y}:${String(i)}`;let D;e[14]!==a||e[15]!==o.onNavigate||e[16]!==o.onPreview||e[17]!==S||e[18]!==E||e[19]!==y?(D=c(Fn,{column:a,id:S,onNavigate:o.onNavigate,onPreview:o.onPreview,target:y},E),e[14]=a,e[15]=o.onNavigate,e[16]=o.onPreview,e[17]=S,e[18]=E,e[19]=y,e[20]=D):D=e[20],u=D;break e}if(l===null){let S;e[21]!==i?(S=c(ht,{value:i}),e[21]=i,e[22]=S):S=e[22];let E;e[23]!==a||e[24]!==n.onExpandCell||e[25]!==i?(E=c(Ot,{column:a,onExpand:n.onExpandCell,value:i}),e[23]=a,e[24]=n.onExpandCell,e[25]=i,e[26]=E):E=e[26];let D;e[27]!==S||e[28]!==E?(D=k(Je,{children:[S,E]}),e[27]=S,e[28]=E,e[29]=D):D=e[29],u=D;break e}d=n.stagedValue(l,a)}e[0]=t,e[1]=a,e[2]=n,e[3]=s,e[4]=o.columns,e[5]=o.onNavigate,e[6]=o.onPreview,e[7]=l,e[8]=i,e[9]=d,e[10]=u}else l=e[7],i=e[8],d=e[9],u=e[10];if(u!==Symbol.for("react.early_return_sentinel"))return u;const g=d,b=g===void 0?i:g.value;let m;e[30]!==a||e[31]!==n?(m=n.editable&&n.editableColumn(a),e[30]=a,e[31]=n,e[32]=m):m=e[32];const p=m;if(n.editingCell!==null&&n.editingCell.rowId===l&&n.editingCell.column===a){let y;e[33]!==a||e[34]!==n||e[35]!==l||e[36]!==i?(y=E=>{n.stage(l,a,Nn(E,i)),n.cancelEdit()},e[33]=a,e[34]=n,e[35]=l,e[36]=i,e[37]=y):y=e[37];let S;return e[38]!==a||e[39]!==b||e[40]!==n.cancelEdit||e[41]!==l||e[42]!==y?(S=c(Pn,{column:a,initial:b,onCancel:n.cancelEdit,onCommit:y,recordId:l}),e[38]=a,e[39]=b,e[40]=n.cancelEdit,e[41]=l,e[42]=y,e[43]=S):S=e[43],S}let h;g!==void 0?h="rounded bg-warning/15 px-1":p&&(h="cursor-text");let v;e[44]!==p||e[45]!==a||e[46]!==n||e[47]!==l?(v=p?()=>{n.startEdit(l,a)}:void 0,e[44]=p,e[45]=a,e[46]=n,e[47]=l,e[48]=v):v=e[48];const w=v,f=`db-cell-${l}-${a}`;let x;e[49]!==b?(x=c(ht,{value:b}),e[49]=b,e[50]=x):x=e[50];let N;e[51]!==h||e[52]!==w||e[53]!==f||e[54]!==x?(N=c("span",{className:h,"data-testid":f,onDoubleClick:w,children:x}),e[51]=h,e[52]=w,e[53]=f,e[54]=x,e[55]=N):N=e[55];let _;e[56]!==a||e[57]!==b||e[58]!==n.onExpandCell?(_=c(Ot,{column:a,onExpand:n.onExpandCell,value:b}),e[56]=a,e[57]=b,e[58]=n.onExpandCell,e[59]=_):_=e[59];let $;return e[60]!==N||e[61]!==_?($=k(Je,{children:[N,_]}),e[60]=N,e[61]=_,e[62]=$):$=e[62],$},An=({draggedRef:r,header:e,masked:t=!1,pinned:n=!1,table:s})=>{const o=()=>{r.current=e.column.id},a=i=>{i.preventDefault()},l=()=>{const i=r.current,d=e.column.id;if(r.current=null,i===null||i===d)return;const u=s.getState().columnOrder,g=(u.length>0?u:s.getAllLeafColumns().map(m=>m.id)).filter(m=>m!==i),b=g.indexOf(d);g.splice(b===-1?g.length:b,0,i),s.setColumnOrder(g)};return k("th",{className:Tt("text-start text-xs font-medium text-muted-foreground",n&&"border-e border-border bg-muted"),draggable:!0,onDragOver:a,onDragStart:o,onDrop:l,style:n?Lt(e.getSize()):_t(e.getSize()),children:[k("button",{className:"inline-flex max-w-full cursor-grab items-center gap-1 truncate outline-none hover:text-foreground","data-testid":`db-sort-${e.column.id}`,onClick:e.column.getToggleSortingHandler(),type:"button",children:[Zt(e.column.columnDef.header,e.getContext()),On(e.column.getIsSorted())]}),t&&c("span",{className:"ms-1 inline-flex items-center rounded-sm bg-warning/15 px-1 text-[0.625rem] font-medium uppercase text-warning","data-testid":`db-mask-chip-${e.column.id}`,title:"This column is masked by a mask() policy",children:"masked"}),c("span",{"aria-hidden":"true",className:"absolute inset-y-0 end-0 w-1 cursor-col-resize touch-none select-none hover:bg-ring/60 data-[resizing=true]:bg-ring","data-resizing":e.column.getIsResizing(),"data-testid":`db-resize-${e.column.id}`,onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler()})]})},Vn=r=>{const e=V(13),{table:t}=r,n=X();let s;e[0]!==t?(s=u=>{t.toggleAllRowsSelected(u)},e[0]=t,e[1]=s):s=e[1];const o=s;let a;e[2]!==n?(a=n("Select all rows"),e[2]=n,e[3]=a):a=e[3];let l;e[4]!==t?(l=t.getIsAllRowsSelected(),e[4]=t,e[5]=l):l=e[5];let i;e[6]!==t?(i=t.getIsSomeRowsSelected()&&!t.getIsAllRowsSelected(),e[6]=t,e[7]=i):i=e[7];let d;return e[8]!==o||e[9]!==a||e[10]!==l||e[11]!==i?(d=c("th",{className:"bg-muted",style:Vt,children:c($t,{"aria-label":a,checked:l,"data-testid":"db-select-all",indeterminate:i,onCheckedChange:o})}),e[8]=o,e[9]=a,e[10]=l,e[11]=i,e[12]=d):d=e[12],d},Ln=r=>{const e=V(17),{row:t}=r,n=X();let s;e[0]!==t.original?(s=ae(t.original),e[0]=t.original,e[1]=s):s=e[1];const o=s;let a;e[2]!==t?(a=p=>{t.toggleSelected(p)},e[2]=t,e[3]=a):a=e[3];const l=a;let i;e[4]!==n?(i=n("Select row"),e[4]=n,e[5]=i):i=e[5];let d;e[6]!==t?(d=t.getIsSelected(),e[6]=t,e[7]=d):d=e[7];let u;e[8]!==t.index||e[9]!==t.original?(u=Bt(t.original,t.index),e[8]=t.index,e[9]=t.original,e[10]=u):u=e[10];const g=`db-select-${u}`,b=o===null;let m;return e[11]!==l||e[12]!==i||e[13]!==d||e[14]!==g||e[15]!==b?(m=c("td",{className:"bg-background",style:Vt,children:c($t,{"aria-label":i,checked:d,"data-testid":g,disabled:b,onCheckedChange:l})}),e[11]=l,e[12]=i,e[13]=d,e[14]=g,e[15]=b,e[16]=m):m=e[16],m},Bn=r=>{const e=V(46),{edit:t,editable:n,mask:s,onDelete:o,onEdit:a,onInspect:l,refs:i,scrollRef:d,scrollToIndex:u,table:g,tableRows:b,tbodyStyle:m,virtualRows:p}=r,h=U(null),[v,w]=R(null);let f;e[0]!==g?(f=g.getVisibleLeafColumns(),e[0]=g,e[1]=f):f=e[1];const x=f.length;let N;e[2]!==v||e[3]!==x||e[4]!==t||e[5]!==g||e[6]!==b?(N=T=>{if(!["ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Enter"].includes(T.key))return;T.preventDefault();const I=v??{col:0,row:0};if(T.key==="Enter"){const ee=b[I.row],te=g.getVisibleLeafColumns()[I.col];if(ee!==void 0&&te!==void 0){const Q=ae(ee.original);Q!==null&&t.editableColumn(te.id)&&t.startEdit(Q,te.id)}w(I);return}let{col:P,row:A}=I;e:switch(T.key){case"ArrowDown":{A=Math.min(A+1,b.length-1);break e}case"ArrowRight":{P=Math.min(P+1,x-1);break e}case"ArrowUp":{A=Math.max(A-1,0);break e}default:P=Math.max(P-1,0)}w({col:P,row:A})},e[2]=v,e[3]=x,e[4]=t,e[5]=g,e[6]=b,e[7]=N):N=e[7];const _=N;let $,y;e[8]!==v||e[9]!==u?($=()=>{v!==null&&u(v.row)},y=[v,u],e[8]=v,e[9]=u,e[10]=$,e[11]=y):($=e[10],y=e[11]),de($,y);let S;e[12]!==v||e[13]!==t||e[14]!==n||e[15]!==s||e[16]!==o||e[17]!==a||e[18]!==l||e[19]!==i||e[20]!==b?(S=T=>{const I=b[T.index],{original:P}=I,A=ae(P),ee=Bt(P,T.index),te={...En,height:`${T.size.toString()}px`,transform:`translateY(${T.start.toString()}px)`};return k("tr",{className:"border-b border-border text-xs transition-colors hover:bg-muted/50","data-testid":"db-row",style:te,children:[c(Ln,{row:I}),I.getVisibleCells().map((Q,ce)=>{const ue=ce===0,pe=v!==null&&v.row===T.index&&v.col===ce?" ring-1 ring-ring ring-inset":"";return c("td",{className:Tt("group/cell truncate font-mono text-muted-foreground",ue&&"border-e border-border bg-background",pe),style:ue?Lt(Q.column.getSize()):_t(Q.column.getSize()),children:c(zn,{cell:Q,edit:t,mask:s,refs:i})},Q.id)}),k("td",{className:"flex items-center gap-1",style:Mt,children:[c("button",{className:Ft,"data-testid":`db-inspect-${ee}`,onClick:()=>{l(P)},type:"button",children:"Details"}),n&&k(Je,{children:[c("button",{className:Ft,"data-testid":`db-edit-${ee}`,disabled:A===null,onClick:()=>{a(A,P)},type:"button",children:"Edit"}),c(Nt,{confirmLabel:"Delete?",disabled:A===null,onConfirm:()=>{o(A)},testId:`db-delete-${ee}`,children:"Delete"})]})]})]},I.id)},e[12]=v,e[13]=t,e[14]=n,e[15]=s,e[16]=o,e[17]=a,e[18]=l,e[19]=i,e[20]=b,e[21]=S):S=e[21];const E=S;let D;e[22]!==g?(D=c(Vn,{table:g}),e[22]=g,e[23]=D):D=e[23];let L;e[24]!==s||e[25]!==g?(L=g.getFlatHeaders().map((T,I)=>c(An,{draggedRef:h,header:T,masked:s.columns.has(T.column.id),pinned:I===0,table:g},T.id)),e[24]=s,e[25]=g,e[26]=L):L=e[26];let q;e[27]===Symbol.for("react.memo_cache_sentinel")?(q=c("th",{"aria-label":"Row actions",style:Mt}),e[27]=q):q=e[27];let z;e[28]!==D||e[29]!==L?(z=c("thead",{className:"bg-muted/50",children:k("tr",{className:"border-b border-border",style:Rn,children:[D,L,q]})}),e[28]=D,e[29]=L,e[30]=z):z=e[30];let B;if(e[31]!==E||e[32]!==p){let T;e[34]!==E?(T=I=>E(I),e[34]=E,e[35]=T):T=e[35],B=p.map(T),e[31]=E,e[32]=p,e[33]=B}else B=e[33];let O;e[36]!==B||e[37]!==m?(O=c("tbody",{style:m,children:B}),e[36]=B,e[37]=m,e[38]=O):O=e[38];let j;e[39]!==O||e[40]!==z?(j=k("table",{className:"w-full text-xs","data-testid":"db-rows",style:_n,children:[z,O]}),e[39]=O,e[40]=z,e[41]=j):j=e[41];let K;return e[42]!==_||e[43]!==d||e[44]!==j?(K=c(en,{layout:"fill",children:c("div",{"data-testid":"db-scroll",onKeyDown:_,ref:d,role:"grid",style:Tn,tabIndex:0,children:j})}),e[42]=_,e[43]=d,e[44]=j,e[45]=K):K=e[45],K},qn=(r,e,t)=>{const n=r?.columns,s=r?.rows,o=r?.refs,a=Ce(()=>n===void 0?[]:n.map(x=>({accessorFn:N=>N[x],header:o?.[x]===void 0?x:`${x} →`,id:x})),[n,o]),l=Ce(()=>s??[],[s]),[i,d]=R({}),[u,g]=R({}),b=Qt({columnResizeMode:"onChange",columns:a,data:l,defaultColumn:{minSize:80,size:200},enableColumnResizing:!0,enableRowSelection:x=>ae(x.original)!==null,getCoreRowModel:Wt(),getRowId:(x,N)=>ae(x)??`row-${N.toString()}`,getSortedRowModel:Ut(),manualSorting:!0,onColumnVisibilityChange:g,onRowSelectionChange:d,onSortingChange:t,state:{columnVisibility:u,rowSelection:i,sorting:e}}),m=b.getRowModel().rows,p=U(null),h=Yt({count:m.length,estimateSize:()=>$n,getScrollElement:()=>p.current,initialRect:{height:It,width:0},observeElementRect:(x,N)=>Xt(x,N,It),overscan:8}),v=wt(x=>{h.scrollToIndex(x)},[h]),w=h.getVirtualItems(),f={display:"block",height:`${h.getTotalSize().toString()}px`,position:"relative"};return{scrollRef:p,scrollToIndex:v,table:b,tableRows:m,tbodyStyle:f,virtualRows:w}};function Kn(r){const[e,t]=r;return k("div",{className:"contents",children:[c("dt",{className:"truncate font-mono text-[11px] text-muted-foreground",children:e}),c("dd",{className:"truncate font-mono text-[11px] text-foreground",title:fe(t),children:fe(t)})]},e)}const St="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",Jn=r=>{const e=V(22),{onCommit:t}=r,n=X(),[s,o]=R(""),a=U(null);let l,i;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=()=>{a.current?.focus()},i=[],e[0]=l,e[1]=i):(l=e[0],i=e[1]),de(l,i);let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=x=>{o(x.target.value)},e[2]=d):d=e[2];const u=d;let g;e[3]!==s||e[4]!==t?(g=()=>{const x=s.trim();x!==""&&t(x)},e[3]=s,e[4]=t,e[5]=g):g=e[5];const b=g;let m;e[6]!==n?(m=n("Query name"),e[6]=n,e[7]=m):m=e[7];let p;e[8]!==n?(p=n("Query name"),e[8]=n,e[9]=p):p=e[9];let h;e[10]!==s||e[11]!==m||e[12]!==p?(h=c("input",{"aria-label":m,className:"h-7 rounded-md border border-border bg-background px-2 text-xs outline-none focus-visible:border-ring","data-testid":"db-save-query-name",onChange:u,placeholder:p,ref:a,value:s}),e[10]=s,e[11]=m,e[12]=p,e[13]=h):h=e[13];let v;e[14]!==n?(v=n("Save"),e[14]=n,e[15]=v):v=e[15];let w;e[16]!==b||e[17]!==v?(w=c("button",{className:St,"data-testid":"db-save-query-confirm",onClick:b,type:"button",children:v}),e[16]=b,e[17]=v,e[18]=w):w=e[18];let f;return e[19]!==h||e[20]!==w?(f=k("span",{className:"inline-flex items-center gap-1",children:[h,w]}),e[19]=h,e[20]=w,e[21]=f):f=e[21],f},Gn=r=>{const e=V(27),{onApply:t,onCopyLink:n,onDelete:s,onSave:o,saved:a}=r,l=X(),[i,d]=R(!1);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=()=>{d(!0)},e[0]=u):u=e[0];const g=u;let b;e[1]!==o?(b=y=>{o(y),d(!1)},e[1]=o,e[2]=b):b=e[2];const m=b;let p;e[3]!==t||e[4]!==a?(p=y=>{const S=a[Number(y.currentTarget.dataset.index)];S!==void 0&&t(S)},e[3]=t,e[4]=a,e[5]=p):p=e[5];const h=p;let v;e[6]!==s||e[7]!==a?(v=y=>{const S=a[Number(y.currentTarget.dataset.index)];S!==void 0&&s(S.name)},e[6]=s,e[7]=a,e[8]=v):v=e[8];const w=v;let f;e[9]!==l?(f=l("Copy link"),e[9]=l,e[10]=f):f=e[10];let x;e[11]!==n||e[12]!==f?(x=c("button",{className:St,"data-testid":"db-copy-link",onClick:n,type:"button",children:f}),e[11]=n,e[12]=f,e[13]=x):x=e[13];let N;e[14]!==m||e[15]!==i||e[16]!==l?(N=i?c(Jn,{onCommit:m}):c("button",{className:St,"data-testid":"db-save-query",onClick:g,type:"button",children:l("Save query")}),e[14]=m,e[15]=i,e[16]=l,e[17]=N):N=e[17];let _;e[18]!==h||e[19]!==w||e[20]!==a||e[21]!==l?(_=a.length>0&&k("div",{className:"flex flex-wrap items-center gap-1","data-testid":"db-saved-queries",children:[c("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:l("Saved")}),a.map((y,S)=>k("span",{className:"inline-flex items-center overflow-hidden rounded-md border border-border",children:[c("button",{className:"px-2 py-0.5 text-xs text-foreground transition-colors hover:bg-accent","data-index":S,"data-testid":`db-saved-query-${y.name}`,onClick:h,type:"button",children:y.name}),c("button",{"aria-label":l("Delete saved query {name}",{name:y.name}),className:"border-l border-border px-1 py-0.5 text-xs text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive","data-index":S,"data-testid":`db-saved-query-delete-${y.name}`,onClick:w,type:"button",children:"✕"})]},y.name))]}),e[18]=h,e[19]=w,e[20]=a,e[21]=l,e[22]=_):_=e[22];let $;return e[23]!==x||e[24]!==N||e[25]!==_?($=k("div",{className:"flex flex-wrap items-center gap-1.5","data-testid":"db-query-bar",children:[x,N,_]}),e[23]=x,e[24]=N,e[25]=_,e[26]=$):$=e[26],$},Hn="/__lunora/seed",xt=200,Qn=50,Un=(r,e)=>{const t=[];for(const n of r)n.pk!==!0&&n.ref!==void 0&&n.type==="id"&&(e[n.ref]??[]).length===0&&t.push(n.name);return t},Wn=async r=>{const e=await fetch(Hn,{body:JSON.stringify(r),headers:{"Content-Type":"application/json"},method:"POST"}),t=await e.json();return e.ok&&t.rows!==void 0?{kind:"ok",rows:t.rows}:{kind:"error",message:t.error??`seed request failed (${String(e.status)})`}},Zn="rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",Yn="rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground outline-none transition-colors hover:bg-primary/90 focus-visible:bg-primary/90 disabled:pointer-events-none disabled:opacity-50",Xn=({columns:r,fkPools:e,onClose:t,onInsertRows:n,table:s})=>{const o=X(),[a,l]=R(10),[i,d]=R(!1),[u,g]=R(void 0),[b,m]=R(void 0),p=f=>{const x=Number(f.target.value);!Number.isNaN(x)&&x>=1&&l(Math.min(x,xt))},h=async()=>{g(void 0),m(void 0),d(!0);try{const f=await Wn({count:a,existingIds:e,seed:Date.now(),table:s});if(f.kind==="error"){g(f.message);return}const{rows:x}=f;if(x.length===0){g(o("No rows generated — all columns were skipped."));return}const N=await n(x);if(N!==void 0){g(N);return}m(x.length);const _=Un(r,e);_.length>0&&g(o("Inserted {count} rows. Skipped FK columns: {cols}",{cols:_.join(", "),count:x.length.toString()}))}finally{d(!1)}},v=()=>{oe(h())},w=r.filter(f=>f.pk!==!0);return k(zt,{label:o("Generate dummy rows"),onClose:t,panelTestId:"gen-rows-panel",testId:"gen-rows-overlay",variant:"dialog",children:[k("div",{className:"flex items-start justify-between",children:[k("div",{className:"flex flex-col gap-0.5",children:[c("h3",{className:"text-base text-foreground","data-testid":"gen-rows-title",children:o("Generate dummy rows")}),c("p",{className:"text-xs text-muted-foreground","data-testid":"gen-rows-desc",children:o("Seed {table} with Faker-generated rows. Existing rows are not affected.",{table:s})})]}),c("button",{className:"text-xs text-muted-foreground hover:text-foreground","data-testid":"gen-rows-close",onClick:t,type:"button",children:o("Close")})]}),k("div",{className:"flex items-center gap-2",children:[c("label",{className:"text-xs font-medium text-foreground",htmlFor:"gen-rows-count",children:o("Row count")}),c("input",{className:"w-20 rounded-md border border-border bg-background px-2 py-1 text-xs outline-none focus-visible:border-ring","data-testid":"gen-rows-count",id:"gen-rows-count",max:xt,min:1,onChange:p,type:"number",value:a}),c("span",{className:"text-xs text-muted-foreground",children:o("(max {max})",{max:xt.toString()})})]}),w.length>0&&k("div",{className:"flex flex-col gap-1",children:[c("p",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:o("Columns to seed")}),c("ul",{className:"flex flex-col gap-0.5","data-testid":"gen-rows-columns",children:w.map(f=>{const x=f.ref!==void 0&&f.type==="id",N=x&&(e[f.ref??""]??[]).length===0,_=N?"rounded bg-destructive/10 px-1 text-destructive":"rounded bg-muted px-1 text-muted-foreground",$=N?`gen-rows-fk-empty-${f.name}`:`gen-rows-fk-ok-${f.name}`,y=N?o("FK: no rows in {ref} — will skip",{ref:f.ref??""}):o("→ {ref}",{ref:f.ref??""});return k("li",{className:"flex items-center gap-1.5 font-mono text-xs",children:[c("span",{className:"text-foreground",children:f.name}),k("span",{className:"text-muted-foreground",children:["(",f.type,")"]}),f.optional&&c("span",{className:"rounded bg-muted px-1 font-mono text-[10px] tracking-wide uppercase",children:"optional"}),x&&c("span",{className:_,"data-testid":$,children:y})]},f.name)})})]}),u!==void 0&&c("p",{className:"text-xs text-destructive","data-testid":"gen-rows-error",role:"alert",children:u}),b!==void 0&&u===void 0&&c("p",{className:"text-xs text-success","data-testid":"gen-rows-success",children:o("Inserted {count} rows successfully.",{count:b.toString()})}),k("div",{className:"flex justify-end gap-2",children:[c("button",{className:Zn,"data-testid":"gen-rows-cancel",onClick:t,type:"button",children:o("Cancel")}),c("button",{className:Yn,"data-testid":"gen-rows-generate",disabled:i,onClick:v,type:"button",children:o(i?"Inserting…":"Generate & insert")})]})]})},vt=r=>{const e=r[0];return e===void 0?void 0:{column:e.id,direction:e.desc?"desc":"asc"}},qt=r=>r==null?"":typeof r=="object"?JSON.stringify(r):String(r),jt=r=>r.map(e=>({column:e.column,operator:e.operator,value:e.value===void 0?"":qt(e.value)})),Pt=r=>r===void 0?[]:[{desc:r.direction==="desc",id:r.column}],er=200,tr=20,nr=se(W.readTablePage),rr=se(W.facetColumn),yt=se(W.writeRow),or=se(W.deleteRows),lr=se(W.clearTable),ar={},Ct=new Set(["__doc__","__id__","_creationTime","_id","id"]),sr=r=>{const e=r.__doc__;if(typeof e=="string")try{const n=JSON.parse(e);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{}const t={};for(const[n,s]of Object.entries(r))Ct.has(n)||(t[n]=s);return t},ir=({initialFilters:r,initialOrderBy:e,initialSearch:t,initialShardKey:n,onSelectTable:s,onViewChange:o,pageSize:a,tableParam:l})=>{const i=kt(),[d,u]=R(a),[g,b]=R(n??""),m=l===void 0||l===""?null:l,[p,h]=R(0),[v,w]=R("table"),[f,x]=R(()=>Pt(e)),[N,_]=R(t??""),$=Et(N.trim(),300),y=Et(g.trim(),400),[S,E]=R(()=>jt(r??[])),D=U(S);D.current=S;const{clearFacets:L,facets:q,refetchFacets:z,toggleFacet:B}=nn(),[O,j]=R(null),[K,T]=R(null),I=wn(),[P,A]=R(null),[ee,te]=R(!1),Q=Ke(W.listTables,ar,{live:!0,shardKey:y}),ce=Q.data??null,ue=Q.error,pe=Ce(()=>({filters:be(S),limit:d,offset:p,orderBy:vt(f),search:$,skipCount:!0,table:m??""}),[S,d,p,f,$,m]),J=Ce(()=>({filters:be(S),limit:1,search:$,table:m??""}),[S,$,m]),Z=Ke(W.readTablePage,pe,{enabled:m!==null,keepPreviousData:!1,live:!0,shardKey:y}),G=Z.data??null,He=Z.error,{liveError:Qe}=Z,Ue=Ke(W.readTablePage,J,{enabled:m!==null,live:!0,shardKey:y});de(()=>{Q.data!==void 0&&cn(y)},[Q.data,y]);const We=wt(C=>{s?.(C)},[s]),Y=(C,F)=>{s?.(C,{search:F})},ke=async(C,F)=>{try{return(await i.query(nr,{filters:[],limit:tr,offset:0,search:F,table:C},le(y))).rows.find(M=>ae(M)===F)??null}catch{return null}},he=wt((C,F,M,H)=>re=>i.query(rr,{column:re,filters:be(M),search:H,table:F},le(C)),[i]),Ze=C=>{B(C,m===null?null:he(y,m,D.current,$))},$e=(C,F)=>{const M=qt(F);E(H=>[...H.filter(re=>re.column!==C),{column:C,operator:"eq",value:M}]),h(0)},Te=U(he),_e=U(z),xe=U(o);Te.current=he,_e.current=z,xe.current=o,de(()=>{m!==null&&_e.current(Te.current(y,m,S,$))},[y,m,S,$]);const me=U(l);de(()=>{m===null||xe.current===void 0||me.current!==l||xe.current({filters:be(S),orderBy:vt(f),search:$,shard:y})},[m,l,S,f,$,y]);const Ee=U(r),Re=U(e),ne=U(t),De=U(n);Ee.current=r,Re.current=e,ne.current=t,De.current=n,de(()=>{me.current!==l&&(me.current=l,queueMicrotask(()=>{const C=jt(Ee.current??[]);x(Pt(Re.current)),_(ne.current??""),E(C),D.current=C,b(De.current??""),L(),I.clear(),A(null),h(0)}))},[l]);const ge=C=>{m!==null&&h(Math.max(0,C))},Ye=C=>!Ct.has(C),Ie=(C,F)=>{A({column:F,rowId:C})},ie=()=>{A(null)},Me=async()=>{if(m!==null){T(null),te(!0);try{for(const[C,F]of Object.entries(I.staged))await i.query(yt,{doc:F,id:C,op:"patch",table:m},le(y));I.clear(),A(null),Z.refetch()}catch(C){T(C.message)}finally{te(!1)}}},Xe=()=>{I.clear(),A(null)},et=Ce(()=>{const C=new Map;for(const M of G?.rows??[]){const H=ae(M);H!==null&&C.set(H,M)}const F=[];for(const[M,H]of Object.entries(I.staged))for(const[re,Kt]of Object.entries(H))F.push({column:re,newValue:Kt,oldValue:C.get(M)?.[re],rowId:M});return F},[G,I.staged]),Fe=async(C,F,M)=>{if(m===null)return;T(null);let H;if(C!=="delete")try{H=M===void 0||M.trim()===""?{}:JSON.parse(M)}catch(re){T(`Invalid JSON: ${re.message}`);return}try{await i.query(yt,{doc:H,id:F??void 0,op:C,table:m},le(y)),j(null),Z.refetch()}catch(re){T(re.message)}},ve=async(C,F)=>{if(m!==null){T(null);try{for(let M=0;M<er&&(await i.query(C,F,le(y))).hasMore;M+=1);h(0),Z.refetch()}catch(M){T(M.message)}}},Oe=qn(G,f,C=>{x(C),h(0)}),tt={filters:be(S),orderBy:vt(f),search:$,shard:g,table:m??void 0},je=Ue.data?.total??(G===null?0:p+G.rows.length),nt=p>0,rt=G!==null&&p+G.rows.length<je,ot=G===null||G.rows.length===0?0:p+1,lt=G===null?0:p+G.rows.length,Pe=()=>{Q.refetch()},ze=()=>{w("table")},at=()=>{w("json")},ye=()=>{oe(ve(or,{filters:be(D.current),search:$,table:m}))},st=()=>{oe(ve(lr,{table:m}))},it=C=>{_(C.target.value),h(0)},dt=C=>{E(C),h(0)},Ae=()=>{T(null);const C={};for(const F of G?.columns??[])Ct.has(F)||(C[F]="");j({docText:JSON.stringify(C,null,2),id:""})},ct=C=>{j(F=>F===null?F:{docText:C,id:F.id})},ut=()=>{O!==null&&oe(Fe(O.id===""?"insert":"patch",O.id===""?null:O.id,O.docText))},mt=()=>{j(null),T(null)},Ve=()=>{ge(p-d)},we=()=>{ge(p+d)},Ne=C=>{ge(Math.max(0,(C-1)*d))},Le=C=>{u(C),h(0)},gt=(C,F)=>{T(null),j({docText:JSON.stringify(sr(F),null,2),id:C})},bt=C=>{oe(Fe("delete",C))},Be=async C=>{if(!(m===null||C.length===0)){T(null);try{for(const F of C)await i.query(yt,{id:F,op:"delete",table:m},le(y));Z.refetch()}catch(F){T(F.message)}}},ft=C=>{oe(Be(C))},pt=()=>{oe(Me())};return{addRow:Ae,bulkDelete:ye,cancelCellEdit:ie,cancelEdit:mt,changePageSize:Le,clearTable:st,columns:G?.columns??[],committing:ee,currentView:tt,discardStaged:Xe,editableColumn:Ye,editing:O,editingCell:P,facetFilter:$e,facets:q,filter:N,filters:S,goNext:we,goPrevious:Ve,hasNext:rt,hasPrevious:nt,jumpToPage:Ne,liveError:Qe,loadTables:Pe,navigateToRef:Y,onBulkDeleteSelected:ft,onCommitStaged:pt,onFilterChange:it,onFiltersChange:dt,onRowDelete:bt,onRowEdit:gt,page:G,previewRef:ke,pageError:He,pageSize:d,rangeEnd:lt,rangeStart:ot,saveEdit:ut,selectedTable:m,selectTable:We,setEditorDocumentText:ct,setShardKey:b,shardKey:g,showJson:at,showTable:ze,stage:I.stage,stagedChanges:et,stagedValue:I.stagedValue,startCellEdit:Ie,table:Oe,tables:ce,tablesError:ue,toggleFacet:Ze,total:je,viewMode:v,writeError:K}},dr=se(W.describeTable),cr=se(W.readTablePage),ur=se(W.writeRow),mr=r=>{const e=r._id??r.id??r.__id__??"";return typeof e=="string"?e:typeof e=="number"?String(e):""},gr=r=>{const e=kt(),[t,n]=R(!1),[s,o]=R(void 0),[a,l]=R(void 0),[i,d]=R(void 0),[u,g]=R({}),[b,m]=R(!1),[p,h]=R(void 0),v=async(w,f)=>{n(!0),o(w),l(f),d(void 0),g({}),h(void 0),m(!0);try{const x=await e.query(dr,{table:w},le(f)),{columns:N}=x;d(N);const _={},$=N.filter(y=>y.ref!==void 0&&y.type==="id"&&y.pk!==!0);for(const y of $){if(y.ref===void 0)continue;const{ref:S}=y;if(_[S]===void 0)try{const E=await e.query(cr,{filters:[],limit:Qn,offset:0,search:"",table:S},le(f));_[S]=E.rows.map(D=>mr(D)).filter(Boolean)}catch{_[S]=[]}}g(_)}catch(x){h(x.message)}finally{m(!1)}};return{closeDialog:()=>{n(!1),o(void 0),l(void 0),d(void 0),g({}),h(void 0)},columnMeta:i,error:p,fkPools:u,insertBatch:async(w,f)=>{if(s===void 0||a===void 0)return"No table selected.";try{for(const x of w)await e.query(ur,{doc:x,op:"insert",table:s},le(a));f(),r();return}catch(x){return x.message}},loading:b,open:t,openDialog:(w,f)=>{oe(v(w,f))},shardKey:a,table:s}},br=[],fr=()=>{const r=V(1);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={},r[0]=e):e=r[0];const{data:t}=Ke(W.maskPolicies,e);return Array.isArray(t?.columns)?t.columns:br},pr=/(?:_creationtime|(?:^|[a-z])(?:time|at))$/iu,hr=(r,e)=>typeof e=="number"&&pr.test(r),xr=r=>{const e=V(26),{column:t,onNavigate:n,target:s,value:o}=r;let a;e[0]!==n||e[1]!==s||e[2]!==o?(a=()=>{s!==void 0&&n(s,String(o))},e[0]=n,e[1]=s,e[2]=o,e[3]=a):a=e[3];const l=a;if(o==null){let u;return e[4]===Symbol.for("react.memo_cache_sentinel")?(u=c("span",{className:"italic text-muted-foreground",children:"null"}),e[4]=u):u=e[4],u}if(s!==void 0&&(typeof o=="string"||typeof o=="number")&&String(o)!==""){const u=`rd-ref-${t}`,g=`Open ${s} ${String(o)}`,b=String(o);let m;return e[5]!==l||e[6]!==u||e[7]!==g||e[8]!==b?(m=k("button",{"data-testid":u,onClick:l,title:g,type:"button",children:[b," ↗"]}),e[5]=l,e[6]=u,e[7]=g,e[8]=b,e[9]=m):m=e[9],m}if(hr(t,o)){const u=`rd-ts-${t}`;let g;e[10]!==o?(g=o.toString(),e[10]=o,e[11]=g):g=e[11];let b;e[12]!==o?(b=Ht(o),e[12]=o,e[13]=b):b=e[13];let m;return e[14]!==u||e[15]!==g||e[16]!==b?(m=c("span",{"data-testid":u,title:g,children:b}),e[14]=u,e[15]=g,e[16]=b,e[17]=m):m=e[17],m}if(typeof o=="object"){let u;e[18]!==o?(u=JSON.stringify(o,null,2),e[18]=o,e[19]=u):u=e[19];let g;return e[20]!==u?(g=c("pre",{className:"m-0 overflow-auto rounded-md bg-muted/50 p-2 text-xs",children:u}),e[20]=u,e[21]=g):g=e[21],g}let i;e[22]!==o?(i=fe(o),e[22]=o,e[23]=i):i=e[23];let d;return e[24]!==i?(d=c("span",{children:i}),e[24]=i,e[25]=d):d=e[25],d},vr=r=>{const e=V(21),{columns:t,onClose:n,onNavigate:s,refs:o,row:a}=r;let l;e[0]!==n||e[1]!==s?(l=(p,h)=>{s(p,h),n()},e[0]=n,e[1]=s,e[2]=l):l=e[2];const i=l;let d;e[3]===Symbol.for("react.memo_cache_sentinel")?(d=c("h3",{className:"m-0 text-base text-foreground",children:"Row detail"}),e[3]=d):d=e[3];let u;e[4]!==n?(u=k("div",{className:"mb-3 flex items-center justify-between",children:[d,c("button",{"data-testid":"rd-close",onClick:n,type:"button",children:"Close"})]}),e[4]=n,e[5]=u):u=e[5];let g;if(e[6]!==t||e[7]!==i||e[8]!==o||e[9]!==a){let p;e[11]!==i||e[12]!==o||e[13]!==a?(p=h=>k("div",{className:"border-t border-border py-2 first:border-t-0","data-testid":`rd-field-${h}`,children:[c("dt",{className:"mb-0.5 text-xs font-semibold text-muted-foreground",children:h}),c("dd",{className:"m-0",children:c(xr,{column:h,onNavigate:i,target:o?.[h],value:a[h]})})]},h),e[11]=i,e[12]=o,e[13]=a,e[14]=p):p=e[14],g=t.map(p),e[6]=t,e[7]=i,e[8]=o,e[9]=a,e[10]=g}else g=e[10];let b;e[15]!==g?(b=c("dl",{"data-testid":"rd-fields",children:g}),e[15]=g,e[16]=b):b=e[16];let m;return e[17]!==n||e[18]!==u||e[19]!==b?(m=k(zt,{label:"Row detail",onClose:n,panelTestId:"rd-panel",testId:"rd-overlay",variant:"drawer",children:[u,b]}),e[17]=n,e[18]=u,e[19]=b,e[20]=m):m=e[20],m},qe="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground disabled:pointer-events-none disabled:opacity-50",Ge="w-full rounded-md border border-border bg-background px-2 py-1 font-mono text-xs outline-none focus-visible:border-ring",yr=/(?:_creationtime|(?:^|[a-z])(?:time|at))$/iu,wr=(r,e)=>typeof e=="boolean"?"boolean":typeof e=="number"?yr.test(r)?"date":"number":e!==null&&typeof e=="object"?"json":"text",Nr=r=>{try{const e=JSON.parse(r);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}catch{return null}},Sr=r=>{const e=new Date(r),t=n=>String(n).padStart(2,"0");return`${e.getFullYear().toString()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`},Cr=r=>{const e=V(8),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{n(t,u)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=s===!0,i=`db-field-${t}`;let d;return e[3]!==t||e[4]!==a||e[5]!==l||e[6]!==i?(d=c($t,{"aria-label":t,checked:l,"data-testid":i,onCheckedChange:a}),e[3]=t,e[4]=a,e[5]=l,e[6]=i,e[7]=d):d=e[7],d},kr=r=>{const e=V(7),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{const g=Number(u.target.value);u.target.value!==""&&!Number.isNaN(g)&&n(t,g)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`,i=typeof s=="number"?s:"";let d;return e[3]!==a||e[4]!==l||e[5]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"number",value:i}),e[3]=a,e[4]=l,e[5]=i,e[6]=d):d=e[6],d},$r=r=>{const e=V(9),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{const g=new Date(u.target.value).getTime();Number.isNaN(g)||n(t,g)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`;let i;e[3]!==s?(i=typeof s=="number"?Sr(s):"",e[3]=s,e[4]=i):i=e[4];let d;return e[5]!==a||e[6]!==l||e[7]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"datetime-local",value:i}),e[5]=a,e[6]=l,e[7]=i,e[8]=d):d=e[8],d},Tr=r=>{const e=V(7),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{n(t,u.target.value)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`,i=typeof s=="string"?s:"";let d;return e[3]!==a||e[4]!==l||e[5]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"text",value:i}),e[3]=a,e[4]=l,e[5]=i,e[6]=d):d=e[6],d},_r=r=>{const e=V(19),{column:t,onChange:n,value:s}=r,o=X();let a;e[0]!==s?(a=()=>JSON.stringify(s,null,2),e[0]=s,e[1]=a):a=e[1];const[l,i]=R(a),[d,u]=R(!1);let g;e[2]!==t||e[3]!==n?(g=x=>{const N=x.target.value;i(N);try{n(t,JSON.parse(N)),u(!1)}catch{u(!0)}},e[2]=t,e[3]=n,e[4]=g):g=e[4];const b=g,m=d&&"border-destructive";let p;e[5]!==m?(p=Tt(Ge,"min-h-16",m),e[5]=m,e[6]=p):p=e[6];const h=`db-field-${t}`;let v;e[7]!==b||e[8]!==p||e[9]!==h||e[10]!==l?(v=c("textarea",{className:p,"data-testid":h,onChange:b,value:l}),e[7]=b,e[8]=p,e[9]=h,e[10]=l,e[11]=v):v=e[11];let w;e[12]!==t||e[13]!==d||e[14]!==o?(w=d&&c("span",{className:"text-xs text-destructive","data-testid":`db-field-error-${t}`,children:o("Invalid JSON")}),e[12]=t,e[13]=d,e[14]=o,e[15]=w):w=e[15];let f;return e[16]!==v||e[17]!==w?(f=k("div",{className:"flex flex-col gap-1",children:[v,w]}),e[16]=v,e[17]=w,e[18]=f):f=e[18],f},Er=r=>{const e=V(43),{column:t,onChange:n,target:s,value:o}=r;let a;e[0]!==t||e[1]!==o?(a=wr(t,o),e[0]=t,e[1]=o,e[2]=a):a=e[2];const l=a,i=`db-field-${t}`;let d;e[3]!==t?(d=c("span",{className:"font-mono",children:t}),e[3]=t,e[4]=d):d=e[4];let u;e[5]!==s?(u=s!==void 0&&k("span",{className:"rounded bg-muted px-1 font-mono text-[10px] tracking-wide uppercase",children:["→ ",s]}),e[5]=s,e[6]=u):u=e[6];let g;e[7]!==d||e[8]!==u?(g=k("span",{className:"flex items-center gap-1.5 font-medium text-muted-foreground",children:[d,u]}),e[7]=d,e[8]=u,e[9]=g):g=e[9];let b;e[10]!==t||e[11]!==l||e[12]!==n||e[13]!==o?(b=l==="boolean"&&c(Cr,{column:t,onChange:n,value:o}),e[10]=t,e[11]=l,e[12]=n,e[13]=o,e[14]=b):b=e[14];let m;e[15]!==t||e[16]!==l||e[17]!==n||e[18]!==o?(m=l==="number"&&c(kr,{column:t,onChange:n,value:o}),e[15]=t,e[16]=l,e[17]=n,e[18]=o,e[19]=m):m=e[19];let p;e[20]!==t||e[21]!==l||e[22]!==n||e[23]!==o?(p=l==="date"&&c($r,{column:t,onChange:n,value:o}),e[20]=t,e[21]=l,e[22]=n,e[23]=o,e[24]=p):p=e[24];let h;e[25]!==t||e[26]!==l||e[27]!==n||e[28]!==o?(h=l==="json"&&c(_r,{column:t,onChange:n,value:o}),e[25]=t,e[26]=l,e[27]=n,e[28]=o,e[29]=h):h=e[29];let v;e[30]!==t||e[31]!==l||e[32]!==n||e[33]!==o?(v=l==="text"&&c(Tr,{column:t,onChange:n,value:o}),e[30]=t,e[31]=l,e[32]=n,e[33]=o,e[34]=v):v=e[34];let w;return e[35]!==v||e[36]!==i||e[37]!==g||e[38]!==b||e[39]!==m||e[40]!==p||e[41]!==h?(w=k("label",{className:"flex flex-col gap-1 text-xs",htmlFor:i,children:[g,b,m,p,h,v]}),e[35]=v,e[36]=i,e[37]=g,e[38]=b,e[39]=m,e[40]=p,e[41]=h,e[42]=w):w=e[42],w},Rr=r=>{const e=V(48),{documentText:t,onCancel:n,onDocumentTextChange:s,onSave:o,refs:a}=r,l=X();let i;e[0]!==t?(i=Nr(t),e[0]=t,e[1]=i):i=e[1];const d=i,[u,g]=R(!1),b=!u&&d!==null;let m;e[2]!==d||e[3]!==s?(m=(I,P)=>{s(JSON.stringify({...d,[I]:P},null,2))},e[2]=d,e[3]=s,e[4]=m):m=e[4];const p=m;let h;e[5]!==s?(h=I=>{s(I.target.value)},e[5]=s,e[6]=h):h=e[6];const v=h;let w;e[7]===Symbol.for("react.memo_cache_sentinel")?(w=()=>{g(!1)},e[7]=w):w=e[7];const f=w;let x;e[8]===Symbol.for("react.memo_cache_sentinel")?(x=()=>{g(!0)},e[8]=x):x=e[8];const N=x,_=d===null;let $;e[9]!==l?($=l("Form"),e[9]=l,e[10]=$):$=e[10];let y;e[11]!==b||e[12]!==_||e[13]!==$?(y=c("button",{"aria-pressed":b,className:qe,"data-testid":"db-editor-form",disabled:_,onClick:f,type:"button",children:$}),e[11]=b,e[12]=_,e[13]=$,e[14]=y):y=e[14];const S=!b;let E;e[15]!==l?(E=l("JSON"),e[15]=l,e[16]=E):E=e[16];let D;e[17]!==E||e[18]!==S?(D=c("button",{"aria-pressed":S,className:qe,"data-testid":"db-editor-json",onClick:N,type:"button",children:E}),e[17]=E,e[18]=S,e[19]=D):D=e[19];let L;e[20]!==D||e[21]!==y?(L=k("div",{className:"flex items-center gap-1.5",children:[y,D]}),e[20]=D,e[21]=y,e[22]=L):L=e[22];let q;e[23]!==t||e[24]!==d||e[25]!==p||e[26]!==v||e[27]!==a||e[28]!==b||e[29]!==l?(q=b?c("div",{className:"flex flex-col gap-3","data-testid":"db-editor-fields",children:Object.entries(d).map(I=>{const[P,A]=I;return c(Er,{column:P,onChange:p,target:a?.[P],value:A},P)})}):c("textarea",{"aria-label":l("Row document JSON"),className:"min-h-28 w-full rounded-md border border-border bg-background px-2 py-1.5 font-mono text-xs outline-none focus-visible:border-ring","data-testid":"db-editor-doc",onChange:v,value:t}),e[23]=t,e[24]=d,e[25]=p,e[26]=v,e[27]=a,e[28]=b,e[29]=l,e[30]=q):q=e[30];let z;e[31]!==l?(z=l("Save"),e[31]=l,e[32]=z):z=e[32];let B;e[33]!==o||e[34]!==z?(B=c("button",{className:qe,"data-testid":"db-editor-save",onClick:o,type:"button",children:z}),e[33]=o,e[34]=z,e[35]=B):B=e[35];let O;e[36]!==l?(O=l("Cancel"),e[36]=l,e[37]=O):O=e[37];let j;e[38]!==n||e[39]!==O?(j=c("button",{className:qe,"data-testid":"db-editor-cancel",onClick:n,type:"button",children:O}),e[38]=n,e[39]=O,e[40]=j):j=e[40];let K;e[41]!==B||e[42]!==j?(K=k("div",{className:"flex items-center gap-1.5",children:[B,j]}),e[41]=B,e[42]=j,e[43]=K):K=e[43];let T;return e[44]!==L||e[45]!==q||e[46]!==K?(T=k("div",{className:"flex flex-col gap-2 border border-border bg-card p-3","data-testid":"db-editor",children:[L,q,K]}),e[44]=L,e[45]=q,e[46]=K,e[47]=T):T=e[47],T},Dr=50,Ir=r=>{const e=V(8),{active:t,onPick:n,shard:s}=r;let o;e[0]!==n||e[1]!==s?(o=()=>{n(s)},e[0]=n,e[1]=s,e[2]=o):o=e[2];const a=o,l=`w-full rounded px-2 py-0.5 text-left text-xs transition-colors hover:bg-accent ${t?"bg-accent font-medium":""}`,i=`shard-explorer-item-${s}`;let d;return e[3]!==a||e[4]!==s||e[5]!==l||e[6]!==i?(d=c("button",{className:l,"data-testid":i,onClick:a,type:"button",children:s}),e[3]=a,e[4]=s,e[5]=l,e[6]=i,e[7]=d):d=e[7],d},Mr=({onFetchTables:r,onSelect:e})=>{const t=X(),[n]=R(()=>un()),[s,o]=R(!1),[a,l]=R(void 0),[i,d]=R(void 0),[u,g]=R(!1),[b,m]=R(void 0),p=U(0),h=()=>{o(f=>!f)},v=async f=>{e(f),l(f),d(void 0),m(void 0),g(!0),p.current+=1;const x=p.current;try{const N=await r(f);p.current===x&&d(N?.slice(0,Dr))}catch(N){p.current===x&&m(N.message)}finally{p.current===x&&g(!1)}},w=f=>{oe(v(f))};return n.length===0?null:k("div",{"data-testid":"shard-explorer",children:[k("button",{"aria-controls":"shard-explorer-panel","aria-expanded":s,className:"inline-flex items-center gap-1 rounded-md border border-border px-2 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent","data-testid":"shard-explorer-toggle",onClick:h,type:"button",children:[t("Shards seen"),c("span",{"aria-hidden":"true",className:`ml-0.5 transition-transform ${s?"rotate-180":""}`,children:"▾"})]}),s&&k("div",{className:"mt-1 flex flex-col gap-1 rounded-md border border-border bg-popover p-2","data-testid":"shard-explorer-panel",id:"shard-explorer-panel",children:[c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-hint",children:t("Recently visited shards — click to switch")}),c("ul",{className:"flex flex-col gap-0.5","data-testid":"shard-explorer-list",children:n.map(f=>c("li",{children:c(Ir,{active:a===f,onPick:w,shard:f})},f))}),a!==void 0&&k("div",{className:"mt-1 border-t border-border pt-1","data-testid":"shard-explorer-summary",children:[c("p",{className:"mb-1 text-xs font-medium text-foreground","data-testid":"shard-explorer-summary-title",children:t("{shard} tables",{shard:a})}),u&&c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-loading",children:t("Loading…")}),b!==void 0&&c("p",{className:"text-xs text-destructive","data-testid":"shard-explorer-error",role:"alert",children:b}),!u&&b===void 0&&i?.length===0&&c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-empty",children:t("No tables in this shard.")}),!u&&b===void 0&&i!==void 0&&i.length>0&&c("ul",{className:"flex flex-col gap-0.5","data-testid":"shard-explorer-tables",children:i.map(f=>k("li",{className:"flex items-center justify-between text-xs",children:[c("span",{"data-testid":`shard-explorer-table-${f.name}`,children:f.name}),c("span",{className:"text-muted-foreground","data-testid":`shard-explorer-rowcount-${f.name}`,children:f.rowCount})]},f.name))})]})]})]})},Fr=50,Or=[],Se="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50 aria-pressed:bg-accent aria-pressed:text-accent-foreground",jr=se(W.listTables),Pr=r=>{const e=V(10),{onFetchShardTables:t,onShardChange:n,schemaSwitch:s,shardKey:o}=r;let a;e[0]!==n||e[1]!==o?(a=c(Jt,{onChange:n,testId:"db-shard-input",value:o}),e[0]=n,e[1]=o,e[2]=a):a=e[2];let l;e[3]!==t||e[4]!==n?(l=c(Mr,{onFetchTables:t,onSelect:n}),e[3]=t,e[4]=n,e[5]=l):l=e[5];let i;return e[6]!==s||e[7]!==a||e[8]!==l?(i=k("div",{className:"flex shrink-0 flex-col items-stretch gap-2 border-b border-border p-3",children:[s,a,l]}),e[6]=s,e[7]=a,e[8]=l,e[9]=i):i=e[9],i},zr=r=>{const e=V(60),{columns:t,editable:n,filter:s,filters:o,hasMaskedColumns:a,liveError:l,maskOn:i,onAddRow:d,onBulkDelete:u,onClearTable:g,onFilterChange:b,onFiltersChange:m,onGenerateRows:p,onShowJson:h,onShowTable:v,onToggleMask:w,total:f,viewMode:x}=r,N=X(),_=x==="table";let $;e[0]!==v||e[1]!==_?($=c("button",{"aria-pressed":_,className:Se,"data-testid":"db-view-table",onClick:v,type:"button",children:"Table"}),e[0]=v,e[1]=_,e[2]=$):$=e[2];const y=x==="json";let S;e[3]!==h||e[4]!==y?(S=c("button",{"aria-pressed":y,className:Se,"data-testid":"db-view-json",onClick:h,type:"button",children:"JSON"}),e[3]=h,e[4]=y,e[5]=S):S=e[5];let E;e[6]!==l||e[7]!==N?(E=l===void 0?N("Live — changes stream in automatically"):N("Live unavailable: {liveError}",{liveError:l}),e[6]=l,e[7]=N,e[8]=E):E=e[8];const D=`size-1.5 rounded-full ${l===void 0?"bg-success":"bg-muted-foreground/50"}`;let L;e[9]!==D?(L=c("span",{"aria-hidden":"true",className:D}),e[9]=D,e[10]=L):L=e[10];let q;e[11]!==l||e[12]!==N?(q=N(l===void 0?"Live":"Live unavailable"),e[11]=l,e[12]=N,e[13]=q):q=e[13];let z;e[14]!==E||e[15]!==L||e[16]!==q?(z=k("span",{className:"inline-flex items-center gap-1.5 px-1 text-xs font-medium text-muted-foreground","data-testid":"db-live-indicator",role:"status",title:E,children:[L,q]}),e[14]=E,e[15]=L,e[16]=q,e[17]=z):z=e[17];let B;e[18]!==a||e[19]!==i||e[20]!==w||e[21]!==N?(B=a&&c("button",{"aria-pressed":i,className:Se,"data-testid":"db-mask-toggle",onClick:w,type:"button",children:N("Mask sensitive columns")}),e[18]=a,e[19]=i,e[20]=w,e[21]=N,e[22]=B):B=e[22];let O;e[23]!==n||e[24]!==d?(O=n&&c("button",{className:Se,"data-testid":"db-add-row",onClick:d,type:"button",children:"Add row"}),e[23]=n,e[24]=d,e[25]=O):O=e[25];let j;e[26]!==n||e[27]!==p||e[28]!==N?(j=n&&c("button",{className:Se,"data-testid":"db-generate-rows",onClick:p,type:"button",children:N("Generate rows")}),e[26]=n,e[27]=p,e[28]=N,e[29]=j):j=e[29];let K;e[30]!==n||e[31]!==s||e[32]!==o||e[33]!==u||e[34]!==f?(K=n&&f>0&&(s!==""||o.length>0)&&c(Nt,{confirmLabel:`Delete ${f.toString()} matching?`,onConfirm:u,testId:"db-bulk-delete",children:`Delete ${f.toString()} matching`}),e[30]=n,e[31]=s,e[32]=o,e[33]=u,e[34]=f,e[35]=K):K=e[35];let T;e[36]!==n||e[37]!==s||e[38]!==o||e[39]!==g||e[40]!==f?(T=n&&f>0&&s===""&&o.length===0&&c(Nt,{confirmLabel:`Clear all ${f.toString()} rows?`,onConfirm:g,testId:"db-clear-table",children:`Clear table (${f.toString()})`}),e[36]=n,e[37]=s,e[38]=o,e[39]=g,e[40]=f,e[41]=T):T=e[41];let I;e[42]!==B||e[43]!==O||e[44]!==j||e[45]!==K||e[46]!==T||e[47]!==$||e[48]!==S||e[49]!==z?(I=k("div",{className:"flex flex-wrap items-center gap-1.5",children:[$,S,z,B,O,j,K,T]}),e[42]=B,e[43]=O,e[44]=j,e[45]=K,e[46]=T,e[47]=$,e[48]=S,e[49]=z,e[50]=I):I=e[50];let P;e[51]!==t||e[52]!==s||e[53]!==o||e[54]!==b||e[55]!==m?(P=c(an,{columns:t,filters:o,onFiltersChange:m,onSearchChange:b,search:s}),e[51]=t,e[52]=s,e[53]=o,e[54]=b,e[55]=m,e[56]=P):P=e[56];let A;return e[57]!==I||e[58]!==P?(A=k("div",{className:"flex flex-col gap-2","data-testid":"db-view-toggle",children:[I,P]}),e[57]=I,e[58]=P,e[59]=A):A=e[59],A},io=({editable:r=!1,globalTableNames:e,initialFilters:t,initialOrderBy:n,initialSearch:s,initialShardKey:o,onNavigateToGlobal:a,onSelectTable:l,onViewChange:i,pageSize:d=Fr,queryBar:u,schemaSwitch:g,tableParam:b})=>{const{addRow:m,bulkDelete:p,cancelCellEdit:h,cancelEdit:v,changePageSize:w,clearTable:f,columns:x,committing:N,currentView:_,discardStaged:$,editableColumn:y,editing:S,editingCell:E,facetFilter:D,facets:L,filter:q,filters:z,goNext:B,goPrevious:O,hasNext:j,hasPrevious:K,jumpToPage:T,liveError:I,loadTables:P,navigateToRef:A,onBulkDeleteSelected:ee,onCommitStaged:te,onFilterChange:Q,onFiltersChange:ce,onRowDelete:ue,onRowEdit:pe,page:J,pageError:Z,previewRef:G,pageSize:He,rangeEnd:Qe,rangeStart:Ue,saveEdit:We,selectedTable:Y,selectTable:ke,setEditorDocumentText:he,setShardKey:Ze,shardKey:$e,showJson:Te,showTable:_e,stage:xe,stagedChanges:me,stagedValue:Ee,startCellEdit:Re,table:ne,tables:De,tablesError:ge,toggleFacet:Ye,total:Ie,viewMode:ie,writeError:Me}=ir({initialFilters:t,initialOrderBy:n,initialSearch:s,initialShardKey:o,onSelectTable:l,onViewChange:i,pageSize:d,tableParam:b}),Xe=kt(),et=async M=>await Xe.query(jr,{},le(M)),Fe=()=>{Y!==null&&ke(Y)},{closeDialog:ve,columnMeta:Oe,fkPools:tt,insertBatch:je,open:nt,openDialog:rt}=gr(Fe),ot=()=>{Y!==null&&rt(Y,$e)},lt=M=>je(M,ve),[Pe,ze]=R(null),at=()=>{ze(null)},[ye,st]=R(!1),it=()=>{st(M=>!M)},dt=fr(),[Ae,ct]=R(!0),ut=()=>{ct(M=>!M)},mt=hn(dt,Y??""),Ve=vn(mt,x),we={columns:Ve,enabled:Ae},[Ne,Le]=R(null),gt=(M,H)=>{Le({column:M,value:H})},bt=()=>{Le(null)},Be=(M,H)=>{if(a!==void 0&&e?.has(M)===!0){a(M,H);return}A(M,H)},ft=u?.onSaveQuery,pt=M=>{ft?.(M,_)},C={cancelEdit:h,editable:r,editableColumn:y,editingCell:E,onExpandCell:gt,stage:xe,stagedValue:Ee,startEdit:Re},F={columns:J?.refs,onNavigate:Be,onPreview:G};return k("div",{className:"flex h-full min-w-0","data-testid":"lunora-data-browser",children:[c(rn,{header:c(Pr,{onFetchShardTables:et,onShardChange:Ze,schemaSwitch:g,shardKey:$e}),onReload:P,onSelect:ke,prefix:"db",selected:Y,tables:De??Or}),k("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[ge!==null&&c("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"db-tables-error",role:"alert",children:ge}),J===null&&Z===null&&c("div",{className:"flex flex-1 items-center justify-center p-6",children:c("p",{className:"text-sm text-muted-foreground",children:"Select a table to browse its rows."})}),Z!==null&&c("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"db-page-error",role:"alert",children:Z}),J!==null&&k("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"db-page",children:[k("div",{className:"flex shrink-0 flex-col gap-2 border-b border-border px-4 py-3",children:[c(zr,{columns:x,editable:r,filter:q,filters:z,hasMaskedColumns:Ve.size>0,liveError:I,maskOn:Ae,onAddRow:m,onBulkDelete:p,onClearTable:f,onFilterChange:Q,onFiltersChange:ce,onGenerateRows:ot,onShowJson:Te,onShowTable:_e,onToggleMask:ut,total:Ie,viewMode:ie}),u!==void 0&&c(Gn,{onApply:u.onApplyQuery,onCopyLink:u.onCopyLink,onDelete:u.onDeleteQuery,onSave:pt,saved:u.saved}),ie==="table"&&J.rows.length>0&&c(sn,{columns:J.columns,editable:r,name:Y??"export",onBulkDelete:ee,onToggleTranspose:it,rows:J.rows,table:ne.table,transposed:ye}),r&&S!==null&&c(Rr,{documentText:S.docText,onCancel:v,onDocumentTextChange:he,onSave:We,refs:J.refs}),r&&me.length>0&&c(Sn,{changes:me,committing:N,onCommit:te,onDiscard:$}),Me!==null&&c("p",{className:"text-sm text-destructive","data-testid":"db-write-error",role:"alert",children:Me})]}),ie==="table"&&J.rows.length===0&&c("div",{className:"flex flex-1 items-center justify-center p-6",children:c(Gt,{description:"Rows you insert into this table will show up here.",icon:c("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:c("path",{d:"M4 5h16v14H4V5Zm0 5h16M10 10v9M4 14.5h16"})}),testId:"db-empty-rows",title:"This table is empty."})}),ie==="table"&&J.rows.length>0&&ye&&c(tn,{columns:J.columns,rows:Dt(J.rows,we)}),ie==="table"&&J.rows.length>0&&!ye&&c(Bn,{edit:C,editable:r,mask:we,onDelete:ue,onEdit:pe,onInspect:ze,refs:F,scrollRef:ne.scrollRef,scrollToIndex:ne.scrollToIndex,table:ne.table,tableRows:ne.tableRows,tbodyStyle:ne.tbodyStyle,virtualRows:ne.virtualRows}),ie==="json"&&c("pre",{className:"min-h-0 flex-1 overflow-auto border-t border-border bg-muted/30 p-3 text-xs","data-testid":"db-json",children:JSON.stringify(Dt(J.rows,we),null,2)}),c("div",{className:"flex shrink-0 items-center border-t border-border px-4 py-2",children:c(on,{hasNext:j,hasPrevious:K,onJumpToPage:T,onNext:B,onPageSizeChange:w,onPrevious:O,pageSize:He,prefix:"db",rangeEnd:Qe,rangeStart:Ue,total:Ie})})]})]}),J!==null&&c(ln,{columns:x,facets:L,onFacetFilter:D,onToggleFacet:Ye}),Pe!==null&&J!==null&&c(vr,{columns:J.columns,onClose:at,onNavigate:Be,refs:J.refs,row:Pe}),Ne!==null&&c(dn,{column:Ne.column,onClose:bt,value:Ne.value}),nt&&Y!==null&&Oe!==void 0&&c(Xn,{columns:Oe,fkPools:tt,onClose:ve,onInsertRows:lt,table:Y})]})};export{io as DataBrowser};
1
+ import{c as V}from"react/compiler-runtime";import{useLunora as kt}from"@lunora/react";import{useState as R,useRef as U,useEffect as de,useMemo as Ce,useCallback as wt}from"react";import{ConfirmButton as Nt}from"./ConfirmButton-CTL3f3kr.js";import{ShardInput as Jt}from"./ShardInput-BVn2iCU0.js";import{E as Gt}from"./empty-state-Cg7t_8qu.js";import{useT as X}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"./ADMIN_FUNCTIONS-CpgIo9pj.js";import{h as fe,f as oe,c as le,a as se,i as Ht}from"./internal-AtZ4bTal.js";import{useReactTable as Qt,getSortedRowModel as Ut,getCoreRowModel as Wt,flexRender as Zt}from"@tanstack/react-table";import{useVirtualizer as Yt}from"@tanstack/react-virtual";import{f as $t}from"./checkbox-StT4Gob6.js";import{c as Tt}from"./utils-bhneXptQ.js";import{l as Xt}from"./virtual-rect-1o1veP7R.js";import{_ as en,y as ht,v as tn}from"./data-grid-BMBKzMEJ.js";import{jsx as c,jsxs as k,Fragment as Je}from"react/jsx-runtime";import{u as nn,_ as rn,a as on,$ as ln}from"./table-list-sidebar-CMCcNALK.js";import{toFilterClauses as be,DataFilters as an}from"./DataFilters-Csb30F0C.js";import{M as zt}from"./modal-shell-CUwwWC2o.js";import{n as sn,l as dn}from"./grid-features-uZCUj955.js";import{K as Ke}from"./use-admin-query-Di3fLE8H.js";import Et from"./useDebounced-Ihdiid_k.js";import{r as cn,l as un}from"./shard-history-DMEW5VBE.js";const mn=/([a-z\d])([A-Z])/gu,gn=/[\s_-]+/u,bn=new Set(["access_token","api_key","apikey","card_number","client_secret","credit_card","cvv","passwd","password","private_key","pwd","refresh_token","secret","ssn","token"]),fn=r=>{const e=r.replaceAll(mn,"$1 $2").split(gn).map(n=>n.toLowerCase()).filter(n=>n.length>0),t=new Set(e);for(let n=0;n<e.length-1;n+=1){const s=e[n],o=e[n+1];s===void 0||o===void 0||(t.add(`${s}${o}`),t.add(`${s}_${o}`))}return[...t]},Rt="•••",pn=r=>{let e=2166136261;for(let t=0;t<r.length;t+=1)e^=r.codePointAt(t)??0,e=Math.imul(e,16777619);return(e>>>0).toString(16).padStart(8,"0")},At=(r,e)=>{try{return e==="redact"?null:e==="hash"?r==null?r:pn(typeof r=="string"?r:JSON.stringify(r)):Rt}catch{return Rt}},hn=(r,e)=>{const t=new Map;for(const n of r)n.table===e&&t.set(n.column,n.strategy);return t},xn=r=>{for(const e of fn(r))if(bn.has(e))return!0;return!1},vn=(r,e)=>{const t=e.filter(s=>!r.has(s)&&xn(s));if(t.length===0)return r;const n=new Map(r);for(const s of t)n.set(s,"redact");return n},yn=(r,e,t)=>{if(!t.enabled)return r;const n=t.columns.get(e);return n===void 0?r:At(r,n)},Dt=(r,e)=>!e.enabled||e.columns.size===0?r:r.map(t=>{const n={...t};for(const[s,o]of e.columns)s in n&&(n[s]=At(n[s],o));return n}),wn=()=>{const r=V(11);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={},r[0]=e):e=r[0];const[t,n]=R(e);let s;r[1]===Symbol.for("react.memo_cache_sentinel")?(s=(m,p,h)=>{n(v=>({...v,[m]:{...v[m],[p]:h}}))},r[1]=s):s=r[1];const o=s;let a;r[2]===Symbol.for("react.memo_cache_sentinel")?(a=()=>{n({})},r[2]=a):a=r[2];const l=a;let i;r[3]!==t?(i=(m,p)=>{const h=t[m];return h!==void 0&&p in h?{value:h[p]}:void 0},r[3]=t,r[4]=i):i=r[4];const d=i;let u;r[5]!==t?(u=Object.values(t).reduce(Cn,0),r[5]=t,r[6]=u):u=r[6];const g=u;let b;return r[7]!==g||r[8]!==t||r[9]!==d?(b={clear:l,count:g,stage:o,staged:t,stagedValue:d},r[7]=g,r[8]=t,r[9]=d,r[10]=b):b=r[10],b},Nn=(r,e)=>{if(typeof e=="number"){const t=Number(r);return r.trim()===""||Number.isNaN(t)?r:t}if(typeof e=="boolean"){if(r==="true")return!0;if(r==="false")return!1}return r},Sn=r=>{const e=V(29),{changes:t,committing:n,onCommit:s,onDiscard:o}=r,a=X();let l;e[0]!==t.length||e[1]!==a?(l=a("{count} pending changes",{count:t.length}),e[0]=t.length,e[1]=a,e[2]=l):l=e[2];let i;e[3]!==l?(i=c("span",{className:"font-mono text-[11px] tracking-wide uppercase text-warning","data-testid":"db-staged-count",children:l}),e[3]=l,e[4]=i):i=e[4];let d;e[5]!==n||e[6]!==a?(d=a(n?"Committing…":"Commit"),e[5]=n,e[6]=a,e[7]=d):d=e[7];let u;e[8]!==n||e[9]!==s||e[10]!==d?(u=c("button",{className:"ms-auto rounded-md bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground outline-none transition-colors hover:bg-primary/90 focus-visible:bg-primary/90 disabled:pointer-events-none disabled:opacity-50","data-testid":"db-staged-commit",disabled:n,onClick:s,type:"button",children:d}),e[8]=n,e[9]=s,e[10]=d,e[11]=u):u=e[11];let g;e[12]!==a?(g=a("Discard"),e[12]=a,e[13]=g):g=e[13];let b;e[14]!==n||e[15]!==o||e[16]!==g?(b=c("button",{className:"rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50","data-testid":"db-staged-discard",disabled:n,onClick:o,type:"button",children:g}),e[14]=n,e[15]=o,e[16]=g,e[17]=b):b=e[17];let m;e[18]!==i||e[19]!==u||e[20]!==b?(m=k("div",{className:"flex flex-wrap items-center gap-2",children:[i,u,b]}),e[18]=i,e[19]=u,e[20]=b,e[21]=m):m=e[21];let p;e[22]!==t?(p=t.map(kn),e[22]=t,e[23]=p):p=e[23];let h;e[24]!==p?(h=c("ul",{className:"flex flex-col gap-1","data-testid":"db-staged-list",children:p}),e[24]=p,e[25]=h):h=e[25];let v;return e[26]!==m||e[27]!==h?(v=k("div",{className:"flex flex-col gap-2 border border-warning/40 bg-warning/5 p-3","data-testid":"db-staged",children:[m,h]}),e[26]=m,e[27]=h,e[28]=v):v=e[28],v};function Cn(r,e){return r+Object.keys(e).length}function kn(r){return k("li",{className:"flex flex-wrap items-center gap-2 font-mono text-xs",children:[k("span",{className:"text-muted-foreground",children:[r.rowId,".",r.column]}),c("span",{className:"text-destructive line-through",children:fe(r.oldValue)}),c("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"→"}),c("span",{className:"text-foreground",children:fe(r.newValue)})]},`${r.rowId}:${r.column}`)}const It=400,$n=36,Tn={flex:"1 1 0%",minHeight:0,overflow:"auto",position:"relative"},_n={width:"100%"},En={alignItems:"center",display:"flex",left:0,position:"absolute",top:0,width:"100%"},Rn={display:"flex",width:"100%"},Mt={flex:"0 0 8.5rem",padding:"0.375rem 0.75rem"},Dn="2.5rem",Vt={alignItems:"center",display:"flex",flex:"0 0 2.5rem",justifyContent:"center",left:0,padding:"0.375rem 0",position:"sticky",zIndex:2},_t=r=>({flex:"0 0 auto",overflow:"hidden",padding:"0.375rem 0.75rem",position:"relative",textOverflow:"ellipsis",whiteSpace:"nowrap",width:`${r.toString()}px`}),Lt=r=>({..._t(r),left:Dn,position:"sticky",zIndex:2}),Ft="rounded-md px-2 py-0.5 text-xs font-medium text-muted-foreground outline-none transition-colors hover:bg-accent hover:text-foreground focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",ae=r=>{for(const e of["id","__id__","_id"]){const t=r[e];if(typeof t=="string"||typeof t=="number")return String(t)}return null},Bt=(r,e)=>ae(r)??`row-${e.toString()}`,In=8,Mn=r=>{const e=V(16),{anchor:t,state:n}=r,s=X();let o;e[0]!==t.left||e[1]!==t.top?(o={left:t.left,position:"fixed",top:t.top,zIndex:50},e[0]=t.left,e[1]=t.top,e[2]=o):o=e[2];const a=o;let l;if(n==="loading"){let d;e[3]!==s?(d=s("Loading…"),e[3]=s,e[4]=d):d=e[4];let u;e[5]!==d?(u=c("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:d}),e[5]=d,e[6]=u):u=e[6],l=u}else if(n.row===null){let d;e[7]!==s?(d=s("No matching row."),e[7]=s,e[8]=d):d=e[8];let u;e[9]!==d?(u=c("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:d}),e[9]=d,e[10]=u):u=e[10],l=u}else{let d;if(e[11]!==n.row){const u=Object.entries(n.row).slice(0,In);d=c("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 px-3 py-2",children:u.map(Kn)}),e[11]=n.row,e[12]=d}else d=e[12];l=d}let i;return e[13]!==l||e[14]!==a?(i=c("div",{className:"pointer-events-none w-72 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground","data-testid":"db-ref-preview",role:"tooltip",style:a,children:l}),e[13]=l,e[14]=a,e[15]=i):i=e[15],i},Fn=r=>{const e=V(22),{column:t,id:n,onNavigate:s,onPreview:o,target:a}=r,[l,i]=R(null),[d,u]=R("idle");let g;e[0]!==n||e[1]!==s||e[2]!==a?(g=()=>{s(a,n)},e[0]=n,e[1]=s,e[2]=a,e[3]=g):g=e[3];const b=g;let m;e[4]!==n||e[5]!==o||e[6]!==d||e[7]!==a?(m=$=>{const y=$.currentTarget.getBoundingClientRect();i({left:y.left,top:y.bottom+4}),d==="idle"&&(u("loading"),oe((async()=>{try{u({row:await o(a,n)})}catch{u({row:null})}})()))},e[4]=n,e[5]=o,e[6]=d,e[7]=a,e[8]=m):m=e[8];const p=m;let h;e[9]===Symbol.for("react.memo_cache_sentinel")?(h=()=>{i(null)},e[9]=h):h=e[9];const v=h,w=`db-ref-${t}`,f=`Open ${a} ${n}`;let x;e[10]!==n||e[11]!==b||e[12]!==p||e[13]!==w||e[14]!==f?(x=k("button",{"data-testid":w,onBlur:v,onClick:b,onFocus:p,onMouseEnter:p,onMouseLeave:v,title:f,type:"button",children:[n," ↗"]}),e[10]=n,e[11]=b,e[12]=p,e[13]=w,e[14]=f,e[15]=x):x=e[15];let N;e[16]!==l||e[17]!==d?(N=l!==null&&d!=="idle"&&c(Mn,{anchor:l,state:d}),e[16]=l,e[17]=d,e[18]=N):N=e[18];let _;return e[19]!==x||e[20]!==N?(_=k(Je,{children:[x,N]}),e[19]=x,e[20]=N,e[21]=_):_=e[21],_},On=r=>r==="asc"?" ▲":r==="desc"?" ▼":"",jn="absolute end-1 top-1/2 hidden -translate-y-1/2 items-center justify-center rounded text-muted-foreground outline-none group-hover/cell:flex hover:text-foreground focus-visible:flex",Ot=r=>{const e=V(8),{column:t,onExpand:n,value:s}=r;let o;e[0]!==t||e[1]!==n||e[2]!==s?(o=()=>{n(t,s)},e[0]=t,e[1]=n,e[2]=s,e[3]=o):o=e[3];const a=o,l=`db-expand-${t}`;let i;e[4]===Symbol.for("react.memo_cache_sentinel")?(i=c("svg",{"aria-hidden":"true",className:"size-3",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.8,viewBox:"0 0 24 24",children:c("path",{d:"M9 21H5a2 2 0 0 1-2-2v-4m18 0v4a2 2 0 0 1-2 2h-4M3 9V5a2 2 0 0 1 2-2h4m6 0h4a2 2 0 0 1 2 2v4"})}),e[4]=i):i=e[4];let d;return e[5]!==a||e[6]!==l?(d=c("button",{"aria-label":"Expand cell",className:jn,"data-testid":l,onClick:a,type:"button",children:i}),e[5]=a,e[6]=l,e[7]=d):d=e[7],d},Pn=r=>{const e=V(14),{column:t,initial:n,onCancel:s,onCommit:o,recordId:a}=r,l=U(null);let i,d;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=()=>{l.current?.select()},d=[],e[0]=i,e[1]=d):(i=e[0],d=e[1]),de(i,d);let u;e[2]!==s||e[3]!==o?(u=w=>{w.key==="Enter"?(w.preventDefault(),o(w.currentTarget.value)):w.key==="Escape"&&(w.preventDefault(),s())},e[2]=s,e[3]=o,e[4]=u):u=e[4];const g=u;let b;e[5]!==o?(b=w=>{o(w.currentTarget.value)},e[5]=o,e[6]=b):b=e[6];const m=b,p=`db-cell-input-${a}-${t}`;let h;e[7]!==n?(h=fe(n),e[7]=n,e[8]=h):h=e[8];let v;return e[9]!==m||e[10]!==g||e[11]!==p||e[12]!==h?(v=c("input",{className:"w-full rounded border border-ring bg-background px-1 py-0.5 font-mono text-xs outline-none","data-testid":p,defaultValue:h,onBlur:m,onKeyDown:g,ref:l}),e[9]=m,e[10]=g,e[11]=p,e[12]=h,e[13]=v):v=e[13],v},zn=r=>{const e=V(63),{cell:t,edit:n,mask:s,refs:o}=r,a=t.column.id;let l,i,d,u;if(e[0]!==t||e[1]!==a||e[2]!==n||e[3]!==s||e[4]!==o.columns||e[5]!==o.onNavigate||e[6]!==o.onPreview){u=Symbol.for("react.early_return_sentinel");e:{i=t.getValue(),l=ae(t.row.original);const y=o.columns?.[a];if(s.enabled&&s.columns.has(a)){const S=`db-masked-${a}`,E=c(ht,{value:yn(i,a,s)});let D;e[11]!==S||e[12]!==E?(D=c("span",{className:"text-muted-foreground italic","data-testid":S,title:"Masked (preview)",children:E}),e[11]=S,e[12]=E,e[13]=D):D=e[13],u=D;break e}if(y!==void 0&&(typeof i=="string"||typeof i=="number")&&String(i)!==""){const S=String(i),E=`${y}:${String(i)}`;let D;e[14]!==a||e[15]!==o.onNavigate||e[16]!==o.onPreview||e[17]!==S||e[18]!==E||e[19]!==y?(D=c(Fn,{column:a,id:S,onNavigate:o.onNavigate,onPreview:o.onPreview,target:y},E),e[14]=a,e[15]=o.onNavigate,e[16]=o.onPreview,e[17]=S,e[18]=E,e[19]=y,e[20]=D):D=e[20],u=D;break e}if(l===null){let S;e[21]!==i?(S=c(ht,{value:i}),e[21]=i,e[22]=S):S=e[22];let E;e[23]!==a||e[24]!==n.onExpandCell||e[25]!==i?(E=c(Ot,{column:a,onExpand:n.onExpandCell,value:i}),e[23]=a,e[24]=n.onExpandCell,e[25]=i,e[26]=E):E=e[26];let D;e[27]!==S||e[28]!==E?(D=k(Je,{children:[S,E]}),e[27]=S,e[28]=E,e[29]=D):D=e[29],u=D;break e}d=n.stagedValue(l,a)}e[0]=t,e[1]=a,e[2]=n,e[3]=s,e[4]=o.columns,e[5]=o.onNavigate,e[6]=o.onPreview,e[7]=l,e[8]=i,e[9]=d,e[10]=u}else l=e[7],i=e[8],d=e[9],u=e[10];if(u!==Symbol.for("react.early_return_sentinel"))return u;const g=d,b=g===void 0?i:g.value;let m;e[30]!==a||e[31]!==n?(m=n.editable&&n.editableColumn(a),e[30]=a,e[31]=n,e[32]=m):m=e[32];const p=m;if(n.editingCell!==null&&n.editingCell.rowId===l&&n.editingCell.column===a){let y;e[33]!==a||e[34]!==n||e[35]!==l||e[36]!==i?(y=E=>{n.stage(l,a,Nn(E,i)),n.cancelEdit()},e[33]=a,e[34]=n,e[35]=l,e[36]=i,e[37]=y):y=e[37];let S;return e[38]!==a||e[39]!==b||e[40]!==n.cancelEdit||e[41]!==l||e[42]!==y?(S=c(Pn,{column:a,initial:b,onCancel:n.cancelEdit,onCommit:y,recordId:l}),e[38]=a,e[39]=b,e[40]=n.cancelEdit,e[41]=l,e[42]=y,e[43]=S):S=e[43],S}let h;g!==void 0?h="rounded bg-warning/15 px-1":p&&(h="cursor-text");let v;e[44]!==p||e[45]!==a||e[46]!==n||e[47]!==l?(v=p?()=>{n.startEdit(l,a)}:void 0,e[44]=p,e[45]=a,e[46]=n,e[47]=l,e[48]=v):v=e[48];const w=v,f=`db-cell-${l}-${a}`;let x;e[49]!==b?(x=c(ht,{value:b}),e[49]=b,e[50]=x):x=e[50];let N;e[51]!==h||e[52]!==w||e[53]!==f||e[54]!==x?(N=c("span",{className:h,"data-testid":f,onDoubleClick:w,children:x}),e[51]=h,e[52]=w,e[53]=f,e[54]=x,e[55]=N):N=e[55];let _;e[56]!==a||e[57]!==b||e[58]!==n.onExpandCell?(_=c(Ot,{column:a,onExpand:n.onExpandCell,value:b}),e[56]=a,e[57]=b,e[58]=n.onExpandCell,e[59]=_):_=e[59];let $;return e[60]!==N||e[61]!==_?($=k(Je,{children:[N,_]}),e[60]=N,e[61]=_,e[62]=$):$=e[62],$},An=({draggedRef:r,header:e,masked:t=!1,pinned:n=!1,table:s})=>{const o=()=>{r.current=e.column.id},a=i=>{i.preventDefault()},l=()=>{const i=r.current,d=e.column.id;if(r.current=null,i===null||i===d)return;const u=s.getState().columnOrder,g=(u.length>0?u:s.getAllLeafColumns().map(m=>m.id)).filter(m=>m!==i),b=g.indexOf(d);g.splice(b===-1?g.length:b,0,i),s.setColumnOrder(g)};return k("th",{className:Tt("text-start text-xs font-medium text-muted-foreground",n&&"border-e border-border bg-muted"),draggable:!0,onDragOver:a,onDragStart:o,onDrop:l,style:n?Lt(e.getSize()):_t(e.getSize()),children:[k("button",{className:"inline-flex max-w-full cursor-grab items-center gap-1 truncate outline-none hover:text-foreground","data-testid":`db-sort-${e.column.id}`,onClick:e.column.getToggleSortingHandler(),type:"button",children:[Zt(e.column.columnDef.header,e.getContext()),On(e.column.getIsSorted())]}),t&&c("span",{className:"ms-1 inline-flex items-center rounded-sm bg-warning/15 px-1 text-[0.625rem] font-medium uppercase text-warning","data-testid":`db-mask-chip-${e.column.id}`,title:"This column is masked by a mask() policy",children:"masked"}),c("span",{"aria-hidden":"true",className:"absolute inset-y-0 end-0 w-1 cursor-col-resize touch-none select-none hover:bg-ring/60 data-[resizing=true]:bg-ring","data-resizing":e.column.getIsResizing(),"data-testid":`db-resize-${e.column.id}`,onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler()})]})},Vn=r=>{const e=V(13),{table:t}=r,n=X();let s;e[0]!==t?(s=u=>{t.toggleAllRowsSelected(u)},e[0]=t,e[1]=s):s=e[1];const o=s;let a;e[2]!==n?(a=n("Select all rows"),e[2]=n,e[3]=a):a=e[3];let l;e[4]!==t?(l=t.getIsAllRowsSelected(),e[4]=t,e[5]=l):l=e[5];let i;e[6]!==t?(i=t.getIsSomeRowsSelected()&&!t.getIsAllRowsSelected(),e[6]=t,e[7]=i):i=e[7];let d;return e[8]!==o||e[9]!==a||e[10]!==l||e[11]!==i?(d=c("th",{className:"bg-muted",style:Vt,children:c($t,{"aria-label":a,checked:l,"data-testid":"db-select-all",indeterminate:i,onCheckedChange:o})}),e[8]=o,e[9]=a,e[10]=l,e[11]=i,e[12]=d):d=e[12],d},Ln=r=>{const e=V(17),{row:t}=r,n=X();let s;e[0]!==t.original?(s=ae(t.original),e[0]=t.original,e[1]=s):s=e[1];const o=s;let a;e[2]!==t?(a=p=>{t.toggleSelected(p)},e[2]=t,e[3]=a):a=e[3];const l=a;let i;e[4]!==n?(i=n("Select row"),e[4]=n,e[5]=i):i=e[5];let d;e[6]!==t?(d=t.getIsSelected(),e[6]=t,e[7]=d):d=e[7];let u;e[8]!==t.index||e[9]!==t.original?(u=Bt(t.original,t.index),e[8]=t.index,e[9]=t.original,e[10]=u):u=e[10];const g=`db-select-${u}`,b=o===null;let m;return e[11]!==l||e[12]!==i||e[13]!==d||e[14]!==g||e[15]!==b?(m=c("td",{className:"bg-background",style:Vt,children:c($t,{"aria-label":i,checked:d,"data-testid":g,disabled:b,onCheckedChange:l})}),e[11]=l,e[12]=i,e[13]=d,e[14]=g,e[15]=b,e[16]=m):m=e[16],m},Bn=r=>{const e=V(46),{edit:t,editable:n,mask:s,onDelete:o,onEdit:a,onInspect:l,refs:i,scrollRef:d,scrollToIndex:u,table:g,tableRows:b,tbodyStyle:m,virtualRows:p}=r,h=U(null),[v,w]=R(null);let f;e[0]!==g?(f=g.getVisibleLeafColumns(),e[0]=g,e[1]=f):f=e[1];const x=f.length;let N;e[2]!==v||e[3]!==x||e[4]!==t||e[5]!==g||e[6]!==b?(N=T=>{if(!["ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Enter"].includes(T.key))return;T.preventDefault();const I=v??{col:0,row:0};if(T.key==="Enter"){const ee=b[I.row],te=g.getVisibleLeafColumns()[I.col];if(ee!==void 0&&te!==void 0){const Q=ae(ee.original);Q!==null&&t.editableColumn(te.id)&&t.startEdit(Q,te.id)}w(I);return}let{col:P,row:A}=I;e:switch(T.key){case"ArrowDown":{A=Math.min(A+1,b.length-1);break e}case"ArrowRight":{P=Math.min(P+1,x-1);break e}case"ArrowUp":{A=Math.max(A-1,0);break e}default:P=Math.max(P-1,0)}w({col:P,row:A})},e[2]=v,e[3]=x,e[4]=t,e[5]=g,e[6]=b,e[7]=N):N=e[7];const _=N;let $,y;e[8]!==v||e[9]!==u?($=()=>{v!==null&&u(v.row)},y=[v,u],e[8]=v,e[9]=u,e[10]=$,e[11]=y):($=e[10],y=e[11]),de($,y);let S;e[12]!==v||e[13]!==t||e[14]!==n||e[15]!==s||e[16]!==o||e[17]!==a||e[18]!==l||e[19]!==i||e[20]!==b?(S=T=>{const I=b[T.index],{original:P}=I,A=ae(P),ee=Bt(P,T.index),te={...En,height:`${T.size.toString()}px`,transform:`translateY(${T.start.toString()}px)`};return k("tr",{className:"border-b border-border text-xs transition-colors hover:bg-muted/50","data-testid":"db-row",style:te,children:[c(Ln,{row:I}),I.getVisibleCells().map((Q,ce)=>{const ue=ce===0,pe=v!==null&&v.row===T.index&&v.col===ce?" ring-1 ring-ring ring-inset":"";return c("td",{className:Tt("group/cell truncate font-mono text-muted-foreground",ue&&"border-e border-border bg-background",pe),style:ue?Lt(Q.column.getSize()):_t(Q.column.getSize()),children:c(zn,{cell:Q,edit:t,mask:s,refs:i})},Q.id)}),k("td",{className:"flex items-center gap-1",style:Mt,children:[c("button",{className:Ft,"data-testid":`db-inspect-${ee}`,onClick:()=>{l(P)},type:"button",children:"Details"}),n&&k(Je,{children:[c("button",{className:Ft,"data-testid":`db-edit-${ee}`,disabled:A===null,onClick:()=>{a(A,P)},type:"button",children:"Edit"}),c(Nt,{confirmLabel:"Delete?",disabled:A===null,onConfirm:()=>{o(A)},testId:`db-delete-${ee}`,children:"Delete"})]})]})]},I.id)},e[12]=v,e[13]=t,e[14]=n,e[15]=s,e[16]=o,e[17]=a,e[18]=l,e[19]=i,e[20]=b,e[21]=S):S=e[21];const E=S;let D;e[22]!==g?(D=c(Vn,{table:g}),e[22]=g,e[23]=D):D=e[23];let L;e[24]!==s||e[25]!==g?(L=g.getFlatHeaders().map((T,I)=>c(An,{draggedRef:h,header:T,masked:s.columns.has(T.column.id),pinned:I===0,table:g},T.id)),e[24]=s,e[25]=g,e[26]=L):L=e[26];let q;e[27]===Symbol.for("react.memo_cache_sentinel")?(q=c("th",{"aria-label":"Row actions",style:Mt}),e[27]=q):q=e[27];let z;e[28]!==D||e[29]!==L?(z=c("thead",{className:"bg-muted/50",children:k("tr",{className:"border-b border-border",style:Rn,children:[D,L,q]})}),e[28]=D,e[29]=L,e[30]=z):z=e[30];let B;if(e[31]!==E||e[32]!==p){let T;e[34]!==E?(T=I=>E(I),e[34]=E,e[35]=T):T=e[35],B=p.map(T),e[31]=E,e[32]=p,e[33]=B}else B=e[33];let O;e[36]!==B||e[37]!==m?(O=c("tbody",{style:m,children:B}),e[36]=B,e[37]=m,e[38]=O):O=e[38];let j;e[39]!==O||e[40]!==z?(j=k("table",{className:"w-full text-xs","data-testid":"db-rows",style:_n,children:[z,O]}),e[39]=O,e[40]=z,e[41]=j):j=e[41];let K;return e[42]!==_||e[43]!==d||e[44]!==j?(K=c(en,{layout:"fill",children:c("div",{"data-testid":"db-scroll",onKeyDown:_,ref:d,role:"grid",style:Tn,tabIndex:0,children:j})}),e[42]=_,e[43]=d,e[44]=j,e[45]=K):K=e[45],K},qn=(r,e,t)=>{const n=r?.columns,s=r?.rows,o=r?.refs,a=Ce(()=>n===void 0?[]:n.map(x=>({accessorFn:N=>N[x],header:o?.[x]===void 0?x:`${x} →`,id:x})),[n,o]),l=Ce(()=>s??[],[s]),[i,d]=R({}),[u,g]=R({}),b=Qt({columnResizeMode:"onChange",columns:a,data:l,defaultColumn:{minSize:80,size:200},enableColumnResizing:!0,enableRowSelection:x=>ae(x.original)!==null,getCoreRowModel:Wt(),getRowId:(x,N)=>ae(x)??`row-${N.toString()}`,getSortedRowModel:Ut(),manualSorting:!0,onColumnVisibilityChange:g,onRowSelectionChange:d,onSortingChange:t,state:{columnVisibility:u,rowSelection:i,sorting:e}}),m=b.getRowModel().rows,p=U(null),h=Yt({count:m.length,estimateSize:()=>$n,getScrollElement:()=>p.current,initialRect:{height:It,width:0},observeElementRect:(x,N)=>Xt(x,N,It),overscan:8}),v=wt(x=>{h.scrollToIndex(x)},[h]),w=h.getVirtualItems(),f={display:"block",height:`${h.getTotalSize().toString()}px`,position:"relative"};return{scrollRef:p,scrollToIndex:v,table:b,tableRows:m,tbodyStyle:f,virtualRows:w}};function Kn(r){const[e,t]=r;return k("div",{className:"contents",children:[c("dt",{className:"truncate font-mono text-[11px] text-muted-foreground",children:e}),c("dd",{className:"truncate font-mono text-[11px] text-foreground",title:fe(t),children:fe(t)})]},e)}const St="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",Jn=r=>{const e=V(22),{onCommit:t}=r,n=X(),[s,o]=R(""),a=U(null);let l,i;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=()=>{a.current?.focus()},i=[],e[0]=l,e[1]=i):(l=e[0],i=e[1]),de(l,i);let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=x=>{o(x.target.value)},e[2]=d):d=e[2];const u=d;let g;e[3]!==s||e[4]!==t?(g=()=>{const x=s.trim();x!==""&&t(x)},e[3]=s,e[4]=t,e[5]=g):g=e[5];const b=g;let m;e[6]!==n?(m=n("Query name"),e[6]=n,e[7]=m):m=e[7];let p;e[8]!==n?(p=n("Query name"),e[8]=n,e[9]=p):p=e[9];let h;e[10]!==s||e[11]!==m||e[12]!==p?(h=c("input",{"aria-label":m,className:"h-7 rounded-md border border-border bg-background px-2 text-xs outline-none focus-visible:border-ring","data-testid":"db-save-query-name",onChange:u,placeholder:p,ref:a,value:s}),e[10]=s,e[11]=m,e[12]=p,e[13]=h):h=e[13];let v;e[14]!==n?(v=n("Save"),e[14]=n,e[15]=v):v=e[15];let w;e[16]!==b||e[17]!==v?(w=c("button",{className:St,"data-testid":"db-save-query-confirm",onClick:b,type:"button",children:v}),e[16]=b,e[17]=v,e[18]=w):w=e[18];let f;return e[19]!==h||e[20]!==w?(f=k("span",{className:"inline-flex items-center gap-1",children:[h,w]}),e[19]=h,e[20]=w,e[21]=f):f=e[21],f},Gn=r=>{const e=V(27),{onApply:t,onCopyLink:n,onDelete:s,onSave:o,saved:a}=r,l=X(),[i,d]=R(!1);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=()=>{d(!0)},e[0]=u):u=e[0];const g=u;let b;e[1]!==o?(b=y=>{o(y),d(!1)},e[1]=o,e[2]=b):b=e[2];const m=b;let p;e[3]!==t||e[4]!==a?(p=y=>{const S=a[Number(y.currentTarget.dataset.index)];S!==void 0&&t(S)},e[3]=t,e[4]=a,e[5]=p):p=e[5];const h=p;let v;e[6]!==s||e[7]!==a?(v=y=>{const S=a[Number(y.currentTarget.dataset.index)];S!==void 0&&s(S.name)},e[6]=s,e[7]=a,e[8]=v):v=e[8];const w=v;let f;e[9]!==l?(f=l("Copy link"),e[9]=l,e[10]=f):f=e[10];let x;e[11]!==n||e[12]!==f?(x=c("button",{className:St,"data-testid":"db-copy-link",onClick:n,type:"button",children:f}),e[11]=n,e[12]=f,e[13]=x):x=e[13];let N;e[14]!==m||e[15]!==i||e[16]!==l?(N=i?c(Jn,{onCommit:m}):c("button",{className:St,"data-testid":"db-save-query",onClick:g,type:"button",children:l("Save query")}),e[14]=m,e[15]=i,e[16]=l,e[17]=N):N=e[17];let _;e[18]!==h||e[19]!==w||e[20]!==a||e[21]!==l?(_=a.length>0&&k("div",{className:"flex flex-wrap items-center gap-1","data-testid":"db-saved-queries",children:[c("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:l("Saved")}),a.map((y,S)=>k("span",{className:"inline-flex items-center overflow-hidden rounded-md border border-border",children:[c("button",{className:"px-2 py-0.5 text-xs text-foreground transition-colors hover:bg-accent","data-index":S,"data-testid":`db-saved-query-${y.name}`,onClick:h,type:"button",children:y.name}),c("button",{"aria-label":l("Delete saved query {name}",{name:y.name}),className:"border-l border-border px-1 py-0.5 text-xs text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive","data-index":S,"data-testid":`db-saved-query-delete-${y.name}`,onClick:w,type:"button",children:"✕"})]},y.name))]}),e[18]=h,e[19]=w,e[20]=a,e[21]=l,e[22]=_):_=e[22];let $;return e[23]!==x||e[24]!==N||e[25]!==_?($=k("div",{className:"flex flex-wrap items-center gap-1.5","data-testid":"db-query-bar",children:[x,N,_]}),e[23]=x,e[24]=N,e[25]=_,e[26]=$):$=e[26],$},Hn="/__lunora/seed",xt=200,Qn=50,Un=(r,e)=>{const t=[];for(const n of r)n.pk!==!0&&n.ref!==void 0&&n.type==="id"&&(e[n.ref]??[]).length===0&&t.push(n.name);return t},Wn=async r=>{const e=await fetch(Hn,{body:JSON.stringify(r),headers:{"Content-Type":"application/json"},method:"POST"}),t=await e.json();return e.ok&&t.rows!==void 0?{kind:"ok",rows:t.rows}:{kind:"error",message:t.error??`seed request failed (${String(e.status)})`}},Zn="rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",Yn="rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground outline-none transition-colors hover:bg-primary/90 focus-visible:bg-primary/90 disabled:pointer-events-none disabled:opacity-50",Xn=({columns:r,fkPools:e,onClose:t,onInsertRows:n,table:s})=>{const o=X(),[a,l]=R(10),[i,d]=R(!1),[u,g]=R(void 0),[b,m]=R(void 0),p=f=>{const x=Number(f.target.value);!Number.isNaN(x)&&x>=1&&l(Math.min(x,xt))},h=async()=>{g(void 0),m(void 0),d(!0);try{const f=await Wn({count:a,existingIds:e,seed:Date.now(),table:s});if(f.kind==="error"){g(f.message);return}const{rows:x}=f;if(x.length===0){g(o("No rows generated — all columns were skipped."));return}const N=await n(x);if(N!==void 0){g(N);return}m(x.length);const _=Un(r,e);_.length>0&&g(o("Inserted {count} rows. Skipped FK columns: {cols}",{cols:_.join(", "),count:x.length.toString()}))}finally{d(!1)}},v=()=>{oe(h())},w=r.filter(f=>f.pk!==!0);return k(zt,{label:o("Generate dummy rows"),onClose:t,panelTestId:"gen-rows-panel",testId:"gen-rows-overlay",variant:"dialog",children:[k("div",{className:"flex items-start justify-between",children:[k("div",{className:"flex flex-col gap-0.5",children:[c("h3",{className:"text-base text-foreground","data-testid":"gen-rows-title",children:o("Generate dummy rows")}),c("p",{className:"text-xs text-muted-foreground","data-testid":"gen-rows-desc",children:o("Seed {table} with Faker-generated rows. Existing rows are not affected.",{table:s})})]}),c("button",{className:"text-xs text-muted-foreground hover:text-foreground","data-testid":"gen-rows-close",onClick:t,type:"button",children:o("Close")})]}),k("div",{className:"flex items-center gap-2",children:[c("label",{className:"text-xs font-medium text-foreground",htmlFor:"gen-rows-count",children:o("Row count")}),c("input",{className:"w-20 rounded-md border border-border bg-background px-2 py-1 text-xs outline-none focus-visible:border-ring","data-testid":"gen-rows-count",id:"gen-rows-count",max:xt,min:1,onChange:p,type:"number",value:a}),c("span",{className:"text-xs text-muted-foreground",children:o("(max {max})",{max:xt.toString()})})]}),w.length>0&&k("div",{className:"flex flex-col gap-1",children:[c("p",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:o("Columns to seed")}),c("ul",{className:"flex flex-col gap-0.5","data-testid":"gen-rows-columns",children:w.map(f=>{const x=f.ref!==void 0&&f.type==="id",N=x&&(e[f.ref??""]??[]).length===0,_=N?"rounded bg-destructive/10 px-1 text-destructive":"rounded bg-muted px-1 text-muted-foreground",$=N?`gen-rows-fk-empty-${f.name}`:`gen-rows-fk-ok-${f.name}`,y=N?o("FK: no rows in {ref} — will skip",{ref:f.ref??""}):o("→ {ref}",{ref:f.ref??""});return k("li",{className:"flex items-center gap-1.5 font-mono text-xs",children:[c("span",{className:"text-foreground",children:f.name}),k("span",{className:"text-muted-foreground",children:["(",f.type,")"]}),f.optional&&c("span",{className:"rounded bg-muted px-1 font-mono text-[10px] tracking-wide uppercase",children:"optional"}),x&&c("span",{className:_,"data-testid":$,children:y})]},f.name)})})]}),u!==void 0&&c("p",{className:"text-xs text-destructive","data-testid":"gen-rows-error",role:"alert",children:u}),b!==void 0&&u===void 0&&c("p",{className:"text-xs text-success","data-testid":"gen-rows-success",children:o("Inserted {count} rows successfully.",{count:b.toString()})}),k("div",{className:"flex justify-end gap-2",children:[c("button",{className:Zn,"data-testid":"gen-rows-cancel",onClick:t,type:"button",children:o("Cancel")}),c("button",{className:Yn,"data-testid":"gen-rows-generate",disabled:i,onClick:v,type:"button",children:o(i?"Inserting…":"Generate & insert")})]})]})},vt=r=>{const e=r[0];return e===void 0?void 0:{column:e.id,direction:e.desc?"desc":"asc"}},qt=r=>r==null?"":typeof r=="object"?JSON.stringify(r):String(r),jt=r=>r.map(e=>({column:e.column,operator:e.operator,value:e.value===void 0?"":qt(e.value)})),Pt=r=>r===void 0?[]:[{desc:r.direction==="desc",id:r.column}],er=200,tr=20,nr=se(W.readTablePage),rr=se(W.facetColumn),yt=se(W.writeRow),or=se(W.deleteRows),lr=se(W.clearTable),ar={},Ct=new Set(["__doc__","__id__","_creationTime","_id","id"]),sr=r=>{const e=r.__doc__;if(typeof e=="string")try{const n=JSON.parse(e);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{}const t={};for(const[n,s]of Object.entries(r))Ct.has(n)||(t[n]=s);return t},ir=({initialFilters:r,initialOrderBy:e,initialSearch:t,initialShardKey:n,onSelectTable:s,onViewChange:o,pageSize:a,tableParam:l})=>{const i=kt(),[d,u]=R(a),[g,b]=R(n??""),m=l===void 0||l===""?null:l,[p,h]=R(0),[v,w]=R("table"),[f,x]=R(()=>Pt(e)),[N,_]=R(t??""),$=Et(N.trim(),300),y=Et(g.trim(),400),[S,E]=R(()=>jt(r??[])),D=U(S);D.current=S;const{clearFacets:L,facets:q,refetchFacets:z,toggleFacet:B}=nn(),[O,j]=R(null),[K,T]=R(null),I=wn(),[P,A]=R(null),[ee,te]=R(!1),Q=Ke(W.listTables,ar,{live:!0,shardKey:y}),ce=Q.data??null,ue=Q.error,pe=Ce(()=>({filters:be(S),limit:d,offset:p,orderBy:vt(f),search:$,skipCount:!0,table:m??""}),[S,d,p,f,$,m]),J=Ce(()=>({filters:be(S),limit:1,search:$,table:m??""}),[S,$,m]),Z=Ke(W.readTablePage,pe,{enabled:m!==null,keepPreviousData:!1,live:!0,shardKey:y}),G=Z.data??null,He=Z.error,{liveError:Qe}=Z,Ue=Ke(W.readTablePage,J,{enabled:m!==null,live:!0,shardKey:y});de(()=>{Q.data!==void 0&&cn(y)},[Q.data,y]);const We=wt(C=>{s?.(C)},[s]),Y=(C,F)=>{s?.(C,{search:F})},ke=async(C,F)=>{try{return(await i.query(nr,{filters:[],limit:tr,offset:0,search:F,table:C},le(y))).rows.find(M=>ae(M)===F)??null}catch{return null}},he=wt((C,F,M,H)=>re=>i.query(rr,{column:re,filters:be(M),search:H,table:F},le(C)),[i]),Ze=C=>{B(C,m===null?null:he(y,m,D.current,$))},$e=(C,F)=>{const M=qt(F);E(H=>[...H.filter(re=>re.column!==C),{column:C,operator:"eq",value:M}]),h(0)},Te=U(he),_e=U(z),xe=U(o);Te.current=he,_e.current=z,xe.current=o,de(()=>{m!==null&&_e.current(Te.current(y,m,S,$))},[y,m,S,$]);const me=U(l);de(()=>{m===null||xe.current===void 0||me.current!==l||xe.current({filters:be(S),orderBy:vt(f),search:$,shard:y})},[m,l,S,f,$,y]);const Ee=U(r),Re=U(e),ne=U(t),De=U(n);Ee.current=r,Re.current=e,ne.current=t,De.current=n,de(()=>{me.current!==l&&(me.current=l,queueMicrotask(()=>{const C=jt(Ee.current??[]);x(Pt(Re.current)),_(ne.current??""),E(C),D.current=C,b(De.current??""),L(),I.clear(),A(null),h(0)}))},[l]);const ge=C=>{m!==null&&h(Math.max(0,C))},Ye=C=>!Ct.has(C),Ie=(C,F)=>{A({column:F,rowId:C})},ie=()=>{A(null)},Me=async()=>{if(m!==null){T(null),te(!0);try{for(const[C,F]of Object.entries(I.staged))await i.query(yt,{doc:F,id:C,op:"patch",table:m},le(y));I.clear(),A(null),Z.refetch()}catch(C){T(C.message)}finally{te(!1)}}},Xe=()=>{I.clear(),A(null)},et=Ce(()=>{const C=new Map;for(const M of G?.rows??[]){const H=ae(M);H!==null&&C.set(H,M)}const F=[];for(const[M,H]of Object.entries(I.staged))for(const[re,Kt]of Object.entries(H))F.push({column:re,newValue:Kt,oldValue:C.get(M)?.[re],rowId:M});return F},[G,I.staged]),Fe=async(C,F,M)=>{if(m===null)return;T(null);let H;if(C!=="delete")try{H=M===void 0||M.trim()===""?{}:JSON.parse(M)}catch(re){T(`Invalid JSON: ${re.message}`);return}try{await i.query(yt,{doc:H,id:F??void 0,op:C,table:m},le(y)),j(null),Z.refetch()}catch(re){T(re.message)}},ve=async(C,F)=>{if(m!==null){T(null);try{for(let M=0;M<er&&(await i.query(C,F,le(y))).hasMore;M+=1);h(0),Z.refetch()}catch(M){T(M.message)}}},Oe=qn(G,f,C=>{x(C),h(0)}),tt={filters:be(S),orderBy:vt(f),search:$,shard:g,table:m??void 0},je=Ue.data?.total??(G===null?0:p+G.rows.length),nt=p>0,rt=G!==null&&p+G.rows.length<je,ot=G===null||G.rows.length===0?0:p+1,lt=G===null?0:p+G.rows.length,Pe=()=>{Q.refetch()},ze=()=>{w("table")},at=()=>{w("json")},ye=()=>{oe(ve(or,{filters:be(D.current),search:$,table:m}))},st=()=>{oe(ve(lr,{table:m}))},it=C=>{_(C.target.value),h(0)},dt=C=>{E(C),h(0)},Ae=()=>{T(null);const C={};for(const F of G?.columns??[])Ct.has(F)||(C[F]="");j({docText:JSON.stringify(C,null,2),id:""})},ct=C=>{j(F=>F===null?F:{docText:C,id:F.id})},ut=()=>{O!==null&&oe(Fe(O.id===""?"insert":"patch",O.id===""?null:O.id,O.docText))},mt=()=>{j(null),T(null)},Ve=()=>{ge(p-d)},we=()=>{ge(p+d)},Ne=C=>{ge(Math.max(0,(C-1)*d))},Le=C=>{u(C),h(0)},gt=(C,F)=>{T(null),j({docText:JSON.stringify(sr(F),null,2),id:C})},bt=C=>{oe(Fe("delete",C))},Be=async C=>{if(!(m===null||C.length===0)){T(null);try{for(const F of C)await i.query(yt,{id:F,op:"delete",table:m},le(y));Z.refetch()}catch(F){T(F.message)}}},ft=C=>{oe(Be(C))},pt=()=>{oe(Me())};return{addRow:Ae,bulkDelete:ye,cancelCellEdit:ie,cancelEdit:mt,changePageSize:Le,clearTable:st,columns:G?.columns??[],committing:ee,currentView:tt,discardStaged:Xe,editableColumn:Ye,editing:O,editingCell:P,facetFilter:$e,facets:q,filter:N,filters:S,goNext:we,goPrevious:Ve,hasNext:rt,hasPrevious:nt,jumpToPage:Ne,liveError:Qe,loadTables:Pe,navigateToRef:Y,onBulkDeleteSelected:ft,onCommitStaged:pt,onFilterChange:it,onFiltersChange:dt,onRowDelete:bt,onRowEdit:gt,page:G,previewRef:ke,pageError:He,pageSize:d,rangeEnd:lt,rangeStart:ot,saveEdit:ut,selectedTable:m,selectTable:We,setEditorDocumentText:ct,setShardKey:b,shardKey:g,showJson:at,showTable:ze,stage:I.stage,stagedChanges:et,stagedValue:I.stagedValue,startCellEdit:Ie,table:Oe,tables:ce,tablesError:ue,toggleFacet:Ze,total:je,viewMode:v,writeError:K}},dr=se(W.describeTable),cr=se(W.readTablePage),ur=se(W.writeRow),mr=r=>{const e=r._id??r.id??r.__id__??"";return typeof e=="string"?e:typeof e=="number"?String(e):""},gr=r=>{const e=kt(),[t,n]=R(!1),[s,o]=R(void 0),[a,l]=R(void 0),[i,d]=R(void 0),[u,g]=R({}),[b,m]=R(!1),[p,h]=R(void 0),v=async(w,f)=>{n(!0),o(w),l(f),d(void 0),g({}),h(void 0),m(!0);try{const x=await e.query(dr,{table:w},le(f)),{columns:N}=x;d(N);const _={},$=N.filter(y=>y.ref!==void 0&&y.type==="id"&&y.pk!==!0);for(const y of $){if(y.ref===void 0)continue;const{ref:S}=y;if(_[S]===void 0)try{const E=await e.query(cr,{filters:[],limit:Qn,offset:0,search:"",table:S},le(f));_[S]=E.rows.map(D=>mr(D)).filter(Boolean)}catch{_[S]=[]}}g(_)}catch(x){h(x.message)}finally{m(!1)}};return{closeDialog:()=>{n(!1),o(void 0),l(void 0),d(void 0),g({}),h(void 0)},columnMeta:i,error:p,fkPools:u,insertBatch:async(w,f)=>{if(s===void 0||a===void 0)return"No table selected.";try{for(const x of w)await e.query(ur,{doc:x,op:"insert",table:s},le(a));f(),r();return}catch(x){return x.message}},loading:b,open:t,openDialog:(w,f)=>{oe(v(w,f))},shardKey:a,table:s}},br=[],fr=()=>{const r=V(1);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={},r[0]=e):e=r[0];const{data:t}=Ke(W.maskPolicies,e);return Array.isArray(t?.columns)?t.columns:br},pr=/(?:_creationtime|(?:^|[a-z])(?:time|at))$/iu,hr=(r,e)=>typeof e=="number"&&pr.test(r),xr=r=>{const e=V(26),{column:t,onNavigate:n,target:s,value:o}=r;let a;e[0]!==n||e[1]!==s||e[2]!==o?(a=()=>{s!==void 0&&n(s,String(o))},e[0]=n,e[1]=s,e[2]=o,e[3]=a):a=e[3];const l=a;if(o==null){let u;return e[4]===Symbol.for("react.memo_cache_sentinel")?(u=c("span",{className:"italic text-muted-foreground",children:"null"}),e[4]=u):u=e[4],u}if(s!==void 0&&(typeof o=="string"||typeof o=="number")&&String(o)!==""){const u=`rd-ref-${t}`,g=`Open ${s} ${String(o)}`,b=String(o);let m;return e[5]!==l||e[6]!==u||e[7]!==g||e[8]!==b?(m=k("button",{"data-testid":u,onClick:l,title:g,type:"button",children:[b," ↗"]}),e[5]=l,e[6]=u,e[7]=g,e[8]=b,e[9]=m):m=e[9],m}if(hr(t,o)){const u=`rd-ts-${t}`;let g;e[10]!==o?(g=o.toString(),e[10]=o,e[11]=g):g=e[11];let b;e[12]!==o?(b=Ht(o),e[12]=o,e[13]=b):b=e[13];let m;return e[14]!==u||e[15]!==g||e[16]!==b?(m=c("span",{"data-testid":u,title:g,children:b}),e[14]=u,e[15]=g,e[16]=b,e[17]=m):m=e[17],m}if(typeof o=="object"){let u;e[18]!==o?(u=JSON.stringify(o,null,2),e[18]=o,e[19]=u):u=e[19];let g;return e[20]!==u?(g=c("pre",{className:"m-0 overflow-auto rounded-md bg-muted/50 p-2 text-xs",children:u}),e[20]=u,e[21]=g):g=e[21],g}let i;e[22]!==o?(i=fe(o),e[22]=o,e[23]=i):i=e[23];let d;return e[24]!==i?(d=c("span",{children:i}),e[24]=i,e[25]=d):d=e[25],d},vr=r=>{const e=V(21),{columns:t,onClose:n,onNavigate:s,refs:o,row:a}=r;let l;e[0]!==n||e[1]!==s?(l=(p,h)=>{s(p,h),n()},e[0]=n,e[1]=s,e[2]=l):l=e[2];const i=l;let d;e[3]===Symbol.for("react.memo_cache_sentinel")?(d=c("h3",{className:"m-0 text-base text-foreground",children:"Row detail"}),e[3]=d):d=e[3];let u;e[4]!==n?(u=k("div",{className:"mb-3 flex items-center justify-between",children:[d,c("button",{"data-testid":"rd-close",onClick:n,type:"button",children:"Close"})]}),e[4]=n,e[5]=u):u=e[5];let g;if(e[6]!==t||e[7]!==i||e[8]!==o||e[9]!==a){let p;e[11]!==i||e[12]!==o||e[13]!==a?(p=h=>k("div",{className:"border-t border-border py-2 first:border-t-0","data-testid":`rd-field-${h}`,children:[c("dt",{className:"mb-0.5 text-xs font-semibold text-muted-foreground",children:h}),c("dd",{className:"m-0",children:c(xr,{column:h,onNavigate:i,target:o?.[h],value:a[h]})})]},h),e[11]=i,e[12]=o,e[13]=a,e[14]=p):p=e[14],g=t.map(p),e[6]=t,e[7]=i,e[8]=o,e[9]=a,e[10]=g}else g=e[10];let b;e[15]!==g?(b=c("dl",{"data-testid":"rd-fields",children:g}),e[15]=g,e[16]=b):b=e[16];let m;return e[17]!==n||e[18]!==u||e[19]!==b?(m=k(zt,{label:"Row detail",onClose:n,panelTestId:"rd-panel",testId:"rd-overlay",variant:"drawer",children:[u,b]}),e[17]=n,e[18]=u,e[19]=b,e[20]=m):m=e[20],m},qe="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground disabled:pointer-events-none disabled:opacity-50",Ge="w-full rounded-md border border-border bg-background px-2 py-1 font-mono text-xs outline-none focus-visible:border-ring",yr=/(?:_creationtime|(?:^|[a-z])(?:time|at))$/iu,wr=(r,e)=>typeof e=="boolean"?"boolean":typeof e=="number"?yr.test(r)?"date":"number":e!==null&&typeof e=="object"?"json":"text",Nr=r=>{try{const e=JSON.parse(r);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}catch{return null}},Sr=r=>{const e=new Date(r),t=n=>String(n).padStart(2,"0");return`${e.getFullYear().toString()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`},Cr=r=>{const e=V(8),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{n(t,u)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=s===!0,i=`db-field-${t}`;let d;return e[3]!==t||e[4]!==a||e[5]!==l||e[6]!==i?(d=c($t,{"aria-label":t,checked:l,"data-testid":i,onCheckedChange:a}),e[3]=t,e[4]=a,e[5]=l,e[6]=i,e[7]=d):d=e[7],d},kr=r=>{const e=V(7),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{const g=Number(u.target.value);u.target.value!==""&&!Number.isNaN(g)&&n(t,g)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`,i=typeof s=="number"?s:"";let d;return e[3]!==a||e[4]!==l||e[5]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"number",value:i}),e[3]=a,e[4]=l,e[5]=i,e[6]=d):d=e[6],d},$r=r=>{const e=V(9),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{const g=new Date(u.target.value).getTime();Number.isNaN(g)||n(t,g)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`;let i;e[3]!==s?(i=typeof s=="number"?Sr(s):"",e[3]=s,e[4]=i):i=e[4];let d;return e[5]!==a||e[6]!==l||e[7]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"datetime-local",value:i}),e[5]=a,e[6]=l,e[7]=i,e[8]=d):d=e[8],d},Tr=r=>{const e=V(7),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{n(t,u.target.value)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`,i=typeof s=="string"?s:"";let d;return e[3]!==a||e[4]!==l||e[5]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"text",value:i}),e[3]=a,e[4]=l,e[5]=i,e[6]=d):d=e[6],d},_r=r=>{const e=V(19),{column:t,onChange:n,value:s}=r,o=X();let a;e[0]!==s?(a=()=>JSON.stringify(s,null,2),e[0]=s,e[1]=a):a=e[1];const[l,i]=R(a),[d,u]=R(!1);let g;e[2]!==t||e[3]!==n?(g=x=>{const N=x.target.value;i(N);try{n(t,JSON.parse(N)),u(!1)}catch{u(!0)}},e[2]=t,e[3]=n,e[4]=g):g=e[4];const b=g,m=d&&"border-destructive";let p;e[5]!==m?(p=Tt(Ge,"min-h-16",m),e[5]=m,e[6]=p):p=e[6];const h=`db-field-${t}`;let v;e[7]!==b||e[8]!==p||e[9]!==h||e[10]!==l?(v=c("textarea",{className:p,"data-testid":h,onChange:b,value:l}),e[7]=b,e[8]=p,e[9]=h,e[10]=l,e[11]=v):v=e[11];let w;e[12]!==t||e[13]!==d||e[14]!==o?(w=d&&c("span",{className:"text-xs text-destructive","data-testid":`db-field-error-${t}`,children:o("Invalid JSON")}),e[12]=t,e[13]=d,e[14]=o,e[15]=w):w=e[15];let f;return e[16]!==v||e[17]!==w?(f=k("div",{className:"flex flex-col gap-1",children:[v,w]}),e[16]=v,e[17]=w,e[18]=f):f=e[18],f},Er=r=>{const e=V(43),{column:t,onChange:n,target:s,value:o}=r;let a;e[0]!==t||e[1]!==o?(a=wr(t,o),e[0]=t,e[1]=o,e[2]=a):a=e[2];const l=a,i=`db-field-${t}`;let d;e[3]!==t?(d=c("span",{className:"font-mono",children:t}),e[3]=t,e[4]=d):d=e[4];let u;e[5]!==s?(u=s!==void 0&&k("span",{className:"rounded bg-muted px-1 font-mono text-[10px] tracking-wide uppercase",children:["→ ",s]}),e[5]=s,e[6]=u):u=e[6];let g;e[7]!==d||e[8]!==u?(g=k("span",{className:"flex items-center gap-1.5 font-medium text-muted-foreground",children:[d,u]}),e[7]=d,e[8]=u,e[9]=g):g=e[9];let b;e[10]!==t||e[11]!==l||e[12]!==n||e[13]!==o?(b=l==="boolean"&&c(Cr,{column:t,onChange:n,value:o}),e[10]=t,e[11]=l,e[12]=n,e[13]=o,e[14]=b):b=e[14];let m;e[15]!==t||e[16]!==l||e[17]!==n||e[18]!==o?(m=l==="number"&&c(kr,{column:t,onChange:n,value:o}),e[15]=t,e[16]=l,e[17]=n,e[18]=o,e[19]=m):m=e[19];let p;e[20]!==t||e[21]!==l||e[22]!==n||e[23]!==o?(p=l==="date"&&c($r,{column:t,onChange:n,value:o}),e[20]=t,e[21]=l,e[22]=n,e[23]=o,e[24]=p):p=e[24];let h;e[25]!==t||e[26]!==l||e[27]!==n||e[28]!==o?(h=l==="json"&&c(_r,{column:t,onChange:n,value:o}),e[25]=t,e[26]=l,e[27]=n,e[28]=o,e[29]=h):h=e[29];let v;e[30]!==t||e[31]!==l||e[32]!==n||e[33]!==o?(v=l==="text"&&c(Tr,{column:t,onChange:n,value:o}),e[30]=t,e[31]=l,e[32]=n,e[33]=o,e[34]=v):v=e[34];let w;return e[35]!==v||e[36]!==i||e[37]!==g||e[38]!==b||e[39]!==m||e[40]!==p||e[41]!==h?(w=k("label",{className:"flex flex-col gap-1 text-xs",htmlFor:i,children:[g,b,m,p,h,v]}),e[35]=v,e[36]=i,e[37]=g,e[38]=b,e[39]=m,e[40]=p,e[41]=h,e[42]=w):w=e[42],w},Rr=r=>{const e=V(48),{documentText:t,onCancel:n,onDocumentTextChange:s,onSave:o,refs:a}=r,l=X();let i;e[0]!==t?(i=Nr(t),e[0]=t,e[1]=i):i=e[1];const d=i,[u,g]=R(!1),b=!u&&d!==null;let m;e[2]!==d||e[3]!==s?(m=(I,P)=>{s(JSON.stringify({...d,[I]:P},null,2))},e[2]=d,e[3]=s,e[4]=m):m=e[4];const p=m;let h;e[5]!==s?(h=I=>{s(I.target.value)},e[5]=s,e[6]=h):h=e[6];const v=h;let w;e[7]===Symbol.for("react.memo_cache_sentinel")?(w=()=>{g(!1)},e[7]=w):w=e[7];const f=w;let x;e[8]===Symbol.for("react.memo_cache_sentinel")?(x=()=>{g(!0)},e[8]=x):x=e[8];const N=x,_=d===null;let $;e[9]!==l?($=l("Form"),e[9]=l,e[10]=$):$=e[10];let y;e[11]!==b||e[12]!==_||e[13]!==$?(y=c("button",{"aria-pressed":b,className:qe,"data-testid":"db-editor-form",disabled:_,onClick:f,type:"button",children:$}),e[11]=b,e[12]=_,e[13]=$,e[14]=y):y=e[14];const S=!b;let E;e[15]!==l?(E=l("JSON"),e[15]=l,e[16]=E):E=e[16];let D;e[17]!==E||e[18]!==S?(D=c("button",{"aria-pressed":S,className:qe,"data-testid":"db-editor-json",onClick:N,type:"button",children:E}),e[17]=E,e[18]=S,e[19]=D):D=e[19];let L;e[20]!==D||e[21]!==y?(L=k("div",{className:"flex items-center gap-1.5",children:[y,D]}),e[20]=D,e[21]=y,e[22]=L):L=e[22];let q;e[23]!==t||e[24]!==d||e[25]!==p||e[26]!==v||e[27]!==a||e[28]!==b||e[29]!==l?(q=b?c("div",{className:"flex flex-col gap-3","data-testid":"db-editor-fields",children:Object.entries(d).map(I=>{const[P,A]=I;return c(Er,{column:P,onChange:p,target:a?.[P],value:A},P)})}):c("textarea",{"aria-label":l("Row document JSON"),className:"min-h-28 w-full rounded-md border border-border bg-background px-2 py-1.5 font-mono text-xs outline-none focus-visible:border-ring","data-testid":"db-editor-doc",onChange:v,value:t}),e[23]=t,e[24]=d,e[25]=p,e[26]=v,e[27]=a,e[28]=b,e[29]=l,e[30]=q):q=e[30];let z;e[31]!==l?(z=l("Save"),e[31]=l,e[32]=z):z=e[32];let B;e[33]!==o||e[34]!==z?(B=c("button",{className:qe,"data-testid":"db-editor-save",onClick:o,type:"button",children:z}),e[33]=o,e[34]=z,e[35]=B):B=e[35];let O;e[36]!==l?(O=l("Cancel"),e[36]=l,e[37]=O):O=e[37];let j;e[38]!==n||e[39]!==O?(j=c("button",{className:qe,"data-testid":"db-editor-cancel",onClick:n,type:"button",children:O}),e[38]=n,e[39]=O,e[40]=j):j=e[40];let K;e[41]!==B||e[42]!==j?(K=k("div",{className:"flex items-center gap-1.5",children:[B,j]}),e[41]=B,e[42]=j,e[43]=K):K=e[43];let T;return e[44]!==L||e[45]!==q||e[46]!==K?(T=k("div",{className:"flex flex-col gap-2 border border-border bg-card p-3","data-testid":"db-editor",children:[L,q,K]}),e[44]=L,e[45]=q,e[46]=K,e[47]=T):T=e[47],T},Dr=50,Ir=r=>{const e=V(8),{active:t,onPick:n,shard:s}=r;let o;e[0]!==n||e[1]!==s?(o=()=>{n(s)},e[0]=n,e[1]=s,e[2]=o):o=e[2];const a=o,l=`w-full rounded px-2 py-0.5 text-left text-xs transition-colors hover:bg-accent ${t?"bg-accent font-medium":""}`,i=`shard-explorer-item-${s}`;let d;return e[3]!==a||e[4]!==s||e[5]!==l||e[6]!==i?(d=c("button",{className:l,"data-testid":i,onClick:a,type:"button",children:s}),e[3]=a,e[4]=s,e[5]=l,e[6]=i,e[7]=d):d=e[7],d},Mr=({onFetchTables:r,onSelect:e})=>{const t=X(),[n]=R(()=>un()),[s,o]=R(!1),[a,l]=R(void 0),[i,d]=R(void 0),[u,g]=R(!1),[b,m]=R(void 0),p=U(0),h=()=>{o(f=>!f)},v=async f=>{e(f),l(f),d(void 0),m(void 0),g(!0),p.current+=1;const x=p.current;try{const N=await r(f);p.current===x&&d(N?.slice(0,Dr))}catch(N){p.current===x&&m(N.message)}finally{p.current===x&&g(!1)}},w=f=>{oe(v(f))};return n.length===0?null:k("div",{"data-testid":"shard-explorer",children:[k("button",{"aria-controls":"shard-explorer-panel","aria-expanded":s,className:"inline-flex items-center gap-1 rounded-md border border-border px-2 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent","data-testid":"shard-explorer-toggle",onClick:h,type:"button",children:[t("Shards seen"),c("span",{"aria-hidden":"true",className:`ml-0.5 transition-transform ${s?"rotate-180":""}`,children:"▾"})]}),s&&k("div",{className:"mt-1 flex flex-col gap-1 rounded-md border border-border bg-popover p-2","data-testid":"shard-explorer-panel",id:"shard-explorer-panel",children:[c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-hint",children:t("Recently visited shards — click to switch")}),c("ul",{className:"flex flex-col gap-0.5","data-testid":"shard-explorer-list",children:n.map(f=>c("li",{children:c(Ir,{active:a===f,onPick:w,shard:f})},f))}),a!==void 0&&k("div",{className:"mt-1 border-t border-border pt-1","data-testid":"shard-explorer-summary",children:[c("p",{className:"mb-1 text-xs font-medium text-foreground","data-testid":"shard-explorer-summary-title",children:t("{shard} tables",{shard:a})}),u&&c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-loading",children:t("Loading…")}),b!==void 0&&c("p",{className:"text-xs text-destructive","data-testid":"shard-explorer-error",role:"alert",children:b}),!u&&b===void 0&&i?.length===0&&c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-empty",children:t("No tables in this shard.")}),!u&&b===void 0&&i!==void 0&&i.length>0&&c("ul",{className:"flex flex-col gap-0.5","data-testid":"shard-explorer-tables",children:i.map(f=>k("li",{className:"flex items-center justify-between text-xs",children:[c("span",{"data-testid":`shard-explorer-table-${f.name}`,children:f.name}),c("span",{className:"text-muted-foreground","data-testid":`shard-explorer-rowcount-${f.name}`,children:f.rowCount})]},f.name))})]})]})]})},Fr=50,Or=[],Se="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50 aria-pressed:bg-accent aria-pressed:text-accent-foreground",jr=se(W.listTables),Pr=r=>{const e=V(10),{onFetchShardTables:t,onShardChange:n,schemaSwitch:s,shardKey:o}=r;let a;e[0]!==n||e[1]!==o?(a=c(Jt,{onChange:n,testId:"db-shard-input",value:o}),e[0]=n,e[1]=o,e[2]=a):a=e[2];let l;e[3]!==t||e[4]!==n?(l=c(Mr,{onFetchTables:t,onSelect:n}),e[3]=t,e[4]=n,e[5]=l):l=e[5];let i;return e[6]!==s||e[7]!==a||e[8]!==l?(i=k("div",{className:"flex shrink-0 flex-col items-stretch gap-2 border-b border-border p-3",children:[s,a,l]}),e[6]=s,e[7]=a,e[8]=l,e[9]=i):i=e[9],i},zr=r=>{const e=V(60),{columns:t,editable:n,filter:s,filters:o,hasMaskedColumns:a,liveError:l,maskOn:i,onAddRow:d,onBulkDelete:u,onClearTable:g,onFilterChange:b,onFiltersChange:m,onGenerateRows:p,onShowJson:h,onShowTable:v,onToggleMask:w,total:f,viewMode:x}=r,N=X(),_=x==="table";let $;e[0]!==v||e[1]!==_?($=c("button",{"aria-pressed":_,className:Se,"data-testid":"db-view-table",onClick:v,type:"button",children:"Table"}),e[0]=v,e[1]=_,e[2]=$):$=e[2];const y=x==="json";let S;e[3]!==h||e[4]!==y?(S=c("button",{"aria-pressed":y,className:Se,"data-testid":"db-view-json",onClick:h,type:"button",children:"JSON"}),e[3]=h,e[4]=y,e[5]=S):S=e[5];let E;e[6]!==l||e[7]!==N?(E=l===void 0?N("Live — changes stream in automatically"):N("Live unavailable: {liveError}",{liveError:l}),e[6]=l,e[7]=N,e[8]=E):E=e[8];const D=`size-1.5 rounded-full ${l===void 0?"bg-success":"bg-muted-foreground/50"}`;let L;e[9]!==D?(L=c("span",{"aria-hidden":"true",className:D}),e[9]=D,e[10]=L):L=e[10];let q;e[11]!==l||e[12]!==N?(q=N(l===void 0?"Live":"Live unavailable"),e[11]=l,e[12]=N,e[13]=q):q=e[13];let z;e[14]!==E||e[15]!==L||e[16]!==q?(z=k("span",{className:"inline-flex items-center gap-1.5 px-1 text-xs font-medium text-muted-foreground","data-testid":"db-live-indicator",role:"status",title:E,children:[L,q]}),e[14]=E,e[15]=L,e[16]=q,e[17]=z):z=e[17];let B;e[18]!==a||e[19]!==i||e[20]!==w||e[21]!==N?(B=a&&c("button",{"aria-pressed":i,className:Se,"data-testid":"db-mask-toggle",onClick:w,type:"button",children:N("Mask sensitive columns")}),e[18]=a,e[19]=i,e[20]=w,e[21]=N,e[22]=B):B=e[22];let O;e[23]!==n||e[24]!==d?(O=n&&c("button",{className:Se,"data-testid":"db-add-row",onClick:d,type:"button",children:"Add row"}),e[23]=n,e[24]=d,e[25]=O):O=e[25];let j;e[26]!==n||e[27]!==p||e[28]!==N?(j=n&&c("button",{className:Se,"data-testid":"db-generate-rows",onClick:p,type:"button",children:N("Generate rows")}),e[26]=n,e[27]=p,e[28]=N,e[29]=j):j=e[29];let K;e[30]!==n||e[31]!==s||e[32]!==o||e[33]!==u||e[34]!==f?(K=n&&f>0&&(s!==""||o.length>0)&&c(Nt,{confirmLabel:`Delete ${f.toString()} matching?`,onConfirm:u,testId:"db-bulk-delete",children:`Delete ${f.toString()} matching`}),e[30]=n,e[31]=s,e[32]=o,e[33]=u,e[34]=f,e[35]=K):K=e[35];let T;e[36]!==n||e[37]!==s||e[38]!==o||e[39]!==g||e[40]!==f?(T=n&&f>0&&s===""&&o.length===0&&c(Nt,{confirmLabel:`Clear all ${f.toString()} rows?`,onConfirm:g,testId:"db-clear-table",children:`Clear table (${f.toString()})`}),e[36]=n,e[37]=s,e[38]=o,e[39]=g,e[40]=f,e[41]=T):T=e[41];let I;e[42]!==B||e[43]!==O||e[44]!==j||e[45]!==K||e[46]!==T||e[47]!==$||e[48]!==S||e[49]!==z?(I=k("div",{className:"flex flex-wrap items-center gap-1.5",children:[$,S,z,B,O,j,K,T]}),e[42]=B,e[43]=O,e[44]=j,e[45]=K,e[46]=T,e[47]=$,e[48]=S,e[49]=z,e[50]=I):I=e[50];let P;e[51]!==t||e[52]!==s||e[53]!==o||e[54]!==b||e[55]!==m?(P=c(an,{columns:t,filters:o,onFiltersChange:m,onSearchChange:b,search:s}),e[51]=t,e[52]=s,e[53]=o,e[54]=b,e[55]=m,e[56]=P):P=e[56];let A;return e[57]!==I||e[58]!==P?(A=k("div",{className:"flex flex-col gap-2","data-testid":"db-view-toggle",children:[I,P]}),e[57]=I,e[58]=P,e[59]=A):A=e[59],A},io=({editable:r=!1,globalTableNames:e,initialFilters:t,initialOrderBy:n,initialSearch:s,initialShardKey:o,onNavigateToGlobal:a,onSelectTable:l,onViewChange:i,pageSize:d=Fr,queryBar:u,schemaSwitch:g,tableParam:b})=>{const{addRow:m,bulkDelete:p,cancelCellEdit:h,cancelEdit:v,changePageSize:w,clearTable:f,columns:x,committing:N,currentView:_,discardStaged:$,editableColumn:y,editing:S,editingCell:E,facetFilter:D,facets:L,filter:q,filters:z,goNext:B,goPrevious:O,hasNext:j,hasPrevious:K,jumpToPage:T,liveError:I,loadTables:P,navigateToRef:A,onBulkDeleteSelected:ee,onCommitStaged:te,onFilterChange:Q,onFiltersChange:ce,onRowDelete:ue,onRowEdit:pe,page:J,pageError:Z,previewRef:G,pageSize:He,rangeEnd:Qe,rangeStart:Ue,saveEdit:We,selectedTable:Y,selectTable:ke,setEditorDocumentText:he,setShardKey:Ze,shardKey:$e,showJson:Te,showTable:_e,stage:xe,stagedChanges:me,stagedValue:Ee,startCellEdit:Re,table:ne,tables:De,tablesError:ge,toggleFacet:Ye,total:Ie,viewMode:ie,writeError:Me}=ir({initialFilters:t,initialOrderBy:n,initialSearch:s,initialShardKey:o,onSelectTable:l,onViewChange:i,pageSize:d,tableParam:b}),Xe=kt(),et=async M=>await Xe.query(jr,{},le(M)),Fe=()=>{Y!==null&&ke(Y)},{closeDialog:ve,columnMeta:Oe,fkPools:tt,insertBatch:je,open:nt,openDialog:rt}=gr(Fe),ot=()=>{Y!==null&&rt(Y,$e)},lt=M=>je(M,ve),[Pe,ze]=R(null),at=()=>{ze(null)},[ye,st]=R(!1),it=()=>{st(M=>!M)},dt=fr(),[Ae,ct]=R(!0),ut=()=>{ct(M=>!M)},mt=hn(dt,Y??""),Ve=vn(mt,x),we={columns:Ve,enabled:Ae},[Ne,Le]=R(null),gt=(M,H)=>{Le({column:M,value:H})},bt=()=>{Le(null)},Be=(M,H)=>{if(a!==void 0&&e?.has(M)===!0){a(M,H);return}A(M,H)},ft=u?.onSaveQuery,pt=M=>{ft?.(M,_)},C={cancelEdit:h,editable:r,editableColumn:y,editingCell:E,onExpandCell:gt,stage:xe,stagedValue:Ee,startEdit:Re},F={columns:J?.refs,onNavigate:Be,onPreview:G};return k("div",{className:"flex h-full min-w-0","data-testid":"lunora-data-browser",children:[c(rn,{header:c(Pr,{onFetchShardTables:et,onShardChange:Ze,schemaSwitch:g,shardKey:$e}),onReload:P,onSelect:ke,prefix:"db",selected:Y,tables:De??Or}),k("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[ge!==null&&c("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"db-tables-error",role:"alert",children:ge}),J===null&&Z===null&&c("div",{className:"flex flex-1 items-center justify-center p-6",children:c("p",{className:"text-sm text-muted-foreground",children:"Select a table to browse its rows."})}),Z!==null&&c("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"db-page-error",role:"alert",children:Z}),J!==null&&k("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"db-page",children:[k("div",{className:"flex shrink-0 flex-col gap-2 border-b border-border px-4 py-3",children:[c(zr,{columns:x,editable:r,filter:q,filters:z,hasMaskedColumns:Ve.size>0,liveError:I,maskOn:Ae,onAddRow:m,onBulkDelete:p,onClearTable:f,onFilterChange:Q,onFiltersChange:ce,onGenerateRows:ot,onShowJson:Te,onShowTable:_e,onToggleMask:ut,total:Ie,viewMode:ie}),u!==void 0&&c(Gn,{onApply:u.onApplyQuery,onCopyLink:u.onCopyLink,onDelete:u.onDeleteQuery,onSave:pt,saved:u.saved}),ie==="table"&&J.rows.length>0&&c(sn,{columns:J.columns,editable:r,name:Y??"export",onBulkDelete:ee,onToggleTranspose:it,rows:J.rows,table:ne.table,transposed:ye}),r&&S!==null&&c(Rr,{documentText:S.docText,onCancel:v,onDocumentTextChange:he,onSave:We,refs:J.refs}),r&&me.length>0&&c(Sn,{changes:me,committing:N,onCommit:te,onDiscard:$}),Me!==null&&c("p",{className:"text-sm text-destructive","data-testid":"db-write-error",role:"alert",children:Me})]}),ie==="table"&&J.rows.length===0&&c("div",{className:"flex flex-1 items-center justify-center p-6",children:c(Gt,{description:"Rows you insert into this table will show up here.",icon:c("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:c("path",{d:"M4 5h16v14H4V5Zm0 5h16M10 10v9M4 14.5h16"})}),testId:"db-empty-rows",title:"This table is empty."})}),ie==="table"&&J.rows.length>0&&ye&&c(tn,{columns:J.columns,rows:Dt(J.rows,we)}),ie==="table"&&J.rows.length>0&&!ye&&c(Bn,{edit:C,editable:r,mask:we,onDelete:ue,onEdit:pe,onInspect:ze,refs:F,scrollRef:ne.scrollRef,scrollToIndex:ne.scrollToIndex,table:ne.table,tableRows:ne.tableRows,tbodyStyle:ne.tbodyStyle,virtualRows:ne.virtualRows}),ie==="json"&&c("pre",{className:"min-h-0 flex-1 overflow-auto border-t border-border bg-muted/30 p-3 text-xs","data-testid":"db-json",children:JSON.stringify(Dt(J.rows,we),null,2)}),c("div",{className:"flex shrink-0 items-center border-t border-border px-4 py-2",children:c(on,{hasNext:j,hasPrevious:K,onJumpToPage:T,onNext:B,onPageSizeChange:w,onPrevious:O,pageSize:He,prefix:"db",rangeEnd:Qe,rangeStart:Ue,total:Ie})})]})]}),J!==null&&c(ln,{columns:x,facets:L,onFacetFilter:D,onToggleFacet:Ye}),Pe!==null&&J!==null&&c(vr,{columns:J.columns,onClose:at,onNavigate:Be,refs:J.refs,row:Pe}),Ne!==null&&c(dn,{column:Ne.column,onClose:bt,value:Ne.value}),nt&&Y!==null&&Oe!==void 0&&c(Xn,{columns:Oe,fkPools:tt,onClose:ve,onInsertRows:lt,table:Y})]})};export{io as DataBrowser};
@@ -1 +1 @@
1
- import"react/compiler-runtime";import"@tanstack/react-router";import"react";import"./badge-BbuuAio7.js";import"./card-CIDGUN6K.js";import"./empty-state-Cg7t_8qu.js";import"./use-admin-query-Di3fLE8H.js";import"./DEFAULT_LOCALE-BZ4NojpD.js";import"./ADMIN_FUNCTIONS-BYNSbBVE.js";import"./internal-AtZ4bTal.js";import"./utils-bhneXptQ.js";import"./DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{H as b}from"./home-panel-B-8BCffw.js";import"react/jsx-runtime";export{b as HomePanel};
1
+ import"react/compiler-runtime";import"@tanstack/react-router";import"react";import"./badge-BbuuAio7.js";import"./card-CIDGUN6K.js";import"./empty-state-Cg7t_8qu.js";import"./use-admin-query-Di3fLE8H.js";import"./DEFAULT_LOCALE-BZ4NojpD.js";import"./ADMIN_FUNCTIONS-CpgIo9pj.js";import"./internal-AtZ4bTal.js";import"./utils-bhneXptQ.js";import"./DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{H as b}from"./home-panel-Cm88Nvqh.js";import"react/jsx-runtime";export{b as HomePanel};
@@ -1 +1 @@
1
- import"react/compiler-runtime";import"@tanstack/react-router";import"react";import{S as h}from"./studio-BHA7hnI3.js";import"./ErrorBoundary-DvzYskH7.js";import"./badge-BbuuAio7.js";import"./input-JHu63lTv.js";import"./skeleton-C1wQ9M5t.js";import"./home-panel-B-8BCffw.js";import"./DEFAULT_LOCALE-BZ4NojpD.js";import"./StudioI18nProvider-CZ5h4nrV.js";import"./data-view-params-C8T3bW1z.js";import"./internal-AtZ4bTal.js";import"./utils-bhneXptQ.js";import"./CommandPalette-CVIaY3j8.js";import"react/jsx-runtime";export{h as Studio};
1
+ import"react/compiler-runtime";import"@tanstack/react-router";import"react";import{S as h}from"./studio-BmWFd-Rz.js";import"./ErrorBoundary-DvzYskH7.js";import"./badge-BbuuAio7.js";import"./input-JHu63lTv.js";import"./skeleton-C1wQ9M5t.js";import"./home-panel-Cm88Nvqh.js";import"./DEFAULT_LOCALE-BZ4NojpD.js";import"./StudioI18nProvider-CZ5h4nrV.js";import"./data-view-params-C8T3bW1z.js";import"./internal-AtZ4bTal.js";import"./utils-bhneXptQ.js";import"./CommandPalette-CVIaY3j8.js";import"react/jsx-runtime";export{h as Studio};
@@ -1 +1 @@
1
- import{c as _}from"react/compiler-runtime";import{LunoraClient as B}from"@lunora/client";import{LunoraProvider as W}from"@lunora/react";import{useState as j,useEffect as L}from"react";import{ErrorBoundary as z}from"./ErrorBoundary-DvzYskH7.js";import{b as K,f as Y,a as Z,m as q,S as G}from"./studio-BHA7hnI3.js";import H from"./useDebounced-Ihdiid_k.js";import{useT as R,createStudioI18n as J}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{StudioI18nProvider as U}from"./StudioI18nProvider-CZ5h4nrV.js";import{r as Q}from"./internal-AtZ4bTal.js";import D from"./STUDIO_ROOT_CLASS-C6MccdVk.js";import{a as M}from"./browser-storage-xjTyMKY0.js";import{c as F}from"./utils-bhneXptQ.js";import{u as V}from"./button-BkCrNcAs.js";import{u as X}from"./input-JHu63lTv.js";import{jsx as b,jsxs as P}from"react/jsx-runtime";const C="lunora-studio-admin-token",ee=()=>{try{return M("session")?.getItem(C)??""}catch{return""}},te=k=>{const e=M("session");if(e!==void 0)try{k===""?e.removeItem(C):e.setItem(C,k)}catch{}},oe="/_lunora/admin/ws-token",ne=k=>{const e=k;return typeof e?.token=="string"&&e.token.length>0&&typeof e.expiresAtMs=="number"},re=k=>{const{adminToken:e,baseUrl:c}=k,o=k.fetchImpl??fetch;let n=c;for(;n.endsWith("/");)n=n.slice(0,-1);const s=`${n}${oe}`;let t,r=!1,l;const m=async()=>{const f=await o(s,{headers:{authorization:`Bearer ${e}`},method:"POST"});if(f.status===404||f.status===405)return r=!0,e;if(!f.ok)throw new Error(`ws-token mint failed: ${String(f.status)}`);const a=await f.json().catch(()=>{});if(!ne(a))throw new Error("ws-token mint failed: malformed response body");return t=a,a.token};return{getToken:async()=>r?e:t!==void 0&&t.expiresAtMs-1e4>Date.now()?t.token:(l??=m().finally(()=>{l=void 0}),l),invalidate:()=>{t=void 0}}},le=k=>{const e=_(42),{onSubmit:c}=k,o=R(),[n,s]=j("");let t;e[0]!==n?(t=n.trim(),e[0]=n,e[1]=t):t=e[1];const r=t;let l;e[2]!==c||e[3]!==r?(l=y=>{y.preventDefault(),r!==""&&c(r)},e[2]=c,e[3]=r,e[4]=l):l=e[4];const m=l;let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=b("div",{className:"h-10 w-10 text-foreground",children:b(Y,{})}),e[5]=f):f=e[5];let a;e[6]!==o?(a=o("Connect to Lunora Studio"),e[6]=o,e[7]=a):a=e[7];let v;e[8]!==a?(v=b("h1",{className:"text-base font-semibold text-foreground",children:a}),e[8]=a,e[9]=v):v=e[9];let g;e[10]!==o?(g=o("Enter your admin token to access the studio."),e[10]=o,e[11]=g):g=e[11];let u;e[12]!==g?(u=b("p",{className:"text-[13px] text-muted-foreground",children:g}),e[12]=g,e[13]=u):u=e[13];let d;e[14]!==v||e[15]!==u?(d=P("div",{className:"flex flex-col items-center gap-3 text-center",children:[f,P("div",{className:"flex flex-col gap-1",children:[v,u]})]}),e[14]=v,e[15]=u,e[16]=d):d=e[16];let h;e[17]!==o?(h=o("admin token"),e[17]=o,e[18]=h):h=e[18];let i;e[19]!==h?(i=b("label",{className:"text-xs font-medium text-foreground",htmlFor:"lunora-studio-login-token",children:h}),e[19]=h,e[20]=i):i=e[20];let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=y=>{s(y.target.value)},e[21]=p):p=e[21];let x;e[22]!==n?(x=b(X,{autoComplete:"off",autoFocus:!0,"data-testid":"lunora-studio-login-token",id:"lunora-studio-login-token",onChange:p,placeholder:"LUNORA_ADMIN_TOKEN",type:"password",value:n}),e[22]=n,e[23]=x):x=e[23];let S;e[24]!==o?(S=o("From your worker's LUNORA_ADMIN_TOKEN — your project's .dev.vars in dev, or a deployment secret in production."),e[24]=o,e[25]=S):S=e[25];let I;e[26]!==S?(I=b("p",{className:"text-[11px] text-muted-foreground",children:S}),e[26]=S,e[27]=I):I=e[27];let T;e[28]!==i||e[29]!==x||e[30]!==I?(T=P("div",{className:"flex flex-col gap-1.5",children:[i,x,I]}),e[28]=i,e[29]=x,e[30]=I,e[31]=T):T=e[31];const A=r==="";let w;e[32]!==o?(w=o("Connect"),e[32]=o,e[33]=w):w=e[33];let N;e[34]!==A||e[35]!==w?(N=b(V,{"data-testid":"lunora-studio-login-submit",disabled:A,type:"submit",children:w}),e[34]=A,e[35]=w,e[36]=N):N=e[36];let $;return e[37]!==m||e[38]!==T||e[39]!==N||e[40]!==d?($=P("form",{className:"flex w-full max-w-sm flex-col gap-5 rounded-xl border border-border bg-card p-7 shadow-lg","data-testid":"lunora-studio-login",onSubmit:m,children:[d,T,N]}),e[37]=m,e[38]=T,e[39]=N,e[40]=d,e[41]=$):$=e[41],$},ae=k=>{const e=_(10),{i18n:c,onSubmit:o}=k,{resolvedTheme:n}=K(),s=n==="dark"&&"dark";let t;e[0]!==s?(t=F(D,s,"flex h-dvh items-center justify-center bg-sidebar p-6 text-sm text-foreground"),e[0]=s,e[1]=t):t=e[1];let r;e[2]!==o?(r=b(le,{onSubmit:o}),e[2]=o,e[3]=r):r=e[3];let l;e[4]!==c||e[5]!==r?(l=b(U,{i18n:c,children:r}),e[4]=c,e[5]=r,e[6]=l):l=e[6];let m;return e[7]!==t||e[8]!==l?(m=b("div",{className:t,"data-testid":"lunora-studio-login-root",children:l}),e[7]=t,e[8]=l,e[9]=m):m=e[9],m},se=k=>{const e=_(23),{basePath:c,chrome:o,studio:n}=k,s=R();let t;e[0]!==s?(t=s("Studio failed"),e[0]=s,e[1]=t):t=e[1];let r;e[2]!==s?(r=s("Studio"),e[2]=s,e[3]=r):r=e[3];let l;e[4]!==s?(l=s("Try again"),e[4]=s,e[5]=l):l=e[5];const m=n?.dataEditable,f=n?.functions,a=n?.initialShardKey,v=n?.openApiSpec,g=n?.openRpcSpec,u=n?.runAsIdentity,d=n?.scheduledCancel,h=n?.scheduledLoad,i=n?.schemaEditable;let p;e[6]!==c||e[7]!==o||e[8]!==d||e[9]!==h||e[10]!==i||e[11]!==m||e[12]!==f||e[13]!==a||e[14]!==v||e[15]!==g||e[16]!==u?(p=b(G,{basePath:c,chrome:o,dataEditable:m,functions:f,initialShardKey:a,openApiSpec:v,openRpcSpec:g,runAsIdentity:u,scheduledCancel:d,scheduledLoad:h,schemaEditable:i}),e[6]=c,e[7]=o,e[8]=d,e[9]=h,e[10]=i,e[11]=m,e[12]=f,e[13]=a,e[14]=v,e[15]=g,e[16]=u,e[17]=p):p=e[17];let x;return e[18]!==t||e[19]!==p||e[20]!==r||e[21]!==l?(x=b(z,{fallbackTitle:t,label:r,retryLabel:l,children:p}),e[18]=t,e[19]=p,e[20]=r,e[21]=l,e[22]=x):x=e[22],x},ie=k=>{const e=_(20),{basePath:c,clearToken:o,client:n,i18n:s,onTokenChange:t,rulesInstalled:r,studio:l,token:m}=k,{resolvedTheme:f}=K();let a;e[0]!==o||e[1]!==t||e[2]!==r||e[3]!==m?(a={clearToken:o,onTokenChange:t,rulesInstalled:r,token:m},e[0]=o,e[1]=t,e[2]=r,e[3]=m,e[4]=a):a=e[4];const v=a,g=f==="dark"&&"dark";let u;e[5]!==g?(u=F(D,g,"flex h-dvh flex-col overflow-hidden bg-sidebar text-sm text-foreground"),e[5]=g,e[6]=u):u=e[6];let d;e[7]!==c||e[8]!==v||e[9]!==l?(d=b(q,{children:b(se,{basePath:c,chrome:v,studio:l})}),e[7]=c,e[8]=v,e[9]=l,e[10]=d):d=e[10];let h;e[11]!==s||e[12]!==d?(h=b(U,{i18n:s,children:d}),e[11]=s,e[12]=d,e[13]=h):h=e[13];let i;e[14]!==n||e[15]!==h?(i=b(W,{client:n,children:h}),e[14]=n,e[15]=h,e[16]=i):i=e[16];let p;return e[17]!==u||e[18]!==i?(p=b("div",{className:u,"data-testid":"lunora-studio-app",children:i}),e[17]=u,e[18]=i,e[19]=p):p=e[19],p},Ne=k=>{const e=_(25);let c;e[0]!==k?(c=k===void 0?{}:k,e[0]=k,e[1]=c):c=e[1];const{adminToken:o,basePath:n,baseUrl:s,client:t,rulesInstalled:r,studio:l,locale:m}=c;let f;e[2]!==o?(f=()=>o??ee(),e[2]=o,e[3]=f):f=e[3];const[a,v]=j(f);let g,u;e[4]!==a?(g=()=>{te(a)},u=[a],e[4]=a,e[5]=g,e[6]=u):(g=e[5],u=e[6]),L(g,u);const d=H(a,300);let h;e:{if(t!==void 0){h=t;break e}let y;if(e[7]!==s||e[8]!==d){const O=Q(s),E=d===""?void 0:re({adminToken:d,baseUrl:O});y=new B({url:O,...E===void 0?{}:{wsToken:E.getToken}}),E!==void 0&&(y.setAuthToken(d),y.onTokenExpired(E.invalidate)),e[7]=s,e[8]=d,e[9]=y}else y=e[9];h=y}const i=h;let p,x;e[10]!==i||e[11]!==t?(p=()=>()=>{t===void 0&&i.close()},x=[i,t],e[10]=i,e[11]=t,e[12]=p,e[13]=x):(p=e[12],x=e[13]),L(p,x);let S;e[14]===Symbol.for("react.memo_cache_sentinel")?(S=y=>{v(y.target.value)},e[14]=S):S=e[14];const I=S;let T;e[15]===Symbol.for("react.memo_cache_sentinel")?(T=()=>{v("")},e[15]=T):T=e[15];const A=T;let w;e[16]!==m?(w=J(m),e[16]=m,e[17]=w):w=e[17];const N=w;let $;return e[18]!==n||e[19]!==i||e[20]!==N||e[21]!==r||e[22]!==l||e[23]!==a?($=b(Z,{children:a===""?b(ae,{i18n:N,onSubmit:v}):b(ie,{basePath:n,clearToken:A,client:i,i18n:N,onTokenChange:I,rulesInstalled:r,studio:l,token:a})}),e[18]=n,e[19]=i,e[20]=N,e[21]=r,e[22]=l,e[23]=a,e[24]=$):$=e[24],$};export{Ne as StudioApp};
1
+ import{c as _}from"react/compiler-runtime";import{LunoraClient as B}from"@lunora/client";import{LunoraProvider as W}from"@lunora/react";import{useState as j,useEffect as L}from"react";import{ErrorBoundary as z}from"./ErrorBoundary-DvzYskH7.js";import{b as K,f as Y,a as Z,m as q,S as G}from"./studio-BmWFd-Rz.js";import H from"./useDebounced-Ihdiid_k.js";import{useT as R,createStudioI18n as J}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{StudioI18nProvider as U}from"./StudioI18nProvider-CZ5h4nrV.js";import{r as Q}from"./internal-AtZ4bTal.js";import D from"./STUDIO_ROOT_CLASS-C6MccdVk.js";import{a as M}from"./browser-storage-xjTyMKY0.js";import{c as F}from"./utils-bhneXptQ.js";import{u as V}from"./button-BkCrNcAs.js";import{u as X}from"./input-JHu63lTv.js";import{jsx as b,jsxs as P}from"react/jsx-runtime";const C="lunora-studio-admin-token",ee=()=>{try{return M("session")?.getItem(C)??""}catch{return""}},te=k=>{const e=M("session");if(e!==void 0)try{k===""?e.removeItem(C):e.setItem(C,k)}catch{}},oe="/_lunora/admin/ws-token",ne=k=>{const e=k;return typeof e?.token=="string"&&e.token.length>0&&typeof e.expiresAtMs=="number"},re=k=>{const{adminToken:e,baseUrl:c}=k,o=k.fetchImpl??fetch;let n=c;for(;n.endsWith("/");)n=n.slice(0,-1);const s=`${n}${oe}`;let t,r=!1,l;const m=async()=>{const f=await o(s,{headers:{authorization:`Bearer ${e}`},method:"POST"});if(f.status===404||f.status===405)return r=!0,e;if(!f.ok)throw new Error(`ws-token mint failed: ${String(f.status)}`);const a=await f.json().catch(()=>{});if(!ne(a))throw new Error("ws-token mint failed: malformed response body");return t=a,a.token};return{getToken:async()=>r?e:t!==void 0&&t.expiresAtMs-1e4>Date.now()?t.token:(l??=m().finally(()=>{l=void 0}),l),invalidate:()=>{t=void 0}}},le=k=>{const e=_(42),{onSubmit:c}=k,o=R(),[n,s]=j("");let t;e[0]!==n?(t=n.trim(),e[0]=n,e[1]=t):t=e[1];const r=t;let l;e[2]!==c||e[3]!==r?(l=y=>{y.preventDefault(),r!==""&&c(r)},e[2]=c,e[3]=r,e[4]=l):l=e[4];const m=l;let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=b("div",{className:"h-10 w-10 text-foreground",children:b(Y,{})}),e[5]=f):f=e[5];let a;e[6]!==o?(a=o("Connect to Lunora Studio"),e[6]=o,e[7]=a):a=e[7];let v;e[8]!==a?(v=b("h1",{className:"text-base font-semibold text-foreground",children:a}),e[8]=a,e[9]=v):v=e[9];let g;e[10]!==o?(g=o("Enter your admin token to access the studio."),e[10]=o,e[11]=g):g=e[11];let u;e[12]!==g?(u=b("p",{className:"text-[13px] text-muted-foreground",children:g}),e[12]=g,e[13]=u):u=e[13];let d;e[14]!==v||e[15]!==u?(d=P("div",{className:"flex flex-col items-center gap-3 text-center",children:[f,P("div",{className:"flex flex-col gap-1",children:[v,u]})]}),e[14]=v,e[15]=u,e[16]=d):d=e[16];let h;e[17]!==o?(h=o("admin token"),e[17]=o,e[18]=h):h=e[18];let i;e[19]!==h?(i=b("label",{className:"text-xs font-medium text-foreground",htmlFor:"lunora-studio-login-token",children:h}),e[19]=h,e[20]=i):i=e[20];let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=y=>{s(y.target.value)},e[21]=p):p=e[21];let x;e[22]!==n?(x=b(X,{autoComplete:"off",autoFocus:!0,"data-testid":"lunora-studio-login-token",id:"lunora-studio-login-token",onChange:p,placeholder:"LUNORA_ADMIN_TOKEN",type:"password",value:n}),e[22]=n,e[23]=x):x=e[23];let S;e[24]!==o?(S=o("From your worker's LUNORA_ADMIN_TOKEN — your project's .dev.vars in dev, or a deployment secret in production."),e[24]=o,e[25]=S):S=e[25];let I;e[26]!==S?(I=b("p",{className:"text-[11px] text-muted-foreground",children:S}),e[26]=S,e[27]=I):I=e[27];let T;e[28]!==i||e[29]!==x||e[30]!==I?(T=P("div",{className:"flex flex-col gap-1.5",children:[i,x,I]}),e[28]=i,e[29]=x,e[30]=I,e[31]=T):T=e[31];const A=r==="";let w;e[32]!==o?(w=o("Connect"),e[32]=o,e[33]=w):w=e[33];let N;e[34]!==A||e[35]!==w?(N=b(V,{"data-testid":"lunora-studio-login-submit",disabled:A,type:"submit",children:w}),e[34]=A,e[35]=w,e[36]=N):N=e[36];let $;return e[37]!==m||e[38]!==T||e[39]!==N||e[40]!==d?($=P("form",{className:"flex w-full max-w-sm flex-col gap-5 rounded-xl border border-border bg-card p-7 shadow-lg","data-testid":"lunora-studio-login",onSubmit:m,children:[d,T,N]}),e[37]=m,e[38]=T,e[39]=N,e[40]=d,e[41]=$):$=e[41],$},ae=k=>{const e=_(10),{i18n:c,onSubmit:o}=k,{resolvedTheme:n}=K(),s=n==="dark"&&"dark";let t;e[0]!==s?(t=F(D,s,"flex h-dvh items-center justify-center bg-sidebar p-6 text-sm text-foreground"),e[0]=s,e[1]=t):t=e[1];let r;e[2]!==o?(r=b(le,{onSubmit:o}),e[2]=o,e[3]=r):r=e[3];let l;e[4]!==c||e[5]!==r?(l=b(U,{i18n:c,children:r}),e[4]=c,e[5]=r,e[6]=l):l=e[6];let m;return e[7]!==t||e[8]!==l?(m=b("div",{className:t,"data-testid":"lunora-studio-login-root",children:l}),e[7]=t,e[8]=l,e[9]=m):m=e[9],m},se=k=>{const e=_(23),{basePath:c,chrome:o,studio:n}=k,s=R();let t;e[0]!==s?(t=s("Studio failed"),e[0]=s,e[1]=t):t=e[1];let r;e[2]!==s?(r=s("Studio"),e[2]=s,e[3]=r):r=e[3];let l;e[4]!==s?(l=s("Try again"),e[4]=s,e[5]=l):l=e[5];const m=n?.dataEditable,f=n?.functions,a=n?.initialShardKey,v=n?.openApiSpec,g=n?.openRpcSpec,u=n?.runAsIdentity,d=n?.scheduledCancel,h=n?.scheduledLoad,i=n?.schemaEditable;let p;e[6]!==c||e[7]!==o||e[8]!==d||e[9]!==h||e[10]!==i||e[11]!==m||e[12]!==f||e[13]!==a||e[14]!==v||e[15]!==g||e[16]!==u?(p=b(G,{basePath:c,chrome:o,dataEditable:m,functions:f,initialShardKey:a,openApiSpec:v,openRpcSpec:g,runAsIdentity:u,scheduledCancel:d,scheduledLoad:h,schemaEditable:i}),e[6]=c,e[7]=o,e[8]=d,e[9]=h,e[10]=i,e[11]=m,e[12]=f,e[13]=a,e[14]=v,e[15]=g,e[16]=u,e[17]=p):p=e[17];let x;return e[18]!==t||e[19]!==p||e[20]!==r||e[21]!==l?(x=b(z,{fallbackTitle:t,label:r,retryLabel:l,children:p}),e[18]=t,e[19]=p,e[20]=r,e[21]=l,e[22]=x):x=e[22],x},ie=k=>{const e=_(20),{basePath:c,clearToken:o,client:n,i18n:s,onTokenChange:t,rulesInstalled:r,studio:l,token:m}=k,{resolvedTheme:f}=K();let a;e[0]!==o||e[1]!==t||e[2]!==r||e[3]!==m?(a={clearToken:o,onTokenChange:t,rulesInstalled:r,token:m},e[0]=o,e[1]=t,e[2]=r,e[3]=m,e[4]=a):a=e[4];const v=a,g=f==="dark"&&"dark";let u;e[5]!==g?(u=F(D,g,"flex h-dvh flex-col overflow-hidden bg-sidebar text-sm text-foreground"),e[5]=g,e[6]=u):u=e[6];let d;e[7]!==c||e[8]!==v||e[9]!==l?(d=b(q,{children:b(se,{basePath:c,chrome:v,studio:l})}),e[7]=c,e[8]=v,e[9]=l,e[10]=d):d=e[10];let h;e[11]!==s||e[12]!==d?(h=b(U,{i18n:s,children:d}),e[11]=s,e[12]=d,e[13]=h):h=e[13];let i;e[14]!==n||e[15]!==h?(i=b(W,{client:n,children:h}),e[14]=n,e[15]=h,e[16]=i):i=e[16];let p;return e[17]!==u||e[18]!==i?(p=b("div",{className:u,"data-testid":"lunora-studio-app",children:i}),e[17]=u,e[18]=i,e[19]=p):p=e[19],p},Ne=k=>{const e=_(25);let c;e[0]!==k?(c=k===void 0?{}:k,e[0]=k,e[1]=c):c=e[1];const{adminToken:o,basePath:n,baseUrl:s,client:t,rulesInstalled:r,studio:l,locale:m}=c;let f;e[2]!==o?(f=()=>o??ee(),e[2]=o,e[3]=f):f=e[3];const[a,v]=j(f);let g,u;e[4]!==a?(g=()=>{te(a)},u=[a],e[4]=a,e[5]=g,e[6]=u):(g=e[5],u=e[6]),L(g,u);const d=H(a,300);let h;e:{if(t!==void 0){h=t;break e}let y;if(e[7]!==s||e[8]!==d){const O=Q(s),E=d===""?void 0:re({adminToken:d,baseUrl:O});y=new B({url:O,...E===void 0?{}:{wsToken:E.getToken}}),E!==void 0&&(y.setAuthToken(d),y.onTokenExpired(E.invalidate)),e[7]=s,e[8]=d,e[9]=y}else y=e[9];h=y}const i=h;let p,x;e[10]!==i||e[11]!==t?(p=()=>()=>{t===void 0&&i.close()},x=[i,t],e[10]=i,e[11]=t,e[12]=p,e[13]=x):(p=e[12],x=e[13]),L(p,x);let S;e[14]===Symbol.for("react.memo_cache_sentinel")?(S=y=>{v(y.target.value)},e[14]=S):S=e[14];const I=S;let T;e[15]===Symbol.for("react.memo_cache_sentinel")?(T=()=>{v("")},e[15]=T):T=e[15];const A=T;let w;e[16]!==m?(w=J(m),e[16]=m,e[17]=w):w=e[17];const N=w;let $;return e[18]!==n||e[19]!==i||e[20]!==N||e[21]!==r||e[22]!==l||e[23]!==a?($=b(Z,{children:a===""?b(ae,{i18n:N,onSubmit:v}):b(ie,{basePath:n,clearToken:A,client:i,i18n:N,onTokenChange:I,rulesInstalled:r,studio:l,token:a})}),e[18]=n,e[19]=i,e[20]=N,e[21]=r,e[22]=l,e[23]=a,e[24]=$):$=e[24],$};export{Ne as StudioApp};
@@ -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 q}from"./card-CIDGUN6K.js";import{E as rt}from"./empty-state-Cg7t_8qu.js";import{K as _e}from"./use-admin-query-Di3fLE8H.js";import{useT as I}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Ne}from"./ADMIN_FUNCTIONS-BYNSbBVE.js";import{f as Se,c as st,a as ot,r as lt,g as it,k as ct}from"./internal-AtZ4bTal.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,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"),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(q,{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(`
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 q}from"./card-CIDGUN6K.js";import{E as rt}from"./empty-state-Cg7t_8qu.js";import{K as _e}from"./use-admin-query-Di3fLE8H.js";import{useT as I}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Ne}from"./ADMIN_FUNCTIONS-CpgIo9pj.js";import{f as Se,c as st,a as ot,r as lt,g as it,k as ct}from"./internal-AtZ4bTal.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,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"),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(q,{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(q,{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(q,{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(q,{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(q,{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(q,{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(Kt)]})]}),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(q,{"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(q,{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,K,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(Rt)),R=v?.cache;let Te;e[46]!==R?(Te=R!=null&&R.hits+R.misses>0?Math.round(R.hits/(R.hits+R.misses)*100):null,e[46]=R,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 Re=Je(Ce);let xe;e[48]!==n?(xe=n("Requests"),e[48]=n,e[49]=xe):xe=e[49];const qe=v?.requests??0;let be;e[50]!==qe?(be=qe.toLocaleString(),e[50]=qe,e[51]=be):be=e[51],e[52]!==Ce||e[53]!==Re||e[54]!==xe||e[55]!==be?(O=r(Oe,{delta:Re,label:xe,trend:Ce,value:be}),e[52]=Ce,e[53]=Re,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?(K=r(Oe,{delta:Pe,label:ye,trend:Ie,value:ve}),e[61]=Ie,e[62]=Pe,e[63]=ye,e[64]=ve,e[65]=K):K=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]=K,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],K=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 Ke=v?.databaseSize??null;let G;e[81]!==Ke?(G=ct(Ke),e[81]=Ke,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]!==K||e[91]!==U||e[92]!==Q?(Y=h("div",{className:D,"data-testid":B,children:[O,K,U,Q]}),e[87]=D,e[88]=B,e[89]=O,e[90]=K,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 Kt(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 Rt(t){return t.maxDurationMs}export{Zt as H,pt as S};