planche 0.9.2 → 0.9.4

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 (82) hide show
  1. package/app/assets/{B4S-lOKS.js → 2HDxyxt3.js} +1 -1
  2. package/app/assets/{W7D4Svcn.js → 2WcjYcT6.js} +1 -1
  3. package/app/assets/{G06qjCej.js → 34iJa-68.js} +1 -1
  4. package/app/assets/{CFUkTo-F.js → 62772Vyq.js} +1 -1
  5. package/app/assets/{XCH_yrJ8.js → 7hKKrols.js} +1 -1
  6. package/app/assets/92hmrkfN.css +2 -0
  7. package/app/assets/{CTnwm-29.js → AR0v7sKO.js} +1 -1
  8. package/app/assets/B5FoXN4H.js +1 -0
  9. package/app/assets/{DCHRj2vY.js → BB2_KYgp.js} +1 -1
  10. package/app/assets/{Bbx7_Uyd.js → BHsv1P4D.js} +1 -1
  11. package/app/assets/{D3lUezEb.js → BI5Ig187.js} +1 -1
  12. package/app/assets/{ByKF67UY.js → BRKvj3qd.js} +1 -1
  13. package/app/assets/{CFu5QMhX.js → BTpuv2bS.js} +1 -1
  14. package/app/assets/{BkXrfAoR.js → BVZGLNq_.js} +1 -1
  15. package/app/assets/{Djxg54qH.js → BWPrOT1U.js} +1 -1
  16. package/app/assets/{84VwJAQi.js → BaTnCkNR.js} +1 -1
  17. package/app/assets/{7jG9Xw-H.js → BdhjYiGI.js} +1 -1
  18. package/app/assets/{D8_hwGjG.js → BihjBM79.js} +1 -1
  19. package/app/assets/{BrVnzO7b.js → Bjx1jzlk.js} +1 -1
  20. package/app/assets/{7jD5h8Yx.js → BkujllIu.js} +1 -1
  21. package/app/assets/{BPPUDpI0.js → BtBUwOf0.js} +1 -1
  22. package/app/assets/{B9dhM8vw.js → Buf-_p3w.js} +1 -1
  23. package/app/assets/{CrlnxAGW.js → BvkNY7SP.js} +1 -1
  24. package/app/assets/{BGvsBpIS.js → C-8Bh-gu.js} +1 -1
  25. package/app/assets/{BMFLhX-x.js → C1JbR1mO.js} +1 -1
  26. package/app/assets/{DPyLA6Dl.js → C3AWL5gC.js} +1 -1
  27. package/app/assets/{BQ1Rcyw6.js → C3aiaYZP.js} +1 -1
  28. package/app/assets/{Cu_sGzNJ.js → C76CctEl.js} +1 -1
  29. package/app/assets/{DHZOxCSJ.js → C82F2LSh.js} +1 -1
  30. package/app/assets/{CoZCOAph.js → CCJEQIo6.js} +1 -1
  31. package/app/assets/{DzdX4vRD.js → CDfygETm.js} +1 -1
  32. package/app/assets/{BixvbqFe.js → CGpFMM6B.js} +1 -1
  33. package/app/assets/{BRZhVXRC.js → CH4cEkW4.js} +1 -1
  34. package/app/assets/{D9QeXBOk.js → CKUISE0C.js} +1 -1
  35. package/app/assets/{BNB62Dfu.js → CN1CF2CU.js} +1 -1
  36. package/app/assets/{D0Ya12SQ.js → CRYDH2ct.js} +1 -1
  37. package/app/assets/{BnJGrP6V.js → CZRhmV_L.js} +2 -2
  38. package/app/assets/{C1gqjEN3.js → C_qmv4pB.js} +1 -1
  39. package/app/assets/{CgQ0qqq4.js → CcaDuuFY.js} +1 -1
  40. package/app/assets/{D1kyupCL.js → Cm-pfCIP.js} +1 -1
  41. package/app/assets/{BDtsGuIR.js → Cme0nCT7.js} +2 -2
  42. package/app/assets/{BhX9zWzC.js → CoUCmmSB.js} +1 -1
  43. package/app/assets/{B7zF7RU4.js → CtsakJNi.js} +1 -1
  44. package/app/assets/{DNHPk-9r.js → Cw4TnfXm.js} +1 -1
  45. package/app/assets/{BYvM8E39.js → CxaujQob.js} +1 -1
  46. package/app/assets/{CYz610vE.js → CyX8oVsa.js} +1 -1
  47. package/app/assets/{CRnmOOqq.js → D-DAzfgs.js} +1 -1
  48. package/app/assets/{BPmMKRmE.js → D3VPMNTU.js} +1 -1
  49. package/app/assets/{CExE8dKz.js → D4DxtYTA.js} +185 -184
  50. package/app/assets/{C6712dxU.js → D4c1cZWk.js} +1 -1
  51. package/app/assets/{C1kpKIsO.js → DG0u2CPf.js} +1 -1
  52. package/app/assets/{CHx7zgT8.js → DKObYbZY.js} +1 -1
  53. package/app/assets/{DU-Eln5x.js → DOy06rIE.js} +1 -1
  54. package/app/assets/{aIFwnVFr.js → DPKD37gk.js} +1 -1
  55. package/app/assets/{DpEN2jyA.js → DT8Xdk78.js} +1 -1
  56. package/app/assets/{Do7KpDxk.js → DXExbVos.js} +1 -1
  57. package/app/assets/{BSziALTN.js → DXQPcWS6.js} +1 -1
  58. package/app/assets/{kXDKfUfE.js → DjsycSVl.js} +1 -1
  59. package/app/assets/{CiL8zoYm.js → Dya0zxo6.js} +1 -1
  60. package/app/assets/{DTkqO0Em.js → IqMoIce-.js} +1 -1
  61. package/app/assets/{CrhJJH3f.js → MeOkctzz.js} +1 -1
  62. package/app/assets/{DF7EZh_S.js → NL8WOYEo.js} +1 -1
  63. package/app/assets/{D8dVzi6I.js → Ngd1VEiY.js} +1 -1
  64. package/app/assets/UEkRIZwQ.js +1 -0
  65. package/app/assets/{BGuDcBB_.js → UJzcIbfW.js} +1 -1
  66. package/app/assets/{C77ZEZfM.js → W81Xd8P5.js} +1 -1
  67. package/app/assets/{DaBfnZOJ.js → Yn5aIyLX.js} +1 -1
  68. package/app/assets/{BMBWoD5w.js → _N3A-NTc.js} +1 -1
  69. package/app/assets/{qRIRkBN0.js → gvCOWBS0.js} +1 -1
  70. package/app/assets/{S7HbowYz.js → iz6RnRcO.js} +71 -71
  71. package/app/assets/{DzRyVlxz.js → kTwcxyaO.js} +1 -1
  72. package/app/assets/{tJkeLYCp.js → oXAkF219.js} +1 -1
  73. package/app/assets/{BTaXXwBP.js → pDR31rvF.js} +1 -1
  74. package/app/assets/{BEH9Jqkv.js → u9a-WHjb.js} +1 -1
  75. package/app/assets/{BbOETtQZ.js → yLCKuLgs.js} +1 -1
  76. package/app/assets/{CaU3pCK6.js → yfRSh-O-.js} +1 -1
  77. package/app/assets/{BjwrN_ch.js → zdvaVsTo.js} +1 -1
  78. package/app/index.html +20 -20
  79. package/package.json +1 -1
  80. package/app/assets/9gOj-Ty3.js +0 -1
  81. package/app/assets/BFw3KCAr.js +0 -1
  82. package/app/assets/w46wk7KI.css +0 -2
@@ -1,2 +1,2 @@
1
- import{F as e}from"./S7HbowYz.js";var t=e,n=1048576,r={type:e=>`TYPE ${t(e)}`,ttl:e=>`TTL ${t(e)}`,memory:e=>`MEMORY USAGE ${t(e)}`,encoding:e=>`OBJECT ENCODING ${t(e)}`,length(e,n){switch(n){case`string`:return`STRLEN ${t(e)}`;case`hash`:return`HLEN ${t(e)}`;case`list`:return`LLEN ${t(e)}`;case`set`:return`SCARD ${t(e)}`;case`zset`:return`ZCARD ${t(e)}`;case`stream`:return`XLEN ${t(e)}`;default:return null}},getString:(e,n)=>n===void 0?`GET ${t(e)}`:`GETRANGE ${t(e)} 0 ${n-1}`,getJson:e=>`JSON.GET ${t(e)}`,scan(e,n,r,i){return`${n===`hash`?`HSCAN`:n===`set`?`SSCAN`:`ZSCAN`} ${t(e)} ${r}${i?` MATCH ${t(i)}`:``} COUNT 200`},listRange:(e,n)=>`LRANGE ${t(e)} ${n} ${n+200-1}`,streamRange:(e,n)=>`XREVRANGE ${t(e)} ${n?t(`(${n}`):`+`} - COUNT 200`,setString:(e,n)=>`SET ${t(e)} ${t(n)} KEEPTTL`,setStringWithTtl:(e,n,r)=>`SET ${t(e)} ${t(n)}${r&&r>0?` EX ${r}`:``}`,setJson:(e,n)=>`JSON.SET ${t(e)} $ ${t(n)}`,hashSet:(e,n,r)=>`HSET ${t(e)} ${t(n)} ${t(r)}`,hashDelete:(e,n)=>`HDEL ${t(e)} ${t(n)}`,listSet:(e,n,r)=>`LSET ${t(e)} ${n} ${t(r)}`,listPush:(e,n,r)=>`${r?`LPUSH`:`RPUSH`} ${t(e)} ${t(n)}`,listRemoveOne:(e,n)=>`LREM ${t(e)} 1 ${t(n)}`,setAdd:(e,n)=>`SADD ${t(e)} ${t(n)}`,setRemove:(e,n)=>`SREM ${t(e)} ${t(n)}`,zsetAdd:(e,n,r)=>`ZADD ${t(e)} ${t(r)} ${t(n)}`,zsetRemove:(e,n)=>`ZREM ${t(e)} ${t(n)}`,streamAdd:(e,n)=>`XADD ${t(e)} * ${n.map(([e,n])=>`${t(e)} ${t(n)}`).join(` `)}`,streamDelete:(e,n)=>`XDEL ${t(e)} ${t(n)}`,expire:(e,n)=>`EXPIRE ${t(e)} ${n}`,persist:e=>`PERSIST ${t(e)}`,renameIfFree:(e,n)=>`RENAMENX ${t(e)} ${t(n)}`,remove:e=>`UNLINK ${t(e)}`};function i(e){if(e==null||typeof e==`object`)return null;let t=Number(e);return Number.isFinite(t)?t:null}function a(e){let t=i(e);return t===-2?`gone`:t===null||t<0?null:t}function o(e){if(!Array.isArray(e)||e.length!==2||!Array.isArray(e[1]))throw Error(`Unexpected scan reply`);return{cursor:String(e[0]),values:e[1]}}var s=e=>e==null?``:String(e);function c(e){let{cursor:t,values:n}=o(e),r=[];for(let e=0;e+1<n.length;e+=2)r.push({field:s(n[e]),value:s(n[e+1])});return{cursor:t,items:r}}function l(e){let{cursor:t,values:n}=o(e);return{cursor:t,items:n.map(s)}}function u(e){let{cursor:t,values:n}=o(e),r=[];for(let e=0;e+1<n.length;e+=2)r.push({member:s(n[e]),score:s(n[e+1])});return{cursor:t,items:r}}function d(e){return Array.isArray(e)?e.map(s):[]}function f(e){return Array.isArray(e)?e.flatMap(e=>{if(!Array.isArray(e)||e.length!==2||!Array.isArray(e[1]))return[];let t=e[1],n=[];for(let e=0;e+1<t.length;e+=2)n.push([s(t[e]),s(t[e+1])]);return[{id:s(e[0]),fields:n}]}):[]}function p(e){let t=e.trim();if(!t||!`{["`.includes(t[0]))return null;try{return JSON.stringify(JSON.parse(t),null,2)}catch{return null}}function m(){return`__planche_removed__${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}function h(e){return e===null?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function g(e){let t=[[`d`,86400],[`h`,3600],[`m`,60],[`s`,1]],n=[],r=e;for(let[e,i]of t)if(r>=i&&(n.push(`${Math.floor(r/i)}${e}`),r%=i),n.length===2)break;return n.length?n.join(` `):`0s`}function _(e){let t=e.trim();return t?/[*?[]/.test(t)?t:`*${t}*`:``}function v(e){return e.split(`
1
+ import{F as e}from"./iz6RnRcO.js";var t=e,n=1048576,r={type:e=>`TYPE ${t(e)}`,ttl:e=>`TTL ${t(e)}`,memory:e=>`MEMORY USAGE ${t(e)}`,encoding:e=>`OBJECT ENCODING ${t(e)}`,length(e,n){switch(n){case`string`:return`STRLEN ${t(e)}`;case`hash`:return`HLEN ${t(e)}`;case`list`:return`LLEN ${t(e)}`;case`set`:return`SCARD ${t(e)}`;case`zset`:return`ZCARD ${t(e)}`;case`stream`:return`XLEN ${t(e)}`;default:return null}},getString:(e,n)=>n===void 0?`GET ${t(e)}`:`GETRANGE ${t(e)} 0 ${n-1}`,getJson:e=>`JSON.GET ${t(e)}`,scan(e,n,r,i){return`${n===`hash`?`HSCAN`:n===`set`?`SSCAN`:`ZSCAN`} ${t(e)} ${r}${i?` MATCH ${t(i)}`:``} COUNT 200`},listRange:(e,n)=>`LRANGE ${t(e)} ${n} ${n+200-1}`,streamRange:(e,n)=>`XREVRANGE ${t(e)} ${n?t(`(${n}`):`+`} - COUNT 200`,setString:(e,n)=>`SET ${t(e)} ${t(n)} KEEPTTL`,setStringWithTtl:(e,n,r)=>`SET ${t(e)} ${t(n)}${r&&r>0?` EX ${r}`:``}`,setJson:(e,n)=>`JSON.SET ${t(e)} $ ${t(n)}`,hashSet:(e,n,r)=>`HSET ${t(e)} ${t(n)} ${t(r)}`,hashDelete:(e,n)=>`HDEL ${t(e)} ${t(n)}`,listSet:(e,n,r)=>`LSET ${t(e)} ${n} ${t(r)}`,listPush:(e,n,r)=>`${r?`LPUSH`:`RPUSH`} ${t(e)} ${t(n)}`,listRemoveOne:(e,n)=>`LREM ${t(e)} 1 ${t(n)}`,setAdd:(e,n)=>`SADD ${t(e)} ${t(n)}`,setRemove:(e,n)=>`SREM ${t(e)} ${t(n)}`,zsetAdd:(e,n,r)=>`ZADD ${t(e)} ${t(r)} ${t(n)}`,zsetRemove:(e,n)=>`ZREM ${t(e)} ${t(n)}`,streamAdd:(e,n)=>`XADD ${t(e)} * ${n.map(([e,n])=>`${t(e)} ${t(n)}`).join(` `)}`,streamDelete:(e,n)=>`XDEL ${t(e)} ${t(n)}`,expire:(e,n)=>`EXPIRE ${t(e)} ${n}`,persist:e=>`PERSIST ${t(e)}`,renameIfFree:(e,n)=>`RENAMENX ${t(e)} ${t(n)}`,remove:e=>`UNLINK ${t(e)}`};function i(e){if(e==null||typeof e==`object`)return null;let t=Number(e);return Number.isFinite(t)?t:null}function a(e){let t=i(e);return t===-2?`gone`:t===null||t<0?null:t}function o(e){if(!Array.isArray(e)||e.length!==2||!Array.isArray(e[1]))throw Error(`Unexpected scan reply`);return{cursor:String(e[0]),values:e[1]}}var s=e=>e==null?``:String(e);function c(e){let{cursor:t,values:n}=o(e),r=[];for(let e=0;e+1<n.length;e+=2)r.push({field:s(n[e]),value:s(n[e+1])});return{cursor:t,items:r}}function l(e){let{cursor:t,values:n}=o(e);return{cursor:t,items:n.map(s)}}function u(e){let{cursor:t,values:n}=o(e),r=[];for(let e=0;e+1<n.length;e+=2)r.push({member:s(n[e]),score:s(n[e+1])});return{cursor:t,items:r}}function d(e){return Array.isArray(e)?e.map(s):[]}function f(e){return Array.isArray(e)?e.flatMap(e=>{if(!Array.isArray(e)||e.length!==2||!Array.isArray(e[1]))return[];let t=e[1],n=[];for(let e=0;e+1<t.length;e+=2)n.push([s(t[e]),s(t[e+1])]);return[{id:s(e[0]),fields:n}]}):[]}function p(e){let t=e.trim();if(!t||!`{["`.includes(t[0]))return null;try{return JSON.stringify(JSON.parse(t),null,2)}catch{return null}}function m(){return`__planche_removed__${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}function h(e){return e===null?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function g(e){let t=[[`d`,86400],[`h`,3600],[`m`,60],[`s`,1]],n=[],r=e;for(let[e,i]of t)if(r>=i&&(n.push(`${Math.floor(r/i)}${e}`),r%=i),n.length===2)break;return n.length?n.join(` `):`0s`}function _(e){let t=e.trim();return t?/[*?[]/.test(t)?t:`*${t}*`:``}function v(e){return e.split(`
2
2
  `).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.search(/\s/);return t===-1?[e,``]:[e.slice(0,t),e.slice(t).trim()]})}export{r as a,c,f as d,a as f,i as h,g as i,d as l,p as m,_ as n,m as o,u as p,h as r,v as s,n as t,l as u};
@@ -1,4 +1,4 @@
1
- var e={reconnecting:`再接続中…`,dropSqlite:`ドロップして SQLite ファイルを開く`,dropSqliteHint:`WebAssembly でブラウザ内に開かれ、ファイルはお使いのコンピューターから出ません。-wal ファイルがあれば一緒にドロップしてください。`,dropFailedTitle:`ドロップしたファイルを開けませんでした`,dropNotSqlite:`{{name}} は SQLite データベースファイルではありません。`,crashTitle:`問題が発生しました`,crashBody:`予期しないエラーが発生しました。再読み込みすると接続とタブは復元されますが、保存していないグリッドの編集は失われます。`,crashReload:`再読み込み`,dialogFailed:`ダイアログを開けませんでした: {{message}}`},t={auto:`システムの言語({{name}})`,en:`English`,ko:`한국어`,zh:`中文(简体)`,ja:`日本語`,de:`Deutsch`,fr:`Français`},n={title:`安全設定`,description:`意図しないデータ損失を防ぐためのガードレールです。読み取り専用、環境カラー、トランザクションモードは接続ごとに設定します。`,language:`言語`,languageHint:`すぐに反映されます。「システム言語」はブラウザの設定に従います。`,resetDefaults:`デフォルトに戻す`,done:`完了`,analytics:`匿名の使用統計を送信する`,analyticsHint:`匿名の使用イベント(エンジン、機能、文の種類)を Google Analytics に送信します。SQL 本文、ホスト名、テーブル名やユーザー名は送信しません。`,analyticsUnavailableHint:`このビルドでは無効です(測定 ID 未設定)。`,persistHistory:`再読み込み後もクエリ履歴を保持`,persistHistoryHint:`文のテキストがこのブラウザに保存されます (パスワードのリテラルはマスク、開いているエディタタブ自体は常に保持)。オフにすると履歴とスナップショットはタブを閉じるまでのみ保持されます。`,ai:{intro:`失敗した文や遅いプランの理由をモデルに尋ねられます。質問はこのアプリで組み立てられ、ローカルエージェントが下記のプロバイダへ送ります — SQL やスキーマが planche.dev に届くことはありません。`,provider:`プロバイダ`,openaiCompatible:`OpenAI 互換`,model:`モデル`,baseUrl:`ベース URL`,baseUrlHint:`空欄ならプロバイダ既定のエンドポイントを使います。OpenAI 互換サーバーなら何でも動きます — Azure、OpenRouter、ローカルの Ollama。`,key:`API キー`,keyHint:`ローカルエージェントに渡され、そこで使われます。このブラウザには保存されず、planche.dev にも送られません。`,remember:`このマシンにキーを記憶する`,rememberHint:`{{path}} に本人だけが読める形で書き込みます。チェックしない場合、キーは実行中のエージェント内にのみ存在し、停止すると消えます。`,save:`保存`,forget:`キーを削除`,saved:`保存しました。`,none:`キーは未設定です。`,configuredSession:`今回のエージェントセッションのみ有効なキーが設定されています。`,configuredFile:`{{path}} にキーが保存されています。`,configuredEnv:`このエージェントの AI 設定は環境変数由来のため、ここでは変更できません。`,unreachable:`エージェントに接続できないため、AI 設定を変更できません。`,title:`AI による説明`,description:`失敗やプランをどのモデルが説明し、誰のキーで支払うか。`,cli:`ローカル CLI(キー不要)`,cliCommand:`コマンド`,cliHint:`このマシンに導入済みでサインイン済みのエージェント CLI を実行するため、入力するキーはありません。失敗やプランの説明に使えます。AI パネルにはツールを呼べる provider が必要です。`,cliNone:`このマシンにエージェント CLI が見つかりません。Claude Code か Codex を入れるか、別の provider を選んでください。`,profile:`Anthropic(このマシンのログイン)`,profileHint:"このマシンが既にサインイン済みの資格情報を使います。`ant auth login` の後は SDK が自動で見つけます。貼り付けるものはなく、ローカル CLI と違い本物の API なので AI パネルも動きます。",profileNone:"このマシンに Anthropic の資格情報が見つかりません。`ant auth login` を実行するか、キーを設定してください。",configuredChoice:`{{provider}} を使用中 — キーは保持せず、選択は {{path}} に保存されます。`},query:{title:`クエリ`,description:`文をどう実行するか: F9 が何を走らせ、何行返し、何を先に確認するか。`},general:{title:`一般`,description:`言語、再読み込みを越えて残るもの、そしてこのマシンを離れるもの。`}},r={settings:{safety:`安全設定…`,language:`言語`,title:`設定`,theme:`テーマ`,query:`クエリ…`,general:`一般…`,ai:`AI…`},help:{gettingStarted:`はじめに`,about:`Planche について`,title:`ヘルプ`,documentation:`ドキュメント`,learn:`SQL を学ぶ`,terms:`利用規約`,license:`ライセンス`,support:`お問い合わせ`,mcp:`AI エージェントを接続 (MCP)…`,privacy:`プライバシーポリシー`,whatsNew:`新機能`},connection:{title:`接続`,connect:`接続`,disconnect:`切断`,readOnly:`読み取り専用`,manualTransactions:`手動トランザクション`,saveDatabaseFile:`データベースファイルを保存`,saveDatabaseFileBlocked:`データベースファイルを保存(先に -wal を読み込んでください)`,exit:`終了`,sync:`接続の同期`},query:{title:`クエリ`,execute:`実行`,executeStatementAtCursor:`カーソル位置のステートメントを実行`,executeWholeScript:`スクリプト全体を実行`,newQueryTab:`新しいクエリタブ`,findReplace:`検索と置換`,localHistory:`ローカル履歴…`,explainPlan:`実行計画を表示`,explainAnalyze:`実行計画を実測 (文を実際に実行)`,structure:`クエリ構造`},edit:{title:`編集`,undo:`元に戻す`,redo:`やり直す`,cut:`切り取り`,copy:`コピー`,paste:`貼り付け`,selectAll:`すべて選択`},database:{title:`データベース`,create:`データベースを作成`,alter:`データベースを変更`,drop:`データベースを削除`,copy:`データベースをコピー`,compare:`スキーマを比較…`,truncate:`データベースを空にする`,compareData:`データを比較…`,groupBy:`グループ集計…`},table:{title:`テーブル`,create:`テーブルを作成`,alter:`テーブルを変更`,drop:`テーブルを削除`,rename:`テーブル名を変更`,truncate:`テーブルを空にする`,duplicateStructure:`テーブル構造を複製`},export:{title:`エクスポート`,csv:`CSV としてダウンロード`,tsv:`TSV でダウンロード`,schemaHtml:`スキーマを HTML に出力`,links:`列リンクをエクスポート…`,importLinks:`列リンクをインポート…`},tools:{title:`ツール`,userManager:`ユーザー管理`,processList:`プロセス一覧`,variables:`変数`,status:`ステータス`,flush:`フラッシュ`,quickCommand:`クイックコマンド`,viewErd:`ERD を表示`,scratchpad:`スクラッチパッド(ブラウザ内 SQLite)`,federated:`統合クエリ(接続をまたぐ結合)…`,federatedTab:`統合クエリ {{n}}`,ai:`AI アシスタント`},messages:{databaseFileSaved:`データベースファイルを保存しました`,databaseExported:`データベースをダウンロードとしてエクスポートしました`,databaseExportedWithReason:`データベースをダウンロードとしてエクスポートしました — {{reason}}`,errorSavingDatabase:`データベースの保存中にエラーが発生しました: {{message}}`,noDatabaseSelected:`データベースが選択されていません`,noTableSelected:`テーブルが選択されていません`,noActiveConnection:`アクティブな接続がありません`,databaseDropped:`データベース "{{database}}" を削除しました`,errorDroppingDatabase:`データベースの削除中にエラーが発生しました: {{message}}`,noTablesInDatabase:`データベース "{{database}}" にテーブルが見つかりません`,databaseTruncated_other:`"{{database}}" の {{count}} 個のテーブルをすべて空にしました`,errorTruncatingDatabase:`データベースを空にする際にエラーが発生しました: {{message}}`,tableDropped:`テーブル "{{table}}" を削除しました`,errorDroppingTable:`テーブルの削除中にエラーが発生しました: {{message}}`,tableTruncated:`テーブル "{{table}}" を空にしました`,errorTruncatingTable:`テーブルを空にする際にエラーが発生しました: {{message}}`,renameTablePrompt:`テーブル "{{table}}" の新しい名前:`,tableRenamed:`テーブル "{{table}}" の名前を "{{newName}}" に変更しました`,errorRenamingTable:`テーブル名の変更中にエラーが発生しました: {{message}}`,truncateDatabaseTitle:`"{{name}}" のすべてのテーブルを空にしますか?`,truncateDatabaseDescription:`"{{name}}" の {{count}} 個のテーブルのすべての行が削除されます。テーブル構造は保持されます。この操作は元に戻せません。`,truncateDatabaseConfirm:`すべてのテーブルを空にする`,renameTableTitle:`テーブル名の変更`,renameTableConfirm:`名前を変更`,noLinksToExport:`エクスポートする列リンクがありません。`,linksExported:`列リンク {{count}} 件をエクスポートしました。`,linksImported:`列リンク {{count}} 件をインポートしました。`,linksImportedPartial:`列リンク {{count}} 件をインポートしました。一致するプロファイルなし: {{profiles}}`,linksImportFailed:`列リンクをインポートできませんでした: {{reason}}`}},i={title:`Planche について`,tagline:`MySQL、MariaDB、PostgreSQL、SQLite 向けのデータベースクライアントです。`,version:`バージョン`,website:`ウェブサイト`,licenses:`ライセンス`,licensesLink:`サードパーティ通知`,disclaimer:`Planche は「現状のまま」提供され、いかなる保証もありません。作者は本ソフトウェアの使用によって生じた損害やデータ損失について一切の責任を負いません。破壊的なステートメントを実行する前にデータをバックアップしてください。`,rights:`All rights reserved.`,legal:`規約`,terms:`利用規約`,privacy:`プライバシー`,refund:`返金`},a=JSON.parse('{"dialog":{"title":"データベースに接続","firstQueryTab":"クエリ 1","colHostName":"接続名","colTarget":"接続先","colDbms":"DBMS","noSaved":"保存された接続はありません","unnamed":"(名前なし)","pickOnConnect":"(接続時に選択)","noFile":"(ファイルなし)","selectPrompt":"接続を選択するか、新しく追加してください","addNew":"新規追加","delete":"削除","testConnection":"接続テスト","connect":"接続","close":"閉じる","unknownError":"不明なエラー","browserTestHint":"ブラウザ内 SQLite 接続は、「接続」をクリックするとローカルファイルを開きます。","testSuccess":"接続に成功しました","restoredUnsaved":"{{file}}: キャッシュされたコピーから未保存の変更を復元しました","restoredUnsavedDiskChanged":"{{file}}: キャッシュされたコピーから未保存の変更を復元しました — ディスク上のファイルはその後変更されています","walPending":"{{file}} は WAL モードです: 最近の変更が -wal ファイルに残っている可能性があります。上の「-wal ファイルを読み込む」で取り込んでください。","walApplied":"{{file}} を -wal の変更を適用して開きました","connectFailedTitle":"接続に失敗しました","testSuccessDescription":"サーバーが認証情報を受け付けました。","testFailedTitle":"接続テストに失敗しました","privacy":"ここに入力した情報が planche.dev のサーバーに送信・保存されることはありません。接続プロファイルはこのブラウザのローカルストレージにのみ保存され、クエリはローカルエージェントからデータベースへ直接送られます。","hostKeyTitle":"不明な SSH ホスト鍵","hostKeyDescription":"{{host}}:{{port}} がフィンガープリント {{fingerprint}} の {{type}} 鍵を提示しました。サーバー管理者から受け取ったフィンガープリントと照合してください。誤った鍵を受け入れると攻撃者に通信を読まれます。","hostKeyAccept":"このホストを信頼する","gatewayTitle":"ゲートウェイのプロファイル","gatewayAdd":"追加","gatewayAdded":"ゲートウェイのプロファイル {{name}} を追加しました。","gatewayReadOnly":"読み取り専用","gatewayWritable":"書き込み可","gatewayProfileHint":"この接続はゲートウェイが保持するプロファイル「{{name}}」を使います。ここで設定するものはありません。","gatewayLoadFailed":"ゲートウェイのプロファイルを読み込めませんでした: {{error}}","export":"エクスポート…","exportWithoutSecrets":"パスワードを含めない","exportWithSecrets":"パスワードと鍵を含める","import":"インポート…","exported":"接続「{{name}}」をエクスポートしました。","imported":"接続「{{name}}」をインポートしました。","importFailedTitle":"接続をインポートできませんでした"},"form":{"hostName":"接続名","hostNamePlaceholder":"My Connection","dataSource":"データソース","openVia":"開く方法","viaBrowser":"ブラウザ(ローカルファイル)","viaAgent":"ローカルエージェント","viaBrowserHint":"インストール不要です。他のプログラムが使用していないファイルに最適です: ブラウザはメモリ上のコピーで作業し、ファイルをロックできないため、開いている間に他で行われた編集は反映されず、保存時に上書きされます。","viaAgentHint":"npx planche 経由で SQLite 自体がファイルを開きます — 適切なロックと WAL に対応し、同じデータベースを使う他のプログラムと安全に共存できます。","databaseFile":"データベースファイル","changeFile":"ファイルを変更","filePickerHint":"「接続」をクリックするとファイル選択ダイアログが開きます(ヒント: ⌘⇧. で隠しファイルを表示、⌘⇧G でパスを入力できます)。","fileRememberedHint":"選択したファイルは記憶される(Chromium)ため、再接続時は権限の確認のみ行われます。変更を書き戻すには「接続 > データベースファイルを保存」を使用してください。","authToken":"認証トークン","authTokenPlaceholder":"空欄でペアリング済みのエージェントトークンを使用","filePathPlaceholder":"/path/to/database.sqlite または :memory:","createIfMissing":"存在しない場合は作成","createIfMissingHint":"パスはトンネリングサーバーのホスト上で解決されます","host":"ホスト","port":"ポート","database":"データベース","serviceName":"サービス名","user":"ユーザー","password":"パスワード","savePassword":"パスワードを保存","savePasswordHint":"オフ: パスワードはこのブラウザセッションの間だけ保持され、ディスクには書き込まれません。","charset":"文字セット","autoConnection":"自動接続","safety":"安全設定","environment":"環境","environmentHint":"タブとワークスペースに色を付けます","readOnly":"読み取り専用","readOnlyHint":"データやスキーマを変更するステートメントを拒否します","transactions":"トランザクション","txAuto":"自動コミット","txManual":"手動 — ツールバーからコミット / ロールバック","ssh":"SSH","sshTunnel":"SSHトンネル","sshTunnelHint":"SSH踏み台ホスト経由でデータベースに接続します(ローカルエージェントがトンネルを開きます)","sshHost":"SSHホスト","sshPort":"SSHポート","sshUser":"SSHユーザー","sshAuth":"SSH認証","sshAuthKey":"秘密鍵","sshAuthPassword":"パスワード","sshAuthAgent":"ssh-agent","sshAuthAgentHint":"npx planche を実行しているマシンの ssh-agent に読み込まれた鍵を使用します(SSH_AUTH_SOCK)。","sshPassword":"SSHパスワード","sshKey":"秘密鍵","sshKeyPick":"鍵ファイルを選択…","sshKeyLoaded":"鍵を読み込み済み","sshKeyHint":"空ならエージェントのマシンの ~/.ssh/config の IdentityFile(または ~/.ssh/id_*)を使用します。選択した鍵はこのプロファイルと共に保存されます","sshPassphrase":"パスフレーズ","sshPassphrasePlaceholder":"鍵にパスフレーズがなければ空のまま","sshSecretsHint":"SSH のパスワード・秘密鍵・パスフレーズは上の「パスワードを保存」設定に従います。不明なホスト鍵は初回接続前に確認用に表示され、エージェントのマシンの ~/.planche/known_hosts に保存されます。","sshHostPlaceholder":"bastion.example.com または ~/.ssh/config の Host エイリアス","sshUserPlaceholder":"空なら ~/.ssh/config の User を使用","sshTargetHint":"DB のホスト/ポートは踏み台ホスト側で解決されます — localhost やローカルポートフォワードではなく、DB の実際のアドレス(例: RDS エンドポイント)を入力してください。","connectionString":"接続文字列","connectionStringApplied":"下のフィールドに反映しました。文字列自体は保存されず、フィールドのみ保存されます。","connectionStringInvalid":"PostgreSQL URI ではありません (postgresql://user:password@host/database の形式)。","neonHint":"Neon コンソール (Connect > Connection string) の URI を貼り付けると、下のフィールドが埋まります。","supabaseHint":"Supabase (Connect > Session pooler または Direct connection) の URI を貼り付けると、下のフィールドが埋まります。","supabasePoolerWarning":"ポート 6543 はトランザクションモードのプーラーです。文ごとに別のバックエンドで実行される可能性があるため、スキーマの切り替え、一時テーブル、プリペアドステートメント、手動トランザクションは動作しません。セッションプーラー (ポート 5432) か直接接続を使ってください。","managedTlsHint":"このサービスへは常に TLS で接続し、ローカルエージェントからサービスへ直接接続します (SSH トンネルなし)。","d1AccountId":"Account ID","d1DatabaseId":"Database ID","d1ApiToken":"API トークン","d1Hint":"Account ID: Cloudflare ダッシュボードのアカウントホーム右側。Database ID: Storage & Databases > D1 > データベース。トークン: My Profile > API Tokens > Create Token で \\"D1 Edit\\" 権限 (読み取り専用は \\"D1 Read\\")。ローカルエージェントがこのトークンで Cloudflare API を呼び出します。","d1LimitsHint":"D1 はリクエストごとに独立して実行され自動コミットされるため、手動トランザクションは使えません。データベースは \\"main\\" スキーマ 1 つとして表示されます。","doDevUrl":"wrangler dev URL","doHint":"Worker プロジェクトで `wrangler dev` を実行し、表示された URL を入力してください (既定のポートは 8787)。ローカルエージェントがそのセッションの Durable Object を読み取ります。同時に動作している他の `wrangler dev` セッションも表示されます。","doLimitsHint":"ローカル開発専用です。デプロイ済みの Durable Object は Worker からしかアクセスできず、Cloudflare は照会 API を提供していません。各オブジェクトは \\"<名前空間>/<オブジェクト>\\" というデータベースとして表示され、リクエストごとに自動コミットされるため手動トランザクションは使えません。","tls":"TLS","tlsEnable":"接続を暗号化","tlsVerify":"サーバー証明書を検証","tlsVerifyHint":"オフ: 自己署名証明書も受け入れます (暗号化はされますがサーバーは認証されません)。SSH トンネル経由では使えません。","d1DevUrl":"ローカル開発 URL","d1DevUrlHint":"空にすると Cloudflare アカウント経由で接続します。入力すると、このマシンで `wrangler dev` が動かしているデータベースを直接読みます — アカウントも API トークンも不要で、下のアカウント欄は無視されます。開発サーバーの D1 が 1 つだけなら Database ID は空のままで構いません。","d1PickDatabase":"データベースを選択","searchAuthHint":"ユーザーとパスワードで Basic 認証します。ユーザーを空にするとパスワードを API キー(エンコード済み id:key)として送信します。"},"agent":{"copy":"コピー","looking":"Planche エージェントを探しています…","online":"エージェント <b>v{{version}}</b> が <mono>{{url}}</mono> で実行中です","outdated":"エージェント v{{version}} はプロトコル {{protocol}} を使用していますが、このアプリにはより新しいものが必要です。<cmd/> で再起動してください","unauthorized":"エージェント <b>v{{version}}</b> が <mono>{{url}}</mono> で実行中ですが、このアプリとペアリングされていません(トークンは起動のたびに変わります)。エージェントのターミナルに表示されたリンクを開くか、「設定」でトークンを貼り付けてください。","offline":"<mono>{{url}}</mono> にエージェントがありません。ターミナルで起動してください — ペアリング済みの状態でこのアプリが開きます。","close":"閉じる","configure":"設定","checkAgain":"再確認","urlLabel":"エージェント URL","urlPlaceholder":"http://127.0.0.1:8888(デフォルト)","tokenLabel":"トークン","tokenPlaceholder":"エージェントが表示したもの","reset":"リセット","save":"保存","remoteWarning":"このエージェントはお使いのコンピューター上にありません ({{host}}): すべての接続のパスワードと SSH 鍵がそこへ送られます。","remoteRefusedTitle":"リモートエージェントは使用できません","remoteRefused":"エージェントはこのコンピューター (127.0.0.1 または localhost) 上で実行する必要があります。別のマシンのエージェントを使うには `ssh -L 8888:127.0.0.1:8888 user@host` でポートを転送し、URL は http://127.0.0.1:8888 のままにしてください。","gateway":"ゲートウェイ「{{name}}」: サーバー側プロファイル {{count}} 件。認証情報はゲートウェイにのみあります。下からプロファイルを選んでください。"},"tab":{"noConnections":"開いている接続はありません。「接続」を押して始めてください。","theSqliteFile":"SQLite ファイル","reopened":"{{file}} を再度開きました","reopenFailed":"ファイルを再度開けませんでした: {{message}}","reopenPrompt":"<b>{{file}}</b> を読み取るには、ブラウザの許可が再度必要です。","reopenFile":"ファイルを再度開く","closeConnection":"接続を閉じる","reconnected":"{{file}} に再接続しました","accessNotGranted":"ファイルへのアクセスが許可されませんでした。保存時はダウンロードとしてエクスポートします。","detachedPrompt":"<b>{{file}}</b> のキャッシュされたコピーで作業しています。変更をその場で保存するにはファイルを再接続してください。","reconnectFile":"ファイルを再接続","detachedHide":"非表示(保存時に必要に応じてファイルを求めます)","walFramesApplied_other":"{{file}}-wal から {{count}} 個の WAL フレームを適用しました","walNoChanges":"-wal ファイルにコミット済みの変更はありませんでした","walLoadFailed":"-wal ファイルを読み込めませんでした: {{message}}","walPrompt":"<b>{{file}}</b> は WAL モードです: <mono>{{file}}-wal</mono> ファイルを読み込むまで最新のデータが表示されない場合があり、それまで保存は無効です。隣にそのようなファイルがない場合(データベースが正常に閉じられた場合)は、代わりにその旨を確認してください。他のプログラムがまだこのデータベースを使用している場合は、代わりにローカルエージェント(<mono>npx planche</mono>)経由で開いてください: ブラウザはファイルを安全に共有できません。","loadWal":"-wal ファイルを読み込む","noWalHint":"確認済み: データベースの隣に -wal ファイルはありません","noWal":"-wal ファイルなし","dismiss":"閉じる","walHide":"非表示(保存は無効のまま)","readOnlyBadge":"読み取り専用"}}'),o={connect:`接続 (Alt+N)`,disconnect:`切断`,newQueryTab:`新しいクエリタブ (Alt+T)`,execute:`実行 (F9)`,executeStatement:`カーソル位置 / 選択範囲のステートメントを実行 (Ctrl+Enter)`,commit:`コミット`,commitHint:`開いているトランザクションをコミットします`,noOpenTransaction:`開いているトランザクションはありません`,rollback:`ロールバック`,rollbackHint:`開いているトランザクションを破棄します`,readOnlyBadge:`読み取り専用`,readOnlyHint:`この接続はデータやスキーマを変更するステートメントを拒否します`,userManager:`ユーザー管理 (Alt+U)`,quickCommand:`クイックコマンド`,processList:`プロセス一覧`,variables:`変数`,status:`ステータス`,flush:`フラッシュ`,fullscreen:`全画面表示`},s={readOnly:`読み取り専用`,txOpen:`トランザクション中`,manualTx:`手動トランザクション`},c={title:`クイックコマンド`,description:`実行するコマンドを検索...`,inputPlaceholder:`コマンドを入力または検索...`,empty:`コマンドが見つかりません。`,groups:{connection:`接続`,query:`クエリ`,database:`データベース`,table:`テーブル`,tools:`ツール`},commands:{connect:`接続`,disconnect:`切断`,executeQuery:`クエリを実行`,newQueryTab:`新しいクエリタブ`,createDatabase:`データベースを作成`,dropDatabase:`データベースを削除`,createTable:`テーブルを作成`,alterTable:`テーブルを変更`,dropTable:`テーブルを削除`,processList:`プロセス一覧`,serverVariables:`サーバー変数`,serverStatus:`サーバーステータス`,flush:`フラッシュ`,userManager:`ユーザー管理`}},l={title:`Planche へようこそ`,intro:`ブラウザで動作する SQL クライアントです。データベースにはお使いのマシン上の小さなエージェントを通じてアクセスするため、認証情報やデータがコンピューターの外に出ることはありません。`,skip:`スキップ`,skipTitle:`この画面を非表示にします(「ヘルプ > はじめに」で再表示できます)`,copy:`コピー`,copied:`コピーしました`,sampleOpenFailed:`サンプルデータベースを開けませんでした: {{message}}`,steps:{agent:{title:`ローカルエージェントを実行する`,body:`ターミナルで次のいずれかを実行します。エージェントが起動し、このページとペアリングされます。`},connection:{title:`接続を追加する`,body:`データベースを選ぶと、適切なデフォルト値で接続フォームが開きます。`},sample:{title:`手元にデータベースがない場合はサンプルをお試しください`,body:`サンプルのウェブショップデータベース(24 テーブル、約 5 万行、ビューとトリガー)をブラウザに読み込み、エディター、グリッド、スキーマツリーを試せます。`,loading:`サンプルを読み込み中…`,button:`サンプルデータベースを試す`}},terms:{title:`はじめる前に`,local:`すべてローカルで動作します。認証情報、クエリ、結果はお使いのコンピュータにのみ保存され、当方へ送信されることはありません。`,asIs:`Planche は現状有姿で提供され、いかなる保証もありません。安全機能(破壊的操作の確認、読み取り専用モード)は補助的なものであり、保証ではありません。`,dataLoss:`Planche を通じて実行されるすべての文の責任はユーザーにあります。破壊的な操作を行う前に必ずデータをバックアップしてください。`,agree:`利用規約を読み、同意します。`,accepted:`利用規約に同意済みです。`,readFull:`規約の全文を読む`}},u={treeLabel:`スキーマ`,unreachableHint:`この接続に紐付いたデータベースではありません。閲覧するにはそのデータベース用のプロファイルを作成してください`,objectType:{table:`テーブル`,view:`ビュー`,procedure:`プロシージャ`,function:`関数`,trigger:`トリガー`,event:`イベント`},menu:{showCreate:`{{type}}の CREATE 文を表示`,alter:`{{type}}を変更`,drop:`{{type}}を削除`,create:`{{type}}を作成`,refresh:`更新`,unreachable:`このデータベースを閲覧するには、これに紐付いたプロファイルで接続してください`,openDatabase:`データベースを開く`,createSchema:`スキーマを作成…`,createTable:`テーブルを作成`,dropDatabase:`データベースを削除`,openSchema:`スキーマを開く`,dropSchema:`スキーマを削除`,newQueryTab:`新しいクエリタブ`,generateSql:`SQL を生成`,openTable:`テーブルを開く`,alterTable:`テーブルを変更`,showCreateTable:`CREATE TABLE 文を表示`,duplicateStructure:`構造を複製`,copyTable:`別の場所へテーブルをコピー…`,compare:`{{type}}を比較…`,truncateTable:`テーブルを空にする`,dropTable:`テーブルを削除`,exportCsv:`CSV にエクスポート`,exportTsv:`TSV でエクスポート…`,openView:`ビューを開く`,alterView:`ビューを変更`,showCreateView:`CREATE VIEW 文を表示`,dropView:`ビューを削除`,compareData:`データを比較…`,groupBy:`グループ集計…`,copyKey:`キー名をコピー`,openKey:`開く`,copyName:`名前をコピー`},actions:{createStatementUnavailable:`-- {{type}} {{name}} の CREATE 文を取得できませんでした`,getCreateFailed:`CREATE {{type}} の取得に失敗しました: {{message}}`,createTabTitle:`{{type}}を作成`,createSchemaTabTitle:`スキーマを作成`,generateSqlFailed:`SQL を生成できませんでした: {{message}}`,dropTableTitle:`テーブル "{{name}}" を削除しますか?`,dropTableDescription:`{{from}}テーブルとそのすべての行が完全に削除されます。この操作は元に戻せません。`,dropTableConfirm:`テーブルを削除`,dropObjectTitle:`{{type}} "{{name}}" を削除しますか?`,dropObjectDescription:`{{from}}{{type}}の定義が削除されます。この操作は元に戻せません。`,dropObjectConfirm:`{{type}}を削除`,fromDatabase:`データベース "{{database}}" から`,dropped:`{{type}} {{name}} を削除しました`,dropFailed:`{{type}}の削除に失敗しました`,dropDatabaseTitle:`データベース "{{name}}" を削除しますか?`,dropDatabaseDescription:`データベースとそのすべてのテーブルおよびデータが完全に削除されます。この操作は元に戻せません。`,dropDatabaseConfirm:`データベースを削除`,droppedDatabase:`データベース {{name}} を削除しました`,dropDatabaseFailed:`データベースの削除に失敗しました`,dropSchemaTitle:`スキーマ "{{name}}" を削除しますか?`,dropSchemaDescription:`スキーマとそのすべてのテーブルおよびデータが完全に削除されます。この操作は元に戻せません。`,dropSchemaConfirm:`スキーマを削除`,droppedSchema:`スキーマ {{name}} を削除しました`,dropSchemaFailed:`スキーマの削除に失敗しました`,truncateTitle:`テーブル "{{name}}" を空にしますか?`,truncateDescription:`"{{name}}" のすべての行が削除されます。テーブル構造は保持されます。この操作は元に戻せません。`,truncateConfirm:`テーブルを空にする`,truncated:`{{name}} を空にしました`,truncateFailed:`テーブルを空にできませんでした`},tree:{loadDatabasesFailed:`データベースの読み込みに失敗しました: {{message}}`},root:{newQuery:`新しいクエリタブ`,newConsole:`新しいコンソールタブ`,createIndex:`インデックスを作成…`,clusterHealth:`クラスターの状態`,nodes:`ノード一覧`,shards:`シャード一覧`,templates:`インデックステンプレート`},topology:{cluster:`この Redis はクラスターのノードです。Planche はこのノードのキーのみ表示し、クラスターのリダイレクトにはまだ対応していません。`}},d={editor:{destructiveMarker:`破壊的操作: {{what}}`,readOnlyMarker:`接続は読み取り専用です。このステートメントはデータまたはスキーマを変更します`,actionExecute:`実行(設定に従う)`,actionExecuteStatement:`カーソル位置 / 選択範囲のステートメントを実行`,actionExecuteScript:`スクリプト全体を実行`,actionExplainPlan:`実行計画を表示`,actionQueryStructure:`クエリ構造`},tabs:{newQuery:`新しいクエリ`,queryTitle:`クエリ {{n}}`,erdViewer:`ERD ビューアー`,close:`閉じる`,closeOthers:`他のタブを閉じる`,closeLeft:`左側のタブを閉じる`,closeRight:`右側のタブを閉じる`,closeAll:`すべて閉じる`},executor:{noActiveConnection:`アクティブな接続がありません`,uncommittedTitle:`未コミットのトランザクション`,uncommittedDescription:`この接続には開いているトランザクションがあります。切断するとその変更はロールバックされます。`,uncommittedConfirm:`ロールバックして切断`,unsavedTitle:`未保存の変更`,unsavedDescription:`{{file}} にはファイルに保存されていない変更があります。切断するとそれらは破棄されます(保持するには先に「接続 > データベースファイルを保存」を使用してください)。`,theSqliteDatabase:`SQLite データベース`,unsavedConfirm:`破棄して切断`}},f=JSON.parse('{"tabs":{"message":"メッセージ","info":"情報","history":"履歴","result":"結果","resultN":"結果 {{n}}","plan":"実行計画","structure":"構造","structureN":"構造 {{n}}"},"message":{"executing":"クエリを実行中...","error":"エラー: {{message}}","total":"(合計: {{ms}}ms)","ready":"準備完了。","log":"実行ログ","statementN":"文 {{n}}","limitedBadge":"上限到達","insertId":"insert id {{id}}","failed":"失敗","failedStatement":"失敗した文","summary":"成功 {{ok}} · 失敗 {{failed}} · 合計 {{ms}}","copy":"コピー","copied":"コピー済み","showSql":"SQL を表示","hideSql":"SQL を隠す"},"hints":{"title":"ヒント","unknownColumn":"{{name}} という列はありません。{{suggestions}} ではありませんか?","unknownTable":"{{name}} というテーブルはありません。{{suggestions}} ではありませんか?","syntaxSwap":"{{engine}} では {{found}} ではなく {{expected}} を使います。","doubleQuotedLiteral":"{{engine}} は \\"{{value}}\\" を文字列ではなく列名として読みます。文字列は \'{{value}}\' と書きます。"},"ai":{"title":"AI による説明","explain":"AI に説明してもらう","thinking":"失敗を読んでいます…","by":"{{model}}","applyFix":"修正文を新しいタブで開く","failed":"説明できませんでした: {{message}}","noFailure":"説明する失敗した文がありません。","noPack":"planche.dev からプロンプトを取得できませんでした。","badShape":"モデルが想定した形式で応答しませんでした。","noPlan":"説明するプランがまだありません。","explainPlan":"このプランを説明してもらう"},"info":{"empty":"クエリ情報はありません。","resultN":"結果 {{n}}","metadata":"クエリのメタデータ","executionTime":"実行時間","notAvailable":"N/A","affectedRows":"影響を受けた行数","fields":"フィールド","fieldDetails":"フィールドの詳細","colName":"名前","colType":"型","colTable":"テーブル","resultSets":"結果セット","rowsReturned":"返された行","insertId":"最後の Insert ID","lastQuery":"最後に実行した文","copy":"コピー","copied":"コピー済み","colOrigin":"元の名前","primaryKey":"主キー","rowsAndFields":"{{rows}}行 × {{fields}}列","noFields":"この文は列を返しませんでした。"},"rowForm":{"colColumn":"列","colValue":"値","insertTitle":"行を追加","editTitle":"行を編集","loading":"列情報を読み込み中...","preview":"実行される文","nothingToWrite":"書き込む内容がありません","insert":"挿入","update":"更新","stageInsert":"保留行として追加","stageEdit":"グリッドに反映","stageHint":"実行せずにグリッドへ値を置き、後で他の編集と一緒にコミットします。","inserted":"{{table}} に行を挿入しました","updated":"{{table}} の行を更新しました","confirmInsertTitle":"{{table}} に行を挿入しますか?","confirmUpdateTitle":"{{table}} の行を更新しますか?","inTransaction":"開いているトランザクション内で実行されます","pickDate":"日付を選択","now":"現在時刻","formatJson":"整形","binaryUnsupported":"バイナリ列はここでは編集できません。NULL/DEFAULT のままにするか SQL で設定してください。","generateUuid":"UUID を生成","defaultValue":"デフォルト値","clickToChange":"クリックして変更","empty":"(空)","autoHint":"サーバーが自動生成","mode":{"keep":"維持","auto":"自動","value":"値"},"invalid":{"integer":"整数を入力してください","unsigned":"この列は負の数を受け付けません","number":"数値を入力してください","json":"不正な JSON","date":"YYYY-MM-DD 形式で入力してください","datetime":"YYYY-MM-DD HH:MM:SS 形式で入力してください","time":"HH:MM:SS 形式で入力してください","length":"最大 {{max}} 文字"}},"history":{"copied":"クリップボードにコピーしました","searchPlaceholder":"履歴を検索...","all":"すべて","success":"成功","failed":"失敗","thisTab":"このタブのみ","noMatch":"一致する項目がありません。","count":"{{count}}件","clear":"消去","clearTitle":"クエリ履歴を消去しますか?","clearDescription":"この接続の {{count}} 件がすべて削除されます。元に戻せません。","clearConfirm":"履歴を消去","insert":"エディターに挿入","inserted":"エディターに挿入しました","copy":"コピー","rows":"{{count}}行","affected":"{{count}}行変更","today":"今日","yesterday":"昨日","empty":"クエリ履歴はありません。"},"json":{"arrayLength":"Array[{{count}}]","keys_other":"{{count}} 個のキー","invalid":"無効な JSON","clickToView":"クリックして JSON を表示","expandAll":"すべて展開","collapseAll":"すべて折りたたむ","edit":"編集","view":"表示","copied":"コピーしました","copy":"コピー","shortcutHint":"{{mod}}+Enter で保存 · Esc でキャンセル","cancel":"キャンセル","save":"保存"},"text":{"clickToView":"クリックしてテキストを表示","size":"{{chars}}文字 · {{lines}}行","wrap":"折り返し","preview":"プレビュー","source":"ソース"},"grid":{"readOnlyConnection":"読み取り専用の接続","readOnlyWal":"読み取り専用: -wal ファイルが読み込まれていません","readOnlyNoPk":"読み取り専用: テーブルに主キーがありません","commitTitle":"{{count}} 件の変更を {{table}} にコミットしますか?","commitDescription":"次のステートメントが実行されます。","commitConfirm":"コミット","rowPrefix":"行 {{row}}:","cancelled":"キャンセルされました","commitFailed":"コミットに失敗しました: {{message}}","executedInTransaction":"開いているトランザクション内で {{count}} 件の変更を実行しました — 確定するにはツールバーの「コミット」を押してください(再読み込みするとロールバックされます)","committed":"{{count}} 件の変更を {{table}} にコミットしました","noData":"表示するデータがありません。","commit":"コミット","discard":"破棄","addRow":"行を追加","removeNewRow":"この新しい行を取り消す","addRowForm":"フォームで追加","addRowFormHint":"列ごとの入力欄を持つフォームを開きます (INSERT としてコミット)","editRowForm":"この行をフォームで編集","addRowHint":"新しい行を追加します(INSERT としてコミット)","delete":"削除","deleteCount":"削除 ({{count}})","deleteHint":"選択した行を削除します(DELETE としてコミット)。行番号の列で行を選択してください。","field":"フィールド","searchPlaceholder":"検索...","orderBy":"並び順","none":"なし","refresh":"更新","dismiss":"閉じる","clearSelection":"選択を解除","columns":"列","showAllColumns":"すべて表示","hideAllColumns":"すべて非表示","resetWidths":"幅をリセット","selectAll":"すべての行を選択","emptyTable":"このテーブルには行がありません。","noRows":"行は返されませんでした。","addARow":"行を追加","markedForDeletion":"削除予定 — クリックで元に戻す","newRow":"新しい行","clickToSelect":"クリックで選択、Shift/Ctrl で複数選択","rows":"行数: {{count}}","rowsWithNew":"行数: {{count}} (+{{added}})","sortedBy":"並び順: {{column}} {{direction}}","pageRange":"{{from}}–{{to}} 行","firstPage":"最初のページ","prevPage":"前のページ","nextPage":"次のページ","lastPage":"最後のページ","pagingBlocked":"ページを移動する前に変更をコミットまたは破棄してください","selected":"{{count}} 件選択中","cellsModified":"{{count}} 個のセルを変更","newCount":"{{count}} 件追加","toDelete":"{{count}} 件削除予定","searchMode":"一致方法","contains":"含む","equals":"一致","followLink":"{{table}} を {{column}} = 値 で開く","linkColumn":"「{{column}}」を別のテーブルにリンク…","editLink":"「{{column}}」のリンクを編集…","removeLink":"リンクを削除","copyValue":"値をコピー","filterByValue":"フィルタ: {{column}} = この値","clearFilter":"フィルタを解除","copyColumnName":"列名をコピー","editCell":"セルを編集","setNull":"NULL に設定","setEmpty":"空文字列に設定","restoreRow":"行を復元","hideColumn":"列「{{column}}」を隠す","copyRowsTsv_other":"{{count}} 行を TSV としてコピー(ヘッダー付き)","copyRowsCsv_other":"{{count}} 行を CSV としてコピー","copyRowsJson_other":"{{count}} 行を JSON としてコピー","copyRowsInsert_other":"{{count}} 行を INSERT 文としてコピー","deleteRowsPending_other":"{{count}} 行を削除(コミットまで保留)","sendRowsToScratchpad_other":"{{count}} 行をスクラッチパッドへ送る","sendAllToScratchpad":"読み込み済みの {{count}} 行すべてをスクラッチパッドへ送る","sentToScratchpad":"{{count}} 行をスクラッチパッドのテーブル {{table}} にコピーしました。","changesSince":"前回の読み込み以降: 変更 {{changed}} · 新規 {{added}} · 消失 {{gone}}","changesToggle":"前回の読み込みからの変更のハイライトを切り替え","changesDismiss":"変更表示を消す","previousValue":"以前の値: {{value}}","groupByValue":"{{column}} でグループ集計","openItem":"{{name}} を開く"},"link":{"title":"列を別のテーブルにリンク","source":"列","hint":"この列の値がリンクになります。クリックすると対象テーブルが一致する行で絞り込まれて開きます。実際の外部キーは自動でリンクされます。","targetDatabase":"対象データベース","targetTable":"対象テーブル","targetColumn":"対象列","pickTable":"テーブルを選択","pickColumn":"列を選択","remove":"リンクを削除","cancel":"キャンセル","save":"リンクを保存","targetConnection":"対象の接続","targetNotConnected":"リンク先の接続が開いていません。先に接続してください。"},"running":{"label":"クエリ実行中…","elapsed":"{{seconds}}秒","stop":"中断","stopping":"中断中…","cannotCancel":"このエンジンは実行中の文を中断できません。","agentOutdated":"ローカルエージェントが古いためクエリを中断できません。`npx planche@latest`(または `planche upgrade`)で更新して再接続してください。","cancelFailed":"エージェントに接続できず、クエリを中断できませんでした。","abandoned":"リクエストの待機を中止しました。このエンジンには取り消し機能がないため、クエリはサーバー側で最後まで実行される場合があります。"},"plan":{"empty":"実行計画を表示 (Ctrl+Shift+E) を実行すると、カーソル位置の文をエンジンがどう処理するかを確認できます。","unreadable":"計画をツリーとして読み取れなかったため、エンジンの出力をそのまま表示します。","estimated":"推定値","analyzed":"実測値","estimatedHint":"オプティマイザの推定値です。文は実行されていません。","analyzedHint":"文を実際に実行しました。行数と時間は実測値です。","totalCost":"最大ノードコスト","totalTime":"最も遅いノード","rows":"推定行数","actualRows":"実際の行数","cost":"コスト","time":"時間","showRaw":"生の出力","showTree":"計画ツリー","selectNode":"ノードを選択すると、エンジンが報告した内容を確認できます。","noDetails":"このノードについて、エンジンからの追加情報はありません。","warnings":{"fullScan":"フルスキャン","noIndex":"インデックスなし","estimateOff":"推定のずれ","temporary":"一時テーブル","filesort":"ソート"},"hints":{"fullScan":"テーブルの全行を読みます。絞り込み列にインデックスがあれば回避できます。","noIndex":"このアクセスに使えるインデックスが見つかりませんでした。","estimateOff":"推定行数が大きく外れています。テーブル統計を更新すると改善することが多いです。","temporary":"次の処理に進む前に、行を一時テーブルに書き出します。","filesort":"インデックスを使わずに並べ替えています。ORDER BY に合うインデックスがあれば不要になります。"}},"structure":{"empty":"クエリ構造を表示 (Ctrl+Shift+G) すると、カーソル位置の文の行がどこから来るか分かります。","notQuery":"SELECT 文のみ構造グラフを描画できます。","unsupported":"{{engine}} の文は構造グラフとして読み取れません。","parseError":"文を解析できませんでした: {{message}}","columns_other":"{{count}} 列","columnsUnknown":"列数不明","fit":"全体に合わせる","reveal":"エディタでこの部分を選択","notDrawn":"未描画: {{what}}","kindTable":"テーブル","kindCte":"CTE","kindCteRef":"参照","kindDerived":"サブクエリ","kindScalar":"スカラー","kindSetop":"集合","kindResult":"結果","fullscreen":"全画面","exitFullscreen":"全画面を終了"},"viewer":{"fullscreen":"全画面","exitFullscreen":"全画面を終了","textTitle":"テキスト値"},"reply":{"table":"表"}}'),p={defaultDescription:`この操作は元に戻せません。`,typeToConfirm:`確認のため <name/> を入力してください`,cancel:`キャンセル`,confirm:`確認`,ok:`OK`},m={dialog:{createTitle:`テーブルを作成`,alterTitle:`テーブルを変更`,duplicateTitle:`テーブル構造を複製`,create:`作成`,alter:`変更`,cancel:`キャンセル`,tableName:`テーブル名`,tableNamePlaceholder:`テーブル名を入力...`,loading:`テーブルスキーマを読み込み中...`,tabSchema:`スキーマ`,tabIndexes:`インデックス`,tabProperties:`プロパティ`,applying:`適用中…`,cannotAlterColumns:`{{engine}} は既存の列の定義を変更できません({{columns}})。列の追加・削除・名前変更とインデックスの変更は可能です。列の定義を変えるにはテーブルを作り直してください。`},schema:{colField:`フィールド名`,colType:`データ型`,colLength:`長さ`,colDefault:`デフォルト`,colPk:`PK`,colNotNull:`Not Null`,colUnsigned:`Unsigned`,colAutoIncrement:`Auto Incr`,colZerofill:`Zerofill`,colComment:`コメント`,empty:`カラムが定義されていません。「カラムを追加」をクリックして追加してください。`,add:`カラムを追加`,remove:`カラムを削除`},indexes:{colName:`インデックス名`,colType:`インデックスの種類`,colColumns:`カラム`,empty:`インデックスが定義されていません。「インデックスを追加」をクリックして追加してください。`,add:`インデックスを追加`,remove:`インデックスを削除`},index:{addTitle:`インデックスを追加`,editTitle:`インデックスを編集`,name:`インデックス名`,namePlaceholder:`インデックス名を入力`,type:`インデックスの種類`,columns:`カラム`,noColumns:`使用できるカラムがありません。先に「スキーマ」タブでカラムを定義してください。`,unnamed:`(名前なし)`,cancel:`キャンセル`,ok:`OK`},properties:{engine:`エンジン`,charset:`文字セット`,collation:`照合順序`,autoIncrement:`Auto Increment`,autoIncrementPlaceholder:`デフォルト`,comment:`コメント`},info:{engine:`エンジン`,version:`バージョン`,rowFormat:`行フォーマット`,rows:`行数`,avgRowLength:`平均行長`,dataLength:`データサイズ`,createTime:`作成日時`,updateTime:`更新日時`,collation:`照合順序`,comment:`コメント`},copy:{title:`テーブルをコピー`,source:`コピー元`,targetConnection:`コピー先の接続`,targetDatabase:`コピー先データベース`,targetTable:`コピー先テーブル名`,what:`コピー内容`,structureAndData:`構造とデータ`,structureOnly:`構造のみ`,ifExists:`コピー先にテーブルがある場合`,abort:`中止(既定)`,dropAndRecreate:`削除して再作成(名前の再入力で確認)`,preview:`コピー先で実行する CREATE TABLE(編集可)`,crossEngineHint:`コピー先は {{engine}} です。下の型を確認してください。MySQL 固有の属性は除外されました。`,readOnly:`読み取り専用`,loading:`読み込み中…`,progressCreate:`テーブルを作成中…`,progressCount:`行数を確認中…`,progressRows:`{{total}} 行中 {{copied}} 行をコピー済み`,progressDone:`完了`,doneTitle:`テーブルをコピーしました`,doneRows:`{{table}} に {{count}} 行をコピーしました。`,doneStructure:`{{table}} の構造を作成しました。`,noColumns:`コピー元テーブルに列がありません。`,exists:`コピー先に {{table}} が既に存在します。別の名前にするか「削除して再作成」を選んでください。`,dropTitle:`既存のテーブル {{table}} を削除しますか?`,dropDescription:`コピーの前にコピー先テーブルとすべての行が削除されます。元に戻せません。`,dropConfirm:`削除してコピー`,cancelled:`コピーを中止しました。`,stop:`停止`,cancel:`キャンセル`,copy:`コピー`}},h={copy:{title:`データベースをコピー`,source:`コピー元データベース`,target:`コピー先データベース名`,targetPlaceholder:`コピー先のデータベース名を入力`,options:`オプション`,structureAndData:`構造とデータ`,structureOnly:`構造のみ`,cancel:`キャンセル`,copy:`コピー`,creating:`{{database}} を作成中…`,copying:`{{table}} をコピー中 ({{index}}/{{total}})…`},diff:{title:`スキーマを比較`,source:`比較元`,target:`比較先`,pickConnection:`接続`,pickDatabase:`データベース`,crossEngineHint:`エンジンが異なります。型名は方言ごとに違うため、多くの列が型の変更として表示されます。`,sameSide:`比較元と比較先が同じデータベースです。`,summary:`変更 {{changed}}、比較先にない {{missingTarget}}、比較先のみ {{missingSource}}、同一 {{identical}}`,showIdentical:`同一のテーブルを表示`,identicalAll:`テーブルは同一です。`,column:`列`,index:`インデックス`,object:`オブジェクト`,selectTable:`差分を見るテーブルを選択してください。`,missingInTarget:`{{table}} は比較先にありません。スクリプトが作成します。`,missingInSource:`{{table}} は比較先にのみあります。スクリプトが削除します(DROP を含めない限りコメントアウト)。`,includeDrops:`DROP 文を実行可能な SQL として含める(既定: コメントアウト)`,tabTitle:`同期 {{database}}`,close:`閉じる`,compare:`比較`,comparing:`比較中…`,openScript:`スクリプトをエディタで開く`,noDefinition:`CREATE 文を取得できません`},create:{title:`データベースを作成`,name:`データベース名`,namePlaceholder:`データベース名を入力`,charset:`文字セット`,collation:`照合順序`,cancel:`キャンセル`,create:`作成`},csv:{title:`{{format}} でダウンロード`,target:`対象`,targetQueryResult:`現在のクエリ結果`,targetTableData:`テーブルデータ`,tableName:`テーブル名`,tableNamePlaceholder:`テーブル名を入力`,delimiter:`区切り文字`,delimiterComma:`カンマ (,)`,delimiterTab:`タブ (\\t)`,delimiterSemicolon:`セミコロン (;)`,delimiterPipe:`パイプ (|)`,includeHeaders:`ヘッダーを含める`,cancel:`キャンセル`,download:`ダウンロード`,downloading:`ダウンロード中...`,progress:`{{total}} 行中 {{loaded}} 行を書き込み`,progressUnknown:`{{loaded}} 行を書き込み`,stop:`停止`,done:`{{table}} の {{count}} 行を {{format}} にエクスポートしました。`,database:`データベース`,databasePlaceholder:`データベースを選択`},html:{title:`スキーマを HTML に出力`,database:`データベース`,selectDatabase:`データベースを選択`,tables:`含めるテーブル`,selectAll:`すべて選択`,deselectAll:`すべて解除`,noTables:`使用できるテーブルがありません。`,include:`含める項目`,includeColumns:`カラム`,includeIndexes:`インデックス`,includeProperties:`プロパティ`,cancel:`キャンセル`,generate:`生成`,generating:`生成中...`,sectionColumns:`カラム`,sectionIndexes:`インデックス`,sectionProperties:`プロパティ`,docTitle:`スキーマ: {{database}}`,heading:`データベース: {{database}}`,summary:`テーブル数: {{count}} | 生成日時: {{date}}`,footer:`Planche 2026 により生成`},dataDiff:{title:`データを比較`,pickTable:`テーブル`,hint:`比較元テーブルの主キーで行を対応付け、値をテキストとして比較します。片側あたり最大 {{cap}} 行を読み込むので、大きなテーブルは先にフィルタで絞ってください。`,sameSide:`比較元と比較先が同じテーブルです。`,noPrimaryKey:`{{table}} に主キーがないため、行を対応付けできません。`,keyMissingInTarget:`比較先テーブルにキー列がありません: {{columns}}`,summary:`キー: {{key}} — 比較先にない {{added}}、相違 {{changed}}、比較先のみ {{removed}}、同一 {{identical}}`,capped:`両側とも先頭 {{cap}} 行のみ比較しました。`,ignoredColumns:`比較から除外した列(片側のみ): {{columns}}`,added_other:`比較先にない {{count}}`,changed_other:`相違 {{count}}`,removed_other:`比較先のみ {{count}}`,none:`このグループには何もありません。`,more:`… 他 {{count}} 件`,includeDeletes:`DELETE 文を実行可能な SQL として含める(既定: コメントアウト)`,tabTitle:`データ同期 {{table}}`,loading:`行を読み込み中 — 比較元: {{source}}、比較先: {{target}}`},schema:{createTitle:`スキーマを作成`,name:`スキーマ名`,namePlaceholder:`スキーマ名を入力`,create:`作成`,cancel:`キャンセル`},groupBy:{title:`グループ集計`,description:`{{table}} の行を選択した列でまとめて数えます。`,columns:`グループ化する列`,aggregate:`追加の集計`,countOnly:`件数のみ`,column:`列`,minCount:`グループごとの最小行数`,useFilter:`グリッドの現在のフィルタを適用`,noIndexWarning:`選択した列にインデックスの先頭列がないため、テーブル全体を読み込んで並べ替えます。大きなテーブルでは時間がかかることがあります。`,preview:`クエリ`,pickColumn:`グループ化する列を 1 つ以上選択してください。`,openInTab:`新しいタブで開く`,run:`実行`,tabTitle:`{{table}} のグループ集計`,indexed:`インデックスの先頭列`,connection:`接続`,database:`データベース`,table:`テーブル`}},g={manager:{title:`ユーザー管理`,addUser:`ユーザーを追加`,removeUser:`ユーザーを削除`,noUsers:`ユーザーが読み込まれていません`,grantScope:`権限の範囲`,apply:`適用`,close:`閉じる`,removed:`ユーザー '{{user}}'@'{{host}}' を削除しました`,selectUserFirst:`先にユーザーを選択してください`,applied:`変更を適用しました`,noChanges:`適用する権限の変更はありません。`},add:{title:`ユーザーを追加`,username:`ユーザー名`,usernamePlaceholder:`ユーザー名を入力`,host:`ホスト`,password:`パスワード`,passwordPlaceholder:`パスワードを入力`,confirmPassword:`パスワードの確認`,confirmPasswordPlaceholder:`パスワードを再入力`,plugin:`プラグイン`,cancel:`キャンセル`,add:`追加`,usernameRequired:`ユーザー名は必須です`,passwordMismatch:`パスワードが一致しません`,added:`ユーザー '{{user}}'@'{{host}}' を追加しました`},privileges:{globalTitle:`グローバル権限`,databaseTitle:`データベース権限`,tableTitle:`テーブル権限`,checkAll:`すべてチェック`,uncheckAll:`すべて解除`,categoryData:`データ`,categoryStructure:`構造`,categoryAdministration:`管理`},grantTree:{globalPrivileges:`グローバル権限`}},_={close:`閉じる`,noActiveConnection:`アクティブな接続がありません`,variableName:`変数名`,value:`値`,scope:{session:`セッション`,global:`グローバル`},findReplace:{findPlaceholder:`検索`,replacePlaceholder:`置換`,found:`{{count}} 件見つかりました`,noResults:`結果なし`,previous:`前へ`,next:`次へ`,close:`閉じる`,replace:`置換`,all:`すべて`,caseSensitive:`大文字と小文字を区別`,regex:`正規表現`,wholeWord:`単語単位`},flush:{title:`フラッシュ`,executed:`実行しました: {{command}}`,executeError:`{{command}} の実行中にエラーが発生しました: {{message}}`},localHistory:{title:`ローカル履歴`,description:`この接続のエディタ内容のバージョンです。実行時、入力が止まったとき、タブを閉じたときに保存されます。`,empty:`保存されたバージョンはまだありません。`,noMatch:`検索に一致するバージョンがありません。`,notPersisted:`設定 > 安全 の「再読み込み後もクエリ履歴を保持」がオフのため、バージョンはこのセッション中のみ保持されます。`,searchPlaceholder:`バージョンを検索`,scopeTab:`このタブ`,scopeAll:`すべてのタブ`,compareCurrent:`現在と比較`,comparePrevious:`直前と比較`,diffAgainstCurrent:`現在のエディタ内容と比較`,diffAgainstPrevious:`{{time}} のバージョンと比較`,noPrevious:`比較できる以前のバージョンがありません`,restored:`ローカル履歴からエディタの内容を復元しました`,restore:`このバージョンを復元`,openInNewTab:`新しいタブで開く`,openedInTab:`新しいタブでバージョンを開きました`,delete:`このバージョンを削除`,clearAll:`履歴を消去`,chars:`{{count}}文字`,reason:{execute:`実行前`,edit:`編集中`,replaced:`上書き前`,restore:`復元前`,close:`閉じる前`}},processList:{title:`プロセス一覧`,refresh:`更新`,autoRefresh:`自動更新`,empty:`表示するプロセスがありません`,kill:`強制終了`,killProcess:`プロセスを強制終了`,selectToKill:`強制終了するプロセスを選択してください`,killed:`プロセス {{id}} を強制終了しました`,killError:`プロセスの強制終了中にエラーが発生しました: {{message}}`,loadError:`プロセス一覧の読み込み中にエラーが発生しました: {{message}}`,updatedAt:`{{time}} 更新`,filterPlaceholder:`ユーザー、ホスト、DB、SQL で絞り込み...`,hideIdle:`アイドルを隠す`,noMatch:`条件に一致するプロセスがありません`,self:`自分`,selfHint:`Planche 自身のセッションです`,statementOf:`#{{id}} の実行文`,noStatement:`実行中の文なし`,copy:`コピー`,copied:`コピー済み`,killConfirmTitle:`プロセス {{id}} を終了しますか?`,killConfirmDescription:`{{user}}@{{host}} のセッションが切断され、実行中の文は中断されます。開いているトランザクションはロールバックされます。`,stats:{total:`合計`,active:`アクティブ`,idle:`アイドル`,longest:`最長実行`},columns:{id:`Id`,user:`ユーザー`,host:`ホスト`,db:`db`,command:`コマンド`,time:`時間`,state:`状態`,info:`情報`,action:`操作`}},status:{title:`サーバーステータス`,filterPlaceholder:`ステータス変数を絞り込み...`,empty:`表示するステータス変数がありません`,loadError:`ステータスの読み込み中にエラーが発生しました: {{message}}`},variables:{title:`サーバー変数`,filterPlaceholder:`変数を絞り込み...`,empty:`表示する変数がありません`,loadError:`変数の読み込み中にエラーが発生しました: {{message}}`}},v={empty:{title:`Prisma スキーマファイル (.prisma) を開いて ERD を表示`,description:`モデル、enum、リレーションが自動的に解析されます`,openFile:`.prisma ファイルを開く`,dropHint:`またはこの領域にファイルをドラッグ&ドロップ`},entity:{enumBadge:`ENUM`,modelBadge:`MODEL`,columns:{value:`値`,comment:`コメント`,type:`型`,column:`カラム`},linkBadge:`リンク`,externalTitle:`{{location}} 上のリンク先テーブル(実際の外部キーではなく列リンク)`,nullable:`NULL を許可する列`},toolbar:{refresh:`更新`,zoomIn:`拡大`,zoomOut:`縮小`,resetView:`表示をリセット`,center:`中央に配置`,fitAll:`全体を表示`,spreadAll:`重なりを解消`,resetLayout:`レイアウトをリセット`,legendOneToMany:`1:N (FK)`,tables:`テーブル:`,relations:`リレーション:`,columns:`カラム:`,fullscreen:`全画面`,exitFullscreen:`全画面を終了`},viewer:{noServerConnection:`アクティブなサーバー接続がありません`,loading:`{{database}} からスキーマを読み込み中...`,loadFailed:`ERD の読み込みに失敗しました`,noDatabase:`データベースが選択されていません。`,selectDatabaseHint:`スキーマツリーでデータベースを選択してから、「ERD を表示」を開いてください。`}},y={runAnyway:`それでも実行`,query:{rowsReturned:`{{count}} 行を返しました`,rowsAffected:`{{count}} 行が影響を受けました`,rowsReturnedLimited:`{{count}} 行を返しました({{limit}} 行に制限。さらに取得するには LIMIT を追加してください)`,notConnected:`接続されていません`,fileNotOpen:`SQLite ファイルがまだ開かれていません — 上の「ファイルを再度開く」をクリックしてアクセスを再度許可してください。`,failed:`クエリが失敗しました`,nothingToExecute:`実行するものがありません`,dryRunMismatch:`ドライランは {{predicted}} 行を見込みましたが、実際に変更されたのは {{actual}} 行です。プレビュー後にデータが変わった可能性があり、そうでなければプレビューがこの文と一致していません。`},destructive:{title_other:`{{count}} 件の破壊的なステートメントを実行しますか?`,description:`次の操作はデータを完全に変更または削除します。この操作は元に戻せません。`,unknownTarget:`(不明)`,deleteAll:`{{target}} のすべての行を DELETE`,updateAll:`{{target}} のすべての行を UPDATE`,alterDrop:`{{target}} に対する DROP COLUMN/PARTITION`},readOnly:{refused:`接続 "{{label}}" は読み取り専用です。{{count}} 件のステートメントがデータまたはスキーマを変更しようとしました。`,title:`"{{label}}" は読み取り専用です`,description:`これらのステートメントはデータまたはスキーマを変更します。それでもこの接続で実行しますか?`},transaction:{startFailed:`トランザクションを開始できませんでした`,started:`トランザクションを開始しました — 終了時にコミットまたはロールバックしてください`,implicitCommit:`{{kind}} により、開いていたトランザクションが暗黙的に COMMIT されました`,committed:`トランザクションをコミットしました`,rolledBack:`トランザクションをロールバックしました`,commandFailed:`{{name}} に失敗しました`,commandFailedWith:`{{name}} に失敗しました: {{message}}`},save:{notBrowserSqlite:`ブラウザ SQLite 接続ではありません。`,inMemory:`インメモリデータベース: ダウンロードとしてのみエクスポートできます。`,noFileSystemAccess:`このブラウザには File System Access API がありません(Chrome/Edge のみ対応): データベースはその場に書き込む代わりにダウンロードとしてエクスポートされます。`,noWritableHandle:`ファイルは書き込み可能なハンドルなしで開かれました: ダウンロードとしてエクスポートされます。`},agent:{devProxyUrl:`{{url}}(開発用プロキシ経由)`,notPlanche:`応答はありましたが、Planche エージェントではありません`,unreachable:"{{url}} の Planche エージェントに到達できません — `npx planche` を実行してください({{message}})",httpError:`HTTP エラー: {{status}} {{statusText}}`,emptyResponse:`トンネリングサーバーが空の応答を返しました`,reconnected:`{{name}} に再接続しました — エージェントが接続を破棄していました (再起動またはアイドルタイムアウト)。`,driverUnsupported:`このエージェントはまだ {{driver}} 接続を開けません。npx planche@latest を実行するか、スタンドアロン版なら planche upgrade で更新してください。`},sample:{profileName:`サンプルショップ(ブラウザ内)`,downloadFailed:`サンプルデータベースをダウンロードできませんでした({{status}})`,tabTitle:`クエリ 1`},sqliteFile:{tooSmall:`ファイルが小さすぎるため SQLite データベースではありません。`,notSqlite:`SQLite データベースではありません(または SQLCipher などで暗号化されています)。16 バイトのヘッダーが "SQLite format 3" ではありません。`,badPageSize:`SQLite ヘッダーが破損しています: 無効なページサイズ {{size}}。`,unreadable:`SQLite がファイルを読み取れませんでした: {{message}}`,pickerDescription:`SQLite データベース`,walNotLoaded:`このデータベースは WAL モードですが、-wal ファイルが読み込まれていません。保存する前に読み込むか、バナーで -wal ファイルが存在しないことを確認してください。`,changedOnDisk:`{{name}} は読み込み後にディスク上で変更されました(他のプログラムが書き込みました)。保存するとその変更が上書きされます — ファイルを再度開いて編集をやり直すか、トンネリングサーバーを使用してください。`,walHasChanges:`{{name}}-wal に新しい変更があります。保存する前に読み込んでください。`,walChangedOnDisk:`{{name}}-wal は読み込み後に他のプログラムによって書き込まれました。保存する前にファイルを再度開いてください。`,writeDenied:`{{name}} への書き込みアクセスが許可されませんでした。ブラウザのプロンプトで許可するか、代わりにダウンロードとしてエクスポートしてください。`},environment:{none:`なし`,green:`緑(開発)`,blue:`青`,yellow:`黄(ステージング)`,orange:`オレンジ`,red:`赤(本番)`,purple:`紫`},scratchpad:{profileName:`スクラッチパッド`,namePromptTitle:`スクラッチパッドのテーブル名`,namePromptDescription:`スクラッチパッドに {{table}} という名前のテーブルが既にあります。別の名前を入力してください。`,nameTaken:`テーブル {{table}} は既に存在します。`},federated:{pulling:`{{connection}} から {{table}} を取得中…`,capped:`{{table}}: 先頭 {{limit}} 行のみ取得しました。`,templateLine1:`開いている接続のテーブルを "接続名".database.table として参照します。文の実行前にこのスクラッチパッドへコピーされます。`,templateLine2:`テーブルごとに最大 {{limit}} 行。クエリ自体はブラウザ内の SQLite で実行されます。`,templateConnections:`開いている接続: {{names}}`,templateNone:`まだ他の接続が開いていません。接続してからここで参照してください。`,done:`リモートテーブル {{tables}} 個から {{rows}} 行をスクラッチパッドへ取得しました。`,pullingProgress:`{{connection}} から {{table}} を取得中: {{loaded}} / {{total}} 行…`},paged:{noColumns:`{{table}} に列がありません。`,cancelled:`キャンセルしました。`},console:{unreadable:`{{line}}行目: {{message}}`}},b={title:`利用規約`,version:`バージョン {{version}}`,englishOnly:`規約の全文は英語で提供されます。ようこそ画面の要約はお使いの言語で表示されます。`,privacyLink:`プライバシーポリシー`,refundLink:`返金ポリシー`,online:`planche.dev で読む`,updated:`最終更新 {{date}}`},x={title:`{{kind}} は {{count}} 行に影響します`,titleUnknown:`{{kind}} — 影響行数は不明`,description:`この文が今触れる行を SELECT で先に読んだものです。まだ何も書き込んでいません。`,previewFailed:`プレビュークエリが失敗しました: {{error}}
1
+ var e={reconnecting:`再接続中…`,dropSqlite:`ドロップして SQLite ファイルを開く`,dropSqliteHint:`WebAssembly でブラウザ内に開かれ、ファイルはお使いのコンピューターから出ません。-wal ファイルがあれば一緒にドロップしてください。`,dropFailedTitle:`ドロップしたファイルを開けませんでした`,dropNotSqlite:`{{name}} は SQLite データベースファイルではありません。`,crashTitle:`問題が発生しました`,crashBody:`予期しないエラーが発生しました。再読み込みすると接続とタブは復元されますが、保存していないグリッドの編集は失われます。`,crashReload:`再読み込み`,dialogFailed:`ダイアログを開けませんでした: {{message}}`},t={auto:`システムの言語({{name}})`,en:`English`,ko:`한국어`,zh:`中文(简体)`,ja:`日本語`,de:`Deutsch`,fr:`Français`},n={title:`安全設定`,description:`意図しないデータ損失を防ぐためのガードレールです。読み取り専用、環境カラー、トランザクションモードは接続ごとに設定します。`,language:`言語`,languageHint:`すぐに反映されます。「システム言語」はブラウザの設定に従います。`,resetDefaults:`デフォルトに戻す`,done:`完了`,analytics:`匿名の使用統計を送信する`,analyticsHint:`匿名の使用イベント(エンジン、機能、文の種類)を Google Analytics に送信します。SQL 本文、ホスト名、テーブル名やユーザー名は送信しません。`,analyticsUnavailableHint:`このビルドでは無効です(測定 ID 未設定)。`,persistHistory:`再読み込み後もクエリ履歴を保持`,persistHistoryHint:`文のテキストがこのブラウザに保存されます (パスワードのリテラルはマスク、開いているエディタタブ自体は常に保持)。オフにすると履歴とスナップショットはタブを閉じるまでのみ保持されます。`,ai:{intro:`失敗した文や遅いプランの理由をモデルに尋ねられます。質問はこのアプリで組み立てられ、ローカルエージェントが下記のプロバイダへ送ります — SQL やスキーマが planche.dev に届くことはありません。`,provider:`プロバイダ`,openaiCompatible:`OpenAI 互換`,model:`モデル`,baseUrl:`ベース URL`,baseUrlHint:`空欄ならプロバイダ既定のエンドポイントを使います。OpenAI 互換サーバーなら何でも動きます — Azure、OpenRouter、ローカルの Ollama。`,key:`API キー`,keyHint:`ローカルエージェントに渡され、そこで使われます。このブラウザには保存されず、planche.dev にも送られません。`,remember:`このマシンにキーを記憶する`,rememberHint:`{{path}} に本人だけが読める形で書き込みます。チェックしない場合、キーは実行中のエージェント内にのみ存在し、停止すると消えます。`,save:`保存`,forget:`キーを削除`,saved:`保存しました。`,none:`キーは未設定です。`,configuredSession:`今回のエージェントセッションのみ有効なキーが設定されています。`,configuredFile:`{{path}} にキーが保存されています。`,configuredEnv:`このエージェントの AI 設定は環境変数由来のため、ここでは変更できません。`,unreachable:`エージェントに接続できないため、AI 設定を変更できません。`,title:`AI による説明`,description:`失敗やプランをどのモデルが説明し、誰のキーで支払うか。`,cli:`ローカル CLI(キー不要)`,cliCommand:`コマンド`,cliHint:`このマシンに導入済みでサインイン済みのエージェント CLI を実行するため、入力するキーはありません。失敗やプランの説明に使えます。AI パネルにはツールを呼べる provider が必要です。`,cliNone:`このマシンにエージェント CLI が見つかりません。Claude Code か Codex を入れるか、別の provider を選んでください。`,profile:`Anthropic(このマシンのログイン)`,profileHint:"このマシンが既にサインイン済みの資格情報を使います。`ant auth login` の後は SDK が自動で見つけます。貼り付けるものはなく、ローカル CLI と違い本物の API なので AI パネルも動きます。",profileNone:"このマシンに Anthropic の資格情報が見つかりません。`ant auth login` を実行するか、キーを設定してください。",configuredChoice:`{{provider}} を使用中 — キーは保持せず、選択は {{path}} に保存されます。`},query:{title:`クエリ`,description:`文をどう実行するか: F9 が何を走らせ、何行返し、何を先に確認するか。`},general:{title:`一般`,description:`言語、再読み込みを越えて残るもの、そしてこのマシンを離れるもの。`}},r={settings:{safety:`安全設定…`,language:`言語`,title:`設定`,theme:`テーマ`,query:`クエリ…`,general:`一般…`,ai:`AI…`},help:{gettingStarted:`はじめに`,about:`Planche について`,title:`ヘルプ`,documentation:`ドキュメント`,learn:`SQL を学ぶ`,terms:`利用規約`,license:`ライセンス`,support:`お問い合わせ`,mcp:`AI エージェントを接続 (MCP)…`,privacy:`プライバシーポリシー`,whatsNew:`新機能`},connection:{title:`接続`,connect:`接続`,disconnect:`切断`,readOnly:`読み取り専用`,manualTransactions:`手動トランザクション`,saveDatabaseFile:`データベースファイルを保存`,saveDatabaseFileBlocked:`データベースファイルを保存(先に -wal を読み込んでください)`,exit:`終了`,sync:`接続の同期`},query:{title:`クエリ`,execute:`実行`,executeStatementAtCursor:`カーソル位置のステートメントを実行`,executeWholeScript:`スクリプト全体を実行`,newQueryTab:`新しいクエリタブ`,findReplace:`検索と置換`,localHistory:`ローカル履歴…`,explainPlan:`実行計画を表示`,explainAnalyze:`実行計画を実測 (文を実際に実行)`,structure:`クエリ構造`},edit:{title:`編集`,undo:`元に戻す`,redo:`やり直す`,cut:`切り取り`,copy:`コピー`,paste:`貼り付け`,selectAll:`すべて選択`},database:{title:`データベース`,create:`データベースを作成`,alter:`データベースを変更`,drop:`データベースを削除`,copy:`データベースをコピー`,compare:`スキーマを比較…`,truncate:`データベースを空にする`,compareData:`データを比較…`,groupBy:`グループ集計…`},table:{title:`テーブル`,create:`テーブルを作成`,alter:`テーブルを変更`,drop:`テーブルを削除`,rename:`テーブル名を変更`,truncate:`テーブルを空にする`,duplicateStructure:`テーブル構造を複製`},export:{title:`エクスポート`,csv:`CSV としてダウンロード`,tsv:`TSV でダウンロード`,schemaHtml:`スキーマを HTML に出力`,links:`列リンクをエクスポート…`,importLinks:`列リンクをインポート…`},tools:{title:`ツール`,userManager:`ユーザー管理`,processList:`プロセス一覧`,variables:`変数`,status:`ステータス`,flush:`フラッシュ`,quickCommand:`クイックコマンド`,viewErd:`ERD を表示`,scratchpad:`スクラッチパッド(ブラウザ内 SQLite)`,federated:`統合クエリ(接続をまたぐ結合)…`,federatedTab:`統合クエリ {{n}}`,ai:`AI アシスタント`},messages:{databaseFileSaved:`データベースファイルを保存しました`,databaseExported:`データベースをダウンロードとしてエクスポートしました`,databaseExportedWithReason:`データベースをダウンロードとしてエクスポートしました — {{reason}}`,errorSavingDatabase:`データベースの保存中にエラーが発生しました: {{message}}`,noDatabaseSelected:`データベースが選択されていません`,noTableSelected:`テーブルが選択されていません`,noActiveConnection:`アクティブな接続がありません`,databaseDropped:`データベース "{{database}}" を削除しました`,errorDroppingDatabase:`データベースの削除中にエラーが発生しました: {{message}}`,noTablesInDatabase:`データベース "{{database}}" にテーブルが見つかりません`,databaseTruncated_other:`"{{database}}" の {{count}} 個のテーブルをすべて空にしました`,errorTruncatingDatabase:`データベースを空にする際にエラーが発生しました: {{message}}`,tableDropped:`テーブル "{{table}}" を削除しました`,errorDroppingTable:`テーブルの削除中にエラーが発生しました: {{message}}`,tableTruncated:`テーブル "{{table}}" を空にしました`,errorTruncatingTable:`テーブルを空にする際にエラーが発生しました: {{message}}`,renameTablePrompt:`テーブル "{{table}}" の新しい名前:`,tableRenamed:`テーブル "{{table}}" の名前を "{{newName}}" に変更しました`,errorRenamingTable:`テーブル名の変更中にエラーが発生しました: {{message}}`,truncateDatabaseTitle:`"{{name}}" のすべてのテーブルを空にしますか?`,truncateDatabaseDescription:`"{{name}}" の {{count}} 個のテーブルのすべての行が削除されます。テーブル構造は保持されます。この操作は元に戻せません。`,truncateDatabaseConfirm:`すべてのテーブルを空にする`,renameTableTitle:`テーブル名の変更`,renameTableConfirm:`名前を変更`,noLinksToExport:`エクスポートする列リンクがありません。`,linksExported:`列リンク {{count}} 件をエクスポートしました。`,linksImported:`列リンク {{count}} 件をインポートしました。`,linksImportedPartial:`列リンク {{count}} 件をインポートしました。一致するプロファイルなし: {{profiles}}`,linksImportFailed:`列リンクをインポートできませんでした: {{reason}}`}},i={title:`Planche について`,tagline:`MySQL、MariaDB、PostgreSQL、SQLite 向けのデータベースクライアントです。`,version:`バージョン`,website:`ウェブサイト`,licenses:`ライセンス`,licensesLink:`サードパーティ通知`,disclaimer:`Planche は「現状のまま」提供され、いかなる保証もありません。作者は本ソフトウェアの使用によって生じた損害やデータ損失について一切の責任を負いません。破壊的なステートメントを実行する前にデータをバックアップしてください。`,rights:`All rights reserved.`,legal:`規約`,terms:`利用規約`,privacy:`プライバシー`,refund:`返金`},a=JSON.parse('{"dialog":{"title":"データベースに接続","firstQueryTab":"クエリ 1","colHostName":"接続名","colTarget":"接続先","colDbms":"DBMS","noSaved":"保存された接続はありません","unnamed":"(名前なし)","pickOnConnect":"(接続時に選択)","noFile":"(ファイルなし)","selectPrompt":"接続を選択するか、新しく追加してください","addNew":"新規追加","delete":"削除","testConnection":"接続テスト","connect":"接続","close":"閉じる","unknownError":"不明なエラー","browserTestHint":"ブラウザ内 SQLite 接続は、「接続」をクリックするとローカルファイルを開きます。","testSuccess":"接続に成功しました","restoredUnsaved":"{{file}}: キャッシュされたコピーから未保存の変更を復元しました","restoredUnsavedDiskChanged":"{{file}}: キャッシュされたコピーから未保存の変更を復元しました — ディスク上のファイルはその後変更されています","walPending":"{{file}} は WAL モードです: 最近の変更が -wal ファイルに残っている可能性があります。上の「-wal ファイルを読み込む」で取り込んでください。","walApplied":"{{file}} を -wal の変更を適用して開きました","connectFailedTitle":"接続に失敗しました","testSuccessDescription":"サーバーが認証情報を受け付けました。","testFailedTitle":"接続テストに失敗しました","privacy":"ここに入力した情報が planche.dev のサーバーに送信・保存されることはありません。接続プロファイルはこのブラウザのローカルストレージにのみ保存され、クエリはローカルエージェントからデータベースへ直接送られます。","hostKeyTitle":"不明な SSH ホスト鍵","hostKeyDescription":"{{host}}:{{port}} がフィンガープリント {{fingerprint}} の {{type}} 鍵を提示しました。サーバー管理者から受け取ったフィンガープリントと照合してください。誤った鍵を受け入れると攻撃者に通信を読まれます。","hostKeyAccept":"このホストを信頼する","gatewayTitle":"ゲートウェイのプロファイル","gatewayAdd":"追加","gatewayAdded":"ゲートウェイのプロファイル {{name}} を追加しました。","gatewayReadOnly":"読み取り専用","gatewayWritable":"書き込み可","gatewayProfileHint":"この接続はゲートウェイが保持するプロファイル「{{name}}」を使います。ここで設定するものはありません。","gatewayLoadFailed":"ゲートウェイのプロファイルを読み込めませんでした: {{error}}","export":"エクスポート…","exportWithoutSecrets":"パスワードを含めない","exportWithSecrets":"パスワードと鍵を含める","import":"インポート…","exported":"接続「{{name}}」をエクスポートしました。","imported":"接続「{{name}}」をインポートしました。","importFailedTitle":"接続をインポートできませんでした"},"form":{"hostName":"接続名","hostNamePlaceholder":"My Connection","dataSource":"データソース","openVia":"開く方法","viaBrowser":"ブラウザ(ローカルファイル)","viaAgent":"ローカルエージェント","viaBrowserHint":"インストール不要です。他のプログラムが使用していないファイルに最適です: ブラウザはメモリ上のコピーで作業し、ファイルをロックできないため、開いている間に他で行われた編集は反映されず、保存時に上書きされます。","viaAgentHint":"npx planche 経由で SQLite 自体がファイルを開きます — 適切なロックと WAL に対応し、同じデータベースを使う他のプログラムと安全に共存できます。","databaseFile":"データベースファイル","changeFile":"ファイルを変更","filePickerHint":"「接続」をクリックするとファイル選択ダイアログが開きます(ヒント: ⌘⇧. で隠しファイルを表示、⌘⇧G でパスを入力できます)。","fileRememberedHint":"選択したファイルは記憶される(Chromium)ため、再接続時は権限の確認のみ行われます。変更を書き戻すには「接続 > データベースファイルを保存」を使用してください。","authToken":"認証トークン","authTokenPlaceholder":"空欄でペアリング済みのエージェントトークンを使用","filePathPlaceholder":"/path/to/database.sqlite または :memory:","createIfMissing":"存在しない場合は作成","createIfMissingHint":"パスはトンネリングサーバーのホスト上で解決されます","host":"ホスト","port":"ポート","database":"データベース","serviceName":"サービス名","user":"ユーザー","password":"パスワード","savePassword":"パスワードを保存","savePasswordHint":"オフ: パスワードはこのブラウザセッションの間だけ保持され、ディスクには書き込まれません。","charset":"文字セット","autoConnection":"自動接続","safety":"安全設定","environment":"環境","environmentHint":"タブとワークスペースに色を付けます","readOnly":"読み取り専用","readOnlyHint":"データやスキーマを変更するステートメントを拒否します","transactions":"トランザクション","txAuto":"自動コミット","txManual":"手動 — ツールバーからコミット / ロールバック","ssh":"SSH","sshTunnel":"SSHトンネル","sshTunnelHint":"SSH踏み台ホスト経由でデータベースに接続します(ローカルエージェントがトンネルを開きます)","sshHost":"SSHホスト","sshPort":"SSHポート","sshUser":"SSHユーザー","sshAuth":"SSH認証","sshAuthKey":"秘密鍵","sshAuthPassword":"パスワード","sshAuthAgent":"ssh-agent","sshAuthAgentHint":"npx planche を実行しているマシンの ssh-agent に読み込まれた鍵を使用します(SSH_AUTH_SOCK)。","sshPassword":"SSHパスワード","sshKey":"秘密鍵","sshKeyPick":"鍵ファイルを選択…","sshKeyLoaded":"鍵を読み込み済み","sshKeyHint":"空ならエージェントのマシンの ~/.ssh/config の IdentityFile(または ~/.ssh/id_*)を使用します。選択した鍵はこのプロファイルと共に保存されます","sshPassphrase":"パスフレーズ","sshPassphrasePlaceholder":"鍵にパスフレーズがなければ空のまま","sshSecretsHint":"SSH のパスワード・秘密鍵・パスフレーズは上の「パスワードを保存」設定に従います。不明なホスト鍵は初回接続前に確認用に表示され、エージェントのマシンの ~/.planche/known_hosts に保存されます。","sshHostPlaceholder":"bastion.example.com または ~/.ssh/config の Host エイリアス","sshUserPlaceholder":"空なら ~/.ssh/config の User を使用","sshTargetHint":"DB のホスト/ポートは踏み台ホスト側で解決されます — localhost やローカルポートフォワードではなく、DB の実際のアドレス(例: RDS エンドポイント)を入力してください。","connectionString":"接続文字列","connectionStringApplied":"下のフィールドに反映しました。文字列自体は保存されず、フィールドのみ保存されます。","connectionStringInvalid":"PostgreSQL URI ではありません (postgresql://user:password@host/database の形式)。","neonHint":"Neon コンソール (Connect > Connection string) の URI を貼り付けると、下のフィールドが埋まります。","supabaseHint":"Supabase (Connect > Session pooler または Direct connection) の URI を貼り付けると、下のフィールドが埋まります。","supabasePoolerWarning":"ポート 6543 はトランザクションモードのプーラーです。文ごとに別のバックエンドで実行される可能性があるため、スキーマの切り替え、一時テーブル、プリペアドステートメント、手動トランザクションは動作しません。セッションプーラー (ポート 5432) か直接接続を使ってください。","managedTlsHint":"このサービスへは常に TLS で接続し、ローカルエージェントからサービスへ直接接続します (SSH トンネルなし)。","d1AccountId":"Account ID","d1DatabaseId":"Database ID","d1ApiToken":"API トークン","d1Hint":"Account ID: Cloudflare ダッシュボードのアカウントホーム右側。Database ID: Storage & Databases > D1 > データベース。トークン: My Profile > API Tokens > Create Token で \\"D1 Edit\\" 権限 (読み取り専用は \\"D1 Read\\")。ローカルエージェントがこのトークンで Cloudflare API を呼び出します。","d1LimitsHint":"D1 はリクエストごとに独立して実行され自動コミットされるため、手動トランザクションは使えません。データベースは \\"main\\" スキーマ 1 つとして表示されます。","doDevUrl":"wrangler dev URL","doHint":"Worker プロジェクトで `wrangler dev` を実行し、表示された URL を入力してください (既定のポートは 8787)。ローカルエージェントがそのセッションの Durable Object を読み取ります。同時に動作している他の `wrangler dev` セッションも表示されます。","doLimitsHint":"ローカル開発専用です。デプロイ済みの Durable Object は Worker からしかアクセスできず、Cloudflare は照会 API を提供していません。各オブジェクトは \\"<名前空間>/<オブジェクト>\\" というデータベースとして表示され、リクエストごとに自動コミットされるため手動トランザクションは使えません。","tls":"TLS","tlsEnable":"接続を暗号化","tlsVerify":"サーバー証明書を検証","tlsVerifyHint":"オフ: 自己署名証明書も受け入れます (暗号化はされますがサーバーは認証されません)。SSH トンネル経由では使えません。","d1DevUrl":"ローカル開発 URL","d1DevUrlHint":"空にすると Cloudflare アカウント経由で接続します。入力すると、このマシンで `wrangler dev` が動かしているデータベースを直接読みます — アカウントも API トークンも不要で、下のアカウント欄は無視されます。開発サーバーの D1 が 1 つだけなら Database ID は空のままで構いません。","d1PickDatabase":"データベースを選択","searchAuthHint":"ユーザーとパスワードで Basic 認証します。ユーザーを空にするとパスワードを API キー(エンコード済み id:key)として送信します。"},"agent":{"copy":"コピー","looking":"Planche エージェントを探しています…","online":"エージェント <b>v{{version}}</b> が <mono>{{url}}</mono> で実行中です","outdated":"エージェント v{{version}} はプロトコル {{protocol}} を使用していますが、このアプリにはより新しいものが必要です。<cmd/> で再起動してください","unauthorized":"エージェント <b>v{{version}}</b> が <mono>{{url}}</mono> で実行中ですが、このアプリとペアリングされていません(トークンは起動のたびに変わります)。エージェントのターミナルに表示されたリンクを開くか、「設定」でトークンを貼り付けてください。","offline":"<mono>{{url}}</mono> にエージェントがありません。ターミナルで起動してください — ペアリング済みの状態でこのアプリが開きます。","close":"閉じる","configure":"設定","checkAgain":"再確認","urlLabel":"エージェント URL","urlPlaceholder":"http://127.0.0.1:8888(デフォルト)","tokenLabel":"トークン","tokenPlaceholder":"エージェントが表示したもの","reset":"リセット","save":"保存","remoteWarning":"このエージェントはお使いのコンピューター上にありません ({{host}}): すべての接続のパスワードと SSH 鍵がそこへ送られます。","remoteRefusedTitle":"リモートエージェントは使用できません","remoteRefused":"エージェントはこのコンピューター (127.0.0.1 または localhost) 上で実行する必要があります。別のマシンのエージェントを使うには `ssh -L 8888:127.0.0.1:8888 user@host` でポートを転送し、URL は http://127.0.0.1:8888 のままにしてください。","gateway":"ゲートウェイ「{{name}}」: サーバー側プロファイル {{count}} 件。認証情報はゲートウェイにのみあります。下からプロファイルを選んでください。"},"tab":{"noConnections":"開いている接続はありません。「接続」を押して始めてください。","theSqliteFile":"SQLite ファイル","reopened":"{{file}} を再度開きました","reopenFailed":"ファイルを再度開けませんでした: {{message}}","reopenPrompt":"<b>{{file}}</b> を読み取るには、ブラウザの許可が再度必要です。","reopenFile":"ファイルを再度開く","closeConnection":"接続を閉じる","reconnected":"{{file}} に再接続しました","accessNotGranted":"ファイルへのアクセスが許可されませんでした。保存時はダウンロードとしてエクスポートします。","detachedPrompt":"<b>{{file}}</b> のキャッシュされたコピーで作業しています。変更をその場で保存するにはファイルを再接続してください。","reconnectFile":"ファイルを再接続","detachedHide":"非表示(保存時に必要に応じてファイルを求めます)","walFramesApplied_other":"{{file}}-wal から {{count}} 個の WAL フレームを適用しました","walNoChanges":"-wal ファイルにコミット済みの変更はありませんでした","walLoadFailed":"-wal ファイルを読み込めませんでした: {{message}}","walPrompt":"<b>{{file}}</b> は WAL モードです: <mono>{{file}}-wal</mono> ファイルを読み込むまで最新のデータが表示されない場合があり、それまで保存は無効です。隣にそのようなファイルがない場合(データベースが正常に閉じられた場合)は、代わりにその旨を確認してください。他のプログラムがまだこのデータベースを使用している場合は、代わりにローカルエージェント(<mono>npx planche</mono>)経由で開いてください: ブラウザはファイルを安全に共有できません。","loadWal":"-wal ファイルを読み込む","noWalHint":"確認済み: データベースの隣に -wal ファイルはありません","noWal":"-wal ファイルなし","dismiss":"閉じる","walHide":"非表示(保存は無効のまま)","readOnlyBadge":"読み取り専用"}}'),o={connect:`接続 (Alt+N)`,disconnect:`切断`,newQueryTab:`新しいクエリタブ (Alt+T)`,execute:`実行 (F9)`,executeStatement:`カーソル位置 / 選択範囲のステートメントを実行 (Ctrl+Enter)`,commit:`コミット`,commitHint:`開いているトランザクションをコミットします`,noOpenTransaction:`開いているトランザクションはありません`,rollback:`ロールバック`,rollbackHint:`開いているトランザクションを破棄します`,readOnlyBadge:`読み取り専用`,readOnlyHint:`この接続はデータやスキーマを変更するステートメントを拒否します`,userManager:`ユーザー管理 (Alt+U)`,quickCommand:`クイックコマンド`,processList:`プロセス一覧`,variables:`変数`,status:`ステータス`,flush:`フラッシュ`,fullscreen:`全画面表示`},s={readOnly:`読み取り専用`,txOpen:`トランザクション中`,manualTx:`手動トランザクション`},c={title:`クイックコマンド`,description:`実行するコマンドを検索...`,inputPlaceholder:`コマンドを入力または検索...`,empty:`コマンドが見つかりません。`,groups:{connection:`接続`,query:`クエリ`,database:`データベース`,table:`テーブル`,tools:`ツール`},commands:{connect:`接続`,disconnect:`切断`,executeQuery:`クエリを実行`,newQueryTab:`新しいクエリタブ`,createDatabase:`データベースを作成`,dropDatabase:`データベースを削除`,createTable:`テーブルを作成`,alterTable:`テーブルを変更`,dropTable:`テーブルを削除`,processList:`プロセス一覧`,serverVariables:`サーバー変数`,serverStatus:`サーバーステータス`,flush:`フラッシュ`,userManager:`ユーザー管理`}},l={title:`Planche へようこそ`,intro:`ブラウザで動作する SQL クライアントです。データベースにはお使いのマシン上の小さなエージェントを通じてアクセスするため、認証情報やデータがコンピューターの外に出ることはありません。`,skip:`スキップ`,skipTitle:`この画面を非表示にします(「ヘルプ > はじめに」で再表示できます)`,copy:`コピー`,copied:`コピーしました`,sampleOpenFailed:`サンプルデータベースを開けませんでした: {{message}}`,steps:{agent:{title:`ローカルエージェントを実行する`,body:`ターミナルで次のいずれかを実行します。エージェントが起動し、このページとペアリングされます。`},connection:{title:`接続を追加する`,body:`データベースを選ぶと、適切なデフォルト値で接続フォームが開きます。`},sample:{title:`手元にデータベースがない場合はサンプルをお試しください`,body:`サンプルのウェブショップデータベース(24 テーブル、約 5 万行、ビューとトリガー)をブラウザに読み込み、エディター、グリッド、スキーマツリーを試せます。`,loading:`サンプルを読み込み中…`,button:`サンプルデータベースを試す`}},terms:{title:`はじめる前に`,local:`すべてローカルで動作します。認証情報、クエリ、結果はお使いのコンピュータにのみ保存され、当方へ送信されることはありません。`,asIs:`Planche は現状有姿で提供され、いかなる保証もありません。安全機能(破壊的操作の確認、読み取り専用モード)は補助的なものであり、保証ではありません。`,dataLoss:`Planche を通じて実行されるすべての文の責任はユーザーにあります。破壊的な操作を行う前に必ずデータをバックアップしてください。`,agree:`利用規約を読み、同意します。`,accepted:`利用規約に同意済みです。`,readFull:`規約の全文を読む`}},u={treeLabel:`スキーマ`,unreachableHint:`この接続に紐付いたデータベースではありません。閲覧するにはそのデータベース用のプロファイルを作成してください`,objectType:{table:`テーブル`,view:`ビュー`,procedure:`プロシージャ`,function:`関数`,trigger:`トリガー`,event:`イベント`},menu:{showCreate:`{{type}}の CREATE 文を表示`,alter:`{{type}}を変更`,drop:`{{type}}を削除`,create:`{{type}}を作成`,refresh:`更新`,unreachable:`このデータベースを閲覧するには、これに紐付いたプロファイルで接続してください`,openDatabase:`データベースを開く`,createSchema:`スキーマを作成…`,createTable:`テーブルを作成`,dropDatabase:`データベースを削除`,openSchema:`スキーマを開く`,dropSchema:`スキーマを削除`,newQueryTab:`新しいクエリタブ`,generateSql:`SQL を生成`,openTable:`テーブルを開く`,alterTable:`テーブルを変更`,showCreateTable:`CREATE TABLE 文を表示`,duplicateStructure:`構造を複製`,copyTable:`別の場所へテーブルをコピー…`,compare:`{{type}}を比較…`,truncateTable:`テーブルを空にする`,dropTable:`テーブルを削除`,exportCsv:`CSV にエクスポート`,exportTsv:`TSV でエクスポート…`,openView:`ビューを開く`,alterView:`ビューを変更`,showCreateView:`CREATE VIEW 文を表示`,dropView:`ビューを削除`,compareData:`データを比較…`,groupBy:`グループ集計…`,copyKey:`キー名をコピー`,openKey:`開く`,copyName:`名前をコピー`,inspect:`調べる`,modify:`変更`},actions:{createStatementUnavailable:`-- {{type}} {{name}} の CREATE 文を取得できませんでした`,getCreateFailed:`CREATE {{type}} の取得に失敗しました: {{message}}`,createTabTitle:`{{type}}を作成`,createSchemaTabTitle:`スキーマを作成`,generateSqlFailed:`SQL を生成できませんでした: {{message}}`,dropTableTitle:`テーブル "{{name}}" を削除しますか?`,dropTableDescription:`{{from}}テーブルとそのすべての行が完全に削除されます。この操作は元に戻せません。`,dropTableConfirm:`テーブルを削除`,dropObjectTitle:`{{type}} "{{name}}" を削除しますか?`,dropObjectDescription:`{{from}}{{type}}の定義が削除されます。この操作は元に戻せません。`,dropObjectConfirm:`{{type}}を削除`,fromDatabase:`データベース "{{database}}" から`,dropped:`{{type}} {{name}} を削除しました`,dropFailed:`{{type}}の削除に失敗しました`,dropDatabaseTitle:`データベース "{{name}}" を削除しますか?`,dropDatabaseDescription:`データベースとそのすべてのテーブルおよびデータが完全に削除されます。この操作は元に戻せません。`,dropDatabaseConfirm:`データベースを削除`,droppedDatabase:`データベース {{name}} を削除しました`,dropDatabaseFailed:`データベースの削除に失敗しました`,dropSchemaTitle:`スキーマ "{{name}}" を削除しますか?`,dropSchemaDescription:`スキーマとそのすべてのテーブルおよびデータが完全に削除されます。この操作は元に戻せません。`,dropSchemaConfirm:`スキーマを削除`,droppedSchema:`スキーマ {{name}} を削除しました`,dropSchemaFailed:`スキーマの削除に失敗しました`,truncateTitle:`テーブル "{{name}}" を空にしますか?`,truncateDescription:`"{{name}}" のすべての行が削除されます。テーブル構造は保持されます。この操作は元に戻せません。`,truncateConfirm:`テーブルを空にする`,truncated:`{{name}} を空にしました`,truncateFailed:`テーブルを空にできませんでした`},tree:{loadDatabasesFailed:`データベースの読み込みに失敗しました: {{message}}`},root:{newQuery:`新しいクエリタブ`,newConsole:`新しいコンソールタブ`,createIndex:`インデックスを作成…`,clusterHealth:`クラスターの状態`,nodes:`ノード一覧`,shards:`シャード一覧`,templates:`インデックステンプレート`},topology:{cluster:`この Redis はクラスターのノードです。Planche はこのノードのキーのみ表示し、クラスターのリダイレクトにはまだ対応していません。`}},d={editor:{destructiveMarker:`破壊的操作: {{what}}`,readOnlyMarker:`接続は読み取り専用です。このステートメントはデータまたはスキーマを変更します`,actionExecute:`実行(設定に従う)`,actionExecuteStatement:`カーソル位置 / 選択範囲のステートメントを実行`,actionExecuteScript:`スクリプト全体を実行`,actionExplainPlan:`実行計画を表示`,actionQueryStructure:`クエリ構造`},tabs:{newQuery:`新しいクエリ`,queryTitle:`クエリ {{n}}`,erdViewer:`ERD ビューアー`,close:`閉じる`,closeOthers:`他のタブを閉じる`,closeLeft:`左側のタブを閉じる`,closeRight:`右側のタブを閉じる`,closeAll:`すべて閉じる`},executor:{noActiveConnection:`アクティブな接続がありません`,uncommittedTitle:`未コミットのトランザクション`,uncommittedDescription:`この接続には開いているトランザクションがあります。切断するとその変更はロールバックされます。`,uncommittedConfirm:`ロールバックして切断`,unsavedTitle:`未保存の変更`,unsavedDescription:`{{file}} にはファイルに保存されていない変更があります。切断するとそれらは破棄されます(保持するには先に「接続 > データベースファイルを保存」を使用してください)。`,theSqliteDatabase:`SQLite データベース`,unsavedConfirm:`破棄して切断`}},f=JSON.parse('{"tabs":{"message":"メッセージ","info":"情報","history":"履歴","result":"結果","resultN":"結果 {{n}}","plan":"実行計画","structure":"構造","structureN":"構造 {{n}}"},"message":{"executing":"クエリを実行中...","error":"エラー: {{message}}","total":"(合計: {{ms}}ms)","ready":"準備完了。","log":"実行ログ","statementN":"文 {{n}}","limitedBadge":"上限到達","insertId":"insert id {{id}}","failed":"失敗","failedStatement":"失敗した文","summary":"成功 {{ok}} · 失敗 {{failed}} · 合計 {{ms}}","copy":"コピー","copied":"コピー済み","showSql":"SQL を表示","hideSql":"SQL を隠す"},"hints":{"title":"ヒント","unknownColumn":"{{name}} という列はありません。{{suggestions}} ではありませんか?","unknownTable":"{{name}} というテーブルはありません。{{suggestions}} ではありませんか?","syntaxSwap":"{{engine}} では {{found}} ではなく {{expected}} を使います。","doubleQuotedLiteral":"{{engine}} は \\"{{value}}\\" を文字列ではなく列名として読みます。文字列は \'{{value}}\' と書きます。"},"ai":{"title":"AI による説明","explain":"AI に説明してもらう","thinking":"失敗を読んでいます…","by":"{{model}}","applyFix":"修正文を新しいタブで開く","failed":"説明できませんでした: {{message}}","noFailure":"説明する失敗した文がありません。","noPack":"planche.dev からプロンプトを取得できませんでした。","badShape":"モデルが想定した形式で応答しませんでした。","noPlan":"説明するプランがまだありません。","explainPlan":"このプランを説明してもらう"},"info":{"empty":"クエリ情報はありません。","resultN":"結果 {{n}}","metadata":"クエリのメタデータ","executionTime":"実行時間","notAvailable":"N/A","affectedRows":"影響を受けた行数","fields":"フィールド","fieldDetails":"フィールドの詳細","colName":"名前","colType":"型","colTable":"テーブル","resultSets":"結果セット","rowsReturned":"返された行","insertId":"最後の Insert ID","lastQuery":"最後に実行した文","copy":"コピー","copied":"コピー済み","colOrigin":"元の名前","primaryKey":"主キー","rowsAndFields":"{{rows}}行 × {{fields}}列","noFields":"この文は列を返しませんでした。"},"rowForm":{"colColumn":"列","colValue":"値","insertTitle":"行を追加","editTitle":"行を編集","loading":"列情報を読み込み中...","preview":"実行される文","nothingToWrite":"書き込む内容がありません","insert":"挿入","update":"更新","stageInsert":"保留行として追加","stageEdit":"グリッドに反映","stageHint":"実行せずにグリッドへ値を置き、後で他の編集と一緒にコミットします。","inserted":"{{table}} に行を挿入しました","updated":"{{table}} の行を更新しました","confirmInsertTitle":"{{table}} に行を挿入しますか?","confirmUpdateTitle":"{{table}} の行を更新しますか?","inTransaction":"開いているトランザクション内で実行されます","pickDate":"日付を選択","now":"現在時刻","formatJson":"整形","binaryUnsupported":"バイナリ列はここでは編集できません。NULL/DEFAULT のままにするか SQL で設定してください。","generateUuid":"UUID を生成","defaultValue":"デフォルト値","clickToChange":"クリックして変更","empty":"(空)","autoHint":"サーバーが自動生成","mode":{"keep":"維持","auto":"自動","value":"値"},"invalid":{"integer":"整数を入力してください","unsigned":"この列は負の数を受け付けません","number":"数値を入力してください","json":"不正な JSON","date":"YYYY-MM-DD 形式で入力してください","datetime":"YYYY-MM-DD HH:MM:SS 形式で入力してください","time":"HH:MM:SS 形式で入力してください","length":"最大 {{max}} 文字"}},"history":{"copied":"クリップボードにコピーしました","searchPlaceholder":"履歴を検索...","all":"すべて","success":"成功","failed":"失敗","thisTab":"このタブのみ","noMatch":"一致する項目がありません。","count":"{{count}}件","clear":"消去","clearTitle":"クエリ履歴を消去しますか?","clearDescription":"この接続の {{count}} 件がすべて削除されます。元に戻せません。","clearConfirm":"履歴を消去","insert":"エディターに挿入","inserted":"エディターに挿入しました","copy":"コピー","rows":"{{count}}行","affected":"{{count}}行変更","today":"今日","yesterday":"昨日","empty":"クエリ履歴はありません。"},"json":{"arrayLength":"Array[{{count}}]","keys_other":"{{count}} 個のキー","invalid":"無効な JSON","clickToView":"クリックして JSON を表示","expandAll":"すべて展開","collapseAll":"すべて折りたたむ","edit":"編集","view":"表示","copied":"コピーしました","copy":"コピー","shortcutHint":"{{mod}}+Enter で保存 · Esc でキャンセル","cancel":"キャンセル","save":"保存"},"text":{"clickToView":"クリックしてテキストを表示","size":"{{chars}}文字 · {{lines}}行","wrap":"折り返し","preview":"プレビュー","source":"ソース"},"grid":{"readOnlyConnection":"読み取り専用の接続","readOnlyWal":"読み取り専用: -wal ファイルが読み込まれていません","readOnlyNoPk":"読み取り専用: テーブルに主キーがありません","commitTitle":"{{count}} 件の変更を {{table}} にコミットしますか?","commitDescription":"次のステートメントが実行されます。","commitConfirm":"コミット","rowPrefix":"行 {{row}}:","cancelled":"キャンセルされました","commitFailed":"コミットに失敗しました: {{message}}","executedInTransaction":"開いているトランザクション内で {{count}} 件の変更を実行しました — 確定するにはツールバーの「コミット」を押してください(再読み込みするとロールバックされます)","committed":"{{count}} 件の変更を {{table}} にコミットしました","noData":"表示するデータがありません。","commit":"コミット","discard":"破棄","addRow":"行を追加","removeNewRow":"この新しい行を取り消す","addRowForm":"フォームで追加","addRowFormHint":"列ごとの入力欄を持つフォームを開きます (INSERT としてコミット)","editRowForm":"この行をフォームで編集","addRowHint":"新しい行を追加します(INSERT としてコミット)","delete":"削除","deleteCount":"削除 ({{count}})","deleteHint":"選択した行を削除します(DELETE としてコミット)。行番号の列で行を選択してください。","field":"フィールド","searchPlaceholder":"検索...","orderBy":"並び順","none":"なし","refresh":"更新","dismiss":"閉じる","clearSelection":"選択を解除","columns":"列","showAllColumns":"すべて表示","hideAllColumns":"すべて非表示","resetWidths":"幅をリセット","selectAll":"すべての行を選択","emptyTable":"このテーブルには行がありません。","noRows":"行は返されませんでした。","addARow":"行を追加","markedForDeletion":"削除予定 — クリックで元に戻す","newRow":"新しい行","clickToSelect":"クリックで選択、Shift/Ctrl で複数選択","rows":"行数: {{count}}","rowsWithNew":"行数: {{count}} (+{{added}})","sortedBy":"並び順: {{column}} {{direction}}","pageRange":"{{from}}–{{to}} 行","firstPage":"最初のページ","prevPage":"前のページ","nextPage":"次のページ","lastPage":"最後のページ","pagingBlocked":"ページを移動する前に変更をコミットまたは破棄してください","selected":"{{count}} 件選択中","cellsModified":"{{count}} 個のセルを変更","newCount":"{{count}} 件追加","toDelete":"{{count}} 件削除予定","searchMode":"一致方法","contains":"含む","equals":"一致","followLink":"{{table}} を {{column}} = 値 で開く","linkColumn":"「{{column}}」を別のテーブルにリンク…","editLink":"「{{column}}」のリンクを編集…","removeLink":"リンクを削除","copyValue":"値をコピー","filterByValue":"フィルタ: {{column}} = この値","clearFilter":"フィルタを解除","copyColumnName":"列名をコピー","editCell":"セルを編集","setNull":"NULL に設定","setEmpty":"空文字列に設定","restoreRow":"行を復元","hideColumn":"列「{{column}}」を隠す","copyRowsTsv_other":"{{count}} 行を TSV としてコピー(ヘッダー付き)","copyRowsCsv_other":"{{count}} 行を CSV としてコピー","copyRowsJson_other":"{{count}} 行を JSON としてコピー","copyRowsInsert_other":"{{count}} 行を INSERT 文としてコピー","deleteRowsPending_other":"{{count}} 行を削除(コミットまで保留)","sendRowsToScratchpad_other":"{{count}} 行をスクラッチパッドへ送る","sendAllToScratchpad":"読み込み済みの {{count}} 行すべてをスクラッチパッドへ送る","sentToScratchpad":"{{count}} 行をスクラッチパッドのテーブル {{table}} にコピーしました。","changesSince":"前回の読み込み以降: 変更 {{changed}} · 新規 {{added}} · 消失 {{gone}}","changesToggle":"前回の読み込みからの変更のハイライトを切り替え","changesDismiss":"変更表示を消す","previousValue":"以前の値: {{value}}","groupByValue":"{{column}} でグループ集計","openItem":"{{name}} を開く"},"link":{"title":"列を別のテーブルにリンク","source":"列","hint":"この列の値がリンクになります。クリックすると対象テーブルが一致する行で絞り込まれて開きます。実際の外部キーは自動でリンクされます。","targetDatabase":"対象データベース","targetTable":"対象テーブル","targetColumn":"対象列","pickTable":"テーブルを選択","pickColumn":"列を選択","remove":"リンクを削除","cancel":"キャンセル","save":"リンクを保存","targetConnection":"対象の接続","targetNotConnected":"リンク先の接続が開いていません。先に接続してください。"},"running":{"label":"クエリ実行中…","elapsed":"{{seconds}}秒","stop":"中断","stopping":"中断中…","cannotCancel":"このエンジンは実行中の文を中断できません。","agentOutdated":"ローカルエージェントが古いためクエリを中断できません。`npx planche@latest`(または `planche upgrade`)で更新して再接続してください。","cancelFailed":"エージェントに接続できず、クエリを中断できませんでした。","abandoned":"リクエストの待機を中止しました。このエンジンには取り消し機能がないため、クエリはサーバー側で最後まで実行される場合があります。"},"plan":{"empty":"実行計画を表示 (Ctrl+Shift+E) を実行すると、カーソル位置の文をエンジンがどう処理するかを確認できます。","unreadable":"計画をツリーとして読み取れなかったため、エンジンの出力をそのまま表示します。","estimated":"推定値","analyzed":"実測値","estimatedHint":"オプティマイザの推定値です。文は実行されていません。","analyzedHint":"文を実際に実行しました。行数と時間は実測値です。","totalCost":"最大ノードコスト","totalTime":"最も遅いノード","rows":"推定行数","actualRows":"実際の行数","cost":"コスト","time":"時間","showRaw":"生の出力","showTree":"計画ツリー","selectNode":"ノードを選択すると、エンジンが報告した内容を確認できます。","noDetails":"このノードについて、エンジンからの追加情報はありません。","warnings":{"fullScan":"フルスキャン","noIndex":"インデックスなし","estimateOff":"推定のずれ","temporary":"一時テーブル","filesort":"ソート"},"hints":{"fullScan":"テーブルの全行を読みます。絞り込み列にインデックスがあれば回避できます。","noIndex":"このアクセスに使えるインデックスが見つかりませんでした。","estimateOff":"推定行数が大きく外れています。テーブル統計を更新すると改善することが多いです。","temporary":"次の処理に進む前に、行を一時テーブルに書き出します。","filesort":"インデックスを使わずに並べ替えています。ORDER BY に合うインデックスがあれば不要になります。"}},"structure":{"empty":"クエリ構造を表示 (Ctrl+Shift+G) すると、カーソル位置の文の行がどこから来るか分かります。","notQuery":"SELECT 文のみ構造グラフを描画できます。","unsupported":"{{engine}} の文は構造グラフとして読み取れません。","parseError":"文を解析できませんでした: {{message}}","columns_other":"{{count}} 列","columnsUnknown":"列数不明","fit":"全体に合わせる","reveal":"エディタでこの部分を選択","notDrawn":"未描画: {{what}}","kindTable":"テーブル","kindCte":"CTE","kindCteRef":"参照","kindDerived":"サブクエリ","kindScalar":"スカラー","kindSetop":"集合","kindResult":"結果","fullscreen":"全画面","exitFullscreen":"全画面を終了"},"viewer":{"fullscreen":"全画面","exitFullscreen":"全画面を終了","textTitle":"テキスト値"},"reply":{"table":"表"}}'),p={defaultDescription:`この操作は元に戻せません。`,typeToConfirm:`確認のため <name/> を入力してください`,cancel:`キャンセル`,confirm:`確認`,ok:`OK`},m={dialog:{createTitle:`テーブルを作成`,alterTitle:`テーブルを変更`,duplicateTitle:`テーブル構造を複製`,create:`作成`,alter:`変更`,cancel:`キャンセル`,tableName:`テーブル名`,tableNamePlaceholder:`テーブル名を入力...`,loading:`テーブルスキーマを読み込み中...`,tabSchema:`スキーマ`,tabIndexes:`インデックス`,tabProperties:`プロパティ`,applying:`適用中…`,cannotAlterColumns:`{{engine}} は既存の列の定義を変更できません({{columns}})。列の追加・削除・名前変更とインデックスの変更は可能です。列の定義を変えるにはテーブルを作り直してください。`},schema:{colField:`フィールド名`,colType:`データ型`,colLength:`長さ`,colDefault:`デフォルト`,colPk:`PK`,colNotNull:`Not Null`,colUnsigned:`Unsigned`,colAutoIncrement:`Auto Incr`,colZerofill:`Zerofill`,colComment:`コメント`,empty:`カラムが定義されていません。「カラムを追加」をクリックして追加してください。`,add:`カラムを追加`,remove:`カラムを削除`},indexes:{colName:`インデックス名`,colType:`インデックスの種類`,colColumns:`カラム`,empty:`インデックスが定義されていません。「インデックスを追加」をクリックして追加してください。`,add:`インデックスを追加`,remove:`インデックスを削除`},index:{addTitle:`インデックスを追加`,editTitle:`インデックスを編集`,name:`インデックス名`,namePlaceholder:`インデックス名を入力`,type:`インデックスの種類`,columns:`カラム`,noColumns:`使用できるカラムがありません。先に「スキーマ」タブでカラムを定義してください。`,unnamed:`(名前なし)`,cancel:`キャンセル`,ok:`OK`},properties:{engine:`エンジン`,charset:`文字セット`,collation:`照合順序`,autoIncrement:`Auto Increment`,autoIncrementPlaceholder:`デフォルト`,comment:`コメント`},info:{engine:`エンジン`,version:`バージョン`,rowFormat:`行フォーマット`,rows:`行数`,avgRowLength:`平均行長`,dataLength:`データサイズ`,createTime:`作成日時`,updateTime:`更新日時`,collation:`照合順序`,comment:`コメント`},copy:{title:`テーブルをコピー`,source:`コピー元`,targetConnection:`コピー先の接続`,targetDatabase:`コピー先データベース`,targetTable:`コピー先テーブル名`,what:`コピー内容`,structureAndData:`構造とデータ`,structureOnly:`構造のみ`,ifExists:`コピー先にテーブルがある場合`,abort:`中止(既定)`,dropAndRecreate:`削除して再作成(名前の再入力で確認)`,preview:`コピー先で実行する CREATE TABLE(編集可)`,crossEngineHint:`コピー先は {{engine}} です。下の型を確認してください。MySQL 固有の属性は除外されました。`,readOnly:`読み取り専用`,loading:`読み込み中…`,progressCreate:`テーブルを作成中…`,progressCount:`行数を確認中…`,progressRows:`{{total}} 行中 {{copied}} 行をコピー済み`,progressDone:`完了`,doneTitle:`テーブルをコピーしました`,doneRows:`{{table}} に {{count}} 行をコピーしました。`,doneStructure:`{{table}} の構造を作成しました。`,noColumns:`コピー元テーブルに列がありません。`,exists:`コピー先に {{table}} が既に存在します。別の名前にするか「削除して再作成」を選んでください。`,dropTitle:`既存のテーブル {{table}} を削除しますか?`,dropDescription:`コピーの前にコピー先テーブルとすべての行が削除されます。元に戻せません。`,dropConfirm:`削除してコピー`,cancelled:`コピーを中止しました。`,stop:`停止`,cancel:`キャンセル`,copy:`コピー`}},h={copy:{title:`データベースをコピー`,source:`コピー元データベース`,target:`コピー先データベース名`,targetPlaceholder:`コピー先のデータベース名を入力`,options:`オプション`,structureAndData:`構造とデータ`,structureOnly:`構造のみ`,cancel:`キャンセル`,copy:`コピー`,creating:`{{database}} を作成中…`,copying:`{{table}} をコピー中 ({{index}}/{{total}})…`},diff:{title:`スキーマを比較`,source:`比較元`,target:`比較先`,pickConnection:`接続`,pickDatabase:`データベース`,crossEngineHint:`エンジンが異なります。型名は方言ごとに違うため、多くの列が型の変更として表示されます。`,sameSide:`比較元と比較先が同じデータベースです。`,summary:`変更 {{changed}}、比較先にない {{missingTarget}}、比較先のみ {{missingSource}}、同一 {{identical}}`,showIdentical:`同一のテーブルを表示`,identicalAll:`テーブルは同一です。`,column:`列`,index:`インデックス`,object:`オブジェクト`,selectTable:`差分を見るテーブルを選択してください。`,missingInTarget:`{{table}} は比較先にありません。スクリプトが作成します。`,missingInSource:`{{table}} は比較先にのみあります。スクリプトが削除します(DROP を含めない限りコメントアウト)。`,includeDrops:`DROP 文を実行可能な SQL として含める(既定: コメントアウト)`,tabTitle:`同期 {{database}}`,close:`閉じる`,compare:`比較`,comparing:`比較中…`,openScript:`スクリプトをエディタで開く`,noDefinition:`CREATE 文を取得できません`},create:{title:`データベースを作成`,name:`データベース名`,namePlaceholder:`データベース名を入力`,charset:`文字セット`,collation:`照合順序`,cancel:`キャンセル`,create:`作成`},csv:{title:`{{format}} でダウンロード`,target:`対象`,targetQueryResult:`現在のクエリ結果`,targetTableData:`テーブルデータ`,tableName:`テーブル名`,tableNamePlaceholder:`テーブル名を入力`,delimiter:`区切り文字`,delimiterComma:`カンマ (,)`,delimiterTab:`タブ (\\t)`,delimiterSemicolon:`セミコロン (;)`,delimiterPipe:`パイプ (|)`,includeHeaders:`ヘッダーを含める`,cancel:`キャンセル`,download:`ダウンロード`,downloading:`ダウンロード中...`,progress:`{{total}} 行中 {{loaded}} 行を書き込み`,progressUnknown:`{{loaded}} 行を書き込み`,stop:`停止`,done:`{{table}} の {{count}} 行を {{format}} にエクスポートしました。`,database:`データベース`,databasePlaceholder:`データベースを選択`},html:{title:`スキーマを HTML に出力`,database:`データベース`,selectDatabase:`データベースを選択`,tables:`含めるテーブル`,selectAll:`すべて選択`,deselectAll:`すべて解除`,noTables:`使用できるテーブルがありません。`,include:`含める項目`,includeColumns:`カラム`,includeIndexes:`インデックス`,includeProperties:`プロパティ`,cancel:`キャンセル`,generate:`生成`,generating:`生成中...`,sectionColumns:`カラム`,sectionIndexes:`インデックス`,sectionProperties:`プロパティ`,docTitle:`スキーマ: {{database}}`,heading:`データベース: {{database}}`,summary:`テーブル数: {{count}} | 生成日時: {{date}}`,footer:`Planche 2026 により生成`},dataDiff:{title:`データを比較`,pickTable:`テーブル`,hint:`比較元テーブルの主キーで行を対応付け、値をテキストとして比較します。片側あたり最大 {{cap}} 行を読み込むので、大きなテーブルは先にフィルタで絞ってください。`,sameSide:`比較元と比較先が同じテーブルです。`,noPrimaryKey:`{{table}} に主キーがないため、行を対応付けできません。`,keyMissingInTarget:`比較先テーブルにキー列がありません: {{columns}}`,summary:`キー: {{key}} — 比較先にない {{added}}、相違 {{changed}}、比較先のみ {{removed}}、同一 {{identical}}`,capped:`両側とも先頭 {{cap}} 行のみ比較しました。`,ignoredColumns:`比較から除外した列(片側のみ): {{columns}}`,added_other:`比較先にない {{count}}`,changed_other:`相違 {{count}}`,removed_other:`比較先のみ {{count}}`,none:`このグループには何もありません。`,more:`… 他 {{count}} 件`,includeDeletes:`DELETE 文を実行可能な SQL として含める(既定: コメントアウト)`,tabTitle:`データ同期 {{table}}`,loading:`行を読み込み中 — 比較元: {{source}}、比較先: {{target}}`},schema:{createTitle:`スキーマを作成`,name:`スキーマ名`,namePlaceholder:`スキーマ名を入力`,create:`作成`,cancel:`キャンセル`},groupBy:{title:`グループ集計`,description:`{{table}} の行を選択した列でまとめて数えます。`,columns:`グループ化する列`,aggregate:`追加の集計`,countOnly:`件数のみ`,column:`列`,minCount:`グループごとの最小行数`,useFilter:`グリッドの現在のフィルタを適用`,noIndexWarning:`選択した列にインデックスの先頭列がないため、テーブル全体を読み込んで並べ替えます。大きなテーブルでは時間がかかることがあります。`,preview:`クエリ`,pickColumn:`グループ化する列を 1 つ以上選択してください。`,openInTab:`新しいタブで開く`,run:`実行`,tabTitle:`{{table}} のグループ集計`,indexed:`インデックスの先頭列`,connection:`接続`,database:`データベース`,table:`テーブル`}},g={manager:{title:`ユーザー管理`,addUser:`ユーザーを追加`,removeUser:`ユーザーを削除`,noUsers:`ユーザーが読み込まれていません`,grantScope:`権限の範囲`,apply:`適用`,close:`閉じる`,removed:`ユーザー '{{user}}'@'{{host}}' を削除しました`,selectUserFirst:`先にユーザーを選択してください`,applied:`変更を適用しました`,noChanges:`適用する権限の変更はありません。`},add:{title:`ユーザーを追加`,username:`ユーザー名`,usernamePlaceholder:`ユーザー名を入力`,host:`ホスト`,password:`パスワード`,passwordPlaceholder:`パスワードを入力`,confirmPassword:`パスワードの確認`,confirmPasswordPlaceholder:`パスワードを再入力`,plugin:`プラグイン`,cancel:`キャンセル`,add:`追加`,usernameRequired:`ユーザー名は必須です`,passwordMismatch:`パスワードが一致しません`,added:`ユーザー '{{user}}'@'{{host}}' を追加しました`},privileges:{globalTitle:`グローバル権限`,databaseTitle:`データベース権限`,tableTitle:`テーブル権限`,checkAll:`すべてチェック`,uncheckAll:`すべて解除`,categoryData:`データ`,categoryStructure:`構造`,categoryAdministration:`管理`},grantTree:{globalPrivileges:`グローバル権限`}},_={close:`閉じる`,noActiveConnection:`アクティブな接続がありません`,variableName:`変数名`,value:`値`,scope:{session:`セッション`,global:`グローバル`},findReplace:{findPlaceholder:`検索`,replacePlaceholder:`置換`,found:`{{count}} 件見つかりました`,noResults:`結果なし`,previous:`前へ`,next:`次へ`,close:`閉じる`,replace:`置換`,all:`すべて`,caseSensitive:`大文字と小文字を区別`,regex:`正規表現`,wholeWord:`単語単位`},flush:{title:`フラッシュ`,executed:`実行しました: {{command}}`,executeError:`{{command}} の実行中にエラーが発生しました: {{message}}`},localHistory:{title:`ローカル履歴`,description:`この接続のエディタ内容のバージョンです。実行時、入力が止まったとき、タブを閉じたときに保存されます。`,empty:`保存されたバージョンはまだありません。`,noMatch:`検索に一致するバージョンがありません。`,notPersisted:`設定 > 安全 の「再読み込み後もクエリ履歴を保持」がオフのため、バージョンはこのセッション中のみ保持されます。`,searchPlaceholder:`バージョンを検索`,scopeTab:`このタブ`,scopeAll:`すべてのタブ`,compareCurrent:`現在と比較`,comparePrevious:`直前と比較`,diffAgainstCurrent:`現在のエディタ内容と比較`,diffAgainstPrevious:`{{time}} のバージョンと比較`,noPrevious:`比較できる以前のバージョンがありません`,restored:`ローカル履歴からエディタの内容を復元しました`,restore:`このバージョンを復元`,openInNewTab:`新しいタブで開く`,openedInTab:`新しいタブでバージョンを開きました`,delete:`このバージョンを削除`,clearAll:`履歴を消去`,chars:`{{count}}文字`,reason:{execute:`実行前`,edit:`編集中`,replaced:`上書き前`,restore:`復元前`,close:`閉じる前`}},processList:{title:`プロセス一覧`,refresh:`更新`,autoRefresh:`自動更新`,empty:`表示するプロセスがありません`,kill:`強制終了`,killProcess:`プロセスを強制終了`,selectToKill:`強制終了するプロセスを選択してください`,killed:`プロセス {{id}} を強制終了しました`,killError:`プロセスの強制終了中にエラーが発生しました: {{message}}`,loadError:`プロセス一覧の読み込み中にエラーが発生しました: {{message}}`,updatedAt:`{{time}} 更新`,filterPlaceholder:`ユーザー、ホスト、DB、SQL で絞り込み...`,hideIdle:`アイドルを隠す`,noMatch:`条件に一致するプロセスがありません`,self:`自分`,selfHint:`Planche 自身のセッションです`,statementOf:`#{{id}} の実行文`,noStatement:`実行中の文なし`,copy:`コピー`,copied:`コピー済み`,killConfirmTitle:`プロセス {{id}} を終了しますか?`,killConfirmDescription:`{{user}}@{{host}} のセッションが切断され、実行中の文は中断されます。開いているトランザクションはロールバックされます。`,stats:{total:`合計`,active:`アクティブ`,idle:`アイドル`,longest:`最長実行`},columns:{id:`Id`,user:`ユーザー`,host:`ホスト`,db:`db`,command:`コマンド`,time:`時間`,state:`状態`,info:`情報`,action:`操作`}},status:{title:`サーバーステータス`,filterPlaceholder:`ステータス変数を絞り込み...`,empty:`表示するステータス変数がありません`,loadError:`ステータスの読み込み中にエラーが発生しました: {{message}}`},variables:{title:`サーバー変数`,filterPlaceholder:`変数を絞り込み...`,empty:`表示する変数がありません`,loadError:`変数の読み込み中にエラーが発生しました: {{message}}`}},v={empty:{title:`Prisma スキーマファイル (.prisma) を開いて ERD を表示`,description:`モデル、enum、リレーションが自動的に解析されます`,openFile:`.prisma ファイルを開く`,dropHint:`またはこの領域にファイルをドラッグ&ドロップ`},entity:{enumBadge:`ENUM`,modelBadge:`MODEL`,columns:{value:`値`,comment:`コメント`,type:`型`,column:`カラム`},linkBadge:`リンク`,externalTitle:`{{location}} 上のリンク先テーブル(実際の外部キーではなく列リンク)`,nullable:`NULL を許可する列`},toolbar:{refresh:`更新`,zoomIn:`拡大`,zoomOut:`縮小`,resetView:`表示をリセット`,center:`中央に配置`,fitAll:`全体を表示`,spreadAll:`重なりを解消`,resetLayout:`レイアウトをリセット`,legendOneToMany:`1:N (FK)`,tables:`テーブル:`,relations:`リレーション:`,columns:`カラム:`,fullscreen:`全画面`,exitFullscreen:`全画面を終了`},viewer:{noServerConnection:`アクティブなサーバー接続がありません`,loading:`{{database}} からスキーマを読み込み中...`,loadFailed:`ERD の読み込みに失敗しました`,noDatabase:`データベースが選択されていません。`,selectDatabaseHint:`スキーマツリーでデータベースを選択してから、「ERD を表示」を開いてください。`}},y={runAnyway:`それでも実行`,query:{rowsReturned:`{{count}} 行を返しました`,rowsAffected:`{{count}} 行が影響を受けました`,rowsReturnedLimited:`{{count}} 行を返しました({{limit}} 行に制限。さらに取得するには LIMIT を追加してください)`,notConnected:`接続されていません`,fileNotOpen:`SQLite ファイルがまだ開かれていません — 上の「ファイルを再度開く」をクリックしてアクセスを再度許可してください。`,failed:`クエリが失敗しました`,nothingToExecute:`実行するものがありません`,dryRunMismatch:`ドライランは {{predicted}} 行を見込みましたが、実際に変更されたのは {{actual}} 行です。プレビュー後にデータが変わった可能性があり、そうでなければプレビューがこの文と一致していません。`},destructive:{title_other:`{{count}} 件の破壊的なステートメントを実行しますか?`,description:`次の操作はデータを完全に変更または削除します。この操作は元に戻せません。`,unknownTarget:`(不明)`,deleteAll:`{{target}} のすべての行を DELETE`,updateAll:`{{target}} のすべての行を UPDATE`,alterDrop:`{{target}} に対する DROP COLUMN/PARTITION`},readOnly:{refused:`接続 "{{label}}" は読み取り専用です。{{count}} 件のステートメントがデータまたはスキーマを変更しようとしました。`,title:`"{{label}}" は読み取り専用です`,description:`これらのステートメントはデータまたはスキーマを変更します。それでもこの接続で実行しますか?`},transaction:{startFailed:`トランザクションを開始できませんでした`,started:`トランザクションを開始しました — 終了時にコミットまたはロールバックしてください`,implicitCommit:`{{kind}} により、開いていたトランザクションが暗黙的に COMMIT されました`,committed:`トランザクションをコミットしました`,rolledBack:`トランザクションをロールバックしました`,commandFailed:`{{name}} に失敗しました`,commandFailedWith:`{{name}} に失敗しました: {{message}}`},save:{notBrowserSqlite:`ブラウザ SQLite 接続ではありません。`,inMemory:`インメモリデータベース: ダウンロードとしてのみエクスポートできます。`,noFileSystemAccess:`このブラウザには File System Access API がありません(Chrome/Edge のみ対応): データベースはその場に書き込む代わりにダウンロードとしてエクスポートされます。`,noWritableHandle:`ファイルは書き込み可能なハンドルなしで開かれました: ダウンロードとしてエクスポートされます。`},agent:{devProxyUrl:`{{url}}(開発用プロキシ経由)`,notPlanche:`応答はありましたが、Planche エージェントではありません`,unreachable:"{{url}} の Planche エージェントに到達できません — `npx planche` を実行してください({{message}})",httpError:`HTTP エラー: {{status}} {{statusText}}`,emptyResponse:`トンネリングサーバーが空の応答を返しました`,reconnected:`{{name}} に再接続しました — エージェントが接続を破棄していました (再起動またはアイドルタイムアウト)。`,driverUnsupported:`このエージェントはまだ {{driver}} 接続を開けません。npx planche@latest を実行するか、スタンドアロン版なら planche upgrade で更新してください。`},sample:{profileName:`サンプルショップ(ブラウザ内)`,downloadFailed:`サンプルデータベースをダウンロードできませんでした({{status}})`,tabTitle:`クエリ 1`},sqliteFile:{tooSmall:`ファイルが小さすぎるため SQLite データベースではありません。`,notSqlite:`SQLite データベースではありません(または SQLCipher などで暗号化されています)。16 バイトのヘッダーが "SQLite format 3" ではありません。`,badPageSize:`SQLite ヘッダーが破損しています: 無効なページサイズ {{size}}。`,unreadable:`SQLite がファイルを読み取れませんでした: {{message}}`,pickerDescription:`SQLite データベース`,walNotLoaded:`このデータベースは WAL モードですが、-wal ファイルが読み込まれていません。保存する前に読み込むか、バナーで -wal ファイルが存在しないことを確認してください。`,changedOnDisk:`{{name}} は読み込み後にディスク上で変更されました(他のプログラムが書き込みました)。保存するとその変更が上書きされます — ファイルを再度開いて編集をやり直すか、トンネリングサーバーを使用してください。`,walHasChanges:`{{name}}-wal に新しい変更があります。保存する前に読み込んでください。`,walChangedOnDisk:`{{name}}-wal は読み込み後に他のプログラムによって書き込まれました。保存する前にファイルを再度開いてください。`,writeDenied:`{{name}} への書き込みアクセスが許可されませんでした。ブラウザのプロンプトで許可するか、代わりにダウンロードとしてエクスポートしてください。`},environment:{none:`なし`,green:`緑(開発)`,blue:`青`,yellow:`黄(ステージング)`,orange:`オレンジ`,red:`赤(本番)`,purple:`紫`},scratchpad:{profileName:`スクラッチパッド`,namePromptTitle:`スクラッチパッドのテーブル名`,namePromptDescription:`スクラッチパッドに {{table}} という名前のテーブルが既にあります。別の名前を入力してください。`,nameTaken:`テーブル {{table}} は既に存在します。`},federated:{pulling:`{{connection}} から {{table}} を取得中…`,capped:`{{table}}: 先頭 {{limit}} 行のみ取得しました。`,templateLine1:`開いている接続のテーブルを "接続名".database.table として参照します。文の実行前にこのスクラッチパッドへコピーされます。`,templateLine2:`テーブルごとに最大 {{limit}} 行。クエリ自体はブラウザ内の SQLite で実行されます。`,templateConnections:`開いている接続: {{names}}`,templateNone:`まだ他の接続が開いていません。接続してからここで参照してください。`,done:`リモートテーブル {{tables}} 個から {{rows}} 行をスクラッチパッドへ取得しました。`,pullingProgress:`{{connection}} から {{table}} を取得中: {{loaded}} / {{total}} 行…`},paged:{noColumns:`{{table}} に列がありません。`,cancelled:`キャンセルしました。`},console:{unreadable:`{{line}}行目: {{message}}`}},b={title:`利用規約`,version:`バージョン {{version}}`,englishOnly:`規約の全文は英語で提供されます。ようこそ画面の要約はお使いの言語で表示されます。`,privacyLink:`プライバシーポリシー`,refundLink:`返金ポリシー`,online:`planche.dev で読む`,updated:`最終更新 {{date}}`},x={title:`{{kind}} は {{count}} 行に影響します`,titleUnknown:`{{kind}} — 影響行数は不明`,description:`この文が今触れる行を SELECT で先に読んだものです。まだ何も書き込んでいません。`,previewFailed:`プレビュークエリが失敗しました: {{error}}
2
2
  それでも文を実行できます。`,noRows:`一致する行がありません — この文は何も変更しません。`,truncated:`{{count}} 行のうち先頭 {{shown}} 行を表示しています。`,previewQuery:`プレビュークエリ`,run:`{{kind}} を実行({{count}} 行)`,runAnyway:`それでも実行`},S={badge:`PRO`,tooltip:`Pro ライセンスが必要です。`,noticeTitle:`Pro 機能`,notice:`PRO と表示された機能には Pro ライセンスが必要です。`,licenseTitle:`Planche Pro`,licenseDescription:`購入メールに記載されたライセンスキーを貼り付けてください。このコンピュータ上で確認し、どこにも送信しません。`,blocked:`{{feature}}には Pro ライセンスが必要です。`,keyLabel:`ライセンスキー`,activate:`有効化`,remove:`ライセンスを削除`,active:`Pro が有効です。`,licensedTo:`{{email}} 様のライセンス`,validUntil:`{{date}} まで有効`,expiredOn:`{{date}} に期限が切れました。Pro 機能を使い続けるには更新してください。`,invalidKey:`Planche のライセンスキーではありません。`,notConfigured:`このビルドはライセンスキーを確認できません。ご連絡ください。`,noWebcrypto:`このブラウザではライセンスキーを確認できません。`,pricing:`料金を見る`,features:{ssh_tunnel:`SSH トンネル`,compare_schemas:`スキーマ比較`,compare_data:`データ比較`,copy_table:`テーブルコピー`,dry_run:`ドライラン`,federated:`フェデレーテッドクエリ`,scratchpad:`スクラッチパッド`,column_link:`カラムリンク`,sync:`接続の同期`,ai_explain:`AI による説明`},included:`Pro に含まれる機能`,haveKey:`すでにライセンスキーをお持ちですか?`,perMonth:`/ 月`,priceNote:`年に 1 回 {{annual}} を請求。月払いは {{monthly}} です。`,featureDetails:{sync:`ブラウザで暗号化したプロファイルを、どのコンピュータでも`,ssh_tunnel:`踏み台の先のデータベースにパスワード・鍵・ssh-agent で接続`,compare_schemas:`開いている 2 つの接続を比較して ALTER スクリプトを取得`,compare_data:`2 つのテーブルの行を比較して INSERT・UPDATE スクリプトを取得`,copy_table:`別の接続へ、別のエンジンへテーブルを作り直す`,dry_run:`UPDATE・DELETE が何行をどう変えるのか実行前に確認`,federated:`異なる接続にあるテーブルを結合`,scratchpad:`作業データ用のローカル SQLite データベース`,column_link:`グリッドでたどれる仮想外部キー`,ai_explain:`失敗した文や遅いプランの理由をモデルに尋ねる — スキーマを添えて`}},C={npxNote:`Node.js 22 以上が必要です。恒久的にインストールされるものはなく、npx が npm レジストリから直接実行します。`,installNote:`Node.js は不要です。管理者権限なしでホームディレクトリの中だけにインストールされ、以後は planche コマンドでいつでも起動できます。`},w={unsupported:`{{engine}} は実行計画を提供しません。`,oneStatement:`実行計画は一度に 1 文だけ解析します。対象の文にカーソルを置くか選択してください。`},T={title:`AI アシスタント`,intro:`クエリを頼んだり、やることを指示してください — スキーマを読み、タブに SQL を書いて実行します。動くのは開いている接続だけで、会話は接続ごとに分かれています。`,privacy:`ツールが読んだ内容は、サンプル行を含めて利用中の provider に送信されます。planche.dev には何も送られません。`,placeholder:`例: デモ DB で月次売上のクエリを作って`,send:`送信`,stop:`停止`,clear:`新しい会話`,working:`実行中…`,tabTitle:`AI クエリ`,approvalTitle:`書き込みを伴います。実行しますか?`,approve:`実行`,reject:`スキップ`,rejected:`ユーザーが実行を拒否しました。`,notConfigured:`エージェントに AI キーがありません。設定 ▸ AI で追加してください。`,needsAgent:`このローカルエージェントはまだツールを実行できません。更新して再度ペアリングしてください。`,failed:`失敗`,empty:`まだ何も尋ねていません。`,steps:`{{count}} ステップ`,tooManySteps:`{{count}} ステップ進みましたが答えに至りませんでした。`,collapse:`折りたたむ`,planWarningTitle:`このクエリはフルスキャンです。実行しますか?`,interrupted:`リロードで中断されました。`,external:`Planche の外から要求された操作です`},E={title:`AI エージェントを接続 (MCP)`,description:`MCP に対応した AI エージェントから Planche のツールを使えるようにします。`,readsLabel:`読み取り`,reads:`開いているデータベースを読み、その結果は相手のプログラムに渡ります。`,writesLabel:`書き込み`,writes:`データを変更する文には承認が要ります。DROP と TRUNCATE は実行できません。`,needsLabel:`条件`,needs:`AI パネルが開いている必要があります。`,tokenLabel:`トークン`,token:`一つを複数のプログラムで共有します。失効させると全部切れます。`,command:`Claude Code に追加`,json:`手動で設定`,stored:`{{path}} に保存されます。`,revoke:`トークンを失効`,revoked:`失効しました。新しく発行するにはこの画面を開き直してください。`},D={title:`接続の同期`,description:`接続プロファイルをこのブラウザで暗号化し、planche.dev に保管します。ほかのコンピュータからもそのまま使えます。`,stored:`サーバーに置かれるのは暗号化された塊ひとつだけです。ホスト・ユーザー・パスワード・SSH 鍵を読むことはできません。`,unavailable:`同期は planche.dev でのみ動きます。この Planche はローカルエージェントが配信しており、エージェントは外部へ接続できないようにしてあります。`,signIn:`GitHub でログイン`,signedInAs:`{{email}} でログイン中`,signOut:`ログアウト`,createTitle:`パスフレーズを決める`,createHint:`このパスフレーズがプロファイルを暗号化します。サーバーには送られないため、失うと保管された控えは復元できません — プロファイルが残っているコンピュータから作り直すしかありません。`,passphrase:`パスフレーズ`,confirm:`パスフレーズの確認`,mismatch:`2 つのパスフレーズが一致しません。`,tooShort:`{{count}} 文字以上で入力してください。`,enable:`同期を有効にする`,unlockTitle:`プロファイルのロック解除`,unlockHint:`同期を有効にしたときに決めたパスフレーズを入力してください。`,unlock:`ロック解除`,wrongPassphrase:`パスフレーズが違うか、保管された控えが壊れています。`,syncNow:`今すぐ同期`,lastSynced:`最終同期 {{when}}`,neverSynced:`まだ同期していません`,profiles_one:`プロファイル {{count}} 件`,profiles_other:`プロファイル {{count}} 件`,changePassphrase:`パスフレーズを変更`,deleteVault:`サーバーから削除`,deleteVaultConfirm:`planche.dev にある暗号化された控えを削除しますか?このコンピュータのプロファイルはそのまま残ります。`,offline:`planche.dev に接続できません。`,working:`処理中…`,serverError:`planche.dev が処理を完了できませんでした。しばらくしてからお試しください。`,signInShort:`ログイン`,needsPro:`ログインしました。プロファイルの同期には Pro ライセンスが必要で、取得すればすぐに動きます。`,deleteAccount:`アカウントを削除`,deleteAccountConfirm:`アカウントを削除しますか?保管された控えとログイン情報も一緒に消えます。このコンピュータのプロファイルはそのまま残ります。`,notDeployed:`このサイトではまだ接続の同期が有効になっていません。`},O={closeTitle:`Planche を閉じますか?`,closeDescription:`未保存の作業があります: 開いているトランザクション、コミットしていない編集、または実行中のクエリ。閉じると破棄され、ロールバックされます。`,closeAnyway:`閉じる`},k={add:`追加`,addRow:`追加`,cancel:`キャンセル`,save:`保存`,edit:`編集`,revert:`元に戻す`,deleteRow:`削除`,empty:`項目がありません。`,filterPlaceholder:`フィルター(テキストまたは glob)、Enter`,loadMore:`さらに読み込む`,loading:`読み込み中…`,formatJson:`JSON を整形`,prettyReadOnly:`編集するには JSON 整形をオフにしてください`,truncated:`先頭 {{size}} のみ表示`,loadFull:`すべて読み込む`,field:`フィールド`,value:`値`,member:`メンバー`,score:`スコア`,index:`インデックス`,pushTail:`末尾に追加`,pushHead:`先頭に追加`,entryId:`ID`,fields:`フィールド`,entryFieldsPlaceholder:`フィールド 値; フィールド 値`,entryFieldsRequired:`エントリには少なくとも 1 つのフィールドが必要です。`,rename:`名前を変更`,renameTaken:`{{name}} というキーは既に存在します。`,ttlEdit:`有効期限を設定`,ttlPlaceholder:`秒(空欄で無期限)`,ttlInvalid:`有効期限は正の秒数か、無期限なら空欄にしてください。`,noExpiry:`有効期限なし`,memory:`メモリ {{size}}`,encoding:`エンコーディング: {{encoding}}`,refresh:`更新`,openInConsole:`コンソールで開く`,delete:`キーを削除`,deleteTitle:`{{name}} を削除しますか?`,deleteDescription:`キーと値が削除され、元に戻せません。`,notConnected:`接続されていません。再接続するとキーを表示できます。`,gone:`このキーはもう存在しません(削除または期限切れ)。`,unsupported:`{{type}} 型のキーにはまだビューアがありません。コンソールで開いてください。`,noViewer:`この接続にはこの項目のビューアがありません。`,shown_other:`{{count}} 件表示`,shownOf_other:`{{total}} 件中 {{count}} 件表示`,bytes_other:`{{count}} バイト`,length_other:`{{count}} 件`,viewTree:`ツリー`,viewText:`テキスト`,viewHtml:`HTML`,htmlPreviewTitle:`HTML プレビュー(スクリプト無効)`},A={meta:`version {{version}} · seq_no {{seqNo}} · primary_term {{primaryTerm}}`,delete:`ドキュメントを削除`,deleteTitle:`ドキュメント {{id}} を削除しますか?`,deleteDescription:`{{index}} からドキュメントが削除され、元に戻せません。`,gone:`このドキュメントはもう存在しません。`,invalidJson:`有効な JSON ではありません: {{message}}`,conflict:`読み込み後にドキュメントが変更されたため、保存しませんでした。更新して最新版を確認してから再度編集してください。`},j={unavailable:`この接続ではこのツールを使えません。`,autoRefresh:`{{seconds}}秒ごとに更新`,filter:`フィルター`,redis:{server:`サーバー情報`,slowlog:`スローログ`,clients:`クライアント`,cardServer:`サーバー`,cardMemory:`メモリ`,cardActivity:`アクティビティ`,cardPersistence:`永続化とレプリケーション`,unlimited:`無制限`,keyspace:`キースペース`,allFields:`INFO の全項目`,slowlogThreshold:`{{ms}} ms より遅いと記録`,slowlogReset:`スローログを消去`,slowlogResetTitle:`スローログを消去しますか?`,slowlogResetDescription:`このサーバーの全エントリが、閲覧している全員から消えます。`,slowlogEmpty:`スローログは空です。`,time:`時刻`,duration:`所要時間`,command:`コマンド`,client:`クライアント`,thisApp:`このアプリ`,kill:`切断`,killTitle:`{{addr}} を切断しますか?`,killDescription:`クライアントの接続と実行中の処理が切れます。自動で再接続する場合があります。`,memory:`メモリ分析`,delete:`パターンでキーを削除`,deleteUnder:`このプレフィックスのキーを削除…`,analyze:`分析`,upTo:`最大 {{count}} キー`,memoryNote:`SCAN と MEMORY USAGE で各キーのサイズ・型・有効期限をバッチで読みます。負荷の高い本番サーバーでは負荷が増えます。大きなコレクションの MEMORY USAGE は一部の要素から推定した値です。`,scanned:`{{total}} 件中 {{scanned}} 件のキーを確認`,partial:`部分的な結果`,keysAnalyzed:`分析したキー`,totalMemory:`メモリ`,average:`キーあたり平均`,missingSizes_other:`{{count}} 件のキーはサイズを取得できず 0 バイトとして数えました(MEMORY USAGE の拒否、またはスキャン中に期限切れ)。`,byType:`型別`,byTtl:`有効期限別`,byPrefix:`プレフィックス別`,largest:`最大のキー`,ttlNone:`有効期限なし`,prefixHint:`プレフィックスをクリックするとそのキーの削除画面、キーをクリックするとキービューアが開きます。`,deleteIntro:`パターンに一致するキーを探して確認し、削除します。パターンは Redis の glob 構文です: * 任意の文字列、? 1 文字、[abc] 文字集合。`,preview:`一致するキーを検索`,deleteAllWarning:`* はこのデータベースのすべてのキーに一致します。`,matchCount:`{{database}} で {{count}} 件のキーが一致`,matchCapped:`({{cap}} 件で停止。削除後に再実行すると残りを検索します)`,deleteConfirm:`確認のため {{pattern}} と入力してください。`,deleteKeys:`{{count}} 件のキーを削除`,deleteNote:`UNLINK で 500 件ずつ削除します。検索後に作成されたキーは含まれません。`,deletedCount:`{{count}} 件のキーを削除しました。`,deleteReadOnly:`読み取り専用の接続です。`,noKeys:`{{database}} にキーはありません。`,pubsub:`Pub/Sub`,monitor:`モニター`,subscribePlaceholder:`チャンネルまたはパターン(例: news orders.*)`,subscribe:`購読`,unsubscribe:`購読解除`,listening:`{{targets}} を受信中`,publish:`発行`,channel:`チャンネル`,message:`メッセージ`,send:`送信`,receivers_other:`{{count}} 件の購読者が受信`,waitingMessages:`メッセージを待っています…`,pubsubIntro:`チャンネル(news)やパターン(orders.*)を購読すると、発行されたメッセージがリアルタイムで表示されます。購読は専用の接続を使い、解除するかタブを閉じると終了します。`,feedLimit:`最新 {{count}} 件のみ表示しています。古いものは破棄しました。`,startMonitor:`モニター開始`,monitoring:`すべてのコマンドを監視中`,dropped_other:`追いつくため {{count}} 件のコマンドを省略`,monitorWarning:`MONITOR はすべてのクライアントのすべてのコマンドを表示し、Redis はコマンドごとにこの画面へ複製を送ります。負荷の高い本番サーバーではスループットが実際に下がるので、短時間だけ使って停止してください。`,monitorReadOnly:`読み取り専用の接続では MONITOR を使えません。すべてのクライアントのコマンドを表示するためです。`},stop:`停止`,clear:`クリア`},M={title:`Planche の新機能`,description:`前回開いたときから変わったところです。`,agentOutdated:`これらを使うにはエージェントを {{required}} 以降に更新してください(現在は {{current}})。ターミナルで次を実行してください:`,allChanges:`すべての変更履歴を見る`,close:`OK`},N={pairFailedTitle:`エージェントとペアリングできませんでした`,agentOffline:`このコンピューターで応答するエージェントがありません。ターミナルで下のコマンドを実行してエージェントを起動し、表示されたリンクを開いてください。
3
3
  すでに起動している場合は、Chrome がこのページからのローカル接続を止めている可能性があります。アドレスバー左のアイコンをクリックし、ローカルネットワークへのアクセスを許可してください。`,agentOutdated:`このコンピューターのエージェントが古いため、この機能は使えません。エージェントを止め、下のコマンドで更新してから起動し直してください。`,agentToken:`エージェントが再起動したため、このページに保存されたトークンは使えなくなりました。エージェントのターミナルに表示された新しいリンクを開いてください。`,codeRejected:`ペアリングリンクは 1 回だけ、10 分以内しか使えません。エージェントのターミナルに表示された最新のリンクを開いてください。`,agentLocked:`間違った試行が続いたため、エージェントは 30 秒間リクエストを受け付けません。少し待ってから、ターミナルの最新のリンクを開いてください。`,originBlocked:`エージェントが受け付けるのは planche.dev とローカルの開発サーバーで開いたアプリだけです。planche.dev で Planche を開くか、--origin にこのページのアドレスを付けてエージェントを起動してください。`,sshAuth:`SSH サーバーがログインを拒否しました。SSH の項目にあるユーザーと、パスワードまたは秘密鍵を確認してください。`,dbAuth:`データベースがログインを拒否しました。ユーザー名とパスワードを確認してください。`,network:`エージェントが DB サーバーに接続できませんでした。ホストとポート、サーバーが起動しているかを確認してください。エージェントは手元のコンピューターで動くので、localhost は手元のコンピューターを指します。別のネットワークにあるサーバーには SSH トンネルが必要な場合があります。`,tls:`サーバーの TLS 証明書を検証できませんでした。自己署名証明書の場合は、TLS の項目で「{{verify}}」をオフにしてください。`,agentOfflineUnknown:`このコンピューターで応答するエージェントがありません。ターミナルで下のコマンド(install.sh でインストールした場合は planche)を実行してエージェントを起動し、表示されたリンクを開いてください。
4
4
  すでに起動している場合は、Chrome がこのページからのローカル接続を止めている可能性があります。アドレスバー左のアイコンをクリックし、ローカルネットワークへのアクセスを許可してください。`,agentOutdatedUnknown:`このコンピューターのエージェントが古いため、この機能は使えません。エージェントを止めて、下のコマンドで最新版を起動してください(install.sh でインストールした場合は planche upgrade を実行します)。`},P={app:e,language:t,settings:n,menu:r,about:i,connection:a,toolbar:o,footer:s,palette:c,welcome:l,schema:u,query:d,result:f,confirm:p,table:m,database:h,user:g,command:_,erd:v,services:y,terms:b,dryRun:x,pro:S,install:C,explain:w,ai:T,mcp:E,sync:D,desktop:O,keyViewer:k,docViewer:A,tools:j,whatsNew:M,failureHint:N};export{i as about,T as ai,e as app,_ as command,p as confirm,a as connection,h as database,P as default,O as desktop,A as docViewer,x as dryRun,v as erd,w as explain,N as failureHint,s as footer,C as install,k as keyViewer,t as language,E as mcp,r as menu,c as palette,S as pro,d as query,f as result,u as schema,y as services,n as settings,D as sync,m as table,b as terms,o as toolbar,j as tools,g as user,l as welcome,M as whatsNew};
@@ -1 +1 @@
1
- import{r as e}from"./hePW80VL.js";import{p as t}from"./CYz610vE.js";import{r as n}from"./Cu_sGzNJ.js";import{a as r,o as i}from"./Udlj1Cgf.js";var a=e(t(),1),o=n();function s({access:e,value:t,onChange:n,disabled:s,version:c=0}){let[l,u]=(0,a.useState)([]);(0,a.useEffect)(()=>{let t=!1;return e.tryRead(`INFO keyspace`).then(e=>{t||typeof e!=`string`||u(Object.entries(r(e).keyspace??{}).map(([e,t])=>({db:e,keys:i(t).keys})))}),()=>{t=!0}},[e,c]);let d=l.some(e=>e.db===t)?l:[{db:t,keys:NaN},...l];return(0,o.jsx)(`select`,{value:t,disabled:s,onChange:e=>n(e.target.value),className:`h-7 rounded border bg-background px-1 text-xs`,children:d.map(e=>(0,o.jsxs)(`option`,{value:e.db,children:[e.db,Number.isFinite(e.keys)?` (${e.keys.toLocaleString()})`:``]},e.db))})}export{s as t};
1
+ import{r as e}from"./hePW80VL.js";import{p as t}from"./CyX8oVsa.js";import{r as n}from"./C76CctEl.js";import{a as r,o as i}from"./Udlj1Cgf.js";var a=e(t(),1),o=n();function s({access:e,value:t,onChange:n,disabled:s,version:c=0}){let[l,u]=(0,a.useState)([]);(0,a.useEffect)(()=>{let t=!1;return e.tryRead(`INFO keyspace`).then(e=>{t||typeof e!=`string`||u(Object.entries(r(e).keyspace??{}).map(([e,t])=>({db:e,keys:i(t).keys})))}),()=>{t=!0}},[e,c]);let d=l.some(e=>e.db===t)?l:[{db:t,keys:NaN},...l];return(0,o.jsx)(`select`,{value:t,disabled:s,onChange:e=>n(e.target.value),className:`h-7 rounded border bg-background px-1 text-xs`,children:d.map(e=>(0,o.jsxs)(`option`,{value:e.db,children:[e.db,Number.isFinite(e.keys)?` (${e.keys.toLocaleString()})`:``]},e.db))})}export{s as t};
@@ -1 +1 @@
1
- import{r as e,t}from"./hePW80VL.js";var n=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.8`})),r=t(((e,t)=>{t.exports=n()})),i=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,a={"&amp;":`&`,"&#38;":`&`,"&lt;":`<`,"&#60;":`<`,"&gt;":`>`,"&#62;":`>`,"&apos;":`'`,"&#39;":`'`,"&quot;":`"`,"&#34;":`"`,"&nbsp;":` `,"&#160;":` `,"&copy;":`©`,"&#169;":`©`,"&reg;":`®`,"&#174;":`®`,"&hellip;":`…`,"&#8230;":`…`,"&#x2F;":`/`,"&#47;":`/`},o=e=>a[e],s=e=>e.replace(i,o),c={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:s,transDefaultProps:void 0},l=(e={})=>{c={...c,...e}},u=()=>c,d,f=e=>{d=e},p=()=>d,m=`G-2FYJTCC2TH`,h=!1,g=!1,_=!1,v=[],y=20,b=`planche.internalTraffic`;function x(){if(typeof window>`u`)return!1;try{let e=new URLSearchParams(window.location.search).get(`internal`);return e===`1`?localStorage.setItem(b,`1`):e===`0`&&localStorage.removeItem(b),localStorage.getItem(b)===`1`}catch{return!1}}function S(){let e=typeof document<`u`&&document.querySelector(`meta[name="planche-agent"]`)!==null;return!!m&&typeof window<`u`&&!e}function C(){window.dataLayer=window.dataLayer??[],window.dataLayer.push(arguments)}function w(){if(h)return;h=!0,window.gtag=C,C(`js`,new Date),C(`config`,m,{anonymize_ip:!0,allow_google_signals:!1,allow_ad_personalization_signals:!1,app_version:`0.1.1`,..._?{traffic_type:`internal`}:{}});let e=document.createElement(`script`);e.async=!0,e.src=`https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(m)}`,document.head.appendChild(e)}function T(e){if(_=x(),g=e&&S(),!S()){v=null;return}window[`ga-disable-${m}`]=!g,g&&w();let t=v??[];v=null;for(let[e,n]of t)k(e,n)}function E(e){if(g)try{C(`set`,`user_properties`,e)}catch{}}function D(e){return e===0?`0`:e===1?`1`:e<=3?`2-3`:e<=10?`4-10`:`10+`}function O(e){return e<=1?`1`:e<=5?`2-5`:e<=20?`6-20`:e<=50?`21-50`:e<=100?`51-100`:`100+`}function k(e,t={}){if(v){v.length<y&&v.push([e,t]);return}if(!g)return;let n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);try{C(`event`,e,n)}catch{}}var A=e(r(),1),j=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},M=(e=>e?j(e):j),N=e=>e;function P(e,t=N){let n=A.useSyncExternalStore(e.subscribe,A.useCallback(()=>t(e.getState()),[e,t]),A.useCallback(()=>t(e.getInitialState()),[e,t]));return A.useDebugValue(n),n}var F=e=>{let t=M(e),n=e=>P(t,e);return Object.assign(n,t),n},I=(e=>e?F(e):F);export{E as a,p as c,l as d,s as f,T as i,f as l,D as n,k as o,r as p,S as r,O as s,I as t,u};
1
+ import{r as e,t}from"./hePW80VL.js";var n=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+j(a,u),c+=N(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+j(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},L={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!O(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=L,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=O,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.8`})),r=t(((e,t)=>{t.exports=n()})),i=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,a={"&amp;":`&`,"&#38;":`&`,"&lt;":`<`,"&#60;":`<`,"&gt;":`>`,"&#62;":`>`,"&apos;":`'`,"&#39;":`'`,"&quot;":`"`,"&#34;":`"`,"&nbsp;":` `,"&#160;":` `,"&copy;":`©`,"&#169;":`©`,"&reg;":`®`,"&#174;":`®`,"&hellip;":`…`,"&#8230;":`…`,"&#x2F;":`/`,"&#47;":`/`},o=e=>a[e],s=e=>e.replace(i,o),c={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:s,transDefaultProps:void 0},l=(e={})=>{c={...c,...e}},u=()=>c,d,f=e=>{d=e},p=()=>d,m=`G-2FYJTCC2TH`,h=!1,g=!1,_=!1,v=[],y=20,b=`planche.internalTraffic`;function x(){if(typeof window>`u`)return!1;try{let e=new URLSearchParams(window.location.search).get(`internal`);return e===`1`?localStorage.setItem(b,`1`):e===`0`&&localStorage.removeItem(b),localStorage.getItem(b)===`1`}catch{return!1}}function S(){let e=typeof document<`u`&&document.querySelector(`meta[name="planche-agent"]`)!==null;return!!m&&typeof window<`u`&&!e}function C(){window.dataLayer=window.dataLayer??[],window.dataLayer.push(arguments)}function w(){if(h)return;h=!0,window.gtag=C,C(`js`,new Date),C(`config`,m,{anonymize_ip:!0,allow_google_signals:!1,allow_ad_personalization_signals:!1,app_version:`0.9.3`,..._?{traffic_type:`internal`}:{}});let e=document.createElement(`script`);e.async=!0,e.src=`https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(m)}`,document.head.appendChild(e)}function T(e){if(_=x(),g=e&&S(),!S()){v=null;return}window[`ga-disable-${m}`]=!g,g&&w();let t=v??[];v=null;for(let[e,n]of t)k(e,n)}function E(e){if(g)try{C(`set`,`user_properties`,e)}catch{}}function D(e){return e===0?`0`:e===1?`1`:e<=3?`2-3`:e<=10?`4-10`:`10+`}function O(e){return e<=1?`1`:e<=5?`2-5`:e<=20?`6-20`:e<=50?`21-50`:e<=100?`51-100`:`100+`}function k(e,t={}){if(v){v.length<y&&v.push([e,t]);return}if(!g)return;let n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);try{C(`event`,e,n)}catch{}}var A=e(r(),1),j=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},M=(e=>e?j(e):j),N=e=>e;function P(e,t=N){let n=A.useSyncExternalStore(e.subscribe,A.useCallback(()=>t(e.getState()),[e,t]),A.useCallback(()=>t(e.getInitialState()),[e,t]));return A.useDebugValue(n),n}var F=e=>{let t=M(e),n=e=>P(t,e);return Object.assign(n,t),n},I=(e=>e?F(e):F);export{E as a,p as c,l as d,s as f,T as i,f as l,D as n,k as o,r as p,S as r,O as s,I as t,u};
@@ -1 +1 @@
1
- import{t as e}from"./CiL8zoYm.js";import{i as t,r as n}from"./Cu_sGzNJ.js";import{a as r,i,n as a,o,r as s,t as c}from"./DzRyVlxz.js";import{a as l,i as u,n as d,r as f,t as p}from"./G06qjCej.js";import{n as m}from"./DU-Eln5x.js";import{n as h}from"./D8_hwGjG.js";import{c as g,l as _}from"./CExE8dKz.js";import{t as v}from"./CrhJJH3f.js";var y=n();function b(){let n=h(e=>e.activeDialog),b=h(e=>e.closeDialog),x=m(),S=x.update,{t:C}=t();return(0,y.jsx)(c,{open:n===`query-settings`,onOpenChange:e=>{e||b()},children:(0,y.jsxs)(a,{className:`sm:max-w-[560px]`,children:[(0,y.jsxs)(r,{children:[(0,y.jsx)(o,{children:C(`settings.query.title`)}),(0,y.jsx)(s,{children:C(`settings.query.description`)})]}),(0,y.jsxs)(`div`,{className:`grid gap-2`,children:[(0,y.jsx)(v,{id:`s-dryrun`,checked:x.previewAffectedRows,onChange:e=>S({previewAffectedRows:e}),pro:!0,label:`Dry run`,hint:`Before an UPDATE or DELETE runs, read its WHERE (joins included) as a SELECT and show how many rows it would change, with a sample of them, to confirm.`}),(0,y.jsxs)(`div`,{className:`grid grid-cols-[1fr_140px] items-center gap-3 rounded-md border p-3`,children:[(0,y.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,y.jsx)(g,{htmlFor:`s-limit`,className:`text-sm font-medium`,children:`Result row limit`}),(0,y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`LIMIT appended to SELECTs that have none. 0 disables.`})]}),(0,y.jsx)(_,{id:`s-limit`,type:`number`,min:0,step:100,value:x.resultRowLimit,onChange:e=>S({resultRowLimit:Math.max(0,Number(e.target.value)||0)})})]}),(0,y.jsxs)(`div`,{className:`grid grid-cols-[1fr_200px] items-center gap-3 rounded-md border p-3`,children:[(0,y.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,y.jsx)(`span`,{className:`text-sm font-medium`,children:`F9 / Run button executes`}),(0,y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Ctrl+Enter always runs the statement at the cursor; Ctrl+Shift+Enter the whole script.`})]}),(0,y.jsxs)(p,{value:x.executeScope,onValueChange:e=>S({executeScope:e}),children:[(0,y.jsx)(u,{children:(0,y.jsx)(l,{})}),(0,y.jsxs)(d,{children:[(0,y.jsx)(f,{value:`script`,children:`Whole script`}),(0,y.jsx)(f,{value:`statement`,children:`Statement at cursor`})]})]})]})]}),(0,y.jsx)(i,{children:(0,y.jsx)(e,{onClick:b,children:C(`settings.done`)})})]})})}export{b as QuerySettingsDialog};
1
+ import{t as e}from"./Dya0zxo6.js";import{i as t,r as n}from"./C76CctEl.js";import{a as r,i,n as a,o,r as s,t as c}from"./kTwcxyaO.js";import{a as l,i as u,n as d,r as f,t as p}from"./34iJa-68.js";import{n as m}from"./DOy06rIE.js";import{n as h}from"./BihjBM79.js";import{c as g,l as _}from"./D4DxtYTA.js";import{t as v}from"./MeOkctzz.js";var y=n();function b(){let n=h(e=>e.activeDialog),b=h(e=>e.closeDialog),x=m(),S=x.update,{t:C}=t();return(0,y.jsx)(c,{open:n===`query-settings`,onOpenChange:e=>{e||b()},children:(0,y.jsxs)(a,{className:`sm:max-w-[560px]`,children:[(0,y.jsxs)(r,{children:[(0,y.jsx)(o,{children:C(`settings.query.title`)}),(0,y.jsx)(s,{children:C(`settings.query.description`)})]}),(0,y.jsxs)(`div`,{className:`grid gap-2`,children:[(0,y.jsx)(v,{id:`s-dryrun`,checked:x.previewAffectedRows,onChange:e=>S({previewAffectedRows:e}),pro:!0,label:`Dry run`,hint:`Before an UPDATE or DELETE runs, read its WHERE (joins included) as a SELECT and show how many rows it would change, with a sample of them, to confirm.`}),(0,y.jsxs)(`div`,{className:`grid grid-cols-[1fr_140px] items-center gap-3 rounded-md border p-3`,children:[(0,y.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,y.jsx)(g,{htmlFor:`s-limit`,className:`text-sm font-medium`,children:`Result row limit`}),(0,y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`LIMIT appended to SELECTs that have none. 0 disables.`})]}),(0,y.jsx)(_,{id:`s-limit`,type:`number`,min:0,step:100,value:x.resultRowLimit,onChange:e=>S({resultRowLimit:Math.max(0,Number(e.target.value)||0)})})]}),(0,y.jsxs)(`div`,{className:`grid grid-cols-[1fr_200px] items-center gap-3 rounded-md border p-3`,children:[(0,y.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,y.jsx)(`span`,{className:`text-sm font-medium`,children:`F9 / Run button executes`}),(0,y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Ctrl+Enter always runs the statement at the cursor; Ctrl+Shift+Enter the whole script.`})]}),(0,y.jsxs)(p,{value:x.executeScope,onValueChange:e=>S({executeScope:e}),children:[(0,y.jsx)(u,{children:(0,y.jsx)(l,{})}),(0,y.jsxs)(d,{children:[(0,y.jsx)(f,{value:`script`,children:`Whole script`}),(0,y.jsx)(f,{value:`statement`,children:`Statement at cursor`})]})]})]})]}),(0,y.jsx)(i,{children:(0,y.jsx)(e,{onClick:b,children:C(`settings.done`)})})]})})}export{b as QuerySettingsDialog};