commit c2a806ed0b5dd7a32029f0e27c02b9bf8b16b82b
Author: icezhb <860435387@qq.com>
Date: Sat Jul 13 19:19:01 2024 +0800
first commit
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..3dce414
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
\ No newline at end of file
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..a6f34fe
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,4 @@
+node_modules
+dist
+out
+.gitignore
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..55db58d
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,15 @@
+/* eslint-env node */
+require('@rushstack/eslint-patch/modern-module-resolution')
+
+module.exports = {
+ extends: [
+ 'eslint:recommended',
+ 'plugin:vue/vue3-recommended',
+ '@electron-toolkit',
+ '@vue/eslint-config-prettier'
+ ],
+ rules: {
+ 'vue/require-default-prop': 'off',
+ 'vue/multi-word-component-names': 'off'
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..697cc4b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+node_modules
+dist
+out
+.DS_Store
+*.log*
+pnpm-lock.yaml
+package-lock.json
+.vscode
+.idea
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..34862ff
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,2 @@
+electron_mirror=https://npmmirror.com/mirrors/electron/
+electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..9c6b791
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,6 @@
+out
+dist
+pnpm-lock.yaml
+LICENSE.md
+tsconfig.json
+tsconfig.*.json
diff --git a/.prettierrc.yaml b/.prettierrc.yaml
new file mode 100644
index 0000000..35893b3
--- /dev/null
+++ b/.prettierrc.yaml
@@ -0,0 +1,4 @@
+singleQuote: true
+semi: false
+printWidth: 100
+trailingComma: none
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8b4c7cd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,34 @@
+# lol-assistant
+
+An Electron application with Vue
+
+## Recommended IDE Setup
+
+- [VSCode](https://code.visualstudio.com/) + [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)
+
+## Project Setup
+
+### Install
+
+```bash
+$ npm install
+```
+
+### Development
+
+```bash
+$ npm run dev
+```
+
+### Build
+
+```bash
+# For windows
+$ npm run build:win
+
+# For macOS
+$ npm run build:mac
+
+# For Linux
+$ npm run build:linux
+```
diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist
new file mode 100644
index 0000000..38c887b
--- /dev/null
+++ b/build/entitlements.mac.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.allow-dyld-environment-variables
+
+
+
diff --git a/build/icon.icns b/build/icon.icns
new file mode 100644
index 0000000..28644aa
Binary files /dev/null and b/build/icon.icns differ
diff --git a/build/icon.ico b/build/icon.ico
new file mode 100644
index 0000000..72c391e
Binary files /dev/null and b/build/icon.ico differ
diff --git a/build/icon.png b/build/icon.png
new file mode 100644
index 0000000..cf9e8b2
Binary files /dev/null and b/build/icon.png differ
diff --git a/dev-app-update.yml b/dev-app-update.yml
new file mode 100644
index 0000000..c4fcafc
--- /dev/null
+++ b/dev-app-update.yml
@@ -0,0 +1,3 @@
+provider: generic
+url: https://example.com/auto-updates
+updaterCacheDirName: lol-assistant-updater
diff --git a/electron-builder.yml b/electron-builder.yml
new file mode 100644
index 0000000..c0dfc87
--- /dev/null
+++ b/electron-builder.yml
@@ -0,0 +1,44 @@
+appId: com.electron.app
+productName: lol-assistant
+directories:
+ buildResources: build
+files:
+ - '!**/.vscode/*'
+ - '!src/*'
+ - '!electron.vite.config.{js,ts,mjs,cjs}'
+ - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}'
+ - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}'
+asarUnpack:
+ - resources/**
+win:
+ executableName: lol-assistant
+nsis:
+ artifactName: ${name}-${version}-setup.${ext}
+ shortcutName: ${productName}
+ uninstallDisplayName: ${productName}
+ createDesktopShortcut: always
+mac:
+ entitlementsInherit: build/entitlements.mac.plist
+ extendInfo:
+ - NSCameraUsageDescription: Application requests access to the device's camera.
+ - NSMicrophoneUsageDescription: Application requests access to the device's microphone.
+ - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder.
+ - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder.
+ notarize: false
+dmg:
+ artifactName: ${name}-${version}.${ext}
+linux:
+ target:
+ - AppImage
+ - snap
+ - deb
+ maintainer: electronjs.org
+ category: Utility
+appImage:
+ artifactName: ${name}-${version}.${ext}
+npmRebuild: false
+publish:
+ provider: generic
+ url: https://example.com/auto-updates
+electronDownload:
+ mirror: https://npmmirror.com/mirrors/electron/
diff --git a/electron.vite.config.mjs b/electron.vite.config.mjs
new file mode 100644
index 0000000..470c4a0
--- /dev/null
+++ b/electron.vite.config.mjs
@@ -0,0 +1,20 @@
+import { resolve } from 'path'
+import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
+import vue from '@vitejs/plugin-vue'
+
+export default defineConfig({
+ main: {
+ plugins: [externalizeDepsPlugin()]
+ },
+ preload: {
+ plugins: [externalizeDepsPlugin()]
+ },
+ renderer: {
+ resolve: {
+ alias: {
+ '@renderer': resolve('src/renderer/src')
+ }
+ },
+ plugins: [vue()]
+ }
+})
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..f975591
--- /dev/null
+++ b/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "lol-assistant",
+ "version": "1.0.0",
+ "description": "An Electron application with Vue",
+ "main": "./out/main/index.js",
+ "author": "example.com",
+ "homepage": "https://electron-vite.org",
+ "scripts": {
+ "format": "prettier --write .",
+ "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
+ "start": "electron-vite preview",
+ "dev": "electron-vite dev",
+ "build": "electron-vite build",
+ "postinstall": "electron-builder install-app-deps",
+ "build:unpack": "npm run build && electron-builder --dir",
+ "build:win": "npm run build && electron-builder --win",
+ "build:mac": "npm run build && electron-builder --mac",
+ "build:linux": "npm run build && electron-builder --linux"
+ },
+ "dependencies": {
+ "@electron-toolkit/preload": "^3.0.1",
+ "@electron-toolkit/utils": "^3.0.0",
+ "electron-updater": "^6.1.7"
+ },
+ "devDependencies": {
+ "@electron-toolkit/eslint-config": "^1.0.2",
+ "@rushstack/eslint-patch": "^1.10.3",
+ "@vitejs/plugin-vue": "^5.0.5",
+ "@vue/eslint-config-prettier": "^9.0.0",
+ "electron": "^31.0.2",
+ "electron-builder": "^24.13.3",
+ "electron-vite": "^2.3.0",
+ "eslint": "^8.57.0",
+ "eslint-plugin-vue": "^9.26.0",
+ "prettier": "^3.3.2",
+ "vite": "^5.3.1",
+ "vue": "^3.4.30"
+ }
+}
diff --git a/resources/icon.png b/resources/icon.png
new file mode 100644
index 0000000..cf9e8b2
Binary files /dev/null and b/resources/icon.png differ
diff --git a/src/main/index.js b/src/main/index.js
new file mode 100644
index 0000000..da9e3d0
--- /dev/null
+++ b/src/main/index.js
@@ -0,0 +1,74 @@
+import { app, shell, BrowserWindow, ipcMain } from 'electron'
+import { join } from 'path'
+import { electronApp, optimizer, is } from '@electron-toolkit/utils'
+import icon from '../../resources/icon.png?asset'
+
+function createWindow() {
+ // Create the browser window.
+ const mainWindow = new BrowserWindow({
+ width: 900,
+ height: 670,
+ show: false,
+ autoHideMenuBar: true,
+ ...(process.platform === 'linux' ? { icon } : {}),
+ webPreferences: {
+ preload: join(__dirname, '../preload/index.js'),
+ sandbox: false
+ }
+ })
+
+ mainWindow.on('ready-to-show', () => {
+ mainWindow.show()
+ })
+
+ mainWindow.webContents.setWindowOpenHandler((details) => {
+ shell.openExternal(details.url)
+ return { action: 'deny' }
+ })
+
+ // HMR for renderer base on electron-vite cli.
+ // Load the remote URL for development or the local html file for production.
+ if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
+ mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
+ } else {
+ mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
+ }
+}
+
+// This method will be called when Electron has finished
+// initialization and is ready to create browser windows.
+// Some APIs can only be used after this event occurs.
+app.whenReady().then(() => {
+ // Set app user model id for windows
+ electronApp.setAppUserModelId('com.electron')
+
+ // Default open or close DevTools by F12 in development
+ // and ignore CommandOrControl + R in production.
+ // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
+ app.on('browser-window-created', (_, window) => {
+ optimizer.watchWindowShortcuts(window)
+ })
+
+ // IPC test
+ ipcMain.on('ping', () => console.log('pong'))
+
+ createWindow()
+
+ app.on('activate', function () {
+ // On macOS it's common to re-create a window in the app when the
+ // dock icon is clicked and there are no other windows open.
+ if (BrowserWindow.getAllWindows().length === 0) createWindow()
+ })
+})
+
+// Quit when all windows are closed, except on macOS. There, it's common
+// for applications and their menu bar to stay active until the user quits
+// explicitly with Cmd + Q.
+app.on('window-all-closed', () => {
+ if (process.platform !== 'darwin') {
+ app.quit()
+ }
+})
+
+// In this file you can include the rest of your app"s specific main process
+// code. You can also put them in separate files and require them here.
diff --git a/src/preload/index.js b/src/preload/index.js
new file mode 100644
index 0000000..8d62cb9
--- /dev/null
+++ b/src/preload/index.js
@@ -0,0 +1,20 @@
+import { contextBridge } from 'electron'
+import { electronAPI } from '@electron-toolkit/preload'
+
+// Custom APIs for renderer
+const api = {}
+
+// Use `contextBridge` APIs to expose Electron APIs to
+// renderer only if context isolation is enabled, otherwise
+// just add to the DOM global.
+if (process.contextIsolated) {
+ try {
+ contextBridge.exposeInMainWorld('electron', electronAPI)
+ contextBridge.exposeInMainWorld('api', api)
+ } catch (error) {
+ console.error(error)
+ }
+} else {
+ window.electron = electronAPI
+ window.api = api
+}
diff --git a/src/renderer/index.html b/src/renderer/index.html
new file mode 100644
index 0000000..f05fc87
--- /dev/null
+++ b/src/renderer/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ Electron
+
+
+
+
+
+
+
+
+
diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue
new file mode 100644
index 0000000..3988215
--- /dev/null
+++ b/src/renderer/src/App.vue
@@ -0,0 +1,24 @@
+
+
+
+
+ Powered by electron-vite
+
+ Build an Electron app with
+ Vue
+
+ Please try pressing F12
to open the devTool
+
+
+
diff --git a/src/renderer/src/assets/base.css b/src/renderer/src/assets/base.css
new file mode 100644
index 0000000..5ed6406
--- /dev/null
+++ b/src/renderer/src/assets/base.css
@@ -0,0 +1,67 @@
+:root {
+ --ev-c-white: #ffffff;
+ --ev-c-white-soft: #f8f8f8;
+ --ev-c-white-mute: #f2f2f2;
+
+ --ev-c-black: #1b1b1f;
+ --ev-c-black-soft: #222222;
+ --ev-c-black-mute: #282828;
+
+ --ev-c-gray-1: #515c67;
+ --ev-c-gray-2: #414853;
+ --ev-c-gray-3: #32363f;
+
+ --ev-c-text-1: rgba(255, 255, 245, 0.86);
+ --ev-c-text-2: rgba(235, 235, 245, 0.6);
+ --ev-c-text-3: rgba(235, 235, 245, 0.38);
+
+ --ev-button-alt-border: transparent;
+ --ev-button-alt-text: var(--ev-c-text-1);
+ --ev-button-alt-bg: var(--ev-c-gray-3);
+ --ev-button-alt-hover-border: transparent;
+ --ev-button-alt-hover-text: var(--ev-c-text-1);
+ --ev-button-alt-hover-bg: var(--ev-c-gray-2);
+}
+
+:root {
+ --color-background: var(--ev-c-black);
+ --color-background-soft: var(--ev-c-black-soft);
+ --color-background-mute: var(--ev-c-black-mute);
+
+ --color-text: var(--ev-c-text-1);
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+ margin: 0;
+ font-weight: normal;
+}
+
+ul {
+ list-style: none;
+}
+
+body {
+ min-height: 100vh;
+ color: var(--color-text);
+ background: var(--color-background);
+ line-height: 1.6;
+ font-family:
+ Inter,
+ -apple-system,
+ BlinkMacSystemFont,
+ 'Segoe UI',
+ Roboto,
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ 'Fira Sans',
+ 'Droid Sans',
+ 'Helvetica Neue',
+ sans-serif;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
diff --git a/src/renderer/src/assets/electron.svg b/src/renderer/src/assets/electron.svg
new file mode 100644
index 0000000..45ef09c
--- /dev/null
+++ b/src/renderer/src/assets/electron.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css
new file mode 100644
index 0000000..1a832e6
--- /dev/null
+++ b/src/renderer/src/assets/main.css
@@ -0,0 +1,163 @@
+@import './base.css';
+
+body {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ background-image: url('./wavy-lines.svg');
+ background-size: cover;
+ user-select: none;
+}
+
+code {
+ font-weight: 600;
+ padding: 3px 5px;
+ border-radius: 2px;
+ background-color: var(--color-background-mute);
+ font-family:
+ ui-monospace,
+ SFMono-Regular,
+ SF Mono,
+ Menlo,
+ Consolas,
+ Liberation Mono,
+ monospace;
+ font-size: 85%;
+}
+
+#app {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ margin-bottom: 80px;
+}
+
+.logo {
+ margin-bottom: 20px;
+ -webkit-user-drag: none;
+ height: 128px;
+ width: 128px;
+ will-change: filter;
+ transition: filter 300ms;
+}
+
+.logo:hover {
+ filter: drop-shadow(0 0 1.2em #6988e6aa);
+}
+
+.creator {
+ font-size: 14px;
+ line-height: 16px;
+ color: var(--ev-c-text-2);
+ font-weight: 600;
+ margin-bottom: 10px;
+}
+
+.text {
+ font-size: 28px;
+ color: var(--ev-c-text-1);
+ font-weight: 700;
+ line-height: 32px;
+ text-align: center;
+ margin: 0 10px;
+ padding: 16px 0;
+}
+
+.tip {
+ font-size: 16px;
+ line-height: 24px;
+ color: var(--ev-c-text-2);
+ font-weight: 600;
+}
+
+.vue {
+ background: -webkit-linear-gradient(315deg, #42d392 25%, #647eff);
+ background-clip: text;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-weight: 700;
+}
+
+.actions {
+ display: flex;
+ padding-top: 32px;
+ margin: -6px;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.action {
+ flex-shrink: 0;
+ padding: 6px;
+}
+
+.action a {
+ cursor: pointer;
+ text-decoration: none;
+ display: inline-block;
+ border: 1px solid transparent;
+ text-align: center;
+ font-weight: 600;
+ white-space: nowrap;
+ border-radius: 20px;
+ padding: 0 20px;
+ line-height: 38px;
+ font-size: 14px;
+ border-color: var(--ev-button-alt-border);
+ color: var(--ev-button-alt-text);
+ background-color: var(--ev-button-alt-bg);
+}
+
+.action a:hover {
+ border-color: var(--ev-button-alt-hover-border);
+ color: var(--ev-button-alt-hover-text);
+ background-color: var(--ev-button-alt-hover-bg);
+}
+
+.versions {
+ position: absolute;
+ bottom: 30px;
+ margin: 0 auto;
+ padding: 15px 0;
+ font-family: 'Menlo', 'Lucida Console', monospace;
+ display: inline-flex;
+ overflow: hidden;
+ align-items: center;
+ border-radius: 22px;
+ background-color: #202127;
+ backdrop-filter: blur(24px);
+}
+
+.versions li {
+ display: block;
+ float: left;
+ border-right: 1px solid var(--ev-c-gray-1);
+ padding: 0 20px;
+ font-size: 14px;
+ line-height: 14px;
+ opacity: 0.8;
+ &:last-child {
+ border: none;
+ }
+}
+
+@media (max-width: 720px) {
+ .text {
+ font-size: 20px;
+ }
+}
+
+@media (max-width: 620px) {
+ .versions {
+ display: none;
+ }
+}
+
+@media (max-width: 350px) {
+ .tip,
+ .actions {
+ display: none;
+ }
+}
diff --git a/src/renderer/src/assets/wavy-lines.svg b/src/renderer/src/assets/wavy-lines.svg
new file mode 100644
index 0000000..d08c611
--- /dev/null
+++ b/src/renderer/src/assets/wavy-lines.svg
@@ -0,0 +1,25 @@
+
diff --git a/src/renderer/src/components/Versions.vue b/src/renderer/src/components/Versions.vue
new file mode 100644
index 0000000..8eb989a
--- /dev/null
+++ b/src/renderer/src/components/Versions.vue
@@ -0,0 +1,14 @@
+
+
+
+
+ - Electron v{{ versions.electron }}
+ - Chromium v{{ versions.chrome }}
+ - Node v{{ versions.node }}
+
+
diff --git a/src/renderer/src/main.js b/src/renderer/src/main.js
new file mode 100644
index 0000000..0ac3a5f
--- /dev/null
+++ b/src/renderer/src/main.js
@@ -0,0 +1,6 @@
+import './assets/main.css'
+
+import { createApp } from 'vue'
+import App from './App.vue'
+
+createApp(App).mount('#app')