├── frontend ├── build │ ├── robots.txt │ ├── favicon.ico │ ├── logo192.png │ ├── logo512.png │ ├── static │ │ ├── media │ │ │ ├── nunito-v16-latin-regular.39a18f44.woff2 │ │ │ └── logo-dark.03e67650.svg │ │ ├── js │ │ │ ├── 2.bbce5adf.chunk.js.LICENSE.txt │ │ │ ├── main.a98ab904.chunk.js │ │ │ ├── runtime-main.697ccc74.js │ │ │ ├── main.a98ab904.chunk.js.map │ │ │ ├── 3.13a95277.chunk.js │ │ │ ├── 3.13a95277.chunk.js.map │ │ │ ├── runtime-main.697ccc74.js.map │ │ │ └── 2.bbce5adf.chunk.js │ │ └── css │ │ │ ├── main.7e3ca2fb.chunk.css │ │ │ └── main.7e3ca2fb.chunk.css.map │ ├── manifest.json │ ├── asset-manifest.json │ └── index.html ├── public │ ├── robots.txt │ ├── favicon.ico │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── index.html ├── src │ ├── assets │ │ ├── fonts │ │ │ ├── nunito-v16-latin-regular.woff2 │ │ │ └── OFL.txt │ │ └── images │ │ │ └── logo-dark.svg │ ├── setupTests.js │ ├── App.test.js │ ├── index.css │ ├── reportWebVitals.js │ ├── index.js │ ├── App.js │ ├── App.css │ └── logo.svg ├── package.tmpl.json └── README.md ├── template.json ├── wails.tmpl.json ├── README.md ├── app.tmpl.go ├── main.tmpl.go ├── go.mod.tmpl └── go.sum /frontend/build/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /frontend/build/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/build/favicon.ico -------------------------------------------------------------------------------- /frontend/build/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/build/logo192.png -------------------------------------------------------------------------------- /frontend/build/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/build/logo512.png -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/public/logo192.png -------------------------------------------------------------------------------- /frontend/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/public/logo512.png -------------------------------------------------------------------------------- /frontend/src/assets/fonts/nunito-v16-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 -------------------------------------------------------------------------------- /frontend/build/static/media/nunito-v16-latin-regular.39a18f44.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlienRecall/wails-react-template/HEAD/frontend/build/static/media/nunito-v16-latin-regular.39a18f44.woff2 -------------------------------------------------------------------------------- /template.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Long name", 3 | "shortname": "wails-react-template", 4 | "author": "@AlienRecall", 5 | "description": "Description of the template", 6 | "helpurl": "https://github.com/AlienRecall/wails-react-template" 7 | } -------------------------------------------------------------------------------- /frontend/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /frontend/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /wails.tmpl.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "{{.ProjectName}}", 3 | "assetdir": "frontend/build", 4 | "outputfilename": "{{.BinaryName}}", 5 | "frontend:install": "npm install", 6 | "frontend:build": "npm run build", 7 | "wailsjsdir": "./frontend", 8 | "author": { 9 | "name": "{{.AuthorName}}", 10 | "email": "{{.AuthorEmail}}" 11 | } 12 | } -------------------------------------------------------------------------------- /frontend/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /frontend/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /frontend/build/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # README 2 | 3 | ## About 4 | 5 | This is Wails 2.0 + ReactJS Template 6 | Tested on Windows and MacOS 7 | 8 | To create a project using this template run: 9 | `wails init -n [Your Appname] -t https://github.com/AlienRecall/wails-react-template` 10 | 11 | ## Building 12 | 13 | To build this project use `wails build`. 14 | 15 | ## Live Development 16 | 17 | To run in live development mode, run `wails dev` in the project directory. The frontend dev server will run on http://localhost:34115. Wails will watch and re-build for every backend (golang) changes. 18 | 19 | ## Known Issues 20 | 21 | Sadly I still not found a way to correclty run frontend in development mode so the only solution is to rebuild at every frontend change (if you got a way open a pull request thanks) 22 | -------------------------------------------------------------------------------- /frontend/src/App.js: -------------------------------------------------------------------------------- 1 | import './App.css'; 2 | import React, { useState } from "react"; 3 | 4 | function App() { 5 | const [test, setTest] = useState([]); 6 | 7 | const Greet = (data) => { 8 | window.go.main.App.Greet(test).then(data => { 9 | document.getElementById("result").innerText = data; 10 | }); 11 | } 12 | 13 | return ( 14 |
15 |
16 |
Please enter your name below 👇 17 |
18 | { setTest(e.target.value) }}> 19 | 20 |
21 |
22 |
23 | ); 24 | } 25 | 26 | export default App; 27 | -------------------------------------------------------------------------------- /app.tmpl.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | ) 7 | 8 | // App struct 9 | type App struct { 10 | ctx context.Context 11 | } 12 | 13 | // NewApp creates a new App application struct 14 | func NewApp() *App { 15 | return &App{} 16 | } 17 | 18 | // startup is called at application startup 19 | func (a *App) startup(ctx context.Context) { 20 | // Perform your setup here 21 | a.ctx = ctx 22 | } 23 | 24 | // domReady is called after the front-end dom has been loaded 25 | func (a App) domReady(ctx context.Context) { 26 | // Add your action here 27 | } 28 | 29 | // shutdown is called at application termination 30 | func (a *App) shutdown(ctx context.Context) { 31 | // Perform your teardown here 32 | } 33 | 34 | // Greet returns a greeting for the given name 35 | func (a *App) Greet(name string) string { 36 | return fmt.Sprintf("Hello %s!", name) 37 | } 38 | -------------------------------------------------------------------------------- /frontend/package.tmpl.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "{{.ProjectName}}", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "", 6 | "dependencies": { 7 | "@testing-library/jest-dom": "^5.15.0", 8 | "@testing-library/react": "^11.2.7", 9 | "@testing-library/user-event": "^12.8.3", 10 | "react": "^17.0.2", 11 | "react-dom": "^17.0.2", 12 | "react-scripts": "4.0.3", 13 | "web-vitals": "^1.1.2" 14 | }, 15 | "scripts": { 16 | "start": "react-scripts start", 17 | "build": "react-scripts build", 18 | "test": "react-scripts test", 19 | "eject": "react-scripts eject" 20 | }, 21 | "eslintConfig": { 22 | "extends": [ 23 | "react-app", 24 | "react-app/jest" 25 | ] 26 | }, 27 | "browserslist": { 28 | "production": [ 29 | ">0.2%", 30 | "not dead", 31 | "not op_mini all" 32 | ], 33 | "development": [ 34 | "last 1 chrome version", 35 | "last 1 firefox version", 36 | "last 1 safari version" 37 | ] 38 | }, 39 | "keywords": [], 40 | "author": "{{.AuthorName}}" 41 | } -------------------------------------------------------------------------------- /frontend/build/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "main.css": "/static/css/main.7e3ca2fb.chunk.css", 4 | "main.js": "/static/js/main.a98ab904.chunk.js", 5 | "main.js.map": "/static/js/main.a98ab904.chunk.js.map", 6 | "runtime-main.js": "/static/js/runtime-main.697ccc74.js", 7 | "runtime-main.js.map": "/static/js/runtime-main.697ccc74.js.map", 8 | "static/js/2.bbce5adf.chunk.js": "/static/js/2.bbce5adf.chunk.js", 9 | "static/js/2.bbce5adf.chunk.js.map": "/static/js/2.bbce5adf.chunk.js.map", 10 | "static/js/3.13a95277.chunk.js": "/static/js/3.13a95277.chunk.js", 11 | "static/js/3.13a95277.chunk.js.map": "/static/js/3.13a95277.chunk.js.map", 12 | "index.html": "/index.html", 13 | "static/css/main.7e3ca2fb.chunk.css.map": "/static/css/main.7e3ca2fb.chunk.css.map", 14 | "static/js/2.bbce5adf.chunk.js.LICENSE.txt": "/static/js/2.bbce5adf.chunk.js.LICENSE.txt", 15 | "static/media/App.css": "/static/media/nunito-v16-latin-regular.39a18f44.woff2" 16 | }, 17 | "entrypoints": [ 18 | "static/js/runtime-main.697ccc74.js", 19 | "static/js/2.bbce5adf.chunk.js", 20 | "static/css/main.7e3ca2fb.chunk.css", 21 | "static/js/main.a98ab904.chunk.js" 22 | ] 23 | } -------------------------------------------------------------------------------- /frontend/build/static/js/2.bbce5adf.chunk.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /* 2 | object-assign 3 | (c) Sindre Sorhus 4 | @license MIT 5 | */ 6 | 7 | /** @license React v0.20.2 8 | * scheduler.production.min.js 9 | * 10 | * Copyright (c) Facebook, Inc. and its affiliates. 11 | * 12 | * This source code is licensed under the MIT license found in the 13 | * LICENSE file in the root directory of this source tree. 14 | */ 15 | 16 | /** @license React v17.0.2 17 | * react-dom.production.min.js 18 | * 19 | * Copyright (c) Facebook, Inc. and its affiliates. 20 | * 21 | * This source code is licensed under the MIT license found in the 22 | * LICENSE file in the root directory of this source tree. 23 | */ 24 | 25 | /** @license React v17.0.2 26 | * react-jsx-runtime.production.min.js 27 | * 28 | * Copyright (c) Facebook, Inc. and its affiliates. 29 | * 30 | * This source code is licensed under the MIT license found in the 31 | * LICENSE file in the root directory of this source tree. 32 | */ 33 | 34 | /** @license React v17.0.2 35 | * react.production.min.js 36 | * 37 | * Copyright (c) Facebook, Inc. and its affiliates. 38 | * 39 | * This source code is licensed under the MIT license found in the 40 | * LICENSE file in the root directory of this source tree. 41 | */ 42 | -------------------------------------------------------------------------------- /frontend/build/static/js/main.a98ab904.chunk.js: -------------------------------------------------------------------------------- 1 | (this.webpackJsonpfrontend=this.webpackJsonpfrontend||[]).push([[0],{10:function(e,t,n){},12:function(e,t,n){"use strict";n.r(t);var c=n(1),o=n.n(c),i=n(3),s=n.n(i),a=(n(9),n(4)),r=(n(10),n(0));var u=function(){var e=Object(c.useState)([]),t=Object(a.a)(e,2),n=t[0],o=t[1];return Object(r.jsxs)("div",{children:[Object(r.jsx)("div",{className:"logo"}),Object(r.jsxs)("div",{className:"result",id:"result",children:["Please enter your name below \ud83d\udc47",Object(r.jsxs)("div",{className:"input-box",id:"input","data-wails-no-drag":!0,children:[Object(r.jsx)("input",{className:"input",id:"name",type:"text",autoComplete:"off",onChange:function(e){o(e.target.value)}}),Object(r.jsx)("button",{className:"btn",onClick:function(){window.go.main.App.Greet(n).then((function(e){console.log("received: ",e,"from go"),document.getElementById("result").innerText=e}))},children:"Greet"})]})]})]})},l=function(e){e&&e instanceof Function&&n.e(3).then(n.bind(null,13)).then((function(t){var n=t.getCLS,c=t.getFID,o=t.getFCP,i=t.getLCP,s=t.getTTFB;n(e),c(e),o(e),i(e),s(e)}))};s.a.render(Object(r.jsx)(o.a.StrictMode,{children:Object(r.jsx)(u,{})}),document.getElementById("root")),l()},9:function(e,t,n){}},[[12,1,2]]]); 2 | //# sourceMappingURL=main.a98ab904.chunk.js.map -------------------------------------------------------------------------------- /frontend/build/static/css/main.7e3ca2fb.chunk.css: -------------------------------------------------------------------------------- 1 | body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}html{background-color:rgba(33,37,43,.2);text-align:center;color:#fff}body{margin:0;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-ms-scroll-chaining:none;overscroll-behavior:none}@font-face{font-family:"Nunito";font-style:normal;font-weight:400;src:local(""),url(/static/media/nunito-v16-latin-regular.39a18f44.woff2) format("woff2")}.logo{display:block;width:35%;height:35%;margin:auto;padding:15% 0 0;background-position:50%;background-repeat:no-repeat;background-image:url(/static/media/logo-dark.03e67650.svg)}.result{height:20px;line-height:20px;margin:1.5rem auto}.input-box .btn{width:60px;height:30px;line-height:30px;border-radius:3px;border:none;margin:0 0 0 20px;padding:0 8px;cursor:pointer}.input-box .btn:hover{background-image:linear-gradient(0deg,#cfd9df 0,#e2ebf0);color:#333}.input-box .input{border:none;border-radius:3px;outline:none;height:30px;line-height:30px;padding:0 10px;background-color:#f0f0f0;-webkit-font-smoothing:antialiased}.input-box .input:focus,.input-box .input:hover{border:none;background-color:#fff} 2 | /*# sourceMappingURL=main.7e3ca2fb.chunk.css.map */ -------------------------------------------------------------------------------- /frontend/src/App.css: -------------------------------------------------------------------------------- 1 | html { 2 | background-color: rgba(33, 37, 43, 0.2); 3 | text-align: center; 4 | color: white; 5 | } 6 | 7 | body { 8 | margin: 0; 9 | font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", 10 | "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 11 | sans-serif; 12 | overscroll-behavior: none; 13 | } 14 | 15 | @font-face { 16 | font-family: "Nunito"; 17 | font-style: normal; 18 | font-weight: 400; 19 | src: local(""), 20 | url("./assets/fonts/nunito-v16-latin-regular.woff2") format("woff2"); 21 | } 22 | 23 | .logo { 24 | display: block; 25 | width: 35%; 26 | height: 35%; 27 | margin: auto; 28 | padding: 15% 0 0; 29 | background-position: center; 30 | background-repeat: no-repeat; 31 | background-image: url("./assets/images/logo-dark.svg"); 32 | } 33 | .result { 34 | height: 20px; 35 | line-height: 20px; 36 | margin: 1.5rem auto; 37 | } 38 | .input-box .btn { 39 | width: 60px; 40 | height: 30px; 41 | line-height: 30px; 42 | border-radius: 3px; 43 | border: none; 44 | margin: 0 0 0 20px; 45 | padding: 0 8px; 46 | cursor: pointer; 47 | } 48 | .input-box .btn:hover { 49 | background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%); 50 | color: #333333; 51 | } 52 | 53 | .input-box .input { 54 | border: none; 55 | border-radius: 3px; 56 | outline: none; 57 | height: 30px; 58 | line-height: 30px; 59 | padding: 0 10px; 60 | background-color: rgba(240, 240, 240, 1); 61 | -webkit-font-smoothing: antialiased; 62 | } 63 | 64 | .input-box .input:hover { 65 | border: none; 66 | background-color: rgba(255, 255, 255, 1); 67 | } 68 | 69 | .input-box .input:focus { 70 | border: none; 71 | background-color: rgba(255, 255, 255, 1); 72 | } -------------------------------------------------------------------------------- /main.tmpl.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "embed" 5 | "log" 6 | 7 | "github.com/wailsapp/wails/v2/pkg/options/mac" 8 | 9 | "github.com/wailsapp/wails/v2" 10 | "github.com/wailsapp/wails/v2/pkg/logger" 11 | "github.com/wailsapp/wails/v2/pkg/options" 12 | "github.com/wailsapp/wails/v2/pkg/options/windows" 13 | ) 14 | 15 | //go:embed frontend/build 16 | var assets embed.FS 17 | 18 | //go:embed build/appicon.png 19 | var icon []byte 20 | 21 | func main() { 22 | // Create an instance of the app structure 23 | app := NewApp() 24 | 25 | // Create application with options 26 | err := wails.Run(&options.App{ 27 | Title: "{{.ProjectName}}", 28 | Width: 1024, 29 | Height: 768, 30 | // MinWidth: 720, 31 | // MinHeight: 570, 32 | // MaxWidth: 1280, 33 | // MaxHeight: 740, 34 | DisableResize: false, 35 | Fullscreen: false, 36 | Frameless: false, 37 | StartHidden: false, 38 | HideWindowOnClose: false, 39 | RGBA: &options.RGBA{255, 255, 255, 255}, 40 | Assets: assets, 41 | LogLevel: logger.DEBUG, 42 | OnStartup: app.startup, 43 | OnDomReady: app.domReady, 44 | OnShutdown: app.shutdown, 45 | Bind: []interface{}{ 46 | app, 47 | }, 48 | // Windows platform specific options 49 | Windows: &windows.Options{ 50 | WebviewIsTransparent: false, 51 | WindowIsTranslucent: false, 52 | DisableWindowIcon: false, 53 | }, 54 | Mac: &mac.Options{ 55 | TitleBar: mac.TitleBarHiddenInset(), 56 | WebviewIsTransparent: true, 57 | WindowIsTranslucent: true, 58 | About: &mac.AboutInfo{ 59 | Title: "ReactJS Template", 60 | Message: "Part of the Wails projects", 61 | Icon: icon, 62 | }, 63 | }, 64 | }) 65 | 66 | if err != nil { 67 | log.Fatal(err) 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /go.mod.tmpl: -------------------------------------------------------------------------------- 1 | module changeme 2 | 3 | go 1.17 4 | 5 | require github.com/wailsapp/wails/v2 {{.WailsVersion}} 6 | 7 | require ( 8 | github.com/andybalholm/brotli v1.0.2 // indirect 9 | github.com/davecgh/go-spew v1.1.1 // indirect 10 | github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab // indirect 11 | github.com/gabriel-vasile/mimetype v1.3.1 // indirect 12 | github.com/go-ole/go-ole v1.2.5 // indirect 13 | github.com/gofiber/fiber/v2 v2.17.0 // indirect 14 | github.com/gofiber/websocket/v2 v2.0.8 // indirect 15 | github.com/google/uuid v1.1.2 // indirect 16 | github.com/imdario/mergo v0.3.12 // indirect 17 | github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect 18 | github.com/klauspost/compress v1.12.2 // indirect 19 | github.com/leaanthony/debme v1.2.1 // indirect 20 | github.com/leaanthony/go-ansi-parser v1.0.1 // indirect 21 | github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect 22 | github.com/leaanthony/go-webview2 v0.0.0-20210914103035-f00aa774a934 // indirect 23 | github.com/leaanthony/slicer v1.5.0 // indirect 24 | github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect 25 | github.com/leaanthony/webview2runtime v1.1.0 // indirect 26 | github.com/leaanthony/winc v0.0.0-20210921073452-54963136bf18 // indirect 27 | github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect 28 | github.com/pkg/errors v0.9.1 // indirect 29 | github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f // indirect 30 | github.com/tkrajina/go-reflector v0.5.5 // indirect 31 | github.com/valyala/bytebufferpool v1.0.0 // indirect 32 | github.com/valyala/fasthttp v1.28.0 // indirect 33 | github.com/valyala/tcplisten v1.0.0 // indirect 34 | golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect 35 | golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect 36 | ) 37 | 38 | // replace github.com/wailsapp/wails/v2 {{.WailsVersion}} => {{.WailsDirectory}} -------------------------------------------------------------------------------- /frontend/build/static/js/runtime-main.697ccc74.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],s=0,p=[];s -------------------------------------------------------------------------------- /frontend/build/static/css/main.7e3ca2fb.chunk.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack://src/index.css","webpack://src/App.css"],"names":[],"mappings":"AAAA,KAEE,mJAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,yEAEF,CCZA,KACE,kCAAuC,CACvC,iBAAkB,CAClB,UACF,CAEA,KACE,QAAS,CACT,4JAEU,CACV,wBAAyB,CAAzB,wBACF,CAEA,WACE,oBAAqB,CACrB,iBAAkB,CAClB,eAAgB,CAChB,wFAEF,CAEA,MACE,aAAc,CACd,SAAU,CACV,UAAW,CACX,WAAY,CACZ,eAAgB,CAChB,uBAA2B,CAC3B,2BAA4B,CAC5B,0DACF,CACA,QACE,WAAY,CACZ,gBAAiB,CACjB,kBACF,CACA,gBACE,UAAW,CACX,WAAY,CACZ,gBAAiB,CACjB,iBAAkB,CAClB,WAAY,CACZ,iBAAkB,CAClB,aAAc,CACd,cACF,CACA,sBACE,wDAAmE,CACnE,UACF,CAEA,kBACE,WAAY,CACZ,iBAAkB,CAClB,YAAa,CACb,WAAY,CACZ,gBAAiB,CACjB,cAAe,CACf,wBAAwC,CACxC,kCACF,CAOA,gDAJE,WAAY,CACZ,qBAMF","file":"main.7e3ca2fb.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","html {\n background-color: rgba(33, 37, 43, 0.2);\n text-align: center;\n color: white;\n}\n\nbody {\n margin: 0;\n font-family: \"Nunito\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\",\n \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n overscroll-behavior: none;\n}\n\n@font-face {\n font-family: \"Nunito\";\n font-style: normal;\n font-weight: 400;\n src: local(\"\"),\n url(\"./assets/fonts/nunito-v16-latin-regular.woff2\") format(\"woff2\");\n}\n\n.logo {\n display: block;\n width: 35%;\n height: 35%;\n margin: auto;\n padding: 15% 0 0;\n background-position: center;\n background-repeat: no-repeat;\n background-image: url(\"./assets/images/logo-dark.svg\");\n}\n.result {\n height: 20px;\n line-height: 20px;\n margin: 1.5rem auto;\n}\n.input-box .btn {\n width: 60px;\n height: 30px;\n line-height: 30px;\n border-radius: 3px;\n border: none;\n margin: 0 0 0 20px;\n padding: 0 8px;\n cursor: pointer;\n}\n.input-box .btn:hover {\n background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%);\n color: #333333;\n}\n\n.input-box .input {\n border: none;\n border-radius: 3px;\n outline: none;\n height: 30px;\n line-height: 30px;\n padding: 0 10px;\n background-color: rgba(240, 240, 240, 1);\n -webkit-font-smoothing: antialiased;\n}\n\n.input-box .input:hover {\n border: none;\n background-color: rgba(255, 255, 255, 1);\n}\n\n.input-box .input:focus {\n border: none;\n background-color: rgba(255, 255, 255, 1);\n}"]} -------------------------------------------------------------------------------- /frontend/build/static/js/main.a98ab904.chunk.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["App.js","reportWebVitals.js","index.js"],"names":["App","useState","test","setTest","className","id","type","autoComplete","onChange","e","target","value","onClick","window","go","main","Greet","then","data","console","log","document","getElementById","innerText","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode"],"mappings":"kMA0BeA,MAvBf,WACE,MAAwBC,mBAAS,IAAjC,mBAAOC,EAAP,KAAaC,EAAb,KASA,OACI,gCACE,qBAAKC,UAAU,SACf,sBAAKA,UAAU,SAASC,GAAG,SAA3B,sDACE,sBAAKD,UAAU,YAAYC,GAAG,QAAQ,wBAAtC,UACE,uBAAOD,UAAU,QAAQC,GAAG,OAAOC,KAAK,OAAOC,aAAa,MAAMC,SAAU,SAAAC,GAAIN,EAAQM,EAAEC,OAAOC,UACjG,wBAAQP,UAAU,MAAMQ,QAAS,WAZzCC,OAAOC,GAAGC,KAAKf,IAAIgB,MAAMd,GAAMe,MAAK,SAAAC,GAClCC,QAAQC,IAAI,aAAcF,EAAM,WAChCG,SAASC,eAAe,UAAUC,UAAYL,MAUxC,6BCPGM,EAZS,SAAAC,GAClBA,GAAeA,aAAuBC,UACxC,6BAAqBT,MAAK,YAAkD,IAA/CU,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCDdO,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,EAAD,MAEFb,SAASC,eAAe,SAM1BE,K","file":"static/js/main.a98ab904.chunk.js","sourcesContent":["import './App.css';\nimport React, {useState} from \"react\";\n\nfunction App() {\n const [test, setTest] = useState([]);\n\n const Greet = (data) => {\n window.go.main.App.Greet(test).then(data => {\n console.log(\"received: \", data, \"from go\")\n document.getElementById(\"result\").innerText = data;\n });\n }\n\n return (\n
\n
\n
Please enter your name below 👇\n
\n {setTest(e.target.value)}}>\n \n
\n
\n
\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""} -------------------------------------------------------------------------------- /frontend/build/index.html: -------------------------------------------------------------------------------- 1 | React App
-------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with Create React App 2 | 3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 4 | 5 | ## Available Scripts 6 | 7 | In the project directory, you can run: 8 | 9 | ### `npm start` 10 | 11 | Runs the app in the development mode.\ 12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 13 | 14 | The page will reload if you make edits.\ 15 | You will also see any lint errors in the console. 16 | 17 | ### `npm test` 18 | 19 | Launches the test runner in the interactive watch mode.\ 20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 21 | 22 | ### `npm run build` 23 | 24 | Builds the app for production to the `build` folder.\ 25 | It correctly bundles React in production mode and optimizes the build for the best performance. 26 | 27 | The build is minified and the filenames include the hashes.\ 28 | Your app is ready to be deployed! 29 | 30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 31 | 32 | ### `npm run eject` 33 | 34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!** 35 | 36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 37 | 38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. 39 | 40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. 41 | 42 | ## Learn More 43 | 44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 45 | 46 | To learn React, check out the [React documentation](https://reactjs.org/). 47 | 48 | ### Code Splitting 49 | 50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) 51 | 52 | ### Analyzing the Bundle Size 53 | 54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) 55 | 56 | ### Making a Progressive Web App 57 | 58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) 59 | 60 | ### Advanced Configuration 61 | 62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) 63 | 64 | ### Deployment 65 | 66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) 67 | 68 | ### `npm run build` fails to minify 69 | 70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) 71 | -------------------------------------------------------------------------------- /frontend/build/static/js/3.13a95277.chunk.js: -------------------------------------------------------------------------------- 1 | (this.webpackJsonpfrontend=this.webpackJsonpfrontend||[]).push([[3],{13:function(t,e,n){"use strict";n.r(e),n.d(e,"getCLS",(function(){return p})),n.d(e,"getFCP",(function(){return S})),n.d(e,"getFID",(function(){return F})),n.d(e,"getLCP",(function(){return k})),n.d(e,"getTTFB",(function(){return C}));var i,a,r,o,u=function(t,e){return{name:t,value:void 0===e?-1:e,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){if("first-input"===t&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(t){return t.getEntries().map(e)}));return n.observe({type:t,buffered:!0}),n}}catch(t){}},f=function(t,e){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(t(i),e&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(t){addEventListener("pageshow",(function(e){e.persisted&&t(e)}),!0)},d="function"==typeof WeakSet?new WeakSet:new Set,m=function(t,e,n){var i;return function(){e.value>=0&&(n||d.has(e)||"hidden"===document.visibilityState)&&(e.delta=e.value-(i||0),(e.delta||void 0===i)&&(i=e.value,t(e)))}},p=function(t,e){var n,i=u("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),n())},r=c("layout-shift",a);r&&(n=m(t,i,e),f((function(){r.takeRecords().map(a),n()})),s((function(){i=u("CLS",0),n=m(t,i,e)})))},v=-1,l=function(){return"hidden"===document.visibilityState?0:1/0},h=function(){f((function(t){var e=t.timeStamp;v=e}),!0)},g=function(){return v<0&&(v=l(),h(),s((function(){setTimeout((function(){v=l(),h()}),0)}))),{get timeStamp(){return v}}},S=function(t,e){var n,i=g(),a=u("FCP"),r=function(t){"first-contentful-paint"===t.name&&(f&&f.disconnect(),t.startTime=0&&a1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,e){var n=function(){w(t,e),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,y),removeEventListener("pointercancel",i,y)};addEventListener("pointerup",n,y),addEventListener("pointercancel",i,y)}(e,t):w(e,t)}},b=function(t){["mousedown","keydown","touchstart","pointerdown"].forEach((function(e){return t(e,T,y)}))},F=function(t,e){var n,r=g(),p=u("FID"),v=function(t){t.startTime 2 | 3 | 6 | 7 | 9 | 10 | 11 | 13 | 14 | 15 | 17 | 18 | 19 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 44 | 45 | 46 | 47 | 48 | 50 | 51 | 52 | 53 | 54 | 55 | 57 | 58 | 60 | 61 | 63 | 64 | 66 | 67 | 69 | 70 | 72 | 73 | 75 | 76 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /frontend/build/static/media/logo-dark.03e67650.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 9 | 10 | 11 | 13 | 14 | 15 | 17 | 18 | 19 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 44 | 45 | 46 | 47 | 48 | 50 | 51 | 52 | 53 | 54 | 55 | 57 | 58 | 60 | 61 | 63 | 64 | 66 | 67 | 69 | 70 | 72 | 73 | 75 | 76 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /frontend/build/static/js/3.13a95277.chunk.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../node_modules/web-vitals/dist/web-vitals.js"],"names":["e","t","n","i","a","name","value","delta","entries","id","concat","Date","now","Math","floor","random","r","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","c","persisted","u","WeakSet","Set","f","has","s","hadRecentInput","push","takeRecords","m","p","v","timeStamp","d","setTimeout","l","disconnect","startTime","add","performance","getEntriesByName","requestAnimationFrame","h","passive","capture","S","y","w","g","entryType","target","cancelable","processingStart","forEach","E","L","T","once","b","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"mappings":"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","file":"static/js/3.13a95277.chunk.js","sourcesContent":["var e,t,n,i,a=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v1-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},r=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},c=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},u=\"function\"==typeof WeakSet?new WeakSet:new Set,f=function(e,t,n){var i;return function(){t.value>=0&&(n||u.has(t)||\"hidden\"===document.visibilityState)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},s=function(e,t){var n,i=a(\"CLS\",0),u=function(e){e.hadRecentInput||(i.value+=e.value,i.entries.push(e),n())},s=r(\"layout-shift\",u);s&&(n=f(e,i,t),o((function(){s.takeRecords().map(u),n()})),c((function(){i=a(\"CLS\",0),n=f(e,i,t)})))},m=-1,p=function(){return\"hidden\"===document.visibilityState?0:1/0},v=function(){o((function(e){var t=e.timeStamp;m=t}),!0)},d=function(){return m<0&&(m=p(),v(),c((function(){setTimeout((function(){m=p(),v()}),0)}))),{get timeStamp(){return m}}},l=function(e,t){var n,i=d(),o=a(\"FCP\"),s=function(e){\"first-contentful-paint\"===e.name&&(p&&p.disconnect(),e.startTime=0&&t1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){y(e,t),a()},i=function(){a()},a=function(){removeEventListener(\"pointerup\",n,h),removeEventListener(\"pointercancel\",i,h)};addEventListener(\"pointerup\",n,h),addEventListener(\"pointercancel\",i,h)}(t,e):y(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,E,h)}))},L=function(n,s){var m,p=d(),v=a(\"FID\"),l=function(e){e.startTimee.length)&&(t=e.length);for(var n=0,r=new Array(t);n