planche 0.8.7 → 0.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/app/assets/{Lv_K3w8K.js → -G3y8cdl.js} +1 -1
  2. package/app/assets/{BHp-ICZv.js → -gVBPNvj.js} +1 -1
  3. package/app/assets/{rcI4Fmt0.js → 1XwwL8xu.js} +1 -1
  4. package/app/assets/3z4eHGF-.js +1 -0
  5. package/app/assets/{Ca4g4XbM.js → B49XtolG.js} +1 -1
  6. package/app/assets/{CyNRK4kc.js → B7JLTli_.js} +1 -1
  7. package/app/assets/{fDSXGLmI.js → BAZqI8g_.js} +2 -2
  8. package/app/assets/{C5SHWmPn.js → BHsXOlR9.js} +1 -1
  9. package/app/assets/{CgWXabLX.js → BVMdJAj-.js} +1 -1
  10. package/app/assets/{DNpCwjdk.js → BViMbHhN.js} +1 -1
  11. package/app/assets/{DUyKev3g.js → Ba8hC_60.js} +1 -1
  12. package/app/assets/{CRr_nYUE.js → BbdU8Zop.js} +1 -1
  13. package/app/assets/{DsllOXPq.js → BctsL19F.js} +1 -1
  14. package/app/assets/{BLcW8KqJ.js → BfY73pVp.js} +1 -1
  15. package/app/assets/{DTqOQG1i.js → BjSZf__h.js} +1 -1
  16. package/app/assets/{XzPc-eVf.js → BkIkgVK5.js} +1 -1
  17. package/app/assets/{C3S71So3.js → BkknF5iB.js} +1 -1
  18. package/app/assets/{RCiVSH3E.js → BoonIczC.js} +1 -1
  19. package/app/assets/{CMRtomUk.js → Bu3NeYhP.js} +1 -1
  20. package/app/assets/{CKOS5Y-e.js → C0O3rJzW.js} +1 -1
  21. package/app/assets/{Bxw3grU1.js → C9ZwrwyI.js} +179 -179
  22. package/app/assets/{CCwciyHS.js → CPDztxpU.js} +1 -1
  23. package/app/assets/{7lSlYhqB.js → CQ-2_uhn.js} +1 -1
  24. package/app/assets/{DGXqbK7m.js → CQSJHI2h.js} +1 -1
  25. package/app/assets/{BfSKVZnY.js → CYMzEa4j.js} +1 -1
  26. package/app/assets/{CZQ1r4zz.js → CaoceGhm.js} +1 -1
  27. package/app/assets/{c6OX2yNi.js → CcaPuBtD.js} +1 -1
  28. package/app/assets/CdUXbAKF.js +1 -0
  29. package/app/assets/{CQLuUHsS.js → Cf8o-5U6.js} +1 -1
  30. package/app/assets/{DxuXBECK.js → Cg4DfVr4.js} +1 -1
  31. package/app/assets/{CytzrZ6l.js → CpZOnYKF.js} +1 -1
  32. package/app/assets/{0Fs8FEUD.js → D2EB63gp.js} +1 -1
  33. package/app/assets/{GuPQTKm6.js → D65aoEiU.js} +1 -1
  34. package/app/assets/{Cy3jxi5W.js → D6_0v-T4.js} +1 -1
  35. package/app/assets/{CKB3jCfp.js → D8yni7Rb.js} +1 -1
  36. package/app/assets/{D8WkLv3B.js → DAUuHfyN.js} +1 -1
  37. package/app/assets/{D8QuNkWm.js → DBHRzz66.js} +1 -1
  38. package/app/assets/{B3nhMsGp.js → DC8XCjJ3.js} +1 -1
  39. package/app/assets/{kMxR92IL.js → DITt-Ko_.js} +1 -1
  40. package/app/assets/{BBSxV90W.js → DP94Ond0.js} +1 -1
  41. package/app/assets/{D5KYAPHx.js → DRC6R4LY.js} +1 -1
  42. package/app/assets/{DwhUAD0k.js → DX2KwjN1.js} +1 -1
  43. package/app/assets/{CtXRSNHU.js → Dd9quIZg.js} +1 -1
  44. package/app/assets/{Cr6Fx4T5.js → Dht5Mpyb.js} +1 -1
  45. package/app/assets/{B2l0e8gZ.js → DtHLqL7d.js} +1 -1
  46. package/app/assets/{ChiscGY_.js → DyCj9S7N.js} +1 -1
  47. package/app/assets/{BVrYyQUV.js → G6EbcZKg.js} +1 -1
  48. package/app/assets/{D2srGZZJ.js → KG-rIdVk.js} +1 -1
  49. package/app/assets/KuSp3gJs.css +2 -0
  50. package/app/assets/{CgRvgqaA.js → O5A2XfFn.js} +1 -1
  51. package/app/assets/{Y9NV3E8q.js → Q_64Qxfg.js} +1 -1
  52. package/app/assets/{BaiI2zwt.js → ROGURMs5.js} +1 -1
  53. package/app/assets/{DQsFpqjm.js → SwQn7uFS.js} +1 -1
  54. package/app/assets/{c2vgLpEV.js → UGuu7cOY.js} +1 -1
  55. package/app/assets/{BNkgLUl5.js → dMlgA_r1.js} +1 -1
  56. package/app/assets/{HNvyS0OG.js → dOd6HlUu.js} +1 -1
  57. package/app/assets/{CU8MbklZ.js → i9HQm_wt.js} +1 -1
  58. package/app/assets/{5Jrsnc1i.js → nKNVMt3o.js} +2 -2
  59. package/app/assets/{AiAiN2FW.js → p4yYbMPY.js} +1 -1
  60. package/app/assets/{CJmQYjPl.js → uyVrOXnR.js} +1 -1
  61. package/app/assets/{BFDfeOJg.js → zspOy9D_.js} +1 -1
  62. package/app/index.html +19 -19
  63. package/package.json +1 -1
  64. package/app/assets/4_c4BD6i.js +0 -1
  65. package/app/assets/BgFzEiCb.css +0 -2
  66. package/app/assets/CmJ3siBN.js +0 -1
@@ -1,2 +1,2 @@
1
1
  var e={reconnecting:`Verbindung wird wiederhergestellt…`,dropSqlite:`Loslassen, um die SQLite-Datei zu öffnen`,dropSqliteHint:`Wird per WebAssembly im Browser geöffnet — die Datei bleibt auf Ihrem Rechner. Eine vorhandene -wal-Datei bitte mit ablegen.`,dropFailedTitle:`Abgelegte Datei konnte nicht geöffnet werden`,dropNotSqlite:`{{name}} ist keine SQLite-Datenbankdatei.`,crashTitle:`Etwas ist schiefgelaufen`,crashBody:`Die App ist auf einen unerwarteten Fehler gestoßen. Neu laden stellt Verbindungen und Tabs wieder her; ungespeicherte Änderungen im Raster gehen verloren.`,crashReload:`Neu laden`},t={auto:`Systemsprache ({{name}})`,en:`English`,ko:`한국어`,zh:`中文(简体)`,ja:`日本語`,de:`Deutsch`,fr:`Français`},n={title:`Sicherheit`,description:`Schutzmaßnahmen gegen versehentlichen Datenverlust. Schreibschutz, Umgebungsfarbe und Transaktionsmodus werden pro Verbindung festgelegt.`,language:`Sprache`,languageHint:`Wird sofort übernommen. „Systemsprache“ folgt der Einstellung Ihres Browsers.`,resetDefaults:`Auf Standardwerte zurücksetzen`,done:`Fertig`,analytics:`Anonyme Nutzungsstatistiken teilen`,analyticsHint:`Sendet anonyme Nutzungsereignisse (Engine, Funktion, Anweisungstyp) an Google Analytics. Niemals SQL-Text, Hostnamen, Tabellen- oder Benutzernamen.`,analyticsUnavailableHint:`In diesem Build nicht aktiv (keine Mess-ID konfiguriert).`,persistHistory:`Abfrageverlauf über Neuladen hinweg behalten`,persistHistoryHint:`Der Anweisungstext wird in diesem Browser gespeichert (Passwort-Literale werden maskiert; die offenen Editor-Tabs selbst bleiben immer erhalten). Aus: Verlauf und Snapshots leben nur bis zum Schließen des Tabs.`,ai:{intro:`Planche kann ein Modell fragen, warum eine Anweisung fehlschlug oder ein Plan langsam ist. Die Frage wird hier in der App zusammengesetzt und von Ihrem lokalen Agenten an den Anbieter unten geschickt — weder Ihr SQL noch Ihr Schema erreicht planche.dev.`,provider:`Anbieter`,openaiCompatible:`OpenAI-kompatibel`,model:`Modell`,baseUrl:`Basis-URL`,baseUrlHint:`Leer lassen für den Standard-Endpunkt des Anbieters. Jeder OpenAI-kompatible Server funktioniert — Azure, OpenRouter, ein lokales Ollama.`,key:`API-Schlüssel`,keyHint:`Wird an den lokalen Agenten übergeben und dort verwendet. Er wird nie in diesem Browser gespeichert und nie an planche.dev gesendet.`,remember:`Schlüssel auf diesem Rechner merken`,rememberHint:`Schreibt ihn nach {{path}}, nur für Sie lesbar. Ohne dies lebt der Schlüssel nur im laufenden Agenten und ist nach dessen Ende weg.`,save:`Speichern`,forget:`Schlüssel löschen`,saved:`Gespeichert.`,none:`Kein Schlüssel gesetzt.`,configuredSession:`Ein Schlüssel gilt nur für diese Agenten-Sitzung.`,configuredFile:`Ein Schlüssel liegt unter {{path}}.`,configuredEnv:`Die KI-Einstellungen dieses Agenten stammen aus seiner Umgebung und sind hier nicht änderbar.`,unreachable:`Der Agent ist nicht erreichbar, daher lassen sich die KI-Einstellungen nicht ändern.`,title:`KI-Erklärungen`,description:`Welches Modell einen Fehler oder Plan erklärt, und wessen Schlüssel dafür zahlt.`,cli:`Lokale CLI (kein Schlüssel)`,cliCommand:`Befehl`,cliHint:`Führt eine bereits installierte und angemeldete Agent-CLI auf diesem Rechner aus, es gibt also keinen Schlüssel einzugeben. Sie erklärt Fehler und Pläne; das KI-Panel braucht einen Provider, der Werkzeuge aufrufen kann.`,cliNone:`Auf diesem Rechner wurde keine Agent-CLI gefunden. Installiere Claude Code oder Codex, oder wähle einen anderen Provider.`,profile:`Anthropic (Anmeldung dieses Rechners)`,profileHint:"Nutzt die Zugangsdaten, mit denen dieser Rechner bereits angemeldet ist — nach `ant auth login` findet das SDK sie selbst. Nichts einzufügen, und anders als bei einer lokalen CLI ist es die echte API, also funktioniert auch das KI-Panel.",profileNone:"Auf diesem Rechner wurden keine Anthropic-Zugangsdaten gefunden. Führe `ant auth login` aus, oder hinterlege einen Schlüssel.",configuredChoice:`{{provider}} wird verwendet – kein Schlüssel gespeichert; die Wahl steht in {{path}}.`},query:{title:`Abfrage`,description:`Wie eine Anweisung läuft: was F9 ausführt, wie viele Zeilen zurückkommen, was vorher gezeigt wird.`},general:{title:`Allgemein`,description:`Sprache, was ein Neuladen überdauert, und was diesen Rechner verlässt.`}},r={settings:{safety:`Sicherheit…`,language:`Sprache`,title:`Einstellungen`,theme:`Design`,query:`Abfrage…`,general:`Allgemein…`,ai:`KI…`},help:{gettingStarted:`Erste Schritte`,about:`Über Planche`,title:`Hilfe`,documentation:`Dokumentation`,learn:`SQL lernen`,terms:`Nutzungsbedingungen`,license:`Lizenz`,support:`Support kontaktieren`,mcp:`KI-Agent verbinden (MCP)…`,privacy:`Datenschutz`},connection:{title:`Verbindung`,connect:`Verbinden`,disconnect:`Verbindung trennen`,readOnly:`Schreibgeschützt`,manualTransactions:`Manuelle Transaktionen`,saveDatabaseFile:`Datenbankdatei speichern`,saveDatabaseFileBlocked:`Datenbankdatei speichern (zuerst -wal laden)`,exit:`Beenden`,sync:`Verbindungs-Sync`},query:{title:`Abfrage`,execute:`Ausführen`,executeStatementAtCursor:`Anweisung am Cursor ausführen`,executeWholeScript:`Gesamtes Skript ausführen`,newQueryTab:`Neuer Abfrage-Tab`,findReplace:`Suchen und Ersetzen`,localHistory:`Lokaler Verlauf…`,explainPlan:`Ausführungsplan anzeigen`,explainAnalyze:`Ausführungsplan messen (führt die Anweisung aus)`,structure:`Abfragestruktur`},edit:{title:`Bearbeiten`,undo:`Rückgängig`,redo:`Wiederholen`,cut:`Ausschneiden`,copy:`Kopieren`,paste:`Einfügen`,selectAll:`Alles auswählen`},database:{title:`Datenbank`,create:`Datenbank erstellen`,alter:`Datenbank ändern`,drop:`Datenbank löschen`,copy:`Datenbank kopieren`,compare:`Schemas vergleichen…`,truncate:`Datenbank leeren`,compareData:`Daten vergleichen…`,groupBy:`Gruppieren und zählen…`},table:{title:`Tabelle`,create:`Tabelle erstellen`,alter:`Tabelle ändern`,drop:`Tabelle löschen`,rename:`Tabelle umbenennen`,truncate:`Tabelle leeren`,duplicateStructure:`Tabellenstruktur duplizieren`},export:{title:`Export`,csv:`Als CSV herunterladen`,tsv:`Als TSV herunterladen`,schemaHtml:`Schema als HTML`,links:`Spaltenverknüpfungen exportieren…`,importLinks:`Spaltenverknüpfungen importieren…`},tools:{title:`Werkzeuge`,userManager:`Benutzerverwaltung`,processList:`Prozessliste`,variables:`Variablen`,status:`Status`,flush:`Flush`,quickCommand:`Schnellbefehl`,viewErd:`ERD anzeigen`,scratchpad:`Scratchpad (SQLite im Browser)`,federated:`Verbundabfrage (Join über Verbindungen)…`,federatedTab:`Verbund {{n}}`,ai:`KI-Assistent`},messages:{databaseFileSaved:`Datenbankdatei gespeichert`,databaseExported:`Datenbank als Download exportiert`,databaseExportedWithReason:`Datenbank als Download exportiert — {{reason}}`,errorSavingDatabase:`Fehler beim Speichern der Datenbank: {{message}}`,noDatabaseSelected:`Keine Datenbank ausgewählt`,noTableSelected:`Keine Tabelle ausgewählt`,noActiveConnection:`Keine aktive Verbindung`,databaseDropped:`Datenbank „{{database}}“ wurde gelöscht`,errorDroppingDatabase:`Fehler beim Löschen der Datenbank: {{message}}`,noTablesInDatabase:`Keine Tabellen in der Datenbank „{{database}}“ gefunden`,databaseTruncated_one:`{{count}} Tabelle in „{{database}}“ wurde geleert`,databaseTruncated_other:`Alle {{count}} Tabellen in „{{database}}“ wurden geleert`,errorTruncatingDatabase:`Fehler beim Leeren der Datenbank: {{message}}`,tableDropped:`Tabelle „{{table}}“ wurde gelöscht`,errorDroppingTable:`Fehler beim Löschen der Tabelle: {{message}}`,tableTruncated:`Tabelle „{{table}}“ wurde geleert`,errorTruncatingTable:`Fehler beim Leeren der Tabelle: {{message}}`,renameTablePrompt:`Tabelle „{{table}}“ umbenennen in:`,tableRenamed:`Tabelle „{{table}}“ wurde in „{{newName}}“ umbenannt`,errorRenamingTable:`Fehler beim Umbenennen der Tabelle: {{message}}`,truncateDatabaseTitle:`Alle Tabellen in "{{name}}" leeren?`,truncateDatabaseDescription:`Alle Zeilen in {{count}} Tabelle(n) von "{{name}}" werden gelöscht. Die Tabellenstrukturen bleiben erhalten. Dies kann nicht rückgängig gemacht werden.`,truncateDatabaseConfirm:`Alle Tabellen leeren`,renameTableTitle:`Tabelle umbenennen`,renameTableConfirm:`Umbenennen`,noLinksToExport:`Keine Spaltenverknüpfungen zum Exportieren.`,linksExported:`{{count}} Spaltenverknüpfungen exportiert.`,linksImported:`{{count}} Spaltenverknüpfungen importiert.`,linksImportedPartial:`{{count}} Spaltenverknüpfungen importiert; kein passendes Profil für: {{profiles}}`,linksImportFailed:`Spaltenverknüpfungen konnten nicht importiert werden: {{reason}}`}},i={title:`Über Planche`,tagline:`Ein Datenbank-Client für MySQL, MariaDB, PostgreSQL und SQLite.`,version:`Version`,website:`Website`,licenses:`Lizenzen`,licensesLink:`Hinweise zu Drittanbietern`,disclaimer:`Planche wird „wie besehen“ und ohne jegliche Gewährleistung bereitgestellt. Die Autoren haften nicht für Schäden oder Datenverluste, die aus der Nutzung entstehen. Sichern Sie Ihre Daten, bevor Sie destruktive Anweisungen ausführen.`,rights:`Alle Rechte vorbehalten.`,legal:`Rechtliches`,terms:`AGB`,privacy:`Datenschutz`,refund:`Rückerstattung`},a=JSON.parse('{"dialog":{"title":"Mit Datenbank verbinden","firstQueryTab":"Abfrage 1","colHostName":"Name","colTarget":"Ziel","colDbms":"DBMS","noSaved":"Keine gespeicherten Verbindungen","unnamed":"(unbenannt)","pickOnConnect":"(beim Verbinden auswählen)","noFile":"(keine Datei)","selectPrompt":"Wählen Sie eine Verbindung aus oder legen Sie eine neue an","addNew":"Neu hinzufügen","delete":"Löschen","testConnection":"Verbindung testen","connect":"Verbinden","close":"Schließen","unknownError":"Unbekannter Fehler","browserTestHint":"SQLite-Verbindungen im Browser öffnen beim Klick auf „Verbinden“ eine lokale Datei.","testSuccess":"Verbindung erfolgreich","restoredUnsaved":"{{file}}: ungespeicherte Änderungen aus der zwischengespeicherten Kopie wiederhergestellt","restoredUnsavedDiskChanged":"{{file}}: ungespeicherte Änderungen aus der zwischengespeicherten Kopie wiederhergestellt — Hinweis: Die Datei auf dem Datenträger hat sich seitdem geändert","walPending":"{{file}} ist im WAL-Modus: Aktuelle Änderungen befinden sich möglicherweise noch in der -wal-Datei. Verwenden Sie oben „-wal-Datei laden“, um sie einzubeziehen.","walApplied":"{{file}} wurde mit den Änderungen aus der -wal-Datei geöffnet","connectFailedTitle":"Verbindung fehlgeschlagen","testSuccessDescription":"Der Server hat die Zugangsdaten akzeptiert.","testFailedTitle":"Verbindungstest fehlgeschlagen","privacy":"Nichts, was Sie hier eingeben, wird an planche.dev-Server gesendet oder dort gespeichert. Verbindungsprofile liegen ausschließlich im lokalen Speicher dieses Browsers; Abfragen gehen direkt vom lokalen Agenten an Ihre Datenbank.","hostKeyTitle":"Unbekannter SSH-Hostschlüssel","hostKeyDescription":"{{host}}:{{port}} hat einen {{type}}-Schlüssel mit dem Fingerabdruck {{fingerprint}} vorgelegt. Vergleichen Sie ihn mit dem Fingerabdruck Ihres Serveradministrators; ein falscher Schlüssel lässt einen Angreifer Ihren Verkehr mitlesen.","hostKeyAccept":"Diesem Host vertrauen","gatewayTitle":"Gateway-Profile","gatewayAdd":"Hinzufügen","gatewayAdded":"Gateway-Profil {{name}} hinzugefügt.","gatewayReadOnly":"schreibgeschützt","gatewayWritable":"beschreibbar","gatewayProfileHint":"Diese Verbindung nutzt das vom Gateway gehaltene Profil „{{name}}“; hier gibt es nichts einzustellen.","gatewayLoadFailed":"Gateway-Profile konnten nicht geladen werden: {{error}}","export":"Exportieren…","exportWithoutSecrets":"Ohne Passwort","exportWithSecrets":"Mit Passwort und Schlüsseln","import":"Importieren…","exported":"Verbindung „{{name}}“ exportiert.","imported":"Verbindung „{{name}}“ importiert.","importFailedTitle":"Verbindung konnte nicht importiert werden"},"form":{"hostName":"Name","hostNamePlaceholder":"Meine Verbindung","dataSource":"Datenquelle","openVia":"Öffnen über","viaBrowser":"Browser (lokale Datei)","viaAgent":"Lokaler Agent","viaBrowserHint":"Keine Installation nötig. Am besten für Dateien, die kein anderes Programm verwendet: Der Browser arbeitet auf einer Kopie im Arbeitsspeicher und kann die Datei nicht sperren. Änderungen, die währenddessen anderswo vorgenommen werden, bleiben unsichtbar und werden beim Speichern überschrieben.","viaAgentHint":"Öffnet die Datei mit SQLite selbst über npx planche — mit korrektem Locking und WAL, sicher neben anderen Programmen, die dieselbe Datenbank verwenden.","databaseFile":"Datenbankdatei","changeFile":"Datei ändern","filePickerHint":"Beim Klick auf „Verbinden“ öffnet sich eine Dateiauswahl (Tipp: ⌘⇧. zeigt versteckte Dateien, mit ⌘⇧G können Sie einen Pfad eingeben).","fileRememberedHint":"Die gewählte Datei wird gemerkt (Chromium), sodass beim erneuten Verbinden nur die Berechtigung abgefragt wird. Verwenden Sie Verbindung > Datenbankdatei speichern, um Änderungen zurückzuschreiben.","authToken":"Auth-Token","authTokenPlaceholder":"Leer lassen, um das Token des gekoppelten Agents zu verwenden","filePathPlaceholder":"/pfad/zur/datenbank.sqlite oder :memory:","createIfMissing":"Erstellen, falls nicht vorhanden","createIfMissingHint":"Der Pfad wird auf dem Host des Tunneling-Servers aufgelöst","host":"Host","port":"Port","database":"Datenbank","serviceName":"Dienstname","user":"Benutzer","password":"Passwort","savePassword":"Passwort speichern","savePasswordHint":"Aus: Das Passwort wird nur für diese Browsersitzung behalten und nie auf den Datenträger geschrieben.","charset":"Zeichensatz","autoConnection":"Automatisch verbinden","safety":"Sicherheit","environment":"Umgebung","environmentHint":"färbt Tab und Arbeitsbereich ein","readOnly":"Schreibgeschützt","readOnlyHint":"Anweisungen ablehnen, die Daten oder Schema ändern","transactions":"Transaktionen","txAuto":"Auto-Commit","txManual":"Manuell — Commit / Rollback über die Symbolleiste","ssh":"SSH","sshTunnel":"SSH-Tunnel","sshTunnelHint":"Datenbank über einen SSH-Sprunghost erreichen (der lokale Agent öffnet den Tunnel)","sshHost":"SSH-Host","sshPort":"SSH-Port","sshUser":"SSH-Benutzer","sshAuth":"SSH-Auth","sshAuthKey":"Privater Schlüssel","sshAuthPassword":"Passwort","sshAuthAgent":"ssh-agent","sshAuthAgentHint":"Verwendet die im ssh-agent des Rechners geladenen Schlüssel, auf dem npx planche läuft (SSH_AUTH_SOCK).","sshPassword":"SSH-Passwort","sshKey":"Privater Schlüssel","sshKeyPick":"Schlüsseldatei wählen…","sshKeyLoaded":"Schlüssel geladen","sshKeyHint":"Leer lassen, um das IdentityFile aus ~/.ssh/config (oder ~/.ssh/id_*) auf dem Rechner des Agents zu verwenden; ein gewählter Schlüssel wird mit diesem Profil gespeichert","sshPassphrase":"Passphrase","sshPassphrasePlaceholder":"Leer lassen, wenn der Schlüssel keine hat","sshSecretsHint":"SSH-Passwort, privater Schlüssel und Passphrase folgen der Einstellung „Passwort speichern“ oben. Unbekannte Hostschlüssel werden vor der ersten Verbindung zur Prüfung angezeigt und in ~/.planche/known_hosts auf dem Rechner des Agenten gespeichert.","sshHostPlaceholder":"bastion.example.com oder ein Host-Alias aus ~/.ssh/config","sshUserPlaceholder":"Leer lassen, um ~/.ssh/config zu verwenden","sshTargetHint":"Datenbank-Host und -Port werden auf dem Sprunghost aufgelöst — die echte Adresse der Datenbank (z. B. den RDS-Endpunkt) angeben, nicht localhost oder eine lokale Portweiterleitung.","connectionString":"Verbindungs-URI","connectionStringApplied":"In die Felder unten übernommen. Die URI selbst wird nicht gespeichert, nur die Felder.","connectionStringInvalid":"Keine PostgreSQL-URI (erwartet postgresql://user:password@host/database).","neonHint":"URI aus der Neon-Konsole (Connect > Connection string) einfügen; die Felder unten werden daraus befüllt.","supabaseHint":"URI aus Supabase (Connect > Session pooler oder Direct connection) einfügen; die Felder unten werden daraus befüllt.","supabasePoolerWarning":"Port 6543 ist der Pooler im Transaktionsmodus: Jede Anweisung kann auf einem anderen Backend laufen, daher funktionieren Schemawechsel, temporäre Tabellen, Prepared Statements und manuelle Transaktionen nicht. Verwenden Sie den Session-Pooler (Port 5432) oder die Direktverbindung.","managedTlsHint":"Dieser Dienst wird immer über TLS erreicht; die Verbindung geht direkt vom lokalen Agenten zum Dienst (kein SSH-Tunnel).","d1AccountId":"Account ID","d1DatabaseId":"Database ID","d1ApiToken":"API-Token","d1Hint":"Account ID: Cloudflare-Dashboard, rechts auf der Kontostartseite. Database ID: Storage & Databases > D1 > Ihre Datenbank. Token: My Profile > API Tokens > Create Token mit der Berechtigung \\"D1 Edit\\" (oder \\"D1 Read\\" für Nur-Lesen). Der lokale Agent ruft damit die Cloudflare-API auf.","d1LimitsHint":"D1 führt jede Anfrage einzeln aus und committet automatisch, daher gibt es keine manuellen Transaktionen; die Datenbank erscheint als einziges Schema \\"main\\".","doDevUrl":"wrangler-dev-URL","doHint":"Starten Sie `wrangler dev` in Ihrem Worker-Projekt und fügen Sie die ausgegebene URL ein (Port 8787, sofern nicht geändert). Der lokale Agent liest die Durable Objects dieser Sitzung — einschließlich weiterer gleichzeitig laufender `wrangler dev`-Sitzungen.","doLimitsHint":"Nur für die lokale Entwicklung: Bereitgestellte Durable Objects sind ausschließlich aus einem Worker erreichbar, Cloudflare bietet keine Abfrage-API dafür. Jedes Objekt erscheint als Datenbank \\"<Namespace>/<Objekt>\\"; jede Anfrage committet automatisch, manuelle Transaktionen sind daher nicht verfügbar.","tls":"TLS","tlsEnable":"Verbindung verschlüsseln","tlsVerify":"Serverzertifikat prüfen","tlsVerifyHint":"Aus: selbstsignierte Zertifikate werden akzeptiert (verschlüsselt, aber der Server ist nicht authentifiziert). Über einen SSH-Tunnel nicht verfügbar.","d1DevUrl":"Lokale Dev-URL","d1DevUrlHint":"Leer lassen, um ein Cloudflare-Konto zu verwenden. Ausgefüllt liest Planche die Datenbank, die `wrangler dev` auf diesem Rechner betreibt – ohne Konto und ohne API-Token, und die Kontofelder unten werden ignoriert. Die Database ID kann leer bleiben, wenn der Dev-Server nur eine bindet.","d1PickDatabase":"Datenbank wählen"},"agent":{"copy":"Kopieren","looking":"Suche nach dem Planche-Agent…","online":"Agent <b>v{{version}}</b> läuft unter <mono>{{url}}</mono>","outdated":"Agent v{{version}} spricht Protokoll {{protocol}}, diese App benötigt jedoch ein neueres. Starten Sie ihn neu mit <cmd/>","unauthorized":"Agent <b>v{{version}}</b> läuft unter <mono>{{url}}</mono>, ist aber nicht mit dieser App gekoppelt (das Token ändert sich bei jedem Start). Öffnen Sie den im Terminal des Agents ausgegebenen Link oder fügen Sie das Token unter „Konfigurieren“ ein.","offline":"Kein Agent unter <mono>{{url}}</mono>. Starten Sie ihn im Terminal – er öffnet diese App bereits gekoppelt.","close":"Schließen","configure":"Konfigurieren","checkAgain":"Erneut prüfen","urlLabel":"Agent-URL","urlPlaceholder":"http://127.0.0.1:8888 (Standard)","tokenLabel":"Token","tokenPlaceholder":"Wird vom Agent ausgegeben","reset":"Zurücksetzen","save":"Speichern","remoteWarning":"Dieser Agent läuft nicht auf Ihrem Rechner ({{host}}): Jede Verbindung schickt ihre Passwörter und SSH-Schlüssel dorthin.","remoteRefusedTitle":"Entfernter Agent nicht erlaubt","remoteRefused":"Der Agent muss auf diesem Rechner laufen (127.0.0.1 oder localhost). Für einen Agenten auf einer anderen Maschine leiten Sie den Port mit `ssh -L 8888:127.0.0.1:8888 user@host` weiter und lassen die URL auf http://127.0.0.1:8888.","gateway":"Gateway „{{name}}“: {{count}} serverseitige Profile. Zugangsdaten bleiben auf dem Gateway; wählen Sie unten ein Profil."},"tab":{"noConnections":"Keine Verbindungen geöffnet. Klicken Sie auf „Verbinden“, um zu beginnen.","theSqliteFile":"die SQLite-Datei","reopened":"{{file}} erneut geöffnet","reopenFailed":"Datei konnte nicht erneut geöffnet werden: {{message}}","reopenPrompt":"Der Browser benötigt erneut Ihre Berechtigung, um <b>{{file}}</b> zu lesen.","reopenFile":"Datei erneut öffnen","closeConnection":"Verbindung schließen","reconnected":"{{file}} erneut verbunden","accessNotGranted":"Dateizugriff wurde nicht gewährt; beim Speichern wird stattdessen ein Download exportiert.","detachedPrompt":"Sie arbeiten auf einer zwischengespeicherten Kopie von <b>{{file}}</b>. Verbinden Sie die Datei erneut, um Änderungen direkt zu speichern.","reconnectFile":"Datei erneut verbinden","detachedHide":"Ausblenden (beim Speichern wird bei Bedarf nach der Datei gefragt)","walFramesApplied_one":"{{count}} WAL-Frame aus {{file}}-wal übernommen","walFramesApplied_other":"{{count}} WAL-Frames aus {{file}}-wal übernommen","walNoChanges":"Die -wal-Datei enthielt keine bestätigten Änderungen","walLoadFailed":"-wal-Datei konnte nicht geladen werden: {{message}}","walPrompt":"<b>{{file}}</b> ist im WAL-Modus: Möglicherweise werden die neuesten Daten erst angezeigt, wenn die Datei <mono>{{file}}-wal</mono> geladen wurde; bis dahin ist das Speichern deaktiviert. Falls keine solche Datei daneben existiert (die Datenbank wurde sauber geschlossen), bestätigen Sie das stattdessen. Falls ein anderes Programm diese Datenbank noch verwendet, öffnen Sie sie stattdessen über den lokalen Agent (<mono>npx planche</mono>): Der Browser kann die Datei nicht sicher gemeinsam nutzen.","loadWal":"-wal-Datei laden","noWalHint":"Ich habe nachgesehen: Es gibt keine -wal-Datei neben der Datenbank","noWal":"Keine -wal-Datei","dismiss":"Schließen","walHide":"Ausblenden (Speichern bleibt deaktiviert)","readOnlyBadge":"schreibgeschützt"}}'),o={connect:`Verbinden (Alt+N)`,disconnect:`Verbindung trennen`,newQueryTab:`Neuer Abfrage-Tab (Alt+T)`,execute:`Ausführen (F9)`,executeStatement:`Anweisung am Cursor / Auswahl ausführen (Ctrl+Enter)`,commit:`Commit`,commitHint:`Offene Transaktion bestätigen (Commit)`,noOpenTransaction:`Keine offene Transaktion`,rollback:`Rollback`,rollbackHint:`Offene Transaktion verwerfen (Rollback)`,readOnlyBadge:`schreibgeschützt`,readOnlyHint:`Diese Verbindung lehnt Anweisungen ab, die Daten oder Schema ändern`,userManager:`Benutzerverwaltung (Alt+U)`,quickCommand:`Schnellbefehl`,processList:`Prozessliste`,variables:`Variablen`,status:`Status`,flush:`Flush`,fullscreen:`Vollbild`},s={readOnly:`schreibgeschützt`,txOpen:`Transaktion offen`,manualTx:`manuelle Transaktionen`},c={title:`Schnellbefehl`,description:`Suchen Sie einen auszuführenden Befehl...`,inputPlaceholder:`Befehl eingeben oder suchen...`,empty:`Keine Befehle gefunden.`,groups:{connection:`Verbindung`,query:`Abfrage`,database:`Datenbank`,table:`Tabelle`,tools:`Werkzeuge`},commands:{connect:`Verbinden`,disconnect:`Verbindung trennen`,executeQuery:`Abfrage ausführen`,newQueryTab:`Neuer Abfrage-Tab`,createDatabase:`Datenbank erstellen`,dropDatabase:`Datenbank löschen`,createTable:`Tabelle erstellen`,alterTable:`Tabelle ändern`,dropTable:`Tabelle löschen`,processList:`Prozessliste`,serverVariables:`Servervariablen`,serverStatus:`Serverstatus`,flush:`Flush`,userManager:`Benutzerverwaltung`}},l={title:`Willkommen bei Planche`,intro:`Ein SQL-Client, der in Ihrem Browser läuft. Ihre Datenbanken werden über einen kleinen Agent auf Ihrem Rechner erreicht, sodass Zugangsdaten und Daten Ihren Computer nie verlassen.`,skip:`Überspringen`,skipTitle:`Diesen Bildschirm ausblenden (Hilfe > Erste Schritte bringt ihn zurück)`,copy:`Kopieren`,copied:`Kopiert`,sampleOpenFailed:`Die Beispieldatenbank konnte nicht geöffnet werden: {{message}}`,steps:{agent:{title:`Lokalen Agent starten`,body:`Führen Sie einen dieser Befehle im Terminal aus. Er startet den Agenten und koppelt ihn mit dieser Seite.`},connection:{title:`Verbindung hinzufügen`,body:`Wählen Sie Ihre Datenbank, um das Verbindungsformular mit passenden Voreinstellungen zu öffnen.`},sample:{title:`Keine Datenbank zur Hand? Probieren Sie das Beispiel`,body:`Laden Sie eine Beispieldatenbank eines Webshops (24 Tabellen, ca. 50.000 Zeilen, Views und Trigger) in den Browser, um Editor, Tabellenansicht und Schemabaum auszuprobieren.`,loading:`Beispiel wird geladen…`,button:`Beispieldatenbank ausprobieren`}},terms:{title:`Bevor Sie beginnen`,local:`Alles läuft lokal: Zugangsdaten, Abfragen und Ergebnisse bleiben auf Ihrem Rechner und werden nie an uns gesendet.`,asIs:`Planche wird ohne Gewährleistung bereitgestellt. Die Schutzmechanismen (Bestätigung destruktiver Befehle, Nur-Lese-Modus) sind Hilfen, keine Garantien.`,dataLoss:`Sie sind für jede über Planche ausgeführte Anweisung verantwortlich. Sichern Sie Ihre Daten, bevor Sie etwas Destruktives ausführen.`,agree:`Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu.`,accepted:`Sie haben die Nutzungsbedingungen akzeptiert.`,readFull:`Vollständige Bedingungen lesen`}},u={treeLabel:`Schema`,unreachableHint:`Nicht die Datenbank, an die diese Verbindung gebunden ist; legen Sie ein Profil dafür an, um sie zu durchsuchen`,objectType:{table:`Tabelle`,view:`View`,procedure:`Prozedur`,function:`Funktion`,trigger:`Trigger`,event:`Event`},menu:{showCreate:`CREATE-Anweisung anzeigen ({{type}})`,alter:`{{type}} ändern`,drop:`{{type}} löschen`,create:`{{type}} erstellen`,refresh:`Aktualisieren`,unreachable:`Verbinden Sie sich mit einem an diese Datenbank gebundenen Profil, um sie zu durchsuchen`,openDatabase:`Datenbank öffnen`,createSchema:`Schema erstellen…`,createTable:`Tabelle erstellen`,dropDatabase:`Datenbank löschen`,openSchema:`Schema öffnen`,dropSchema:`Schema löschen`,newQueryTab:`Neuer Abfrage-Tab`,generateSql:`SQL erzeugen`,openTable:`Tabelle öffnen`,alterTable:`Tabelle ändern`,showCreateTable:`CREATE TABLE anzeigen`,duplicateStructure:`Struktur duplizieren`,copyTable:`Tabelle kopieren nach…`,compare:`{{type}} vergleichen…`,truncateTable:`Tabelle leeren`,dropTable:`Tabelle löschen`,exportCsv:`Als CSV exportieren`,exportTsv:`Als TSV exportieren…`,openView:`View öffnen`,alterView:`View ändern`,showCreateView:`CREATE VIEW anzeigen`,dropView:`View löschen`,compareData:`Daten vergleichen…`,groupBy:`Gruppieren und zählen…`},actions:{createStatementUnavailable:`-- CREATE-Anweisung für {{type}} {{name}} konnte nicht abgerufen werden`,getCreateFailed:`CREATE {{type}} konnte nicht abgerufen werden: {{message}}`,createTabTitle:`{{type}} erstellen`,createSchemaTabTitle:`Schema erstellen`,generateSqlFailed:`SQL konnte nicht erzeugt werden: {{message}}`,dropTableTitle:`Tabelle „{{name}}“ löschen?`,dropTableDescription:`Dies löscht die Tabelle und alle darin enthaltenen Zeilen dauerhaft{{from}}. Dies kann nicht rückgängig gemacht werden.`,dropTableConfirm:`Tabelle löschen`,dropObjectTitle:`{{type}} „{{name}}“ löschen?`,dropObjectDescription:`Die Definition von {{type}} wird entfernt{{from}}. Dies kann nicht rückgängig gemacht werden.`,dropObjectConfirm:`{{type}} löschen`,fromDatabase:` aus der Datenbank „{{database}}“`,dropped:`{{type}} {{name}} gelöscht`,dropFailed:`{{type}} konnte nicht gelöscht werden`,dropDatabaseTitle:`Datenbank „{{name}}“ löschen?`,dropDatabaseDescription:`Dies löscht die Datenbank mit allen Tabellen und Daten dauerhaft. Dies kann nicht rückgängig gemacht werden.`,dropDatabaseConfirm:`Datenbank löschen`,droppedDatabase:`Datenbank {{name}} gelöscht`,dropDatabaseFailed:`Datenbank konnte nicht gelöscht werden`,dropSchemaTitle:`Schema „{{name}}“ löschen?`,dropSchemaDescription:`Dies löscht das Schema mit allen Tabellen und Daten dauerhaft. Dies kann nicht rückgängig gemacht werden.`,dropSchemaConfirm:`Schema löschen`,droppedSchema:`Schema {{name}} gelöscht`,dropSchemaFailed:`Schema konnte nicht gelöscht werden`,truncateTitle:`Tabelle „{{name}}“ leeren?`,truncateDescription:`Alle Zeilen in „{{name}}“ werden gelöscht. Die Tabellenstruktur bleibt erhalten. Dies kann nicht rückgängig gemacht werden.`,truncateConfirm:`Tabelle leeren`,truncated:`{{name}} geleert`,truncateFailed:`Leeren fehlgeschlagen`},tree:{loadDatabasesFailed:`Datenbanken konnten nicht geladen werden: {{message}}`}},d={editor:{destructiveMarker:`Destruktiv: {{action}} {{names}}`,readOnlyMarker:`Die Verbindung ist schreibgeschützt; diese Anweisung ändert Daten oder Schema`,actionExecute:`Ausführen (gemäß Einstellungen)`,actionExecuteStatement:`Anweisung am Cursor / Auswahl ausführen`,actionExecuteScript:`Gesamtes Skript ausführen`,actionExplainPlan:`Ausführungsplan anzeigen`,actionQueryStructure:`Abfragestruktur`},tabs:{newQuery:`Neue Abfrage`,queryTitle:`Abfrage {{n}}`,erdViewer:`ERD-Viewer`,close:`Schließen`,closeOthers:`Andere schließen`,closeLeft:`Tabs links schließen`,closeRight:`Tabs rechts schließen`,closeAll:`Alle schließen`},executor:{noActiveConnection:`Keine aktive Verbindung`,uncommittedTitle:`Nicht bestätigte Transaktion`,uncommittedDescription:`Diese Verbindung hat eine offene Transaktion. Beim Trennen werden ihre Änderungen zurückgerollt.`,uncommittedConfirm:`Rollback und trennen`,unsavedTitle:`Ungespeicherte Änderungen`,unsavedDescription:`{{file}} enthält Änderungen, die nicht in die Datei gespeichert wurden. Beim Trennen gehen sie verloren (verwenden Sie zuerst Verbindung > Datenbankdatei speichern, um sie zu behalten).`,theSqliteDatabase:`Die SQLite-Datenbank`,unsavedConfirm:`Verwerfen und trennen`}},f=JSON.parse('{"tabs":{"message":"Meldung","info":"Info","history":"Verlauf","result":"Ergebnis","resultN":"Ergebnis {{n}}","plan":"Plan","structure":"Struktur","structureN":"Struktur {{n}}"},"message":{"executing":"Abfrage wird ausgeführt...","error":"Fehler: {{message}}","total":" (Gesamt: {{ms}} ms)","ready":"Bereit.","log":"Ausführungsprotokoll","statementN":"Anweisung {{n}}","limitedBadge":"Limit erreicht","insertId":"Insert-ID {{id}}","failed":"Fehlgeschlagen","failedStatement":"Fehlgeschlagene Anweisung","summary":"{{ok}} erfolgreich · {{failed}} fehlgeschlagen · {{ms}} gesamt","copy":"Kopieren","copied":"Kopiert","showSql":"SQL anzeigen","hideSql":"SQL ausblenden"},"hints":{"title":"Hinweis","unknownColumn":"Keine Spalte namens {{name}}. Meinten Sie {{suggestions}}?","unknownTable":"Keine Tabelle namens {{name}}. Meinten Sie {{suggestions}}?","syntaxSwap":"{{engine}} schreibt {{expected}} statt {{found}}.","doubleQuotedLiteral":"{{engine}} liest \\"{{value}}\\" als Spaltennamen, nicht als Text. Für eine Zeichenkette \'{{value}}\' schreiben."},"ai":{"title":"KI-Erklärung","explain":"Mit KI erklären","thinking":"Fehler wird gelesen…","by":"von {{model}}","applyFix":"Korrektur in neuem Tab öffnen","failed":"Konnte nicht erklärt werden: {{message}}","noFailure":"Es gibt keine fehlgeschlagene Anweisung zu erklären.","noPack":"Der Prompt konnte nicht von planche.dev geladen werden.","badShape":"Das Modell hat nicht im erwarteten Format geantwortet.","noPlan":"Es gibt noch keinen Plan zu erklären.","explainPlan":"Diesen Plan erklären"},"info":{"empty":"Keine Abfrageinformationen verfügbar.","resultN":"Ergebnis {{n}}","metadata":"Abfrage-Metadaten","executionTime":"Ausführungszeit","notAvailable":"k. A.","affectedRows":"Betroffene Zeilen","fields":"Felder","fieldDetails":"Felddetails","colName":"Name","colType":"Typ","colTable":"Tabelle","resultSets":"Ergebnismengen","rowsReturned":"Zurückgegebene Zeilen","insertId":"Letzte Insert-ID","lastQuery":"Zuletzt ausgeführte Anweisung","copy":"Kopieren","copied":"Kopiert","colOrigin":"Ursprung","primaryKey":"Primärschlüssel","rowsAndFields":"{{rows}} Zeilen × {{fields}} Felder","noFields":"Diese Anweisung hat keine Spalten zurückgegeben."},"rowForm":{"colColumn":"Spalte","colValue":"Wert","insertTitle":"Zeile einfügen","editTitle":"Zeile bearbeiten","loading":"Spalten werden geladen...","preview":"Anweisung","nothingToWrite":"Nichts zu schreiben","insert":"Einfügen","update":"Aktualisieren","stageInsert":"Als ausstehende Zeile hinzufügen","stageEdit":"In Raster übernehmen","stageHint":"Werte nur ins Raster stellen, ohne etwas auszuführen; später mit den anderen Änderungen committen.","inserted":"Zeile in {{table}} eingefügt","updated":"Zeile in {{table}} aktualisiert","confirmInsertTitle":"Zeile in {{table}} einfügen?","confirmUpdateTitle":"Zeile in {{table}} aktualisieren?","inTransaction":"Läuft in der offenen Transaktion","pickDate":"Datum wählen","now":"Jetzt","formatJson":"Formatieren","binaryUnsupported":"Binärspalten können hier nicht bearbeitet werden; NULL/DEFAULT lassen oder per SQL setzen.","generateUuid":"UUID erzeugen","defaultValue":"Standardwert","clickToChange":"Zum Ändern klicken","empty":"(leer)","autoHint":"Vom Server erzeugt","mode":{"keep":"Behalten","auto":"Auto","value":"Wert"},"invalid":{"integer":"Ganze Zahl eingeben","unsigned":"Diese Spalte akzeptiert keine negativen Zahlen","number":"Zahl eingeben","json":"Ungültiges JSON","date":"Format YYYY-MM-DD verwenden","datetime":"Format YYYY-MM-DD HH:MM:SS verwenden","time":"Format HH:MM:SS verwenden","length":"Höchstens {{max}} Zeichen"}},"history":{"copied":"In die Zwischenablage kopiert","searchPlaceholder":"Verlauf durchsuchen...","all":"Alle","success":"Erfolgreich","failed":"Fehlgeschlagen","thisTab":"Nur dieser Tab","noMatch":"Keine passenden Einträge.","count":"{{count}} Einträge","clear":"Leeren","clearTitle":"Abfrageverlauf leeren?","clearDescription":"Alle {{count}} Einträge dieser Verbindung werden entfernt. Dies kann nicht rückgängig gemacht werden.","clearConfirm":"Verlauf leeren","insert":"In Editor einfügen","inserted":"In den Editor eingefügt","copy":"Kopieren","rows":"{{count}} Zeilen","affected":"{{count}} betroffen","today":"Heute","yesterday":"Gestern","empty":"Kein Abfrageverlauf."},"json":{"arrayLength":"Array[{{count}}]","keys_one":"{{count}} Schlüssel","keys_other":"{{count}} Schlüssel","invalid":"Ungültiges JSON","clickToView":"Klicken, um JSON anzuzeigen","expandAll":"Alle aufklappen","collapseAll":"Alle einklappen","edit":"Bearbeiten","view":"Anzeigen","copied":"Kopiert","copy":"Kopieren","shortcutHint":"{{mod}}+Enter zum Speichern · Esc zum Abbrechen","cancel":"Abbrechen","save":"Speichern"},"text":{"clickToView":"Klicken, um Text anzuzeigen","size":"{{chars}} Zeichen · {{lines}} Zeilen","wrap":"Umbruch"},"grid":{"readOnlyConnection":"Schreibgeschützte Verbindung","readOnlyWal":"Schreibgeschützt: -wal-Datei nicht geladen","readOnlyNoPk":"Schreibgeschützt: Tabelle hat keinen Primärschlüssel","commitTitle":"{{count}} Änderung(en) an {{table}} übernehmen?","commitDescription":"Die folgenden Anweisungen werden ausgeführt.","commitConfirm":"Übernehmen","rowPrefix":"Zeile {{row}}:","cancelled":"abgebrochen","commitFailed":"Übernehmen fehlgeschlagen: {{message}}","executedInTransaction":"{{count}} Änderung(en) innerhalb der offenen Transaktion ausgeführt — klicken Sie in der Symbolleiste auf „Commit“, um sie dauerhaft zu machen (Neuladen rollt sie zurück)","committed":"{{count}} Änderung(en) an {{table}} übernommen","noData":"Keine Daten zum Anzeigen.","commit":"Übernehmen","discard":"Verwerfen","addRow":"Zeile hinzufügen","removeNewRow":"Diese neue Zeile verwerfen","addRowForm":"Per Formular hinzufügen","addRowFormHint":"Formular mit einem Feld je Spalte öffnen (als INSERT committet)","editRowForm":"Diese Zeile im Formular bearbeiten","addRowHint":"Neue Zeile hinzufügen (wird als INSERT übernommen)","delete":"Löschen","deleteCount":"Löschen ({{count}})","deleteHint":"Ausgewählte Zeilen löschen (wird als DELETE übernommen). Wählen Sie Zeilen über die Zeilennummern-Spalte aus.","field":"Feld","searchPlaceholder":"Suchen...","orderBy":"Sortieren nach","none":"Keine","refresh":"Aktualisieren","dismiss":"Schließen","clearSelection":"Auswahl aufheben","columns":"Spalten","showAllColumns":"Alle anzeigen","hideAllColumns":"Alle ausblenden","resetWidths":"Breiten zurücksetzen","selectAll":"Alle Zeilen auswählen","emptyTable":"Diese Tabelle enthält keine Zeilen.","noRows":"Keine Zeilen zurückgegeben.","addARow":"Zeile hinzufügen","markedForDeletion":"Zum Löschen markiert — klicken, um wiederherzustellen","newRow":"Neue Zeile","clickToSelect":"Klicken zum Auswählen; Shift/Ctrl für Mehrfachauswahl","rows":"Zeilen: {{count}}","rowsWithNew":"Zeilen: {{count}} (+{{added}})","sortedBy":"Sortiert nach: {{column}} {{direction}}","pageRange":"Zeilen {{from}}–{{to}}","firstPage":"Erste Seite","prevPage":"Vorherige Seite","nextPage":"Nächste Seite","lastPage":"Letzte Seite","pagingBlocked":"Änderungen vor dem Seitenwechsel übernehmen oder verwerfen","selected":"{{count}} ausgewählt","cellsModified":"{{count}} Zelle(n) geändert","newCount":"{{count}} neu","toDelete":"{{count}} zu löschen","searchMode":"Vergleichsart","contains":"enthält","equals":"gleich","followLink":"{{table}} öffnen, wo {{column}} = Wert","linkColumn":"„{{column}}“ mit anderer Tabelle verknüpfen…","editLink":"Verknüpfung von „{{column}}“ bearbeiten…","removeLink":"Verknüpfung entfernen","copyValue":"Wert kopieren","filterByValue":"Filter: {{column}} = dieser Wert","clearFilter":"Filter aufheben","copyColumnName":"Spaltennamen kopieren","editCell":"Zelle bearbeiten","setNull":"Auf NULL setzen","setEmpty":"Auf leeren String setzen","restoreRow":"Zeile wiederherstellen","hideColumn":"Spalte „{{column}}“ ausblenden","copyRowsTsv_one":"Zeile als TSV kopieren (mit Kopfzeile)","copyRowsTsv_other":"{{count}} Zeilen als TSV kopieren (mit Kopfzeile)","copyRowsCsv_one":"Zeile als CSV kopieren","copyRowsCsv_other":"{{count}} Zeilen als CSV kopieren","copyRowsJson_one":"Zeile als JSON kopieren","copyRowsJson_other":"{{count}} Zeilen als JSON kopieren","copyRowsInsert_one":"Zeile als INSERT kopieren","copyRowsInsert_other":"{{count}} Zeilen als INSERT kopieren","deleteRowsPending_one":"Zeile löschen (bis Commit ausstehend)","deleteRowsPending_other":"{{count}} Zeilen löschen (bis Commit ausstehend)","sendRowsToScratchpad_one":"Zeile ins Scratchpad senden","sendRowsToScratchpad_other":"{{count}} Zeilen ins Scratchpad senden","sendAllToScratchpad":"Alle {{count}} geladenen Zeilen ins Scratchpad senden","sentToScratchpad":"{{count}} Zeilen in die Scratchpad-Tabelle {{table}} kopiert.","changesSince":"Seit letztem Laden: {{changed}} geändert · {{added}} neu · {{gone}} weg","changesToggle":"Hervorhebung der Änderungen seit dem letzten Laden umschalten","changesDismiss":"Diese Änderungen verwerfen","previousValue":"Vorheriger Wert: {{value}}","groupByValue":"Nach {{column}} gruppieren und zählen"},"link":{"title":"Spalte mit anderer Tabelle verknüpfen","source":"Spalte","hint":"Die Werte dieser Spalte werden zu Links: Ein Klick öffnet die Zieltabelle gefiltert auf die passenden Zeilen. Echte Fremdschlüssel werden automatisch verknüpft.","targetDatabase":"Zieldatenbank","targetTable":"Zieltabelle","targetColumn":"Zielspalte","pickTable":"Tabelle wählen","pickColumn":"Spalte wählen","remove":"Verknüpfung entfernen","cancel":"Abbrechen","save":"Verknüpfung speichern","targetConnection":"Zielverbindung","targetNotConnected":"Die verknüpfte Verbindung ist nicht geöffnet. Bitte zuerst verbinden."},"running":{"label":"Abfrage läuft…","elapsed":"{{seconds}}s","stop":"Stoppen","stopping":"Wird gestoppt…","cannotCancel":"Diese Engine kann eine laufende Anweisung nicht abbrechen.","agentOutdated":"Der lokale Agent ist zu alt, um eine Abfrage zu stoppen. Aktualisieren Sie ihn mit `npx planche@latest` (oder `planche upgrade`) und verbinden Sie sich neu.","cancelFailed":"Der Agent war nicht erreichbar, die Abfrage wurde nicht gestoppt.","abandoned":"Das Warten auf die Anfrage wurde beendet. Diese Engine hat kein eigenes Abbrechen, die Abfrage kann serverseitig zu Ende laufen."},"plan":{"empty":"Führen Sie „Ausführungsplan anzeigen“ (Strg+Umschalt+E) aus, um zu sehen, wie die Engine die Anweisung am Cursor abarbeitet.","unreadable":"Der Plan ließ sich nicht als Baum lesen; die Ausgabe der Engine wird unverändert angezeigt.","estimated":"Geschätzt","analyzed":"Gemessen","estimatedHint":"Schätzungen des Optimierers. Die Anweisung wurde nicht ausgeführt.","analyzedHint":"Die Anweisung wurde ausgeführt; Zeilenzahlen und Zeiten sind echt.","totalCost":"Höchste Knotenkosten","totalTime":"Langsamster Knoten","rows":"Geschätzte Zeilen","actualRows":"Tatsächliche Zeilen","cost":"Kosten","time":"Zeit","showRaw":"Rohausgabe","showTree":"Planbaum","selectNode":"Wählen Sie einen Knoten, um zu sehen, was die Engine dazu gemeldet hat.","noDetails":"Die Engine hat zu diesem Knoten nichts weiter gemeldet.","warnings":{"fullScan":"Full Scan","noIndex":"Kein Index","estimateOff":"Schätzung daneben","temporary":"Temp-Tabelle","filesort":"Sortierung"},"hints":{"fullScan":"Jede Zeile der Tabelle wird gelesen. Ein Index auf den gefilterten Spalten würde das vermeiden.","noIndex":"Die Engine fand keinen verwendbaren Index für diesen Zugriff.","estimateOff":"Der Optimierer erwartete eine ganz andere Zeilenzahl. Aktualisierte Tabellenstatistiken beheben das oft.","temporary":"Zeilen werden vor dem nächsten Schritt in einer temporären Tabelle materialisiert.","filesort":"Sortierung außerhalb eines Index. Ein zum ORDER BY passender Index macht sie überflüssig."}},"structure":{"empty":"Abfragestruktur anzeigen (Strg+Umschalt+G) zeigt, woher die Zeilen der Anweisung am Cursor stammen.","notQuery":"Nur SELECT-Anweisungen haben ein Strukturdiagramm.","unsupported":"{{engine}}-Anweisungen lassen sich nicht als Strukturdiagramm lesen.","parseError":"Die Anweisung konnte nicht geparst werden: {{message}}","columns_one":"{{count}} Spalte","columns_other":"{{count}} Spalten","columnsUnknown":"Breite unbekannt","fit":"Einpassen","reveal":"Im Editor auswählen","notDrawn":"Nicht gezeichnet: {{what}}","kindTable":"TABELLE","kindCte":"CTE","kindCteRef":"REF","kindDerived":"UNTERABFRAGE","kindScalar":"SKALAR","kindSetop":"MENGE","kindResult":"ERGEBNIS","fullscreen":"Vollbild","exitFullscreen":"Vollbild beenden"}}'),p={defaultDescription:`Diese Aktion kann nicht rückgängig gemacht werden.`,typeToConfirm:`Geben Sie <name/> zur Bestätigung ein`,cancel:`Abbrechen`,confirm:`Bestätigen`,ok:`OK`},m={dialog:{createTitle:`Tabelle erstellen`,alterTitle:`Tabelle ändern`,duplicateTitle:`Tabellenstruktur duplizieren`,create:`Erstellen`,alter:`Ändern`,cancel:`Abbrechen`,tableName:`Tabellenname`,tableNamePlaceholder:`Tabellennamen eingeben...`,loading:`Tabellenschema wird geladen...`,tabSchema:`Schema`,tabIndexes:`Indizes`,tabProperties:`Eigenschaften`,applying:`Wird angewendet…`,cannotAlterColumns:`{{engine}} kann eine bereits vorhandene Spalte nicht ändern ({{columns}}). Spalten hinzufügen, entfernen und umbenennen sowie Indizes ändern funktionieren; für eine geänderte Spaltendefinition muss die Tabelle neu erstellt werden.`},schema:{colField:`Feldname`,colType:`Datentyp`,colLength:`Länge`,colDefault:`Standard`,colPk:`PK`,colNotNull:`Not Null`,colUnsigned:`Unsigned`,colAutoIncrement:`Auto Incr`,colZerofill:`Zerofill`,colComment:`Kommentar`,empty:`Keine Spalten definiert. Klicken Sie auf „Spalte hinzufügen“, um eine anzulegen.`,add:`Spalte hinzufügen`,remove:`Spalte entfernen`},indexes:{colName:`Indexname`,colType:`Indextyp`,colColumns:`Spalten`,empty:`Keine Indizes definiert. Klicken Sie auf „Index hinzufügen“, um einen anzulegen.`,add:`Index hinzufügen`,remove:`Index entfernen`},index:{addTitle:`Index hinzufügen`,editTitle:`Index bearbeiten`,name:`Indexname`,namePlaceholder:`Indexnamen eingeben`,type:`Indextyp`,columns:`Spalten`,noColumns:`Keine Spalten verfügbar. Definieren Sie zuerst Spalten im Tab „Schema“.`,unnamed:`(unbenannt)`,cancel:`Abbrechen`,ok:`OK`},properties:{engine:`Engine`,charset:`Zeichensatz`,collation:`Kollation`,autoIncrement:`Auto Increment`,autoIncrementPlaceholder:`Standard`,comment:`Kommentar`},info:{engine:`Engine`,version:`Version`,rowFormat:`Zeilenformat`,rows:`Zeilen`,avgRowLength:`Ø Zeilenlänge`,dataLength:`Datengröße`,createTime:`Erstellt am`,updateTime:`Aktualisiert am`,collation:`Kollation`,comment:`Kommentar`},copy:{title:`Tabelle kopieren`,source:`Quelle`,targetConnection:`Zielverbindung`,targetDatabase:`Zieldatenbank`,targetTable:`Name der Zieltabelle`,what:`Kopieren`,structureAndData:`Struktur & Daten`,structureOnly:`Nur Struktur`,ifExists:`Wenn die Zieltabelle existiert`,abort:`Abbrechen (Standard)`,dropAndRecreate:`Löschen und neu anlegen (Name muss erneut eingegeben werden)`,preview:`CREATE TABLE auf dem Ziel (bearbeitbar)`,crossEngineHint:`Das Ziel ist {{engine}}: Typen unten prüfen, MySQL-spezifische Attribute wurden entfernt.`,readOnly:`schreibgeschützt`,loading:`Lädt…`,progressCreate:`Tabelle wird angelegt…`,progressCount:`Zeilen werden gezählt…`,progressRows:`{{copied}} von {{total}} Zeilen kopiert`,progressDone:`Fertig`,doneTitle:`Tabelle kopiert`,doneRows:`{{count}} Zeilen nach {{table}} kopiert.`,doneStructure:`Struktur von {{table}} angelegt.`,noColumns:`Die Quelltabelle hat keine Spalten.`,exists:`Die Tabelle {{table}} existiert im Ziel bereits. Anderen Namen wählen oder „Löschen und neu anlegen“.`,dropTitle:`Vorhandene Tabelle {{table}} löschen?`,dropDescription:`Die Zieltabelle und alle ihre Zeilen werden vor dem Kopieren gelöscht. Das lässt sich nicht rückgängig machen.`,dropConfirm:`Löschen und kopieren`,cancelled:`Kopieren abgebrochen.`,stop:`Stopp`,cancel:`Abbrechen`,copy:`Kopieren`}},h={copy:{title:`Datenbank kopieren`,source:`Quelldatenbank`,target:`Name der Zieldatenbank`,targetPlaceholder:`Namen der Zieldatenbank eingeben`,options:`Optionen`,structureAndData:`Struktur und Daten`,structureOnly:`Nur Struktur`,cancel:`Abbrechen`,copy:`Kopieren`,creating:`{{database}} wird erstellt…`,copying:`{{table}} wird kopiert ({{index}} von {{total}})…`},diff:{title:`Schemas vergleichen`,source:`Quelle`,target:`Ziel`,pickConnection:`Verbindung`,pickDatabase:`Datenbank`,crossEngineHint:`Unterschiedliche Engines: Typnamen unterscheiden sich je Dialekt, daher zeigen die meisten Spalten eine Typänderung.`,sameSide:`Quelle und Ziel sind dieselbe Datenbank.`,summary:`{{changed}} geändert, {{missingTarget}} fehlen im Ziel, {{missingSource}} nur im Ziel, {{identical}} identisch`,showIdentical:`Identische Tabellen anzeigen`,identicalAll:`Die Tabellen sind identisch.`,column:`Spalte`,index:`Index`,object:`Objekt`,selectTable:`Tabelle auswählen, um Unterschiede zu sehen.`,missingInTarget:`{{table}} existiert im Ziel nicht; das Skript legt sie an.`,missingInSource:`{{table}} existiert nur im Ziel; das Skript löscht sie (auskommentiert, sofern DROPs nicht eingeschlossen sind).`,includeDrops:`DROP-Anweisungen als ausführbares SQL einschließen (Standard: auskommentiert)`,tabTitle:`Sync {{database}}`,close:`Schließen`,compare:`Vergleichen`,comparing:`Vergleicht…`,openScript:`Skript im Editor öffnen`,noDefinition:`Keine CREATE-Anweisung verfügbar`},create:{title:`Datenbank erstellen`,name:`Datenbankname`,namePlaceholder:`Datenbanknamen eingeben`,charset:`Zeichensatz`,collation:`Kollation`,cancel:`Abbrechen`,create:`Erstellen`},csv:{title:`Als {{format}} herunterladen`,target:`Ziel`,targetQueryResult:`Aktuelles Abfrageergebnis`,targetTableData:`Tabellendaten`,tableName:`Tabellenname`,tableNamePlaceholder:`Tabellennamen eingeben`,delimiter:`Trennzeichen`,delimiterComma:`Komma (,)`,delimiterTab:`Tabulator (\\t)`,delimiterSemicolon:`Semikolon (;)`,delimiterPipe:`Pipe (|)`,includeHeaders:`Kopfzeile einschließen`,cancel:`Abbrechen`,download:`Herunterladen`,downloading:`Wird heruntergeladen...`,progress:`{{loaded}} von {{total}} Zeilen geschrieben`,progressUnknown:`{{loaded}} Zeilen geschrieben`,stop:`Stopp`,done:`{{count}} Zeilen aus {{table}} als {{format}} exportiert.`,database:`Datenbank`,databasePlaceholder:`Datenbank wählen`},html:{title:`Schema als HTML`,database:`Datenbank`,selectDatabase:`Datenbank auswählen`,tables:`Einzuschließende Tabellen`,selectAll:`Alle auswählen`,deselectAll:`Auswahl aufheben`,noTables:`Keine Tabellen verfügbar.`,include:`Einschließen`,includeColumns:`Spalten`,includeIndexes:`Indizes`,includeProperties:`Eigenschaften`,cancel:`Abbrechen`,generate:`Generieren`,generating:`Wird generiert...`,sectionColumns:`Spalten`,sectionIndexes:`Indizes`,sectionProperties:`Eigenschaften`,docTitle:`Schema: {{database}}`,heading:`Datenbank: {{database}}`,summary:`Tabellen: {{count}} | Generiert: {{date}}`,footer:`Generiert von Planche 2026`},dataDiff:{title:`Daten vergleichen`,pickTable:`Tabelle`,hint:`Zeilen werden über den Primärschlüssel der Quelltabelle zugeordnet und als Text verglichen. Pro Seite werden bis zu {{cap}} Zeilen geladen; große Tabellen vorher per Filter eingrenzen.`,sameSide:`Quelle und Ziel sind dieselbe Tabelle.`,noPrimaryKey:`{{table}} hat keinen Primärschlüssel; ohne ihn lassen sich Zeilen nicht zuordnen.`,keyMissingInTarget:`Der Zieltabelle fehlen die Schlüsselspalten: {{columns}}`,summary:`Schlüssel: {{key}} – {{added}} fehlen im Ziel, {{changed}} unterschiedlich, {{removed}} nur im Ziel, {{identical}} identisch`,capped:`Nur die ersten {{cap}} Zeilen jeder Seite wurden verglichen.`,ignoredColumns:`Ignorierte Spalten (nur auf einer Seite): {{columns}}`,added_one:`{{count}} fehlt im Ziel`,added_other:`{{count}} fehlen im Ziel`,changed_one:`{{count}} unterschiedlich`,changed_other:`{{count}} unterschiedlich`,removed_one:`{{count}} nur im Ziel`,removed_other:`{{count}} nur im Ziel`,none:`Nichts in dieser Gruppe.`,more:`… {{count}} weitere nicht aufgeführt`,includeDeletes:`DELETE-Anweisungen als ausführbares SQL einschließen (Standard: auskommentiert)`,tabTitle:`Daten-Sync {{table}}`,loading:`Zeilen werden geladen – Quelle: {{source}}, Ziel: {{target}}`},schema:{createTitle:`Schema erstellen`,name:`Schemaname`,namePlaceholder:`Schemanamen eingeben`,create:`Erstellen`,cancel:`Abbrechen`},groupBy:{title:`Gruppieren und zählen`,description:`Zeilen von {{table}} nach den gewählten Spalten zählen.`,columns:`Gruppieren nach`,aggregate:`Zusätzliche Aggregation`,countOnly:`Nur Anzahl`,column:`Spalte`,minCount:`Mindestzeilen pro Gruppe`,useFilter:`Aktuellen Filter des Rasters anwenden`,noIndexWarning:`Keine der gewählten Spalten führt einen Index an, daher muss die Datenbank die ganze Tabelle lesen und sortieren. Bei großen Tabellen kann das dauern.`,preview:`Abfrage`,pickColumn:`Wählen Sie mindestens eine Spalte zum Gruppieren.`,openInTab:`In neuem Tab öffnen`,run:`Ausführen`,tabTitle:`{{table}} gruppieren`,indexed:`Führt einen Index an`,connection:`Verbindung`,database:`Datenbank`,table:`Tabelle`}},g={manager:{title:`Benutzerverwaltung`,addUser:`Benutzer hinzufügen`,removeUser:`Benutzer entfernen`,noUsers:`Keine Benutzer geladen`,grantScope:`Berechtigungsbereich`,apply:`Anwenden`,close:`Schließen`,removed:`Benutzer '{{user}}'@'{{host}}' entfernt`,selectUserFirst:`Bitte wählen Sie zuerst einen Benutzer aus`,applied:`Änderungen erfolgreich angewendet`,noChanges:`Keine Rechteänderungen zum Anwenden.`},add:{title:`Benutzer hinzufügen`,username:`Benutzername`,usernamePlaceholder:`Benutzernamen eingeben`,host:`Host`,password:`Passwort`,passwordPlaceholder:`Passwort eingeben`,confirmPassword:`Passwort bestätigen`,confirmPasswordPlaceholder:`Passwort bestätigen`,plugin:`Plugin`,cancel:`Abbrechen`,add:`Hinzufügen`,usernameRequired:`Benutzername ist erforderlich`,passwordMismatch:`Die Passwörter stimmen nicht überein`,added:`Benutzer '{{user}}'@'{{host}}' hinzugefügt`},privileges:{globalTitle:`Globale Berechtigungen`,databaseTitle:`Datenbankberechtigungen`,tableTitle:`Tabellenberechtigungen`,checkAll:`Alle auswählen`,uncheckAll:`Alle abwählen`,categoryData:`Daten`,categoryStructure:`Struktur`,categoryAdministration:`Administration`},grantTree:{globalPrivileges:`Globale Berechtigungen`}},_={close:`Schließen`,noActiveConnection:`Keine aktive Verbindung`,variableName:`Variablenname`,value:`Wert`,scope:{session:`Session`,global:`Global`},findReplace:{findPlaceholder:`Suchen`,replacePlaceholder:`Ersetzen`,found:`{{count}} gefunden`,noResults:`Keine Treffer`,previous:`Zurück`,next:`Weiter`,close:`Schließen`,replace:`Ersetzen`,all:`Alle`,caseSensitive:`Groß-/Kleinschreibung`,regex:`Regex`,wholeWord:`Ganzes Wort`},flush:{title:`Flush`,executed:`Ausgeführt: {{command}}`,executeError:`Fehler beim Ausführen von {{command}}: {{message}}`},localHistory:{title:`Lokaler Verlauf`,description:`Versionen des Editortexts dieser Verbindung: bei jeder Ausführung, nach einer Tipppause und beim Schließen eines Tabs.`,empty:`Noch keine Versionen aufgezeichnet.`,noMatch:`Keine Version passt zu dieser Suche.`,notPersisted:`„Abfrageverlauf über Neuladen hinweg behalten“ ist unter Einstellungen > Sicherheit deaktiviert; Versionen bleiben nur für diese Sitzung erhalten.`,searchPlaceholder:`Versionen durchsuchen`,scopeTab:`Dieser Tab`,scopeAll:`Alle Tabs`,compareCurrent:`mit aktuell`,comparePrevious:`mit vorheriger`,diffAgainstCurrent:`Verglichen mit dem aktuellen Editortext`,diffAgainstPrevious:`Verglichen mit der Version von {{time}}`,noPrevious:`Keine frühere Version dieses Tabs zum Vergleichen`,restored:`Editorinhalt aus dem lokalen Verlauf wiederhergestellt`,restore:`Diese Version wiederherstellen`,openInNewTab:`In neuem Tab öffnen`,openedInTab:`Version in einem neuen Tab geöffnet`,delete:`Diese Version löschen`,clearAll:`Verlauf löschen`,chars:`{{count}} Zeichen`,reason:{execute:`vor der Ausführung`,edit:`beim Bearbeiten`,replaced:`vor dem Überschreiben`,restore:`vor dem Wiederherstellen`,close:`vor dem Schließen`}},processList:{title:`Prozessliste`,refresh:`Aktualisieren`,autoRefresh:`Automatisch aktualisieren`,empty:`Keine Prozesse vorhanden`,kill:`Beenden`,killProcess:`Prozess beenden`,selectToKill:`Bitte wählen Sie einen zu beendenden Prozess aus`,killed:`Prozess {{id}} wurde beendet`,killError:`Fehler beim Beenden des Prozesses: {{message}}`,loadError:`Fehler beim Laden der Prozessliste: {{message}}`,updatedAt:`aktualisiert {{time}}`,filterPlaceholder:`Nach Benutzer, Host, DB, SQL filtern...`,hideIdle:`Inaktive ausblenden`,noMatch:`Keine Prozesse entsprechen dem Filter`,self:`ich`,selfHint:`Dies ist die eigene Sitzung von Planche`,statementOf:`Anweisung von #{{id}}`,noStatement:`Keine Anweisung`,copy:`Kopieren`,copied:`Kopiert`,killConfirmTitle:`Prozess {{id}} beenden?`,killConfirmDescription:`Die Sitzung von {{user}}@{{host}} wird beendet und die laufende Anweisung abgebrochen. Eine offene Transaktion wird zurückgerollt.`,stats:{total:`Gesamt`,active:`Aktiv`,idle:`Inaktiv`,longest:`Längste Laufzeit`},columns:{id:`Id`,user:`Benutzer`,host:`Host`,db:`db`,command:`Befehl`,time:`Zeit`,state:`Zustand`,info:`Info`,action:`Aktion`}},status:{title:`Serverstatus`,filterPlaceholder:`Statusvariablen filtern...`,empty:`Keine Statusvariablen vorhanden`,loadError:`Fehler beim Laden des Status: {{message}}`},variables:{title:`Servervariablen`,filterPlaceholder:`Variablen filtern...`,empty:`Keine Variablen vorhanden`,loadError:`Fehler beim Laden der Variablen: {{message}}`}},v={empty:{title:`Öffnen Sie eine Prisma-Schemadatei (.prisma), um das ERD anzuzeigen`,description:`Modelle, Enums und Relationen werden automatisch analysiert`,openFile:`.prisma-Datei öffnen`,dropHint:`oder ziehen Sie eine Datei in diesen Bereich`},entity:{enumBadge:`ENUM`,modelBadge:`MODEL`,columns:{value:`Wert`,comment:`Kommentar`,type:`Typ`,column:`Spalte`},linkBadge:`LINK`,externalTitle:`Verknüpfte Tabelle auf {{location}} (Spaltenverknüpfung, kein echter Fremdschlüssel)`,nullable:`Spalte erlaubt NULL`},toolbar:{refresh:`Aktualisieren`,zoomIn:`Vergrößern`,zoomOut:`Verkleinern`,resetView:`Ansicht zurücksetzen`,center:`Zentrieren`,fitAll:`Alles einpassen`,spreadAll:`Überlappungen lösen`,resetLayout:`Layout zurücksetzen`,legendOneToMany:`1:N (FK)`,tables:`Tabellen:`,relations:`Relationen:`,columns:`Spalten:`,fullscreen:`Vollbild`,exitFullscreen:`Vollbild beenden`},viewer:{noServerConnection:`Keine aktive Serververbindung`,loading:`Schema wird aus {{database}} geladen...`,loadFailed:`ERD konnte nicht geladen werden`,noDatabase:`Keine Datenbank ausgewählt.`,selectDatabaseHint:`Wählen Sie im Schemabaum eine Datenbank aus und öffnen Sie dann „ERD anzeigen“.`}},y={runAnyway:`Trotzdem ausführen`,query:{rowsReturned:`{{count}} Zeile(n) zurückgegeben`,rowsAffected:`{{count}} Zeile(n) betroffen`,rowsReturnedLimited:`{{count}} Zeile(n) zurückgegeben (begrenzt auf {{limit}}; fügen Sie LIMIT hinzu, um mehr abzurufen)`,notConnected:`Nicht verbunden`,fileNotOpen:`Die SQLite-Datei ist noch nicht geöffnet — klicken Sie oben auf „Datei erneut öffnen“, um den Zugriff erneut zu gewähren.`,failed:`Abfrage fehlgeschlagen`,nothingToExecute:`Nichts auszuführen`,dryRunMismatch:`Die Vorschau erwartete {{predicted}} Zeilen, geändert wurden {{actual}}. Die Daten können sich seit der Vorschau geändert haben; andernfalls passte die Vorschau nicht zu dieser Anweisung.`},destructive:{title_one:`Destruktive Anweisung ausführen?`,title_other:`{{count}} destruktive Anweisungen ausführen?`,description:`Folgendes wird Daten dauerhaft ändern oder löschen. Dies kann nicht rückgängig gemacht werden.`,unknownTarget:`(unbekannt)`,deleteAll:`DELETE aller Zeilen aus {{target}}`,updateAll:`UPDATE aller Zeilen in {{target}}`,alterDrop:`DROP COLUMN/PARTITION auf {{target}}`},readOnly:{refused:`Die Verbindung „{{label}}“ ist schreibgeschützt. {{count}} Anweisung(en) würde(n) Daten oder Schema ändern.`,title:`„{{label}}“ ist schreibgeschützt`,description:`Diese Anweisungen ändern Daten oder Schema. Trotzdem auf dieser Verbindung ausführen?`},transaction:{startFailed:`Transaktion konnte nicht gestartet werden`,started:`Transaktion gestartet — Commit oder Rollback, wenn Sie fertig sind`,implicitCommit:`{{kind}} hat ein implizites COMMIT der offenen Transaktion ausgelöst`,committed:`Transaktion bestätigt (Commit)`,rolledBack:`Transaktion zurückgerollt (Rollback)`,commandFailed:`{{name}} fehlgeschlagen`,commandFailedWith:`{{name}} fehlgeschlagen: {{message}}`},save:{notBrowserSqlite:`Keine SQLite-Verbindung im Browser.`,inMemory:`In-Memory-Datenbank: Sie kann nur als Download exportiert werden.`,noFileSystemAccess:`Dieser Browser hat keine File System Access API (nur Chrome/Edge): Die Datenbank wird als Download exportiert, statt direkt geschrieben zu werden.`,noWritableHandle:`Die Datei wurde ohne beschreibbares Handle geöffnet: Sie wird als Download exportiert.`},agent:{devProxyUrl:`{{url}} (über Dev-Proxy)`,notPlanche:`Es hat etwas geantwortet, aber es ist kein Planche-Agent`,unreachable:"Planche-Agent unter {{url}} nicht erreichbar — führen Sie `npx planche` aus ({{message}})",httpError:`HTTP-Fehler: {{status}} {{statusText}}`,emptyResponse:`Der Tunneling-Server hat eine leere Antwort zurückgegeben`,reconnected:`Verbindung zu {{name}} wiederhergestellt — der Agent hatte sie verworfen (Neustart oder Leerlauf-Timeout).`},sample:{profileName:`Beispiel-Shop (im Browser)`,downloadFailed:`Die Beispieldatenbank konnte nicht heruntergeladen werden ({{status}})`,tabTitle:`Abfrage 1`},sqliteFile:{tooSmall:`Die Datei ist zu klein, um eine SQLite-Datenbank zu sein.`,notSqlite:`Keine SQLite-Datenbank (oder eine verschlüsselte, z. B. SQLCipher). Der 16-Byte-Header lautet nicht „SQLite format 3“.`,badPageSize:`Beschädigter SQLite-Header: ungültige Seitengröße {{size}}.`,unreadable:`SQLite konnte die Datei nicht lesen: {{message}}`,pickerDescription:`SQLite-Datenbank`,walNotLoaded:`Diese Datenbank ist im WAL-Modus und ihre -wal-Datei wurde nicht geladen. Laden Sie sie oder bestätigen Sie im Banner, dass keine -wal-Datei existiert, bevor Sie speichern.`,changedOnDisk:`{{name}} wurde nach dem Laden auf dem Datenträger geändert (ein anderes Programm hat hineingeschrieben). Speichern würde diese Änderungen überschreiben — öffnen Sie die Datei erneut und wiederholen Sie Ihre Änderungen, oder verwenden Sie den Tunneling-Server.`,walHasChanges:`{{name}}-wal enthält neue Änderungen; laden Sie sie vor dem Speichern.`,walChangedOnDisk:`{{name}}-wal wurde nach dem Laden von einem anderen Programm geschrieben; öffnen Sie die Datei vor dem Speichern erneut.`,writeDenied:`Schreibzugriff auf {{name}} wurde nicht gewährt. Erlauben Sie ihn in der Browserabfrage oder exportieren Sie stattdessen als Download.`},environment:{none:`Keine`,green:`Grün (Entwicklung)`,blue:`Blau`,yellow:`Gelb (Staging)`,orange:`Orange`,red:`Rot (Produktion)`,purple:`Lila`},scratchpad:{profileName:`Scratchpad`,namePromptTitle:`Name der Scratchpad-Tabelle`,namePromptDescription:`Im Scratchpad gibt es bereits eine Tabelle {{table}}. Wählen Sie einen anderen Namen.`,nameTaken:`Tabelle {{table}} existiert bereits.`},federated:{pulling:`Hole {{table}} von {{connection}}…`,capped:`{{table}}: nur die ersten {{limit}} Zeilen wurden geholt.`,templateLine1:`Eine Tabelle einer offenen Verbindung als "Verbindungsname".database.table referenzieren; sie wird vor der Ausführung in dieses Scratchpad kopiert.`,templateLine2:`Tabellen sind auf {{limit}} Zeilen begrenzt. Die Abfrage selbst läuft in SQLite (in Ihrem Browser).`,templateConnections:`Offene Verbindungen: {{names}}`,templateNone:`Noch keine andere Verbindung offen. Verbinden Sie eine und referenzieren Sie sie hier.`,done:`{{rows}} Zeilen aus {{tables}} entfernten Tabellen ins Scratchpad geholt.`,pullingProgress:`Hole {{table}} von {{connection}}: {{loaded}} / {{total}} Zeilen…`},paged:{noColumns:`{{table}} hat keine Spalten.`,cancelled:`Abgebrochen.`}},b={title:`Nutzungsbedingungen`,version:`Version {{version}}`,englishOnly:`Die Bedingungen liegen auf Englisch vor. Die Zusammenfassung auf dem Startbildschirm ist in Ihrer Sprache verfügbar.`,privacyLink:`Datenschutzerklärung`,refundLink:`Rückerstattungsrichtlinie`,online:`Auf planche.dev lesen`,updated:`Zuletzt geändert am {{date}}`},x={title:`{{kind}} würde {{count}} Zeilen betreffen`,titleUnknown:`{{kind}} – betroffene Zeilen unbekannt`,description:`Das sind die Zeilen, die die Anweisung jetzt berühren würde, per SELECT gelesen. Noch wurde nichts geschrieben.`,previewFailed:`Die Vorschau-Abfrage ist fehlgeschlagen: {{error}}
2
- Sie können die Anweisung trotzdem ausführen.`,noRows:`Keine Zeile passt – die Anweisung würde nichts ändern.`,truncated:`Die ersten {{shown}} von {{count}} Zeilen werden angezeigt.`,previewQuery:`Vorschau-Abfrage`,run:`{{kind}} ausführen ({{count}} Zeilen)`,runAnyway:`Trotzdem ausführen`},S={badge:`PRO`,tooltip:`Erfordert eine Pro-Lizenz.`,noticeTitle:`Pro-Funktionen`,notice:`Mit PRO markierte Funktionen erfordern eine Pro-Lizenz.`,licenseTitle:`Planche Pro`,licenseDescription:`Fügen Sie den Lizenzschlüssel aus Ihrer Kaufbestätigung ein. Er wird auf diesem Rechner geprüft; nichts wird irgendwohin gesendet.`,blocked:`{{feature}} erfordert eine Pro-Lizenz.`,keyLabel:`Lizenzschlüssel`,activate:`Aktivieren`,remove:`Lizenz entfernen`,active:`Pro ist aktiv.`,licensedTo:`Lizenziert für {{email}}`,validUntil:`Gültig bis {{date}}`,expiredOn:`Diese Lizenz ist am {{date}} abgelaufen. Verlängern Sie sie, um Pro weiter zu nutzen.`,invalidKey:`Das ist kein Planche-Lizenzschlüssel.`,notConfigured:`Dieser Build kann keine Lizenzschlüssel prüfen. Bitte melden Sie das.`,noWebcrypto:`Dieser Browser kann keine Lizenzschlüssel prüfen.`,pricing:`Preise ansehen`,features:{ssh_tunnel:`SSH-Tunnel`,compare_schemas:`Schemavergleich`,compare_data:`Datenvergleich`,copy_table:`Tabelle kopieren`,dry_run:`Dry Run`,federated:`Föderierte Abfragen`,scratchpad:`Scratchpad`,column_link:`Spaltenlinks`,sync:`Verbindungs-Sync`,ai_explain:`KI-Erklärungen`},included:`In Pro enthalten`,haveKey:`Sie haben bereits einen Lizenzschlüssel?`,perMonth:`/ Monat`,priceNote:`Einmal jährlich {{annual}}. Monatlich sind es {{monthly}}.`,featureDetails:{sync:`Ihre Profile auf jedem Rechner, im Browser verschlüsselt, bevor sie ihn verlassen`,ssh_tunnel:`Eine Datenbank hinter einem Jump-Host per Passwort, Schlüssel oder ssh-agent erreichen`,compare_schemas:`Zwei offene Verbindungen vergleichen und das ALTER-Skript erhalten`,compare_data:`Zeilen zweier Tabellen vergleichen und das INSERT- und UPDATE-Skript erhalten`,copy_table:`Eine Tabelle in einer anderen Verbindung oder Engine neu aufbauen`,dry_run:`Vor dem Ausführen sehen, wie viele Zeilen ein UPDATE oder DELETE ändert und welche`,federated:`Tabellen aus verschiedenen Verbindungen verbinden`,scratchpad:`Eine lokale SQLite-Datenbank für Arbeitsdaten`,column_link:`Virtuelle Fremdschlüssel, denen Sie im Raster folgen`,ai_explain:`Ein Modell fragen, warum eine Anweisung fehlschlug oder ein Plan langsam ist — mit Ihrem Schema`}},C={npxNote:`Benötigt Node.js 22 oder neuer. Es wird nichts dauerhaft installiert – npx führt den Agenten direkt aus der npm-Registry aus.`,installNote:`Kein Node.js nötig. Die Installation liegt ohne Administratorrechte in Ihrem Home-Verzeichnis; danach startet der Befehl planche ihn jederzeit.`},w={unsupported:`{{engine}} liefert keine Ausführungspläne.`,oneStatement:`Der Plan wird für genau eine Anweisung erstellt. Setzen Sie den Cursor in die Anweisung oder markieren Sie sie.`},T={title:`KI-Assistent`,intro:`Bitte um eine Abfrage oder sag, was zu tun ist — er liest das Schema, schreibt SQL in einen Tab und führt es aus. Er arbeitet auf der geöffneten Verbindung, und jede behält ihre eigene Unterhaltung.`,privacy:`Was die Werkzeuge lesen — einschließlich Beispielzeilen — geht an deinen Provider. Nichts erreicht planche.dev.`,placeholder:`z. B. Abfrage für den Monatsumsatz auf der Demo-Datenbank bauen`,send:`Senden`,stop:`Stopp`,clear:`Neues Gespräch`,working:`Arbeitet…`,tabTitle:`KI-Abfrage`,approvalTitle:`Dieser Schritt schreibt. Ausführen?`,approve:`Ausführen`,reject:`Überspringen`,rejected:`Der Nutzer hat die Ausführung abgelehnt.`,notConfigured:`Auf dem Agenten ist kein KI-Schlüssel gesetzt. Unter Einstellungen ▸ KI hinzufügen.`,needsAgent:`Dieser lokale Agent kann noch keine Werkzeuge ausführen. Aktualisieren und neu koppeln.`,failed:`Fehlgeschlagen`,empty:`Noch nichts gefragt.`,steps:`{{count}} Schritte`,tooManySteps:`Nach {{count}} Schritten ohne Antwort abgebrochen.`,collapse:`Einklappen`,planWarningTitle:`Diese Abfrage ist ein Full Scan. Trotzdem ausführen?`,interrupted:`Durch Neuladen unterbrochen.`,external:`Von außerhalb von Planche angefordert`},E={title:`KI-Agent verbinden (MCP)`,description:`Einen KI-Agenten mit MCP die Werkzeuge von Planche nutzen lassen.`,readsLabel:`Liest`,reads:`Er liest die offene Datenbank, und die Ergebnisse gehen an das Programm.`,writesLabel:`Schreibt`,writes:`Datenändernde Anweisungen brauchen deine Zustimmung. DROP und TRUNCATE kann er nicht.`,needsLabel:`Braucht`,needs:`Das KI-Panel muss offen sein.`,tokenLabel:`Token`,token:`Ein Token für alle Programme, denen du es gibst. Widerrufen trennt alle.`,command:`Zu Claude Code hinzufügen`,json:`Von Hand einrichten`,stored:`Gespeichert unter {{path}}.`,revoke:`Token widerrufen`,revoked:`Widerrufen. Öffne dies erneut für ein neues.`},D={title:`Verbindungs-Sync`,description:`Ihre Verbindungsprofile, in diesem Browser verschlüsselt und auf planche.dev abgelegt, damit Ihre anderen Rechner sie nutzen können.`,stored:`Der Dienst speichert einen verschlüsselten Block. Hosts, Benutzer, Passwörter und SSH-Schlüssel kann er nicht lesen.`,unavailable:`Sync läuft nur auf planche.dev. Diese Planche-Kopie liefert Ihr lokaler Agent aus, und der darf nicht ins Internet.`,signIn:`Mit GitHub anmelden`,signedInAs:`Angemeldet als {{email}}`,signOut:`Abmelden`,createTitle:`Passphrase wählen`,createHint:`Diese Passphrase verschlüsselt Ihre Profile. Sie erreicht den Server nie – geht sie verloren, ist die abgelegte Kopie nicht wiederherstellbar und muss von einem Rechner neu erzeugt werden, der die Profile noch hat.`,passphrase:`Passphrase`,confirm:`Passphrase bestätigen`,mismatch:`Die beiden Passphrasen stimmen nicht überein.`,tooShort:`Mindestens {{count}} Zeichen.`,enable:`Sync einschalten`,unlockTitle:`Profile entsperren`,unlockHint:`Geben Sie die Passphrase ein, die Sie beim Einschalten des Syncs gewählt haben.`,unlock:`Entsperren`,wrongPassphrase:`Falsche Passphrase, oder die abgelegte Kopie ist beschädigt.`,syncNow:`Jetzt synchronisieren`,lastSynced:`Zuletzt synchronisiert {{when}}`,neverSynced:`Noch nicht synchronisiert`,profiles_one:`{{count}} Profil`,profiles_other:`{{count}} Profile`,changePassphrase:`Passphrase ändern`,deleteVault:`Vom Server löschen`,deleteVaultConfirm:`Die verschlüsselte Kopie von planche.dev entfernen? Die Profile auf diesem Rechner bleiben unberührt.`,offline:`planche.dev ist nicht erreichbar.`,working:`Wird ausgeführt…`,serverError:`planche.dev konnte das nicht abschließen. Bitte gleich noch einmal versuchen.`,signInShort:`Anmelden`,needsPro:`Sie sind angemeldet. Das Synchronisieren der Profile erfordert eine Pro-Lizenz und funktioniert, sobald Sie eine haben.`,deleteAccount:`Konto löschen`,deleteAccountConfirm:`Konto löschen? Die abgelegte Kopie und Ihre Anmeldung gehen mit. Die Profile auf diesem Rechner bleiben unberührt.`,notDeployed:`Der Verbindungs-Sync ist für diese Seite noch nicht eingeschaltet.`},O={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};export{i as about,T as ai,e as app,_ as command,p as confirm,a as connection,h as database,O as default,x as dryRun,v as erd,w as explain,s as footer,C as install,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,g as user,l as welcome};
2
+ Sie können die Anweisung trotzdem ausführen.`,noRows:`Keine Zeile passt – die Anweisung würde nichts ändern.`,truncated:`Die ersten {{shown}} von {{count}} Zeilen werden angezeigt.`,previewQuery:`Vorschau-Abfrage`,run:`{{kind}} ausführen ({{count}} Zeilen)`,runAnyway:`Trotzdem ausführen`},S={badge:`PRO`,tooltip:`Erfordert eine Pro-Lizenz.`,noticeTitle:`Pro-Funktionen`,notice:`Mit PRO markierte Funktionen erfordern eine Pro-Lizenz.`,licenseTitle:`Planche Pro`,licenseDescription:`Fügen Sie den Lizenzschlüssel aus Ihrer Kaufbestätigung ein. Er wird auf diesem Rechner geprüft; nichts wird irgendwohin gesendet.`,blocked:`{{feature}} erfordert eine Pro-Lizenz.`,keyLabel:`Lizenzschlüssel`,activate:`Aktivieren`,remove:`Lizenz entfernen`,active:`Pro ist aktiv.`,licensedTo:`Lizenziert für {{email}}`,validUntil:`Gültig bis {{date}}`,expiredOn:`Diese Lizenz ist am {{date}} abgelaufen. Verlängern Sie sie, um Pro weiter zu nutzen.`,invalidKey:`Das ist kein Planche-Lizenzschlüssel.`,notConfigured:`Dieser Build kann keine Lizenzschlüssel prüfen. Bitte melden Sie das.`,noWebcrypto:`Dieser Browser kann keine Lizenzschlüssel prüfen.`,pricing:`Preise ansehen`,features:{ssh_tunnel:`SSH-Tunnel`,compare_schemas:`Schemavergleich`,compare_data:`Datenvergleich`,copy_table:`Tabelle kopieren`,dry_run:`Dry Run`,federated:`Föderierte Abfragen`,scratchpad:`Scratchpad`,column_link:`Spaltenlinks`,sync:`Verbindungs-Sync`,ai_explain:`KI-Erklärungen`},included:`In Pro enthalten`,haveKey:`Sie haben bereits einen Lizenzschlüssel?`,perMonth:`/ Monat`,priceNote:`Einmal jährlich {{annual}}. Monatlich sind es {{monthly}}.`,featureDetails:{sync:`Ihre Profile auf jedem Rechner, im Browser verschlüsselt, bevor sie ihn verlassen`,ssh_tunnel:`Eine Datenbank hinter einem Jump-Host per Passwort, Schlüssel oder ssh-agent erreichen`,compare_schemas:`Zwei offene Verbindungen vergleichen und das ALTER-Skript erhalten`,compare_data:`Zeilen zweier Tabellen vergleichen und das INSERT- und UPDATE-Skript erhalten`,copy_table:`Eine Tabelle in einer anderen Verbindung oder Engine neu aufbauen`,dry_run:`Vor dem Ausführen sehen, wie viele Zeilen ein UPDATE oder DELETE ändert und welche`,federated:`Tabellen aus verschiedenen Verbindungen verbinden`,scratchpad:`Eine lokale SQLite-Datenbank für Arbeitsdaten`,column_link:`Virtuelle Fremdschlüssel, denen Sie im Raster folgen`,ai_explain:`Ein Modell fragen, warum eine Anweisung fehlschlug oder ein Plan langsam ist — mit Ihrem Schema`}},C={npxNote:`Benötigt Node.js 22 oder neuer. Es wird nichts dauerhaft installiert – npx führt den Agenten direkt aus der npm-Registry aus.`,installNote:`Kein Node.js nötig. Die Installation liegt ohne Administratorrechte in Ihrem Home-Verzeichnis; danach startet der Befehl planche ihn jederzeit.`},w={unsupported:`{{engine}} liefert keine Ausführungspläne.`,oneStatement:`Der Plan wird für genau eine Anweisung erstellt. Setzen Sie den Cursor in die Anweisung oder markieren Sie sie.`},T={title:`KI-Assistent`,intro:`Bitte um eine Abfrage oder sag, was zu tun ist — er liest das Schema, schreibt SQL in einen Tab und führt es aus. Er arbeitet auf der geöffneten Verbindung, und jede behält ihre eigene Unterhaltung.`,privacy:`Was die Werkzeuge lesen — einschließlich Beispielzeilen — geht an deinen Provider. Nichts erreicht planche.dev.`,placeholder:`z. B. Abfrage für den Monatsumsatz auf der Demo-Datenbank bauen`,send:`Senden`,stop:`Stopp`,clear:`Neues Gespräch`,working:`Arbeitet…`,tabTitle:`KI-Abfrage`,approvalTitle:`Dieser Schritt schreibt. Ausführen?`,approve:`Ausführen`,reject:`Überspringen`,rejected:`Der Nutzer hat die Ausführung abgelehnt.`,notConfigured:`Auf dem Agenten ist kein KI-Schlüssel gesetzt. Unter Einstellungen ▸ KI hinzufügen.`,needsAgent:`Dieser lokale Agent kann noch keine Werkzeuge ausführen. Aktualisieren und neu koppeln.`,failed:`Fehlgeschlagen`,empty:`Noch nichts gefragt.`,steps:`{{count}} Schritte`,tooManySteps:`Nach {{count}} Schritten ohne Antwort abgebrochen.`,collapse:`Einklappen`,planWarningTitle:`Diese Abfrage ist ein Full Scan. Trotzdem ausführen?`,interrupted:`Durch Neuladen unterbrochen.`,external:`Von außerhalb von Planche angefordert`},E={title:`KI-Agent verbinden (MCP)`,description:`Einen KI-Agenten mit MCP die Werkzeuge von Planche nutzen lassen.`,readsLabel:`Liest`,reads:`Er liest die offene Datenbank, und die Ergebnisse gehen an das Programm.`,writesLabel:`Schreibt`,writes:`Datenändernde Anweisungen brauchen deine Zustimmung. DROP und TRUNCATE kann er nicht.`,needsLabel:`Braucht`,needs:`Das KI-Panel muss offen sein.`,tokenLabel:`Token`,token:`Ein Token für alle Programme, denen du es gibst. Widerrufen trennt alle.`,command:`Zu Claude Code hinzufügen`,json:`Von Hand einrichten`,stored:`Gespeichert unter {{path}}.`,revoke:`Token widerrufen`,revoked:`Widerrufen. Öffne dies erneut für ein neues.`},D={title:`Verbindungs-Sync`,description:`Ihre Verbindungsprofile, in diesem Browser verschlüsselt und auf planche.dev abgelegt, damit Ihre anderen Rechner sie nutzen können.`,stored:`Der Dienst speichert einen verschlüsselten Block. Hosts, Benutzer, Passwörter und SSH-Schlüssel kann er nicht lesen.`,unavailable:`Sync läuft nur auf planche.dev. Diese Planche-Kopie liefert Ihr lokaler Agent aus, und der darf nicht ins Internet.`,signIn:`Mit GitHub anmelden`,signedInAs:`Angemeldet als {{email}}`,signOut:`Abmelden`,createTitle:`Passphrase wählen`,createHint:`Diese Passphrase verschlüsselt Ihre Profile. Sie erreicht den Server nie – geht sie verloren, ist die abgelegte Kopie nicht wiederherstellbar und muss von einem Rechner neu erzeugt werden, der die Profile noch hat.`,passphrase:`Passphrase`,confirm:`Passphrase bestätigen`,mismatch:`Die beiden Passphrasen stimmen nicht überein.`,tooShort:`Mindestens {{count}} Zeichen.`,enable:`Sync einschalten`,unlockTitle:`Profile entsperren`,unlockHint:`Geben Sie die Passphrase ein, die Sie beim Einschalten des Syncs gewählt haben.`,unlock:`Entsperren`,wrongPassphrase:`Falsche Passphrase, oder die abgelegte Kopie ist beschädigt.`,syncNow:`Jetzt synchronisieren`,lastSynced:`Zuletzt synchronisiert {{when}}`,neverSynced:`Noch nicht synchronisiert`,profiles_one:`{{count}} Profil`,profiles_other:`{{count}} Profile`,changePassphrase:`Passphrase ändern`,deleteVault:`Vom Server löschen`,deleteVaultConfirm:`Die verschlüsselte Kopie von planche.dev entfernen? Die Profile auf diesem Rechner bleiben unberührt.`,offline:`planche.dev ist nicht erreichbar.`,working:`Wird ausgeführt…`,serverError:`planche.dev konnte das nicht abschließen. Bitte gleich noch einmal versuchen.`,signInShort:`Anmelden`,needsPro:`Sie sind angemeldet. Das Synchronisieren der Profile erfordert eine Pro-Lizenz und funktioniert, sobald Sie eine haben.`,deleteAccount:`Konto löschen`,deleteAccountConfirm:`Konto löschen? Die abgelegte Kopie und Ihre Anmeldung gehen mit. Die Profile auf diesem Rechner bleiben unberührt.`,notDeployed:`Der Verbindungs-Sync ist für diese Seite noch nicht eingeschaltet.`},O={closeTitle:`Planche schließen?`,closeDescription:`Es gibt ungesicherte Arbeit: eine offene Transaktion, nicht übernommene Änderungen oder eine laufende Abfrage. Beim Schließen geht sie verloren und wird zurückgerollt.`,closeAnyway:`Trotzdem schließen`},k={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};export{i as about,T as ai,e as app,_ as command,p as confirm,a as connection,h as database,k as default,O as desktop,x as dryRun,v as erd,w as explain,s as footer,C as install,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,g as user,l as welcome};
@@ -1 +1 @@
1
- import{r as e}from"./hePW80VL.js";import{h as t}from"./XzPc-eVf.js";import{b as n,l as r,o as i,p as a,s as o,u as s}from"./CKOS5Y-e.js";import{r as c,t as l}from"./CytzrZ6l.js";import{S as u,_ as d,b as f,d as p,f as m,g as h,h as g,m as _,p as v,u as y,v as b,x,y as S}from"./CZQ1r4zz.js";import{n as C,t as w}from"./BVrYyQUV.js";import{t as T}from"./CmJ3siBN.js";import{Lt as E,Qt as D,Rt as O,Xt as k,Yt as A,Zt as j}from"./Bxw3grU1.js";var M=e(n(),1),N=e(t(),1),P=Object.defineProperty,ee=(e,t)=>P(e,`name`,{value:t,configurable:!0});function F(e){let t=N.useRef({value:e,previous:e});return N.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}ee(F,`usePrevious`);var I=r(),L=Object.defineProperty,R=(e,t)=>L(e,`name`,{value:t,configurable:!0}),z=[` `,`Enter`,`ArrowUp`,`ArrowDown`],B=[` `,`Enter`],V=`Select`,[H,U,W]=l(V),[G,te]=u(V,[W,D]),K=D(),[ne,q]=G(V),[re,ie]=G(V);function J(e){let{__scopeSelect:t,children:n,open:r,defaultOpen:i,onOpenChange:a,value:o,defaultValue:s,onValueChange:c,dir:l,name:u,autoComplete:f,disabled:p,required:m,form:h,internal_do_not_use_render:g}=e,_=K(t),[v,y]=N.useState(null),[b,x]=N.useState(null),[w,T]=N.useState(!1),E=C(l),[D,O]=S({prop:r,defaultProp:i??!1,onChange:a,caller:V}),[k,A]=S({prop:o,defaultProp:s,onChange:c,caller:V}),M=N.useRef(null),P=N.useRef(k);N.useEffect(()=>{let e=h?v?.ownerDocument.getElementById(h):v?.form;if(e instanceof HTMLFormElement){let t=R(()=>A(P.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[h,v,A]);let ee=!v||!!h||!!v.closest(`form`),[F,L]=N.useState(new Set),z=d(),B=Array.from(F).map(e=>e.props.value).join(`;`),U=N.useCallback(e=>{L(t=>new Set(t).add(e))},[]),W=N.useCallback(e=>{L(t=>{let n=new Set(t);return n.delete(e),n})},[]),G={required:m,trigger:v,onTriggerChange:y,valueNode:b,onValueNodeChange:x,valueNodeHasChildren:w,onValueNodeHasChildrenChange:T,contentId:z,value:k,onValueChange:A,open:D,onOpenChange:O,dir:E,triggerPointerDownPosRef:M,disabled:p,name:u,autoComplete:f,form:h,nativeOptions:F,nativeSelectKey:B,isFormControl:ee};return(0,I.jsx)(j,{..._,children:(0,I.jsx)(ne,{scope:t,...G,children:(0,I.jsx)(H.Provider,{scope:t,children:(0,I.jsx)(re,{scope:t,onNativeOptionAdd:U,onNativeOptionRemove:W,children:Ve(g)?g(G):n})})})})}R(J,`SelectProvider`);var ae=R(e=>{let{__scopeSelect:t,children:n,...r}=e;return(0,I.jsx)(J,{__scopeSelect:t,...r,internal_do_not_use_render:({isFormControl:e})=>(0,I.jsxs)(I.Fragment,{children:[n,e?(0,I.jsx)(Be,{__scopeSelect:t}):null]})})},`Select`),oe=`SelectTrigger`,se=N.forwardRef(R(function(e,t){let{__scopeSelect:n,disabled:r=!1,...i}=e,s=K(n),c=q(oe,n),l=c.disabled||r,u=a(t,c.onTriggerChange),d=U(n),f=N.useRef(`touch`),[p,m,h]=He(e=>{let t=d().filter(e=>!e.disabled),n=Ue(t,e,t.find(e=>e.value===c.value));n!==void 0&&c.onValueChange(n.value)}),g=R(e=>{l||(c.onOpenChange(!0),h()),e&&(c.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})},`handleOpen`);return(0,I.jsx)(A,{asChild:!0,...s,children:(0,I.jsx)(o.button,{type:`button`,role:`combobox`,"aria-controls":c.open?c.contentId:void 0,"aria-expanded":c.open,"aria-required":c.required,"aria-autocomplete":`none`,dir:c.dir,"data-state":c.open?`open`:`closed`,disabled:l,"data-disabled":l?``:void 0,"data-placeholder":$(c.value)?``:void 0,...i,ref:u,onClick:x(i.onClick,e=>{e.currentTarget.focus(),f.current!==`mouse`&&g(e)}),onPointerDown:x(i.onPointerDown,e=>{f.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(g(e),e.preventDefault())}),onKeyDown:x(i.onKeyDown,e=>{let t=p.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&m(e.key),!(t&&e.key===` `)&&z.includes(e.key)&&(g(),e.preventDefault())})})})},`SelectTrigger`)),ce=`SelectValue`,le=N.forwardRef(R(function(e,t){let{__scopeSelect:n,className:r,style:i,children:s,placeholder:c=``,...l}=e,u=q(ce,n),{onValueNodeHasChildrenChange:d}=u,p=s!==void 0,m=a(t,u.onValueNodeChange);f(()=>{d(p)},[d,p]);let h=$(u.value);return(0,I.jsx)(o.span,{...l,asChild:!h&&l.asChild,ref:m,style:{pointerEvents:`none`},children:(0,I.jsx)(N.Fragment,{children:h?c:s},h?`placeholder`:`value`)})},`SelectValue`)),ue=N.forwardRef(R(function(e,t){let{__scopeSelect:n,children:r,...i}=e;return(0,I.jsx)(o.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})},`SelectIcon`)),[de,fe]=G(`SelectPortal`,{forceMount:void 0}),pe=R(e=>{let{__scopeSelect:t,forceMount:n,...r}=e;return(0,I.jsx)(de,{scope:e.__scopeSelect,forceMount:n,children:(0,I.jsx)(v,{asChild:!0,...r})})},`SelectPortal`),Y=`SelectContent`,me=N.forwardRef(R(function(e,t){let n=fe(Y,e.__scopeSelect),{forceMount:r=n.forceMount,...i}=e,a=q(Y,e.__scopeSelect),[o,s]=N.useState();return f(()=>{s(new DocumentFragment)},[]),(0,I.jsx)(b,{present:r||a.open,children:({present:e})=>e?(0,I.jsx)(ve,{...i,ref:t}):(0,I.jsx)(he,{...i,fragment:o})})},`SelectContent`)),he=N.forwardRef(R(function(e,t){let{__scopeSelect:n,children:r,fragment:i}=e;return i?M.createPortal((0,I.jsx)(ge,{scope:n,children:(0,I.jsx)(H.Slot,{scope:n,children:(0,I.jsx)(`div`,{ref:t,children:r})})}),i):null},`SelectContentFragment`)),X=10,[ge,Z]=G(Y),_e=s(`SelectContent.RemoveScroll`),ve=N.forwardRef(R(function(e,t){let{__scopeSelect:n}=e,{position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:s,side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:v,sticky:b,hideWhenDetached:S,avoidCollisions:C,...w}=e,T=q(Y,n),[E,D]=N.useState(null),[O,k]=N.useState(null),A=a(t,D),[j,M]=N.useState(null),[P,ee]=N.useState(null),F=U(n),[L,z]=N.useState(!1),B=N.useRef(!1);N.useEffect(()=>{if(E)return y(E)},[E]),m();let V=N.useCallback(e=>{let[t,...n]=F().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&O&&(O.scrollTop=0),n===r&&O&&(O.scrollTop=O.scrollHeight),n?.focus(),document.activeElement!==i))return},[F,O]),H=N.useCallback(()=>V([j,E]),[V,j,E]);N.useEffect(()=>{L&&H()},[L,H]);let{onOpenChange:W,triggerPointerDownPosRef:G}=T;N.useEffect(()=>{if(E){let e={x:0,y:0},t=R(t=>{e={x:Math.abs(Math.round(t.pageX)-(G.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(G.current?.y??0))}},`handlePointerMove`),n=R(n=>{e.x<=10&&e.y<=10?n.preventDefault():n.composedPath().includes(E)||W(!1),document.removeEventListener(`pointermove`,t),G.current=null},`handlePointerUp`);return G.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[E,W,G]),N.useEffect(()=>{let e=R(()=>W(!1),`close`);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[W]);let[te,K]=He(e=>{let t=F().filter(e=>!e.disabled),n=Ue(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current?.focus())}),ne=N.useCallback((e,t,n)=>{let r=!B.current&&!n;(T.value!==void 0&&T.value===t||r)&&(M(e),r&&(B.current=!0))},[T.value]),re=N.useCallback(()=>E?.focus(),[E]),ie=N.useCallback((e,t,n)=>{let r=!B.current&&!n;(T.value!==void 0&&T.value===t||r)&&ee(e)},[T.value]),J=r===`popper`?be:ye,ae=J===be?{side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:v,sticky:b,hideWhenDetached:S,avoidCollisions:C}:{};return(0,I.jsx)(ge,{scope:n,content:E,viewport:O,onViewportChange:k,itemRefCallback:ne,selectedItem:j,onItemLeave:re,itemTextRefCallback:ie,focusSelectedItem:H,selectedItemText:P,position:r,isPositioned:L,searchRef:te,children:(0,I.jsx)(p,{as:_e,allowPinchZoom:!0,children:(0,I.jsx)(_,{asChild:!0,trapped:T.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:x(i,e=>{T.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,I.jsx)(g,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>T.onOpenChange(!1),children:(0,I.jsx)(J,{role:`listbox`,id:T.contentId,"data-state":T.open?`open`:`closed`,dir:T.dir,onContextMenu:e=>e.preventDefault(),...w,...ae,onPlaced:()=>z(!0),ref:A,style:{display:`flex`,flexDirection:`column`,outline:`none`,...w.style},onKeyDown:x(w.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&K(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=F().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>V(t)),e.preventDefault()}})})})})})})},`SelectContentImpl`)),ye=N.forwardRef(R(function(e,t){let{__scopeSelect:n,onPlaced:r,...i}=e,s=q(Y,n),c=Z(Y,n),[l,u]=N.useState(null),[d,p]=N.useState(null),m=a(t,p),h=U(n),g=N.useRef(!1),_=N.useRef(!0),{viewport:v,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=c,S=N.useCallback(()=>{if(s.trigger&&s.valueNode&&l&&d&&v&&y&&b){let e=s.trigger.getBoundingClientRect(),t=d.getBoundingClientRect(),n=s.valueNode.getBoundingClientRect(),i=b.getBoundingClientRect();if(s.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-X,d=w(a,[X,Math.max(X,u-c)]);l.style.minWidth=s+`px`,l.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-X,d=w(a,[X,Math.max(X,u-c)]);l.style.minWidth=s+`px`,l.style.right=d+`px`}let a=h(),o=window.innerHeight-X*2,c=v.scrollHeight,u=window.getComputedStyle(d),f=parseInt(u.borderTopWidth,10),p=parseInt(u.paddingTop,10),m=parseInt(u.borderBottomWidth,10),_=parseInt(u.paddingBottom,10),x=f+p+c+_+m,S=Math.min(y.offsetHeight*5,x),C=window.getComputedStyle(v),T=parseInt(C.paddingTop,10),E=parseInt(C.paddingBottom,10),D=e.top+e.height/2-X,O=o-D,k=y.offsetHeight/2,A=y.offsetTop+k,j=f+p+A,M=x-j;if(j<=D){let e=a.length>0&&y===a[a.length-1].ref.current;l.style.bottom=`0px`;let t=d.clientHeight-v.offsetTop-v.offsetHeight,n=j+Math.max(O,k+(e?E:0)+t+m);l.style.height=n+`px`}else{let e=a.length>0&&y===a[0].ref.current;l.style.top=`0px`;let t=Math.max(D,f+v.offsetTop+(e?T:0)+k)+M;l.style.height=t+`px`,v.scrollTop=j-D+v.offsetTop}l.style.margin=`${X}px 0`,l.style.minHeight=S+`px`,l.style.maxHeight=o+`px`,r?.(),requestAnimationFrame(()=>g.current=!0)}},[h,s.trigger,s.valueNode,l,d,v,y,b,s.dir,r]);f(()=>S(),[S]);let[C,T]=N.useState();f(()=>{d&&T(window.getComputedStyle(d).zIndex)},[d]);let E=N.useCallback(e=>{e&&_.current===!0&&(S(),x?.(),_.current=!1)},[S,x]);return(0,I.jsx)(xe,{scope:n,contentWrapper:l,shouldExpandOnScrollRef:g,onScrollButtonChange:E,children:(0,I.jsx)(`div`,{ref:u,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:C},children:(0,I.jsx)(o.div,{...i,ref:m,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})},`SelectItemAlignedPosition`)),be=N.forwardRef(R(function(e,t){let{__scopeSelect:n,align:r=`start`,collisionPadding:i=X,...a}=e,o=K(n);return(0,I.jsx)(k,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})},`SelectPopperPosition`)),[xe,Se]=G(Y,{}),Ce=`SelectViewport`,we=N.forwardRef(R(function(e,t){let{__scopeSelect:n,nonce:r,...i}=e,s=Z(Ce,n),c=Se(Ce,n),l=a(t,s.onViewportChange),u=N.useRef(0);return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,I.jsx)(H.Slot,{scope:n,children:(0,I.jsx)(o.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:l,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:x(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=c;if(r?.current&&n){let e=Math.abs(u.current-t.scrollTop);if(e>0){let r=window.innerHeight-X*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}u.current=t.scrollTop})})})]})},`SelectViewport`)),[Te,Ee]=G(`SelectGroup`),De=`SelectItem`,[Oe,ke]=G(De),Ae=N.forwardRef(R(function(e,t){let{__scopeSelect:n,value:r,disabled:i=!1,textValue:s,...c}=e,l=q(De,n),u=Z(De,n),f=l.value===r,[p,m]=N.useState(s??``),[g,_]=N.useState(!1),v=h(e=>u.itemRefCallback?.(e,r,i)),y=a(t,v),b=d(),S=N.useRef(`touch`),C=R(()=>{i||(l.onValueChange(r),l.onOpenChange(!1))},`handleSelect`);return(0,I.jsx)(Oe,{scope:n,value:r,disabled:i,textId:b,isSelected:f,onItemTextChange:N.useCallback(e=>{m(t=>t||(e?.textContent??``).trim())},[]),children:(0,I.jsx)(H.ItemSlot,{scope:n,value:r,disabled:i,textValue:p,children:(0,I.jsx)(o.div,{role:`option`,"aria-labelledby":b,"data-highlighted":g?``:void 0,"aria-selected":f&&g,"data-state":f?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...c,ref:y,onFocus:x(c.onFocus,()=>_(!0)),onBlur:x(c.onBlur,()=>_(!1)),onClick:x(c.onClick,()=>{S.current!==`mouse`&&C()}),onPointerUp:x(c.onPointerUp,()=>{S.current===`mouse`&&C()}),onPointerDown:x(c.onPointerDown,e=>{S.current=e.pointerType}),onPointerMove:x(c.onPointerMove,e=>{S.current=e.pointerType,i?u.onItemLeave?.():S.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:x(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:x(c.onKeyDown,e=>{i||e.target!==e.currentTarget||(u.searchRef?.current===``||e.key!==` `)&&(B.includes(e.key)&&C(),e.key===` `&&e.preventDefault())})})})})},`SelectItem`)),Q=`SelectItemText`,je=N.forwardRef(R(function(e,t){let{__scopeSelect:n,className:r,style:i,...s}=e,c=q(Q,n),l=Z(Q,n),u=ke(Q,n),d=ie(Q,n),[p,m]=N.useState(null),g=h(e=>l.itemTextRefCallback?.(e,u.value,u.disabled)),_=a(t,m,u.onItemTextChange,g),v=p?.textContent,y=N.useMemo(()=>(0,I.jsx)(`option`,{value:u.value,disabled:u.disabled,children:v},u.value),[u.disabled,u.value,v]),{onNativeOptionAdd:b,onNativeOptionRemove:x}=d;return f(()=>(b(y),()=>x(y)),[b,x,y]),(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(o.span,{id:u.textId,...s,ref:_}),u.isSelected&&c.valueNode&&!c.valueNodeHasChildren&&!$(c.value)?M.createPortal(s.children,c.valueNode):null]})},`SelectItemText`)),Me=`SelectItemIndicator`,Ne=N.forwardRef(R(function(e,t){let{__scopeSelect:n,...r}=e;return ke(Me,n).isSelected?(0,I.jsx)(o.span,{"aria-hidden":!0,...r,ref:t}):null},`SelectItemIndicator`)),Pe=`SelectScrollUpButton`,Fe=N.forwardRef(R(function(e,t){let n=Z(Pe,e.__scopeSelect),r=Se(Pe,e.__scopeSelect),[i,o]=N.useState(!1),s=a(t,r.onScrollButtonChange);return f(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollTop>0;o(e)};R(e,`handleScroll`);let t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,I.jsx)(Re,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null},`SelectScrollUpButton`)),Ie=`SelectScrollDownButton`,Le=N.forwardRef(R(function(e,t){let n=Z(Ie,e.__scopeSelect),r=Se(Ie,e.__scopeSelect),[i,o]=N.useState(!1),s=a(t,r.onScrollButtonChange);return f(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight,n=Math.ceil(t.scrollTop)<e;o(n)};R(e,`handleScroll`);let t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,I.jsx)(Re,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null},`SelectScrollDownButton`)),Re=N.forwardRef(R(function(e,t){let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=Z(`SelectScrollButton`,n),s=N.useRef(null),c=U(n),l=N.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return N.useEffect(()=>()=>l(),[l]),f(()=>{c().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[c]),(0,I.jsx)(o.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:x(i.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:x(i.onPointerMove,()=>{a.onItemLeave?.(),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:x(i.onPointerLeave,()=>{l()})})},`SelectScrollButtonImpl`)),ze=`SelectBubbleInput`,Be=N.forwardRef(R(function({__scopeSelect:e,...t},n){let r=q(ze,e),{value:i,onValueChange:s,required:l,disabled:u,name:d,autoComplete:f,form:p}=r,{nativeOptions:m,nativeSelectKey:h}=r,g=N.useRef(null),_=a(n,g),v=i??``,y=F(v),b=Array.from(m).some(e=>(e.props.value??``)===``);return N.useEffect(()=>{let e=g.current;if(!e)return;let t=window.HTMLSelectElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(y!==v&&n){let t=new Event(`change`,{bubbles:!0});n.call(e,v),e.dispatchEvent(t)}},[y,v]),(0,I.jsxs)(o.select,{"aria-hidden":!0,required:l,tabIndex:-1,name:d,autoComplete:f,disabled:u,form:p,onChange:e=>s(e.target.value),...t,style:{...c,...t.style},ref:_,defaultValue:v,children:[$(i)&&!b?(0,I.jsx)(`option`,{value:``}):null,Array.from(m)]},h)},`SelectBubbleInput`));function Ve(e){return typeof e==`function`}R(Ve,`isFunction`);function $(e){return e===``||e===void 0}R($,`shouldShowPlaceholder`);function He(e){let t=h(e),n=N.useRef(``),r=N.useRef(0),i=N.useCallback(e=>{let i=n.current+e;t(i),R((function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))}),`updateSearch`)(i)},[t]),a=N.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return N.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}R(He,`useTypeaheadSearch`);function Ue(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=We(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}R(Ue,`findNextItem`);function We(e,t){return e.map((n,r)=>e[(t+r)%e.length])}R(We,`wrapArray`);function Ge({...e}){return(0,I.jsx)(ae,{"data-slot":`select`,...e})}function Ke({...e}){return(0,I.jsx)(le,{"data-slot":`select-value`,...e})}function qe({className:e,size:t=`default`,children:n,...r}){return(0,I.jsxs)(se,{"data-slot":`select-trigger`,"data-size":t,className:i(`flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,I.jsx)(ue,{asChild:!0,children:(0,I.jsx)(E,{className:`size-4 opacity-50`})})]})}function Je({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...a}){return(0,I.jsx)(pe,{children:(0,I.jsxs)(me,{"data-slot":`select-content`,className:i(`relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...a,children:[(0,I.jsx)(Xe,{}),(0,I.jsx)(we,{className:i(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,I.jsx)(Ze,{})]})})}function Ye({className:e,children:t,...n}){return(0,I.jsxs)(Ae,{"data-slot":`select-item`,className:i(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,I.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,I.jsx)(Ne,{children:(0,I.jsx)(O,{className:`size-4`})})}),(0,I.jsx)(je,{children:t})]})}function Xe({className:e,...t}){return(0,I.jsx)(Fe,{"data-slot":`select-scroll-up-button`,className:i(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(T,{className:`size-4`})})}function Ze({className:e,...t}){return(0,I.jsx)(Le,{"data-slot":`select-scroll-down-button`,className:i(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(E,{className:`size-4`})})}export{Ke as a,qe as i,Je as n,Ye as r,Ge as t};
1
+ import{r as e}from"./hePW80VL.js";import{h as t}from"./BkIkgVK5.js";import{b as n,l as r,o as i,p as a,s as o,u as s}from"./C0O3rJzW.js";import{r as c,t as l}from"./CpZOnYKF.js";import{S as u,_ as d,b as f,d as p,f as m,g as h,h as g,m as _,p as v,u as y,v as b,x,y as S}from"./CaoceGhm.js";import{n as C,t as w}from"./G6EbcZKg.js";import{t as T}from"./CdUXbAKF.js";import{Lt as E,Qt as D,Rt as O,Xt as k,Yt as A,Zt as j}from"./C9ZwrwyI.js";var M=e(n(),1),N=e(t(),1),P=Object.defineProperty,ee=(e,t)=>P(e,`name`,{value:t,configurable:!0});function F(e){let t=N.useRef({value:e,previous:e});return N.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}ee(F,`usePrevious`);var I=r(),L=Object.defineProperty,R=(e,t)=>L(e,`name`,{value:t,configurable:!0}),z=[` `,`Enter`,`ArrowUp`,`ArrowDown`],B=[` `,`Enter`],V=`Select`,[H,U,W]=l(V),[G,te]=u(V,[W,D]),K=D(),[ne,q]=G(V),[re,ie]=G(V);function J(e){let{__scopeSelect:t,children:n,open:r,defaultOpen:i,onOpenChange:a,value:o,defaultValue:s,onValueChange:c,dir:l,name:u,autoComplete:f,disabled:p,required:m,form:h,internal_do_not_use_render:g}=e,_=K(t),[v,y]=N.useState(null),[b,x]=N.useState(null),[w,T]=N.useState(!1),E=C(l),[D,O]=S({prop:r,defaultProp:i??!1,onChange:a,caller:V}),[k,A]=S({prop:o,defaultProp:s,onChange:c,caller:V}),M=N.useRef(null),P=N.useRef(k);N.useEffect(()=>{let e=h?v?.ownerDocument.getElementById(h):v?.form;if(e instanceof HTMLFormElement){let t=R(()=>A(P.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[h,v,A]);let ee=!v||!!h||!!v.closest(`form`),[F,L]=N.useState(new Set),z=d(),B=Array.from(F).map(e=>e.props.value).join(`;`),U=N.useCallback(e=>{L(t=>new Set(t).add(e))},[]),W=N.useCallback(e=>{L(t=>{let n=new Set(t);return n.delete(e),n})},[]),G={required:m,trigger:v,onTriggerChange:y,valueNode:b,onValueNodeChange:x,valueNodeHasChildren:w,onValueNodeHasChildrenChange:T,contentId:z,value:k,onValueChange:A,open:D,onOpenChange:O,dir:E,triggerPointerDownPosRef:M,disabled:p,name:u,autoComplete:f,form:h,nativeOptions:F,nativeSelectKey:B,isFormControl:ee};return(0,I.jsx)(j,{..._,children:(0,I.jsx)(ne,{scope:t,...G,children:(0,I.jsx)(H.Provider,{scope:t,children:(0,I.jsx)(re,{scope:t,onNativeOptionAdd:U,onNativeOptionRemove:W,children:Ve(g)?g(G):n})})})})}R(J,`SelectProvider`);var ae=R(e=>{let{__scopeSelect:t,children:n,...r}=e;return(0,I.jsx)(J,{__scopeSelect:t,...r,internal_do_not_use_render:({isFormControl:e})=>(0,I.jsxs)(I.Fragment,{children:[n,e?(0,I.jsx)(Be,{__scopeSelect:t}):null]})})},`Select`),oe=`SelectTrigger`,se=N.forwardRef(R(function(e,t){let{__scopeSelect:n,disabled:r=!1,...i}=e,s=K(n),c=q(oe,n),l=c.disabled||r,u=a(t,c.onTriggerChange),d=U(n),f=N.useRef(`touch`),[p,m,h]=He(e=>{let t=d().filter(e=>!e.disabled),n=Ue(t,e,t.find(e=>e.value===c.value));n!==void 0&&c.onValueChange(n.value)}),g=R(e=>{l||(c.onOpenChange(!0),h()),e&&(c.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})},`handleOpen`);return(0,I.jsx)(A,{asChild:!0,...s,children:(0,I.jsx)(o.button,{type:`button`,role:`combobox`,"aria-controls":c.open?c.contentId:void 0,"aria-expanded":c.open,"aria-required":c.required,"aria-autocomplete":`none`,dir:c.dir,"data-state":c.open?`open`:`closed`,disabled:l,"data-disabled":l?``:void 0,"data-placeholder":$(c.value)?``:void 0,...i,ref:u,onClick:x(i.onClick,e=>{e.currentTarget.focus(),f.current!==`mouse`&&g(e)}),onPointerDown:x(i.onPointerDown,e=>{f.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(g(e),e.preventDefault())}),onKeyDown:x(i.onKeyDown,e=>{let t=p.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&m(e.key),!(t&&e.key===` `)&&z.includes(e.key)&&(g(),e.preventDefault())})})})},`SelectTrigger`)),ce=`SelectValue`,le=N.forwardRef(R(function(e,t){let{__scopeSelect:n,className:r,style:i,children:s,placeholder:c=``,...l}=e,u=q(ce,n),{onValueNodeHasChildrenChange:d}=u,p=s!==void 0,m=a(t,u.onValueNodeChange);f(()=>{d(p)},[d,p]);let h=$(u.value);return(0,I.jsx)(o.span,{...l,asChild:!h&&l.asChild,ref:m,style:{pointerEvents:`none`},children:(0,I.jsx)(N.Fragment,{children:h?c:s},h?`placeholder`:`value`)})},`SelectValue`)),ue=N.forwardRef(R(function(e,t){let{__scopeSelect:n,children:r,...i}=e;return(0,I.jsx)(o.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})},`SelectIcon`)),[de,fe]=G(`SelectPortal`,{forceMount:void 0}),pe=R(e=>{let{__scopeSelect:t,forceMount:n,...r}=e;return(0,I.jsx)(de,{scope:e.__scopeSelect,forceMount:n,children:(0,I.jsx)(v,{asChild:!0,...r})})},`SelectPortal`),Y=`SelectContent`,me=N.forwardRef(R(function(e,t){let n=fe(Y,e.__scopeSelect),{forceMount:r=n.forceMount,...i}=e,a=q(Y,e.__scopeSelect),[o,s]=N.useState();return f(()=>{s(new DocumentFragment)},[]),(0,I.jsx)(b,{present:r||a.open,children:({present:e})=>e?(0,I.jsx)(ve,{...i,ref:t}):(0,I.jsx)(he,{...i,fragment:o})})},`SelectContent`)),he=N.forwardRef(R(function(e,t){let{__scopeSelect:n,children:r,fragment:i}=e;return i?M.createPortal((0,I.jsx)(ge,{scope:n,children:(0,I.jsx)(H.Slot,{scope:n,children:(0,I.jsx)(`div`,{ref:t,children:r})})}),i):null},`SelectContentFragment`)),X=10,[ge,Z]=G(Y),_e=s(`SelectContent.RemoveScroll`),ve=N.forwardRef(R(function(e,t){let{__scopeSelect:n}=e,{position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:s,side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:v,sticky:b,hideWhenDetached:S,avoidCollisions:C,...w}=e,T=q(Y,n),[E,D]=N.useState(null),[O,k]=N.useState(null),A=a(t,D),[j,M]=N.useState(null),[P,ee]=N.useState(null),F=U(n),[L,z]=N.useState(!1),B=N.useRef(!1);N.useEffect(()=>{if(E)return y(E)},[E]),m();let V=N.useCallback(e=>{let[t,...n]=F().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&O&&(O.scrollTop=0),n===r&&O&&(O.scrollTop=O.scrollHeight),n?.focus(),document.activeElement!==i))return},[F,O]),H=N.useCallback(()=>V([j,E]),[V,j,E]);N.useEffect(()=>{L&&H()},[L,H]);let{onOpenChange:W,triggerPointerDownPosRef:G}=T;N.useEffect(()=>{if(E){let e={x:0,y:0},t=R(t=>{e={x:Math.abs(Math.round(t.pageX)-(G.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(G.current?.y??0))}},`handlePointerMove`),n=R(n=>{e.x<=10&&e.y<=10?n.preventDefault():n.composedPath().includes(E)||W(!1),document.removeEventListener(`pointermove`,t),G.current=null},`handlePointerUp`);return G.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[E,W,G]),N.useEffect(()=>{let e=R(()=>W(!1),`close`);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[W]);let[te,K]=He(e=>{let t=F().filter(e=>!e.disabled),n=Ue(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current?.focus())}),ne=N.useCallback((e,t,n)=>{let r=!B.current&&!n;(T.value!==void 0&&T.value===t||r)&&(M(e),r&&(B.current=!0))},[T.value]),re=N.useCallback(()=>E?.focus(),[E]),ie=N.useCallback((e,t,n)=>{let r=!B.current&&!n;(T.value!==void 0&&T.value===t||r)&&ee(e)},[T.value]),J=r===`popper`?be:ye,ae=J===be?{side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:v,sticky:b,hideWhenDetached:S,avoidCollisions:C}:{};return(0,I.jsx)(ge,{scope:n,content:E,viewport:O,onViewportChange:k,itemRefCallback:ne,selectedItem:j,onItemLeave:re,itemTextRefCallback:ie,focusSelectedItem:H,selectedItemText:P,position:r,isPositioned:L,searchRef:te,children:(0,I.jsx)(p,{as:_e,allowPinchZoom:!0,children:(0,I.jsx)(_,{asChild:!0,trapped:T.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:x(i,e=>{T.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,I.jsx)(g,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>T.onOpenChange(!1),children:(0,I.jsx)(J,{role:`listbox`,id:T.contentId,"data-state":T.open?`open`:`closed`,dir:T.dir,onContextMenu:e=>e.preventDefault(),...w,...ae,onPlaced:()=>z(!0),ref:A,style:{display:`flex`,flexDirection:`column`,outline:`none`,...w.style},onKeyDown:x(w.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&K(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=F().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>V(t)),e.preventDefault()}})})})})})})},`SelectContentImpl`)),ye=N.forwardRef(R(function(e,t){let{__scopeSelect:n,onPlaced:r,...i}=e,s=q(Y,n),c=Z(Y,n),[l,u]=N.useState(null),[d,p]=N.useState(null),m=a(t,p),h=U(n),g=N.useRef(!1),_=N.useRef(!0),{viewport:v,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=c,S=N.useCallback(()=>{if(s.trigger&&s.valueNode&&l&&d&&v&&y&&b){let e=s.trigger.getBoundingClientRect(),t=d.getBoundingClientRect(),n=s.valueNode.getBoundingClientRect(),i=b.getBoundingClientRect();if(s.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-X,d=w(a,[X,Math.max(X,u-c)]);l.style.minWidth=s+`px`,l.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-X,d=w(a,[X,Math.max(X,u-c)]);l.style.minWidth=s+`px`,l.style.right=d+`px`}let a=h(),o=window.innerHeight-X*2,c=v.scrollHeight,u=window.getComputedStyle(d),f=parseInt(u.borderTopWidth,10),p=parseInt(u.paddingTop,10),m=parseInt(u.borderBottomWidth,10),_=parseInt(u.paddingBottom,10),x=f+p+c+_+m,S=Math.min(y.offsetHeight*5,x),C=window.getComputedStyle(v),T=parseInt(C.paddingTop,10),E=parseInt(C.paddingBottom,10),D=e.top+e.height/2-X,O=o-D,k=y.offsetHeight/2,A=y.offsetTop+k,j=f+p+A,M=x-j;if(j<=D){let e=a.length>0&&y===a[a.length-1].ref.current;l.style.bottom=`0px`;let t=d.clientHeight-v.offsetTop-v.offsetHeight,n=j+Math.max(O,k+(e?E:0)+t+m);l.style.height=n+`px`}else{let e=a.length>0&&y===a[0].ref.current;l.style.top=`0px`;let t=Math.max(D,f+v.offsetTop+(e?T:0)+k)+M;l.style.height=t+`px`,v.scrollTop=j-D+v.offsetTop}l.style.margin=`${X}px 0`,l.style.minHeight=S+`px`,l.style.maxHeight=o+`px`,r?.(),requestAnimationFrame(()=>g.current=!0)}},[h,s.trigger,s.valueNode,l,d,v,y,b,s.dir,r]);f(()=>S(),[S]);let[C,T]=N.useState();f(()=>{d&&T(window.getComputedStyle(d).zIndex)},[d]);let E=N.useCallback(e=>{e&&_.current===!0&&(S(),x?.(),_.current=!1)},[S,x]);return(0,I.jsx)(xe,{scope:n,contentWrapper:l,shouldExpandOnScrollRef:g,onScrollButtonChange:E,children:(0,I.jsx)(`div`,{ref:u,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:C},children:(0,I.jsx)(o.div,{...i,ref:m,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})},`SelectItemAlignedPosition`)),be=N.forwardRef(R(function(e,t){let{__scopeSelect:n,align:r=`start`,collisionPadding:i=X,...a}=e,o=K(n);return(0,I.jsx)(k,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})},`SelectPopperPosition`)),[xe,Se]=G(Y,{}),Ce=`SelectViewport`,we=N.forwardRef(R(function(e,t){let{__scopeSelect:n,nonce:r,...i}=e,s=Z(Ce,n),c=Se(Ce,n),l=a(t,s.onViewportChange),u=N.useRef(0);return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,I.jsx)(H.Slot,{scope:n,children:(0,I.jsx)(o.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:l,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:x(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=c;if(r?.current&&n){let e=Math.abs(u.current-t.scrollTop);if(e>0){let r=window.innerHeight-X*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}u.current=t.scrollTop})})})]})},`SelectViewport`)),[Te,Ee]=G(`SelectGroup`),De=`SelectItem`,[Oe,ke]=G(De),Ae=N.forwardRef(R(function(e,t){let{__scopeSelect:n,value:r,disabled:i=!1,textValue:s,...c}=e,l=q(De,n),u=Z(De,n),f=l.value===r,[p,m]=N.useState(s??``),[g,_]=N.useState(!1),v=h(e=>u.itemRefCallback?.(e,r,i)),y=a(t,v),b=d(),S=N.useRef(`touch`),C=R(()=>{i||(l.onValueChange(r),l.onOpenChange(!1))},`handleSelect`);return(0,I.jsx)(Oe,{scope:n,value:r,disabled:i,textId:b,isSelected:f,onItemTextChange:N.useCallback(e=>{m(t=>t||(e?.textContent??``).trim())},[]),children:(0,I.jsx)(H.ItemSlot,{scope:n,value:r,disabled:i,textValue:p,children:(0,I.jsx)(o.div,{role:`option`,"aria-labelledby":b,"data-highlighted":g?``:void 0,"aria-selected":f&&g,"data-state":f?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...c,ref:y,onFocus:x(c.onFocus,()=>_(!0)),onBlur:x(c.onBlur,()=>_(!1)),onClick:x(c.onClick,()=>{S.current!==`mouse`&&C()}),onPointerUp:x(c.onPointerUp,()=>{S.current===`mouse`&&C()}),onPointerDown:x(c.onPointerDown,e=>{S.current=e.pointerType}),onPointerMove:x(c.onPointerMove,e=>{S.current=e.pointerType,i?u.onItemLeave?.():S.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:x(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:x(c.onKeyDown,e=>{i||e.target!==e.currentTarget||(u.searchRef?.current===``||e.key!==` `)&&(B.includes(e.key)&&C(),e.key===` `&&e.preventDefault())})})})})},`SelectItem`)),Q=`SelectItemText`,je=N.forwardRef(R(function(e,t){let{__scopeSelect:n,className:r,style:i,...s}=e,c=q(Q,n),l=Z(Q,n),u=ke(Q,n),d=ie(Q,n),[p,m]=N.useState(null),g=h(e=>l.itemTextRefCallback?.(e,u.value,u.disabled)),_=a(t,m,u.onItemTextChange,g),v=p?.textContent,y=N.useMemo(()=>(0,I.jsx)(`option`,{value:u.value,disabled:u.disabled,children:v},u.value),[u.disabled,u.value,v]),{onNativeOptionAdd:b,onNativeOptionRemove:x}=d;return f(()=>(b(y),()=>x(y)),[b,x,y]),(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(o.span,{id:u.textId,...s,ref:_}),u.isSelected&&c.valueNode&&!c.valueNodeHasChildren&&!$(c.value)?M.createPortal(s.children,c.valueNode):null]})},`SelectItemText`)),Me=`SelectItemIndicator`,Ne=N.forwardRef(R(function(e,t){let{__scopeSelect:n,...r}=e;return ke(Me,n).isSelected?(0,I.jsx)(o.span,{"aria-hidden":!0,...r,ref:t}):null},`SelectItemIndicator`)),Pe=`SelectScrollUpButton`,Fe=N.forwardRef(R(function(e,t){let n=Z(Pe,e.__scopeSelect),r=Se(Pe,e.__scopeSelect),[i,o]=N.useState(!1),s=a(t,r.onScrollButtonChange);return f(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollTop>0;o(e)};R(e,`handleScroll`);let t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,I.jsx)(Re,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null},`SelectScrollUpButton`)),Ie=`SelectScrollDownButton`,Le=N.forwardRef(R(function(e,t){let n=Z(Ie,e.__scopeSelect),r=Se(Ie,e.__scopeSelect),[i,o]=N.useState(!1),s=a(t,r.onScrollButtonChange);return f(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight,n=Math.ceil(t.scrollTop)<e;o(n)};R(e,`handleScroll`);let t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,I.jsx)(Re,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null},`SelectScrollDownButton`)),Re=N.forwardRef(R(function(e,t){let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=Z(`SelectScrollButton`,n),s=N.useRef(null),c=U(n),l=N.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return N.useEffect(()=>()=>l(),[l]),f(()=>{c().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[c]),(0,I.jsx)(o.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:x(i.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:x(i.onPointerMove,()=>{a.onItemLeave?.(),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:x(i.onPointerLeave,()=>{l()})})},`SelectScrollButtonImpl`)),ze=`SelectBubbleInput`,Be=N.forwardRef(R(function({__scopeSelect:e,...t},n){let r=q(ze,e),{value:i,onValueChange:s,required:l,disabled:u,name:d,autoComplete:f,form:p}=r,{nativeOptions:m,nativeSelectKey:h}=r,g=N.useRef(null),_=a(n,g),v=i??``,y=F(v),b=Array.from(m).some(e=>(e.props.value??``)===``);return N.useEffect(()=>{let e=g.current;if(!e)return;let t=window.HTMLSelectElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(y!==v&&n){let t=new Event(`change`,{bubbles:!0});n.call(e,v),e.dispatchEvent(t)}},[y,v]),(0,I.jsxs)(o.select,{"aria-hidden":!0,required:l,tabIndex:-1,name:d,autoComplete:f,disabled:u,form:p,onChange:e=>s(e.target.value),...t,style:{...c,...t.style},ref:_,defaultValue:v,children:[$(i)&&!b?(0,I.jsx)(`option`,{value:``}):null,Array.from(m)]},h)},`SelectBubbleInput`));function Ve(e){return typeof e==`function`}R(Ve,`isFunction`);function $(e){return e===``||e===void 0}R($,`shouldShowPlaceholder`);function He(e){let t=h(e),n=N.useRef(``),r=N.useRef(0),i=N.useCallback(e=>{let i=n.current+e;t(i),R((function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))}),`updateSearch`)(i)},[t]),a=N.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return N.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}R(He,`useTypeaheadSearch`);function Ue(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=We(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}R(Ue,`findNextItem`);function We(e,t){return e.map((n,r)=>e[(t+r)%e.length])}R(We,`wrapArray`);function Ge({...e}){return(0,I.jsx)(ae,{"data-slot":`select`,...e})}function Ke({...e}){return(0,I.jsx)(le,{"data-slot":`select-value`,...e})}function qe({className:e,size:t=`default`,children:n,...r}){return(0,I.jsxs)(se,{"data-slot":`select-trigger`,"data-size":t,className:i(`flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,I.jsx)(ue,{asChild:!0,children:(0,I.jsx)(E,{className:`size-4 opacity-50`})})]})}function Je({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...a}){return(0,I.jsx)(pe,{children:(0,I.jsxs)(me,{"data-slot":`select-content`,className:i(`relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...a,children:[(0,I.jsx)(Xe,{}),(0,I.jsx)(we,{className:i(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,I.jsx)(Ze,{})]})})}function Ye({className:e,children:t,...n}){return(0,I.jsxs)(Ae,{"data-slot":`select-item`,className:i(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,I.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,I.jsx)(Ne,{children:(0,I.jsx)(O,{className:`size-4`})})}),(0,I.jsx)(je,{children:t})]})}function Xe({className:e,...t}){return(0,I.jsx)(Fe,{"data-slot":`select-scroll-up-button`,className:i(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(T,{className:`size-4`})})}function Ze({className:e,...t}){return(0,I.jsx)(Le,{"data-slot":`select-scroll-down-button`,className:i(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,I.jsx)(E,{className:`size-4`})})}export{Ke as a,qe as i,Je as n,Ye as r,Ge as t};
@@ -1 +1 @@
1
- import{r as e}from"./hePW80VL.js";import{h as t,n}from"./XzPc-eVf.js";import{l as r,m as i,t as a}from"./CKOS5Y-e.js";import{S as o,p as s}from"./Ca4g4XbM.js";import{Nt as c,Rt as l}from"./Bxw3grU1.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./DxuXBECK.js";var g=e(t(),1),_=r();function v({text:e,label:t}){let[n,r]=(0,g.useState)(!1),i=(0,g.useCallback)(()=>{navigator.clipboard.writeText(e).then(()=>{r(!0),setTimeout(()=>r(!1),1600)})},[e]);return(0,_.jsxs)(`div`,{className:`grid gap-1`,children:[(0,_.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,_.jsx)(`span`,{className:`text-xs font-medium`,children:t}),(0,_.jsx)(a,{variant:`ghost`,size:`sm`,className:`h-6 gap-1 px-2 text-xs`,onClick:i,children:n?(0,_.jsx)(l,{className:`size-3`}):(0,_.jsx)(c,{className:`size-3`})})]}),(0,_.jsx)(`pre`,{"data-selectable":!0,className:`max-h-32 overflow-auto whitespace-pre-wrap break-all rounded-md border bg-muted/40 p-2 text-[11px] leading-snug`,children:e})]})}function y(){let e=n(e=>e.activeDialog),t=n(e=>e.closeDialog),{t:r}=i(),[c,l]=(0,g.useState)(null),[y,b]=(0,g.useState)(null),[x,S]=(0,g.useState)(!1),C=e===`mcp-setup`;(0,g.useEffect)(()=>{C&&s().then(e=>{l(e),S(!1)}).catch(e=>b(e instanceof Error?e.message:String(e)))},[C]);let w=(0,g.useCallback)(()=>{o().then(()=>{l(null),S(!0)})},[]),T=c?`claude mcp add --transport http planche ${c.url} \\\n -H "Authorization: Bearer ${c.token}"`:``,E=c?JSON.stringify({mcpServers:{planche:{type:`http`,url:c.url,headers:{Authorization:`Bearer ${c.token}`}}}},null,2):``;return(0,_.jsx)(h,{open:C,onOpenChange:e=>{e||t()},children:(0,_.jsxs)(f,{className:`sm:max-w-[620px]`,children:[(0,_.jsxs)(u,{children:[(0,_.jsx)(p,{children:r(`mcp.title`)}),(0,_.jsx)(m,{children:r(`mcp.description`)})]}),(0,_.jsxs)(`div`,{className:`grid gap-3`,children:[(0,_.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs`,children:[[`readsLabel`,`reads`],[`writesLabel`,`writes`],[`needsLabel`,`needs`],[`tokenLabel`,`token`]].map(([e,t])=>(0,_.jsxs)(g.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:r(`mcp.${e}`)}),(0,_.jsx)(`dd`,{className:`text-muted-foreground`,children:r(`mcp.${t}`)})]},e))}),y&&(0,_.jsx)(`p`,{className:`rounded-md border border-destructive/40 p-2 text-xs text-destructive`,children:y}),x&&(0,_.jsx)(`p`,{className:`rounded-md border p-2 text-xs text-muted-foreground`,children:r(`mcp.revoked`)}),c&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(v,{text:T,label:r(`mcp.command`)}),(0,_.jsx)(v,{text:E,label:r(`mcp.json`)}),(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`mcp.stored`,{path:c.path})})]})]}),(0,_.jsxs)(d,{children:[c&&(0,_.jsx)(a,{variant:`ghost`,size:`sm`,onClick:w,children:r(`mcp.revoke`)}),(0,_.jsx)(a,{size:`sm`,onClick:t,children:r(`settings.done`)})]})]})})}export{y as McpSetupDialog};
1
+ import{r as e}from"./hePW80VL.js";import{h as t,n}from"./BkIkgVK5.js";import{l as r,m as i,t as a}from"./C0O3rJzW.js";import{S as o,p as s}from"./B49XtolG.js";import{Nt as c,Rt as l}from"./C9ZwrwyI.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./Cg4DfVr4.js";var g=e(t(),1),_=r();function v({text:e,label:t}){let[n,r]=(0,g.useState)(!1),i=(0,g.useCallback)(()=>{navigator.clipboard.writeText(e).then(()=>{r(!0),setTimeout(()=>r(!1),1600)})},[e]);return(0,_.jsxs)(`div`,{className:`grid gap-1`,children:[(0,_.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,_.jsx)(`span`,{className:`text-xs font-medium`,children:t}),(0,_.jsx)(a,{variant:`ghost`,size:`sm`,className:`h-6 gap-1 px-2 text-xs`,onClick:i,children:n?(0,_.jsx)(l,{className:`size-3`}):(0,_.jsx)(c,{className:`size-3`})})]}),(0,_.jsx)(`pre`,{"data-selectable":!0,className:`max-h-32 overflow-auto whitespace-pre-wrap break-all rounded-md border bg-muted/40 p-2 text-[11px] leading-snug`,children:e})]})}function y(){let e=n(e=>e.activeDialog),t=n(e=>e.closeDialog),{t:r}=i(),[c,l]=(0,g.useState)(null),[y,b]=(0,g.useState)(null),[x,S]=(0,g.useState)(!1),C=e===`mcp-setup`;(0,g.useEffect)(()=>{C&&s().then(e=>{l(e),S(!1)}).catch(e=>b(e instanceof Error?e.message:String(e)))},[C]);let w=(0,g.useCallback)(()=>{o().then(()=>{l(null),S(!0)})},[]),T=c?`claude mcp add --transport http planche ${c.url} \\\n -H "Authorization: Bearer ${c.token}"`:``,E=c?JSON.stringify({mcpServers:{planche:{type:`http`,url:c.url,headers:{Authorization:`Bearer ${c.token}`}}}},null,2):``;return(0,_.jsx)(h,{open:C,onOpenChange:e=>{e||t()},children:(0,_.jsxs)(f,{className:`sm:max-w-[620px]`,children:[(0,_.jsxs)(u,{children:[(0,_.jsx)(p,{children:r(`mcp.title`)}),(0,_.jsx)(m,{children:r(`mcp.description`)})]}),(0,_.jsxs)(`div`,{className:`grid gap-3`,children:[(0,_.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs`,children:[[`readsLabel`,`reads`],[`writesLabel`,`writes`],[`needsLabel`,`needs`],[`tokenLabel`,`token`]].map(([e,t])=>(0,_.jsxs)(g.Fragment,{children:[(0,_.jsx)(`dt`,{className:`font-medium`,children:r(`mcp.${e}`)}),(0,_.jsx)(`dd`,{className:`text-muted-foreground`,children:r(`mcp.${t}`)})]},e))}),y&&(0,_.jsx)(`p`,{className:`rounded-md border border-destructive/40 p-2 text-xs text-destructive`,children:y}),x&&(0,_.jsx)(`p`,{className:`rounded-md border p-2 text-xs text-muted-foreground`,children:r(`mcp.revoked`)}),c&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(v,{text:T,label:r(`mcp.command`)}),(0,_.jsx)(v,{text:E,label:r(`mcp.json`)}),(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`mcp.stored`,{path:c.path})})]})]}),(0,_.jsxs)(d,{children:[c&&(0,_.jsx)(a,{variant:`ghost`,size:`sm`,onClick:w,children:r(`mcp.revoke`)}),(0,_.jsx)(a,{size:`sm`,onClick:t,children:r(`settings.done`)})]})]})})}export{y as McpSetupDialog};
@@ -1 +1 @@
1
- import{r as e}from"./hePW80VL.js";import{c as t,h as n,n as r,t as i}from"./XzPc-eVf.js";import{l as a,m as o,t as s}from"./CKOS5Y-e.js";import{a as c,i as l,n as u,r as d,t as f}from"./DsllOXPq.js";import{t as p}from"./B3nhMsGp.js";import{a as m}from"./CtXRSNHU.js";import{n as h}from"./Cr6Fx4T5.js";import{t as g}from"./4_c4BD6i.js";import{H as _,_ as v,c as y,g as b,h as x,ot as S}from"./Bxw3grU1.js";import{a as ee,i as te,n as ne,o as C,t as re}from"./DxuXBECK.js";var w=e(n(),1),T=a(),ie=e=>e instanceof Error?e.message:String(e),E=e=>e.hostName||e.host||e.file||e.id,D=5e4;function O({id:e,label:t,side:n,onChange:r,connections:i,disabled:a}){let{t:s}=o(),[p,g]=(0,w.useState)([]),[_,v]=(0,w.useState)([]),b=i.find(e=>e.id===n.connectionId);return(0,w.useEffect)(()=>{if(!b?.serverConnectionId)return;let e=!1;return(async()=>{try{let t=await h(b.id).introspect.listDatabases(m(b.serverConnectionId));if(e)return;g(t),t.includes(n.database)||r({connectionId:b.id,database:t[0]??``,table:``})}catch{e||g([])}})(),()=>{e=!0}},[b?.id,b?.serverConnectionId]),(0,w.useEffect)(()=>{if(!b?.serverConnectionId||!n.database)return;let e=!1;return(async()=>{try{let t=await h(b.id).introspect.listTables(m(b.serverConnectionId),n.database);if(e)return;let i=t.map(e=>e.name);v(i),n.table&&!i.includes(n.table)&&r({...n,table:``})}catch{e||v([])}})(),()=>{e=!0}},[b?.id,b?.serverConnectionId,n.database]),(0,T.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,T.jsx)(y,{className:`font-medium`,children:t}),(0,T.jsxs)(f,{value:n.connectionId,onValueChange:e=>r({connectionId:e,database:``,table:``}),disabled:a,children:[(0,T.jsx)(l,{id:`${e}-conn`,className:`w-full`,children:(0,T.jsx)(c,{placeholder:s(`database.diff.pickConnection`)})}),(0,T.jsx)(u,{children:i.map(e=>(0,T.jsx)(d,{value:e.id,children:E(e)},e.id))})]}),(0,T.jsxs)(f,{value:n.database,onValueChange:e=>r({...n,database:e,table:``}),disabled:a||p.length===0,children:[(0,T.jsx)(l,{id:`${e}-db`,className:`w-full`,children:(0,T.jsx)(c,{placeholder:s(`database.diff.pickDatabase`)})}),(0,T.jsx)(u,{children:p.map(e=>(0,T.jsx)(d,{value:e,children:e},e))})]}),(0,T.jsxs)(f,{value:n.table,onValueChange:e=>r({...n,table:e}),disabled:a||_.length===0,children:[(0,T.jsx)(l,{id:`${e}-table`,className:`w-full`,children:(0,T.jsx)(c,{placeholder:s(`database.dataDiff.pickTable`)})}),(0,T.jsx)(u,{children:_.map(e=>(0,T.jsx)(d,{value:e,children:e},e))})]})]})}async function k(e,t){let n=await _({connectionId:e.connectionId,database:e.database,table:e.table,limit:D,onProgress:t}),r=[];for await(let e of n.pages)r.push(...e);return{rows:r,columns:n.fields.map(e=>e.name),capped:r.length>=D}}function A({diff:e,row:t,other:n,changed:r}){let{t:i}=o(),a=[...e.keyColumns,...e.compareColumns];return(0,T.jsxs)(`table`,{className:`w-full text-xs font-mono`,children:[(0,T.jsx)(`thead`,{className:`text-muted-foreground`,children:(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(`th`,{className:`text-left font-normal pr-2`,children:i(`database.diff.column`)}),(0,T.jsx)(`th`,{className:`text-left font-normal pr-2`,children:i(`database.diff.source`)}),(0,T.jsx)(`th`,{className:`text-left font-normal`,children:i(`database.diff.target`)})]})}),(0,T.jsx)(`tbody`,{children:a.map(e=>(0,T.jsxs)(`tr`,{className:r?.includes(e)?`text-amber-600 dark:text-amber-400`:``,children:[(0,T.jsx)(`td`,{className:`pr-2 align-top whitespace-nowrap`,children:e}),(0,T.jsx)(`td`,{className:`pr-2 align-top break-all`,children:b(t[e])}),(0,T.jsx)(`td`,{className:`align-top break-all`,children:n?b(n[e]):`—`})]},e))})]})}function j(){let{t:e}=o(),n=r(e=>e.activeDialog),a=r(e=>e.closeDialog),c=i(`data-diff`),l=p(e=>e.activeConnections),u=(0,w.useMemo)(()=>l.filter(e=>e.serverConnectionId),[l]),d=p(e=>e.activeConnectionId),f=n===`data-diff`,[_,y]=(0,w.useState)(()=>c&&u.some(e=>e.id===c.connectionId)?{connectionId:c.connectionId,database:c.database,table:c.table}:{connectionId:d&&u.some(e=>e.id===d)?d:u[0]?.id??``,database:``,table:``}),[E,j]=(0,w.useState)(()=>({connectionId:u.find(e=>e.id!==_.connectionId)?.id??_.connectionId,database:``,table:``})),[M,N]=(0,w.useState)([]),[P,F]=(0,w.useState)(null),[I,L]=(0,w.useState)(!1),[R,z]=(0,w.useState)(`changed`),[B,V]=(0,w.useState)(0),[H,ae]=(0,w.useState)(!1),[U,W]=(0,w.useState)(!1),[G,K]=(0,w.useState)({source:null,target:null}),[q,J]=(0,w.useState)(null),oe=e=>j(e.database&&!e.table&&_.table?{...e,table:_.table}:e),Y=_.connectionId===E.connectionId&&_.database===E.database&&_.table===E.table,se=!!_.table&&!!E.table&&!Y,X=E.connectionId?h(E.connectionId):null;async function ce(){W(!0),J(null),F(null);try{let n=p.getState().activeConnections.find(e=>e.id===_.connectionId);if(!n?.serverConnectionId)throw Error(e(`services.query.notConnected`));let r=await h(_.connectionId).introspect.getPrimaryKeys(m(n.serverConnectionId),_.database,_.table);if(r.length===0)throw Error(e(`database.dataDiff.noPrimaryKey`,{table:_.table}));K({source:{loaded:0,total:null},target:{loaded:0,total:null}});let[i,a]=await Promise.all([k(_,e=>K(t=>({...t,source:e}))),k(E,e=>K(t=>({...t,target:e})))]);if(r.some(e=>!a.columns.includes(e)))throw Error(e(`database.dataDiff.keyMissingInTarget`,{columns:r.join(`, `)}));let o=v(i.rows,a.rows,r,i.columns,a.columns);N(r),L(i.capped||a.capped),F(o),z(o.changed.length>0?`changed`:o.added.length>0?`added`:`removed`),V(0),g(`compare_data`),t(`data_diff`,{source_dbms:h(_.connectionId).id,target_dbms:X?.id??`unknown`,added:o.added.length,changed:o.changed.length,removed:o.removed.length})}catch(e){J(ie(e))}finally{W(!1),K({source:null,target:null})}}let Z=e=>e?e.total===null?e.loaded.toLocaleString():`${e.loaded.toLocaleString()} / ${e.total.toLocaleString()}`:``,Q=(0,w.useMemo)(()=>P&&X?x(P,X,{database:E.database,table:E.table},{includeDeletes:H}):``,[P,X,E.database,E.table,H]);function le(){Q&&(S(E.connectionId,Q,E.database,e(`database.dataDiff.tabTitle`,{table:E.table})),a())}let $=P?R===`added`?P.added:R===`removed`?P.removed:P.changed.map(e=>e.source):[],ue=!!P&&P.added.length+P.changed.length+P.removed.length>0,de=e=>M.map(t=>b(e[t])).join(`, `);return(0,T.jsx)(re,{open:f,onOpenChange:e=>{e||a()},children:(0,T.jsxs)(ne,{className:`sm:max-w-[900px]`,children:[(0,T.jsx)(ee,{children:(0,T.jsx)(C,{children:e(`database.dataDiff.title`)})}),(0,T.jsxs)(`div`,{className:`space-y-3`,children:[(0,T.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,T.jsx)(O,{id:`ddiff-source`,label:e(`database.diff.source`),side:_,onChange:y,connections:u,disabled:U}),(0,T.jsx)(O,{id:`ddiff-target`,label:e(`database.diff.target`),side:E,onChange:oe,connections:u,disabled:U})]}),(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.dataDiff.hint`,{cap:D.toLocaleString()})}),Y&&_.table&&(0,T.jsx)(`p`,{className:`text-xs text-destructive`,children:e(`database.dataDiff.sameSide`)}),q&&(0,T.jsx)(`p`,{className:`text-sm text-destructive whitespace-pre-wrap`,children:q}),U&&(G.source||G.target)&&(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.dataDiff.loading`,{source:Z(G.source),target:Z(G.target)})}),P&&(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-xs`,children:[(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e(`database.dataDiff.summary`,{key:M.join(`, `),added:P.added.length,changed:P.changed.length,removed:P.removed.length,identical:P.identical})}),I&&(0,T.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:e(`database.dataDiff.capped`,{cap:D.toLocaleString()})}),(P.sourceOnlyColumns.length>0||P.targetOnlyColumns.length>0)&&(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e(`database.dataDiff.ignoredColumns`,{columns:[...P.sourceOnlyColumns,...P.targetOnlyColumns].join(`, `)})})]}),(0,T.jsx)(`div`,{className:`flex gap-1 text-xs`,children:[`added`,`changed`,`removed`].map(t=>(0,T.jsx)(`button`,{type:`button`,onClick:()=>{z(t),V(0)},className:`rounded border px-2 py-0.5 ${R===t?`bg-accent`:``}`,children:e(`database.dataDiff.${t}`,{count:t===`added`?P.added.length:t===`removed`?P.removed.length:P.changed.length})},t))}),(0,T.jsxs)(`div`,{className:`grid grid-cols-[240px_1fr] gap-3 h-[280px]`,children:[(0,T.jsxs)(`ul`,{className:`overflow-auto rounded-md border text-sm font-mono`,children:[$.slice(0,2e3).map((e,t)=>(0,T.jsx)(`li`,{className:`px-2 py-1 cursor-pointer ${B===t?`bg-accent`:``}`,onClick:()=>V(t),children:de(e)},t)),$.length===0&&(0,T.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.dataDiff.none`)}),$.length>2e3&&(0,T.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.dataDiff.more`,{count:$.length-2e3})})]}),(0,T.jsx)(`div`,{className:`overflow-auto rounded-md border p-2`,children:$[B]?R===`changed`?(0,T.jsx)(A,{diff:P,row:P.changed[B].source,other:P.changed[B].target,changed:P.changed[B].columns}):R===`removed`?(0,T.jsx)(A,{diff:P,row:{},other:$[B]}):(0,T.jsx)(A,{diff:P,row:$[B]}):(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.selectTable`)})})]}),(0,T.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer`,children:[(0,T.jsx)(`input`,{type:`checkbox`,checked:H,onChange:e=>ae(e.target.checked)}),(0,T.jsx)(`span`,{className:H?`text-destructive`:``,children:e(`database.dataDiff.includeDeletes`)})]})]})]}),(0,T.jsxs)(te,{children:[(0,T.jsx)(s,{variant:`outline`,onClick:a,children:e(`database.diff.close`)}),(0,T.jsx)(s,{variant:`secondary`,onClick:()=>{ce()},disabled:!se||U,children:e(U?`database.diff.comparing`:`database.diff.compare`)}),(0,T.jsx)(s,{onClick:le,disabled:!ue,children:e(`database.diff.openScript`)})]})]})})}export{j as DataDiffDialog};
1
+ import{r as e}from"./hePW80VL.js";import{c as t,h as n,n as r,t as i}from"./BkIkgVK5.js";import{l as a,m as o,t as s}from"./C0O3rJzW.js";import{a as c,i as l,n as u,r as d,t as f}from"./BctsL19F.js";import{t as p}from"./DC8XCjJ3.js";import{a as m}from"./Dd9quIZg.js";import{n as h}from"./Dht5Mpyb.js";import{t as g}from"./3z4eHGF-.js";import{H as _,_ as v,c as y,g as b,h as x,ot as S}from"./C9ZwrwyI.js";import{a as ee,i as te,n as ne,o as C,t as re}from"./Cg4DfVr4.js";var w=e(n(),1),T=a(),ie=e=>e instanceof Error?e.message:String(e),E=e=>e.hostName||e.host||e.file||e.id,D=5e4;function O({id:e,label:t,side:n,onChange:r,connections:i,disabled:a}){let{t:s}=o(),[p,g]=(0,w.useState)([]),[_,v]=(0,w.useState)([]),b=i.find(e=>e.id===n.connectionId);return(0,w.useEffect)(()=>{if(!b?.serverConnectionId)return;let e=!1;return(async()=>{try{let t=await h(b.id).introspect.listDatabases(m(b.serverConnectionId));if(e)return;g(t),t.includes(n.database)||r({connectionId:b.id,database:t[0]??``,table:``})}catch{e||g([])}})(),()=>{e=!0}},[b?.id,b?.serverConnectionId]),(0,w.useEffect)(()=>{if(!b?.serverConnectionId||!n.database)return;let e=!1;return(async()=>{try{let t=await h(b.id).introspect.listTables(m(b.serverConnectionId),n.database);if(e)return;let i=t.map(e=>e.name);v(i),n.table&&!i.includes(n.table)&&r({...n,table:``})}catch{e||v([])}})(),()=>{e=!0}},[b?.id,b?.serverConnectionId,n.database]),(0,T.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3`,children:[(0,T.jsx)(y,{className:`font-medium`,children:t}),(0,T.jsxs)(f,{value:n.connectionId,onValueChange:e=>r({connectionId:e,database:``,table:``}),disabled:a,children:[(0,T.jsx)(l,{id:`${e}-conn`,className:`w-full`,children:(0,T.jsx)(c,{placeholder:s(`database.diff.pickConnection`)})}),(0,T.jsx)(u,{children:i.map(e=>(0,T.jsx)(d,{value:e.id,children:E(e)},e.id))})]}),(0,T.jsxs)(f,{value:n.database,onValueChange:e=>r({...n,database:e,table:``}),disabled:a||p.length===0,children:[(0,T.jsx)(l,{id:`${e}-db`,className:`w-full`,children:(0,T.jsx)(c,{placeholder:s(`database.diff.pickDatabase`)})}),(0,T.jsx)(u,{children:p.map(e=>(0,T.jsx)(d,{value:e,children:e},e))})]}),(0,T.jsxs)(f,{value:n.table,onValueChange:e=>r({...n,table:e}),disabled:a||_.length===0,children:[(0,T.jsx)(l,{id:`${e}-table`,className:`w-full`,children:(0,T.jsx)(c,{placeholder:s(`database.dataDiff.pickTable`)})}),(0,T.jsx)(u,{children:_.map(e=>(0,T.jsx)(d,{value:e,children:e},e))})]})]})}async function k(e,t){let n=await _({connectionId:e.connectionId,database:e.database,table:e.table,limit:D,onProgress:t}),r=[];for await(let e of n.pages)r.push(...e);return{rows:r,columns:n.fields.map(e=>e.name),capped:r.length>=D}}function A({diff:e,row:t,other:n,changed:r}){let{t:i}=o(),a=[...e.keyColumns,...e.compareColumns];return(0,T.jsxs)(`table`,{className:`w-full text-xs font-mono`,children:[(0,T.jsx)(`thead`,{className:`text-muted-foreground`,children:(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(`th`,{className:`text-left font-normal pr-2`,children:i(`database.diff.column`)}),(0,T.jsx)(`th`,{className:`text-left font-normal pr-2`,children:i(`database.diff.source`)}),(0,T.jsx)(`th`,{className:`text-left font-normal`,children:i(`database.diff.target`)})]})}),(0,T.jsx)(`tbody`,{children:a.map(e=>(0,T.jsxs)(`tr`,{className:r?.includes(e)?`text-amber-600 dark:text-amber-400`:``,children:[(0,T.jsx)(`td`,{className:`pr-2 align-top whitespace-nowrap`,children:e}),(0,T.jsx)(`td`,{className:`pr-2 align-top break-all`,children:b(t[e])}),(0,T.jsx)(`td`,{className:`align-top break-all`,children:n?b(n[e]):`—`})]},e))})]})}function j(){let{t:e}=o(),n=r(e=>e.activeDialog),a=r(e=>e.closeDialog),c=i(`data-diff`),l=p(e=>e.activeConnections),u=(0,w.useMemo)(()=>l.filter(e=>e.serverConnectionId),[l]),d=p(e=>e.activeConnectionId),f=n===`data-diff`,[_,y]=(0,w.useState)(()=>c&&u.some(e=>e.id===c.connectionId)?{connectionId:c.connectionId,database:c.database,table:c.table}:{connectionId:d&&u.some(e=>e.id===d)?d:u[0]?.id??``,database:``,table:``}),[E,j]=(0,w.useState)(()=>({connectionId:u.find(e=>e.id!==_.connectionId)?.id??_.connectionId,database:``,table:``})),[M,N]=(0,w.useState)([]),[P,F]=(0,w.useState)(null),[I,L]=(0,w.useState)(!1),[R,z]=(0,w.useState)(`changed`),[B,V]=(0,w.useState)(0),[H,ae]=(0,w.useState)(!1),[U,W]=(0,w.useState)(!1),[G,K]=(0,w.useState)({source:null,target:null}),[q,J]=(0,w.useState)(null),oe=e=>j(e.database&&!e.table&&_.table?{...e,table:_.table}:e),Y=_.connectionId===E.connectionId&&_.database===E.database&&_.table===E.table,se=!!_.table&&!!E.table&&!Y,X=E.connectionId?h(E.connectionId):null;async function ce(){W(!0),J(null),F(null);try{let n=p.getState().activeConnections.find(e=>e.id===_.connectionId);if(!n?.serverConnectionId)throw Error(e(`services.query.notConnected`));let r=await h(_.connectionId).introspect.getPrimaryKeys(m(n.serverConnectionId),_.database,_.table);if(r.length===0)throw Error(e(`database.dataDiff.noPrimaryKey`,{table:_.table}));K({source:{loaded:0,total:null},target:{loaded:0,total:null}});let[i,a]=await Promise.all([k(_,e=>K(t=>({...t,source:e}))),k(E,e=>K(t=>({...t,target:e})))]);if(r.some(e=>!a.columns.includes(e)))throw Error(e(`database.dataDiff.keyMissingInTarget`,{columns:r.join(`, `)}));let o=v(i.rows,a.rows,r,i.columns,a.columns);N(r),L(i.capped||a.capped),F(o),z(o.changed.length>0?`changed`:o.added.length>0?`added`:`removed`),V(0),g(`compare_data`),t(`data_diff`,{source_dbms:h(_.connectionId).id,target_dbms:X?.id??`unknown`,added:o.added.length,changed:o.changed.length,removed:o.removed.length})}catch(e){J(ie(e))}finally{W(!1),K({source:null,target:null})}}let Z=e=>e?e.total===null?e.loaded.toLocaleString():`${e.loaded.toLocaleString()} / ${e.total.toLocaleString()}`:``,Q=(0,w.useMemo)(()=>P&&X?x(P,X,{database:E.database,table:E.table},{includeDeletes:H}):``,[P,X,E.database,E.table,H]);function le(){Q&&(S(E.connectionId,Q,E.database,e(`database.dataDiff.tabTitle`,{table:E.table})),a())}let $=P?R===`added`?P.added:R===`removed`?P.removed:P.changed.map(e=>e.source):[],ue=!!P&&P.added.length+P.changed.length+P.removed.length>0,de=e=>M.map(t=>b(e[t])).join(`, `);return(0,T.jsx)(re,{open:f,onOpenChange:e=>{e||a()},children:(0,T.jsxs)(ne,{className:`sm:max-w-[900px]`,children:[(0,T.jsx)(ee,{children:(0,T.jsx)(C,{children:e(`database.dataDiff.title`)})}),(0,T.jsxs)(`div`,{className:`space-y-3`,children:[(0,T.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,T.jsx)(O,{id:`ddiff-source`,label:e(`database.diff.source`),side:_,onChange:y,connections:u,disabled:U}),(0,T.jsx)(O,{id:`ddiff-target`,label:e(`database.diff.target`),side:E,onChange:oe,connections:u,disabled:U})]}),(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.dataDiff.hint`,{cap:D.toLocaleString()})}),Y&&_.table&&(0,T.jsx)(`p`,{className:`text-xs text-destructive`,children:e(`database.dataDiff.sameSide`)}),q&&(0,T.jsx)(`p`,{className:`text-sm text-destructive whitespace-pre-wrap`,children:q}),U&&(G.source||G.target)&&(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.dataDiff.loading`,{source:Z(G.source),target:Z(G.target)})}),P&&(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-xs`,children:[(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e(`database.dataDiff.summary`,{key:M.join(`, `),added:P.added.length,changed:P.changed.length,removed:P.removed.length,identical:P.identical})}),I&&(0,T.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:e(`database.dataDiff.capped`,{cap:D.toLocaleString()})}),(P.sourceOnlyColumns.length>0||P.targetOnlyColumns.length>0)&&(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e(`database.dataDiff.ignoredColumns`,{columns:[...P.sourceOnlyColumns,...P.targetOnlyColumns].join(`, `)})})]}),(0,T.jsx)(`div`,{className:`flex gap-1 text-xs`,children:[`added`,`changed`,`removed`].map(t=>(0,T.jsx)(`button`,{type:`button`,onClick:()=>{z(t),V(0)},className:`rounded border px-2 py-0.5 ${R===t?`bg-accent`:``}`,children:e(`database.dataDiff.${t}`,{count:t===`added`?P.added.length:t===`removed`?P.removed.length:P.changed.length})},t))}),(0,T.jsxs)(`div`,{className:`grid grid-cols-[240px_1fr] gap-3 h-[280px]`,children:[(0,T.jsxs)(`ul`,{className:`overflow-auto rounded-md border text-sm font-mono`,children:[$.slice(0,2e3).map((e,t)=>(0,T.jsx)(`li`,{className:`px-2 py-1 cursor-pointer ${B===t?`bg-accent`:``}`,onClick:()=>V(t),children:de(e)},t)),$.length===0&&(0,T.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.dataDiff.none`)}),$.length>2e3&&(0,T.jsx)(`li`,{className:`px-2 py-1 text-muted-foreground`,children:e(`database.dataDiff.more`,{count:$.length-2e3})})]}),(0,T.jsx)(`div`,{className:`overflow-auto rounded-md border p-2`,children:$[B]?R===`changed`?(0,T.jsx)(A,{diff:P,row:P.changed[B].source,other:P.changed[B].target,changed:P.changed[B].columns}):R===`removed`?(0,T.jsx)(A,{diff:P,row:{},other:$[B]}):(0,T.jsx)(A,{diff:P,row:$[B]}):(0,T.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`database.diff.selectTable`)})})]}),(0,T.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs cursor-pointer`,children:[(0,T.jsx)(`input`,{type:`checkbox`,checked:H,onChange:e=>ae(e.target.checked)}),(0,T.jsx)(`span`,{className:H?`text-destructive`:``,children:e(`database.dataDiff.includeDeletes`)})]})]})]}),(0,T.jsxs)(te,{children:[(0,T.jsx)(s,{variant:`outline`,onClick:a,children:e(`database.diff.close`)}),(0,T.jsx)(s,{variant:`secondary`,onClick:()=>{ce()},disabled:!se||U,children:e(U?`database.diff.comparing`:`database.diff.compare`)}),(0,T.jsx)(s,{onClick:le,disabled:!ue,children:e(`database.diff.openScript`)})]})]})})}export{j as DataDiffDialog};
@@ -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=e(r(),1),h=`G-2FYJTCC2TH`,g=!1,_=!1,v=!1,y=`planche.internalTraffic`;function b(){if(typeof window>`u`)return!1;try{let e=new URLSearchParams(window.location.search).get(`internal`);return e===`1`?localStorage.setItem(y,`1`):e===`0`&&localStorage.removeItem(y),localStorage.getItem(y)===`1`}catch{return!1}}function x(){let e=typeof document<`u`&&document.querySelector(`meta[name="planche-agent"]`)!==null;return!!h&&typeof window<`u`&&!e}function S(){window.dataLayer=window.dataLayer??[],window.dataLayer.push(arguments)}function C(){if(g)return;g=!0,window.gtag=S,S(`js`,new Date),S(`config`,h,{anonymize_ip:!0,allow_google_signals:!1,allow_ad_personalization_signals:!1,app_version:`0.1.1`,...v?{traffic_type:`internal`}:{}});let e=document.createElement(`script`);e.async=!0,e.src=`https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(h)}`,document.head.appendChild(e)}function w(e){v=b(),_=e&&x(),x()&&(window[`ga-disable-${h}`]=!_,_&&C())}function T(e){if(_)try{S(`set`,`user_properties`,e)}catch{}}function E(e){return e===0?`0`:e===1?`1`:e<=3?`2-3`:e<=10?`4-10`:`10+`}function D(e){return e<=1?`1`:e<=5?`2-5`:e<=20?`6-20`:e<=50?`21-50`:e<=100?`51-100`:`100+`}function O(e,t={}){if(!_)return;let n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);try{S(`event`,e,n)}catch{}}var k=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},A=(e=>e?k(e):k),j=e=>e;function M(e,t=j){let n=m.useSyncExternalStore(e.subscribe,m.useCallback(()=>t(e.getState()),[e,t]),m.useCallback(()=>t(e.getInitialState()),[e,t]));return m.useDebugValue(n),n}var N=e=>{let t=A(e),n=e=>M(t,e);return Object.assign(n,t),n},P=(e=>e?N(e):N),F=P()((e,t)=>({activeDialog:null,destructiveConfirm:null,dryRun:null,message:null,prompt:null,dialogProps:void 0,footerMessage:``,pendingGridEdits:{},transportVersion:0,isLoading:!1,welcomeVisible:!1,setWelcomeVisible:t=>e({welcomeVisible:t}),progress:0,contextMenu:{visible:!1,x:0,y:0,nodeType:null,nodeId:null},openDialog:(t,...n)=>{O(`dialog_open`,{dialog:t}),e({activeDialog:t,dialogProps:n[0]})},closeDialog:()=>e({activeDialog:null,dialogProps:void 0}),requestDestructiveConfirm:n=>{let r=t().destructiveConfirm;return r?.resolve(!1),new Promise(t=>{e({destructiveConfirm:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveDestructiveConfirm:n=>{let r=t().destructiveConfirm;r&&(e({destructiveConfirm:null}),r.resolve(n))},requestDryRun:n=>{let r=t().dryRun;return r?.resolve(!1),new Promise(t=>{e({dryRun:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveDryRun:n=>{let r=t().dryRun;r&&(e({dryRun:null}),r.resolve(n))},showMessage:n=>{let r=t().message;return r?.resolve(),new Promise(t=>{e({message:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveMessage:()=>{let n=t().message;n&&(e({message:null}),n.resolve())},requestPrompt:n=>{let r=t().prompt;return r?.resolve(null),new Promise(t=>{e({prompt:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolvePrompt:n=>{let r=t().prompt;r&&(e({prompt:null}),r.resolve(n))},setFooterMessage:t=>e({footerMessage:t}),setPendingGridEdits:(t,n)=>e(e=>{if(!!e.pendingGridEdits[t]===n)return{};let r={...e.pendingGridEdits};return n?r[t]=!0:delete r[t],{pendingGridEdits:r}}),bumpTransportVersion:()=>e(e=>({transportVersion:e.transportVersion+1})),setLoading:t=>e({isLoading:t}),setProgress:t=>e({progress:t}),showContextMenu:(t,n,r,i)=>e({contextMenu:{visible:!0,x:t,y:n,nodeType:r,nodeId:i}}),hideContextMenu:()=>e(e=>({contextMenu:{...e.contextMenu,visible:!1}}))}));function I(...e){return F(t=>t.activeDialog&&e.includes(t.activeDialog)?t.dialogProps:void 0)}export{x as a,O as c,f as d,u as f,r as h,E as i,D as l,s as m,F as n,w as o,l as p,P as r,T as s,I as t,p as 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=e(r(),1),h=`G-2FYJTCC2TH`,g=!1,_=!1,v=!1,y=`planche.internalTraffic`;function b(){if(typeof window>`u`)return!1;try{let e=new URLSearchParams(window.location.search).get(`internal`);return e===`1`?localStorage.setItem(y,`1`):e===`0`&&localStorage.removeItem(y),localStorage.getItem(y)===`1`}catch{return!1}}function x(){let e=typeof document<`u`&&document.querySelector(`meta[name="planche-agent"]`)!==null;return!!h&&typeof window<`u`&&!e}function S(){window.dataLayer=window.dataLayer??[],window.dataLayer.push(arguments)}function C(){if(g)return;g=!0,window.gtag=S,S(`js`,new Date),S(`config`,h,{anonymize_ip:!0,allow_google_signals:!1,allow_ad_personalization_signals:!1,app_version:`0.1.1`,...v?{traffic_type:`internal`}:{}});let e=document.createElement(`script`);e.async=!0,e.src=`https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(h)}`,document.head.appendChild(e)}function w(e){v=b(),_=e&&x(),x()&&(window[`ga-disable-${h}`]=!_,_&&C())}function T(e){if(_)try{S(`set`,`user_properties`,e)}catch{}}function E(e){return e===0?`0`:e===1?`1`:e<=3?`2-3`:e<=10?`4-10`:`10+`}function D(e){return e<=1?`1`:e<=5?`2-5`:e<=20?`6-20`:e<=50?`21-50`:e<=100?`51-100`:`100+`}function O(e,t={}){if(!_)return;let n={};for(let[e,r]of Object.entries(t))r!==void 0&&(n[e]=r);try{S(`event`,e,n)}catch{}}var k=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},A=(e=>e?k(e):k),j=e=>e;function M(e,t=j){let n=m.useSyncExternalStore(e.subscribe,m.useCallback(()=>t(e.getState()),[e,t]),m.useCallback(()=>t(e.getInitialState()),[e,t]));return m.useDebugValue(n),n}var N=e=>{let t=A(e),n=e=>M(t,e);return Object.assign(n,t),n},P=(e=>e?N(e):N),F=P()((e,t)=>({activeDialog:null,destructiveConfirm:null,dryRun:null,message:null,confirm:null,prompt:null,dialogProps:void 0,footerMessage:``,pendingGridEdits:{},transportVersion:0,isLoading:!1,welcomeVisible:!1,setWelcomeVisible:t=>e({welcomeVisible:t}),progress:0,contextMenu:{visible:!1,x:0,y:0,nodeType:null,nodeId:null},openDialog:(t,...n)=>{O(`dialog_open`,{dialog:t}),e({activeDialog:t,dialogProps:n[0]})},closeDialog:()=>e({activeDialog:null,dialogProps:void 0}),requestDestructiveConfirm:n=>{let r=t().destructiveConfirm;return r?.resolve(!1),new Promise(t=>{e({destructiveConfirm:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveDestructiveConfirm:n=>{let r=t().destructiveConfirm;r&&(e({destructiveConfirm:null}),r.resolve(n))},requestDryRun:n=>{let r=t().dryRun;return r?.resolve(!1),new Promise(t=>{e({dryRun:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveDryRun:n=>{let r=t().dryRun;r&&(e({dryRun:null}),r.resolve(n))},showMessage:n=>{let r=t().message;return r?.resolve(),new Promise(t=>{e({message:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveMessage:()=>{let n=t().message;n&&(e({message:null}),n.resolve())},requestConfirm:n=>{let r=t().confirm;return r?.resolve(!1),new Promise(t=>{e({confirm:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolveConfirm:n=>{let r=t().confirm;r&&(e({confirm:null}),r.resolve(n))},requestPrompt:n=>{let r=t().prompt;return r?.resolve(null),new Promise(t=>{e({prompt:{id:(r?.id??0)+1,request:n,resolve:t}})})},resolvePrompt:n=>{let r=t().prompt;r&&(e({prompt:null}),r.resolve(n))},setFooterMessage:t=>e({footerMessage:t}),setPendingGridEdits:(t,n)=>e(e=>{if(!!e.pendingGridEdits[t]===n)return{};let r={...e.pendingGridEdits};return n?r[t]=!0:delete r[t],{pendingGridEdits:r}}),bumpTransportVersion:()=>e(e=>({transportVersion:e.transportVersion+1})),setLoading:t=>e({isLoading:t}),setProgress:t=>e({progress:t}),showContextMenu:(t,n,r,i)=>e({contextMenu:{visible:!0,x:t,y:n,nodeType:r,nodeId:i}}),hideContextMenu:()=>e(e=>({contextMenu:{...e.contextMenu,visible:!1}}))}));function I(...e){return F(t=>t.activeDialog&&e.includes(t.activeDialog)?t.dialogProps:void 0)}export{x as a,O as c,f as d,u as f,r as h,E as i,D as l,s as m,F as n,w as o,l as p,P as r,T as s,I as t,p as u};
@@ -1 +1 @@
1
- import{n as e}from"./XzPc-eVf.js";import{l as t,m as n,t as r}from"./CKOS5Y-e.js";import{a as i,i as a,n as o,r as s,t as c}from"./DsllOXPq.js";import{n as l}from"./BBSxV90W.js";import{c as u,l as d}from"./Bxw3grU1.js";import{a as f,i as p,n as m,o as h,r as g,t as _}from"./DxuXBECK.js";import{t as v}from"./ChiscGY_.js";var y=t();function b(){let t=e(e=>e.activeDialog),b=e(e=>e.closeDialog),x=l(),S=x.update,{t:C}=n();return(0,y.jsx)(_,{open:t===`query-settings`,onOpenChange:e=>{e||b()},children:(0,y.jsxs)(m,{className:`sm:max-w-[560px]`,children:[(0,y.jsxs)(f,{children:[(0,y.jsx)(h,{children:C(`settings.query.title`)}),(0,y.jsx)(g,{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)(u,{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)(d,{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)(c,{value:x.executeScope,onValueChange:e=>S({executeScope:e}),children:[(0,y.jsx)(a,{children:(0,y.jsx)(i,{})}),(0,y.jsxs)(o,{children:[(0,y.jsx)(s,{value:`script`,children:`Whole script`}),(0,y.jsx)(s,{value:`statement`,children:`Statement at cursor`})]})]})]})]}),(0,y.jsx)(p,{children:(0,y.jsx)(r,{onClick:b,children:C(`settings.done`)})})]})})}export{b as QuerySettingsDialog};
1
+ import{n as e}from"./BkIkgVK5.js";import{l as t,m as n,t as r}from"./C0O3rJzW.js";import{a as i,i as a,n as o,r as s,t as c}from"./BctsL19F.js";import{n as l}from"./DP94Ond0.js";import{c as u,l as d}from"./C9ZwrwyI.js";import{a as f,i as p,n as m,o as h,r as g,t as _}from"./Cg4DfVr4.js";import{t as v}from"./DyCj9S7N.js";var y=t();function b(){let t=e(e=>e.activeDialog),b=e(e=>e.closeDialog),x=l(),S=x.update,{t:C}=n();return(0,y.jsx)(_,{open:t===`query-settings`,onOpenChange:e=>{e||b()},children:(0,y.jsxs)(m,{className:`sm:max-w-[560px]`,children:[(0,y.jsxs)(f,{children:[(0,y.jsx)(h,{children:C(`settings.query.title`)}),(0,y.jsx)(g,{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)(u,{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)(d,{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)(c,{value:x.executeScope,onValueChange:e=>S({executeScope:e}),children:[(0,y.jsx)(a,{children:(0,y.jsx)(i,{})}),(0,y.jsxs)(o,{children:[(0,y.jsx)(s,{value:`script`,children:`Whole script`}),(0,y.jsx)(s,{value:`statement`,children:`Statement at cursor`})]})]})]})]}),(0,y.jsx)(p,{children:(0,y.jsx)(r,{onClick:b,children:C(`settings.done`)})})]})})}export{b as QuerySettingsDialog};
@@ -1 +1 @@
1
- import{n as e}from"./XzPc-eVf.js";import{l as t,m as n,t as r}from"./CKOS5Y-e.js";import{t as i}from"./B3nhMsGp.js";import{c as a}from"./CtXRSNHU.js";import{a as o,i as s,n as c,o as l,t as u}from"./DxuXBECK.js";var d=t(),f=[`FLUSH HOSTS`,`FLUSH LOGS`,`FLUSH PRIVILEGES`,`FLUSH STATUS`,`FLUSH TABLES`,`FLUSH THREADS`,`FLUSH QUERY CACHE`,`FLUSH DES_KEY_FILE`,`FLUSH RELAY LOGS`,`FLUSH SLOW LOGS`,`FLUSH BINARY LOGS`,`FLUSH ENGINE LOGS`,`FLUSH ERROR LOGS`,`FLUSH GENERAL LOGS`,`FLUSH USER_RESOURCES`,`FLUSH OPTIMIZER_COSTS`];function p(){let e=i.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}function m(){let{t}=n(),{activeDialog:i,closeDialog:m,setFooterMessage:h}=e(),g=i===`flush`;function _(e){e||m()}async function v(e){let n=p();if(!n){h(t(`command.noActiveConnection`));return}try{await a(n,e),h(t(`command.flush.executed`,{command:e}))}catch(n){h(t(`command.flush.executeError`,{command:e,message:n instanceof Error?n.message:String(n)}))}}return(0,d.jsx)(u,{open:g,onOpenChange:_,children:(0,d.jsxs)(c,{className:`sm:max-w-[500px]`,children:[(0,d.jsx)(o,{children:(0,d.jsx)(l,{children:t(`command.flush.title`)})}),(0,d.jsx)(`div`,{className:`grid grid-cols-2 gap-2 py-2`,children:f.map(e=>(0,d.jsx)(r,{variant:`outline`,size:`sm`,className:`justify-start text-xs h-8`,onClick:()=>{v(e)},children:e},e))}),(0,d.jsx)(s,{children:(0,d.jsx)(r,{variant:`outline`,onClick:()=>_(!1),children:t(`command.close`)})})]})})}export{m as FlushDialog};
1
+ import{n as e}from"./BkIkgVK5.js";import{l as t,m as n,t as r}from"./C0O3rJzW.js";import{t as i}from"./DC8XCjJ3.js";import{c as a}from"./Dd9quIZg.js";import{a as o,i as s,n as c,o as l,t as u}from"./Cg4DfVr4.js";var d=t(),f=[`FLUSH HOSTS`,`FLUSH LOGS`,`FLUSH PRIVILEGES`,`FLUSH STATUS`,`FLUSH TABLES`,`FLUSH THREADS`,`FLUSH QUERY CACHE`,`FLUSH DES_KEY_FILE`,`FLUSH RELAY LOGS`,`FLUSH SLOW LOGS`,`FLUSH BINARY LOGS`,`FLUSH ENGINE LOGS`,`FLUSH ERROR LOGS`,`FLUSH GENERAL LOGS`,`FLUSH USER_RESOURCES`,`FLUSH OPTIMIZER_COSTS`];function p(){let e=i.getState();return e.activeConnections.find(t=>t.id===e.activeConnectionId)?.serverConnectionId??null}function m(){let{t}=n(),{activeDialog:i,closeDialog:m,setFooterMessage:h}=e(),g=i===`flush`;function _(e){e||m()}async function v(e){let n=p();if(!n){h(t(`command.noActiveConnection`));return}try{await a(n,e),h(t(`command.flush.executed`,{command:e}))}catch(n){h(t(`command.flush.executeError`,{command:e,message:n instanceof Error?n.message:String(n)}))}}return(0,d.jsx)(u,{open:g,onOpenChange:_,children:(0,d.jsxs)(c,{className:`sm:max-w-[500px]`,children:[(0,d.jsx)(o,{children:(0,d.jsx)(l,{children:t(`command.flush.title`)})}),(0,d.jsx)(`div`,{className:`grid grid-cols-2 gap-2 py-2`,children:f.map(e=>(0,d.jsx)(r,{variant:`outline`,size:`sm`,className:`justify-start text-xs h-8`,onClick:()=>{v(e)},children:e},e))}),(0,d.jsx)(s,{children:(0,d.jsx)(r,{variant:`outline`,onClick:()=>_(!1),children:t(`command.close`)})})]})})}export{m as FlushDialog};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./hePW80VL.js";import{h as t,n}from"./XzPc-eVf.js";import{l as r,m as i,t as a}from"./CKOS5Y-e.js";import{a as o,i as s,n as c,r as l,t as u}from"./DsllOXPq.js";import{t as d}from"./B3nhMsGp.js";import{n as f}from"./BNkgLUl5.js";import{S as p,a as m}from"./CtXRSNHU.js";import{n as h}from"./Cr6Fx4T5.js";import{o as g,r as _}from"./D8QuNkWm.js";import{c as v,lt as y}from"./Bxw3grU1.js";import{a as b,i as x,n as S,o as C,t as w}from"./DxuXBECK.js";import{t as T}from"./CnYBZPf9.js";var E=e(t(),1),D=r();function O(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function k(){let{t:e}=i(),{activeDialog:t,closeDialog:r}=n(),{activeConnectionId:k,activeConnections:A}=d(),{trees:j}=p(),M=f(),N=t===`export-html`,P=(0,E.useMemo)(()=>k?_(j[k]??[]):[],[k,j]),F=(0,E.useMemo)(()=>{if(!k)return``;let e=M.activeTabId[k];return(M.tabs[k]??[]).find(t=>t.id===e)?.database||``},[k,M.activeTabId,M.tabs]),[I,L]=(0,E.useState)(``),R=(0,E.useMemo)(()=>!k||!I?[]:g(j[k]??[],I),[k,I,j]),[z,B]=(0,E.useState)([]),[V,H]=(0,E.useState)(!0),[U,W]=(0,E.useState)(!0),[G,K]=(0,E.useState)(!0),[q,J]=(0,E.useState)(!1);(0,E.useEffect)(()=>{N&&F&&L(F)},[N,F]);function Y(e){e||(r(),L(``),B([]),H(!0),W(!0),K(!0))}function X(e){B(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}function Z(){B(R.length===z.length?[]:[...R])}async function Q(){if(z.length===0||!k)return;let t=A.find(e=>e.id===k);if(!t?.serverConnectionId)return;J(!0);let{introspect:n}=h(k),i=m(t.serverConnectionId),a=(e,t,n)=>{let r=`<h3>${O(e)}</h3>\n<table border="1" cellpadding="4" cellspacing="0">\n`;r+=`<tr>${t.map(e=>`<th>${O(e)}</th>`).join(``)}</tr>\n`;for(let e of n)r+=`<tr>${e.map(e=>`<td>${O(e==null?`NULL`:String(e))}</td>`).join(``)}</tr>\n`;return r+`</table>
1
+ import{r as e}from"./hePW80VL.js";import{h as t,n}from"./BkIkgVK5.js";import{l as r,m as i,t as a}from"./C0O3rJzW.js";import{a as o,i as s,n as c,r as l,t as u}from"./BctsL19F.js";import{t as d}from"./DC8XCjJ3.js";import{n as f}from"./dMlgA_r1.js";import{S as p,a as m}from"./Dd9quIZg.js";import{n as h}from"./Dht5Mpyb.js";import{o as g,r as _}from"./DBHRzz66.js";import{c as v,lt as y}from"./C9ZwrwyI.js";import{a as b,i as x,n as S,o as C,t as w}from"./Cg4DfVr4.js";import{t as T}from"./CnYBZPf9.js";var E=e(t(),1),D=r();function O(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function k(){let{t:e}=i(),{activeDialog:t,closeDialog:r}=n(),{activeConnectionId:k,activeConnections:A}=d(),{trees:j}=p(),M=f(),N=t===`export-html`,P=(0,E.useMemo)(()=>k?_(j[k]??[]):[],[k,j]),F=(0,E.useMemo)(()=>{if(!k)return``;let e=M.activeTabId[k];return(M.tabs[k]??[]).find(t=>t.id===e)?.database||``},[k,M.activeTabId,M.tabs]),[I,L]=(0,E.useState)(``),R=(0,E.useMemo)(()=>!k||!I?[]:g(j[k]??[],I),[k,I,j]),[z,B]=(0,E.useState)([]),[V,H]=(0,E.useState)(!0),[U,W]=(0,E.useState)(!0),[G,K]=(0,E.useState)(!0),[q,J]=(0,E.useState)(!1);(0,E.useEffect)(()=>{N&&F&&L(F)},[N,F]);function Y(e){e||(r(),L(``),B([]),H(!0),W(!0),K(!0))}function X(e){B(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])}function Z(){B(R.length===z.length?[]:[...R])}async function Q(){if(z.length===0||!k)return;let t=A.find(e=>e.id===k);if(!t?.serverConnectionId)return;J(!0);let{introspect:n}=h(k),i=m(t.serverConnectionId),a=(e,t,n)=>{let r=`<h3>${O(e)}</h3>\n<table border="1" cellpadding="4" cellspacing="0">\n`;r+=`<tr>${t.map(e=>`<th>${O(e)}</th>`).join(``)}</tr>\n`;for(let e of n)r+=`<tr>${e.map(e=>`<td>${O(e==null?`NULL`:String(e))}</td>`).join(``)}</tr>\n`;return r+`</table>
2
2
  `};try{let t=[];for(let r of z){let o=`<h2>${O(r)}</h2>\n`;if(V){let t=await n.listColumns(i,I,r);t.length>0&&(o+=a(e(`database.html.sectionColumns`),[`Field`,`Type`,`Null`,`Key`,`Default`,`Extra`,`Comment`],t.map(e=>[e.name,e.type,e.nullable?`YES`:`NO`,e.key,e.defaultValue,e.extra,e.comment])))}if(U){let t=await n.listIndexes(i,I,r);t.length>0&&(o+=a(e(`database.html.sectionIndexes`),[`Key_name`,`Type`,`Columns`],t.map(e=>[e.name,e.type,e.columns.join(`, `)])))}if(G){let t=await n.getTableInfo(i,I,r);t&&(o+=a(e(`database.html.sectionProperties`),[`Name`,`Engine`,`Collation`,`Rows`,`Data_length`,`Create_time`,`Update_time`,`Comment`],[[t.name,t.engine,t.collation,t.rows,t.dataLength,t.createTime,t.updateTime,t.comment]]))}t.push(o)}let r=`<!DOCTYPE html>
3
3
  <html lang="en">
4
4
  <head>