planche 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/app/assets/{tQiLT0zv.js → 7jD5h8Yx.js} +3 -1
  2. package/app/assets/{C4QyqQoa.js → 7jG9Xw-H.js} +1 -1
  3. package/app/assets/{Br4335vw.js → 84VwJAQi.js} +1 -1
  4. package/app/assets/9gOj-Ty3.js +1 -0
  5. package/app/assets/{1p4z4GHT.js → B4S-lOKS.js} +2 -2
  6. package/app/assets/{BniymiMs.js → BDtsGuIR.js} +3 -1
  7. package/app/assets/{DFeHpd8Y.js → BEH9Jqkv.js} +1 -1
  8. package/app/assets/{CCQ6oQgi.js → BGvsBpIS.js} +1 -1
  9. package/app/assets/BMBWoD5w.js +1 -0
  10. package/app/assets/{BgvMpmFj.js → BMFLhX-x.js} +1 -1
  11. package/app/assets/{DDeeBXtX.js → BNB62Dfu.js} +1 -1
  12. package/app/assets/{D3_CBO8-.js → BPPUDpI0.js} +1 -1
  13. package/app/assets/{Bvu_eiyU.js → BPmMKRmE.js} +3 -3
  14. package/app/assets/{CP2U-viH.js → BQ1Rcyw6.js} +1 -1
  15. package/app/assets/{CWota0kb.js → BSziALTN.js} +1 -1
  16. package/app/assets/{f6MhVR01.js → BTaXXwBP.js} +1 -1
  17. package/app/assets/{BhPOHTk7.js → BbOETtQZ.js} +2 -2
  18. package/app/assets/{CIIDOG9Y.js → Bbx7_Uyd.js} +1 -1
  19. package/app/assets/{CkIm3SJy.js → BhX9zWzC.js} +1 -1
  20. package/app/assets/{C5Yv1gpQ.js → BixvbqFe.js} +1 -1
  21. package/app/assets/BjwrN_ch.js +11 -0
  22. package/app/assets/{BHe42P9W.js → BkXrfAoR.js} +1 -1
  23. package/app/assets/{BvEGx3Si.js → BnJGrP6V.js} +2 -2
  24. package/app/assets/{BnI4D_rY.js → BrVnzO7b.js} +1 -1
  25. package/app/assets/{BVwlLPu6.js → ByKF67UY.js} +1 -1
  26. package/app/assets/{DKf3DkR6.js → C1kpKIsO.js} +1 -1
  27. package/app/assets/{DkqeIq13.js → C6712dxU.js} +1 -1
  28. package/app/assets/{B_1rFijd.js → C77ZEZfM.js} +1 -1
  29. package/app/assets/{B8zpsP_u.js → CExE8dKz.js} +209 -209
  30. package/app/assets/{CVZ3Bw6o.js → CFUkTo-F.js} +1 -1
  31. package/app/assets/{BMGo7X_N.js → CFu5QMhX.js} +3 -1
  32. package/app/assets/{DnRoHgQS.js → CHx7zgT8.js} +1 -1
  33. package/app/assets/{BsYZ-U7K.js → CRnmOOqq.js} +1 -1
  34. package/app/assets/{CDfSdkjY.js → CTnwm-29.js} +1 -1
  35. package/app/assets/{DO0W14Ho.js → CaU3pCK6.js} +1 -1
  36. package/app/assets/{BYWnKgIY.js → CoZCOAph.js} +1 -1
  37. package/app/assets/{6NUleTnS.js → CrhJJH3f.js} +1 -1
  38. package/app/assets/{DDjCZLb0.js → CrlnxAGW.js} +1 -1
  39. package/app/assets/{Dy6-E_uL.js → D0Ya12SQ.js} +1 -1
  40. package/app/assets/{BiyRPyXV.js → D1kyupCL.js} +1 -1
  41. package/app/assets/{C3w9xAkk.js → D3lUezEb.js} +1 -1
  42. package/app/assets/{DeNEO8HN.js → D9QeXBOk.js} +1 -1
  43. package/app/assets/{DPnYgSl3.js → DCHRj2vY.js} +1 -1
  44. package/app/assets/{CwsH45Wr.js → DF7EZh_S.js} +2 -2
  45. package/app/assets/{DyQ8cEic.js → DHZOxCSJ.js} +1 -1
  46. package/app/assets/{Cdop6jK1.js → DNHPk-9r.js} +3 -1
  47. package/app/assets/{Q6DQerac.js → DPyLA6Dl.js} +1 -1
  48. package/app/assets/{Bkq2aetC.js → DTkqO0Em.js} +1 -1
  49. package/app/assets/{FAouNaq9.js → DaBfnZOJ.js} +1 -1
  50. package/app/assets/{D6oRJsd8.js → Djxg54qH.js} +1 -1
  51. package/app/assets/{ClytWHSf.js → Do7KpDxk.js} +1 -1
  52. package/app/assets/{CnoXRrek.js → DpEN2jyA.js} +1 -1
  53. package/app/assets/{C2S2GXdP.js → DzdX4vRD.js} +1 -1
  54. package/app/assets/{D4l4mWtD.js → G06qjCej.js} +1 -1
  55. package/app/assets/{ANL7Od0T.js → W7D4Svcn.js} +1 -1
  56. package/app/assets/{BJFk0Zzq.js → aIFwnVFr.js} +3 -1
  57. package/app/assets/{UX-csQNt.js → kXDKfUfE.js} +3 -1
  58. package/app/assets/{B9NCreMu.js → qRIRkBN0.js} +1 -1
  59. package/app/assets/{DY1k-USH.js → tJkeLYCp.js} +1 -1
  60. package/app/assets/w46wk7KI.css +2 -0
  61. package/app/index.html +8 -8
  62. package/package.json +1 -1
  63. package/app/assets/B9DHeSQH.js +0 -1
  64. package/app/assets/Bgu3teFB.js +0 -11
  65. package/app/assets/CWb3a6Xp.js +0 -1
  66. package/app/assets/CqTgU2vp.css +0 -2
package/app/index.html CHANGED
@@ -50,12 +50,12 @@
50
50
  "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" }
51
51
  }
52
52
  </script>
53
- <script type="module" crossorigin src="/assets/B8zpsP_u.js"></script>
53
+ <script type="module" crossorigin src="/assets/CExE8dKz.js"></script>
54
54
  <link rel="modulepreload" crossorigin href="/assets/hePW80VL.js">
55
55
  <link rel="modulepreload" crossorigin href="/assets/CYz610vE.js">
56
56
  <link rel="modulepreload" crossorigin href="/assets/Cu_sGzNJ.js">
57
57
  <link rel="modulepreload" crossorigin href="/assets/CiL8zoYm.js">
58
- <link rel="modulepreload" crossorigin href="/assets/BniymiMs.js">
58
+ <link rel="modulepreload" crossorigin href="/assets/BDtsGuIR.js">
59
59
  <link rel="modulepreload" crossorigin href="/assets/DzRyVlxz.js">
60
60
  <link rel="modulepreload" crossorigin href="/assets/BGuDcBB_.js">
61
61
  <link rel="modulepreload" crossorigin href="/assets/D8dVzi6I.js">
@@ -64,18 +64,18 @@
64
64
  <link rel="modulepreload" crossorigin href="/assets/DU-Eln5x.js">
65
65
  <link rel="modulepreload" crossorigin href="/assets/S7HbowYz.js">
66
66
  <link rel="modulepreload" crossorigin href="/assets/Bit0Kfog.js">
67
- <link rel="modulepreload" crossorigin href="/assets/Bgu3teFB.js">
67
+ <link rel="modulepreload" crossorigin href="/assets/BjwrN_ch.js">
68
68
  <link rel="modulepreload" crossorigin href="/assets/D8_hwGjG.js">
69
69
  <link rel="modulepreload" crossorigin href="/assets/C1gqjEN3.js">
70
- <link rel="modulepreload" crossorigin href="/assets/BHe42P9W.js">
70
+ <link rel="modulepreload" crossorigin href="/assets/BkXrfAoR.js">
71
71
  <link rel="modulepreload" crossorigin href="/assets/BRZhVXRC.js">
72
72
  <link rel="modulepreload" crossorigin href="/assets/DAFA-E1-.js">
73
73
  <link rel="modulepreload" crossorigin href="/assets/B9dhM8vw.js">
74
- <link rel="modulepreload" crossorigin href="/assets/Q6DQerac.js">
75
- <link rel="modulepreload" crossorigin href="/assets/BvEGx3Si.js">
76
- <link rel="modulepreload" crossorigin href="/assets/B9DHeSQH.js">
74
+ <link rel="modulepreload" crossorigin href="/assets/DPyLA6Dl.js">
75
+ <link rel="modulepreload" crossorigin href="/assets/BnJGrP6V.js">
76
+ <link rel="modulepreload" crossorigin href="/assets/9gOj-Ty3.js">
77
77
  <link rel="modulepreload" crossorigin href="/assets/Bs5VSn0X.js">
78
- <link rel="stylesheet" crossorigin href="/assets/CqTgU2vp.css">
78
+ <link rel="stylesheet" crossorigin href="/assets/w46wk7KI.css">
79
79
  </head>
80
80
  <body>
81
81
  <div id="boot">Loading…</div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "planche",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Local agent for Planche — lets the browser-based Planche database client reach MySQL/MariaDB/PostgreSQL/SQLite/SQL Server/Oracle/Neon/Supabase/Cloudflare D1 databases, Redis, Elasticsearch/OpenSearch and local Durable Object storage from your machine.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://planche.dev",
@@ -1 +0,0 @@
1
- import{c as e}from"./S7HbowYz.js";import{x as t}from"./Bgu3teFB.js";function n(n){t(n),e(n)}export{n as t};
@@ -1,11 +0,0 @@
1
- import{a as e}from"./BniymiMs.js";import{t}from"./Nro86Y63.js";import{t as n}from"./Bit0Kfog.js";var r=`http://127.0.0.1:8888`,i=n(`tunnelAgent`,()=>({url:null,token:null}));function a(e){i.url=e.url?.replace(/\/+$/,``)||null,i.token=e.token?.trim()||null}var o=new Set([`127.0.0.1`,`localhost`,`[::1]`,`::1`]);function s(e){try{let t=new URL(e);return(t.protocol===`http:`||t.protocol===`https:`)&&o.has(t.hostname)}catch{return!1}}function c(e){try{return typeof window<`u`&&new URL(e).origin===window.location.origin}catch{return!1}}function l(e){return s(e)||c(e)}function u(){return i.url!==null&&i.url!==`/api`&&!l(i.url)}function d(){return i.url??r}function f(){let t=d();return t===`/api`?e.t(`services.agent.devProxyUrl`,{url:`http://localhost:8888`}):t}async function p(){let t=f(),n;try{let e={};i.token&&(e.Authorization=`Bearer ${i.token}`),n=await(await fetch(`${d()}/health`,{cache:`no-store`,headers:e})).json()}catch(e){return{state:`offline`,url:t,message:e instanceof Error?e.message:String(e)}}return n.name!==`planche`||typeof n.version!=`string`||!/^[\w.+-]{1,32}$/.test(n.version)?{state:`offline`,url:t,message:e.t(`services.agent.notPlanche`)}:n.protocolVersion===2?n.authorized===!1||i.token===null&&n.authorized===void 0?{state:`unauthorized`,url:t,version:n.version}:{state:`online`,url:t,version:n.version,activeConnections:n.activeConnections??0,...n.gateway?{gateway:n.gateway}:{}}:{state:`outdated`,url:t,version:n.version,protocolVersion:n.protocolVersion??0,install:n.install===`standalone`?`standalone`:`npx`}}async function m(){let t=await fetch(`${d()}/profiles`,{cache:`no-store`,headers:M()}),n=await t.json().catch(()=>null);if(!t.ok||!n||n.success!==!0)throw new N(n?.message??e.t(`services.agent.httpError`,{status:t.status,statusText:t.statusText}),t.status);return n}async function h(){return E(`/ai/config`,{method:`GET`})}async function g(e){return E(`/ai/config`,{method:`PUT`,body:JSON.stringify(e)})}async function _(){return E(`/ai/config`,{method:`DELETE`})}async function v(){try{return(await(await fetch(`${d()}/health`,{cache:`no-store`,headers:M()})).json()).ai?.tools===!0}catch{return!1}}async function y(e){await E(`/bridge/tools`,{method:`POST`,body:JSON.stringify({tools:e})})}async function b(e,t,n){await E(`/bridge/result`,{method:`POST`,body:JSON.stringify({id:e,content:t,isError:n})})}async function x(t,n){let r=new AbortController,i=await fetch(`${d()}/bridge/events`,{headers:M(),signal:r.signal,cache:`no-store`});if(!i.ok||!i.body)throw new N(e.t(`services.agent.httpError`,{status:i.status,statusText:i.statusText}),i.status);return(async()=>{let e=i.body.getReader(),r=new TextDecoder,a=``;try{for(;;){let{done:n,value:i}=await e.read();if(n)break;a+=r.decode(i,{stream:!0});let o=a.indexOf(`
2
-
3
- `);for(;o!==-1;){let e=a.slice(0,o);a=a.slice(o+2);for(let n of e.split(`
4
- `))n.startsWith(`data: `)&&t(n.slice(6));o=a.indexOf(`
5
-
6
- `)}}}catch{}n()})(),()=>r.abort()}async function S(t,n,r){let i=new AbortController,a=await fetch(`${d()}/stream`,{method:`POST`,headers:M(k.get(t.connectionId)),body:JSON.stringify(t),signal:i.signal,cache:`no-store`});if(!a.ok||!a.body)throw new N((await a.json().catch(()=>null))?.message??e.t(`services.agent.httpError`,{status:a.status,statusText:a.statusText}),a.status);return(async()=>{let e=a.body.getReader(),t=new TextDecoder,i=``;try{for(;;){let{done:r,value:a}=await e.read();if(r)break;i+=t.decode(a,{stream:!0});let o=i.indexOf(`
7
-
8
- `);for(;o!==-1;){let e=i.slice(0,o);i=i.slice(o+2);for(let t of e.split(`
9
- `))if(t.startsWith(`data: `))try{n(JSON.parse(t.slice(6)))}catch{}o=i.indexOf(`
10
-
11
- `)}}}catch{}r()})(),()=>i.abort()}async function C(){return E(`/mcp/setup`,{method:`POST`})}async function w(){await E(`/mcp/setup`,{method:`DELETE`})}async function T(e,t){return E(`/ai/run`,{method:`POST`,body:JSON.stringify(e),signal:t})}async function E(t,n){let r=await fetch(`${d()}${t}`,{cache:`no-store`,headers:M(),...n}),i=await r.json().catch(()=>null);if(!r.ok||!i||i.success!==!0)throw new N(i?.message??e.t(`services.agent.httpError`,{status:r.status,statusText:r.statusText}),r.status);return i}function D(e){let t=e.ssh;if(t?.enabled)return{host:t.host,port:t.port,user:t.user,auth:t.auth,password:t.auth===`password`?t.password??``:void 0,privateKey:t.auth===`key`?t.privateKey:void 0,passphrase:t.auth===`key`&&t.passphrase||void 0}}function O(e){return e.gatewayProfile?{profile:e.gatewayProfile}:e.dbms===`sqlite`?{driver:`sqlite`,file:e.file??``,createIfMissing:e.createIfMissing??!1,readonly:e.readOnly??!1}:e.dbms===`do`?{driver:`do`,devUrl:e.devUrl??``}:e.dbms===`d1`?e.devUrl?{driver:`d1`,devUrl:e.devUrl,databaseId:e.databaseId||void 0}:{driver:`d1`,accountId:e.accountId??``,databaseId:e.databaseId??``,apiToken:e.pass}:e.dbms===`postgres`?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:D(e)}:t.has(e.dbms)?{driver:`postgres`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`postgres`,ssl:!0,sslVerify:e.dbms===`neon`}:e.dbms===`mssql`?{driver:`mssql`,host:e.host,port:e.port,user:e.user,password:e.pass,database:e.database||`master`,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:D(e)}:e.dbms===`redis`?{driver:`redis`,host:e.host,port:e.port,user:e.user||void 0,password:e.pass,db:Number(/^(?:db)?(\d+)$/.exec(e.database??``)?.[1]??0),ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:D(e)}:e.dbms===`elasticsearch`||e.dbms===`opensearch`?{driver:`elasticsearch`,host:e.host,port:e.port,user:e.user||void 0,password:e.pass,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:D(e)}:e.dbms===`oracle`?{driver:`oracle`,host:e.host,port:e.port,user:e.user,password:e.pass,serviceName:e.database||`FREEPDB1`,ssh:D(e)}:{driver:`mysql`,host:e.host,port:e.port,user:e.user,password:e.pass,charset:e.charset===`utf8`?`utf8mb4`:e.charset,ssl:e.ssl??!1,sslVerify:e.sslVerify??!1,ssh:D(e)}}var k=n(`tunnelAuthTokens`,()=>new Map);function A(e,t){let n=t?.trim();n?k.set(e,n):k.delete(e)}function j(e){return e?.trim()||i.token||void 0}function M(e){let t={"Content-Type":`application/json`},n=j(e);return n&&(t.Authorization=`Bearer ${n}`),t}var N=class extends Error{status;body;constructor(e,t,n=null){super(e),this.status=t,this.body=n}};function P(e){if(!(e instanceof N)||e.status!==409)return null;let t=e.body,n=t?.hostKey;if(t?.code!==`host-key-unknown`||!n)return null;let r=typeof n.host==`string`&&/^[A-Za-z0-9._:[\]-]{1,253}$/.test(n.host)?n.host:null,i=typeof n.type==`string`&&/^[\w.@-]{1,64}$/.test(n.type)?n.type:null,a=typeof n.fingerprint==`string`&&/^SHA256:[A-Za-z0-9+/]{43}$/.test(n.fingerprint)?n.fingerprint:null,o=Number.isInteger(n.port)&&n.port>0&&n.port<65536?n.port:null;return r&&i&&a&&o?{host:r,port:o,type:i,fingerprint:a}:null}async function F(t,n){let r=await fetch(`${t.replace(/\/+$/,``)}/pair`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:n})}),i=await r.json().catch(()=>null);if(!r.ok||!i?.success||typeof i.token!=`string`)throw Error(i?.message??e.t(`services.agent.httpError`,{status:r.status,statusText:r.statusText}));return i.token}async function I(t,n,r){let i;try{i=await fetch(`${d()}${t}`,{method:`POST`,headers:M(r),body:JSON.stringify(n)})}catch(t){throw Error(e.t(`services.agent.unreachable`,{url:f(),message:t instanceof Error?t.message:String(t)}))}let a=null;try{a=await i.json()}catch{a=null}if(!i.ok)throw new N(a?.message??e.t(`services.agent.httpError`,{status:i.status,statusText:i.statusText}),i.status,a);if(!a)throw Error(e.t(`services.agent.emptyResponse`));return a}async function L(t,n){try{return await n()}catch(n){throw n instanceof N&&n.status===400&&`driver`in t&&/^Unsupported driver/.test(n.message)?new N(e.t(`services.agent.driverUnsupported`,{driver:t.driver}),400):n}}async function R(e,t){let n=await L(e,()=>I(`/connect`,e,t));return n.success&&n.connectionId&&(A(n.connectionId,j(t)),W()),n}async function z(e){try{let t=await I(`/cancel`,{connectionId:e},k.get(e));return t.cancelled?t.abandoned?`abandoned`:`cancelled`:`unsupported`}catch(e){return e instanceof N&&e.status===404?`agent-outdated`:`failed`}}var B=new Set;async function V(e,t,n){let r=d();if(!B.has(r))try{return(await I(`/batch`,{connectionId:e,statements:t,database:n},k.get(e))).results}catch(e){if(!(e instanceof N&&e.status===404&&!/Connection not found/.test(e.message)))throw e;B.add(r)}let i=[];for(let r of t){let t=await U(e,r,n);i.push(t.success?{...t,success:!0}:{success:!1,message:t.message??`Query failed`})}return i}async function H(e,t,n){let r=performance.now(),i=await I(`/query`,{connectionId:e,sql:t,database:n},k.get(e));return i.execTime||=Math.round(performance.now()-r),i}async function U(e,t,n){let r=performance.now();try{return await H(e,t,n)}catch(e){return{success:!1,fields:[],records:[],affectedRows:0,insertId:0,isResultQuery:!1,execTime:Math.round(performance.now()-r),message:e instanceof Error?e.message:String(e)}}}function W(){if(typeof window>`u`)return;let e=n(`tunnelPageHide`,()=>({done:!1}));e.done||(e.done=!0,window.addEventListener(`pagehide`,()=>{for(let[e,t]of k)fetch(`${d()}/disconnect`,{method:`POST`,headers:M(t),body:JSON.stringify({connectionId:e}),keepalive:!0}).catch(()=>void 0)}))}async function G(e){try{await I(`/disconnect`,{connectionId:e},k.get(e))}finally{k.delete(e)}}async function K(e,t){return L(e,()=>I(`/test-connection`,e,t))}var q=0;function J(e){q>=3||(async()=>{try{(await fetch(`${d()}/usage`,{method:`POST`,headers:M(),body:JSON.stringify({feature:e})})).ok?q=0:q+=1}catch{q+=1}})()}export{y as C,O as D,K as E,g as S,T,x as _,p as a,b,_ as c,H as d,h as f,l as g,P as h,z as i,G as l,C as m,u as n,a as o,m as p,v as r,R as s,N as t,V as u,S as v,w,J as x,F as y};
@@ -1 +0,0 @@
1
- import{r as e}from"./hePW80VL.js";import{p as t}from"./CYz610vE.js";import{a as n,i as r,t as i,u as a}from"./CiL8zoYm.js";import{i as o,r as s}from"./Cu_sGzNJ.js";import{C as c,D as l,O as u,T as d,a as f,i as p,n as m,o as ee,t as h}from"./DzRyVlxz.js";import{a as g,i as _,n as v,r as y,t as b}from"./D4l4mWtD.js";import{r as x,t as S}from"./Nro86Y63.js";import{A as C,f as w,j as T,t as E,w as D}from"./S7HbowYz.js";import{D as O,a as te,h as k,p as ne}from"./Bgu3teFB.js";import{n as A,t as re}from"./D8_hwGjG.js";import{n as ie}from"./C1gqjEN3.js";import{C as ae,_ as oe,f as j,i as se,r as ce,u as M}from"./BHe42P9W.js";import{$t as N,C as P,H as le,Kt as ue,N as de,Ot as fe,P as F,Qt as I,S as L,T as R,a as pe,b as me,c as z,en as he,gt as ge,i as _e,l as B,n as ve,nn as ye,o as V,r as be,rn as H,s as U,st as xe,tn as Se,u as W,w as Ce,x as we,z as Te}from"./B8zpsP_u.js";import{t as Ee}from"./CnYBZPf9.js";var G=e(t(),1),K=s(),De=Object.defineProperty,q=(e,t)=>De(e,`name`,{value:t,configurable:!0}),J=`DropdownMenu`,[Oe,ke]=u(J,[H]),Y=H(),[Ae,je]=Oe(J),Me=q(e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,l=Y(t),u=G.useRef(null),[f,p]=d({prop:i,defaultProp:a??!1,onChange:o,caller:J});return(0,K.jsx)(Ae,{scope:t,triggerId:c(),triggerRef:u,contentId:c(),open:f,onOpenChange:p,onOpenToggle:G.useCallback(()=>p(e=>!e),[p]),modal:s,children:(0,K.jsx)(ye,{...l,open:f,onOpenChange:p,dir:r,modal:s,children:n})})},`DropdownMenu`),Ne=`DropdownMenuTrigger`,Pe=G.forwardRef(q(function(e,t){let{__scopeDropdownMenu:r,disabled:i=!1,...o}=e,s=je(Ne,r),c=Y(r),u=a(t,s.triggerRef);return(0,K.jsx)(I,{asChild:!0,...c,children:(0,K.jsx)(n.button,{type:`button`,id:s.triggerId,"aria-haspopup":`menu`,"aria-expanded":s.open,"aria-controls":s.open?s.contentId:void 0,"data-state":s.open?`open`:`closed`,"data-disabled":i?``:void 0,disabled:i,...o,ref:u,onPointerDown:l(e.onPointerDown,e=>{!i&&e.button===0&&e.ctrlKey===!1&&(s.onOpenToggle(),s.open||e.preventDefault())}),onKeyDown:l(e.onKeyDown,e=>{i||([`Enter`,` `].includes(e.key)&&s.onOpenToggle(),e.key===`ArrowDown`&&s.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})},`DropdownMenuTrigger`)),Fe=q(e=>{let{__scopeDropdownMenu:t,...n}=e,r=Y(t);return(0,K.jsx)(Se,{...r,...n})},`DropdownMenuPortal`),Ie=`DropdownMenuContent`,Le=G.forwardRef(q(function(e,t){let{__scopeDropdownMenu:n,...r}=e,i=je(Ie,n),a=Y(n),o=G.useRef(!1);return(0,K.jsx)(N,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:l(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:l(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})},`DropdownMenuContent`)),Re=G.forwardRef(q(function(e,t){let{__scopeDropdownMenu:n,...r}=e,i=Y(n);return(0,K.jsx)(he,{...i,...r,ref:t})},`DropdownMenuItem`)),ze=Me,Be=Pe,Ve=Fe,He=Le,Ue=Re,We=new Set([`postgres:`,`postgresql:`]);function Ge(e){let t=e.trim().replace(/^psql\s+(['"])?/,``).replace(/['"]$/,``);if(!/^postgres(ql)?:\/\//i.test(t))return null;let n;try{n=new URL(t)}catch{return null}if(!We.has(n.protocol.toLowerCase())||!n.hostname)return null;let r=e=>{try{return decodeURIComponent(e)}catch{return e}},i={host:n.hostname};n.port&&(i.port=Number(n.port)),n.username&&(i.user=r(n.username)),n.password&&(i.pass=r(n.password));let a=r(n.pathname.replace(/^\//,``));return a&&(i.database=a),i}var Ke=new Set([`localhost`,`127.0.0.1`,`[::1]`,`::1`,`0.0.0.0`]);async function qe(e,t){let n;try{let t=new URL(e);if(!Ke.has(t.hostname.toLowerCase()))return[];n=t.origin}catch{return[]}try{let e=await fetch(`${n}/cdn-cgi/local/explorer/api/d1/database`,{signal:t});if(!e.ok)return[];let r=await e.json(),i=new Map;for(let e of r.result??[])e.uuid&&i.set(e.uuid,{name:e.name??e.uuid,id:e.uuid});return[...i.values()]}catch{return[]}}var Je=[`utf8`,`utf8mb4`,`latin1`,`ascii`,`euckr`,`sjis`,`big5`],Ye={enabled:!1,host:``,port:22,user:``,auth:`key`};function X({label:e,htmlFor:t,children:n}){return(0,K.jsxs)(`div`,{className:`grid grid-cols-[120px_minmax(0,1fr)] items-center gap-2`,children:[(0,K.jsx)(z,{htmlFor:t,children:e}),n]})}function Xe({value:e,onChange:t}){let{t:n}=o();function r(n,r){t({...e,[n]:r})}let[a,s]=(0,G.useState)([]),c=e.dbms===`d1`?e.devUrl??``:``;(0,G.useEffect)(()=>{if(!c){s([]);return}let e=new AbortController,t=setTimeout(()=>{qe(c,e.signal).then(s)},300);return()=>{clearTimeout(t),e.abort()}},[c]);let l=e.dbms===`sqlite`,u=e.transport??`browser`,d=l&&u===`browser`,f=S.has(e.dbms),p=e.dbms===`d1`,m=e.dbms===`do`,ee=C.find(t=>t.id===e.dbms)?.capabilities,h=e.ssh??Ye,[w,E]=(0,G.useState)(``),D=w.trim()===``?`empty`:Ge(w)?`applied`:`invalid`,O=e.dbms===`supabase`&&e.port===6543;function te(n){E(n);let r=Ge(n);r&&t({...e,host:r.host??e.host,port:r.port??C.find(t=>t.id===e.dbms)?.defaultPort??e.port,user:r.user??e.user,pass:r.pass??e.pass,database:r.database??e.database})}function k(n){t({...e,ssh:{...h,...n}})}async function ne(e){e&&k({privateKey:await e.text(),privateKeyName:e.name})}return(0,K.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,K.jsx)(X,{label:n(`connection.form.hostName`),htmlFor:`conn-hostName`,children:(0,K.jsx)(B,{id:`conn-hostName`,placeholder:n(`connection.form.hostNamePlaceholder`),value:e.hostName,onChange:e=>r(`hostName`,e.target.value)})}),(0,K.jsx)(X,{label:n(`connection.form.dataSource`),children:(0,K.jsxs)(b,{value:e.dbms,onValueChange:n=>{let r=C.find(e=>e.id===n);if(!r)return;let i=r.id,a=S.has(i)||i===`d1`||i===`do`;E(``),t({...e,dbms:i,transactionMode:r.capabilities.transactions?e.transactionMode:`auto`,port:r.defaultPort??e.port,host:a&&e.host===`localhost`?``:!a&&e.host===``?`localhost`:e.host,user:a||f||p||m||e.user===U(e.dbms)?U(i):e.user,devUrl:i===`do`?e.devUrl||`http://localhost:8787`:e.devUrl,database:e.database&&!a&&!f&&!p&&!m?e.database:V(i)??e.database})},children:[(0,K.jsx)(_,{id:`conn-dbms`,className:`w-full`,children:(0,K.jsx)(g,{})}),(0,K.jsx)(v,{children:C.map(e=>(0,K.jsx)(y,{value:e.id,children:(0,K.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(W,{dbms:e.id}),e.label]})},e.id))})]})}),f&&(0,K.jsx)(X,{label:n(`connection.form.connectionString`),htmlFor:`conn-uri`,children:(0,K.jsxs)(`div`,{className:`min-w-0`,children:[(0,K.jsx)(B,{id:`conn-uri`,type:`password`,autoComplete:`new-password`,spellCheck:!1,className:`font-mono text-xs`,placeholder:e.dbms===`neon`?`postgresql://neondb_owner:npg_…@ep-….neon.tech/neondb?sslmode=require`:`postgresql://postgres.[ref]:[password]@aws-0-….pooler.supabase.com:5432/postgres`,value:w,onChange:e=>te(e.target.value)}),(0,K.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed ${D===`invalid`?`text-destructive`:`text-muted-foreground`}`,children:n(D===`invalid`?`connection.form.connectionStringInvalid`:D===`applied`?`connection.form.connectionStringApplied`:e.dbms===`neon`?`connection.form.neonHint`:`connection.form.supabaseHint`)})]})}),l&&(0,K.jsxs)(X,{label:n(`connection.form.openVia`),children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,K.jsxs)(`label`,{className:`flex items-center gap-1.5 text-sm cursor-pointer`,children:[(0,K.jsx)(`input`,{type:`radio`,name:`transport`,value:`browser`,checked:u===`browser`,onChange:()=>r(`transport`,`browser`),className:`accent-primary`}),n(`connection.form.viaBrowser`)]}),(0,K.jsxs)(`label`,{className:`flex items-center gap-1.5 text-sm cursor-pointer`,children:[(0,K.jsx)(`input`,{type:`radio`,name:`transport`,value:`tunnel`,checked:u===`tunnel`,onChange:()=>r(`transport`,`tunnel`),className:`accent-primary`}),n(`connection.form.viaAgent`)]})]}),(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(u===`browser`?`connection.form.viaBrowserHint`:`connection.form.viaAgentHint`)})]}),d?(0,K.jsx)(X,{label:n(`connection.form.databaseFile`),children:(0,K.jsxs)(`div`,{className:`min-w-0 text-xs text-muted-foreground leading-relaxed`,children:[e.file?(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,K.jsx)(`span`,{className:`min-w-0 break-all text-foreground`,title:e.file,children:e.file}),(0,K.jsx)(i,{type:`button`,variant:`outline`,size:`sm`,className:`h-6 shrink-0 px-2 text-xs`,onClick:()=>{M(e.id),r(`file`,``)},children:n(`connection.form.changeFile`)})]}):(0,K.jsx)(`p`,{children:n(`connection.form.filePickerHint`)}),(0,K.jsx)(`p`,{className:`mt-1`,children:n(`connection.form.fileRememberedHint`)})]})}):null,!d&&(0,K.jsx)(X,{label:n(`connection.form.authToken`),htmlFor:`conn-authToken`,children:(0,K.jsx)(B,{id:`conn-authToken`,type:`password`,autoComplete:`new-password`,placeholder:n(`connection.form.authTokenPlaceholder`),value:e.authToken,onChange:e=>r(`authToken`,e.target.value.trim())})}),d?null:m?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:n(`connection.form.doDevUrl`),htmlFor:`conn-do-url`,children:(0,K.jsx)(B,{id:`conn-do-url`,className:`font-mono text-xs`,spellCheck:!1,placeholder:`http://localhost:8787`,value:e.devUrl??``,onChange:e=>r(`devUrl`,e.target.value.trim())})}),(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.doHint`)}),(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.doLimitsHint`)})]}):p?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:n(`connection.form.d1DevUrl`),htmlFor:`conn-d1-dev`,children:(0,K.jsx)(B,{id:`conn-d1-dev`,autoComplete:`off`,className:`font-mono text-xs`,spellCheck:!1,placeholder:`http://localhost:8787`,value:e.devUrl??``,onChange:e=>r(`devUrl`,e.target.value.trim())})}),(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.d1DevUrlHint`)}),(0,K.jsx)(X,{label:n(`connection.form.d1AccountId`),htmlFor:`conn-d1-account`,children:(0,K.jsx)(B,{id:`conn-d1-account`,autoComplete:`off`,className:`font-mono text-xs`,spellCheck:!1,placeholder:`023e105f4ecef8ad9ca31a8372d0c353`,value:e.accountId??``,onChange:e=>r(`accountId`,e.target.value.trim())})}),(0,K.jsx)(X,{label:n(`connection.form.d1DatabaseId`),htmlFor:`conn-d1-database`,children:a.length>0?(0,K.jsxs)(b,{value:e.databaseId??``,onValueChange:e=>r(`databaseId`,e),children:[(0,K.jsx)(_,{id:`conn-d1-database`,children:(0,K.jsx)(g,{placeholder:n(`connection.form.d1PickDatabase`)})}),(0,K.jsx)(v,{children:a.map(e=>(0,K.jsxs)(y,{value:e.id,children:[e.name,` · `,e.id]},e.id))})]}):(0,K.jsx)(B,{id:`conn-d1-database`,autoComplete:`off`,className:`font-mono text-xs`,spellCheck:!1,placeholder:`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`,value:e.databaseId??``,onChange:e=>r(`databaseId`,e.target.value.trim())})}),(0,K.jsx)(X,{label:n(`connection.form.d1ApiToken`),htmlFor:`conn-pass`,children:(0,K.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,K.jsx)(B,{id:`conn-pass`,type:`password`,autoComplete:`new-password`,value:e.pass,onChange:e=>r(`pass`,e.target.value.trim())}),(0,K.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs whitespace-nowrap cursor-pointer`,title:n(`connection.form.savePasswordHint`),children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:e.savePassword??!0,onChange:e=>r(`savePassword`,e.target.checked)}),n(`connection.form.savePassword`)]})]})}),(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.d1Hint`)}),(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.d1LimitsHint`)})]}):l?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:n(`connection.form.databaseFile`),htmlFor:`conn-file`,children:(0,K.jsx)(B,{id:`conn-file`,placeholder:n(`connection.form.filePathPlaceholder`),value:e.file??``,onChange:e=>r(`file`,e.target.value)})}),(0,K.jsx)(X,{label:n(`connection.form.createIfMissing`),htmlFor:`conn-create`,children:(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`input`,{id:`conn-create`,type:`checkbox`,checked:e.createIfMissing??!1,onChange:e=>r(`createIfMissing`,e.target.checked),className:`size-4 accent-primary cursor-pointer`}),(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`connection.form.createIfMissingHint`)})]})})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:n(`connection.form.host`),htmlFor:`conn-host`,children:(0,K.jsx)(B,{id:`conn-host`,placeholder:e.dbms===`neon`?`ep-….aws.neon.tech`:e.dbms===`supabase`?`aws-0-….pooler.supabase.com`:`localhost`,value:e.host,onChange:e=>r(`host`,e.target.value)})}),(0,K.jsx)(X,{label:n(`connection.form.port`),htmlFor:`conn-port`,children:(0,K.jsx)(B,{id:`conn-port`,type:`number`,value:e.port,onChange:t=>r(`port`,Number(t.target.value)||C.find(t=>t.id===e.dbms)?.defaultPort||3306)})}),O&&(0,K.jsx)(`p`,{className:`col-start-2 rounded-md border border-yellow-500/40 bg-yellow-500/10 px-2 py-1.5 text-xs leading-relaxed text-foreground`,children:n(`connection.form.supabasePoolerWarning`)}),V(e.dbms)!==void 0&&(0,K.jsx)(X,{label:e.dbms===`oracle`?n(`connection.form.serviceName`):n(`connection.form.database`),htmlFor:`conn-database`,children:(0,K.jsx)(B,{id:`conn-database`,placeholder:V(e.dbms),value:e.database??``,onChange:e=>r(`database`,e.target.value.trim())})}),(0,K.jsx)(X,{label:n(`connection.form.user`),htmlFor:`conn-user`,children:(0,K.jsx)(B,{id:`conn-user`,autoComplete:`off`,placeholder:U(e.dbms),value:e.user,onChange:e=>r(`user`,e.target.value)})}),(0,K.jsx)(X,{label:n(`connection.form.password`),htmlFor:`conn-pass`,children:(0,K.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,K.jsx)(B,{id:`conn-pass`,type:`password`,autoComplete:`new-password`,value:e.pass,onChange:e=>r(`pass`,e.target.value)}),(0,K.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs whitespace-nowrap cursor-pointer`,title:n(`connection.form.savePasswordHint`),children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:e.savePassword??!0,onChange:e=>r(`savePassword`,e.target.checked)}),n(`connection.form.savePassword`)]})]})}),f&&(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.managedTlsHint`)}),(()=>{let t=T(e.dbms),r=`formHint`in t?t.formHint:void 0;return r?(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(r)}):null})(),!f&&e.dbms!==`oracle`&&(0,K.jsx)(X,{label:n(`connection.form.tls`),children:(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,K.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer`,children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:e.ssl??!1,onChange:e=>r(`ssl`,e.target.checked),className:`size-4 accent-primary`}),n(`connection.form.tlsEnable`)]}),(0,K.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer ${e.ssl?``:`opacity-50`}`,title:n(`connection.form.tlsVerifyHint`),children:[(0,K.jsx)(`input`,{type:`checkbox`,disabled:!e.ssl,checked:e.sslVerify??!1,onChange:e=>r(`sslVerify`,e.target.checked),className:`size-4 accent-primary`}),n(`connection.form.tlsVerify`)]})]})}),!f&&x(T(e.dbms))&&(0,K.jsx)(X,{label:n(`connection.form.charset`),children:(0,K.jsxs)(b,{value:e.charset,onValueChange:e=>r(`charset`,e),children:[(0,K.jsx)(_,{className:`w-full`,children:(0,K.jsx)(g,{})}),(0,K.jsx)(v,{children:Je.map(e=>(0,K.jsx)(y,{value:e,children:e},e))})]})})]}),!l&&!f&&!p&&!m&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`mt-1 flex items-center border-t pt-3 text-xs font-medium text-muted-foreground`,children:[n(`connection.form.ssh`),(0,K.jsx)(le,{className:`ml-2`})]}),(0,K.jsx)(X,{label:n(`connection.form.sshTunnel`),htmlFor:`conn-ssh`,children:(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`input`,{id:`conn-ssh`,type:`checkbox`,checked:h.enabled,onChange:e=>{(!e.target.checked||Te(`ssh_tunnel`))&&k({enabled:e.target.checked})},className:`size-4 accent-primary cursor-pointer`}),(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`connection.form.sshTunnelHint`)})]})}),h.enabled&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:n(`connection.form.sshHost`),htmlFor:`conn-ssh-host`,children:(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(B,{id:`conn-ssh-host`,placeholder:n(`connection.form.sshHostPlaceholder`),value:h.host,onChange:e=>k({host:e.target.value.trim()})}),(0,K.jsx)(B,{"aria-label":n(`connection.form.sshPort`),type:`number`,className:`w-24 shrink-0`,value:h.port,onChange:e=>k({port:Number(e.target.value)||22})})]})}),(0,K.jsx)(X,{label:n(`connection.form.sshUser`),htmlFor:`conn-ssh-user`,children:(0,K.jsx)(B,{id:`conn-ssh-user`,placeholder:n(`connection.form.sshUserPlaceholder`),value:h.user,onChange:e=>k({user:e.target.value.trim()})})}),(0,K.jsx)(X,{label:n(`connection.form.sshAuth`),children:(0,K.jsxs)(b,{value:h.auth,onValueChange:e=>k({auth:e}),children:[(0,K.jsx)(_,{className:`w-full`,children:(0,K.jsx)(g,{})}),(0,K.jsxs)(v,{children:[(0,K.jsx)(y,{value:`key`,children:n(`connection.form.sshAuthKey`)}),(0,K.jsx)(y,{value:`password`,children:n(`connection.form.sshAuthPassword`)}),(0,K.jsx)(y,{value:`agent`,children:n(`connection.form.sshAuthAgent`)})]})]})}),h.auth===`password`&&(0,K.jsx)(X,{label:n(`connection.form.sshPassword`),htmlFor:`conn-ssh-pass`,children:(0,K.jsx)(B,{id:`conn-ssh-pass`,type:`password`,autoComplete:`new-password`,value:h.password??``,onChange:e=>k({password:e.target.value})})}),h.auth===`key`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:n(`connection.form.sshKey`),htmlFor:`conn-ssh-key`,children:(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,K.jsx)(`input`,{id:`conn-ssh-key`,type:`file`,className:`hidden`,onChange:e=>{ne(e.target.files?.[0]),e.target.value=``}}),(0,K.jsx)(i,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 shrink-0 px-2 text-xs`,onClick:()=>document.getElementById(`conn-ssh-key`)?.click(),children:h.privateKey?n(`connection.form.changeFile`):n(`connection.form.sshKeyPick`)}),(0,K.jsx)(`span`,{className:`min-w-0 truncate text-xs text-muted-foreground`,title:h.privateKeyName,children:h.privateKey?h.privateKeyName||n(`connection.form.sshKeyLoaded`):n(`connection.form.sshKeyHint`)})]})}),(0,K.jsx)(X,{label:n(`connection.form.sshPassphrase`),htmlFor:`conn-ssh-passphrase`,children:(0,K.jsx)(B,{id:`conn-ssh-passphrase`,type:`password`,autoComplete:`new-password`,placeholder:n(`connection.form.sshPassphrasePlaceholder`),value:h.passphrase??``,onChange:e=>k({passphrase:e.target.value})})})]}),h.auth===`agent`&&(0,K.jsx)(`p`,{className:`col-start-2 text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.sshAuthAgentHint`)}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.sshTargetHint`)}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground leading-relaxed`,children:n(`connection.form.sshSecretsHint`)})]})]}),(0,K.jsx)(X,{label:n(`connection.form.autoConnection`),htmlFor:`conn-auto`,children:(0,K.jsx)(`div`,{className:`flex items-center`,children:(0,K.jsx)(`input`,{id:`conn-auto`,type:`checkbox`,checked:e.autoConnection,onChange:e=>r(`autoConnection`,e.target.checked),className:`size-4 accent-primary cursor-pointer`})})}),(0,K.jsx)(`div`,{className:`mt-1 border-t pt-3 text-xs font-medium text-muted-foreground`,children:n(`connection.form.safety`)}),(0,K.jsx)(X,{label:n(`connection.form.environment`),children:(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[de.map(t=>{let n=(e.environmentColor??`none`)===t.id;return(0,K.jsx)(`button`,{type:`button`,title:F(t.id),"aria-label":F(t.id),"aria-pressed":n,onClick:()=>r(`environmentColor`,t.id),className:`size-6 rounded-full border-2 transition-transform ${n?`scale-110 border-foreground`:`border-transparent hover:scale-105`}`,style:{background:t.id===`none`?`repeating-linear-gradient(45deg, transparent, transparent 3px, var(--muted-foreground) 3px, var(--muted-foreground) 4px)`:t.hex}},t.id)}),(0,K.jsx)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:n(`connection.form.environmentHint`)})]})}),(0,K.jsx)(X,{label:n(`connection.form.readOnly`),htmlFor:`conn-readonly`,children:(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`input`,{id:`conn-readonly`,type:`checkbox`,checked:e.readOnly??!1,onChange:e=>r(`readOnly`,e.target.checked),className:`size-4 accent-primary cursor-pointer`}),(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`connection.form.readOnlyHint`)})]})}),ee?.transactions!==!1&&(0,K.jsx)(X,{label:n(`connection.form.transactions`),children:(0,K.jsxs)(b,{value:e.transactionMode??`auto`,onValueChange:e=>r(`transactionMode`,e),children:[(0,K.jsx)(_,{className:`w-full`,children:(0,K.jsx)(g,{})}),(0,K.jsxs)(v,{children:[(0,K.jsx)(y,{value:`auto`,children:n(`connection.form.txAuto`)}),(0,K.jsx)(y,{value:`manual`,children:n(`connection.form.txManual`)})]})]})})]})}var Ze=[`id`,`serverConnectionId`,`sample`,`scratchpad`,`autoConnection`];function Qe(e){return!e.sample&&!e.scratchpad}function $e(e,t,n=new Date){let r=t?e:D(e),i={...r};for(let e of Ze)delete i[e];if(i.pass||delete i.pass,i.authToken||delete i.authToken,r.ssh){let e={...r.ssh};for(let t of[`password`,`passphrase`,`privateKey`])e[t]||delete e[t];i.ssh=e}return{planche:`connection`,version:1,exportedAt:n.toISOString(),secrets:t,connection:i}}function et(e){let t;try{t=JSON.parse(e)}catch{throw Error(`Not a JSON file`)}let n=t;if(!n||n.planche!==`connection`||!n.connection||typeof n.connection!=`object`)throw Error(`Not a Planche connection file`);if(typeof n.connection.dbms!=`string`||!n.connection.dbms)throw Error(`The connection has no database type`);return n}var Z=(e,t=``)=>typeof e==`string`?e:t,Q=e=>typeof e==`boolean`?e:void 0,tt=(e,t)=>typeof e==`number`&&Number.isFinite(e)?e:t,$=e=>e===void 0||e===``?void 0:e;function nt(e){if(!e||typeof e!=`object`)return;let t=e,n=t.auth===`key`||t.auth===`agent`?t.auth:`password`;return{enabled:t.enabled===!0,host:Z(t.host),port:tt(t.port,22),user:Z(t.user),auth:n,password:$(Z(t.password)),privateKey:$(Z(t.privateKey)),privateKeyName:$(Z(t.privateKeyName)),passphrase:$(Z(t.passphrase))}}function rt(e,t,n=crypto.randomUUID()){let r=e.connection,i=Q(r.savePassword),a={id:n,hostName:it(Z(r.hostName),t),host:Z(r.host),user:Z(r.user),pass:Z(r.pass),charset:Z(r.charset,`utf8`),port:tt(r.port,0),dbms:r.dbms,database:$(Z(r.database)),transport:r.transport===`tunnel`||r.transport===`browser`?r.transport:void 0,file:$(Z(r.file)),createIfMissing:Q(r.createIfMissing),ssl:Q(r.ssl),sslVerify:Q(r.sslVerify),accountId:$(Z(r.accountId)),databaseId:$(Z(r.databaseId)),devUrl:$(Z(r.devUrl)),ssh:nt(r.ssh),gatewayProfile:$(Z(r.gatewayProfile)),autoConnection:!1,savePassword:i??!0,authToken:Z(r.authToken),readOnly:Q(r.readOnly),environmentColor:$(Z(r.environmentColor)),transactionMode:$(Z(r.transactionMode))};for(let e of Object.keys(a))a[e]===void 0&&delete a[e];return a}function it(e,t){if(!e||!t.some(t=>t.hostName===e))return e;for(let n=2;;n++){let r=`${e} (${n})`;if(!t.some(e=>e.hostName===r))return r}}async function at(e,t,n=`application/json`){let r=Ee(e);if(typeof window.showSaveFilePicker==`function`)try{let e=await(await window.showSaveFilePicker({suggestedName:r,types:[{accept:{[n]:[`.${r.split(`.`).pop()??`txt`}`]}}]})).createWritable();return await e.write(t),await e.close(),!0}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return!1}let i=URL.createObjectURL(new Blob([t],{type:n})),a=document.createElement(`a`);return a.href=i,a.download=r,a.click(),URL.revokeObjectURL(i),!0}function ot(e=`.json,application/json`){return new Promise(t=>{let n=document.createElement(`input`);n.type=`file`,n.accept=e,n.onchange=async()=>{let e=n.files?.[0];t(e?await e.text():null)},n.oncancel=()=>t(null),n.click()})}function st({...e}){return(0,K.jsx)(ze,{"data-slot":`dropdown-menu`,...e})}function ct({...e}){return(0,K.jsx)(Be,{"data-slot":`dropdown-menu-trigger`,...e})}function lt({className:e,sideOffset:t=4,...n}){return(0,K.jsx)(Ve,{children:(0,K.jsx)(He,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:r(`z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...n})})}function ut({className:e,inset:t,variant:n=`default`,...i}){return(0,K.jsx)(Ue,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:r(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...i})}function dt(){let{t:e}=o(),{activeDialog:t,closeDialog:n,showMessage:r}=A(),[a,s]=(0,G.useState)(!1),{savedConnections:c,addSavedConnection:l,updateSavedConnection:u,deleteSavedConnection:d,openConnection:g}=E(),_=re(`connect`)?.profileId,[v,y]=(0,G.useState)(()=>_??null),[b,x]=(0,G.useState)(()=>{let e=_?c.find(e=>e.id===_):void 0;return e?{...e}:null}),S=t===`connect`,[C,D]=(0,G.useState)(null),[M,N]=(0,G.useState)(null),le=xe(e=>e.url),de=xe(e=>e.token);(0,G.useEffect)(()=>{if(!S)return;let e=!1;return(async()=>{try{let t=await te();if(e||t.state!==`online`||!t.gateway){e||D(null);return}let n=await ne();e||(D({name:n.gateway,profiles:n.profiles}),N(null))}catch(t){e||N(t instanceof Error?t.message:String(t))}})(),()=>{e=!0}},[S,le,de]);function F(t){let n=c.find(e=>e.gatewayProfile===t.name);if(n){z(n);return}let r=be(t);l(r),z(r),A.getState().setFooterMessage(e(`connection.dialog.gatewayAdded`,{name:t.name}))}function I(e){e||(n(),y(null),x(null))}function z(e){y(e.id),x({...e})}function he(e){x(e),u(e.id,e)}function B(){let e=pe();l(e),y(e.id),x(e)}function ye(){v&&(d(v),y(null),x(null))}async function V(t){let n=c.find(e=>e.id===v);if(!n||!Qe(n))return;let r=n.hostName||e(`connection.dialog.unnamed`),i=$e(E.getState().resolveCredentials(n),t);await at(`planche-connection-${r}.json`,JSON.stringify(i,null,2))&&A.getState().setFooterMessage(e(`connection.dialog.exported`,{name:r}))}async function H(){let t=await ot();if(t!==null)try{let n=rt(et(t),E.getState().savedConnections);l(n),y(n.id),x(n),A.getState().setFooterMessage(e(`connection.dialog.imported`,{name:n.hostName||e(`connection.dialog.unnamed`)}))}catch(t){r({tone:`error`,title:e(`connection.dialog.importFailedTitle`),description:t instanceof Error?t.message:String(t)})}}let U=v!==null&&c.some(e=>e.id===v&&Qe(e)),[Se,Te]=(0,G.useState)(!1),Ee=ie(e=>e.addQueryTab);function De(t){let r=E.getState().activeConnections.some(e=>e.id===t.id);if(g(t),ae.getState().removeTree(t.id),w(t.id),r){n(),y(null),x(null);return}Ee(t.id,{id:`tab-${Date.now()}`,title:e(`connection.dialog.firstQueryTab`),query:``,database:``,isExecuting:!1,results:[],error:null,executionTime:null}),n(),y(null),x(null)}async function q(t){let n=await ce(t.id,{interactive:!0});if(!n)return;let r={...t,file:n.fileName,serverConnectionId:n.connectionId};u(t.id,{file:n.fileName}),De(r),E.getState().setFileDetached(t.id,n.fileDetached),n.restoredUnsaved?A.getState().setFooterMessage(e(n.diskChanged?`connection.dialog.restoredUnsavedDiskChanged`:`connection.dialog.restoredUnsaved`,{file:n.fileName})):n.wal&&!n.walApplied?A.getState().setFooterMessage(e(`connection.dialog.walPending`,{file:n.fileName})):n.walApplied&&A.getState().setFooterMessage(e(`connection.dialog.walApplied`,{file:n.fileName}))}async function J(t,n){try{return await n(t)}catch(r){let i=k(r);if(!i||!(`ssh`in t)||!t.ssh||!await A.getState().requestDestructiveConfirm({title:e(`connection.dialog.hostKeyTitle`),description:e(`connection.dialog.hostKeyDescription`,i),confirmLabel:e(`connection.dialog.hostKeyAccept`)}))throw r;return n({...t,ssh:{...t.ssh,acceptHostKey:i.fingerprint}})}}async function Oe(){if(b){Te(!0);try{if(j(b)===`browser`){await q(b);return}let t=await J(O(b),e=>se(e,b.authToken||void 0));t.success?De({...b,serverConnectionId:t.connectionId}):r({tone:`error`,title:e(`connection.dialog.connectFailedTitle`),description:t.message??e(`connection.dialog.unknownError`)})}catch(t){r({tone:`error`,title:e(`connection.dialog.connectFailedTitle`),description:t instanceof Error?t.message:String(t)})}finally{Te(!1)}}}async function ke(){if(b){if(j(b)===`browser`){r({tone:`info`,title:e(`connection.dialog.testConnection`),description:e(`connection.dialog.browserTestHint`)});return}s(!0);try{let t=await J(O(b),e=>oe(e,b.authToken||void 0));t.success?r({tone:`success`,title:e(`connection.dialog.testSuccess`),description:e(`connection.dialog.testSuccessDescription`)}):r({tone:`error`,title:e(`connection.dialog.testFailedTitle`),description:t.message??e(`connection.dialog.unknownError`)})}catch(t){r({tone:`error`,title:e(`connection.dialog.testFailedTitle`),description:t instanceof Error?t.message:String(t)})}finally{s(!1)}}}return(0,K.jsx)(h,{open:S,onOpenChange:I,children:(0,K.jsxs)(m,{className:`sm:max-w-[1100px] h-[85vh] max-h-[85vh] flex flex-col`,children:[(0,K.jsx)(f,{children:(0,K.jsx)(ee,{children:e(`connection.dialog.title`)})}),(0,K.jsxs)(`p`,{className:`flex items-start gap-2 rounded-md border border-catppuccin-green/40 bg-catppuccin-green/10 px-3 py-2 text-xs leading-relaxed text-foreground`,children:[(0,K.jsx)(fe,{className:`mt-0.5 size-4 shrink-0 text-catppuccin-green`,"aria-hidden":!0}),(0,K.jsx)(`span`,{children:e(`connection.dialog.privacy`)})]}),(0,K.jsxs)(`div`,{className:`flex flex-1 gap-4 overflow-hidden min-h-0`,children:[(0,K.jsxs)(`div`,{className:`w-[460px] shrink-0 border rounded-md overflow-hidden flex flex-col`,children:[(C||M)&&(0,K.jsxs)(`div`,{className:`border-b p-2 text-xs space-y-1 max-h-40 overflow-auto`,children:[(0,K.jsxs)(`p`,{className:`font-medium`,children:[e(`connection.dialog.gatewayTitle`),C?` — ${C.name}`:``]}),M&&(0,K.jsx)(`p`,{className:`text-destructive`,children:e(`connection.dialog.gatewayLoadFailed`,{error:M})}),C?.profiles.map(t=>(0,K.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,K.jsxs)(`span`,{className:`flex items-center gap-1.5 truncate`,children:[(0,K.jsx)(W,{dbms:ve[t.driver],className:`size-3.5`}),(0,K.jsx)(`span`,{className:`truncate`,children:t.name}),(0,K.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,t.readOnly?e(`connection.dialog.gatewayReadOnly`):e(`connection.dialog.gatewayWritable`),`)`]})]}),(0,K.jsx)(i,{size:`sm`,variant:`outline`,className:`h-6 px-2 text-xs`,onClick:()=>F(t),children:e(`connection.dialog.gatewayAdd`)})]},t.name))]}),(0,K.jsx)(ge,{className:`h-full`,children:(0,K.jsxs)(me,{className:`table-fixed`,children:[(0,K.jsx)(Ce,{children:(0,K.jsxs)(R,{children:[(0,K.jsx)(P,{className:`w-[32%]`,children:e(`connection.dialog.colHostName`)}),(0,K.jsx)(P,{className:`w-[40%]`,children:e(`connection.dialog.colTarget`)}),(0,K.jsx)(P,{className:`w-[28%]`,children:e(`connection.dialog.colDbms`)})]})}),(0,K.jsx)(we,{children:c.length===0?(0,K.jsx)(R,{children:(0,K.jsx)(L,{colSpan:3,className:`text-center text-muted-foreground`,children:e(`connection.dialog.noSaved`)})}):c.map(t=>(0,K.jsxs)(R,{"data-state":v===t.id?`selected`:void 0,className:`cursor-pointer`,onClick:()=>z(t),onDoubleClick:()=>{z(t),Oe()},children:[(0,K.jsx)(L,{className:`truncate font-medium`,title:t.hostName,children:t.hostName||e(`connection.dialog.unnamed`)}),(0,K.jsx)(L,{className:`truncate`,title:t.dbms===`sqlite`?t.file:t.dbms===`d1`?t.databaseId:t.dbms===`do`?t.devUrl:`${t.user?`${t.user}@`:``}${t.host}:${t.port}`,children:t.dbms===`sqlite`?t.file||(j(t)===`browser`?e(`connection.dialog.pickOnConnect`):e(`connection.dialog.noFile`)):t.dbms===`d1`?t.databaseId||`—`:t.dbms===`do`?t.devUrl||`—`:`${t.user?`${t.user}@`:``}${t.host}:${t.port}`}),(0,K.jsx)(L,{className:`truncate`,title:T(t.dbms).label,children:(0,K.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,K.jsx)(W,{dbms:t.dbms,className:`size-3.5`}),(0,K.jsx)(`span`,{className:`truncate`,children:T(t.dbms).label})]})})]},t.id))})]})})]}),(0,K.jsx)(`div`,{className:`flex-1 border rounded-md overflow-auto`,children:b?(0,K.jsxs)(K.Fragment,{children:[j(b)!==`browser`&&(0,K.jsx)(`div`,{className:`p-4 pb-0`,children:(0,K.jsx)(_e,{})}),b.gatewayProfile?(0,K.jsxs)(`div`,{className:`p-4 space-y-2 text-sm`,children:[(0,K.jsxs)(`p`,{className:`font-medium flex items-center gap-2`,children:[(0,K.jsx)(W,{dbms:b.dbms,className:`size-4`}),b.hostName]}),(0,K.jsx)(`p`,{className:`text-muted-foreground`,children:e(`connection.dialog.gatewayProfileHint`,{name:b.gatewayProfile})}),(0,K.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[b.readOnly?e(`connection.dialog.gatewayReadOnly`):e(`connection.dialog.gatewayWritable`),b.database?` · ${b.database}`:``]})]}):(0,K.jsx)(Xe,{value:b,onChange:he})]}):(0,K.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:e(`connection.dialog.selectPrompt`)})})]}),(0,K.jsxs)(p,{className:`sm:justify-between`,children:[(0,K.jsxs)(`div`,{className:`flex gap-2`,children:[(0,K.jsx)(i,{variant:`outline`,onClick:B,children:e(`connection.dialog.addNew`)}),(0,K.jsx)(i,{variant:`destructive`,onClick:ye,disabled:!v,children:e(`connection.dialog.delete`)}),(0,K.jsxs)(st,{children:[(0,K.jsx)(ct,{asChild:!0,children:(0,K.jsxs)(i,{variant:`outline`,disabled:!U,children:[e(`connection.dialog.export`),(0,K.jsx)(ue,{className:`ml-1 size-3.5`,"aria-hidden":!0})]})}),(0,K.jsxs)(lt,{align:`start`,children:[(0,K.jsx)(ut,{onSelect:()=>void V(!1),children:e(`connection.dialog.exportWithoutSecrets`)}),(0,K.jsx)(ut,{onSelect:()=>void V(!0),children:e(`connection.dialog.exportWithSecrets`)})]})]}),(0,K.jsx)(i,{variant:`outline`,onClick:()=>void H(),children:e(`connection.dialog.import`)})]}),(0,K.jsxs)(`div`,{className:`flex gap-2`,children:[(0,K.jsx)(i,{variant:`outline`,onClick:ke,disabled:!b||a,children:e(`connection.dialog.testConnection`)}),(0,K.jsx)(i,{onClick:Oe,disabled:!b||Se,children:e(`connection.dialog.connect`)}),(0,K.jsx)(i,{variant:`outline`,onClick:()=>I(!1),children:e(`connection.dialog.close`)})]})]})]})})}export{dt as ConnectDialog};