tinbase 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/admin/ui.js CHANGED
@@ -61,9 +61,9 @@ Error generating stack: \`+e.message+\`
61
61
  \`},On=function(){var e=parseInt(document.body.getAttribute(\`data-scroll-locked\`)||\`0\`,10);return isFinite(e)?e:0},kn=function(){_.useEffect(function(){return document.body.setAttribute(En,(On()+1).toString()),function(){var e=On()-1;e<=0?document.body.removeAttribute(En):document.body.setAttribute(En,e.toString())}},[])},An=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?\`margin\`:r;kn();var a=_.useMemo(function(){return wn(i)},[i]);return _.createElement(Tn,{styles:Dn(a,!t,i,n?\`\`:\`!important\`)})},jn=!1;if(typeof window<\`u\`)try{var Mn=Object.defineProperty({},"passive",{get:function(){return jn=!0,!0}});window.addEventListener(\`test\`,Mn,Mn),window.removeEventListener(\`test\`,Mn,Mn)}catch{jn=!1}var Nn=jn?{passive:!1}:!1,Pn=function(e){return e.tagName===\`TEXTAREA\`},Fn=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==\`hidden\`&&!(n.overflowY===n.overflowX&&!Pn(e)&&n[t]===\`visible\`)},In=function(e){return Fn(e,\`overflowY\`)},Ln=function(e){return Fn(e,\`overflowX\`)},Rn=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<\`u\`&&r instanceof ShadowRoot&&(r=r.host),Vn(e,r)){var i=Hn(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},zn=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},Bn=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},Vn=function(e,t){return e===\`v\`?In(t):Ln(t)},Hn=function(e,t){return e===\`v\`?zn(t):Bn(t)},Un=function(e,t){return e===\`h\`&&t===\`rtl\`?-1:1},Wn=function(e,t,n,r,i){var a=Un(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=Hn(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&Vn(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},Gn=function(e){return\`changedTouches\`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Kn=function(e){return[e.deltaX,e.deltaY]},qn=function(e){return e&&\`current\`in e?e.current:e},Jn=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Yn=function(e){return\`
62
62
  .block-interactivity-\${e} {pointer-events: none;}
63
63
  .allow-interactivity-\${e} {pointer-events: all;}
64
- \`},Xn=0,Zn=[];function Qn(e){var t=_.useRef([]),n=_.useRef([0,0]),r=_.useRef(),i=_.useState(Xn++)[0],a=_.useState(bn)[0],o=_.useRef(e);_.useEffect(function(){o.current=e},[e]),_.useEffect(function(){if(e.inert){document.body.classList.add(\`block-interactivity-\${i}\`);var t=Jt([e.lockRef.current],(e.shards||[]).map(qn),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(\`allow-interactivity-\${i}\`)}),function(){document.body.classList.remove(\`block-interactivity-\${i}\`),t.forEach(function(e){return e.classList.remove(\`allow-interactivity-\${i}\`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=_.useCallback(function(e,t){if(\`touches\`in e&&e.touches.length===2||e.type===\`wheel\`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=Gn(e),a=n.current,s=\`deltaX\`in e?e.deltaX:a[0]-i[0],c=\`deltaY\`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?\`h\`:\`v\`;if(\`touches\`in e&&d===\`h\`&&u.type===\`range\`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=Rn(d,u);if(!m)return!0;if(m?l=d:(l=d===\`v\`?\`h\`:\`v\`,m=Rn(d,u)),!m)return!1;if(!r.current&&\`changedTouches\`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Wn(h,t,e,h===\`h\`?s:c,!0)},[]),c=_.useCallback(function(e){var n=e;if(!(!Zn.length||Zn[Zn.length-1]!==a)){var r=\`deltaY\`in n?Kn(n):Gn(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&Jn(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(qn).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=_.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:$n(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=_.useCallback(function(e){n.current=Gn(e),r.current=void 0},[]),d=_.useCallback(function(t){l(t.type,Kn(t),t.target,s(t,e.lockRef.current))},[]),f=_.useCallback(function(t){l(t.type,Gn(t),t.target,s(t,e.lockRef.current))},[]);_.useEffect(function(){return Zn.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener(\`wheel\`,c,Nn),document.addEventListener(\`touchmove\`,c,Nn),document.addEventListener(\`touchstart\`,u,Nn),function(){Zn=Zn.filter(function(e){return e!==a}),document.removeEventListener(\`wheel\`,c,Nn),document.removeEventListener(\`touchmove\`,c,Nn),document.removeEventListener(\`touchstart\`,u,Nn)}},[]);var p=e.removeScrollBar,m=e.inert;return _.createElement(_.Fragment,null,m?_.createElement(a,{styles:Yn(i)}):null,p?_.createElement(An,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function $n(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var er=ln(un,Qn),tr=_.forwardRef(function(e,t){return _.createElement(fn,Kt({},e,{ref:t,sideCar:er}))});tr.classNames=fn.classNames;var nr=function(e){return typeof document>\`u\`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},rr=new WeakMap,ir=new WeakMap,ar={},or=0,sr=function(e){return e&&(e.host||sr(e.parentNode))},cr=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=sr(t);return n&&e.contains(n)?n:(console.error(\`aria-hidden\`,t,\`in not contained inside\`,e,\`. Doing nothing\`),null)}).filter(function(e){return!!e})},lr=function(e,t,n,r){var i=cr(t,Array.isArray(e)?e:[e]);ar[n]||(ar[n]=new WeakMap);var a=ar[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==\`false\`,c=(rr.get(e)||0)+1,l=(a.get(e)||0)+1;rr.set(e,c),a.set(e,l),o.push(e),c===1&&i&&ir.set(e,!0),l===1&&e.setAttribute(n,\`true\`),i||e.setAttribute(r,\`true\`)}catch(t){console.error(\`aria-hidden: cannot operate on \`,e,t)}})};return u(t),s.clear(),or++,function(){o.forEach(function(e){var t=rr.get(e)-1,i=a.get(e)-1;rr.set(e,t),a.set(e,i),t||(ir.has(e)||e.removeAttribute(r),ir.delete(e)),i||e.removeAttribute(n)}),or--,or||(rr=new WeakMap,rr=new WeakMap,ir=new WeakMap,ar={})}},ur=function(e,t,n){n===void 0&&(n=\`data-aria-hidden\`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||nr(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(\`[aria-live], script\`))),lr(r,i,n,\`aria-hidden\`)):function(){return null}},dr=\`Dialog\`,[fr,pr]=ke(dr),[mr,hr]=fr(dr),gr=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=_.useRef(null),c=_.useRef(null),[l,u]=ze({prop:r,defaultProp:i??!1,onChange:a,caller:dr});return(0,j.jsx)(mr,{scope:t,triggerRef:s,contentRef:c,contentId:Pe(),titleId:Pe(),descriptionId:Pe(),open:l,onOpenChange:u,onOpenToggle:_.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};gr.displayName=dr;var _r=\`DialogTrigger\`,vr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(_r,n),a=De(t,i.triggerRef);return(0,j.jsx)(tt.button,{type:\`button\`,"aria-haspopup":\`dialog\`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Rr(i.open),...r,ref:a,onClick:we(e.onClick,i.onOpenToggle)})});vr.displayName=_r;var yr=\`DialogPortal\`,[br,xr]=fr(yr,{forceMount:void 0}),Sr=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=hr(yr,t);return(0,j.jsx)(br,{scope:t,forceMount:n,children:_.Children.map(r,e=>(0,j.jsx)(It,{present:n||a.open,children:(0,j.jsx)(Pt,{asChild:!0,container:i,children:e})}))})};Sr.displayName=yr;var Cr=\`DialogOverlay\`,wr=_.forwardRef((e,t)=>{let n=xr(Cr,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=hr(Cr,e.__scopeDialog);return a.modal?(0,j.jsx)(It,{present:r||a.open,children:(0,j.jsx)(Er,{...i,ref:t})}):null});wr.displayName=Cr;var Tr=Ue(\`DialogOverlay.RemoveScroll\`),Er=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Cr,n),a=De(t,pt());return(0,j.jsx)(tr,{as:Tr,allowPinchZoom:!0,shards:[i.contentRef],children:(0,j.jsx)(tt.div,{"data-state":Rr(i.open),...r,ref:a,style:{pointerEvents:\`auto\`,...r.style}})})}),Dr=\`DialogContent\`,Or=_.forwardRef((e,t)=>{let n=xr(Dr,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=hr(Dr,e.__scopeDialog);return(0,j.jsx)(It,{present:r||a.open,children:a.modal?(0,j.jsx)(kr,{...i,ref:t}):(0,j.jsx)(Ar,{...i,ref:t})})});Or.displayName=Dr;var kr=_.forwardRef((e,t)=>{let n=hr(Dr,e.__scopeDialog),r=_.useRef(null),i=De(t,n.contentRef,r);return _.useEffect(()=>{let e=r.current;if(e)return ur(e)},[]),(0,j.jsx)(jr,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:we(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:we(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:we(e.onFocusOutside,e=>e.preventDefault())})}),Ar=_.forwardRef((e,t)=>{let n=hr(Dr,e.__scopeDialog),r=_.useRef(!1),i=_.useRef(!1);return(0,j.jsx)(jr,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===\`pointerdown\`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===\`focusin\`&&i.current&&t.preventDefault()}})}),jr=_.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=hr(Dr,n);return Wt(),(0,j.jsx)(j.Fragment,{children:(0,j.jsx)(St,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,j.jsx)(ut,{role:\`dialog\`,id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":Rr(s.open),...o,ref:t,deferPointerDownOutside:!0,onDismiss:()=>s.onOpenChange(!1)})})})}),Mr=\`DialogTitle\`,Nr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Mr,n);return(0,j.jsx)(tt.h2,{id:i.titleId,...r,ref:t})});Nr.displayName=Mr;var Pr=\`DialogDescription\`,Fr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Pr,n);return(0,j.jsx)(tt.p,{id:i.descriptionId,...r,ref:t})});Fr.displayName=Pr;var Ir=\`DialogClose\`,Lr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Ir,n);return(0,j.jsx)(tt.button,{type:\`button\`,...r,ref:t,onClick:we(e.onClick,()=>i.onOpenChange(!1))})});Lr.displayName=Ir;function Rr(e){return e?\`open\`:\`closed\`}function zr(e){var t,n,r=\`\`;if(typeof e==\`string\`||typeof e==\`number\`)r+=e;else if(typeof e==\`object\`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=zr(e[t]))&&(r&&(r+=\` \`),r+=n)}else for(n in e)e[n]&&(r&&(r+=\` \`),r+=n);return r}function Br(){for(var e,t,n=0,r=\`\`,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=zr(e))&&(r&&(r+=\` \`),r+=t);return r}function N({variant:e=\`default\`,size:t=\`sm\`,className:n,...r}){return(0,j.jsx)(\`button\`,{className:Br(\`inline-flex items-center justify-center gap-1.5 rounded-md transition-colors disabled:opacity-50 disabled:pointer-events-none\`,t===\`sm\`?\`h-8 px-3 text-[13px]\`:\`h-6 px-2 text-xs\`,{default:\`bg-brand text-black hover:bg-brand/90 font-medium\`,outline:\`border border-neutral-700 text-neutral-200 hover:bg-neutral-800 hover:border-neutral-600\`,ghost:\`text-neutral-300 hover:bg-neutral-800\`,danger:\`border border-red-900/60 text-red-400 hover:bg-red-950/40\`}[e],n),...r})}function Vr({className:e,...t}){return(0,j.jsx)(\`input\`,{className:Br(\`h-8 w-full rounded-md border border-neutral-700 bg-neutral-900 px-2.5 text-[13px] text-neutral-100\`,\`placeholder:text-neutral-600 focus:border-brand focus:outline-none\`,e),...t})}function Hr({className:e,...t}){return(0,j.jsx)(\`textarea\`,{className:Br(\`w-full rounded-md border border-neutral-700 bg-neutral-900 p-3 font-mono text-[13px] text-neutral-100\`,\`placeholder:text-neutral-600 focus:border-brand focus:outline-none\`,e),...t})}function Ur({children:e}){return(0,j.jsx)(\`label\`,{className:\`mb-1 block text-xs font-medium text-neutral-400\`,children:e})}function Wr({open:e,onClose:t,title:n,children:r,wide:i}){return(0,j.jsx)(gr,{open:e,onOpenChange:e=>!e&&t(),children:(0,j.jsxs)(Sr,{children:[(0,j.jsx)(wr,{className:\`fixed inset-0 z-50 bg-black/60 backdrop-blur-sm\`}),(0,j.jsxs)(Or,{className:Br(\`fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2 rounded-lg border border-neutral-700 bg-neutral-850 bg-[#1f1f1f] shadow-2xl\`,\`max-h-[85vh] overflow-auto\`,i?\`w-[640px]\`:\`w-[440px]\`),children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between border-b border-neutral-800 px-4 py-3\`,children:[(0,j.jsx)(Nr,{className:\`text-sm font-semibold\`,children:n}),(0,j.jsx)(Lr,{className:\`text-neutral-500 hover:text-neutral-200\`,children:(0,j.jsx)(ve,{size:16})})]}),(0,j.jsx)(\`div\`,{className:\`p-4\`,children:r})]})]})})}function Gr(){return(0,j.jsx)(\`div\`,{className:\`flex items-center justify-center py-16 text-neutral-500\`,children:(0,j.jsx)(\`div\`,{className:\`size-5 animate-spin rounded-full border-2 border-neutral-700 border-t-brand\`})})}function Kr({children:e}){return(0,j.jsx)(\`div\`,{className:\`py-16 text-center text-[13px] text-neutral-500\`,children:e})}var qr=50;function Jr(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(0),[c,l]=(0,_.useState)(0),[u,d]=(0,_.useState)(!0),[f,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(\`\`),y=e.find(e=>e.name===n)||null,b=(0,_.useCallback)(async()=>{let e=await A.tables();t(e),r(t=>t??e[0]?.name??null)},[]);(0,_.useEffect)(()=>{b().finally(()=>d(!1))},[b]);let x=(0,_.useCallback)(async()=>{if(!n||!y)return;let e=y.primaryKey[0]?\`\${y.primaryKey[0]}.asc\`:void 0,{rows:t,total:r}=await A.rows(n,{limit:qr,offset:c*qr,order:e});a(t),s(r)},[n,c,y]);(0,_.useEffect)(()=>{x()},[x]);function ee(e){let t={};for(let n of y.primaryKey)t[n]=e[n];return t}async function S(e){if(!y?.primaryKey.length)return alert(\`Cannot delete: table has no primary key\`);if(confirm(\`Delete this row?\`))try{await A.deleteRow(n,ee(e)),await x(),await b()}catch(e){alert(e.message)}}return u?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex w-60 shrink-0 flex-col border-r border-neutral-800 bg-[#191919]\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between px-3 py-2.5 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:[\`Tables \`,(0,j.jsx)(\`span\`,{className:\`text-neutral-600\`,children:e.length})]}),(0,j.jsxs)(\`div\`,{className:\`flex-1 overflow-auto\`,children:[e.map(e=>(0,j.jsxs)(\`button\`,{onClick:()=>{r(e.name),l(0)},className:\`flex w-full items-center justify-between px-3 py-1.5 text-left text-[13px] \`+(n===e.name?\`bg-neutral-800 text-neutral-100\`:\`text-neutral-400 hover:bg-neutral-850 hover:bg-neutral-800/50\`),children:[(0,j.jsx)(\`span\`,{className:\`truncate font-mono\`,children:e.name}),(0,j.jsx)(\`span\`,{className:\`text-[11px] text-neutral-600\`,children:e.rowCount})]},e.name)),e.length===0&&(0,j.jsx)(Kr,{children:\`No tables. Create one in the SQL Editor.\`})]})]}),(0,j.jsx)(\`div\`,{className:\`flex min-w-0 flex-1 flex-col\`,children:y?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(\`span\`,{className:\`font-mono text-sm\`,children:y.name}),(0,j.jsxs)(\`span\`,{className:\`rounded bg-neutral-800 px-1.5 py-0.5 text-[11px] text-neutral-400\`,children:[o,\` rows\`]}),(0,j.jsxs)(\`div\`,{className:\`ml-auto flex items-center gap-1.5\`,children:[(0,j.jsx)(N,{variant:\`ghost\`,size:\`xs\`,onClick:()=>void x(),children:(0,j.jsx)(fe,{size:13})}),(0,j.jsxs)(N,{size:\`xs\`,onClick:()=>h(!0),children:[(0,j.jsx)(de,{size:13}),\` Insert\`]})]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`sticky top-0 z-10 bg-[#1c1c1c]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800\`,children:[(0,j.jsx)(\`th\`,{className:\`w-16 px-2 py-1.5\`}),y.columns.map(e=>(0,j.jsxs)(\`th\`,{className:\`whitespace-nowrap px-3 py-1.5 text-left font-medium text-neutral-400\`,children:[(0,j.jsx)(\`span\`,{className:\`font-mono text-neutral-200\`,children:e.name}),e.isPrimaryKey&&(0,j.jsx)(\`span\`,{className:\`ml-1 text-[10px] text-brand\`,children:\`PK\`}),(0,j.jsx)(\`span\`,{className:\`ml-1.5 text-[11px] font-normal text-neutral-600\`,children:e.type})]},e.name))]})}),(0,j.jsx)(\`tbody\`,{children:i.map((e,t)=>(0,j.jsxs)(\`tr\`,{className:\`group border-b border-neutral-850 border-neutral-800/60 hover:bg-neutral-800/30\`,children:[(0,j.jsx)(\`td\`,{className:\`px-2\`,children:(0,j.jsxs)(\`div\`,{className:\`flex gap-0.5 opacity-0 group-hover:opacity-100\`,children:[(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-brand\`,onClick:()=>p(e),children:(0,j.jsx)(T,{size:13})}),(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-red-400\`,onClick:()=>S(e),children:(0,j.jsx)(ge,{size:13})})]})}),y.columns.map(t=>(0,j.jsx)(\`td\`,{className:\`max-w-[320px] truncate px-3 py-1.5 font-mono text-neutral-300\`,children:(0,j.jsx)(Yr,{value:e[t.name]})},t.name))]},t))})]}),i.length===0&&(0,j.jsx)(Kr,{children:\`No rows yet.\`})]}),(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-t border-neutral-800 px-4 py-2 text-xs text-neutral-500\`,children:[(0,j.jsx)(N,{variant:\`ghost\`,size:\`xs\`,disabled:c===0,onClick:()=>l(e=>e-1),children:(0,j.jsx)(ie,{size:13})}),(0,j.jsxs)(\`span\`,{children:[o===0?0:c*qr+1,\`–\`,Math.min((c+1)*qr,o),\` of \`,o]}),(0,j.jsx)(N,{variant:\`ghost\`,size:\`xs\`,disabled:(c+1)*qr>=o,onClick:()=>l(e=>e+1),children:(0,j.jsx)(ae,{size:13})})]})]}):(0,j.jsx)(Kr,{children:\`Select a table.\`})}),f&&y&&(0,j.jsx)(Xr,{table:y,initial:f,onClose:()=>p(null),onSave:async e=>{await A.updateRow(n,ee(f),e),p(null),await x()}}),m&&y&&(0,j.jsx)(Xr,{table:y,initial:{},isNew:!0,onClose:()=>h(!1),onSave:async e=>{await A.insertRow(n,e),h(!1),await x(),await b()}}),g&&(0,j.jsx)(\`p\`,{className:\`text-red-400\`,children:g})]})}function Yr({value:e}){return e==null?(0,j.jsx)(\`span\`,{className:\`text-neutral-600\`,children:\`NULL\`}):typeof e==\`boolean\`?(0,j.jsx)(\`span\`,{className:\`text-blue-400\`,children:String(e)}):typeof e==\`object\`?(0,j.jsx)(\`span\`,{className:\`text-amber-300/80\`,children:JSON.stringify(e)}):(0,j.jsx)(j.Fragment,{children:String(e)})}function Xr({table:e,initial:t,isNew:n,onClose:r,onSave:i}){let a=e.columns.filter(e=>!(n&&e.isPrimaryKey&&e.hasDefault)),[o,s]=(0,_.useState)(()=>{let e={};for(let n of a){let r=t[n.name];e[n.name]=r==null?\`\`:typeof r==\`object\`?JSON.stringify(r):String(r)}return e}),[c,l]=(0,_.useState)({}),[u,d]=(0,_.useState)(\`\`),[f,p]=(0,_.useState)(!1);async function m(){p(!0),d(\`\`);let e={};for(let t of a){if(!n&&!c[t.name])continue;let r=o[t.name];if(r===\`\`&&(t.nullable||t.hasDefault)){n||(e[t.name]=null);continue}e[t.name]=Zr(r,t.type)}try{await i(e)}catch(e){d(e.message),p(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:r,title:n?\`Insert into \${e.name}\`:\`Edit row in \${e.name}\`,wide:!0,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[a.map(e=>(0,j.jsxs)(\`div\`,{children:[(0,j.jsxs)(Ur,{children:[e.name,(0,j.jsxs)(\`span\`,{className:\`ml-1.5 font-normal text-neutral-600\`,children:[e.type,e.isPrimaryKey?\` · PK\`:\`\`,!e.nullable&&!e.hasDefault?\` · required\`:\`\`]})]}),(0,j.jsx)(Vr,{value:o[e.name]??\`\`,placeholder:e.hasDefault?\`default\`:e.nullable?\`NULL\`:\`\`,onChange:t=>{s(n=>({...n,[e.name]:t.target.value})),l(t=>({...t,[e.name]:!0}))}})]},e.name)),u&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:u}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2 pt-1\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:r,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:m,disabled:f,children:f?\`Saving…\`:n?\`Insert\`:\`Save\`})]})]})})}function Zr(e,t){if(t===\`bool\`)return e===\`true\`||e===\`t\`||e===\`1\`;if([\`int2\`,\`int4\`,\`int8\`,\`float4\`,\`float8\`,\`numeric\`].includes(t)){let t=Number(e);return Number.isNaN(t)?e:t}if(t===\`json\`||t===\`jsonb\`)try{return JSON.parse(e)}catch{return e}if(t.startsWith(\`_\`))try{return JSON.parse(e)}catch{return e}return e}function Qr(){let[e,t]=(0,_.useState)(\`select * from \`),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(!1);async function o(){a(!0),r(await A.sql(e)),a(!1)}let s=n?.rows?.[0]?Object.keys(n.rows[0]):[];return(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`border-b border-neutral-800 p-3\`,children:[(0,j.jsx)(Hr,{className:\`h-40\`,value:e,onChange:e=>t(e.target.value),onKeyDown:e=>(e.metaKey||e.ctrlKey)&&e.key===\`Enter\`&&o(),spellCheck:!1,placeholder:\`select * from … (⌘⏎ to run)\`}),(0,j.jsxs)(\`div\`,{className:\`mt-2 flex items-center gap-3\`,children:[(0,j.jsxs)(N,{onClick:o,disabled:i,children:[(0,j.jsx)(E,{size:13}),\` Run\`]}),(0,j.jsx)(\`span\`,{className:\`text-xs text-neutral-500\`,children:\`⌘⏎\`}),n&&(0,j.jsx)(\`span\`,{className:\`ml-auto text-xs text-neutral-500\`,children:n.ok?\`\${n.rowCount} rows · \${n.ms} ms\${n.affectedRows==null?\`\`:\` · \${n.affectedRows} affected\`}\`:\`\`})]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto\`,children:[!n&&(0,j.jsx)(Kr,{children:\`Run a query to see results.\`}),n&&!n.ok&&(0,j.jsxs)(\`div\`,{className:\`m-4 rounded-md border border-red-900/50 bg-red-950/30 p-3 text-[13px] text-red-300\`,children:[(0,j.jsx)(\`div\`,{className:\`font-mono\`,children:n.error}),n.code&&(0,j.jsxs)(\`div\`,{className:\`mt-1 text-xs text-red-400/70\`,children:[\`SQLSTATE \`,n.code]}),n.hint&&(0,j.jsxs)(\`div\`,{className:\`mt-1 text-xs text-neutral-400\`,children:[\`Hint: \`,n.hint]})]}),n?.ok&&s.length>0&&(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`sticky top-0 bg-[#1c1c1c]\`,children:(0,j.jsx)(\`tr\`,{className:\`border-b border-neutral-800\`,children:s.map(e=>(0,j.jsx)(\`th\`,{className:\`whitespace-nowrap px-3 py-1.5 text-left font-mono font-medium text-neutral-300\`,children:e},e))})}),(0,j.jsx)(\`tbody\`,{children:n.rows.map((e,t)=>(0,j.jsx)(\`tr\`,{className:\`border-b border-neutral-800/60 hover:bg-neutral-800/30\`,children:s.map(t=>(0,j.jsx)(\`td\`,{className:\`max-w-[360px] truncate px-3 py-1.5 font-mono text-neutral-300\`,children:$r(e[t])},t))},t))})]}),n?.ok&&s.length===0&&(0,j.jsxs)(Kr,{children:[\`Statement executed\`,n.affectedRows==null?\`\`:\` · \${n.affectedRows} rows affected\`,\`.\`]})]})]})}function $r(e){return e==null?(0,j.jsx)(\`span\`,{className:\`text-neutral-600\`,children:\`NULL\`}):typeof e==\`object\`?JSON.stringify(e):String(e)}function ei(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(!0),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(null);async function c(){t(await A.users())}(0,_.useEffect)(()=>{c().finally(()=>r(!1))},[]);async function l(e){confirm(\`Delete \${e.email||e.id}?\`)&&(await A.deleteUser(e.id),await c())}return n?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(\`span\`,{className:\`text-sm font-semibold\`,children:\`Users\`}),(0,j.jsx)(\`span\`,{className:\`rounded bg-neutral-800 px-1.5 py-0.5 text-[11px] text-neutral-400\`,children:e.length}),(0,j.jsxs)(N,{size:\`xs\`,className:\`ml-auto\`,onClick:()=>a(!0),children:[(0,j.jsx)(de,{size:13}),\` Add user\`]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`sticky top-0 bg-[#1c1c1c]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-1.5 font-medium\`,children:\`Email\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`UID\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`Provider\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`Created\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`Last sign in\`}),(0,j.jsx)(\`th\`,{className:\`w-20\`})]})}),(0,j.jsx)(\`tbody\`,{children:e.map(e=>(0,j.jsxs)(\`tr\`,{className:\`group border-b border-neutral-800/60 hover:bg-neutral-800/30\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5\`,children:e.email||(0,j.jsx)(\`span\`,{className:\`text-neutral-500\`,children:e.is_anonymous?\`anonymous\`:\`—\`})}),(0,j.jsxs)(\`td\`,{className:\`px-3 py-1.5 font-mono text-[11px] text-neutral-500\`,children:[e.id.slice(0,8),\`…\`]}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:e.app_metadata?.provider||\`—\`}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:(e.created_at||\`\`).slice(0,10)}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:(e.last_sign_in_at||\`\`).slice(0,16).replace(\`T\`,\` \`)}),(0,j.jsx)(\`td\`,{className:\`px-3\`,children:(0,j.jsxs)(\`div\`,{className:\`flex gap-0.5 opacity-0 group-hover:opacity-100\`,children:[(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-brand\`,title:\`Reset password\`,onClick:()=>s(e),children:(0,j.jsx)(ue,{size:13})}),(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-red-400\`,onClick:()=>l(e),children:(0,j.jsx)(ge,{size:13})})]})})]},e.id))})]}),e.length===0&&(0,j.jsx)(Kr,{children:\`No users yet.\`})]}),i&&(0,j.jsx)(ti,{onClose:()=>a(!1),onDone:async()=>{a(!1),await c()}}),o&&(0,j.jsx)(ni,{user:o,onClose:()=>s(null),onDone:async()=>{s(null),await c()}})]})}function ti({onClose:e,onDone:t}){let[n,r]=(0,_.useState)(\`\`),[i,a]=(0,_.useState)(\`\`),[o,s]=(0,_.useState)(\`\`),[c,l]=(0,_.useState)(!1);async function u(){l(!0),s(\`\`);try{await A.createUser({email:n,password:i||void 0,email_confirm:!0}),t()}catch(e){s(e.message),l(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:e,title:\`Add user\`,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Email\`}),(0,j.jsx)(Vr,{value:n,onChange:e=>r(e.target.value),placeholder:\`user@example.com\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Password (optional)\`}),(0,j.jsx)(Vr,{type:\`password\`,value:i,onChange:e=>a(e.target.value)})]}),o&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:o}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:e,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:u,disabled:c||!n,children:c?\`Creating…\`:\`Create\`})]})]})})}function ni({user:e,onClose:t,onDone:n}){let[r,i]=(0,_.useState)(\`\`),[a,o]=(0,_.useState)(\`\`),[s,c]=(0,_.useState)(!1);async function l(){c(!0),o(\`\`);try{await A.updateUser(e.id,{password:r}),n()}catch(e){o(e.message),c(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:t,title:\`Reset password · \${e.email||e.id}\`,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`New password\`}),(0,j.jsx)(Vr,{type:\`password\`,value:r,onChange:e=>i(e.target.value)})]}),a&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:a}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:t,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:l,disabled:s||r.length<6,children:s?\`Saving…\`:\`Update\`})]})]})})}function ri(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(!0),[c,l]=(0,_.useState)(!1),u=(0,_.useRef)(null);async function d(){let e=await A.buckets();t(e),r(t=>t??e[0]?.id??null)}async function f(e){a(await A.listObjects(e))}(0,_.useEffect)(()=>{d().finally(()=>s(!1))},[]),(0,_.useEffect)(()=>{n&&f(n)},[n]);async function p(e){n&&(await A.uploadObject(n,e.name,e),await f(n))}async function m(e){!n||!confirm(\`Delete \${e}?\`)||(await A.removeObject(n,e),await f(n))}async function h(e){if(confirm(\`Delete bucket "\${e}"? It must be empty.\`))try{await A.deleteBucket(e),r(null),await d()}catch(e){alert(e.message)}}return o?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex w-60 shrink-0 flex-col border-r border-neutral-800 bg-[#191919]\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between px-3 py-2.5 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:[\`Buckets\`,(0,j.jsx)(\`button\`,{className:\`text-neutral-400 hover:text-brand\`,onClick:()=>l(!0),children:(0,j.jsx)(de,{size:14})})]}),(0,j.jsxs)(\`div\`,{className:\`flex-1 overflow-auto\`,children:[e.map(e=>(0,j.jsxs)(\`button\`,{onClick:()=>r(e.id),className:\`group flex w-full items-center justify-between px-3 py-1.5 text-left text-[13px] \`+(n===e.id?\`bg-neutral-800 text-neutral-100\`:\`text-neutral-400 hover:bg-neutral-800/50\`),children:[(0,j.jsxs)(\`span\`,{className:\`truncate\`,children:[e.id,e.public&&(0,j.jsx)(\`span\`,{className:\`ml-1.5 text-[10px] text-brand\`,children:\`public\`})]}),(0,j.jsx)(ge,{size:13,className:\`opacity-0 hover:text-red-400 group-hover:opacity-100\`,onClick:t=>{t.stopPropagation(),h(e.id)}})]},e.id)),e.length===0&&(0,j.jsx)(Kr,{children:\`No buckets.\`})]})]}),(0,j.jsx)(\`div\`,{className:\`flex min-w-0 flex-1 flex-col\`,children:n?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(\`span\`,{className:\`font-mono text-sm\`,children:n}),(0,j.jsx)(\`input\`,{ref:u,type:\`file\`,className:\`hidden\`,onChange:e=>e.target.files?.[0]&&p(e.target.files[0])}),(0,j.jsxs)(N,{size:\`xs\`,className:\`ml-auto\`,onClick:()=>u.current?.click(),children:[(0,j.jsx)(_e,{size:13}),\` Upload\`]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto p-2\`,children:[i.map(e=>(0,j.jsxs)(\`div\`,{className:\`group flex items-center gap-2 rounded-md px-2 py-1.5 text-[13px] hover:bg-neutral-800/40\`,children:[(0,j.jsx)(se,{size:14,className:\`text-neutral-500\`}),(0,j.jsx)(\`span\`,{className:\`font-mono\`,children:e.name}),e.metadata?.size!=null&&(0,j.jsx)(\`span\`,{className:\`text-[11px] text-neutral-500\`,children:ai(e.metadata.size)}),(0,j.jsx)(\`button\`,{className:\`ml-auto p-1 text-neutral-500 opacity-0 hover:text-red-400 group-hover:opacity-100\`,onClick:()=>m(e.name),children:(0,j.jsx)(ge,{size:13})})]},e.name)),i.length===0&&(0,j.jsx)(Kr,{children:\`Empty bucket. Upload a file.\`})]})]}):(0,j.jsx)(Kr,{children:\`Select or create a bucket.\`})}),c&&(0,j.jsx)(ii,{onClose:()=>l(!1),onDone:async()=>{l(!1),await d()}})]})}function ii({onClose:e,onDone:t}){let[n,r]=(0,_.useState)(\`\`),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(\`\`),[c,l]=(0,_.useState)(!1);async function u(){l(!0),s(\`\`);try{await A.createBucket({id:n,name:n,public:i}),t()}catch(e){s(e.message),l(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:e,title:\`New bucket\`,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Name\`}),(0,j.jsx)(Vr,{value:n,onChange:e=>r(e.target.value),placeholder:\`avatars\`})]}),(0,j.jsxs)(\`label\`,{className:\`flex items-center gap-2 text-[13px] text-neutral-300\`,children:[(0,j.jsx)(\`input\`,{type:\`checkbox\`,checked:i,onChange:e=>a(e.target.checked)}),\`Public bucket (objects readable without auth)\`]}),o&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:o}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:e,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:u,disabled:c||!n,children:c?\`Creating…\`:\`Create\`})]})]})})}function ai(e){return e<1024?\`\${e} B\`:e<1024*1024?\`\${(e/1024).toFixed(1)} KB\`:\`\${(e/1024/1024).toFixed(1)} MB\`}function oi(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)([]),[c,l]=(0,_.useState)(!0);return(0,_.useEffect)(()=>{Promise.all([A.stats(),A.migrations(),A.functions(),A.triggers()]).then(([e,n,i,o])=>{t(e),r(n),a(i),s(o)}).finally(()=>l(!1))},[]),c?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`h-full overflow-auto p-6\`,children:[(0,j.jsx)(\`h1\`,{className:\`text-sm font-semibold text-neutral-300\`,children:\`Database\`}),e&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(\`p\`,{className:\`mt-1 font-mono text-xs text-neutral-500\`,children:e.version}),(0,j.jsxs)(\`div\`,{className:\`mt-4 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6\`,children:[(0,j.jsx)(si,{label:\`Tables\`,value:e.tables}),(0,j.jsx)(si,{label:\`Users\`,value:e.users}),(0,j.jsx)(si,{label:\`Buckets\`,value:e.buckets}),(0,j.jsx)(si,{label:\`Objects\`,value:e.objects}),(0,j.jsx)(si,{label:\`Migrations\`,value:e.migrations}),(0,j.jsx)(si,{label:\`DB size\`,value:e.dbSize})]})]}),(0,j.jsx)(\`h2\`,{className:\`mb-2 mt-8 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:\`Migrations\`}),(0,j.jsxs)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Version\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Name\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Applied\`})]})}),(0,j.jsx)(\`tbody\`,{children:n.map(e=>(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-400\`,children:e.version}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono\`,children:e.name||\`—\`}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:(e.applied_at||\`\`).slice(0,19).replace(\`T\`,\` \`)})]},e.version))})]}),n.length===0&&(0,j.jsx)(Kr,{children:\`No migrations applied.\`})]}),(0,j.jsx)(\`h2\`,{className:\`mb-2 mt-8 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:\`Functions\`}),(0,j.jsxs)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Name\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Arguments\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Returns\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Language\`})]})}),(0,j.jsx)(\`tbody\`,{children:i.map(e=>(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-200\`,children:e.name}),(0,j.jsx)(\`td\`,{className:\`max-w-[280px] truncate px-4 py-1.5 font-mono text-[11px] text-neutral-500\`,children:e.args||\`—\`}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-400\`,children:e.returns}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:e.language})]},e.name))})]}),i.length===0&&(0,j.jsx)(Kr,{children:\`No user functions.\`})]}),(0,j.jsx)(\`h2\`,{className:\`mb-2 mt-8 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:\`Triggers\`}),(0,j.jsxs)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Name\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Table\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Timing\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Events\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Function\`})]})}),(0,j.jsx)(\`tbody\`,{children:o.map(e=>(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-200\`,children:e.name}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-400\`,children:e.table}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:e.timing}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:(e.events||[]).join(\`, \`)}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-[11px] text-neutral-500\`,children:e.function})]},e.table+e.name))})]}),o.length===0&&(0,j.jsx)(Kr,{children:\`No triggers.\`})]})]})}function si({label:e,value:t}){return(0,j.jsxs)(\`div\`,{className:\`rounded-lg border border-neutral-800 bg-[#191919] p-3\`,children:[(0,j.jsx)(\`div\`,{className:\`text-lg font-semibold text-neutral-100\`,children:t}),(0,j.jsx)(\`div\`,{className:\`text-xs text-neutral-500\`,children:e})]})}function ci(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(!0),[i,a]=(0,_.useState)(!1);async function o(){t(await A.policies())}(0,_.useEffect)(()=>{o().finally(()=>r(!1))},[]);async function s(e){confirm(\`Drop policy "\${e.name}" on \${e.table}?\`)&&(await A.dropPolicy(e.table,e.name),await o())}if(n)return(0,j.jsx)(Gr,{});let c=new Map;for(let t of e)c.has(t.table)||c.set(t.table,[]),c.get(t.table).push(t);return(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(me,{size:15,className:\`text-brand\`}),(0,j.jsx)(\`span\`,{className:\`text-sm font-semibold\`,children:\`RLS Policies\`}),(0,j.jsx)(\`span\`,{className:\`rounded bg-neutral-800 px-1.5 py-0.5 text-[11px] text-neutral-400\`,children:e.length}),(0,j.jsxs)(N,{size:\`xs\`,className:\`ml-auto\`,onClick:()=>a(!0),children:[(0,j.jsx)(de,{size:13}),\` New policy\`]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto p-4\`,children:[[...c].map(([e,t])=>(0,j.jsxs)(\`div\`,{className:\`mb-5\`,children:[(0,j.jsx)(\`div\`,{className:\`mb-1.5 font-mono text-[13px] text-neutral-300\`,children:e}),(0,j.jsx)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:(0,j.jsxs)(\`table\`,{className:\`w-full text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919] text-neutral-400\`,children:(0,j.jsxs)(\`tr\`,{children:[(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`Policy\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`Command\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`Roles\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`USING / CHECK\`}),(0,j.jsx)(\`th\`,{className:\`w-10\`})]})}),(0,j.jsx)(\`tbody\`,{children:t.map(e=>(0,j.jsxs)(\`tr\`,{className:\`group border-t border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5\`,children:e.name}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:e.cmd}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 font-mono text-[11px] text-neutral-500\`,children:Array.isArray(e.roles)?e.roles.join(\`, \`):e.roles}),(0,j.jsx)(\`td\`,{className:\`max-w-[360px] truncate px-3 py-1.5 font-mono text-[11px] text-amber-300/70\`,children:[e.using_expr&&\`USING \${e.using_expr}\`,e.with_check&&\`CHECK \${e.with_check}\`].filter(Boolean).join(\` · \`)}),(0,j.jsx)(\`td\`,{className:\`px-2\`,children:(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 opacity-0 hover:text-red-400 group-hover:opacity-100\`,onClick:()=>s(e),children:(0,j.jsx)(ge,{size:13})})})]},e.name))})]})})]},e)),e.length===0&&(0,j.jsx)(Kr,{children:\`No policies. Create one, or enable RLS on a table first.\`})]}),i&&(0,j.jsx)(li,{onClose:()=>a(!1),onDone:async()=>{a(!1),await o()}})]})}function li({onClose:e,onDone:t}){let[n,r]=(0,_.useState)({table:\`\`,name:\`\`,command:\`ALL\`,roles:\`authenticated\`,using:\`\`,check:\`\`}),[i,a]=(0,_.useState)(\`\`),[o,s]=(0,_.useState)(!1),c=(e,t)=>r(n=>({...n,[e]:t}));async function l(){s(!0),a(\`\`);try{let e=await A.createPolicy(n);if(e.error)throw Error(e.error+(e.hint?\` (\${e.hint})\`:\`\`));t()}catch(e){a(e.message),s(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:e,title:\`New RLS policy\`,wide:!0,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{className:\`grid grid-cols-2 gap-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Table\`}),(0,j.jsx)(Vr,{value:n.table,onChange:e=>c(\`table\`,e.target.value),placeholder:\`todos\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Policy name\`}),(0,j.jsx)(Vr,{value:n.name,onChange:e=>c(\`name\`,e.target.value),placeholder:\`own rows\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Command\`}),(0,j.jsx)(\`select\`,{className:\`h-8 w-full rounded-md border border-neutral-700 bg-neutral-900 px-2 text-[13px]\`,value:n.command,onChange:e=>c(\`command\`,e.target.value),children:[\`ALL\`,\`SELECT\`,\`INSERT\`,\`UPDATE\`,\`DELETE\`].map(e=>(0,j.jsx)(\`option\`,{children:e},e))})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Roles\`}),(0,j.jsx)(Vr,{value:n.roles,onChange:e=>c(\`roles\`,e.target.value),placeholder:\`authenticated\`})]})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`USING expression (read/visibility)\`}),(0,j.jsx)(Vr,{value:n.using,onChange:e=>c(\`using\`,e.target.value),placeholder:\`user_id = auth.uid()\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`WITH CHECK expression (writes)\`}),(0,j.jsx)(Vr,{value:n.check,onChange:e=>c(\`check\`,e.target.value),placeholder:\`user_id = auth.uid()\`})]}),i&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:i}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:e,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:l,disabled:o||!n.table||!n.name,children:o?\`Creating…\`:\`Create policy\`})]})]})})}var ui={info:\`text-neutral-500\`,warn:\`text-amber-400\`,error:\`text-red-400\`};function di(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(!0),i=(0,_.useRef)(null);async function a(){try{t(await A.logs())}catch{}}return(0,_.useEffect)(()=>{if(a(),n)return i.current=setInterval(a,2e3),()=>{i.current&&clearInterval(i.current)}},[n]),e===null?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between border-b border-neutral-800 px-6 py-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(\`h1\`,{className:\`text-sm font-semibold text-neutral-300\`,children:\`Logs\`}),(0,j.jsx)(\`p\`,{className:\`text-xs text-neutral-500\`,children:\`Recent requests and server events\`})]}),(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2\`,children:[(0,j.jsx)(N,{className:n?\`\`:\`opacity-60\`,onClick:()=>r(e=>!e),title:n?\`Pause auto-refresh\`:\`Resume auto-refresh\`,children:n?\`⏸ Live\`:\`▶ Paused\`}),(0,j.jsx)(N,{onClick:a,children:\`Refresh\`}),(0,j.jsx)(N,{onClick:async()=>{await A.clearLogs(),a()},children:\`Clear\`})]})]}),(0,j.jsx)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto p-3 font-mono text-[12.5px] leading-relaxed\`,children:e.length===0?(0,j.jsx)(Kr,{children:\`No logs yet. Make a request or trigger an email/webhook.\`}):e.map((e,t)=>(0,j.jsxs)(\`div\`,{className:\`flex gap-3 whitespace-pre-wrap break-words px-3 py-0.5 hover:bg-neutral-800/40\`,children:[(0,j.jsx)(\`span\`,{className:\`shrink-0 tabular-nums text-neutral-600\`,children:e.ts.slice(11,23)}),(0,j.jsx)(\`span\`,{className:\`shrink-0 uppercase \`+ui[e.level],children:e.level}),(0,j.jsx)(\`span\`,{className:\`text-neutral-300\`,children:e.msg})]},t))})]})}var fi=[{id:\`table\`,label:\`Table Editor\`,icon:he},{id:\`sql\`,label:\`SQL Editor\`,icon:D},{id:\`auth\`,label:\`Authentication\`,icon:ue},{id:\`policies\`,label:\`RLS Policies\`,icon:me},{id:\`storage\`,label:\`Storage\`,icon:le},{id:\`database\`,label:\`Database\`,icon:ce},{id:\`logs\`,label:\`Logs\`,icon:pe}];function pi({size:e=24}){return(0,j.jsxs)(\`svg\`,{width:e,height:e,viewBox:\`0 0 120 120\`,children:[(0,j.jsx)(\`path\`,{d:\`M24 34v56c0 8.8 16.1 16 36 16s36-7.2 36-16V34\`,fill:\`#2a9d6f\`}),(0,j.jsx)(\`ellipse\`,{cx:\`60\`,cy:\`34\`,rx:\`36\`,ry:\`16\`,fill:\`#3ecf8e\`})]})}function mi(){let[e,t]=(0,_.useState)(!!be()),[n,r]=(0,_.useState)(\`table\`);return(0,_.useEffect)(()=>{be()&&A.ping().catch(()=>{Se(),t(!1)})},[]),e?(0,j.jsxs)(\`div\`,{className:\`flex h-full\`,children:[(0,j.jsxs)(\`nav\`,{className:\`flex w-14 shrink-0 flex-col items-center gap-1 border-r border-neutral-800 bg-[#171717] py-3\`,children:[(0,j.jsx)(\`div\`,{className:\`mb-3\`,children:(0,j.jsx)(pi,{})}),fi.map(e=>{let t=e.icon,i=n===e.id;return(0,j.jsxs)(\`button\`,{title:e.label,onClick:()=>r(e.id),className:\`group relative flex size-9 items-center justify-center rounded-md transition-colors \`+(i?\`bg-neutral-800 text-brand\`:\`text-neutral-500 hover:bg-neutral-800 hover:text-neutral-200\`),children:[(0,j.jsx)(t,{size:18}),(0,j.jsx)(\`span\`,{className:\`pointer-events-none absolute left-11 z-20 hidden whitespace-nowrap rounded-md border border-neutral-700 bg-neutral-900 px-2 py-1 text-xs text-neutral-200 group-hover:block\`,children:e.label})]},e.id)}),(0,j.jsx)(\`button\`,{title:\`Log out\`,onClick:()=>{Se(),t(!1)},className:\`mt-auto flex size-9 items-center justify-center rounded-md text-neutral-600 hover:bg-neutral-800 hover:text-neutral-300\`,children:(0,j.jsx)(oe,{size:18})})]}),(0,j.jsxs)(\`main\`,{className:\`min-w-0 flex-1\`,children:[n===\`table\`&&(0,j.jsx)(Jr,{}),n===\`sql\`&&(0,j.jsx)(Qr,{}),n===\`auth\`&&(0,j.jsx)(ei,{}),n===\`policies\`&&(0,j.jsx)(ci,{}),n===\`storage\`&&(0,j.jsx)(ri,{}),n===\`database\`&&(0,j.jsx)(oi,{}),n===\`logs\`&&(0,j.jsx)(di,{})]})]}):(0,j.jsx)(hi,{onOk:()=>t(!0)})}function hi({onOk:e}){let[t,n]=(0,_.useState)(\`\`),[r,i]=(0,_.useState)(\`\`),[a,o]=(0,_.useState)(!1);async function s(){o(!0),i(\`\`),xe(t.trim());try{await A.ping(),e()}catch(e){Se(),i(\`Invalid service_role key: \`+e.message)}finally{o(!1)}}return(0,j.jsx)(\`div\`,{className:\`flex h-full items-center justify-center\`,children:(0,j.jsxs)(\`div\`,{className:\`w-[400px] text-center\`,children:[(0,j.jsx)(\`div\`,{className:\`mb-4 flex justify-center\`,children:(0,j.jsx)(pi,{size:48})}),(0,j.jsx)(\`h1\`,{className:\`text-lg font-semibold\`,children:\`tinbase studio\`}),(0,j.jsxs)(\`p\`,{className:\`mt-1 text-[13px] text-neutral-500\`,children:[\`Sign in with the \`,(0,j.jsx)(\`span\`,{className:\`text-neutral-300\`,children:\`service_role\`}),\` key printed when tinbase started.\`]}),(0,j.jsxs)(\`div\`,{className:\`mt-5 space-y-3 text-left\`,children:[(0,j.jsx)(Vr,{type:\`password\`,placeholder:\`service_role key (eyJ…)\`,value:t,onChange:e=>n(e.target.value),onKeyDown:e=>e.key===\`Enter\`&&s()}),(0,j.jsx)(N,{className:\`w-full\`,onClick:s,disabled:a||!t.trim(),children:a?\`Checking…\`:\`Continue\`}),r&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:r})]})]})})}(0,v.createRoot)(document.getElementById(\`root\`)).render((0,j.jsx)(_.StrictMode,{children:(0,j.jsx)(mi,{})}));</script>
64
+ \`},Xn=0,Zn=[];function Qn(e){var t=_.useRef([]),n=_.useRef([0,0]),r=_.useRef(),i=_.useState(Xn++)[0],a=_.useState(bn)[0],o=_.useRef(e);_.useEffect(function(){o.current=e},[e]),_.useEffect(function(){if(e.inert){document.body.classList.add(\`block-interactivity-\${i}\`);var t=Jt([e.lockRef.current],(e.shards||[]).map(qn),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(\`allow-interactivity-\${i}\`)}),function(){document.body.classList.remove(\`block-interactivity-\${i}\`),t.forEach(function(e){return e.classList.remove(\`allow-interactivity-\${i}\`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=_.useCallback(function(e,t){if(\`touches\`in e&&e.touches.length===2||e.type===\`wheel\`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=Gn(e),a=n.current,s=\`deltaX\`in e?e.deltaX:a[0]-i[0],c=\`deltaY\`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?\`h\`:\`v\`;if(\`touches\`in e&&d===\`h\`&&u.type===\`range\`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=Rn(d,u);if(!m)return!0;if(m?l=d:(l=d===\`v\`?\`h\`:\`v\`,m=Rn(d,u)),!m)return!1;if(!r.current&&\`changedTouches\`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Wn(h,t,e,h===\`h\`?s:c,!0)},[]),c=_.useCallback(function(e){var n=e;if(!(!Zn.length||Zn[Zn.length-1]!==a)){var r=\`deltaY\`in n?Kn(n):Gn(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&Jn(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(qn).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=_.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:$n(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=_.useCallback(function(e){n.current=Gn(e),r.current=void 0},[]),d=_.useCallback(function(t){l(t.type,Kn(t),t.target,s(t,e.lockRef.current))},[]),f=_.useCallback(function(t){l(t.type,Gn(t),t.target,s(t,e.lockRef.current))},[]);_.useEffect(function(){return Zn.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:f}),document.addEventListener(\`wheel\`,c,Nn),document.addEventListener(\`touchmove\`,c,Nn),document.addEventListener(\`touchstart\`,u,Nn),function(){Zn=Zn.filter(function(e){return e!==a}),document.removeEventListener(\`wheel\`,c,Nn),document.removeEventListener(\`touchmove\`,c,Nn),document.removeEventListener(\`touchstart\`,u,Nn)}},[]);var p=e.removeScrollBar,m=e.inert;return _.createElement(_.Fragment,null,m?_.createElement(a,{styles:Yn(i)}):null,p?_.createElement(An,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function $n(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var er=ln(un,Qn),tr=_.forwardRef(function(e,t){return _.createElement(fn,Kt({},e,{ref:t,sideCar:er}))});tr.classNames=fn.classNames;var nr=function(e){return typeof document>\`u\`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},rr=new WeakMap,ir=new WeakMap,ar={},or=0,sr=function(e){return e&&(e.host||sr(e.parentNode))},cr=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=sr(t);return n&&e.contains(n)?n:(console.error(\`aria-hidden\`,t,\`in not contained inside\`,e,\`. Doing nothing\`),null)}).filter(function(e){return!!e})},lr=function(e,t,n,r){var i=cr(t,Array.isArray(e)?e:[e]);ar[n]||(ar[n]=new WeakMap);var a=ar[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==\`false\`,c=(rr.get(e)||0)+1,l=(a.get(e)||0)+1;rr.set(e,c),a.set(e,l),o.push(e),c===1&&i&&ir.set(e,!0),l===1&&e.setAttribute(n,\`true\`),i||e.setAttribute(r,\`true\`)}catch(t){console.error(\`aria-hidden: cannot operate on \`,e,t)}})};return u(t),s.clear(),or++,function(){o.forEach(function(e){var t=rr.get(e)-1,i=a.get(e)-1;rr.set(e,t),a.set(e,i),t||(ir.has(e)||e.removeAttribute(r),ir.delete(e)),i||e.removeAttribute(n)}),or--,or||(rr=new WeakMap,rr=new WeakMap,ir=new WeakMap,ar={})}},ur=function(e,t,n){n===void 0&&(n=\`data-aria-hidden\`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||nr(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(\`[aria-live], script\`))),lr(r,i,n,\`aria-hidden\`)):function(){return null}},dr=\`Dialog\`,[fr,pr]=ke(dr),[mr,hr]=fr(dr),gr=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=_.useRef(null),c=_.useRef(null),[l,u]=ze({prop:r,defaultProp:i??!1,onChange:a,caller:dr});return(0,j.jsx)(mr,{scope:t,triggerRef:s,contentRef:c,contentId:Pe(),titleId:Pe(),descriptionId:Pe(),open:l,onOpenChange:u,onOpenToggle:_.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};gr.displayName=dr;var _r=\`DialogTrigger\`,vr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(_r,n),a=De(t,i.triggerRef);return(0,j.jsx)(tt.button,{type:\`button\`,"aria-haspopup":\`dialog\`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Rr(i.open),...r,ref:a,onClick:we(e.onClick,i.onOpenToggle)})});vr.displayName=_r;var yr=\`DialogPortal\`,[br,xr]=fr(yr,{forceMount:void 0}),Sr=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=hr(yr,t);return(0,j.jsx)(br,{scope:t,forceMount:n,children:_.Children.map(r,e=>(0,j.jsx)(It,{present:n||a.open,children:(0,j.jsx)(Pt,{asChild:!0,container:i,children:e})}))})};Sr.displayName=yr;var Cr=\`DialogOverlay\`,wr=_.forwardRef((e,t)=>{let n=xr(Cr,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=hr(Cr,e.__scopeDialog);return a.modal?(0,j.jsx)(It,{present:r||a.open,children:(0,j.jsx)(Er,{...i,ref:t})}):null});wr.displayName=Cr;var Tr=Ue(\`DialogOverlay.RemoveScroll\`),Er=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Cr,n),a=De(t,pt());return(0,j.jsx)(tr,{as:Tr,allowPinchZoom:!0,shards:[i.contentRef],children:(0,j.jsx)(tt.div,{"data-state":Rr(i.open),...r,ref:a,style:{pointerEvents:\`auto\`,...r.style}})})}),Dr=\`DialogContent\`,Or=_.forwardRef((e,t)=>{let n=xr(Dr,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=hr(Dr,e.__scopeDialog);return(0,j.jsx)(It,{present:r||a.open,children:a.modal?(0,j.jsx)(kr,{...i,ref:t}):(0,j.jsx)(Ar,{...i,ref:t})})});Or.displayName=Dr;var kr=_.forwardRef((e,t)=>{let n=hr(Dr,e.__scopeDialog),r=_.useRef(null),i=De(t,n.contentRef,r);return _.useEffect(()=>{let e=r.current;if(e)return ur(e)},[]),(0,j.jsx)(jr,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:we(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:we(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:we(e.onFocusOutside,e=>e.preventDefault())})}),Ar=_.forwardRef((e,t)=>{let n=hr(Dr,e.__scopeDialog),r=_.useRef(!1),i=_.useRef(!1);return(0,j.jsx)(jr,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===\`pointerdown\`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===\`focusin\`&&i.current&&t.preventDefault()}})}),jr=_.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=hr(Dr,n);return Wt(),(0,j.jsx)(j.Fragment,{children:(0,j.jsx)(St,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,j.jsx)(ut,{role:\`dialog\`,id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":Rr(s.open),...o,ref:t,deferPointerDownOutside:!0,onDismiss:()=>s.onOpenChange(!1)})})})}),Mr=\`DialogTitle\`,Nr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Mr,n);return(0,j.jsx)(tt.h2,{id:i.titleId,...r,ref:t})});Nr.displayName=Mr;var Pr=\`DialogDescription\`,Fr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Pr,n);return(0,j.jsx)(tt.p,{id:i.descriptionId,...r,ref:t})});Fr.displayName=Pr;var Ir=\`DialogClose\`,Lr=_.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=hr(Ir,n);return(0,j.jsx)(tt.button,{type:\`button\`,...r,ref:t,onClick:we(e.onClick,()=>i.onOpenChange(!1))})});Lr.displayName=Ir;function Rr(e){return e?\`open\`:\`closed\`}function zr(e){var t,n,r=\`\`;if(typeof e==\`string\`||typeof e==\`number\`)r+=e;else if(typeof e==\`object\`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=zr(e[t]))&&(r&&(r+=\` \`),r+=n)}else for(n in e)e[n]&&(r&&(r+=\` \`),r+=n);return r}function Br(){for(var e,t,n=0,r=\`\`,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=zr(e))&&(r&&(r+=\` \`),r+=t);return r}function N({variant:e=\`default\`,size:t=\`sm\`,className:n,...r}){return(0,j.jsx)(\`button\`,{className:Br(\`inline-flex items-center justify-center gap-1.5 rounded-md transition-colors disabled:opacity-50 disabled:pointer-events-none\`,t===\`sm\`?\`h-8 px-3 text-[13px]\`:\`h-6 px-2 text-xs\`,{default:\`bg-emerald-600 text-white hover:bg-emerald-500 font-medium\`,outline:\`border border-neutral-700 text-neutral-200 hover:bg-neutral-800 hover:border-neutral-600\`,ghost:\`text-neutral-300 hover:bg-neutral-800\`,danger:\`border border-red-900/60 text-red-400 hover:bg-red-950/40\`}[e],n),...r})}function Vr({className:e,...t}){return(0,j.jsx)(\`input\`,{className:Br(\`h-8 w-full rounded-md border border-neutral-700 bg-neutral-900 px-2.5 text-[13px] text-neutral-100\`,\`placeholder:text-neutral-600 focus:border-brand focus:outline-none\`,e),...t})}function Hr({className:e,...t}){return(0,j.jsx)(\`textarea\`,{className:Br(\`w-full rounded-md border border-neutral-700 bg-neutral-900 p-3 font-mono text-[13px] text-neutral-100\`,\`placeholder:text-neutral-600 focus:border-brand focus:outline-none\`,e),...t})}function Ur({children:e}){return(0,j.jsx)(\`label\`,{className:\`mb-1 block text-xs font-medium text-neutral-400\`,children:e})}function Wr({open:e,onClose:t,title:n,children:r,wide:i}){return(0,j.jsx)(gr,{open:e,onOpenChange:e=>!e&&t(),children:(0,j.jsxs)(Sr,{children:[(0,j.jsx)(wr,{className:\`fixed inset-0 z-50 bg-black/60 backdrop-blur-sm\`}),(0,j.jsxs)(Or,{className:Br(\`fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2 rounded-lg border border-neutral-700 bg-neutral-850 bg-[#1f1f1f] shadow-2xl\`,\`max-h-[85vh] overflow-auto\`,i?\`w-[640px]\`:\`w-[440px]\`),children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between border-b border-neutral-800 px-4 py-3\`,children:[(0,j.jsx)(Nr,{className:\`text-sm font-semibold\`,children:n}),(0,j.jsx)(Lr,{className:\`text-neutral-500 hover:text-neutral-200\`,children:(0,j.jsx)(ve,{size:16})})]}),(0,j.jsx)(\`div\`,{className:\`p-4\`,children:r})]})]})})}function Gr(){return(0,j.jsx)(\`div\`,{className:\`flex items-center justify-center py-16 text-neutral-500\`,children:(0,j.jsx)(\`div\`,{className:\`size-5 animate-spin rounded-full border-2 border-neutral-700 border-t-brand\`})})}function Kr({children:e}){return(0,j.jsx)(\`div\`,{className:\`py-16 text-center text-[13px] text-neutral-500\`,children:e})}var qr=50;function Jr(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(0),[c,l]=(0,_.useState)(0),[u,d]=(0,_.useState)(!0),[f,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(\`\`),y=e.find(e=>e.name===n)||null,b=(0,_.useCallback)(async()=>{let e=await A.tables();t(e),r(t=>t??e[0]?.name??null)},[]);(0,_.useEffect)(()=>{b().finally(()=>d(!1))},[b]);let x=(0,_.useCallback)(async()=>{if(!n||!y)return;let e=y.primaryKey[0]?\`\${y.primaryKey[0]}.asc\`:void 0,{rows:t,total:r}=await A.rows(n,{limit:qr,offset:c*qr,order:e});a(t),s(r)},[n,c,y]);(0,_.useEffect)(()=>{x()},[x]);function ee(e){let t={};for(let n of y.primaryKey)t[n]=e[n];return t}async function S(e){if(!y?.primaryKey.length)return alert(\`Cannot delete: table has no primary key\`);if(confirm(\`Delete this row?\`))try{await A.deleteRow(n,ee(e)),await x(),await b()}catch(e){alert(e.message)}}return u?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex w-60 shrink-0 flex-col border-r border-neutral-800 bg-[#191919]\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between px-3 py-2.5 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:[\`Tables \`,(0,j.jsx)(\`span\`,{className:\`text-neutral-600\`,children:e.length})]}),(0,j.jsxs)(\`div\`,{className:\`flex-1 overflow-auto\`,children:[e.map(e=>(0,j.jsxs)(\`button\`,{onClick:()=>{r(e.name),l(0)},className:\`flex w-full items-center justify-between px-3 py-1.5 text-left text-[13px] \`+(n===e.name?\`bg-neutral-800 text-neutral-100\`:\`text-neutral-400 hover:bg-neutral-850 hover:bg-neutral-800/50\`),children:[(0,j.jsx)(\`span\`,{className:\`truncate font-mono\`,children:e.name}),(0,j.jsx)(\`span\`,{className:\`text-[11px] text-neutral-600\`,children:e.rowCount})]},e.name)),e.length===0&&(0,j.jsx)(Kr,{children:\`No tables. Create one in the SQL Editor.\`})]})]}),(0,j.jsx)(\`div\`,{className:\`flex min-w-0 flex-1 flex-col\`,children:y?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(\`span\`,{className:\`font-mono text-sm\`,children:y.name}),(0,j.jsxs)(\`span\`,{className:\`rounded bg-neutral-800 px-1.5 py-0.5 text-[11px] text-neutral-400\`,children:[o,\` rows\`]}),(0,j.jsxs)(\`div\`,{className:\`ml-auto flex items-center gap-1.5\`,children:[(0,j.jsx)(N,{variant:\`ghost\`,size:\`xs\`,onClick:()=>void x(),children:(0,j.jsx)(fe,{size:13})}),(0,j.jsxs)(N,{size:\`xs\`,onClick:()=>h(!0),children:[(0,j.jsx)(de,{size:13}),\` Insert\`]})]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`sticky top-0 z-10 bg-[#1c1c1c]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800\`,children:[(0,j.jsx)(\`th\`,{className:\`w-16 px-2 py-1.5\`}),y.columns.map(e=>(0,j.jsxs)(\`th\`,{className:\`whitespace-nowrap px-3 py-1.5 text-left font-medium text-neutral-400\`,children:[(0,j.jsx)(\`span\`,{className:\`font-mono text-neutral-200\`,children:e.name}),e.isPrimaryKey&&(0,j.jsx)(\`span\`,{className:\`ml-1 text-[10px] text-brand\`,children:\`PK\`}),(0,j.jsx)(\`span\`,{className:\`ml-1.5 text-[11px] font-normal text-neutral-600\`,children:e.type})]},e.name))]})}),(0,j.jsx)(\`tbody\`,{children:i.map((e,t)=>(0,j.jsxs)(\`tr\`,{className:\`group border-b border-neutral-850 border-neutral-800/60 hover:bg-neutral-800/30\`,children:[(0,j.jsx)(\`td\`,{className:\`px-2\`,children:(0,j.jsxs)(\`div\`,{className:\`flex gap-0.5 opacity-0 group-hover:opacity-100\`,children:[(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-brand\`,onClick:()=>p(e),children:(0,j.jsx)(T,{size:13})}),(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-red-400\`,onClick:()=>S(e),children:(0,j.jsx)(ge,{size:13})})]})}),y.columns.map(t=>(0,j.jsx)(\`td\`,{className:\`max-w-[320px] truncate px-3 py-1.5 font-mono text-neutral-300\`,children:(0,j.jsx)(Yr,{value:e[t.name]})},t.name))]},t))})]}),i.length===0&&(0,j.jsx)(Kr,{children:\`No rows yet.\`})]}),(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-t border-neutral-800 px-4 py-2 text-xs text-neutral-500\`,children:[(0,j.jsx)(N,{variant:\`ghost\`,size:\`xs\`,disabled:c===0,onClick:()=>l(e=>e-1),children:(0,j.jsx)(ie,{size:13})}),(0,j.jsxs)(\`span\`,{children:[o===0?0:c*qr+1,\`–\`,Math.min((c+1)*qr,o),\` of \`,o]}),(0,j.jsx)(N,{variant:\`ghost\`,size:\`xs\`,disabled:(c+1)*qr>=o,onClick:()=>l(e=>e+1),children:(0,j.jsx)(ae,{size:13})})]})]}):(0,j.jsx)(Kr,{children:\`Select a table.\`})}),f&&y&&(0,j.jsx)(Xr,{table:y,initial:f,onClose:()=>p(null),onSave:async e=>{await A.updateRow(n,ee(f),e),p(null),await x()}}),m&&y&&(0,j.jsx)(Xr,{table:y,initial:{},isNew:!0,onClose:()=>h(!1),onSave:async e=>{await A.insertRow(n,e),h(!1),await x(),await b()}}),g&&(0,j.jsx)(\`p\`,{className:\`text-red-400\`,children:g})]})}function Yr({value:e}){return e==null?(0,j.jsx)(\`span\`,{className:\`text-neutral-600\`,children:\`NULL\`}):typeof e==\`boolean\`?(0,j.jsx)(\`span\`,{className:\`text-blue-400\`,children:String(e)}):typeof e==\`object\`?(0,j.jsx)(\`span\`,{className:\`text-amber-300/80\`,children:JSON.stringify(e)}):(0,j.jsx)(j.Fragment,{children:String(e)})}function Xr({table:e,initial:t,isNew:n,onClose:r,onSave:i}){let a=e.columns.filter(e=>!(n&&e.isPrimaryKey&&e.hasDefault)),[o,s]=(0,_.useState)(()=>{let e={};for(let n of a){let r=t[n.name];e[n.name]=r==null?\`\`:typeof r==\`object\`?JSON.stringify(r):String(r)}return e}),[c,l]=(0,_.useState)({}),[u,d]=(0,_.useState)(\`\`),[f,p]=(0,_.useState)(!1);async function m(){p(!0),d(\`\`);let e={};for(let t of a){if(!n&&!c[t.name])continue;let r=o[t.name];if(r===\`\`&&(t.nullable||t.hasDefault)){n||(e[t.name]=null);continue}e[t.name]=Zr(r,t.type)}try{await i(e)}catch(e){d(e.message),p(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:r,title:n?\`Insert into \${e.name}\`:\`Edit row in \${e.name}\`,wide:!0,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[a.map(e=>(0,j.jsxs)(\`div\`,{children:[(0,j.jsxs)(Ur,{children:[e.name,(0,j.jsxs)(\`span\`,{className:\`ml-1.5 font-normal text-neutral-600\`,children:[e.type,e.isPrimaryKey?\` · PK\`:\`\`,!e.nullable&&!e.hasDefault?\` · required\`:\`\`]})]}),(0,j.jsx)(Vr,{value:o[e.name]??\`\`,placeholder:e.hasDefault?\`default\`:e.nullable?\`NULL\`:\`\`,onChange:t=>{s(n=>({...n,[e.name]:t.target.value})),l(t=>({...t,[e.name]:!0}))}})]},e.name)),u&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:u}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2 pt-1\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:r,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:m,disabled:f,children:f?\`Saving…\`:n?\`Insert\`:\`Save\`})]})]})})}function Zr(e,t){if(t===\`bool\`)return e===\`true\`||e===\`t\`||e===\`1\`;if([\`int2\`,\`int4\`,\`int8\`,\`float4\`,\`float8\`,\`numeric\`].includes(t)){let t=Number(e);return Number.isNaN(t)?e:t}if(t===\`json\`||t===\`jsonb\`)try{return JSON.parse(e)}catch{return e}if(t.startsWith(\`_\`))try{return JSON.parse(e)}catch{return e}return e}function Qr(){let[e,t]=(0,_.useState)(\`select * from \`),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(!1);async function o(){a(!0),r(await A.sql(e)),a(!1)}let s=n?.rows?.[0]?Object.keys(n.rows[0]):[];return(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`border-b border-neutral-800 p-3\`,children:[(0,j.jsx)(Hr,{className:\`h-40\`,value:e,onChange:e=>t(e.target.value),onKeyDown:e=>(e.metaKey||e.ctrlKey)&&e.key===\`Enter\`&&o(),spellCheck:!1,placeholder:\`select * from … (⌘⏎ to run)\`}),(0,j.jsxs)(\`div\`,{className:\`mt-2 flex items-center gap-3\`,children:[(0,j.jsxs)(N,{onClick:o,disabled:i,children:[(0,j.jsx)(E,{size:13}),\` Run\`]}),(0,j.jsx)(\`span\`,{className:\`text-xs text-neutral-500\`,children:\`⌘⏎\`}),n&&(0,j.jsx)(\`span\`,{className:\`ml-auto text-xs text-neutral-500\`,children:n.ok?\`\${n.rowCount} rows · \${n.ms} ms\${n.affectedRows==null?\`\`:\` · \${n.affectedRows} affected\`}\`:\`\`})]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto\`,children:[!n&&(0,j.jsx)(Kr,{children:\`Run a query to see results.\`}),n&&!n.ok&&(0,j.jsxs)(\`div\`,{className:\`m-4 rounded-md border border-red-900/50 bg-red-950/30 p-3 text-[13px] text-red-300\`,children:[(0,j.jsx)(\`div\`,{className:\`font-mono\`,children:n.error}),n.code&&(0,j.jsxs)(\`div\`,{className:\`mt-1 text-xs text-red-400/70\`,children:[\`SQLSTATE \`,n.code]}),n.hint&&(0,j.jsxs)(\`div\`,{className:\`mt-1 text-xs text-neutral-400\`,children:[\`Hint: \`,n.hint]})]}),n?.ok&&s.length>0&&(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`sticky top-0 bg-[#1c1c1c]\`,children:(0,j.jsx)(\`tr\`,{className:\`border-b border-neutral-800\`,children:s.map(e=>(0,j.jsx)(\`th\`,{className:\`whitespace-nowrap px-3 py-1.5 text-left font-mono font-medium text-neutral-300\`,children:e},e))})}),(0,j.jsx)(\`tbody\`,{children:n.rows.map((e,t)=>(0,j.jsx)(\`tr\`,{className:\`border-b border-neutral-800/60 hover:bg-neutral-800/30\`,children:s.map(t=>(0,j.jsx)(\`td\`,{className:\`max-w-[360px] truncate px-3 py-1.5 font-mono text-neutral-300\`,children:$r(e[t])},t))},t))})]}),n?.ok&&s.length===0&&(0,j.jsxs)(Kr,{children:[\`Statement executed\`,n.affectedRows==null?\`\`:\` · \${n.affectedRows} rows affected\`,\`.\`]})]})]})}function $r(e){return e==null?(0,j.jsx)(\`span\`,{className:\`text-neutral-600\`,children:\`NULL\`}):typeof e==\`object\`?JSON.stringify(e):String(e)}function ei(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(!0),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(null);async function c(){t(await A.users())}(0,_.useEffect)(()=>{c().finally(()=>r(!1))},[]);async function l(e){confirm(\`Delete \${e.email||e.id}?\`)&&(await A.deleteUser(e.id),await c())}return n?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(\`span\`,{className:\`text-sm font-semibold\`,children:\`Users\`}),(0,j.jsx)(\`span\`,{className:\`rounded bg-neutral-800 px-1.5 py-0.5 text-[11px] text-neutral-400\`,children:e.length}),(0,j.jsxs)(N,{size:\`xs\`,className:\`ml-auto\`,onClick:()=>a(!0),children:[(0,j.jsx)(de,{size:13}),\` Add user\`]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`sticky top-0 bg-[#1c1c1c]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-1.5 font-medium\`,children:\`Email\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`UID\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`Provider\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`Created\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 font-medium\`,children:\`Last sign in\`}),(0,j.jsx)(\`th\`,{className:\`w-20\`})]})}),(0,j.jsx)(\`tbody\`,{children:e.map(e=>(0,j.jsxs)(\`tr\`,{className:\`group border-b border-neutral-800/60 hover:bg-neutral-800/30\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5\`,children:e.email||(0,j.jsx)(\`span\`,{className:\`text-neutral-500\`,children:e.is_anonymous?\`anonymous\`:\`—\`})}),(0,j.jsxs)(\`td\`,{className:\`px-3 py-1.5 font-mono text-[11px] text-neutral-500\`,children:[e.id.slice(0,8),\`…\`]}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:e.app_metadata?.provider||\`—\`}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:(e.created_at||\`\`).slice(0,10)}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:(e.last_sign_in_at||\`\`).slice(0,16).replace(\`T\`,\` \`)}),(0,j.jsx)(\`td\`,{className:\`px-3\`,children:(0,j.jsxs)(\`div\`,{className:\`flex gap-0.5 opacity-0 group-hover:opacity-100\`,children:[(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-brand\`,title:\`Reset password\`,onClick:()=>s(e),children:(0,j.jsx)(ue,{size:13})}),(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 hover:text-red-400\`,onClick:()=>l(e),children:(0,j.jsx)(ge,{size:13})})]})})]},e.id))})]}),e.length===0&&(0,j.jsx)(Kr,{children:\`No users yet.\`})]}),i&&(0,j.jsx)(ti,{onClose:()=>a(!1),onDone:async()=>{a(!1),await c()}}),o&&(0,j.jsx)(ni,{user:o,onClose:()=>s(null),onDone:async()=>{s(null),await c()}})]})}function ti({onClose:e,onDone:t}){let[n,r]=(0,_.useState)(\`\`),[i,a]=(0,_.useState)(\`\`),[o,s]=(0,_.useState)(\`\`),[c,l]=(0,_.useState)(!1);async function u(){l(!0),s(\`\`);try{await A.createUser({email:n,password:i||void 0,email_confirm:!0}),t()}catch(e){s(e.message),l(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:e,title:\`Add user\`,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Email\`}),(0,j.jsx)(Vr,{value:n,onChange:e=>r(e.target.value),placeholder:\`user@example.com\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Password (optional)\`}),(0,j.jsx)(Vr,{type:\`password\`,value:i,onChange:e=>a(e.target.value)})]}),o&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:o}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:e,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:u,disabled:c||!n,children:c?\`Creating…\`:\`Create\`})]})]})})}function ni({user:e,onClose:t,onDone:n}){let[r,i]=(0,_.useState)(\`\`),[a,o]=(0,_.useState)(\`\`),[s,c]=(0,_.useState)(!1);async function l(){c(!0),o(\`\`);try{await A.updateUser(e.id,{password:r}),n()}catch(e){o(e.message),c(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:t,title:\`Reset password · \${e.email||e.id}\`,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`New password\`}),(0,j.jsx)(Vr,{type:\`password\`,value:r,onChange:e=>i(e.target.value)})]}),a&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:a}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:t,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:l,disabled:s||r.length<6,children:s?\`Saving…\`:\`Update\`})]})]})})}function ri(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(!0),[c,l]=(0,_.useState)(!1),u=(0,_.useRef)(null);async function d(){let e=await A.buckets();t(e),r(t=>t??e[0]?.id??null)}async function f(e){a(await A.listObjects(e))}(0,_.useEffect)(()=>{d().finally(()=>s(!1))},[]),(0,_.useEffect)(()=>{n&&f(n)},[n]);async function p(e){n&&(await A.uploadObject(n,e.name,e),await f(n))}async function m(e){!n||!confirm(\`Delete \${e}?\`)||(await A.removeObject(n,e),await f(n))}async function h(e){if(confirm(\`Delete bucket "\${e}"? It must be empty.\`))try{await A.deleteBucket(e),r(null),await d()}catch(e){alert(e.message)}}return o?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex w-60 shrink-0 flex-col border-r border-neutral-800 bg-[#191919]\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between px-3 py-2.5 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:[\`Buckets\`,(0,j.jsx)(\`button\`,{className:\`text-neutral-400 hover:text-brand\`,onClick:()=>l(!0),children:(0,j.jsx)(de,{size:14})})]}),(0,j.jsxs)(\`div\`,{className:\`flex-1 overflow-auto\`,children:[e.map(e=>(0,j.jsxs)(\`button\`,{onClick:()=>r(e.id),className:\`group flex w-full items-center justify-between px-3 py-1.5 text-left text-[13px] \`+(n===e.id?\`bg-neutral-800 text-neutral-100\`:\`text-neutral-400 hover:bg-neutral-800/50\`),children:[(0,j.jsxs)(\`span\`,{className:\`truncate\`,children:[e.id,e.public&&(0,j.jsx)(\`span\`,{className:\`ml-1.5 text-[10px] text-brand\`,children:\`public\`})]}),(0,j.jsx)(ge,{size:13,className:\`opacity-0 hover:text-red-400 group-hover:opacity-100\`,onClick:t=>{t.stopPropagation(),h(e.id)}})]},e.id)),e.length===0&&(0,j.jsx)(Kr,{children:\`No buckets.\`})]})]}),(0,j.jsx)(\`div\`,{className:\`flex min-w-0 flex-1 flex-col\`,children:n?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(\`span\`,{className:\`font-mono text-sm\`,children:n}),(0,j.jsx)(\`input\`,{ref:u,type:\`file\`,className:\`hidden\`,onChange:e=>e.target.files?.[0]&&p(e.target.files[0])}),(0,j.jsxs)(N,{size:\`xs\`,className:\`ml-auto\`,onClick:()=>u.current?.click(),children:[(0,j.jsx)(_e,{size:13}),\` Upload\`]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto p-2\`,children:[i.map(e=>(0,j.jsxs)(\`div\`,{className:\`group flex items-center gap-2 rounded-md px-2 py-1.5 text-[13px] hover:bg-neutral-800/40\`,children:[(0,j.jsx)(se,{size:14,className:\`text-neutral-500\`}),(0,j.jsx)(\`span\`,{className:\`font-mono\`,children:e.name}),e.metadata?.size!=null&&(0,j.jsx)(\`span\`,{className:\`text-[11px] text-neutral-500\`,children:ai(e.metadata.size)}),(0,j.jsx)(\`button\`,{className:\`ml-auto p-1 text-neutral-500 opacity-0 hover:text-red-400 group-hover:opacity-100\`,onClick:()=>m(e.name),children:(0,j.jsx)(ge,{size:13})})]},e.name)),i.length===0&&(0,j.jsx)(Kr,{children:\`Empty bucket. Upload a file.\`})]})]}):(0,j.jsx)(Kr,{children:\`Select or create a bucket.\`})}),c&&(0,j.jsx)(ii,{onClose:()=>l(!1),onDone:async()=>{l(!1),await d()}})]})}function ii({onClose:e,onDone:t}){let[n,r]=(0,_.useState)(\`\`),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(\`\`),[c,l]=(0,_.useState)(!1);async function u(){l(!0),s(\`\`);try{await A.createBucket({id:n,name:n,public:i}),t()}catch(e){s(e.message),l(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:e,title:\`New bucket\`,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Name\`}),(0,j.jsx)(Vr,{value:n,onChange:e=>r(e.target.value),placeholder:\`avatars\`})]}),(0,j.jsxs)(\`label\`,{className:\`flex items-center gap-2 text-[13px] text-neutral-300\`,children:[(0,j.jsx)(\`input\`,{type:\`checkbox\`,checked:i,onChange:e=>a(e.target.checked)}),\`Public bucket (objects readable without auth)\`]}),o&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:o}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:e,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:u,disabled:c||!n,children:c?\`Creating…\`:\`Create\`})]})]})})}function ai(e){return e<1024?\`\${e} B\`:e<1024*1024?\`\${(e/1024).toFixed(1)} KB\`:\`\${(e/1024/1024).toFixed(1)} MB\`}function oi(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)([]),[c,l]=(0,_.useState)(!0);return(0,_.useEffect)(()=>{Promise.all([A.stats(),A.migrations(),A.functions(),A.triggers()]).then(([e,n,i,o])=>{t(e),r(n),a(i),s(o)}).finally(()=>l(!1))},[]),c?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`h-full overflow-auto p-6\`,children:[(0,j.jsx)(\`h1\`,{className:\`text-sm font-semibold text-neutral-300\`,children:\`Database\`}),e&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(\`p\`,{className:\`mt-1 font-mono text-xs text-neutral-500\`,children:e.version}),(0,j.jsxs)(\`div\`,{className:\`mt-4 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6\`,children:[(0,j.jsx)(si,{label:\`Tables\`,value:e.tables}),(0,j.jsx)(si,{label:\`Users\`,value:e.users}),(0,j.jsx)(si,{label:\`Buckets\`,value:e.buckets}),(0,j.jsx)(si,{label:\`Objects\`,value:e.objects}),(0,j.jsx)(si,{label:\`Migrations\`,value:e.migrations}),(0,j.jsx)(si,{label:\`DB size\`,value:e.dbSize})]})]}),(0,j.jsx)(\`h2\`,{className:\`mb-2 mt-8 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:\`Migrations\`}),(0,j.jsxs)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Version\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Name\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Applied\`})]})}),(0,j.jsx)(\`tbody\`,{children:n.map(e=>(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-400\`,children:e.version}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono\`,children:e.name||\`—\`}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:(e.applied_at||\`\`).slice(0,19).replace(\`T\`,\` \`)})]},e.version))})]}),n.length===0&&(0,j.jsx)(Kr,{children:\`No migrations applied.\`})]}),(0,j.jsx)(\`h2\`,{className:\`mb-2 mt-8 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:\`Functions\`}),(0,j.jsxs)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Name\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Arguments\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Returns\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Language\`})]})}),(0,j.jsx)(\`tbody\`,{children:i.map(e=>(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-200\`,children:e.name}),(0,j.jsx)(\`td\`,{className:\`max-w-[280px] truncate px-4 py-1.5 font-mono text-[11px] text-neutral-500\`,children:e.args||\`—\`}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-400\`,children:e.returns}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:e.language})]},e.name))})]}),i.length===0&&(0,j.jsx)(Kr,{children:\`No user functions.\`})]}),(0,j.jsx)(\`h2\`,{className:\`mb-2 mt-8 text-xs font-semibold uppercase tracking-wide text-neutral-500\`,children:\`Triggers\`}),(0,j.jsxs)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:[(0,j.jsxs)(\`table\`,{className:\`w-full border-collapse text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919]\`,children:(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800 text-left text-neutral-400\`,children:[(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Name\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Table\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Timing\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Events\`}),(0,j.jsx)(\`th\`,{className:\`px-4 py-2 font-medium\`,children:\`Function\`})]})}),(0,j.jsx)(\`tbody\`,{children:o.map(e=>(0,j.jsxs)(\`tr\`,{className:\`border-b border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-200\`,children:e.name}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-neutral-400\`,children:e.table}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:e.timing}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 text-neutral-400\`,children:(e.events||[]).join(\`, \`)}),(0,j.jsx)(\`td\`,{className:\`px-4 py-1.5 font-mono text-[11px] text-neutral-500\`,children:e.function})]},e.table+e.name))})]}),o.length===0&&(0,j.jsx)(Kr,{children:\`No triggers.\`})]})]})}function si({label:e,value:t}){return(0,j.jsxs)(\`div\`,{className:\`rounded-lg border border-neutral-800 bg-[#191919] p-3\`,children:[(0,j.jsx)(\`div\`,{className:\`text-lg font-semibold text-neutral-100\`,children:t}),(0,j.jsx)(\`div\`,{className:\`text-xs text-neutral-500\`,children:e})]})}function ci(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(!0),[i,a]=(0,_.useState)(!1);async function o(){t(await A.policies())}(0,_.useEffect)(()=>{o().finally(()=>r(!1))},[]);async function s(e){confirm(\`Drop policy "\${e.name}" on \${e.table}?\`)&&(await A.dropPolicy(e.table,e.name),await o())}if(n)return(0,j.jsx)(Gr,{});let c=new Map;for(let t of e)c.has(t.table)||c.set(t.table,[]),c.get(t.table).push(t);return(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2 border-b border-neutral-800 px-4 py-2.5\`,children:[(0,j.jsx)(me,{size:15,className:\`text-brand\`}),(0,j.jsx)(\`span\`,{className:\`text-sm font-semibold\`,children:\`RLS Policies\`}),(0,j.jsx)(\`span\`,{className:\`rounded bg-neutral-800 px-1.5 py-0.5 text-[11px] text-neutral-400\`,children:e.length}),(0,j.jsxs)(N,{size:\`xs\`,className:\`ml-auto\`,onClick:()=>a(!0),children:[(0,j.jsx)(de,{size:13}),\` New policy\`]})]}),(0,j.jsxs)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto p-4\`,children:[[...c].map(([e,t])=>(0,j.jsxs)(\`div\`,{className:\`mb-5\`,children:[(0,j.jsx)(\`div\`,{className:\`mb-1.5 font-mono text-[13px] text-neutral-300\`,children:e}),(0,j.jsx)(\`div\`,{className:\`overflow-hidden rounded-md border border-neutral-800\`,children:(0,j.jsxs)(\`table\`,{className:\`w-full text-[13px]\`,children:[(0,j.jsx)(\`thead\`,{className:\`bg-[#191919] text-neutral-400\`,children:(0,j.jsxs)(\`tr\`,{children:[(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`Policy\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`Command\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`Roles\`}),(0,j.jsx)(\`th\`,{className:\`px-3 py-1.5 text-left font-medium\`,children:\`USING / CHECK\`}),(0,j.jsx)(\`th\`,{className:\`w-10\`})]})}),(0,j.jsx)(\`tbody\`,{children:t.map(e=>(0,j.jsxs)(\`tr\`,{className:\`group border-t border-neutral-800/60\`,children:[(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5\`,children:e.name}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 text-neutral-400\`,children:e.cmd}),(0,j.jsx)(\`td\`,{className:\`px-3 py-1.5 font-mono text-[11px] text-neutral-500\`,children:Array.isArray(e.roles)?e.roles.join(\`, \`):e.roles}),(0,j.jsx)(\`td\`,{className:\`max-w-[360px] truncate px-3 py-1.5 font-mono text-[11px] text-amber-300/70\`,children:[e.using_expr&&\`USING \${e.using_expr}\`,e.with_check&&\`CHECK \${e.with_check}\`].filter(Boolean).join(\` · \`)}),(0,j.jsx)(\`td\`,{className:\`px-2\`,children:(0,j.jsx)(\`button\`,{className:\`p-1 text-neutral-500 opacity-0 hover:text-red-400 group-hover:opacity-100\`,onClick:()=>s(e),children:(0,j.jsx)(ge,{size:13})})})]},e.name))})]})})]},e)),e.length===0&&(0,j.jsx)(Kr,{children:\`No policies. Create one, or enable RLS on a table first.\`})]}),i&&(0,j.jsx)(li,{onClose:()=>a(!1),onDone:async()=>{a(!1),await o()}})]})}function li({onClose:e,onDone:t}){let[n,r]=(0,_.useState)({table:\`\`,name:\`\`,command:\`ALL\`,roles:\`authenticated\`,using:\`\`,check:\`\`}),[i,a]=(0,_.useState)(\`\`),[o,s]=(0,_.useState)(!1),c=(e,t)=>r(n=>({...n,[e]:t}));async function l(){s(!0),a(\`\`);try{let e=await A.createPolicy(n);if(e.error)throw Error(e.error+(e.hint?\` (\${e.hint})\`:\`\`));t()}catch(e){a(e.message),s(!1)}}return(0,j.jsx)(Wr,{open:!0,onClose:e,title:\`New RLS policy\`,wide:!0,children:(0,j.jsxs)(\`div\`,{className:\`space-y-3\`,children:[(0,j.jsxs)(\`div\`,{className:\`grid grid-cols-2 gap-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Table\`}),(0,j.jsx)(Vr,{value:n.table,onChange:e=>c(\`table\`,e.target.value),placeholder:\`todos\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Policy name\`}),(0,j.jsx)(Vr,{value:n.name,onChange:e=>c(\`name\`,e.target.value),placeholder:\`own rows\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Command\`}),(0,j.jsx)(\`select\`,{className:\`h-8 w-full rounded-md border border-neutral-700 bg-neutral-900 px-2 text-[13px]\`,value:n.command,onChange:e=>c(\`command\`,e.target.value),children:[\`ALL\`,\`SELECT\`,\`INSERT\`,\`UPDATE\`,\`DELETE\`].map(e=>(0,j.jsx)(\`option\`,{children:e},e))})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`Roles\`}),(0,j.jsx)(Vr,{value:n.roles,onChange:e=>c(\`roles\`,e.target.value),placeholder:\`authenticated\`})]})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`USING expression (read/visibility)\`}),(0,j.jsx)(Vr,{value:n.using,onChange:e=>c(\`using\`,e.target.value),placeholder:\`user_id = auth.uid()\`})]}),(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(Ur,{children:\`WITH CHECK expression (writes)\`}),(0,j.jsx)(Vr,{value:n.check,onChange:e=>c(\`check\`,e.target.value),placeholder:\`user_id = auth.uid()\`})]}),i&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:i}),(0,j.jsxs)(\`div\`,{className:\`flex justify-end gap-2\`,children:[(0,j.jsx)(N,{variant:\`outline\`,onClick:e,children:\`Cancel\`}),(0,j.jsx)(N,{onClick:l,disabled:o||!n.table||!n.name,children:o?\`Creating…\`:\`Create policy\`})]})]})})}var ui={info:\`text-neutral-500\`,warn:\`text-amber-400\`,error:\`text-red-400\`};function di(){let[e,t]=(0,_.useState)(null),[n,r]=(0,_.useState)(!0),i=(0,_.useRef)(null);async function a(){try{t(await A.logs())}catch{}}return(0,_.useEffect)(()=>{if(a(),n)return i.current=setInterval(a,2e3),()=>{i.current&&clearInterval(i.current)}},[n]),e===null?(0,j.jsx)(Gr,{}):(0,j.jsxs)(\`div\`,{className:\`flex h-full flex-col\`,children:[(0,j.jsxs)(\`div\`,{className:\`flex items-center justify-between border-b border-neutral-800 px-6 py-3\`,children:[(0,j.jsxs)(\`div\`,{children:[(0,j.jsx)(\`h1\`,{className:\`text-sm font-semibold text-neutral-300\`,children:\`Logs\`}),(0,j.jsx)(\`p\`,{className:\`text-xs text-neutral-500\`,children:\`Recent requests and server events\`})]}),(0,j.jsxs)(\`div\`,{className:\`flex items-center gap-2\`,children:[(0,j.jsx)(N,{className:n?\`\`:\`opacity-60\`,onClick:()=>r(e=>!e),title:n?\`Pause auto-refresh\`:\`Resume auto-refresh\`,children:n?\`⏸ Live\`:\`▶ Paused\`}),(0,j.jsx)(N,{onClick:a,children:\`Refresh\`}),(0,j.jsx)(N,{onClick:async()=>{await A.clearLogs(),a()},children:\`Clear\`})]})]}),(0,j.jsx)(\`div\`,{className:\`min-h-0 flex-1 overflow-auto p-3 font-mono text-[12.5px] leading-relaxed\`,children:e.length===0?(0,j.jsx)(Kr,{children:\`No logs yet. Make a request or trigger an email/webhook.\`}):e.map((e,t)=>(0,j.jsxs)(\`div\`,{className:\`flex gap-3 whitespace-pre-wrap break-words px-3 py-0.5 hover:bg-neutral-800/40\`,children:[(0,j.jsx)(\`span\`,{className:\`shrink-0 tabular-nums text-neutral-600\`,children:e.ts.slice(11,23)}),(0,j.jsx)(\`span\`,{className:\`shrink-0 uppercase \`+ui[e.level],children:e.level}),(0,j.jsx)(\`span\`,{className:\`text-neutral-300\`,children:e.msg})]},t))})]})}var fi=[{id:\`table\`,label:\`Table Editor\`,icon:he},{id:\`sql\`,label:\`SQL Editor\`,icon:D},{id:\`auth\`,label:\`Authentication\`,icon:ue},{id:\`policies\`,label:\`RLS Policies\`,icon:me},{id:\`storage\`,label:\`Storage\`,icon:le},{id:\`database\`,label:\`Database\`,icon:ce},{id:\`logs\`,label:\`Logs\`,icon:pe}];function pi({size:e=24}){return(0,j.jsxs)(\`svg\`,{width:e,height:e,viewBox:\`0 0 120 120\`,children:[(0,j.jsx)(\`path\`,{d:\`M24 34v56c0 8.8 16.1 16 36 16s36-7.2 36-16V34\`,fill:\`#2a9d6f\`}),(0,j.jsx)(\`ellipse\`,{cx:\`60\`,cy:\`34\`,rx:\`36\`,ry:\`16\`,fill:\`#3ecf8e\`})]})}function mi(){let[e,t]=(0,_.useState)(!!be()),[n,r]=(0,_.useState)(\`table\`);return(0,_.useEffect)(()=>{be()&&A.ping().catch(()=>{Se(),t(!1)})},[]),e?(0,j.jsxs)(\`div\`,{className:\`flex h-full\`,children:[(0,j.jsxs)(\`nav\`,{className:\`flex w-14 shrink-0 flex-col items-center gap-1 border-r border-neutral-800 bg-[#171717] py-3\`,children:[(0,j.jsx)(\`div\`,{className:\`mb-3\`,children:(0,j.jsx)(pi,{})}),fi.map(e=>{let t=e.icon,i=n===e.id;return(0,j.jsxs)(\`button\`,{title:e.label,onClick:()=>r(e.id),className:\`group relative flex size-9 items-center justify-center rounded-md transition-colors \`+(i?\`bg-neutral-800 text-brand\`:\`text-neutral-500 hover:bg-neutral-800 hover:text-neutral-200\`),children:[(0,j.jsx)(t,{size:18}),(0,j.jsx)(\`span\`,{className:\`pointer-events-none absolute left-11 z-20 hidden whitespace-nowrap rounded-md border border-neutral-700 bg-neutral-900 px-2 py-1 text-xs text-neutral-200 group-hover:block\`,children:e.label})]},e.id)}),(0,j.jsx)(\`button\`,{title:\`Log out\`,onClick:()=>{Se(),t(!1)},className:\`mt-auto flex size-9 items-center justify-center rounded-md text-neutral-600 hover:bg-neutral-800 hover:text-neutral-300\`,children:(0,j.jsx)(oe,{size:18})})]}),(0,j.jsxs)(\`main\`,{className:\`min-w-0 flex-1\`,children:[n===\`table\`&&(0,j.jsx)(Jr,{}),n===\`sql\`&&(0,j.jsx)(Qr,{}),n===\`auth\`&&(0,j.jsx)(ei,{}),n===\`policies\`&&(0,j.jsx)(ci,{}),n===\`storage\`&&(0,j.jsx)(ri,{}),n===\`database\`&&(0,j.jsx)(oi,{}),n===\`logs\`&&(0,j.jsx)(di,{})]})]}):(0,j.jsx)(hi,{onOk:()=>t(!0)})}function hi({onOk:e}){let[t,n]=(0,_.useState)(\`\`),[r,i]=(0,_.useState)(\`\`),[a,o]=(0,_.useState)(!1);async function s(){o(!0),i(\`\`),xe(t.trim());try{await A.ping(),e()}catch(e){Se(),i(\`Invalid service_role key: \`+e.message)}finally{o(!1)}}return(0,j.jsx)(\`div\`,{className:\`flex h-full items-center justify-center\`,children:(0,j.jsxs)(\`div\`,{className:\`w-[400px] text-center\`,children:[(0,j.jsx)(\`div\`,{className:\`mb-4 flex justify-center\`,children:(0,j.jsx)(pi,{size:48})}),(0,j.jsx)(\`h1\`,{className:\`text-lg font-semibold\`,children:\`tinbase studio\`}),(0,j.jsxs)(\`p\`,{className:\`mt-1 text-[13px] text-neutral-500\`,children:[\`Sign in with the \`,(0,j.jsx)(\`span\`,{className:\`text-neutral-300\`,children:\`service_role\`}),\` key printed when tinbase started.\`]}),(0,j.jsxs)(\`div\`,{className:\`mt-5 space-y-3 text-left\`,children:[(0,j.jsx)(Vr,{type:\`password\`,placeholder:\`service_role key (eyJ…)\`,value:t,onChange:e=>n(e.target.value),onKeyDown:e=>e.key===\`Enter\`&&s()}),(0,j.jsx)(N,{className:\`w-full\`,onClick:s,disabled:a||!t.trim(),children:a?\`Checking…\`:\`Continue\`}),r&&(0,j.jsx)(\`p\`,{className:\`text-xs text-red-400\`,children:r})]})]})})}(0,v.createRoot)(document.getElementById(\`root\`)).render((0,j.jsx)(_.StrictMode,{children:(0,j.jsx)(mi,{})}));</script>
65
65
  <style rel="stylesheet" crossorigin>/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
66
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-blue-400:oklch(70.7% .165 254.624);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand:#3ecf8e}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.top-0{top:0}.top-1\\/2{top:50%}.left-1\\/2{left:50%}.left-11{left:calc(var(--spacing) * 11)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.m-4{margin:calc(var(--spacing) * 4)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-1{margin-left:var(--spacing)}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-40{height:calc(var(--spacing) * 40)}.h-full{height:100%}.max-h-\\[85vh\\]{max-height:85vh}.min-h-0{min-height:0}.w-10{width:calc(var(--spacing) * 10)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-60{width:calc(var(--spacing) * 60)}.w-\\[400px\\]{width:400px}.w-\\[440px\\]{width:440px}.w-\\[640px\\]{width:640px}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.max-w-\\[320px\\]{max-width:320px}.max-w-\\[360px\\]{max-width:360px}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-spin{animation:var(--animate-spin)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-neutral-700{border-color:var(--color-neutral-700)}.border-neutral-800{border-color:var(--color-neutral-800)}.border-neutral-800\\/60{border-color:#26262699}@supports (color:color-mix(in lab, red, red)){.border-neutral-800\\/60{border-color:color-mix(in oklab, var(--color-neutral-800) 60%, transparent)}}.border-red-900\\/50{border-color:#82181a80}@supports (color:color-mix(in lab, red, red)){.border-red-900\\/50{border-color:color-mix(in oklab, var(--color-red-900) 50%, transparent)}}.border-red-900\\/60{border-color:#82181a99}@supports (color:color-mix(in lab, red, red)){.border-red-900\\/60{border-color:color-mix(in oklab, var(--color-red-900) 60%, transparent)}}.border-t-brand{border-top-color:var(--color-brand)}.bg-\\[\\#1c1c1c\\]{background-color:#1c1c1c}.bg-\\[\\#1f1f1f\\]{background-color:#1f1f1f}.bg-\\[\\#171717\\]{background-color:#171717}.bg-\\[\\#191919\\]{background-color:#191919}.bg-black\\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-brand{background-color:var(--color-brand)}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-red-950\\/30{background-color:#4608094d}@supports (color:color-mix(in lab, red, red)){.bg-red-950\\/30{background-color:color-mix(in oklab, var(--color-red-950) 30%, transparent)}}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-1{padding-top:var(--spacing)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[13px\\]{font-size:13px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-300\\/70{color:#ffd236b3}@supports (color:color-mix(in lab, red, red)){.text-amber-300\\/70{color:color-mix(in oklab, var(--color-amber-300) 70%, transparent)}}.text-amber-300\\/80{color:#ffd236cc}@supports (color:color-mix(in lab, red, red)){.text-amber-300\\/80{color:color-mix(in oklab, var(--color-amber-300) 80%, transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-black{color:var(--color-black)}.text-blue-400{color:var(--color-blue-400)}.text-brand{color:var(--color-brand)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\\/70{color:#ff6568b3}@supports (color:color-mix(in lab, red, red)){.text-red-400\\/70{color:color-mix(in oklab, var(--color-red-400) 70%, transparent)}}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.group-hover\\:block:is(:where(.group):hover *){display:block}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-neutral-600::placeholder{color:var(--color-neutral-600)}@media (hover:hover){.hover\\:border-neutral-600:hover{border-color:var(--color-neutral-600)}.hover\\:bg-brand\\/90:hover{background-color:#3ecf8ee6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-brand\\/90:hover{background-color:color-mix(in oklab, var(--color-brand) 90%, transparent)}}.hover\\:bg-neutral-800:hover{background-color:var(--color-neutral-800)}.hover\\:bg-neutral-800\\/30:hover{background-color:#2626264d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-neutral-800\\/30:hover{background-color:color-mix(in oklab, var(--color-neutral-800) 30%, transparent)}}.hover\\:bg-neutral-800\\/40:hover{background-color:#26262666}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-neutral-800\\/40:hover{background-color:color-mix(in oklab, var(--color-neutral-800) 40%, transparent)}}.hover\\:bg-neutral-800\\/50:hover{background-color:#26262680}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-neutral-800\\/50:hover{background-color:color-mix(in oklab, var(--color-neutral-800) 50%, transparent)}}.hover\\:bg-red-950\\/40:hover{background-color:#46080966}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-950\\/40:hover{background-color:color-mix(in oklab, var(--color-red-950) 40%, transparent)}}.hover\\:text-brand:hover{color:var(--color-brand)}.hover\\:text-neutral-200:hover{color:var(--color-neutral-200)}.hover\\:text-neutral-300:hover{color:var(--color-neutral-300)}.hover\\:text-red-400:hover{color:var(--color-red-400)}}.focus\\:border-brand:focus{border-color:var(--color-brand)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){.lg\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html,body,#root{height:100%}body{color:#ededed;-webkit-font-smoothing:antialiased;background:#1c1c1c;margin:0;font-size:13px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#3a3a3a;border:2px solid #1c1c1c;border-radius:6px}::-webkit-scrollbar-thumb:hover{background:#4a4a4a}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
66
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-blue-400:oklch(70.7% .165 254.624);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand:#3ecf8e}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.top-0{top:0}.top-1\\/2{top:50%}.left-1\\/2{left:50%}.left-11{left:calc(var(--spacing) * 11)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.m-4{margin:calc(var(--spacing) * 4)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-1{margin-left:var(--spacing)}.ml-1\\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-40{height:calc(var(--spacing) * 40)}.h-full{height:100%}.max-h-\\[85vh\\]{max-height:85vh}.min-h-0{min-height:0}.w-10{width:calc(var(--spacing) * 10)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-60{width:calc(var(--spacing) * 60)}.w-\\[400px\\]{width:400px}.w-\\[440px\\]{width:440px}.w-\\[640px\\]{width:640px}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.max-w-\\[320px\\]{max-width:320px}.max-w-\\[360px\\]{max-width:360px}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-spin{animation:var(--animate-spin)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-neutral-700{border-color:var(--color-neutral-700)}.border-neutral-800{border-color:var(--color-neutral-800)}.border-neutral-800\\/60{border-color:#26262699}@supports (color:color-mix(in lab, red, red)){.border-neutral-800\\/60{border-color:color-mix(in oklab, var(--color-neutral-800) 60%, transparent)}}.border-red-900\\/50{border-color:#82181a80}@supports (color:color-mix(in lab, red, red)){.border-red-900\\/50{border-color:color-mix(in oklab, var(--color-red-900) 50%, transparent)}}.border-red-900\\/60{border-color:#82181a99}@supports (color:color-mix(in lab, red, red)){.border-red-900\\/60{border-color:color-mix(in oklab, var(--color-red-900) 60%, transparent)}}.border-t-brand{border-top-color:var(--color-brand)}.bg-\\[\\#1c1c1c\\]{background-color:#1c1c1c}.bg-\\[\\#1f1f1f\\]{background-color:#1f1f1f}.bg-\\[\\#171717\\]{background-color:#171717}.bg-\\[\\#191919\\]{background-color:#191919}.bg-black\\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-red-950\\/30{background-color:#4608094d}@supports (color:color-mix(in lab, red, red)){.bg-red-950\\/30{background-color:color-mix(in oklab, var(--color-red-950) 30%, transparent)}}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-1{padding-top:var(--spacing)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[13px\\]{font-size:13px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-300\\/70{color:#ffd236b3}@supports (color:color-mix(in lab, red, red)){.text-amber-300\\/70{color:color-mix(in oklab, var(--color-amber-300) 70%, transparent)}}.text-amber-300\\/80{color:#ffd236cc}@supports (color:color-mix(in lab, red, red)){.text-amber-300\\/80{color:color-mix(in oklab, var(--color-amber-300) 80%, transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-blue-400{color:var(--color-blue-400)}.text-brand{color:var(--color-brand)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-400\\/70{color:#ff6568b3}@supports (color:color-mix(in lab, red, red)){.text-red-400\\/70{color:color-mix(in oklab, var(--color-red-400) 70%, transparent)}}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.group-hover\\:block:is(:where(.group):hover *){display:block}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-neutral-600::placeholder{color:var(--color-neutral-600)}@media (hover:hover){.hover\\:border-neutral-600:hover{border-color:var(--color-neutral-600)}.hover\\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\\:bg-neutral-800:hover{background-color:var(--color-neutral-800)}.hover\\:bg-neutral-800\\/30:hover{background-color:#2626264d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-neutral-800\\/30:hover{background-color:color-mix(in oklab, var(--color-neutral-800) 30%, transparent)}}.hover\\:bg-neutral-800\\/40:hover{background-color:#26262666}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-neutral-800\\/40:hover{background-color:color-mix(in oklab, var(--color-neutral-800) 40%, transparent)}}.hover\\:bg-neutral-800\\/50:hover{background-color:#26262680}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-neutral-800\\/50:hover{background-color:color-mix(in oklab, var(--color-neutral-800) 50%, transparent)}}.hover\\:bg-red-950\\/40:hover{background-color:#46080966}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-950\\/40:hover{background-color:color-mix(in oklab, var(--color-red-950) 40%, transparent)}}.hover\\:text-brand:hover{color:var(--color-brand)}.hover\\:text-neutral-200:hover{color:var(--color-neutral-200)}.hover\\:text-neutral-300:hover{color:var(--color-neutral-300)}.hover\\:text-red-400:hover{color:var(--color-red-400)}}.focus\\:border-brand:focus{border-color:var(--color-brand)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){.lg\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html,body,#root{height:100%}body{color:#ededed;-webkit-font-smoothing:antialiased;background:#1c1c1c;margin:0;font-size:13px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#3a3a3a;border:2px solid #1c1c1c;border-radius:6px}::-webkit-scrollbar-thumb:hover{background:#4a4a4a}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
67
67
  /*$vite$:1*/</style>
68
68
  </head>
69
69
  <body>
package/dist/cli.js CHANGED
@@ -22,6 +22,10 @@ import { serveBun } from './node/bun-server.js';
22
22
  const IS_BUN = typeof globalThis.Bun !== 'undefined';
23
23
  // single-file builds ship without the WASM engine; native is the default there
24
24
  const IS_BINARY = process.env.TINBASE_SINGLE_BINARY === '1';
25
+ // Native (embedded Postgres) is the default where it's supported — macOS/Linux
26
+ // on x64/arm64. Elsewhere (e.g. Windows) fall back to the WASM (PGlite) engine.
27
+ const NATIVE_SUPPORTED = (process.platform === 'darwin' || process.platform === 'linux') &&
28
+ (process.arch === 'arm64' || process.arch === 'x64');
25
29
  import { signJwt } from './jwt.js';
26
30
  import { DEFAULT_JWT_SECRET } from './types.js';
27
31
  function parseArgs(argv) {
@@ -38,7 +42,7 @@ function parseArgs(argv) {
38
42
  storageDir: '',
39
43
  jwtSecret: process.env.TINBASE_JWT_SECRET ?? DEFAULT_JWT_SECRET,
40
44
  memory: false,
41
- engine: process.env.TINBASE_ENGINE ?? (IS_BINARY ? 'native' : 'wasm'),
45
+ engine: process.env.TINBASE_ENGINE ?? (IS_BINARY || NATIVE_SUPPORTED ? 'native' : 'wasm'),
42
46
  };
43
47
  for (let i = 0; i < args.length; i++) {
44
48
  const a = args[i];
@@ -120,9 +124,10 @@ Options:
120
124
  --storage-dir <p> storage files directory (default <dir>/.tinbase/storage)
121
125
  --jwt-secret <s> JWT secret (or TINBASE_JWT_SECRET env var)
122
126
  --memory in-memory database (no persistence, wasm engine only)
123
- --engine <e> wasm (PGlite, default), native (embedded Postgres),
124
- or pgmem (ultralight in-memory subset — no RLS, cron,
125
- or pgmq; local dev / preview only)
127
+ --engine <e> native (embedded Postgres, default on macOS/Linux),
128
+ wasm (PGlite — default on Windows, browser-ready), or
129
+ pgmem (ultralight in-memory subset — no RLS, cron, or
130
+ pgmq; local dev / preview only)
126
131
  `);
127
132
  }
128
133
  async function main() {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@
2
2
  * In-process scheduler that runs the jobs recorded in cron.job — the execution
3
3
  * half of our pg_cron emulation (the cron.schedule()/unschedule() SQL functions
4
4
  * live in db/emulated.ts). Supports standard 5-field cron expressions and
5
- * pg_cron's "N seconds" form. Runs due job commands as superuser and logs each
5
+ * pg_cron's "N seconds" form. Cron fields are matched in UTC, to match hosted
6
+ * pg_cron (which runs in UTC). Runs due job commands as superuser and logs each
6
7
  * run to cron.job_run_details.
7
8
  */
8
9
  import type { Database } from '../db/database.js';
@@ -25,5 +26,8 @@ export declare class CronService {
25
26
  private run;
26
27
  private log;
27
28
  }
28
- /** Match a Date against a standard 5-field cron expression (min hour dom month dow). */
29
+ /**
30
+ * Match a Date against a standard 5-field cron expression (min hour dom month
31
+ * dow). Fields are evaluated in UTC, matching hosted pg_cron.
32
+ */
29
33
  export declare function cronMatches(expr: string, date: Date): boolean;
@@ -74,12 +74,15 @@ export class CronService {
74
74
  }
75
75
  }
76
76
  }
77
- /** Match a Date against a standard 5-field cron expression (min hour dom month dow). */
77
+ /**
78
+ * Match a Date against a standard 5-field cron expression (min hour dom month
79
+ * dow). Fields are evaluated in UTC, matching hosted pg_cron.
80
+ */
78
81
  export function cronMatches(expr, date) {
79
82
  const fields = expr.trim().split(/\s+/);
80
83
  if (fields.length !== 5)
81
84
  return false;
82
- const parts = [date.getMinutes(), date.getHours(), date.getDate(), date.getMonth() + 1, date.getDay()];
85
+ const parts = [date.getUTCMinutes(), date.getUTCHours(), date.getUTCDate(), date.getUTCMonth() + 1, date.getUTCDay()];
83
86
  const ranges = [
84
87
  [0, 59],
85
88
  [0, 23],
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/cron/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/cron/service.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,4 @@
10
10
  * enforced here — this path is for local-dev/preview only.
11
11
  */
12
12
  export declare const MINIMAL_BOOTSTRAP_SQL = "\ncreate schema if not exists auth;\ncreate schema if not exists storage;\ncreate schema if not exists supabase_migrations;\n\ncreate table if not exists auth.users (\n id uuid primary key default gen_random_uuid(),\n aud text default 'authenticated',\n role text default 'authenticated',\n email text unique,\n encrypted_password text,\n email_confirmed_at timestamptz,\n last_sign_in_at timestamptz,\n raw_app_meta_data jsonb default '{}'::jsonb,\n raw_user_meta_data jsonb default '{}'::jsonb,\n is_super_admin boolean default false,\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n phone text unique,\n phone_confirmed_at timestamptz,\n banned_until timestamptz,\n deleted_at timestamptz,\n is_anonymous boolean default false\n);\n\ncreate table if not exists auth.refresh_tokens (\n id bigserial primary key,\n token text unique not null,\n user_id uuid not null,\n parent text,\n session_id uuid,\n revoked boolean default false,\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists auth.one_time_tokens (\n id uuid primary key default gen_random_uuid(),\n user_id uuid,\n email text not null,\n token_type text not null,\n token text not null,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists auth.identities (\n id uuid primary key default gen_random_uuid(),\n user_id uuid not null,\n provider text not null,\n provider_id text not null,\n identity_data jsonb default '{}'::jsonb,\n last_sign_in_at timestamptz default now(),\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n unique (provider, provider_id)\n);\n\ncreate table if not exists auth.flow_state (\n id uuid primary key default gen_random_uuid(),\n provider text not null,\n provider_state text not null unique,\n redirect_to text,\n code_challenge text,\n code_challenge_method text,\n auth_code text unique,\n user_id uuid,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists auth.mfa_factors (\n id uuid primary key default gen_random_uuid(),\n user_id uuid not null,\n friendly_name text,\n factor_type text not null default 'totp',\n status text not null default 'unverified',\n secret text,\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists auth.mfa_challenges (\n id uuid primary key default gen_random_uuid(),\n factor_id uuid not null,\n verified_at timestamptz,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists storage.buckets (\n id text primary key,\n name text not null unique,\n owner uuid,\n public boolean default false,\n file_size_limit bigint,\n allowed_mime_types text[],\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists storage.objects (\n id uuid primary key default gen_random_uuid(),\n bucket_id text not null,\n name text not null,\n owner uuid,\n version text,\n metadata jsonb default '{}'::jsonb,\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n last_accessed_at timestamptz default now(),\n unique (bucket_id, name)\n);\n\ncreate table if not exists supabase_migrations.schema_migrations (\n version text primary key,\n name text,\n statements text[],\n applied_at timestamptz default now()\n);\n\ncreate table if not exists supabase_migrations.seed_files (\n path text primary key,\n hash text,\n applied_at timestamptz default now()\n);\n";
13
- export declare const BOOTSTRAP_SQL = "\n-- \u2500\u2500 Extensions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- Supabase enables these by default and migrations lean on them\n-- (uuid_generate_v4(), crypt(), citext, pg_trgm, \u2026). Each is created into the\n-- 'extensions' schema like hosted Supabase; any not available in this engine\n-- build is skipped rather than aborting the whole bootstrap.\ncreate schema if not exists extensions;\ndo $$\ndeclare ext text;\nbegin\n foreach ext in array array['uuid-ossp','pgcrypto','citext','pg_trgm','ltree','hstore','fuzzystrmatch'] loop\n begin\n execute format('create extension if not exists %I with schema extensions', ext);\n exception when others then\n -- extension not bundled in this engine build; continue\n end;\n end loop;\nend $$;\n\n-- uuid-ossp isn't in every Postgres build (it needs an external UUID lib at\n-- build time \u2014 e.g. the theseus Linux binaries omit it). uuid_generate_v4() is\n-- the single most-used function from it, so shim it onto core gen_random_uuid()\n-- (also a v4 UUID) whenever the real extension isn't present, so migrations\n-- that call it work identically on every engine and platform.\ndo $$\nbegin\n if not exists (\n select 1 from pg_proc p join pg_namespace n on n.oid = p.pronamespace\n where p.proname = 'uuid_generate_v4' and n.nspname in ('public', 'extensions')\n ) then\n create function extensions.uuid_generate_v4() returns uuid\n language sql volatile as 'select gen_random_uuid()';\n end if;\nend $$;\n\n-- Make extension functions resolvable unqualified (uuid_generate_v4(), \u2026) on\n-- the current session (migrations run here) and for future connections.\ndo $$\nbegin\n execute 'alter database ' || quote_ident(current_database()) ||\n ' set search_path to \"$user\", public, extensions';\nexception when others then\n -- some engines disallow altering the current database; session SET below still applies\nend $$;\nset search_path to \"$user\", public, extensions;\n\n-- \u2500\u2500 Roles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ndo $$\nbegin\n if not exists (select from pg_roles where rolname = 'anon') then\n create role anon nologin noinherit;\n end if;\n if not exists (select from pg_roles where rolname = 'authenticated') then\n create role authenticated nologin noinherit;\n end if;\n if not exists (select from pg_roles where rolname = 'service_role') then\n create role service_role nologin noinherit bypassrls;\n end if;\nend $$;\n\ngrant usage on schema extensions to anon, authenticated, service_role;\nalter role anon set search_path to \"$user\", public, extensions;\nalter role authenticated set search_path to \"$user\", public, extensions;\nalter role service_role set search_path to \"$user\", public, extensions;\n\ngrant usage on schema public to anon, authenticated, service_role;\ngrant all on all tables in schema public to anon, authenticated, service_role;\ngrant all on all sequences in schema public to anon, authenticated, service_role;\ngrant execute on all functions in schema public to anon, authenticated, service_role;\n\nalter default privileges in schema public\n grant all on tables to anon, authenticated, service_role;\nalter default privileges in schema public\n grant all on sequences to anon, authenticated, service_role;\nalter default privileges in schema public\n grant execute on functions to anon, authenticated, service_role;\n\n-- \u2500\u2500 Auth schema (GoTrue-compatible subset) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists auth;\n\ncreate table if not exists auth.users (\n id uuid primary key default gen_random_uuid(),\n aud text default 'authenticated',\n role text default 'authenticated',\n email text unique,\n encrypted_password text,\n email_confirmed_at timestamptz,\n invited_at timestamptz,\n confirmation_token text,\n recovery_token text,\n last_sign_in_at timestamptz,\n raw_app_meta_data jsonb default '{}'::jsonb,\n raw_user_meta_data jsonb default '{}'::jsonb,\n is_super_admin boolean default false,\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n phone text unique,\n phone_confirmed_at timestamptz,\n banned_until timestamptz,\n deleted_at timestamptz,\n is_anonymous boolean default false\n);\n\ncreate table if not exists auth.refresh_tokens (\n id bigint generated by default as identity primary key,\n token text unique not null,\n user_id uuid not null references auth.users(id) on delete cascade,\n parent text,\n session_id uuid,\n revoked boolean default false,\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate index if not exists refresh_tokens_user_id_idx on auth.refresh_tokens(user_id);\n\ncreate table if not exists auth.one_time_tokens (\n id uuid primary key default gen_random_uuid(),\n user_id uuid references auth.users(id) on delete cascade,\n email text not null,\n token_type text not null, -- otp | magiclink | recovery\n token text not null,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists auth.identities (\n id uuid primary key default gen_random_uuid(),\n user_id uuid not null references auth.users(id) on delete cascade,\n provider text not null,\n provider_id text not null,\n identity_data jsonb default '{}'::jsonb,\n last_sign_in_at timestamptz default now(),\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n unique (provider, provider_id)\n);\n\n-- OAuth / PKCE flow state, bridging /authorize \u2192 provider \u2192 /callback \u2192 exchange\ncreate table if not exists auth.flow_state (\n id uuid primary key default gen_random_uuid(),\n provider text not null,\n provider_state text not null unique,\n redirect_to text,\n code_challenge text,\n code_challenge_method text,\n auth_code text unique,\n user_id uuid references auth.users(id) on delete cascade,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists auth.mfa_factors (\n id uuid primary key default gen_random_uuid(),\n user_id uuid not null references auth.users(id) on delete cascade,\n friendly_name text,\n factor_type text not null default 'totp',\n status text not null default 'unverified', -- unverified | verified\n secret text,\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists auth.mfa_challenges (\n id uuid primary key default gen_random_uuid(),\n factor_id uuid not null references auth.mfa_factors(id) on delete cascade,\n verified_at timestamptz,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ngrant usage on schema auth to anon, authenticated, service_role;\n\ncreate or replace function auth.jwt() returns jsonb\nlanguage sql stable as $$\n select coalesce(\n nullif(current_setting('request.jwt.claims', true), ''),\n '{}'\n )::jsonb\n$$;\n\ncreate or replace function auth.uid() returns uuid\nlanguage sql stable as $$\n select nullif(auth.jwt() ->> 'sub', '')::uuid\n$$;\n\ncreate or replace function auth.role() returns text\nlanguage sql stable as $$\n select coalesce(auth.jwt() ->> 'role', 'anon')\n$$;\n\ncreate or replace function auth.email() returns text\nlanguage sql stable as $$\n select auth.jwt() ->> 'email'\n$$;\n\ngrant execute on function auth.jwt(), auth.uid(), auth.role(), auth.email()\n to anon, authenticated, service_role;\n\n-- \u2500\u2500 Storage schema (storage-api-compatible subset) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists storage;\n\ncreate table if not exists storage.buckets (\n id text primary key,\n name text not null unique,\n owner uuid,\n public boolean default false,\n file_size_limit bigint,\n allowed_mime_types text[],\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists storage.objects (\n id uuid primary key default gen_random_uuid(),\n bucket_id text not null references storage.buckets(id),\n name text not null,\n owner uuid,\n version text,\n metadata jsonb default '{}'::jsonb,\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n last_accessed_at timestamptz default now(),\n unique (bucket_id, name)\n);\n\ncreate index if not exists objects_bucket_name_idx on storage.objects(bucket_id, name);\n\ngrant usage on schema storage to anon, authenticated, service_role;\ngrant select on storage.buckets to anon, authenticated, service_role;\ngrant all on storage.buckets to service_role;\ngrant all on storage.objects to anon, authenticated, service_role;\n\ncreate or replace function storage.foldername(name text) returns text[]\nlanguage sql immutable as $$\n select (string_to_array(name, '/'))[1 : array_length(string_to_array(name, '/'), 1) - 1]\n$$;\n\ncreate or replace function storage.filename(name text) returns text\nlanguage sql immutable as $$\n select (string_to_array(name, '/'))[array_length(string_to_array(name, '/'), 1)]\n$$;\n\ncreate or replace function storage.extension(name text) returns text\nlanguage sql immutable as $$\n select reverse(split_part(reverse(storage.filename(name)), '.', 1))\n$$;\n\nalter table storage.objects enable row level security;\n\n-- Dev-friendly default policies. Replace them in your migrations to lock down.\ndo $$\nbegin\n if not exists (select from pg_policies where schemaname = 'storage' and tablename = 'objects' and policyname = 'tinbase_authenticated_all') then\n create policy tinbase_authenticated_all on storage.objects\n for all to authenticated using (true) with check (true);\n end if;\n if not exists (select from pg_policies where schemaname = 'storage' and tablename = 'objects' and policyname = 'tinbase_public_read') then\n create policy tinbase_public_read on storage.objects\n for select to anon\n using (bucket_id in (select id from storage.buckets where public));\n end if;\nend $$;\n\n-- \u2500\u2500 Migration bookkeeping (same table the Supabase CLI uses) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists supabase_migrations;\n\ncreate table if not exists supabase_migrations.schema_migrations (\n version text primary key,\n name text,\n statements text[],\n applied_at timestamptz default now()\n);\n\ncreate table if not exists supabase_migrations.seed_files (\n path text primary key,\n hash text,\n applied_at timestamptz default now()\n);\n\n-- \u2500\u2500 Realtime CDC plumbing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists tinbase;\n\ncreate or replace function tinbase.cdc_notify() returns trigger\nlanguage plpgsql security definer as $$\ndeclare\n payload text;\nbegin\n payload := json_build_object(\n 'schema', TG_TABLE_SCHEMA,\n 'table', TG_TABLE_NAME,\n 'type', TG_OP,\n 'commit_timestamp', to_char(now() at time zone 'utc', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'),\n 'record', case when TG_OP in ('INSERT', 'UPDATE') then row_to_json(NEW) else null end,\n 'old_record', case when TG_OP in ('UPDATE', 'DELETE') then row_to_json(OLD) else null end\n )::text;\n -- pg_notify payloads are capped at ~8kB; degrade like Supabase does.\n if octet_length(payload) > 7500 then\n payload := json_build_object(\n 'schema', TG_TABLE_SCHEMA,\n 'table', TG_TABLE_NAME,\n 'type', TG_OP,\n 'commit_timestamp', to_char(now() at time zone 'utc', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'),\n 'record', null,\n 'old_record', null,\n 'errors', json_build_array('Payload too large')\n )::text;\n end if;\n perform pg_notify('tinbase_cdc', payload);\n return coalesce(NEW, OLD);\nend $$;\n\n-- \u2500\u2500 Realtime Authorization + broadcast-from-database \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- Mirrors Supabase Realtime: developers write RLS policies on\n-- realtime.messages using realtime.topic(); a SELECT policy grants a private\n-- channel's subscribers the right to *receive*, an INSERT policy the right to\n-- *broadcast*. realtime.send() lets the database push a broadcast to a topic.\ncreate schema if not exists realtime;\n\ncreate table if not exists realtime.messages (\n id uuid not null default gen_random_uuid(),\n topic text not null,\n extension text not null,\n event text,\n payload jsonb,\n private boolean default false,\n inserted_at timestamptz not null default now(),\n updated_at timestamptz not null default now(),\n primary key (id)\n);\nalter table realtime.messages enable row level security;\n\ngrant usage on schema realtime to anon, authenticated, service_role;\ngrant all on realtime.messages to anon, authenticated, service_role;\n\n-- the topic currently being authorized/broadcast (set per operation)\ncreate or replace function realtime.topic() returns text\n language sql stable as $$ select nullif(current_setting('realtime.topic', true), '') $$;\n\n-- push a broadcast message to all subscribers of <topic> from SQL / triggers.\n-- Delivered over the websocket by the in-process realtime engine, which listens\n-- on the 'tinbase_realtime_broadcast' channel.\ncreate or replace function realtime.send(payload jsonb, event text, topic text, private boolean default true)\n returns void language plpgsql security definer as $$\nbegin\n perform pg_notify(\n 'tinbase_realtime_broadcast',\n json_build_object('topic', topic, 'event', event, 'payload', payload, 'private', private)::text\n );\nexception when others then\n -- never let a notify failure abort the caller's transaction\n null;\nend $$;\n\ngrant execute on function realtime.topic() to anon, authenticated, service_role;\ngrant execute on function realtime.send(jsonb, text, text, boolean) to anon, authenticated, service_role;\n";
13
+ export declare const BOOTSTRAP_SQL = "\n-- \u2500\u2500 Extensions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- Supabase enables these by default and migrations lean on them\n-- (uuid_generate_v4(), crypt(), citext, pg_trgm, \u2026). Each is created into the\n-- 'extensions' schema like hosted Supabase; any not available in this engine\n-- build is skipped rather than aborting the whole bootstrap.\ncreate schema if not exists extensions;\ndo $$\ndeclare ext text;\nbegin\n foreach ext in array array['uuid-ossp','pgcrypto','citext','pg_trgm','ltree','hstore','fuzzystrmatch'] loop\n begin\n execute format('create extension if not exists %I with schema extensions', ext);\n exception when others then\n -- extension not bundled in this engine build; continue\n end;\n end loop;\nend $$;\n\n-- uuid-ossp isn't in every Postgres build (it needs an external UUID lib at\n-- build time \u2014 e.g. the theseus Linux binaries omit it). uuid_generate_v4() is\n-- the single most-used function from it, so shim it onto core gen_random_uuid()\n-- (also a v4 UUID) whenever the real extension isn't present, so migrations\n-- that call it work identically on every engine and platform.\ndo $$\nbegin\n if not exists (\n select 1 from pg_proc p join pg_namespace n on n.oid = p.pronamespace\n where p.proname = 'uuid_generate_v4' and n.nspname in ('public', 'extensions')\n ) then\n create function extensions.uuid_generate_v4() returns uuid\n language sql volatile as 'select gen_random_uuid()';\n end if;\nend $$;\n\n-- Make extension functions resolvable unqualified (uuid_generate_v4(), \u2026) on\n-- the current session (migrations run here) and for future connections.\ndo $$\nbegin\n execute 'alter database ' || quote_ident(current_database()) ||\n ' set search_path to \"$user\", public, extensions';\nexception when others then\n -- some engines disallow altering the current database; session SET below still applies\nend $$;\nset search_path to \"$user\", public, extensions;\n\n-- \u2500\u2500 Roles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ndo $$\nbegin\n if not exists (select from pg_roles where rolname = 'anon') then\n create role anon nologin noinherit;\n end if;\n if not exists (select from pg_roles where rolname = 'authenticated') then\n create role authenticated nologin noinherit;\n end if;\n if not exists (select from pg_roles where rolname = 'service_role') then\n create role service_role nologin noinherit bypassrls;\n end if;\nend $$;\n\ngrant usage on schema extensions to anon, authenticated, service_role;\nalter role anon set search_path to \"$user\", public, extensions;\nalter role authenticated set search_path to \"$user\", public, extensions;\nalter role service_role set search_path to \"$user\", public, extensions;\n\ngrant usage on schema public to anon, authenticated, service_role;\ngrant all on all tables in schema public to anon, authenticated, service_role;\ngrant all on all sequences in schema public to anon, authenticated, service_role;\ngrant execute on all functions in schema public to anon, authenticated, service_role;\n\nalter default privileges in schema public\n grant all on tables to anon, authenticated, service_role;\nalter default privileges in schema public\n grant all on sequences to anon, authenticated, service_role;\nalter default privileges in schema public\n grant execute on functions to anon, authenticated, service_role;\n\n-- \u2500\u2500 Auth schema (GoTrue-compatible subset) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists auth;\n\ncreate table if not exists auth.users (\n instance_id uuid default '00000000-0000-0000-0000-000000000000',\n id uuid primary key default gen_random_uuid(),\n aud text default 'authenticated',\n role text default 'authenticated',\n email text unique,\n encrypted_password text,\n email_confirmed_at timestamptz,\n invited_at timestamptz,\n confirmation_token text default '',\n confirmation_sent_at timestamptz,\n recovery_token text default '',\n recovery_sent_at timestamptz,\n email_change_token_new text default '',\n email_change text default '',\n email_change_sent_at timestamptz,\n email_change_token_current text default '',\n email_change_confirm_status smallint default 0,\n last_sign_in_at timestamptz,\n raw_app_meta_data jsonb default '{}'::jsonb,\n raw_user_meta_data jsonb default '{}'::jsonb,\n is_super_admin boolean default false,\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n phone text unique,\n phone_confirmed_at timestamptz,\n phone_change text default '',\n phone_change_token text default '',\n phone_change_sent_at timestamptz,\n reauthentication_token text default '',\n reauthentication_sent_at timestamptz,\n banned_until timestamptz,\n deleted_at timestamptz,\n is_anonymous boolean default false\n);\n\ncreate table if not exists auth.refresh_tokens (\n id bigint generated by default as identity primary key,\n token text unique not null,\n user_id uuid not null references auth.users(id) on delete cascade,\n parent text,\n session_id uuid,\n revoked boolean default false,\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate index if not exists refresh_tokens_user_id_idx on auth.refresh_tokens(user_id);\n\ncreate table if not exists auth.one_time_tokens (\n id uuid primary key default gen_random_uuid(),\n user_id uuid references auth.users(id) on delete cascade,\n email text not null,\n token_type text not null, -- otp | magiclink | recovery\n token text not null,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists auth.identities (\n id uuid primary key default gen_random_uuid(),\n user_id uuid not null references auth.users(id) on delete cascade,\n provider text not null,\n provider_id text not null,\n identity_data jsonb default '{}'::jsonb,\n last_sign_in_at timestamptz default now(),\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n unique (provider, provider_id)\n);\n\n-- OAuth / PKCE flow state, bridging /authorize \u2192 provider \u2192 /callback \u2192 exchange\ncreate table if not exists auth.flow_state (\n id uuid primary key default gen_random_uuid(),\n provider text not null,\n provider_state text not null unique,\n redirect_to text,\n code_challenge text,\n code_challenge_method text,\n auth_code text unique,\n user_id uuid references auth.users(id) on delete cascade,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ncreate table if not exists auth.mfa_factors (\n id uuid primary key default gen_random_uuid(),\n user_id uuid not null references auth.users(id) on delete cascade,\n friendly_name text,\n factor_type text not null default 'totp',\n status text not null default 'unverified', -- unverified | verified\n secret text,\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists auth.mfa_challenges (\n id uuid primary key default gen_random_uuid(),\n factor_id uuid not null references auth.mfa_factors(id) on delete cascade,\n verified_at timestamptz,\n created_at timestamptz default now(),\n expires_at timestamptz not null\n);\n\ngrant usage on schema auth to anon, authenticated, service_role;\n\ncreate or replace function auth.jwt() returns jsonb\nlanguage sql stable as $$\n select coalesce(\n nullif(current_setting('request.jwt.claims', true), ''),\n '{}'\n )::jsonb\n$$;\n\ncreate or replace function auth.uid() returns uuid\nlanguage sql stable as $$\n select nullif(auth.jwt() ->> 'sub', '')::uuid\n$$;\n\ncreate or replace function auth.role() returns text\nlanguage sql stable as $$\n select coalesce(auth.jwt() ->> 'role', 'anon')\n$$;\n\ncreate or replace function auth.email() returns text\nlanguage sql stable as $$\n select auth.jwt() ->> 'email'\n$$;\n\ngrant execute on function auth.jwt(), auth.uid(), auth.role(), auth.email()\n to anon, authenticated, service_role;\n\n-- \u2500\u2500 Storage schema (storage-api-compatible subset) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists storage;\n\ncreate table if not exists storage.buckets (\n id text primary key,\n name text not null unique,\n owner uuid,\n public boolean default false,\n file_size_limit bigint,\n allowed_mime_types text[],\n created_at timestamptz default now(),\n updated_at timestamptz default now()\n);\n\ncreate table if not exists storage.objects (\n id uuid primary key default gen_random_uuid(),\n bucket_id text not null references storage.buckets(id),\n name text not null,\n owner uuid,\n version text,\n metadata jsonb default '{}'::jsonb,\n created_at timestamptz default now(),\n updated_at timestamptz default now(),\n last_accessed_at timestamptz default now(),\n unique (bucket_id, name)\n);\n\ncreate index if not exists objects_bucket_name_idx on storage.objects(bucket_id, name);\n\ngrant usage on schema storage to anon, authenticated, service_role;\ngrant select on storage.buckets to anon, authenticated, service_role;\ngrant all on storage.buckets to service_role;\ngrant all on storage.objects to anon, authenticated, service_role;\n\ncreate or replace function storage.foldername(name text) returns text[]\nlanguage sql immutable as $$\n select (string_to_array(name, '/'))[1 : array_length(string_to_array(name, '/'), 1) - 1]\n$$;\n\ncreate or replace function storage.filename(name text) returns text\nlanguage sql immutable as $$\n select (string_to_array(name, '/'))[array_length(string_to_array(name, '/'), 1)]\n$$;\n\ncreate or replace function storage.extension(name text) returns text\nlanguage sql immutable as $$\n select reverse(split_part(reverse(storage.filename(name)), '.', 1))\n$$;\n\nalter table storage.objects enable row level security;\n\n-- Dev-friendly default policies. Replace them in your migrations to lock down.\ndo $$\nbegin\n if not exists (select from pg_policies where schemaname = 'storage' and tablename = 'objects' and policyname = 'tinbase_authenticated_all') then\n create policy tinbase_authenticated_all on storage.objects\n for all to authenticated using (true) with check (true);\n end if;\n if not exists (select from pg_policies where schemaname = 'storage' and tablename = 'objects' and policyname = 'tinbase_public_read') then\n create policy tinbase_public_read on storage.objects\n for select to anon\n using (bucket_id in (select id from storage.buckets where public));\n end if;\nend $$;\n\n-- \u2500\u2500 Migration bookkeeping (same table the Supabase CLI uses) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists supabase_migrations;\n\ncreate table if not exists supabase_migrations.schema_migrations (\n version text primary key,\n name text,\n statements text[],\n applied_at timestamptz default now()\n);\n\ncreate table if not exists supabase_migrations.seed_files (\n path text primary key,\n hash text,\n applied_at timestamptz default now()\n);\n\n-- \u2500\u2500 Realtime CDC plumbing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\ncreate schema if not exists tinbase;\n\ncreate or replace function tinbase.cdc_notify() returns trigger\nlanguage plpgsql security definer as $$\ndeclare\n payload text;\nbegin\n payload := json_build_object(\n 'schema', TG_TABLE_SCHEMA,\n 'table', TG_TABLE_NAME,\n 'type', TG_OP,\n 'commit_timestamp', to_char(now() at time zone 'utc', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'),\n 'record', case when TG_OP in ('INSERT', 'UPDATE') then row_to_json(NEW) else null end,\n 'old_record', case when TG_OP in ('UPDATE', 'DELETE') then row_to_json(OLD) else null end\n )::text;\n -- pg_notify payloads are capped at ~8kB; degrade like Supabase does.\n if octet_length(payload) > 7500 then\n payload := json_build_object(\n 'schema', TG_TABLE_SCHEMA,\n 'table', TG_TABLE_NAME,\n 'type', TG_OP,\n 'commit_timestamp', to_char(now() at time zone 'utc', 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'),\n 'record', null,\n 'old_record', null,\n 'errors', json_build_array('Payload too large')\n )::text;\n end if;\n perform pg_notify('tinbase_cdc', payload);\n return coalesce(NEW, OLD);\nend $$;\n\n-- \u2500\u2500 Realtime Authorization + broadcast-from-database \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- Mirrors Supabase Realtime: developers write RLS policies on\n-- realtime.messages using realtime.topic(); a SELECT policy grants a private\n-- channel's subscribers the right to *receive*, an INSERT policy the right to\n-- *broadcast*. realtime.send() lets the database push a broadcast to a topic.\ncreate schema if not exists realtime;\n\ncreate table if not exists realtime.messages (\n id uuid not null default gen_random_uuid(),\n topic text not null,\n extension text not null,\n event text,\n payload jsonb,\n private boolean default false,\n inserted_at timestamptz not null default now(),\n updated_at timestamptz not null default now(),\n primary key (id)\n);\nalter table realtime.messages enable row level security;\n\ngrant usage on schema realtime to anon, authenticated, service_role;\ngrant all on realtime.messages to anon, authenticated, service_role;\n\n-- the topic currently being authorized/broadcast (set per operation)\ncreate or replace function realtime.topic() returns text\n language sql stable as $$ select nullif(current_setting('realtime.topic', true), '') $$;\n\n-- push a broadcast message to all subscribers of <topic> from SQL / triggers.\n-- Delivered over the websocket by the in-process realtime engine, which listens\n-- on the 'tinbase_realtime_broadcast' channel.\ncreate or replace function realtime.send(payload jsonb, event text, topic text, private boolean default true)\n returns void language plpgsql security definer as $$\nbegin\n perform pg_notify(\n 'tinbase_realtime_broadcast',\n json_build_object('topic', topic, 'event', event, 'payload', payload, 'private', private)::text\n );\nexception when others then\n -- never let a notify failure abort the caller's transaction\n null;\nend $$;\n\ngrant execute on function realtime.topic() to anon, authenticated, service_role;\ngrant execute on function realtime.send(jsonb, text, text, boolean) to anon, authenticated, service_role;\n";