├── frontend ├── .vscode │ └── extensions.json ├── src │ ├── vite-env.d.ts │ ├── main.ts │ ├── App.svelte │ ├── assets │ │ └── svelte.svg │ └── app.css ├── public │ ├── wails.png │ └── svelte.svg ├── tsconfig.json ├── vite.config.ts ├── svelte.config.js ├── .gitignore ├── index.html ├── tsconfig.app.json ├── package.json ├── tsconfig.node.json └── README.md ├── NEXTSTEPS.md ├── gitignore.tmpl ├── greetservice.go ├── template.json ├── Taskfile.tmpl.yml ├── go.mod.tmpl ├── main.go.tmpl ├── README.md └── go.sum.tmpl /frontend/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["svelte.svelte-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /frontend/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /frontend/public/wails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidscottmills/wails-svelte-vite-template/main/frontend/public/wails.png -------------------------------------------------------------------------------- /NEXTSTEPS.md: -------------------------------------------------------------------------------- 1 | # Next Steps 2 | 3 | For a full guide on how to create templates, see [Creating Custom Templates](https://v3.wails.io/guides/custom-templates). -------------------------------------------------------------------------------- /gitignore.tmpl: -------------------------------------------------------------------------------- 1 | .task 2 | bin 3 | frontend/dist 4 | frontend/node_modules 5 | build/linux/appimage/build 6 | build/windows/nsis/MicrosoftEdgeWebview2Setup.exe -------------------------------------------------------------------------------- /greetservice.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type GreetService struct{} 4 | 5 | func (g *GreetService) Greet(name string) string { 6 | return "Hello " + name + "!" 7 | } 8 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /frontend/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import { svelte } from '@sveltejs/vite-plugin-svelte' 3 | 4 | // https://vite.dev/config/ 5 | export default defineConfig({ 6 | plugins: [svelte()], 7 | }) 8 | -------------------------------------------------------------------------------- /frontend/src/main.ts: -------------------------------------------------------------------------------- 1 | import { mount } from 'svelte' 2 | import './app.css' 3 | import App from './App.svelte' 4 | 5 | const app = mount(App, { 6 | target: document.getElementById('app')!, 7 | }) 8 | 9 | export default app 10 | -------------------------------------------------------------------------------- /template.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Svelte5 Wails Template", 3 | "shortname": "", 4 | "author": "David illsA", 5 | "description": "A template with my preferred setup", 6 | "helpurl": "https://github.com/yourusername/template-docs", 7 | "version": "v1.0.0", 8 | "schema": 3 9 | } -------------------------------------------------------------------------------- /frontend/svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' 2 | 3 | /** @type {import("@sveltejs/vite-plugin-svelte").SvelteConfig} */ 4 | export default { 5 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess 6 | // for more information about preprocessors 7 | preprocess: vitePreprocess(), 8 | } 9 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Svelte + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frontend/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | "compilerOptions": { 4 | "target": "ES2022", 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "resolveJsonModule": true, 8 | /** 9 | * Typecheck JS in `.svelte` and `.js` files by default. 10 | * Disable checkJs if you'd like to use dynamic types in JS. 11 | * Note that setting allowJs false does not prevent the use 12 | * of JS in `.svelte` files. 13 | */ 14 | "allowJs": true, 15 | "checkJs": true, 16 | "isolatedModules": true, 17 | "moduleDetection": "force" 18 | }, 19 | "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"] 20 | } 21 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build:dev": "vite build --minify false --mode development", 9 | "build": "vite build", 10 | "preview": "vite preview", 11 | "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json" 12 | }, 13 | "dependencies": { 14 | "@wailsio/runtime": "latest" 15 | }, 16 | "devDependencies": { 17 | "@sveltejs/vite-plugin-svelte": "^6.1.1", 18 | "@tsconfig/svelte": "^5.0.4", 19 | "svelte": "^5.38.1", 20 | "svelte-check": "^4.3.1", 21 | "typescript": "~5.8.3", 22 | "vite": "^7.1.2" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /frontend/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 | "target": "ES2023", 5 | "lib": ["ES2023"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "verbatimModuleSyntax": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "erasableSyntaxOnly": true, 21 | "noFallthroughCasesInSwitch": true, 22 | "noUncheckedSideEffectImports": true 23 | }, 24 | "include": ["vite.config.ts"] 25 | } 26 | -------------------------------------------------------------------------------- /Taskfile.tmpl.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | includes: 4 | common: ./build/Taskfile.yml 5 | windows: ./build/windows/Taskfile.yml 6 | darwin: ./build/darwin/Taskfile.yml 7 | linux: ./build/linux/Taskfile.yml 8 | 9 | vars: 10 | APP_NAME: "{{.ProjectName}}" 11 | BIN_DIR: "bin" 12 | VITE_PORT: {{ "'{{.WAILS_VITE_PORT | default 9245}}'" }} 13 | 14 | tasks: 15 | build: 16 | summary: Builds the application 17 | cmds: 18 | - task: "{{ "{{OS}}" }}:build" 19 | 20 | package: 21 | summary: Packages a production build of the application 22 | cmds: 23 | - task: "{{ "{{OS}}" }}:package" 24 | 25 | run: 26 | summary: Runs the application 27 | cmds: 28 | - task: "{{ "{{OS}}" }}:run" 29 | 30 | dev: 31 | summary: Runs the application in development mode 32 | cmds: 33 | - wails3 dev -config ./build/config.yml -port {{ "{{.VITE_PORT}}" }} 34 | 35 | -------------------------------------------------------------------------------- /frontend/src/App.svelte: -------------------------------------------------------------------------------- 1 | 27 | 28 |
29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 |

Wails + Svelte

38 |
{result}
39 |
40 |
41 | 42 | 43 |
44 |
45 | 49 |
50 | 51 | 54 | -------------------------------------------------------------------------------- /frontend/public/svelte.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/src/assets/svelte.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /go.mod.tmpl: -------------------------------------------------------------------------------- 1 | module changeme 2 | 3 | go 1.24 4 | 5 | require github.com/wailsapp/wails/v3 {{.WailsVersion}} 6 | 7 | require ( 8 | dario.cat/mergo v1.0.1 // indirect 9 | github.com/Microsoft/go-winio v0.6.2 // indirect 10 | github.com/ProtonMail/go-crypto v1.1.5 // indirect 11 | github.com/adrg/xdg v0.5.3 // indirect 12 | github.com/bep/debounce v1.2.1 // indirect 13 | github.com/cloudflare/circl v1.6.0 // indirect 14 | github.com/cyphar/filepath-securejoin v0.4.1 // indirect 15 | github.com/ebitengine/purego v0.8.2 // indirect 16 | github.com/emirpasic/gods v1.18.1 // indirect 17 | github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect 18 | github.com/go-git/go-billy/v5 v5.6.2 // indirect 19 | github.com/go-git/go-git/v5 v5.13.2 // indirect 20 | github.com/go-ole/go-ole v1.3.0 // indirect 21 | github.com/godbus/dbus/v5 v5.1.0 // indirect 22 | github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect 23 | github.com/google/uuid v1.6.0 // indirect 24 | github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect 25 | github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect 26 | github.com/kevinburke/ssh_config v1.2.0 // indirect 27 | github.com/leaanthony/go-ansi-parser v1.6.1 // indirect 28 | github.com/leaanthony/u v1.1.1 // indirect 29 | github.com/lmittmann/tint v1.0.7 // indirect 30 | github.com/mattn/go-colorable v0.1.14 // indirect 31 | github.com/mattn/go-isatty v0.0.20 // indirect 32 | github.com/pjbgf/sha1cd v0.3.2 // indirect 33 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect 34 | github.com/pkg/errors v0.9.1 // indirect 35 | github.com/rivo/uniseg v0.4.7 // indirect 36 | github.com/samber/lo v1.49.1 // indirect 37 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 38 | github.com/skeema/knownhosts v1.3.1 // indirect 39 | github.com/wailsapp/go-webview2 v1.0.19 // indirect 40 | github.com/wailsapp/mimetype v1.4.1 // indirect 41 | github.com/xanzy/ssh-agent v0.3.3 // indirect 42 | golang.org/x/crypto v0.33.0 // indirect 43 | golang.org/x/net v0.35.0 // indirect 44 | golang.org/x/sys v0.30.0 // indirect 45 | golang.org/x/text v0.22.0 // indirect 46 | gopkg.in/ini.v1 v1.67.0 // indirect 47 | gopkg.in/warnings.v0 v0.1.2 // indirect 48 | ) 49 | {{if .LocalModulePath}} 50 | replace github.com/wailsapp/wails/v3 => {{.LocalModulePath}}v3 51 | {{end}} 52 | -------------------------------------------------------------------------------- /main.go.tmpl: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "embed" 5 | _ "embed" 6 | "log" 7 | "time" 8 | 9 | "github.com/wailsapp/wails/v3/pkg/application" 10 | ) 11 | 12 | // Wails uses Go's `embed` package to embed the frontend files into the binary. 13 | // Any files in the frontend/dist folder will be embedded into the binary and 14 | // made available to the frontend. 15 | // See https://pkg.go.dev/embed for more information. 16 | 17 | //go:embed all:frontend/dist 18 | var assets embed.FS 19 | 20 | // main function serves as the application's entry point. It initializes the application, creates a window, 21 | // and starts a goroutine that emits a time-based event every second. It subsequently runs the application and 22 | // logs any error that might occur. 23 | func main() { 24 | 25 | // Create a new Wails application by providing the necessary options. 26 | // Variables 'Name' and 'Description' are for application metadata. 27 | // 'Assets' configures the asset server with the 'FS' variable pointing to the frontend files. 28 | // 'Bind' is a list of Go struct instances. The frontend has access to the methods of these instances. 29 | // 'Mac' options tailor the application when running an macOS. 30 | app := application.New(application.Options{ 31 | Name: "{{.ProjectName}}", 32 | Description: "A demo using Wails with a Svelte5 frontend", 33 | Services: []application.Service{ 34 | application.NewService(&GreetService{}), 35 | }, 36 | Assets: application.AssetOptions{ 37 | Handler: application.AssetFileServerFS(assets), 38 | }, 39 | Mac: application.MacOptions{ 40 | ApplicationShouldTerminateAfterLastWindowClosed: true, 41 | }, 42 | }) 43 | 44 | // Create a new window with the necessary options. 45 | // 'Title' is the title of the window. 46 | // 'Mac' options tailor the window when running on macOS. 47 | // 'BackgroundColour' is the background colour of the window. 48 | // 'URL' is the URL that will be loaded into the webview. 49 | app.Window.NewWithOptions(application.WebviewWindowOptions{ 50 | Title: "Window 1", 51 | Mac: application.MacWindow{ 52 | InvisibleTitleBarHeight: 50, 53 | Backdrop: application.MacBackdropTranslucent, 54 | TitleBar: application.MacTitleBarHiddenInset, 55 | }, 56 | BackgroundColour: application.NewRGB(27, 38, 54), 57 | URL: "/", 58 | }) 59 | 60 | // Create a goroutine that emits an event containing the current time every second. 61 | // The frontend can listen to this event and update the UI accordingly. 62 | go func() { 63 | for { 64 | now := time.Now().Format(time.RFC1123) 65 | app.Event.Emit("time", now) 66 | time.Sleep(time.Second) 67 | } 68 | }() 69 | 70 | // Run the application. This blocks until the application has been exited. 71 | err := app.Run() 72 | 73 | // If an error occurred while running the application, log it and exit. 74 | if err != nil { 75 | log.Fatal(err) 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to Your New Wails3 Project! 2 | 3 | ## Usage 4 | 5 | To use this template, perform the following 6 | ``` 7 | wails3 init -n my-awesome-project -t https://github.com/davidscottmills/wails-svelte-vite-template 8 | ``` 9 | 10 | Congratulations on generating your Wails3 application! This README will guide you through the next steps to get your project up and running. 11 | 12 | ## Issues 13 | 14 | The wails3 cli does not remove the `.git` directory, so do the following step and add your own source control. 15 | 16 | ``` 17 | rm -rf .git 18 | ``` 19 | 20 | There are some issues when initially runing after generating from the template. You may see something like: 21 | 22 | ``` 23 | sh: /frontend/node_modules/.bin/vite: Permission denied 24 | ``` 25 | 26 | If you encouter this, perform the following: 27 | 28 | ``` 29 | cd frontend 30 | rm -rf node_modules package-lock.json 31 | npm i 32 | cd .. 33 | wails3 dev 34 | ``` 35 | 36 | ## Getting Started 37 | 38 | 1. Navigate to your project directory in the terminal. 39 | 40 | 2. To run your application in development mode, use the following command: 41 | 42 | ``` 43 | wails3 generate bindings -ts 44 | wails3 dev 45 | ``` 46 | 47 | This will start your application and enable hot-reloading for both frontend and backend changes. 48 | 49 | 3. To build your application for production, use: 50 | 51 | ``` 52 | wails3 build 53 | ``` 54 | 55 | This will create a production-ready executable in the `build` directory. 56 | 57 | ## Exploring Wails3 Features 58 | 59 | Now that you have your project set up, it's time to explore the features that Wails3 offers: 60 | 61 | 1. **Check out the examples**: The best way to learn is by example. Visit the `examples` directory in the `v3/examples` directory to see various sample applications. 62 | 63 | 2. **Run an example**: To run any of the examples, navigate to the example's directory and use: 64 | 65 | ``` 66 | go run . 67 | ``` 68 | 69 | Note: Some examples may be under development during the alpha phase. 70 | 71 | 3. **Explore the documentation**: Visit the [Wails3 documentation](https://v3.wails.io/) for in-depth guides and API references. 72 | 73 | 4. **Join the community**: Have questions or want to share your progress? Join the [Wails Discord](https://discord.gg/JDdSxwjhGf) or visit the [Wails discussions on GitHub](https://github.com/wailsapp/wails/discussions). 74 | 75 | ## Project Structure 76 | 77 | Take a moment to familiarize yourself with your project structure: 78 | 79 | - `frontend/`: Contains your frontend code (HTML, CSS, JavaScript/TypeScript) 80 | - `main.go`: The entry point of your Go backend 81 | - `app.go`: Define your application structure and methods here 82 | - `wails.json`: Configuration file for your Wails project 83 | 84 | ## Next Steps 85 | 86 | 1. Modify the frontend in the `frontend/` directory to create your desired UI. 87 | 2. Add backend functionality in `main.go`. 88 | 3. Use `wails3 dev` to see your changes in real-time. 89 | 4. When ready, build your application with `wails3 build`. 90 | 91 | Happy coding with Wails3! If you encounter any issues or have questions, don't hesitate to consult the documentation or reach out to the Wails community. 92 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # Svelte + TS + Vite 2 | 3 | This template should help get you started developing with Svelte and TypeScript in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). 8 | 9 | ## Need an official Svelte framework? 10 | 11 | Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. 12 | 13 | ## Technical considerations 14 | 15 | **Why use this over SvelteKit?** 16 | 17 | - It brings its own routing solution which might not be preferable for some users. 18 | - It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. 19 | 20 | This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. 21 | 22 | Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. 23 | 24 | **Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** 25 | 26 | Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. 27 | 28 | **Why include `.vscode/extensions.json`?** 29 | 30 | Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. 31 | 32 | **Why enable `allowJs` in the TS template?** 33 | 34 | While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant. 35 | 36 | **Why is HMR not preserving my local component state?** 37 | 38 | HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). 39 | 40 | If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. 41 | 42 | ```ts 43 | // store.ts 44 | // An extremely simple external store 45 | import { writable } from 'svelte/store' 46 | export default writable(0) 47 | ``` 48 | -------------------------------------------------------------------------------- /frontend/src/app.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", 3 | "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 4 | sans-serif; 5 | font-size: 16px; 6 | line-height: 24px; 7 | font-weight: 400; 8 | color-scheme: light dark; 9 | color: rgba(255, 255, 255, 0.87); 10 | background-color: rgba(27, 38, 54, 1); 11 | font-synthesis: none; 12 | text-rendering: optimizeLegibility; 13 | -webkit-font-smoothing: antialiased; 14 | -moz-osx-font-smoothing: grayscale; 15 | -webkit-text-size-adjust: 100%; 16 | user-select: none; 17 | -webkit-user-select: none; 18 | -moz-user-select: none; 19 | -ms-user-select: none; 20 | } 21 | 22 | @font-face { 23 | font-family: "Inter"; 24 | font-style: normal; 25 | font-weight: 400; 26 | src: local(""), 27 | url("./Inter-Medium.ttf") format("truetype"); 28 | } 29 | 30 | h3 { 31 | font-size: 3em; 32 | line-height: 1.1; 33 | } 34 | 35 | a { 36 | font-weight: 500; 37 | color: #646cff; 38 | text-decoration: inherit; 39 | } 40 | 41 | a:hover { 42 | color: #535bf2; 43 | } 44 | 45 | button { 46 | width: 60px; 47 | height: 30px; 48 | line-height: 30px; 49 | border-radius: 3px; 50 | border: none; 51 | margin: 0 0 0 20px; 52 | padding: 0 8px; 53 | cursor: pointer; 54 | } 55 | 56 | .result { 57 | height: 20px; 58 | line-height: 20px; 59 | } 60 | 61 | body { 62 | margin: 0; 63 | display: flex; 64 | place-items: center; 65 | place-content: center; 66 | min-width: 320px; 67 | min-height: 100vh; 68 | } 69 | 70 | .container { 71 | display: flex; 72 | flex-direction: column; 73 | align-items: center; 74 | justify-content: center; 75 | } 76 | 77 | h1 { 78 | font-size: 3.2em; 79 | line-height: 1.1; 80 | } 81 | 82 | #app { 83 | max-width: 1280px; 84 | margin: 0 auto; 85 | padding: 2rem; 86 | text-align: center; 87 | } 88 | 89 | .logo { 90 | height: 6em; 91 | padding: 1.5em; 92 | will-change: filter; 93 | } 94 | 95 | .logo:hover { 96 | filter: drop-shadow(0 0 2em #e80000aa); 97 | } 98 | 99 | .logo.vanilla:hover { 100 | filter: drop-shadow(0 0 2em #f7df1eaa); 101 | } 102 | 103 | .result { 104 | height: 20px; 105 | line-height: 20px; 106 | margin: 1.5rem auto; 107 | text-align: center; 108 | } 109 | 110 | .footer { 111 | margin-top: 1rem; 112 | align-content: center; 113 | text-align: center; 114 | } 115 | 116 | @media (prefers-color-scheme: light) { 117 | :root { 118 | color: #213547; 119 | background-color: #ffffff; 120 | } 121 | 122 | a:hover { 123 | color: #747bff; 124 | } 125 | 126 | button { 127 | background-color: #f9f9f9; 128 | } 129 | } 130 | 131 | 132 | .input-box .btn:hover { 133 | background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%); 134 | color: #333333; 135 | } 136 | 137 | .input-box .input { 138 | border: none; 139 | border-radius: 3px; 140 | outline: none; 141 | height: 30px; 142 | line-height: 30px; 143 | padding: 0 10px; 144 | color: black; 145 | background-color: rgba(240, 240, 240, 1); 146 | -webkit-font-smoothing: antialiased; 147 | } 148 | 149 | .input-box .input:hover { 150 | border: none; 151 | background-color: rgba(255, 255, 255, 1); 152 | } 153 | 154 | .input-box .input:focus { 155 | border: none; 156 | background-color: rgba(255, 255, 255, 1); 157 | } -------------------------------------------------------------------------------- /go.sum.tmpl: -------------------------------------------------------------------------------- 1 | dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= 2 | dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= 3 | github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= 4 | github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= 5 | github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= 6 | github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4= 7 | github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= 8 | github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78= 9 | github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ= 10 | github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= 11 | github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= 12 | github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= 13 | github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= 14 | github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= 15 | github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= 16 | github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk= 17 | github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= 18 | github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= 19 | github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= 20 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 21 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 22 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 23 | github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= 24 | github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= 25 | github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM= 26 | github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= 27 | github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= 28 | github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= 29 | github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= 30 | github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= 31 | github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= 32 | github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= 33 | github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= 34 | github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= 35 | github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= 36 | github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= 37 | github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0= 38 | github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A= 39 | github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= 40 | github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 41 | github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= 42 | github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 43 | github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= 44 | github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= 45 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 46 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 47 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 48 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 49 | github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= 50 | github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= 51 | github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= 52 | github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= 53 | github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= 54 | github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= 55 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 56 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 57 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 58 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 59 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 60 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 61 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 62 | github.com/leaanthony/go-ansi-parser v1.6.1 h1:xd8bzARK3dErqkPFtoF9F3/HgN8UQk0ed1YDKpEz01A= 63 | github.com/leaanthony/go-ansi-parser v1.6.1/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= 64 | github.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M= 65 | github.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= 66 | github.com/lmittmann/tint v1.0.7 h1:D/0OqWZ0YOGZ6AyC+5Y2kD8PBEzBk6rFHVSfOqCkF9Y= 67 | github.com/lmittmann/tint v1.0.7/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= 68 | github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= 69 | github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= 70 | github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= 71 | github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= 72 | github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= 73 | github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 74 | github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 75 | github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= 76 | github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= 77 | github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= 78 | github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= 79 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= 80 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= 81 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 82 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 83 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 84 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 85 | github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 86 | github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= 87 | github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 88 | github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= 89 | github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= 90 | github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= 91 | github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= 92 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 93 | github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 94 | github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 95 | github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= 96 | github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= 97 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 98 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 99 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 100 | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 101 | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 102 | github.com/wailsapp/go-webview2 v1.0.19 h1:7U3QcDj1PrBPaxJNCui2k1SkWml+Q5kvFUFyTImA6NU= 103 | github.com/wailsapp/go-webview2 v1.0.19/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= 104 | github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= 105 | github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= 106 | github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= 107 | github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= 108 | golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 109 | golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= 110 | golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= 111 | golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac h1:l5+whBCLH3iH2ZNHYLbAe58bo7yrN4mVcnkHDYz5vvs= 112 | golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac/go.mod h1:hH+7mtFmImwwcMvScyxUhjuVHR3HGaDPMn9rMSUUbxo= 113 | golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 114 | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 115 | golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= 116 | golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= 117 | golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 118 | golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 119 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 120 | golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 121 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 122 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 123 | golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 124 | golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 125 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 126 | golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= 127 | golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 128 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 129 | golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= 130 | golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= 131 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 132 | golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= 133 | golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= 134 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 135 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 136 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 137 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 138 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 139 | gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= 140 | gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 141 | gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= 142 | gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= 143 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 144 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 145 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 146 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 147 | --------------------------------------------------------------------------------