Icônes + CSS et intégration Backend
1
faviconData.json
Normal file
65
faviconDescription.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"masterPicture": "public/mainframe.png",
|
||||
"iconsPath": "public/",
|
||||
"design": {
|
||||
"ios": {
|
||||
"pictureAspect": "noChange",
|
||||
"assets": {
|
||||
"ios6AndPriorIcons": false,
|
||||
"ios7AndLaterIcons": true,
|
||||
"precomposedIcons": true,
|
||||
"declareOnlyDefaultIcon": true
|
||||
},
|
||||
"appName": "MainFrame"
|
||||
},
|
||||
"desktopBrowser": {
|
||||
"design": "background",
|
||||
"backgroundColor": "#333333",
|
||||
"backgroundRadius": 0.3,
|
||||
"imageScale": 0.9
|
||||
},
|
||||
"windows": {
|
||||
"pictureAspect": "noChange",
|
||||
"backgroundColor": "#333333",
|
||||
"onConflict": "override",
|
||||
"assets": {
|
||||
"windows80Ie10Tile": true,
|
||||
"windows10Ie11EdgeTiles": {
|
||||
"small": true,
|
||||
"medium": true,
|
||||
"big": true,
|
||||
"rectangle": true
|
||||
}
|
||||
},
|
||||
"appName": "MainFrame"
|
||||
},
|
||||
"androidChrome": {
|
||||
"pictureAspect": "noChange",
|
||||
"themeColor": "#333333",
|
||||
"manifest": {
|
||||
"name": "MainFrame",
|
||||
"startUrl": "https://mainframe.zac.ovh",
|
||||
"display": "standalone",
|
||||
"orientation": "notSet",
|
||||
"onConflict": "override",
|
||||
"declared": true
|
||||
},
|
||||
"assets": {
|
||||
"legacyIcon": false,
|
||||
"lowResolutionIcons": true
|
||||
}
|
||||
},
|
||||
"safariPinnedTab": {
|
||||
"pictureAspect": "blackAndWhite",
|
||||
"threshold": 23.90625,
|
||||
"themeColor": "#333333"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"scalingAlgorithm": "Mitchell",
|
||||
"errorOnImageTooSmall": false,
|
||||
"readmeFile": false,
|
||||
"htmlCodeFile": true,
|
||||
"usePathAsIs": false
|
||||
}
|
||||
}
|
||||
22
index.html
@@ -1,9 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png" />
|
||||
<link rel="manifest" href="site.webmanifest" />
|
||||
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#333333" />
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="icon" href="favicon.ico" media="(prefers-color-scheme: light)">
|
||||
<link rel="icon" href="favicon.ico" media="(prefers-color-scheme: dark)">
|
||||
<meta name="apple-mobile-web-app-title" content="MainFrame" />
|
||||
<meta name="application-name" content="MainFrame" />
|
||||
<meta name="msapplication-TileColor" content="#333333" />
|
||||
<meta name="msapplication-TileImage" content="mstile-144x144.png" />
|
||||
<meta name="msapplication-config" content="browserconfig.xml" />
|
||||
<meta name="theme-color" content="#333333" />
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Vite App</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
260
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "zac-mainframe",
|
||||
"version": "0.0.1",
|
||||
"name": "zac-mainframe-front",
|
||||
"version": "0.0.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "zac-mainframe",
|
||||
"version": "0.0.1",
|
||||
"name": "zac-mainframe-front",
|
||||
"version": "0.0.2",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.6.0",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.6.0",
|
||||
@@ -14,15 +14,18 @@
|
||||
"@fortawesome/free-regular-svg-icons": "^6.6.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.8",
|
||||
"axios": "^1.7.4",
|
||||
"dotenv": "^16.4.5",
|
||||
"js-confetti": "^0.12.0",
|
||||
"pinia": "^2.2.2",
|
||||
"vue": "^3.4.29",
|
||||
"vue-cookies": "^1.8.4",
|
||||
"vue-i18n": "^9.14.0",
|
||||
"vue-router": "^4.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rushstack/eslint-patch": "^1.8.0",
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/node": "^20.14.5",
|
||||
"@vitejs/plugin-vue": "^5.0.5",
|
||||
"@vue/eslint-config-prettier": "^9.0.0",
|
||||
"@vue/eslint-config-typescript": "^13.0.0",
|
||||
@@ -696,6 +699,50 @@
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/@intlify/core-base": {
|
||||
"version": "9.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
|
||||
"integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@intlify/message-compiler": "9.14.0",
|
||||
"@intlify/shared": "9.14.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/kazupon"
|
||||
}
|
||||
},
|
||||
"node_modules/@intlify/message-compiler": {
|
||||
"version": "9.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
|
||||
"integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@intlify/shared": "9.14.0",
|
||||
"source-map-js": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/kazupon"
|
||||
}
|
||||
},
|
||||
"node_modules/@intlify/shared": {
|
||||
"version": "9.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
|
||||
"integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/kazupon"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
||||
@@ -999,13 +1046,15 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.14.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz",
|
||||
"integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==",
|
||||
"version": "20.16.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
|
||||
"integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||
@@ -1523,6 +1572,23 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
|
||||
"integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
@@ -1607,6 +1673,18 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/computeds": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz",
|
||||
@@ -1687,6 +1765,15 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
@@ -1713,6 +1800,18 @@
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.4.5",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
|
||||
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
|
||||
@@ -2157,6 +2256,40 @@
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"debug": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
@@ -2554,6 +2687,27 @@
|
||||
"node": ">=8.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mime-db": "1.52.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
||||
@@ -2823,6 +2977,58 @@
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/pinia": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.2.tgz",
|
||||
"integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/devtools-api": "^6.6.3",
|
||||
"vue-demi": "^0.14.10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/posva"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vue/composition-api": "^1.4.0",
|
||||
"typescript": ">=4.4.4",
|
||||
"vue": "^2.6.14 || ^3.3.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/composition-api": {
|
||||
"optional": true
|
||||
},
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/pinia/node_modules/vue-demi": {
|
||||
"version": "0.14.10",
|
||||
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
|
||||
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vue/composition-api": "^1.0.0-rc.1",
|
||||
"vue": "^3.0.0-0 || ^2.6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/composition-api": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.41",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
|
||||
@@ -2904,6 +3110,12 @@
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/punycode": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
@@ -3258,11 +3470,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/uri-js": {
|
||||
"version": "4.4.1",
|
||||
@@ -3400,6 +3614,26 @@
|
||||
"eslint": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-i18n": {
|
||||
"version": "9.14.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.0.tgz",
|
||||
"integrity": "sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@intlify/core-base": "9.14.0",
|
||||
"@intlify/shared": "9.14.0",
|
||||
"@vue/devtools-api": "^6.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/kazupon"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-router": {
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz",
|
||||
|
||||
@@ -19,15 +19,18 @@
|
||||
"@fortawesome/free-regular-svg-icons": "^6.6.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.8",
|
||||
"axios": "^1.7.4",
|
||||
"dotenv": "^16.4.5",
|
||||
"js-confetti": "^0.12.0",
|
||||
"pinia": "^2.2.2",
|
||||
"vue": "^3.4.29",
|
||||
"vue-cookies": "^1.8.4",
|
||||
"vue-i18n": "^9.14.0",
|
||||
"vue-router": "^4.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rushstack/eslint-patch": "^1.8.0",
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/node": "^20.14.5",
|
||||
"@vitejs/plugin-vue": "^5.0.5",
|
||||
"@vue/eslint-config-prettier": "^9.0.0",
|
||||
"@vue/eslint-config-typescript": "^13.0.0",
|
||||
|
||||
BIN
public/android-chrome-144x144.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
public/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/android-chrome-256x256.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/android-chrome-36x36.png
Normal file
|
After Width: | Height: | Size: 1021 B |
BIN
public/android-chrome-384x384.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
public/android-chrome-48x48.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
public/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
public/android-chrome-72x72.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/android-chrome-96x96.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
public/apple-touch-icon-120x120-precomposed.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/apple-touch-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
public/apple-touch-icon-152x152-precomposed.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/apple-touch-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
public/apple-touch-icon-180x180-precomposed.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/apple-touch-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/apple-touch-icon-60x60-precomposed.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/apple-touch-icon-60x60.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
public/apple-touch-icon-76x76-precomposed.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/apple-touch-icon-76x76.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
public/apple-touch-icon-precomposed.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
12
public/browserconfig.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="public/mstile-70x70.png"/>
|
||||
<square150x150logo src="public/mstile-150x150.png"/>
|
||||
<square310x310logo src="public/mstile-310x310.png"/>
|
||||
<wide310x150logo src="public/mstile-310x150.png"/>
|
||||
<TileColor>#333333</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
BIN
public/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 604 B |
BIN
public/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1008 B |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 15 KiB |
12
public/html_code.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="public/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="public/favicon-16x16.png">
|
||||
<link rel="manifest" href="public/site.webmanifest">
|
||||
<link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#333333">
|
||||
<link rel="shortcut icon" href="public/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="MainFrame">
|
||||
<meta name="application-name" content="MainFrame">
|
||||
<meta name="msapplication-TileColor" content="#333333">
|
||||
<meta name="msapplication-TileImage" content="public/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="public/browserconfig.xml">
|
||||
<meta name="theme-color" content="#333333">
|
||||
20
public/index.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html><html lang="en"><head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Vite App</title>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="public/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="public/favicon-16x16.png">
|
||||
<link rel="manifest" href="public/site.webmanifest">
|
||||
<link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#333333">
|
||||
<link rel="shortcut icon" href="public/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="MainFrame">
|
||||
<meta name="application-name" content="MainFrame">
|
||||
<meta name="msapplication-TileColor" content="#333333">
|
||||
<meta name="msapplication-TileImage" content="public/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="public/browserconfig.xml">
|
||||
<meta name="theme-color" content="#333333"></head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body></html>
|
||||
BIN
public/mainframe.png
Normal file
|
After Width: | Height: | Size: 336 KiB |
BIN
public/mstile-144x144.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
public/mstile-150x150.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
public/mstile-310x150.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
public/mstile-310x310.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/mstile-70x70.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
145
public/safari-pinned-tab.svg
Normal file
@@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="600.000000pt" height="600.000000pt" viewBox="0 0 600.000000 600.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.14, written by Peter Selinger 2001-2017
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,600.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M30 5981 c0 -11 -3 -11 -15 -1 -13 11 -15 -321 -15 -2981 l0 -2994
|
||||
2684 0 c1476 0 2682 3 2679 7 -2 5 5 8 16 8 12 0 21 -4 21 -10 0 -5 11 -10 25
|
||||
-10 14 0 25 5 25 10 0 6 5 10 11 10 5 0 7 -4 4 -10 -4 -6 8 -10 29 -10 19 0
|
||||
37 6 39 13 4 9 8 9 15 -2 8 -11 10 -11 15 0 4 10 6 10 6 2 1 -15 51 -18 51 -3
|
||||
0 6 5 10 11 10 5 0 8 -4 5 -8 -9 -14 77 -13 86 0 6 10 10 10 16 1 9 -14 54
|
||||
-13 65 2 5 7 10 6 15 -3 8 -12 51 -11 85 3 10 4 17 3 17 -4 0 -6 17 -11 40
|
||||
-11 l40 0 0 3001 0 3000 -2985 -3 c-2523 -3 -2985 -5 -2985 -17z m5942 -24 c4
|
||||
-6 6 -646 5 -1421 -2 -1325 -3 -1409 -19 -1420 -15 -9 -215 188 -1441 1419
|
||||
l-1424 1430 106 5 c58 3 704 4 1435 2 1044 -2 1332 -5 1338 -15z m-2994 0 c9
|
||||
-11 11 -346 10 -1463 l-3 -1449 -55 -1 c-61 -1 -2841 -6 -2877 -5 l-23 1 3
|
||||
1458 2 1457 1010 5 c556 3 1215 7 1466 8 388 3 457 2 467 -11z m1487 -1463
|
||||
c781 -785 1422 -1432 1424 -1438 2 -6 -48 39 -110 100 -63 61 -190 184 -283
|
||||
275 -93 90 -176 172 -185 183 -9 10 -40 41 -70 70 -30 28 -68 67 -85 86 -17
|
||||
19 -141 145 -275 279 -184 184 -246 240 -253 230 -7 -10 -8 -8 -3 8 5 20 -7
|
||||
37 -27 38 -5 0 -7 2 -6 5 4 8 -66 79 -75 77 -4 -1 -16 12 -27 30 -21 34 -55
|
||||
58 -70 48 -6 -3 -7 1 -4 10 7 17 -103 138 -118 129 -4 -3 -8 1 -8 9 0 20 -58
|
||||
69 -72 61 -7 -4 -8 -3 -4 5 4 6 2 19 -5 27 -10 12 -14 12 -22 2 -7 -10 -8 -9
|
||||
-4 3 5 16 -178 206 -195 201 -5 -1 -13 10 -19 25 -7 16 -13 23 -16 16 -8 -21
|
||||
-20 -15 -19 10 1 15 -4 22 -17 20 -12 0 -16 4 -13 12 3 8 -2 19 -10 25 -9 9
|
||||
-14 9 -14 2 0 -6 -7 -9 -15 -6 -12 5 -13 10 -4 20 6 8 9 15 5 15 -3 1 -10 2
|
||||
-15 3 -5 0 -13 5 -18 10 -5 5 -2 6 6 1 10 -6 12 -4 7 4 -5 7 -15 10 -23 7 -11
|
||||
-5 -13 -1 -7 17 3 12 3 19 -1 15 -5 -5 -15 1 -22 12 -8 11 -20 17 -26 14 -7
|
||||
-4 -9 -3 -4 1 9 10 -63 86 -75 79 -4 -3 -5 2 -2 10 3 9 1 16 -5 16 -6 0 -11
|
||||
-5 -11 -11 0 -5 -5 -7 -11 -3 -8 4 -7 9 2 14 15 10 -43 62 -74 67 -12 2 -23 6
|
||||
-26 10 -3 3 5 3 19 0 20 -5 15 3 -30 47 -30 30 -58 52 -62 49 -4 -2 -5 4 -1
|
||||
13 5 13 3 16 -10 11 -9 -3 -26 2 -39 13 -13 11 -17 19 -10 20 6 0 12 -4 12 -9
|
||||
0 -5 8 -12 18 -15 9 -4 -3 13 -27 38 -25 25 -50 42 -57 39 -8 -3 -14 0 -14 7
|
||||
0 6 5 8 10 5 6 -3 10 -1 10 5 0 8 -9 10 -27 5 -23 -5 -25 -4 -14 9 8 9 11 16
|
||||
7 16 -15 0 -22 2 -33 12 -8 6 -19 6 -33 -2 -12 -6 -24 -9 -27 -7 -2 3 5 8 16
|
||||
12 12 3 21 11 21 17 0 6 10 3 23 -8 19 -17 19 -16 -3 9 -13 15 -29 26 -36 23
|
||||
-6 -2 -11 3 -10 12 1 11 -5 16 -18 14 -11 -2 -15 1 -11 7 3 6 1 11 -5 11 -7 0
|
||||
-10 6 -7 13 7 19 -24 36 -48 26 -11 -4 -29 -8 -40 -8 -17 0 -16 2 5 11 14 6
|
||||
32 10 40 9 10 -2 7 6 -9 23 -14 14 -27 24 -29 21 -10 -10 -62 30 -62 48 0 14
|
||||
-5 17 -16 13 -14 -5 -15 -4 -5 8 10 12 9 17 -8 28 -20 12 -29 38 -13 38 4 0
|
||||
646 -642 1427 -1426z m-1422 1334 c2 -7 1 -22 -3 -33 -6 -17 -8 -15 -12 13 -4
|
||||
31 5 45 15 20z m165 -133 c-3 -3 -9 2 -12 12 -6 14 -5 15 5 6 7 -7 10 -15 7
|
||||
-18z m22 -60 c0 -5 -5 -3 -10 5 -5 8 -10 20 -10 25 0 6 5 3 10 -5 5 -8 10 -19
|
||||
10 -25z m-170 15 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4
|
||||
-4 4 -10z m180 -96 c-8 -8 -23 -20 -34 -26 -14 -6 -11 -1 8 16 32 29 45 34 26
|
||||
10z m-90 -56 c0 -5 -9 -3 -20 4 -11 7 -20 16 -20 20 0 5 9 3 20 -4 11 -7 20
|
||||
-16 20 -20z m257 -4 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z
|
||||
m-187 -25 c0 -6 -4 -7 -10 -4 -5 3 -10 11 -10 16 0 6 5 7 10 4 6 -3 10 -11 10
|
||||
-16z m-70 1 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4
|
||||
10 -10z m23 -24 c4 -10 1 -13 -7 -10 -7 3 -16 -2 -19 -10 -4 -9 -12 -16 -18
|
||||
-16 -7 0 -2 11 11 25 28 29 26 29 33 11z m31 -2 c3 -8 2 -12 -4 -9 -6 3 -10
|
||||
10 -10 16 0 14 7 11 14 -7z m-35 -76 c13 -4 13 -5 0 -10 -9 -4 -21 2 -29 15
|
||||
-11 19 -11 20 1 11 8 -6 21 -13 28 -16z m391 -10 c0 -6 -6 -5 -15 2 -8 7 -15
|
||||
14 -15 16 0 2 7 1 15 -2 8 -4 15 -11 15 -16z m-320 2 c0 -5 -5 -10 -11 -10 -5
|
||||
0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m59 -20 c11 -24 11 -24 -3 -6 -9
|
||||
11 -16 24 -16 30 0 12 5 7 19 -24z m-144 -10 c3 -6 -1 -7 -9 -4 -18 7 -21 14
|
||||
-7 14 6 0 13 -4 16 -10z m210 -8 c-3 -3 -11 0 -18 7 -9 10 -8 11 6 5 10 -3 15
|
||||
-9 12 -12z m-165 -57 c0 -8 -2 -15 -4 -15 -2 0 -6 7 -10 15 -3 8 -1 15 4 15 6
|
||||
0 10 -7 10 -15z m140 11 c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16
|
||||
-4z m-88 -13 c-6 -2 -9 -10 -6 -15 4 -7 2 -8 -5 -4 -13 9 -5 26 12 25 9 0 8
|
||||
-2 -1 -6z m502 -9 c3 -8 2 -12 -4 -9 -6 3 -10 10 -10 16 0 14 7 11 14 -7z
|
||||
m-474 -49 c-7 -9 -15 -13 -19 -10 -3 3 1 10 9 15 21 14 24 12 10 -5z m395 -13
|
||||
c-3 -3 -11 0 -18 7 -9 10 -8 11 6 5 10 -3 15 -9 12 -12z m40 8 c3 -5 1 -10 -4
|
||||
-10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m-387 -46 c-4 -3 -12 5
|
||||
-18 18 -12 22 -12 22 6 6 10 -10 15 -20 12 -24z m142 12 c0 -3 -4 -8 -10 -11
|
||||
-5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m-260 -10 c0 -2 -7 -7
|
||||
-16 -10 -8 -3 -12 -2 -9 4 6 10 25 14 25 6z m580 -20 c0 -3 -4 -8 -10 -11 -5
|
||||
-3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m-520 -20 c0 -3 -4 -8 -10
|
||||
-11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m220 -10 c0 -3 -4 -8
|
||||
-10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m40 -26 c-6 -11
|
||||
-15 -20 -20 -20 -6 0 -2 9 7 20 10 11 19 20 21 20 1 0 -2 -9 -8 -20z m-320
|
||||
-15 c13 -14 21 -25 18 -25 -2 0 -15 11 -28 25 -13 14 -21 25 -18 25 2 0 15
|
||||
-11 28 -25z m120 -35 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10
|
||||
6 0 10 -4 10 -10z m203 -25 c-3 -9 -8 -14 -10 -11 -3 3 -2 9 2 15 9 16 15 13
|
||||
8 -4z m267 -19 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10
|
||||
-2 10 -4z m-149 -39 c-10 -9 -11 -8 -5 6 3 10 9 15 12 12 3 -3 0 -11 -7 -18z
|
||||
m-46 -7 c3 -6 -1 -7 -9 -4 -18 7 -21 14 -7 14 6 0 13 -4 16 -10z m-150 -20 c3
|
||||
-5 -4 -6 -15 -3 -11 3 -22 9 -25 13 -3 5 4 6 15 3 11 -3 22 -9 25 -13z m550 0
|
||||
c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m-25
|
||||
-10 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z
|
||||
m-490 -40 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4
|
||||
-10z m65 -10 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11
|
||||
-10z m535 -30 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11
|
||||
-4 11 -10z m-22 -175 c-3 -3 -9 2 -12 12 -6 14 -5 15 5 6 7 -7 10 -15 7 -18z
|
||||
m-78 11 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10
|
||||
-4z m-335 -86 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4
|
||||
11 -10z m415 -55 c-7 -8 -17 -15 -22 -15 -6 0 -5 7 2 15 7 8 17 15 22 15 6 0
|
||||
5 -7 -2 -15z m405 -85 c3 -6 -1 -7 -9 -4 -18 7 -21 14 -7 14 6 0 13 -4 16 -10z
|
||||
m145 -134 c0 -2 -7 -9 -15 -16 -13 -11 -14 -10 -9 4 5 14 24 23 24 12z m-1130
|
||||
-10 c0 -2 -8 -10 -17 -17 -16 -13 -17 -12 -4 4 13 16 21 21 21 13z m865 -96
|
||||
c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m655
|
||||
-284 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z
|
||||
m-1450 -946 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4
|
||||
10 -10z m253 3 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m100 0
|
||||
c-7 -2 -21 -2 -30 0 -10 3 -4 5 12 5 17 0 24 -2 18 -5z m1981 -12 c14 -12 -87
|
||||
-116 -805 -830 -1862 -1850 -2054 -2039 -2063 -2030 -13 12 -10 204 9 564 3
|
||||
66 8 179 10 250 2 72 5 130 6 130 0 0 2 36 4 80 2 44 6 123 8 176 2 53 8 102
|
||||
12 109 5 9 4 11 -3 6 -7 -4 -12 -2 -12 3 0 6 4 11 8 11 5 0 8 32 7 71 0 39 2
|
||||
72 6 75 4 2 6 16 3 29 -3 16 0 25 8 25 10 0 10 2 -1 9 -8 5 -9 11 -3 15 6 4 7
|
||||
20 2 42 -6 24 -5 43 3 56 9 15 9 20 -2 27 -10 6 -10 10 -1 16 7 4 9 17 5 32
|
||||
-3 14 -2 22 3 19 12 -7 10 27 -1 35 -4 3 -3 18 3 34 8 22 8 30 -2 37 -10 7
|
||||
-10 11 4 21 12 10 14 17 6 30 -6 11 -6 23 -1 30 13 17 10 36 -7 48 -12 9 -12
|
||||
10 3 5 15 -5 17 -2 12 13 -3 11 -2 22 4 25 11 7 9 25 -3 45 -5 8 -3 17 5 23
|
||||
11 7 11 11 1 15 -6 2 -10 8 -7 13 11 18 12 70 1 70 -7 0 -8 3 -1 8 6 4 11 39
|
||||
12 77 0 39 4 84 7 100 13 56 14 145 2 138 -6 -4 -3 6 8 21 10 16 13 25 7 22
|
||||
-7 -5 -11 4 -11 24 0 22 4 29 13 24 9 -6 9 -5 0 8 -7 8 -10 18 -6 21 3 4 1 7
|
||||
-6 7 -7 0 -9 5 -6 10 4 6 11 8 16 5 5 -3 6 1 3 9 -3 8 0 24 6 37 11 19 10 21
|
||||
-4 16 -14 -6 -16 -3 -11 14 5 15 4 19 -4 15 -14 -9 -14 0 -1 25 8 14 7 19 -1
|
||||
19 -21 0 23 35 45 36 12 1 68 4 126 7 58 3 299 8 535 11 237 4 489 8 560 11
|
||||
72 3 396 8 720 11 325 4 591 7 592 8 11 9 164 -3 177 -13z m-2910 -2 c8 -8 9
|
||||
-2881 0 -2902 -5 -15 -41 -16 -438 -12 -237 2 -624 4 -861 5 -236 0 -567 0
|
||||
-735 0 -168 0 -442 2 -610 3 l-305 2 -2 1452 -2 1453 712 2 c1219 5 2235 3
|
||||
2241 -3z m2946 -43 c0 -2 -17 -16 -37 -31 l-38 -28 29 31 c26 28 46 40 46 28z
|
||||
m37 -24 c10 -6 12 -314 10 -1419 -1 -776 -4 -1413 -7 -1416 -9 -9 -2880 -16
|
||||
-2880 -8 0 10 118 128 1624 1625 654 649 1199 1191 1210 1203 23 25 26 26 43
|
||||
15z m-117 -45 c0 -1 -44 -45 -97 -97 l-98 -95 95 98 c88 90 100 102 100 94z
|
||||
m-355 -357 c-87 -87 -160 -158 -162 -156 -3 3 310 316 317 316 3 0 -67 -72
|
||||
-155 -160z m-175 -173 c0 -2 -15 -16 -32 -33 l-33 -29 29 33 c28 30 36 37 36
|
||||
29z m-70 -70 c0 -1 -56 -58 -125 -127 -69 -69 -125 -122 -125 -119 0 6 242
|
||||
249 247 249 2 0 3 -1 3 -3z m-400 -402 c-79 -79 -145 -143 -147 -141 -4 4 279
|
||||
286 287 286 3 0 -60 -65 -140 -145z m-210 -208 c0 -1 -28 -29 -62 -62 -43 -41
|
||||
-50 -46 -23 -16 50 56 85 88 85 78z m-180 -182 c-24 -25 -46 -45 -49 -45 -3 0
|
||||
15 20 39 45 24 25 46 45 49 45 3 0 -15 -20 -39 -45z m-70 -68 c0 -2 -13 -16
|
||||
-30 -32 -16 -16 -30 -25 -30 -21 0 4 12 18 26 31 25 24 34 29 34 22z m-70 -70
|
||||
c0 -2 -18 -21 -40 -42 -22 -21 -40 -35 -40 -31 0 5 17 24 37 42 35 32 43 38
|
||||
43 31z m-150 -152 c-7 -8 -17 -15 -22 -15 -6 0 -5 7 2 15 7 8 17 15 22 15 6 0
|
||||
5 -7 -2 -15z m-50 -48 c0 -1 -23 -25 -51 -52 -57 -55 -56 -42 0 17 31 31 51
|
||||
45 51 35z m-110 -107 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2
|
||||
0 4 -4 4 -10z m-55 -60 c-21 -22 -43 -40 -49 -40 -5 0 10 18 34 40 24 22 46
|
||||
40 49 40 3 0 -13 -18 -34 -40z m-95 -90 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10
|
||||
3 6 8 10 11 10 2 0 4 -4 4 -10z m-100 -104 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1
|
||||
-10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m-50 -50 c0 -2 -7 -7 -16 -10 -8 -3
|
||||
-12 -2 -9 4 6 10 25 14 25 6z m-250 -240 c0 -2 -8 -10 -17 -17 -16 -13 -17
|
||||
-12 -4 4 13 16 21 21 21 13z m-120 -120 c0 -2 -8 -10 -17 -17 -16 -13 -17 -12
|
||||
-4 4 13 16 21 21 21 13z m-110 -109 c0 -2 -19 -21 -42 -42 l-43 -40 40 43 c36
|
||||
39 45 47 45 39z m-130 -130 c0 -2 -10 -12 -22 -23 l-23 -19 19 23 c18 21 26
|
||||
27 26 19z"/>
|
||||
<path d="M96 193 c-11 -11 -7 -20 9 -20 8 0 15 4 15 8 0 11 -16 20 -24 12z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
55
public/site.webmanifest
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"name": "MainFrame",
|
||||
"short_name": "MainFrame",
|
||||
"icons": [
|
||||
{
|
||||
"src": "android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-256x256.png",
|
||||
"sizes": "256x256",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-384x384.png",
|
||||
"sizes": "384x384",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#333333",
|
||||
"background_color": "#333333",
|
||||
"start_url": "https://mainframe.zac.ovh",
|
||||
"display": "standalone"
|
||||
}
|
||||
20
src/App.vue
@@ -1,5 +1,20 @@
|
||||
<script setup lang="ts">
|
||||
import { RouterView, RouterLink } from 'vue-router'
|
||||
import { ref, provide, onMounted } from 'vue'
|
||||
import { checkUser } from '@/utils/discord'
|
||||
import type { Ref } from 'vue'
|
||||
import type { User } from '@/utils/discord'
|
||||
|
||||
// État de l'utilisateur et de son avatar
|
||||
const user: Ref<User | null> = ref(null)
|
||||
const avatar = ref('')
|
||||
|
||||
provide('user', user) // Fournit l'utilisateur aux composants enfants
|
||||
|
||||
onMounted(async () => {
|
||||
user.value = await checkUser() // Vérifie l'authentification lors du montage du composant
|
||||
avatar.value = user.value ? `https://cdn.discordapp.com/avatars/${user.value.id}/${user.value.avatar}?size=48` : ''
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -12,6 +27,7 @@ import { RouterView, RouterLink } from 'vue-router'
|
||||
<router-link to="/">Index</router-link>
|
||||
<p>|</p>
|
||||
<router-link to="/discord">Discord</router-link>
|
||||
<img v-if="user" :src=avatar>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
@@ -50,6 +66,10 @@ nav * {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
nav img {
|
||||
border-radius: 20%;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
left: 0;
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
body {
|
||||
min-height: 100vh;
|
||||
margin: 0;
|
||||
color: var(--color-text);
|
||||
background: var(--color-background);
|
||||
transition:
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
/* VUE STYLE */
|
||||
#app {
|
||||
/* max-width: 1280px; */
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
/* margin: 0 auto; */
|
||||
/* padding: 2rem;*/
|
||||
height: inherit;
|
||||
width: inherit;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@@ -29,8 +31,8 @@ a,
|
||||
}
|
||||
|
||||
#app {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
/* display: grid; */
|
||||
/* grid-template-columns: 1fr 1fr; */
|
||||
padding: 0 2rem;
|
||||
}
|
||||
}
|
||||
@@ -61,7 +63,10 @@ a,
|
||||
}
|
||||
|
||||
.main {
|
||||
margin-left: 200px; /* 200px is the width of the header vl position */
|
||||
margin-top: 60px; /* 60px is the height of the header navbar */
|
||||
height: calc(100% - 60px);
|
||||
margin-left: 200px; /* 200px is the width of the header vl position (or sidebar) */
|
||||
width: calc(100% - 200px);
|
||||
/* padding: 0px 10px; */
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import { fas } from '@fortawesome/free-solid-svg-icons'
|
||||
import { fab } from '@fortawesome/free-brands-svg-icons'
|
||||
import { createApp } from 'vue'
|
||||
import { createPinia } from 'pinia'
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import cookies from 'vue-cookies'
|
||||
|
||||
import App from './App.vue'
|
||||
@@ -12,6 +14,8 @@ import './assets/main.css'
|
||||
library.add(fas, fab)
|
||||
|
||||
createApp(App)
|
||||
.use(createPinia())
|
||||
.use(createI18n({}))
|
||||
.use(router)
|
||||
.use(cookies)
|
||||
.component('font-awesome-icon', FontAwesomeIcon)
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import { inject } from 'vue'
|
||||
import type { VueCookies } from 'vue-cookies'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(import.meta.env.BASE_URL),
|
||||
@@ -9,6 +7,7 @@ const router = createRouter({
|
||||
path: '/',
|
||||
name: 'index',
|
||||
component: () => import('../views/IndexView.vue'),
|
||||
meta: { title: 'MainFrame' },
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
@@ -26,7 +25,7 @@ const router = createRouter({
|
||||
path: '/discord',
|
||||
name: 'discord',
|
||||
component: () => import('../views/DiscordView.vue'),
|
||||
meta: { discordAuth: true },
|
||||
meta: { title: 'MainFrame | Discord', discordAuth: true },
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
@@ -43,15 +42,9 @@ const router = createRouter({
|
||||
]
|
||||
})
|
||||
|
||||
router.beforeEach((to) => {
|
||||
const $cookies = inject<VueCookies>('$cookies')
|
||||
if (!$cookies) return console.log('Error: $cookies is not injected')
|
||||
|
||||
if (to.meta.discordAuth && !$cookies.isKey('DISCORD_CODE')) {
|
||||
window.location.href =
|
||||
'https://discord.com/oauth2/authorize?client_id=1274800564449841172&response_type=code&redirect_uri=https%3A%2F%2Fmainframe.zac.ovh%2Fdiscord&scope=identify'
|
||||
return
|
||||
}
|
||||
router.beforeEach((to, from, next) => {
|
||||
document.title = to.meta.title as string
|
||||
next()
|
||||
})
|
||||
|
||||
export default router
|
||||
|
||||
58
src/utils/discord.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import axios from 'axios'
|
||||
|
||||
export interface User {
|
||||
id: string
|
||||
username: string
|
||||
discriminator: string
|
||||
global_name?: string
|
||||
avatar?: string
|
||||
bot?: boolean
|
||||
system?: boolean
|
||||
mfa_enabled?: boolean
|
||||
banner?: string
|
||||
accent_color?: number
|
||||
locale?: string
|
||||
verified?: boolean
|
||||
email?: string
|
||||
flags?: number
|
||||
premium_type?: number
|
||||
public_flags?: number
|
||||
avatar_decoration_data?: {
|
||||
sku_id: number
|
||||
asset: string
|
||||
}
|
||||
}
|
||||
|
||||
// Fonction pour rediriger vers Discord pour l'authentification
|
||||
export function login() {
|
||||
window.location.href = import.meta.env.VITE_BACKEND_URL + '/discord/auth/redirect';
|
||||
}
|
||||
|
||||
// Fonction pour se déconnecter
|
||||
export function logout(user_value: User | null) {
|
||||
user_value = null
|
||||
return user_value
|
||||
// Effectue une requête à ton API pour déconnecter l'utilisateur, supprimer la session, etc.
|
||||
// Ou simplement rediriger vers une page d'accueil sans session
|
||||
}
|
||||
|
||||
export async function checkBots() {
|
||||
try {
|
||||
const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/bots', { withCredentials: true })
|
||||
return response.data
|
||||
} catch (err) { return null }
|
||||
}
|
||||
|
||||
export async function checkUser() {
|
||||
try {
|
||||
const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user', { withCredentials: true })
|
||||
return response.data
|
||||
} catch (err) { return null }
|
||||
}
|
||||
|
||||
export async function checkUserGuilds() {
|
||||
try {
|
||||
const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user/guilds', { withCredentials: true })
|
||||
return response.data
|
||||
} catch (err) { return null }
|
||||
}
|
||||
@@ -1,5 +1,28 @@
|
||||
<script setup lang="ts">
|
||||
import { inject } from 'vue'
|
||||
import type { Ref } from 'vue'
|
||||
import type { User } from '@/utils/discord'
|
||||
|
||||
const user: Ref<User | null> | undefined = inject('user')
|
||||
const bots: Ref<User[] | null> | undefined = inject('bots')
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="main">
|
||||
<h1>Test Dashboard Discord</h1>
|
||||
<div class="title">
|
||||
<h1>Test Dashboard Discord</h1>
|
||||
<div v-if="user">
|
||||
<p>Vous êtes connecté en tant que {{ user.global_name }}.</p>
|
||||
<p>Vous avez l'ID {{ user.id }}.</p>
|
||||
</div>
|
||||
<p v-else>Vous n'êtes pas connecté.</p>
|
||||
</div>
|
||||
<div class="bots">
|
||||
<h2>Bots</h2>
|
||||
<div v-for="bot in bots" :key="bot.id">
|
||||
<p>{{ bot.username }}</p>
|
||||
<p>{{ bot.id }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,13 +1,24 @@
|
||||
<script setup lang="ts">
|
||||
import { RouterLink, RouterView, useRoute } from 'vue-router'
|
||||
import { inject } from 'vue'
|
||||
import type { VueCookies } from 'vue-cookies'
|
||||
import { RouterLink, RouterView } from 'vue-router'
|
||||
import { checkBots, checkUserGuilds, login, logout } from '@/utils/discord'
|
||||
import { ref, provide, inject, onMounted } from 'vue'
|
||||
import type { Ref } from 'vue'
|
||||
import type { User } from '@/utils/discord'
|
||||
|
||||
const $route = useRoute()
|
||||
const $cookies = inject<VueCookies>('$cookies')
|
||||
if (!$cookies) throw new Error('Missing VueCookies')
|
||||
// État de l'utilisateur et des bots
|
||||
const user: Ref<User | null> | undefined = inject('user')
|
||||
const bots = ref([])
|
||||
const guilds = ref([])
|
||||
|
||||
if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/discord', 'mainframe.zac.ovh', true, 'Strict')
|
||||
provide('bots', bots) // Fournit les bots aux composants enfants
|
||||
provide('guilds', guilds) // Fournit les guilds aux composants enfants
|
||||
|
||||
onMounted(async () => {
|
||||
if (user) {
|
||||
bots.value = await checkBots()
|
||||
guilds.value = await checkUserGuilds()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -15,6 +26,8 @@ if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/
|
||||
<div class="sidenav">
|
||||
<router-link to="/discord">Dashboard</router-link>
|
||||
<router-link to="/config">Config</router-link>
|
||||
<button v-if="!user" @click="login">Se connecter</button>
|
||||
<button v-if="user" @click="logout(user)">Se déconnecter</button>
|
||||
</div>
|
||||
|
||||
<router-view v-slot="{ Component }">
|
||||
@@ -23,4 +36,11 @@ if ($route.query.code) $cookies.set('DISCORD_CODE', $route.query.code, '30d', '/
|
||||
</transition>
|
||||
</router-view>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.sidenav button {
|
||||
position: absolute;
|
||||
bottom: 60px;
|
||||
}
|
||||
</style>
|
||||