diff --git a/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/badgeservice.ts b/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/dockservice.ts similarity index 58% rename from frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/badgeservice.ts rename to frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/dockservice.ts index 43937d5..732e56f 100644 --- a/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/badgeservice.ts +++ b/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/dockservice.ts @@ -2,7 +2,7 @@ // This file is automatically generated. DO NOT EDIT /** - * Service represents the notifications service + * Service represents the dock service * @module */ @@ -18,11 +18,19 @@ import * as application$0 from "../../application/models.js"; // @ts-ignore: Unused imports import * as $models from "./models.js"; +/** + * HideAppIcon hides the app icon in the dock/taskbar. + */ +export function HideAppIcon(): Promise & { cancel(): void } { + let $resultPromise = $Call.ByID(3413658144) as any; + return $resultPromise; +} + /** * RemoveBadge removes the badge label from the application icon. */ export function RemoveBadge(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2374916939) as any; + let $resultPromise = $Call.ByID(2752757297) as any; return $resultPromise; } @@ -30,7 +38,7 @@ export function RemoveBadge(): Promise & { cancel(): void } { * ServiceName returns the name of the service. */ export function ServiceName(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(2428202016) as any; + let $resultPromise = $Call.ByID(2949906614) as any; return $resultPromise; } @@ -38,7 +46,7 @@ export function ServiceName(): Promise & { cancel(): void } { * ServiceShutdown is called when the service is unloaded. */ export function ServiceShutdown(): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3893755233) as any; + let $resultPromise = $Call.ByID(307064411) as any; return $resultPromise; } @@ -46,7 +54,7 @@ export function ServiceShutdown(): Promise & { cancel(): void } { * ServiceStartup is called when the service is loaded. */ export function ServiceStartup(options: application$0.ServiceOptions): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(4078800764, options) as any; + let $resultPromise = $Call.ByID(1350118426, options) as any; return $resultPromise; } @@ -54,11 +62,22 @@ export function ServiceStartup(options: application$0.ServiceOptions): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(784276339, label) as any; + let $resultPromise = $Call.ByID(1717705661, label) as any; return $resultPromise; } -export function SetCustomBadge(label: string, options: $models.Options): Promise & { cancel(): void } { - let $resultPromise = $Call.ByID(3058653106, label, options) as any; +/** + * SetCustomBadge sets the badge label on the application icon with custom options. + */ +export function SetCustomBadge(label: string, options: $models.BadgeOptions): Promise & { cancel(): void } { + let $resultPromise = $Call.ByID(2730169760, label, options) as any; + return $resultPromise; +} + +/** + * ShowAppIcon shows the app icon in the dock/taskbar. + */ +export function ShowAppIcon(): Promise & { cancel(): void } { + let $resultPromise = $Call.ByID(3409697379) as any; return $resultPromise; } diff --git a/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/index.ts b/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/index.ts similarity index 69% rename from frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/index.ts rename to frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/index.ts index c7c86fb..3c4c128 100644 --- a/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/index.ts +++ b/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/index.ts @@ -1,9 +1,9 @@ // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT -import * as BadgeService from "./badgeservice.js"; +import * as DockService from "./dockservice.js"; export { - BadgeService + DockService }; export * from "./models.js"; diff --git a/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/models.ts b/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/models.ts similarity index 80% rename from frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/models.ts rename to frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/models.ts index 49f4123..d44e5a3 100644 --- a/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/badge/models.ts +++ b/frontend/bindings/github.com/wailsapp/wails/v3/pkg/services/dock/models.ts @@ -9,15 +9,18 @@ import {Create as $Create} from "@wailsio/runtime"; // @ts-ignore: Unused imports import * as color$0 from "../../../../../../../image/color/models.js"; -export class Options { +/** + * BadgeOptions represents options for customizing badge appearance + */ +export class BadgeOptions { "TextColour": color$0.RGBA; "BackgroundColour": color$0.RGBA; "FontName": string; "FontSize": number; "SmallFontSize": number; - /** Creates a new Options instance. */ - constructor($$source: Partial = {}) { + /** Creates a new BadgeOptions instance. */ + constructor($$source: Partial = {}) { if (!("TextColour" in $$source)) { this["TextColour"] = (new color$0.RGBA()); } @@ -38,9 +41,9 @@ export class Options { } /** - * Creates a new Options instance from a string or object. + * Creates a new BadgeOptions instance from a string or object. */ - static createFrom($$source: any = {}): Options { + static createFrom($$source: any = {}): BadgeOptions { const $$createField0_0 = $$createType0; const $$createField1_0 = $$createType0; let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source; @@ -50,7 +53,7 @@ export class Options { if ("BackgroundColour" in $$parsedSource) { $$parsedSource["BackgroundColour"] = $$createField1_0($$parsedSource["BackgroundColour"]); } - return new Options($$parsedSource as Partial); + return new BadgeOptions($$parsedSource as Partial); } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a1d1b72..a08383e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,19 +9,19 @@ "version": "0.0.0", "dependencies": { "@codemirror/autocomplete": "^6.19.0", - "@codemirror/commands": "^6.8.1", + "@codemirror/commands": "^6.9.0", "@codemirror/lang-angular": "^0.1.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.10", + "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.4", "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-less": "^6.0.2", "@codemirror/lang-lezer": "^6.0.2", "@codemirror/lang-liquid": "^6.3.0", - "@codemirror/lang-markdown": "^6.3.4", + "@codemirror/lang-markdown": "^6.4.0", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -33,10 +33,10 @@ "@codemirror/language": "^6.11.3", "@codemirror/language-data": "^6.5.1", "@codemirror/legacy-modes": "^6.5.2", - "@codemirror/lint": "^6.8.5", + "@codemirror/lint": "^6.9.0", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.38.4", + "@codemirror/view": "^6.38.5", "@cospaia/prettier-plugin-clojure": "^0.0.2", "@lezer/highlight": "^1.2.1", "@lezer/lr": "^1.4.2", @@ -65,23 +65,23 @@ "vue-router": "^4.5.1" }, "devDependencies": { - "@eslint/js": "^9.36.0", + "@eslint/js": "^9.37.0", "@lezer/generator": "^1.8.0", - "@types/node": "^24.5.2", + "@types/node": "^24.7.1", "@types/remarkable": "^2.0.8", "@vitejs/plugin-vue": "^6.0.1", "@wailsio/runtime": "latest", "cross-env": "^10.1.0", - "eslint": "^9.36.0", + "eslint": "^9.37.0", "eslint-plugin-vue": "^10.5.0", "globals": "^16.4.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.45.0", + "typescript-eslint": "^8.46.0", "unplugin-vue-components": "^29.1.0", - "vite": "^7.1.7", + "vite": "^7.1.9", "vite-plugin-node-polyfills": "^0.24.0", "vue-eslint-parser": "^10.2.0", - "vue-tsc": "^3.1.0" + "vue-tsc": "^3.1.1" } }, "node_modules/@babel/helper-string-parser": { @@ -182,9 +182,9 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.8.1", - "resolved": "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.8.1.tgz", - "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", + "version": "6.9.0", + "resolved": "https://registry.npmmirror.com/@codemirror/commands/-/commands-6.9.0.tgz", + "integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -244,9 +244,9 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.4.10", - "resolved": "https://registry.npmmirror.com/@codemirror/lang-html/-/lang-html-6.4.10.tgz", - "integrity": "sha512-h/SceTVsN5r+WE+TVP2g3KDvNoSzbSrtZXCKo4vkKdbfT5t4otuVgngGdFukOO/rwRD2++pCxoh6xD4TEVMkQA==", + "version": "6.4.11", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-html/-/lang-html-6.4.11.tgz", + "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -257,7 +257,7 @@ "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", - "@lezer/html": "^1.3.0" + "@lezer/html": "^1.3.12" } }, "node_modules/@codemirror/lang-java": { @@ -337,9 +337,9 @@ } }, "node_modules/@codemirror/lang-markdown": { - "version": "6.3.4", - "resolved": "https://registry.npmmirror.com/@codemirror/lang-markdown/-/lang-markdown-6.3.4.tgz", - "integrity": "sha512-fBm0BO03azXnTAsxhONDYHi/qWSI+uSEIpzKM7h/bkIc9fHnFp9y7KTMXKON0teNT97pFhc1a9DQTtWBYEZ7ug==", + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-markdown/-/lang-markdown-6.4.0.tgz", + "integrity": "sha512-ZeArR54seh4laFbUTVy0ZmQgO+C/cxxlW4jEoQMhL3HALScBpZBeZcLzrQmJsTEx4is9GzOe0bFAke2B1KZqeA==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.7.1", @@ -523,9 +523,9 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.8.5", - "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.8.5.tgz", - "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", + "version": "6.9.0", + "resolved": "https://registry.npmmirror.com/@codemirror/lint/-/lint-6.9.0.tgz", + "integrity": "sha512-wZxW+9XDytH3SKvS8cQzMyQCaaazH8XL1EMHleHe00wVzsv7NBQKVW2yzEHrRhmM7ZOhVdItPbvlRBvMp9ej7A==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -554,9 +554,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.38.4", - "resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-6.38.4.tgz", - "integrity": "sha512-hduz0suCcUSC/kM8Fq3A9iLwInJDl8fD1xLpTIk+5xkNm8z/FT7UsIa9sOXrkpChh+XXc18RzswE8QqELsVl+g==", + "version": "6.38.5", + "resolved": "https://registry.npmmirror.com/@codemirror/view/-/view-6.38.5.tgz", + "integrity": "sha512-SFVsNAgsAoou+BjRewMqN+m9jaztB9wCWN9RSRgePqUbq8UVlvJfku5zB2KVhLPgH/h0RLk38tvd4tGeAhygnw==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", @@ -1061,19 +1061,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.16.0", + "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1121,9 +1124,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "version": "9.37.0", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "dev": true, "license": "MIT", "engines": { @@ -1144,13 +1147,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -1379,9 +1382,9 @@ } }, "node_modules/@lezer/html": { - "version": "1.3.10", - "resolved": "https://registry.npmmirror.com/@lezer/html/-/html-1.3.10.tgz", - "integrity": "sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==", + "version": "1.3.12", + "resolved": "https://registry.npmmirror.com/@lezer/html/-/html-1.3.12.tgz", + "integrity": "sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -2324,13 +2327,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.5.2", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", + "version": "24.7.1", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.7.1.tgz", + "integrity": "sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.12.0" + "undici-types": "~7.14.0" } }, "node_modules/@types/remarkable": { @@ -2341,17 +2344,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", - "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", + "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/type-utils": "8.45.0", - "@typescript-eslint/utils": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/type-utils": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -2365,7 +2368,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.45.0", + "@typescript-eslint/parser": "^8.46.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -2381,16 +2384,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.45.0.tgz", - "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.46.0.tgz", + "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "engines": { @@ -2406,14 +2409,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", - "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", + "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.45.0", - "@typescript-eslint/types": "^8.45.0", + "@typescript-eslint/tsconfig-utils": "^8.46.0", + "@typescript-eslint/types": "^8.46.0", "debug": "^4.3.4" }, "engines": { @@ -2428,14 +2431,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", - "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", + "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0" + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2446,9 +2449,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", - "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", + "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", "dev": true, "license": "MIT", "engines": { @@ -2463,15 +2466,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", - "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", + "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -2488,9 +2491,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.45.0.tgz", - "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.46.0.tgz", + "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", "dev": true, "license": "MIT", "engines": { @@ -2502,16 +2505,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", - "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", + "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.45.0", - "@typescript-eslint/tsconfig-utils": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/project-service": "8.46.0", + "@typescript-eslint/tsconfig-utils": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2557,16 +2560,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.45.0.tgz", - "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.46.0.tgz", + "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0" + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2581,13 +2584,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", - "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", + "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/types": "8.46.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -2728,9 +2731,9 @@ } }, "node_modules/@vue/language-core": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-3.1.0.tgz", - "integrity": "sha512-a7ns+X9vTbdmk7QLrvnZs8s4E1wwtxG/sELzr6F2j4pU+r/OoAv6jJGSz+5tVTU6e4+3rjepGhSP8jDmBBcb3w==", + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-3.1.1.tgz", + "integrity": "sha512-qjMY3Q+hUCjdH+jLrQapqgpsJ0rd/2mAY02lZoHG3VFJZZZKLjAlV+Oo9QmWIT4jh8+Rx8RUGUi++d7T9Wb6Mw==", "dev": true, "license": "MIT", "dependencies": { @@ -3994,20 +3997,20 @@ } }, "node_modules/eslint": { - "version": "9.36.0", - "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.36.0.tgz", - "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "version": "9.37.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.36.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -6649,16 +6652,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.45.0.tgz", - "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", + "version": "8.46.0", + "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.46.0.tgz", + "integrity": "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.45.0", - "@typescript-eslint/parser": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/utils": "8.45.0" + "@typescript-eslint/eslint-plugin": "8.46.0", + "@typescript-eslint/parser": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6705,9 +6708,9 @@ } }, "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "version": "7.14.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", "dev": true, "license": "MIT" }, @@ -7026,9 +7029,9 @@ "license": "MIT" }, "node_modules/vite": { - "version": "7.1.7", - "resolved": "https://registry.npmmirror.com/vite/-/vite-7.1.7.tgz", - "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", + "version": "7.1.9", + "resolved": "https://registry.npmmirror.com/vite/-/vite-7.1.9.tgz", + "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "dev": true, "license": "MIT", "dependencies": { @@ -7268,14 +7271,14 @@ "license": "MIT" }, "node_modules/vue-tsc": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-3.1.0.tgz", - "integrity": "sha512-fbMynMG7kXSnqZTRBSCh9ROYaVpXfCZbEO0gY3lqOjLbp361uuS88n6BDajiUriDIF+SGLWoinjvf6stS2J3Gg==", + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-3.1.1.tgz", + "integrity": "sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A==", "dev": true, "license": "MIT", "dependencies": { "@volar/typescript": "2.4.23", - "@vue/language-core": "3.1.0" + "@vue/language-core": "3.1.1" }, "bin": { "vue-tsc": "bin/vue-tsc.js" diff --git a/frontend/package.json b/frontend/package.json index d704ddd..d230c12 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,19 +14,19 @@ }, "dependencies": { "@codemirror/autocomplete": "^6.19.0", - "@codemirror/commands": "^6.8.1", + "@codemirror/commands": "^6.9.0", "@codemirror/lang-angular": "^0.1.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", "@codemirror/lang-go": "^6.0.1", - "@codemirror/lang-html": "^6.4.10", + "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.4", "@codemirror/lang-json": "^6.0.2", "@codemirror/lang-less": "^6.0.2", "@codemirror/lang-lezer": "^6.0.2", "@codemirror/lang-liquid": "^6.3.0", - "@codemirror/lang-markdown": "^6.3.4", + "@codemirror/lang-markdown": "^6.4.0", "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", "@codemirror/lang-rust": "^6.0.2", @@ -38,10 +38,10 @@ "@codemirror/language": "^6.11.3", "@codemirror/language-data": "^6.5.1", "@codemirror/legacy-modes": "^6.5.2", - "@codemirror/lint": "^6.8.5", + "@codemirror/lint": "^6.9.0", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.38.4", + "@codemirror/view": "^6.38.5", "@cospaia/prettier-plugin-clojure": "^0.0.2", "@lezer/highlight": "^1.2.1", "@lezer/lr": "^1.4.2", @@ -70,22 +70,22 @@ "vue-router": "^4.5.1" }, "devDependencies": { - "@eslint/js": "^9.36.0", + "@eslint/js": "^9.37.0", "@lezer/generator": "^1.8.0", - "@types/node": "^24.5.2", + "@types/node": "^24.7.1", "@types/remarkable": "^2.0.8", "@vitejs/plugin-vue": "^6.0.1", "@wailsio/runtime": "latest", "cross-env": "^10.1.0", - "eslint": "^9.36.0", + "eslint": "^9.37.0", "eslint-plugin-vue": "^10.5.0", "globals": "^16.4.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.45.0", + "typescript-eslint": "^8.46.0", "unplugin-vue-components": "^29.1.0", - "vite": "^7.1.7", + "vite": "^7.1.9", "vite-plugin-node-polyfills": "^0.24.0", "vue-eslint-parser": "^10.2.0", - "vue-tsc": "^3.1.0" + "vue-tsc": "^3.1.1" } } diff --git a/frontend/src/views/editor/theme/dark/aura.ts b/frontend/src/views/editor/theme/dark/aura.ts new file mode 100644 index 0000000..b119b77 --- /dev/null +++ b/frontend/src/views/editor/theme/dark/aura.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'aura', + dark: true, + background: '#21202e', + foreground: '#edecee', + selection: '#3d375e7f', + cursor: '#a277ff', + dropdownBackground: '#21202e', + dropdownBorder: '#3b334b', + activeLine: '#4d4b6622', + lineNumber: '#a394f033', + activeLineNumber: '#cdccce', + matchingBracket: '#a394f033', + keyword: '#a277ff', + storage: '#a277ff', + variable: '#edecee', + parameter: '#edecee', + function: '#ffca85', + string: '#61ffca', + constant: '#61ffca', + type: '#82e2ff', + class: '#82e2ff', + number: '#61ffca', + comment: '#6d6d6d', + heading: '#a277ff', + invalid: '#ff6767', + regexp: '#61ffca', +} + +export const auraTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const auraHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const aura: Extension = [ + auraTheme, + syntaxHighlighting(auraHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/dark/dracula.ts b/frontend/src/views/editor/theme/dark/dracula.ts new file mode 100644 index 0000000..ee89c4c --- /dev/null +++ b/frontend/src/views/editor/theme/dark/dracula.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'dracula', + dark: true, + background: '#282A36', + foreground: '#F8F8F2', + selection: '#44475A', + cursor: '#F8F8F2', + dropdownBackground: '#282A36', + dropdownBorder: '#191A21', + activeLine: '#53576c22', + lineNumber: '#6272A4', + activeLineNumber: '#F8F8F2', + matchingBracket: '#44475A', + keyword: '#FF79C6', + storage: '#FF79C6', + variable: '#F8F8F2', + parameter: '#F8F8F2', + function: '#50FA7B', + string: '#F1FA8C', + constant: '#BD93F9', + type: '#8BE9FD', + class: '#8BE9FD', + number: '#BD93F9', + comment: '#6272A4', + heading: '#BD93F9', + invalid: '#FF5555', + regexp: '#F1FA8C', +} + +export const draculaTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const draculaHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const dracula: Extension = [ + draculaTheme, + syntaxHighlighting(draculaHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/dark/github-dark.ts b/frontend/src/views/editor/theme/dark/github-dark.ts new file mode 100644 index 0000000..e16d9ad --- /dev/null +++ b/frontend/src/views/editor/theme/dark/github-dark.ts @@ -0,0 +1,128 @@ +import {EditorView, lineNumbers} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'githubDark', + dark: true, + background: '#24292e', + foreground: '#d1d5da', + selection: '#3392FF44', + cursor: '#c8e1ff', + dropdownBackground: '#24292e', + dropdownBorder: '#1b1f23', + activeLine: '#4d566022', + lineNumber: '#444d56', + activeLineNumber: '#e1e4e8', + matchingBracket: '#17E5E650', + keyword: '#f97583', + storage: '#f97583', + variable: '#ffab70', + parameter: '#e1e4e8', + function: '#79b8ff', + string: '#9ecbff', + constant: '#79b8ff', + type: '#79b8ff', + class: '#b392f0', + number: '#79b8ff', + comment: '#6a737d', + heading: '#79b8ff', + invalid: '#f97583', + regexp: '#9ecbff', +} + +export const githubDarkTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const githubDarkHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const githubDark: Extension = [ + githubDarkTheme, + syntaxHighlighting(githubDarkHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/dark/material-dark.ts b/frontend/src/views/editor/theme/dark/material-dark.ts new file mode 100644 index 0000000..dd85f16 --- /dev/null +++ b/frontend/src/views/editor/theme/dark/material-dark.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'materialDark', + dark: true, + background: '#263238', + foreground: '#EEFFFF', + selection: '#80CBC420', + cursor: '#FFCC00', + dropdownBackground: '#263238', + dropdownBorder: '#FFFFFF10', + activeLine: '#4c616c22', + lineNumber: '#37474F', + activeLineNumber: '#607a86', + matchingBracket: '#263238', + keyword: '#C792EA', + storage: '#C792EA', + variable: '#EEFFFF', + parameter: '#EEFFFF', + function: '#82AAFF', + string: '#C3E88D', + constant: '#F78C6C', + type: '#B2CCD6', + class: '#FFCB6B', + number: '#F78C6C', + comment: '#546E7A', + heading: '#C3E88D', + invalid: '#FF5370', + regexp: '#89DDFF', +} + +export const materialDarkTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const materialDarkHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const materialDark: Extension = [ + materialDarkTheme, + syntaxHighlighting(materialDarkHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/dark/one-dark.ts b/frontend/src/views/editor/theme/dark/one-dark.ts new file mode 100644 index 0000000..4b9b764 --- /dev/null +++ b/frontend/src/views/editor/theme/dark/one-dark.ts @@ -0,0 +1,154 @@ +import {EditorView} from "@codemirror/view" +import {Extension} from "@codemirror/state" +import {HighlightStyle, syntaxHighlighting} from "@codemirror/language" +import {tags as t} from "@lezer/highlight" + +// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors + +const chalky = "#e5c07b", + coral = "#e06c75", + cyan = "#56b6c2", + invalid = "#ffffff", + ivory = "#abb2bf", + stone = "#7d8799", // Brightened compared to original to increase contrast + malibu = "#61afef", + sage = "#98c379", + whiskey = "#d19a66", + violet = "#c678dd", + darkBackground = "#21252b", + highlightBackground = "#2c313a", + background = "#282c34", + tooltipBackground = "#353a42", + selection = "#3E4451", + cursor = "#528bff" + +/// The colors used in the theme, as CSS color strings. +export const color = { + chalky, + coral, + cyan, + invalid, + ivory, + stone, + malibu, + sage, + whiskey, + violet, + darkBackground, + highlightBackground, + background, + tooltipBackground, + selection, + cursor +} + +/// The editor theme styles for One Dark. +export const oneDarkTheme = EditorView.theme({ + "&": { + color: ivory, + backgroundColor: background + }, + + ".cm-content": { + caretColor: cursor + }, + + ".cm-cursor, .cm-dropCursor": {borderLeftColor: cursor}, + "&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection": {backgroundColor: selection}, + + ".cm-panels": {backgroundColor: darkBackground, color: ivory}, + ".cm-panels.cm-panels-top": {borderBottom: "2px solid black"}, + ".cm-panels.cm-panels-bottom": {borderTop: "2px solid black"}, + + ".cm-searchMatch": { + backgroundColor: "#72a1ff59", + outline: "1px solid #457dff" + }, + ".cm-searchMatch.cm-searchMatch-selected": { + backgroundColor: "#6199ff2f" + }, + + ".cm-activeLine": {backgroundColor: "#6699ff0b"}, + ".cm-selectionMatch": {backgroundColor: "#aafe661a"}, + + "&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket": { + backgroundColor: "#bad0f847" + }, + + ".cm-gutters": { + backgroundColor: background, + color: stone, + border: "none" + }, + + ".cm-activeLineGutter": { + backgroundColor: highlightBackground + }, + + ".cm-foldPlaceholder": { + backgroundColor: "transparent", + border: "none", + color: "#ddd" + }, + + ".cm-tooltip": { + border: "none", + backgroundColor: tooltipBackground + }, + ".cm-tooltip .cm-tooltip-arrow:before": { + borderTopColor: "transparent", + borderBottomColor: "transparent" + }, + ".cm-tooltip .cm-tooltip-arrow:after": { + borderTopColor: tooltipBackground, + borderBottomColor: tooltipBackground + }, + ".cm-tooltip-autocomplete": { + "& > ul > li[aria-selected]": { + backgroundColor: highlightBackground, + color: ivory + } + } +}, {dark: true}) + +/// The highlighting style for code in the One Dark theme. +export const oneDarkHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, + color: violet}, + {tag: [t.name, t.deleted, t.character, t.propertyName, t.macroName], + color: coral}, + {tag: [t.function(t.variableName), t.labelName], + color: malibu}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], + color: whiskey}, + {tag: [t.definition(t.name), t.separator], + color: ivory}, + {tag: [t.typeName, t.className, t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], + color: chalky}, + {tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)], + color: cyan}, + {tag: [t.meta, t.comment], + color: stone}, + {tag: t.strong, + fontWeight: "bold"}, + {tag: t.emphasis, + fontStyle: "italic"}, + {tag: t.strikethrough, + textDecoration: "line-through"}, + {tag: t.link, + color: stone, + textDecoration: "underline"}, + {tag: t.heading, + fontWeight: "bold", + color: coral}, + {tag: [t.atom, t.bool, t.special(t.variableName)], + color: whiskey }, + {tag: [t.processingInstruction, t.string, t.inserted], + color: sage}, + {tag: t.invalid, + color: invalid}, +]) + +/// Extension to enable the One Dark theme (both the editor theme and +/// the highlight style). +export const oneDark: Extension = [oneDarkTheme, syntaxHighlighting(oneDarkHighlightStyle)] \ No newline at end of file diff --git a/frontend/src/views/editor/theme/dark/solarized-dark.ts b/frontend/src/views/editor/theme/dark/solarized-dark.ts new file mode 100644 index 0000000..07ddc3a --- /dev/null +++ b/frontend/src/views/editor/theme/dark/solarized-dark.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'solarizedDark', + dark: true, + background: '#002B36', + foreground: '#93A1A1', + selection: '#274642', + cursor: '#D30102', + dropdownBackground: '#002B36', + dropdownBorder: '#2AA19899', + activeLine: '#005b7022', + lineNumber: '#93A1A1', + activeLineNumber: '#949494', + matchingBracket: '#073642', + keyword: '#859900', + storage: '#93A1A1', + variable: '#268BD2', + parameter: '#268BD2', + function: '#268BD2', + string: '#2AA198', + constant: '#CB4B16', + type: '#CB4B16', + class: '#CB4B16', + number: '#D33682', + comment: '#586E75', + heading: '#268BD2', + invalid: '#DC322F', + regexp: '#DC322F', +} + +export const solarizedDarkTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const solarizedDarkHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const solarizedDark: Extension = [ + solarizedDarkTheme, + syntaxHighlighting(solarizedDarkHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/dark/tokyo-night-storm.ts b/frontend/src/views/editor/theme/dark/tokyo-night-storm.ts new file mode 100644 index 0000000..d842d69 --- /dev/null +++ b/frontend/src/views/editor/theme/dark/tokyo-night-storm.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'tokyoNightStorm', + dark: true, + background: '#24283b', + foreground: '#7982a9', + selection: '#6f7bb630', + cursor: '#c0caf5', + dropdownBackground: '#24283b', + dropdownBorder: '#7982a9', + activeLine: '#4d547722', + lineNumber: '#3b4261', + activeLineNumber: '#737aa2', + matchingBracket: '#1f2335', + keyword: '#bb9af7', + storage: '#bb9af7', + variable: '#c0caf5', + parameter: '#c0caf5', + function: '#7aa2f7', + string: '#9ece6a', + constant: '#bb9af7', + type: '#2ac3de', + class: '#c0caf5', + number: '#ff9e64', + comment: '#565f89', + heading: '#89ddff', + invalid: '#ff5370', + regexp: '#b4f9f8', +} + +export const tokyoNightStormTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const tokyoNightStormHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const tokyoNightStorm: Extension = [ + tokyoNightStormTheme, + syntaxHighlighting(tokyoNightStormHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/dark/tokyo-night.ts b/frontend/src/views/editor/theme/dark/tokyo-night.ts new file mode 100644 index 0000000..ddd3336 --- /dev/null +++ b/frontend/src/views/editor/theme/dark/tokyo-night.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'tokyoNight', + dark: true, + background: '#1a1b26', + foreground: '#787c99', + selection: '#515c7e40', + cursor: '#c0caf5', + dropdownBackground: '#1a1b26', + dropdownBorder: '#787c99', + activeLine: '#43455c22', + lineNumber: '#363b54', + activeLineNumber: '#737aa2', + matchingBracket: '#16161e', + keyword: '#bb9af7', + storage: '#bb9af7', + variable: '#c0caf5', + parameter: '#c0caf5', + function: '#7aa2f7', + string: '#9ece6a', + constant: '#bb9af7', + type: '#0db9d7', + class: '#c0caf5', + number: '#ff9e64', + comment: '#444b6a', + heading: '#89ddff', + invalid: '#ff5370', + regexp: '#b4f9f8', +} + +export const tokyoNightTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const tokyoNightHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const tokyoNight: Extension = [ + tokyoNightTheme, + syntaxHighlighting(tokyoNightHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/light/github-light.ts b/frontend/src/views/editor/theme/light/github-light.ts new file mode 100644 index 0000000..65d4977 --- /dev/null +++ b/frontend/src/views/editor/theme/light/github-light.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'githubLight', + dark: false, + background: '#fff', + foreground: '#444d56', + selection: '#0366d625', + cursor: '#044289', + dropdownBackground: '#fff', + dropdownBorder: '#e1e4e8', + activeLine: '#c6c6c622', + lineNumber: '#1b1f234d', + activeLineNumber: '#24292e', + matchingBracket: '#34d05840', + keyword: '#d73a49', + storage: '#d73a49', + variable: '#e36209', + parameter: '#24292e', + function: '#005cc5', + string: '#032f62', + constant: '#005cc5', + type: '#005cc5', + class: '#6f42c1', + number: '#005cc5', + comment: '#6a737d', + heading: '#005cc5', + invalid: '#cb2431', + regexp: '#032f62', +} + +export const githubLightTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const githubLightHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const githubLight: Extension = [ + githubLightTheme, + syntaxHighlighting(githubLightHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/light/material-light.ts b/frontend/src/views/editor/theme/light/material-light.ts new file mode 100644 index 0000000..316dc83 --- /dev/null +++ b/frontend/src/views/editor/theme/light/material-light.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'materialLight', + dark: false, + background: '#FAFAFA', + foreground: '#90A4AE', + selection: '#80CBC440', + cursor: '#272727', + dropdownBackground: '#FAFAFA', + dropdownBorder: '#00000010', + activeLine: '#c2c2c222', + lineNumber: '#CFD8DC', + activeLineNumber: '#7E939E', + matchingBracket: '#FAFAFA', + keyword: '#7C4DFF', + storage: '#7C4DFF', + variable: '#90A4AE', + parameter: '#90A4AE', + function: '#6182B8', + string: '#91B859', + constant: '#F76D47', + type: '#8796B0', + class: '#FFB62C', + number: '#F76D47', + comment: '#90A4AE', + heading: '#91B859', + invalid: '#E53935', + regexp: '#39ADB5', +} + +export const materialLightTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const materialLightHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const materialLight: Extension = [ + materialLightTheme, + syntaxHighlighting(materialLightHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/light/solarized-light.ts b/frontend/src/views/editor/theme/light/solarized-light.ts new file mode 100644 index 0000000..c422a9f --- /dev/null +++ b/frontend/src/views/editor/theme/light/solarized-light.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'solarizedLight', + dark: false, + background: '#FDF6E3', + foreground: '#586E75', + selection: '#EEE8D5', + cursor: '#657B83', + dropdownBackground: '#FDF6E3', + dropdownBorder: '#D3AF86', + activeLine: '#d5bd5c22', + lineNumber: '#586E75', + activeLineNumber: '#567983', + matchingBracket: '#EEE8D5', + keyword: '#859900', + storage: '#586E75', + variable: '#268BD2', + parameter: '#268BD2', + function: '#268BD2', + string: '#2AA198', + constant: '#CB4B16', + type: '#CB4B16', + class: '#CB4B16', + number: '#D33682', + comment: '#93A1A1', + heading: '#268BD2', + invalid: '#DC322F', + regexp: '#DC322F', +} + +export const solarizedLightTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const solarizedLightHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const solarizedLight: Extension = [ + solarizedLightTheme, + syntaxHighlighting(solarizedLightHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/light/tokyo-night-day.ts b/frontend/src/views/editor/theme/light/tokyo-night-day.ts new file mode 100644 index 0000000..2f671ee --- /dev/null +++ b/frontend/src/views/editor/theme/light/tokyo-night-day.ts @@ -0,0 +1,128 @@ +import {EditorView} from '@codemirror/view' +import {Extension} from '@codemirror/state' +import {HighlightStyle, syntaxHighlighting} from '@codemirror/language' +import {tags as t} from '@lezer/highlight' + +export const config = { + name: 'tokyoNightDay', + dark: false, + background: '#e1e2e7', + foreground: '#6a6f8e', + selection: '#8591b840', + cursor: '#3760bf', + dropdownBackground: '#e1e2e7', + dropdownBorder: '#6a6f8e', + activeLine: '#a7aaba22', + lineNumber: '#b3b6cd', + activeLineNumber: '#68709a', + matchingBracket: '#e9e9ec', + keyword: '#9854f1', + storage: '#9854f1', + variable: '#3760bf', + parameter: '#3760bf', + function: '#2e7de9', + string: '#587539', + constant: '#9854f1', + type: '#07879d', + class: '#3760bf', + number: '#b15c00', + comment: '#9da3c2', + heading: '#006a83', + invalid: '#ff3e64', + regexp: '#2e5857', +} + +export const tokyoNightDayTheme = EditorView.theme({ + '&': { + color: config.foreground, + backgroundColor: config.background, + }, + + '.cm-content': {caretColor: config.cursor}, + + '.cm-cursor, .cm-dropCursor': {borderLeftColor: config.cursor}, + '&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {backgroundColor: config.selection}, + + '.cm-panels': {backgroundColor: config.dropdownBackground, color: config.foreground}, + '.cm-panels.cm-panels-top': {borderBottom: '2px solid black'}, + '.cm-panels.cm-panels-bottom': {borderTop: '2px solid black'}, + + '.cm-searchMatch': { + backgroundColor: config.dropdownBackground, + outline: `1px solid ${config.dropdownBorder}` + }, + '.cm-searchMatch.cm-searchMatch-selected': { + backgroundColor: config.selection + }, + + '.cm-activeLine': {backgroundColor: config.activeLine}, + '.cm-selectionMatch': {backgroundColor: config.selection}, + + '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { + backgroundColor: config.matchingBracket, + outline: 'none' + }, + + '.cm-gutters': { + backgroundColor: config.background, + color: config.foreground, + border: 'none' + }, + '.cm-activeLineGutter': {backgroundColor: config.background}, + + '.cm-lineNumbers .cm-gutterElement': {color: config.lineNumber}, + '.cm-lineNumbers .cm-activeLineGutter': {color: config.activeLineNumber}, + + '.cm-foldPlaceholder': { + backgroundColor: 'transparent', + border: 'none', + color: config.foreground + }, + '.cm-tooltip': { + border: `1px solid ${config.dropdownBorder}`, + backgroundColor: config.dropdownBackground, + color: config.foreground, + }, + '.cm-tooltip .cm-tooltip-arrow:before': { + borderTopColor: 'transparent', + borderBottomColor: 'transparent' + }, + '.cm-tooltip .cm-tooltip-arrow:after': { + borderTopColor: config.foreground, + borderBottomColor: config.foreground, + }, + '.cm-tooltip-autocomplete': { + '& > ul > li[aria-selected]': { + background: config.selection, + color: config.foreground, + } + } +}, {dark: config.dark}) + +export const tokyoNightDayHighlightStyle = HighlightStyle.define([ + {tag: t.keyword, color: config.keyword}, + {tag: [t.name, t.deleted, t.character, t.macroName], color: config.variable}, + {tag: [t.propertyName], color: config.function}, + {tag: [t.processingInstruction, t.string, t.inserted, t.special(t.string)], color: config.string}, + {tag: [t.function(t.variableName), t.labelName], color: config.function}, + {tag: [t.color, t.constant(t.name), t.standard(t.name)], color: config.constant}, + {tag: [t.definition(t.name), t.separator], color: config.variable}, + {tag: [t.className], color: config.class}, + {tag: [t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: config.number}, + {tag: [t.typeName], color: config.type, fontStyle: config.type}, + {tag: [t.operator, t.operatorKeyword], color: config.keyword}, + {tag: [t.url, t.escape, t.regexp, t.link], color: config.regexp}, + {tag: [t.meta, t.comment], color: config.comment}, + {tag: t.strong, fontWeight: 'bold'}, + {tag: t.emphasis, fontStyle: 'italic'}, + {tag: t.link, textDecoration: 'underline'}, + {tag: t.heading, fontWeight: 'bold', color: config.heading}, + {tag: [t.atom, t.bool, t.special(t.variableName)], color: config.variable}, + {tag: t.invalid, color: config.invalid}, + {tag: t.strikethrough, textDecoration: 'line-through'}, +]) + +export const tokyoNightDay: Extension = [ + tokyoNightDayTheme, + syntaxHighlighting(tokyoNightDayHighlightStyle), +] diff --git a/frontend/src/views/editor/theme/types.ts b/frontend/src/views/editor/theme/types.ts new file mode 100644 index 0000000..ee70c7e --- /dev/null +++ b/frontend/src/views/editor/theme/types.ts @@ -0,0 +1,50 @@ +export interface ThemeColors { + // 主题基本信息 + name?: string; // 主题名称 + dark?: boolean; // 是否为深色主题标识 + + // 基础色调 + background: string; // 主背景色 + backgroundSecondary?: string; // 次要背景色 + surface?: string; // 面板背景 + dropdownBackground?: string; // 下拉菜单背景 + dropdownBorder?: string; // 下拉菜单边框 + + // 文本颜色 + foreground: string; // 主文本色 + foregroundSecondary?: string; // 次要文本色 + comment: string; // 注释色 + + // 语法高亮色 + keyword: string; // 关键字 + string: string; // 字符串 + function: string; // 函数名 + number: string; // 数字 + operator?: string; // 操作符 + variable: string; // 变量 + type: string; // 类型 + constant: string; // 常量 + storage?: string; // 存储类型 + parameter?: string; // 参数 + class?: string; // 类名 + heading?: string; // 标题 + invalid?: string; // 无效内容 + regexp?: string; // 正则表达式 + + // 界面元素 + cursor: string; // 光标 + selection: string; // 选中背景 + selectionBlur?: string; // 失焦选中背景 + activeLine: string; // 当前行高亮 + lineNumber: string; // 行号 + activeLineNumber: string; // 活动行号颜色 + + // 边框和分割线 + borderColor?: string; // 边框色 + borderLight?: string; // 浅色边框 + + // 搜索和匹配 + searchMatch?: string; // 搜索匹配 + matchingBracket?: string; // 匹配括号 +} + diff --git a/go.mod b/go.mod index dedee5c..b0bae0d 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,22 @@ module voidraft go 1.25 require ( - github.com/creativeprojects/go-selfupdate v1.5.0 - github.com/go-git/go-git/v5 v5.16.2 + github.com/creativeprojects/go-selfupdate v1.5.1 + github.com/go-git/go-git/v5 v5.16.3 github.com/knadh/koanf/parsers/json v1.0.0 github.com/knadh/koanf/providers/file v1.2.0 github.com/knadh/koanf/providers/structs v1.0.0 - github.com/knadh/koanf/v2 v2.2.2 - github.com/stretchr/testify v1.10.0 - github.com/wailsapp/wails/v3 v3.0.0-alpha.25 - golang.org/x/net v0.43.0 - golang.org/x/sys v0.35.0 - golang.org/x/text v0.28.0 - modernc.org/sqlite v1.38.2 + github.com/knadh/koanf/v2 v2.3.0 + github.com/stretchr/testify v1.11.1 + github.com/wailsapp/wails/v3 v3.0.0-alpha.34 + golang.org/x/net v0.46.0 + golang.org/x/sys v0.37.0 + golang.org/x/text v0.30.0 + modernc.org/sqlite v1.39.0 ) require ( - code.gitea.io/sdk/gitea v0.21.0 // indirect + code.gitea.io/sdk/gitea v0.22.0 // indirect dario.cat/mergo v1.0.2 // indirect git.sr.ht/~jackmordaunt/go-toast/v2 v2.0.3 // indirect github.com/42wim/httpsig v1.2.3 // indirect @@ -28,11 +28,11 @@ require ( github.com/adrg/xdg v0.5.3 // indirect github.com/bep/debounce v1.2.1 // indirect github.com/cloudflare/circl v1.6.1 // indirect - github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/cyphar/filepath-securejoin v0.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidmz/go-pageant v1.0.2 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/ebitengine/purego v0.8.4 // indirect + github.com/ebitengine/purego v0.9.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/structs v1.1.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect @@ -51,7 +51,8 @@ require ( github.com/hashicorp/go-version v1.7.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jchv/go-winloader v0.0.0-20250406163304-c1995be93bd1 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/kevinburke/ssh_config v1.4.0 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/knadh/koanf/maps v0.1.2 // indirect github.com/leaanthony/go-ansi-parser v1.6.1 // indirect github.com/leaanthony/u v1.1.1 // indirect @@ -60,30 +61,30 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/pjbgf/sha1cd v0.4.0 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect + github.com/pjbgf/sha1cd v0.5.0 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/samber/lo v1.51.0 // indirect + github.com/samber/lo v1.52.0 // indirect github.com/sergi/go-diff v1.4.0 // indirect - github.com/skeema/knownhosts v1.3.1 // indirect - github.com/ulikunitz/xz v0.5.14 // indirect + github.com/skeema/knownhosts v1.3.2 // indirect + github.com/ulikunitz/xz v0.5.15 // indirect github.com/wailsapp/go-webview2 v1.0.21 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect github.com/xanzy/go-gitlab v0.115.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - golang.org/x/crypto v0.41.0 // indirect - golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 // indirect - golang.org/x/image v0.24.0 // indirect - golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/time v0.12.0 // indirect + golang.org/x/crypto v0.43.0 // indirect + golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b // indirect + golang.org/x/image v0.32.0 // indirect + golang.org/x/oauth2 v0.32.0 // indirect + golang.org/x/time v0.14.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.66.7 // indirect + modernc.org/libc v1.66.10 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index 4f7d5d9..27cf009 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -code.gitea.io/sdk/gitea v0.21.0 h1:69n6oz6kEVHRo1+APQQyizkhrZrLsTLXey9142pfkD4= -code.gitea.io/sdk/gitea v0.21.0/go.mod h1:tnBjVhuKJCn8ibdyyhvUyxrR1Ca2KHEoTWoukNhXQPA= +code.gitea.io/sdk/gitea v0.22.0 h1:HCKq7bX/HQ85Nw7c/HAhWgRye+vBp5nQOE8Md1+9Ef0= +code.gitea.io/sdk/gitea v0.22.0/go.mod h1:yyF5+GhljqvA30sRDreoyHILruNiy4ASufugzYg0VHM= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= git.sr.ht/~jackmordaunt/go-toast/v2 v2.0.3 h1:N3IGoHHp9pb6mj1cbXbuaSXV/UMKwmbKLf53nQmtqMA= @@ -23,10 +23,10 @@ github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/creativeprojects/go-selfupdate v1.5.0 h1:4zuFafc/qGpymx7umexxth2y2lJXoBR49c3uI0Hr+zU= -github.com/creativeprojects/go-selfupdate v1.5.0/go.mod h1:Pewm8hY7Xe1ne7P8irVBAFnXjTkRuxbbkMlBeTdumNQ= -github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= -github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/creativeprojects/go-selfupdate v1.5.1 h1:fuyEGFFfqcC8SxDGolcEPYPLXGQ9Mcrc5uRyRG2Mqnk= +github.com/creativeprojects/go-selfupdate v1.5.1/go.mod h1:2uY75rP8z/D/PBuDn6mlBnzu+ysEmwOJfcgF8np0JIM= +github.com/cyphar/filepath-securejoin v0.5.0 h1:hIAhkRBMQ8nIeuVwcAoymp7MY4oherZdAxD+m0u9zaw= +github.com/cyphar/filepath-securejoin v0.5.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -34,8 +34,8 @@ github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454Wv github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw= -github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k= +github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -56,8 +56,8 @@ github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UN github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.16.2 h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77hM= -github.com/go-git/go-git/v5 v5.16.2/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= +github.com/go-git/go-git/v5 v5.16.3 h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8= +github.com/go-git/go-git/v5 v5.16.3/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= @@ -91,8 +91,10 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jchv/go-winloader v0.0.0-20250406163304-c1995be93bd1 h1:njuLRcjAuMKr7kI3D85AXWkw6/+v9PwtV6M6o11sWHQ= github.com/jchv/go-winloader v0.0.0-20250406163304-c1995be93bd1/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.4.0 h1:6xxtP5bZ2E4NF5tuQulISpTO2z8XbtH8cg1PWkxoFkQ= +github.com/kevinburke/ssh_config v1.4.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo= github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= github.com/knadh/koanf/parsers/json v1.0.0 h1:1pVR1JhMwbqSg5ICzU+surJmeBbdT4bQm7jjgnA+f8o= @@ -101,8 +103,8 @@ github.com/knadh/koanf/providers/file v1.2.0 h1:hrUJ6Y9YOA49aNu/RSYzOTFlqzXSCpmY github.com/knadh/koanf/providers/file v1.2.0/go.mod h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA= github.com/knadh/koanf/providers/structs v1.0.0 h1:DznjB7NQykhqCar2LvNug3MuxEQsZ5KvfgMbio+23u4= github.com/knadh/koanf/providers/structs v1.0.0/go.mod h1:kjo5TFtgpaZORlpoJqcbeLowM2cINodv8kX+oFAeQ1w= -github.com/knadh/koanf/v2 v2.2.2 h1:ghbduIkpFui3L587wavneC9e3WIliCgiCgdxYO/wd7A= -github.com/knadh/koanf/v2 v2.2.2/go.mod h1:abWQc0cBXLSF/PSOMCB/SK+T13NXDsPvOksbpi5e/9Q= +github.com/knadh/koanf/v2 v2.3.0 h1:Qg076dDRFHvqnKG97ZEsi9TAg2/nFTa9hCdcSa1lvlM= +github.com/knadh/koanf/v2 v2.3.0/go.mod h1:gRb40VRAbd4iJMYYD5IxZ6hfuopFcXBpc9bbQpZwo28= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -127,12 +129,12 @@ github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa1 github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= -github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/pjbgf/sha1cd v0.4.0 h1:NXzbL1RvjTUi6kgYZCX3fPwwl27Q1LJndxtUDVfJGRY= -github.com/pjbgf/sha1cd v0.4.0/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= +github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -146,26 +148,26 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= -github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw= +github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= -github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= +github.com/skeema/knownhosts v1.3.2 h1:EDL9mgf4NzwMXCTfaxSD/o/a5fxDw/xL9nkU28JjdBg= +github.com/skeema/knownhosts v1.3.2/go.mod h1:bEg3iQAuw+jyiw+484wwFJoKSLwcfd7fqRy+N0QTiow= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/ulikunitz/xz v0.5.14 h1:uv/0Bq533iFdnMHZdRBTOlaNMdb1+ZxXIlHDZHIHcvg= -github.com/ulikunitz/xz v0.5.14/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/wailsapp/go-webview2 v1.0.21 h1:k3dtoZU4KCoN/AEIbWiPln3P2661GtA2oEgA2Pb+maA= github.com/wailsapp/go-webview2 v1.0.21/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= -github.com/wailsapp/wails/v3 v3.0.0-alpha.25 h1:o05zUiPEvmrq2lqqCs4wqnrnAjGmhryYHRhjQmtkvk8= -github.com/wailsapp/wails/v3 v3.0.0-alpha.25/go.mod h1:UZpnhYuju4saspCJrIHAvC0H5XjtKnqd26FRxJLrQ0M= +github.com/wailsapp/wails/v3 v3.0.0-alpha.34 h1:t6NwHOLJzXuESb3YSXarSd1C/U1h2CpXF+BLr0ekj2g= +github.com/wailsapp/wails/v3 v3.0.0-alpha.34/go.mod h1:UZpnhYuju4saspCJrIHAvC0H5XjtKnqd26FRxJLrQ0M= github.com/xanzy/go-gitlab v0.115.0 h1:6DmtItNcVe+At/liXSgfE/DZNZrGfalQmBRmOcJjOn8= github.com/xanzy/go-gitlab v0.115.0/go.mod h1:5XCDtM7AM6WMKmfDdOiEpyRWUqui2iS9ILfvCZ2gJ5M= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= @@ -174,26 +176,26 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= -golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 h1:SbTAbRFnd5kjQXbczszQ0hdk3ctwYf3qBNH9jIsGclE= -golang.org/x/exp v0.0.0-20250813145105-42675adae3e6/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= -golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= -golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= -golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= -golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA= +golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= +golang.org/x/image v0.32.0 h1:6lZQWq75h7L5IWNk0r+SCpUJ6tUVd3v4ZHnbRKLkUDQ= +golang.org/x/image v0.32.0/go.mod h1:/R37rrQmKXtO6tYXAjtDLwQgFLHmhW+V6ayXlxzP2Pc= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= -golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= +golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -205,21 +207,21 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= -golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= +golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= -golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -234,18 +236,18 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -modernc.org/cc/v4 v4.26.3 h1:yEN8dzrkRFnn4PUUKXLYIqVf2PJYAEjMTFjO3BDGc3I= -modernc.org/cc/v4 v4.26.3/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= -modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= -modernc.org/fileutil v1.3.15 h1:rJAXTP6ilMW/1+kzDiqmBlHLWszheUFXIyGQIAvjJpY= -modernc.org/fileutil v1.3.15/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4= +modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A= +modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q= +modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= +modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.66.7 h1:rjhZ8OSCybKWxS1CJr0hikpEi6Vg+944Ouyrd+bQsoY= -modernc.org/libc v1.66.7/go.mod h1:ln6tbWX0NH+mzApEoDRvilBvAWFt1HX7AUA4VDdVDPM= +modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A= +modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= @@ -254,8 +256,8 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.38.2 h1:Aclu7+tgjgcQVShZqim41Bbw9Cho0y/7WzYptXqkEek= -modernc.org/sqlite v1.38.2/go.mod h1:cPTJYSlgg3Sfg046yBShXENNtPrWrDX8bsbAQBzgQ5E= +modernc.org/sqlite v1.39.0 h1:6bwu9Ooim0yVYA7IZn9demiQk/Ejp0BtTjBWFLymSeY= +modernc.org/sqlite v1.39.0/go.mod h1:cPTJYSlgg3Sfg046yBShXENNtPrWrDX8bsbAQBzgQ5E= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/internal/services/self_update_service.go b/internal/services/self_update_service.go index 351ecaa..2669342 100644 --- a/internal/services/self_update_service.go +++ b/internal/services/self_update_service.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" "github.com/creativeprojects/go-selfupdate" - "github.com/wailsapp/wails/v3/pkg/services/badge" + "github.com/wailsapp/wails/v3/pkg/services/dock" "github.com/wailsapp/wails/v3/pkg/services/log" "github.com/wailsapp/wails/v3/pkg/services/notifications" "os" @@ -30,7 +30,7 @@ type SelfUpdateResult struct { type SelfUpdateService struct { logger *log.LogService configService *ConfigService - badgeService *badge.BadgeService // 直接使用Wails原生badge服务 + badgeService *dock.DockService // 直接使用Wails原生badge服务 notificationService *notifications.NotificationService // 通知服务 config *models.AppConfig @@ -39,7 +39,7 @@ type SelfUpdateService struct { } // NewSelfUpdateService 创建自我更新服务实例 -func NewSelfUpdateService(configService *ConfigService, badgeService *badge.BadgeService, notificationService *notifications.NotificationService, logger *log.LogService) (*SelfUpdateService, error) { +func NewSelfUpdateService(configService *ConfigService, badgeService *dock.DockService, notificationService *notifications.NotificationService, logger *log.LogService) (*SelfUpdateService, error) { // 获取配置 appConfig, err := configService.GetConfig() if err != nil { diff --git a/internal/services/service_manager.go b/internal/services/service_manager.go index 2c2d4e3..d37d969 100644 --- a/internal/services/service_manager.go +++ b/internal/services/service_manager.go @@ -4,7 +4,7 @@ import ( "voidraft/internal/models" "github.com/wailsapp/wails/v3/pkg/application" - "github.com/wailsapp/wails/v3/pkg/services/badge" + "github.com/wailsapp/wails/v3/pkg/services/dock" "github.com/wailsapp/wails/v3/pkg/services/log" "github.com/wailsapp/wails/v3/pkg/services/notifications" ) @@ -27,7 +27,7 @@ type ServiceManager struct { selfUpdateService *SelfUpdateService translationService *TranslationService themeService *ThemeService - badgeService *badge.BadgeService + badgeService *dock.DockService notificationService *notifications.NotificationService testService *TestService // 测试服务(仅开发环境) BackupService *BackupService @@ -40,7 +40,7 @@ func NewServiceManager() *ServiceManager { logger := log.New() // 初始化badge服务 - badgeService := badge.New() + badgeService := dock.New() // 初始化通知服务 notificationService := notifications.New() @@ -258,7 +258,7 @@ func (sm *ServiceManager) GetThemeService() *ThemeService { } // GetBadgeService 获取badge服务实例 -func (sm *ServiceManager) GetBadgeService() *badge.BadgeService { +func (sm *ServiceManager) GetBadgeService() *dock.DockService { return sm.badgeService } diff --git a/internal/services/test_service.go b/internal/services/test_service.go index 57a843b..6dd66e6 100644 --- a/internal/services/test_service.go +++ b/internal/services/test_service.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/wailsapp/wails/v3/pkg/application" - "github.com/wailsapp/wails/v3/pkg/services/badge" + "github.com/wailsapp/wails/v3/pkg/services/dock" "github.com/wailsapp/wails/v3/pkg/services/log" "github.com/wailsapp/wails/v3/pkg/services/notifications" ) @@ -13,12 +13,12 @@ import ( // TestService 测试服务 - 仅在开发环境使用 type TestService struct { logger *log.LogService - badgeService *badge.BadgeService + badgeService *dock.DockService notificationService *notifications.NotificationService } // NewTestService 创建测试服务实例 -func NewTestService(badgeService *badge.BadgeService, notificationService *notifications.NotificationService, logger *log.LogService) *TestService { +func NewTestService(badgeService *dock.DockService, notificationService *notifications.NotificationService, logger *log.LogService) *TestService { if logger == nil { logger = log.New() } diff --git a/version.txt b/version.txt index da8c768..eb1b364 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -VERSION=1.4.2 +VERSION=1.5.0