From dca19d0ab8a2a0f2be6024494dc0195567f80914 Mon Sep 17 00:00:00 2001 From: G0STG0D Date: Thu, 27 Nov 2025 22:13:39 +0100 Subject: [PATCH 1/6] Add editor_indentation column to settings table --- .../migrations/20251127214940_add-editor-tab-indentation.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 src-tauri/yaak-models/migrations/20251127214940_add-editor-tab-indentation.sql diff --git a/src-tauri/yaak-models/migrations/20251127214940_add-editor-tab-indentation.sql b/src-tauri/yaak-models/migrations/20251127214940_add-editor-tab-indentation.sql new file mode 100644 index 000000000..4fe8d4780 --- /dev/null +++ b/src-tauri/yaak-models/migrations/20251127214940_add-editor-tab-indentation.sql @@ -0,0 +1 @@ +ALTER TABLE settings ADD COLUMN editor_indentation INTEGER DEFAULT 2 NOT NULL; \ No newline at end of file From 1bb86f39692ccc21729a1198ef6037eb0d212bbc Mon Sep 17 00:00:00 2001 From: G0STG0D Date: Thu, 27 Nov 2025 22:36:43 +0100 Subject: [PATCH 2/6] Implemented editor indentation to the Editor --- package-lock.json | 87 ++++++------------ src-tauri/yaak-models/bindings/gen_models.ts | 2 +- src-tauri/yaak-models/src/models.rs | 4 + src-tauri/yaak-models/src/queries/settings.rs | 1 + .../yaak-templates/pkg/yaak_templates_bg.wasm | Bin 54673 -> 54369 bytes .../components/Settings/SettingsInterface.tsx | 16 ++++ src-web/components/core/Editor/Editor.tsx | 17 +++- 7 files changed, 65 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0ae99a5f..50cc9b40c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -142,6 +142,7 @@ "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -822,6 +823,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -834,6 +836,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz", "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -930,6 +933,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.2.tgz", "integrity": "sha512-p44TsNArL4IVXDTbapUmEkAlvWs2CFQbcfc0ymDsis1kH2wh0gcY96AS29c/vp2d0y2Tquk1EDSaawpzilUiAw==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -944,6 +948,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz", "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.35.0", @@ -955,6 +960,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -966,6 +972,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", "license": "MIT", + "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -975,6 +982,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.0.tgz", "integrity": "sha512-yvSchUwHOdupXkd7xJ0ob36jdsSR/I+/C+VbY0ffBiL5NiSTEBDfB1ZGWbbIlDd5xgdUkody+lukAdOxYrOBeg==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -1595,7 +1603,8 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@lezer/css": { "version": "1.3.0", @@ -1627,6 +1636,7 @@ "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", "license": "MIT", + "peer": true, "dependencies": { "@lezer/common": "^1.0.0" } @@ -1969,6 +1979,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2655,6 +2666,7 @@ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -3004,6 +3016,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.133.13.tgz", "integrity": "sha512-mVAj70mPOH/a60Hjlha3gHEWLFuE4kHeKau/AL5Xp6e5GtNk1JTRwN4sJ9QlSyLcClOUUtGfED1FoLj0D2W0Eg==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/history": "1.133.3", "@tanstack/react-store": "^0.7.0", @@ -3744,6 +3757,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -3753,6 +3767,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.0.0" } @@ -4849,6 +4864,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", @@ -6913,7 +6929,6 @@ "dev": true, "license": "Apache-2.0", "optional": true, - "peer": true, "engines": { "node": ">=8" } @@ -10102,18 +10117,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, "node_modules/jotai": { "version": "2.12.5", "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.12.5.tgz", @@ -10176,6 +10179,7 @@ "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", "license": "MIT", + "peer": true, "engines": { "node": ">= 10.16.0" } @@ -10366,37 +10370,6 @@ "@lezer/lr": "^1.0.0" } }, - "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" - } - }, "node_modules/lightningcss-darwin-arm64": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", @@ -10410,7 +10383,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10432,7 +10404,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10454,7 +10425,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10476,7 +10446,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10498,7 +10467,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10520,7 +10488,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10542,7 +10509,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10564,7 +10530,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10586,7 +10551,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -10608,7 +10572,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 12.0.0" }, @@ -13165,6 +13128,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -13734,6 +13698,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -13917,6 +13882,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -15035,6 +15001,7 @@ "integrity": "sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -15206,7 +15173,6 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -15254,6 +15220,7 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" } @@ -16829,6 +16796,7 @@ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -17004,7 +16972,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsx": { "version": "4.20.3", @@ -17123,6 +17092,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17586,6 +17556,7 @@ "integrity": "sha512-cJBdq0/u+8rgstg9t7UkBilf8ipLmeXJO30NxD5HAHOivnj10ocV8YtR/XBvd2wQpN3TmcaxNKaHX3tN7o5F5A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", @@ -17762,6 +17733,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -18980,6 +18952,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } diff --git a/src-tauri/yaak-models/bindings/gen_models.ts b/src-tauri/yaak-models/bindings/gen_models.ts index 870484c1f..2fe41f796 100644 --- a/src-tauri/yaak-models/bindings/gen_models.ts +++ b/src-tauri/yaak-models/bindings/gen_models.ts @@ -62,7 +62,7 @@ export type ProxySetting = { "type": "enabled", http: string, https: string, aut export type ProxySettingAuth = { user: string, password: string, }; -export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, }; +export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorIndentation: number, editorSoftWrap: boolean, hideWindowControls: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, }; export type SyncState = { model: "sync_state", id: string, workspaceId: string, createdAt: string, updatedAt: string, flushedAt: string, modelId: string, checksum: string, relPath: string, syncDir: string, }; diff --git a/src-tauri/yaak-models/src/models.rs b/src-tauri/yaak-models/src/models.rs index 49600ac21..30fdcd68e 100644 --- a/src-tauri/yaak-models/src/models.rs +++ b/src-tauri/yaak-models/src/models.rs @@ -110,6 +110,7 @@ pub struct Settings { pub editor_font: Option, pub editor_font_size: i32, pub editor_keymap: EditorKeymap, + pub editor_indentation: i32, pub editor_soft_wrap: bool, pub hide_window_controls: bool, pub interface_font: Option, @@ -162,6 +163,7 @@ impl UpsertModelInfo for Settings { (Appearance, self.appearance.as_str().into()), (EditorFontSize, self.editor_font_size.into()), (EditorKeymap, self.editor_keymap.to_string().into()), + (EditorIndentation, self.editor_indentation.into()), (EditorSoftWrap, self.editor_soft_wrap.into()), (EditorFont, self.editor_font.into()), (InterfaceFont, self.interface_font.into()), @@ -187,6 +189,7 @@ impl UpsertModelInfo for Settings { SettingsIden::Appearance, SettingsIden::EditorFontSize, SettingsIden::EditorKeymap, + SettingsIden::EditorIndentation, SettingsIden::EditorSoftWrap, SettingsIden::EditorFont, SettingsIden::InterfaceFontSize, @@ -221,6 +224,7 @@ impl UpsertModelInfo for Settings { editor_font_size: row.get("editor_font_size")?, editor_font: row.get("editor_font")?, editor_keymap: EditorKeymap::from_str(editor_keymap.as_str()).unwrap(), + editor_indentation: row.get("editor_indentation")?, editor_soft_wrap: row.get("editor_soft_wrap")?, interface_font_size: row.get("interface_font_size")?, interface_scale: row.get("interface_scale")?, diff --git a/src-tauri/yaak-models/src/queries/settings.rs b/src-tauri/yaak-models/src/queries/settings.rs index 9ba920aa5..df00fe1c3 100644 --- a/src-tauri/yaak-models/src/queries/settings.rs +++ b/src-tauri/yaak-models/src/queries/settings.rs @@ -21,6 +21,7 @@ impl<'a> DbContext<'a> { editor_font_size: 12, editor_font: None, editor_keymap: EditorKeymap::Default, + editor_indentation: 2, editor_soft_wrap: true, interface_font_size: 14, interface_scale: 1.0, diff --git a/src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm b/src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm index dceb16999aeedecf064a42a94887d72b1c76f1b0..bae836d8a827849283750d5e0a035910b46c2fc5 100644 GIT binary patch delta 6354 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 ({ label: `${n}`, value: `${n}` })); + export function SettingsInterface() { const workspace = useAtomValue(activeWorkspaceAtom); const settings = useAtomValue(settingsAtom); @@ -140,6 +144,18 @@ export function SettingsInterface() { options={keymaps} onChange={(v) => patchModel(settings, { editorKeymap: v })} /> +