[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\n*.log*\n.nuxt\n.nitro\n.cache\n.output\n.env\ndist\n\n# idea\n.idea\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">CSGO工具箱</h1>\n\n<h4 align=\"center\">一个为CSGO游戏的各个方面带来便利的工具集合</h4>\n\n<div align=\"center\">\n\n[![stars](https://img.shields.io/github/stars/One-Studio/CSGO-Toolbox.svg?style=flat&color=green)](https://github.com/One-Studio/CSGO-Toolbox)\n[![fork](https://img.shields.io/github/forks/One-Studio/CSGO-Toolbox.svg?style=flat&color=critical)](https://github.com/One-Studio/CSGO-Toolbox)\n[![donate](https://img.shields.io/badge/$-donate-ff69b4.svg?style=flat)](https://github.com/One-Studio/CSGO-Toolbox#捐赠)\n[![release](https://img.shields.io/github/release/One-Studio/CSGO-Toolbox.svg?style=flat&color=blue)](https://github.com/One-Studio/CSGO-Toolbox/releases)\n\n</div>\n\n## 说明\n\nCSGO工具箱旨在游戏的各个方面给玩家带来便利，如设置的修改、备份、还原、启动项修改、快捷启动、硬件配置查看、录像下载、管理、观看等等，从而减少玩家在调整设置等事项上花费的时间，节省出更多的时间投入游戏本身。\n\n> 代码闭源，本仓库仅为官网代码\n\n<div align=\"center\" >\n  <img src=\"https://api.star-history.com/svg?repos=One-Studio/CSGO-Toolbox&type=Date\" alt=\"Star History Chart\" style=\"width: 50%;\" />\n</div>\n\n### 技术栈\n\n框架：[Wails](https://wails.io/) + [Vue.js](https://vuejs.org/)\n\n语言：Go + TypeScript + HTML + CSS ( TailwindCSS + SCSS )\n\n### 兼容系统和平台\n\n| 系统       | x64 | x32 | arm64 |\n|:--------:|:---:|:---:|:-----:|\n| Win10/11 | ✔️  | 📈  | 📈    |\n| ~Win7    | ❌   | ❌   | ❌     |\n| Linux    | 📈  | 📈  | 📈    |\n| MacOS    | 📈  | 📈  | 📈    |\n\n- ❌ Wails 明确不兼容 除非框架更新支持\n\n- 📈 计划在未来得到支持\n\n## 下载\n\n- <https://github.com/One-Studio/CSGO-Toolbox/releases>\n\n- <https://api.upup.cool/get/csgo-toolbox>\n\n## 路线图\n\n### 画饼清单\n\n#### 核心\n\n- [x] 前后端代码重构\n- [ ] 用户活跃度统计\n- [x] 代码格式化 eslint + prettier\n- [ ] i18n 多语言支持\n- [ ] 启动时的引导，选择路径和偏好设置\n- [ ] CFGX 界面图形化操作调整CFG\n- [ ] 游戏设置分析、展示与分享\n- [ ] 文件操作\n  - [ ] 增加删除功能\n  - [ ] 增加复制按钮，方便分享\n  - [ ] 修改文件名时输入.后没有添加后缀导致修改后不显示文件的bug\n- [ ] 赛事信息？\n\n#### 界面\n\n- [ ] 深色模式 Dark Mode\n- [ ] 实时公告\n- [ ] 关于页面\n- [x] 广告\n\n#### 工具\n\n- [ ] 启动项组改名\n- [ ] 标签式启动项编辑\n- [ ] 画面设置图形化切换和多档位\n- [ ] 快捷打开目录（CFG、地图、脚本、录像）\n- [ ] **控制台指令大全**\n- [ ] **控制台指令搜索功能**\n- [ ] 职业选手游戏设置&外设（类似Prosetting）\n- [ ] 道具点位等视频的专栏推荐\n- [ ] 战术面板\n\n#### 硬件\n\n- [ ] 手动添加外设信息\n- [ ] 信息一键截图分享\n- [ ] 改进硬件信息（如显示屏品牌型号等）\n- [ ] 获得实时硬件信息（CPU主频等）\n\n#### 账号\n\n- [ ] 工具箱账号系统，登录注册验证\n- [ ] 启动项等设置和录像分析数据同步云端\n\n#### 录像\n\n- [x] hlae启动选项 打开对话框选择路径\n- [ ] demo name和filename切换 方便标记\n- [ ] 多文件夹支持\n- [ ] 改进录像分析过程，支持监听文件变动自动补齐分析新的demo\n  - [ ] 监听完美demo下载目录\n- [ ] 对接官匹、平台的对战数据，自动收录相关demo和数据\n  - [ ] 官匹\n  - [ ] 完美\n  - [ ] 5E\n  - [ ] B5\n  - [ ] FACEIT\n- [ ] demo组织管理功能 拖拽文件自动解压改名\n- [ ] demo播放 对不支持的路径 复制临时dem文件以正常播放\n- [x] 自动录像生成\n- [ ] 联动 HLAE（通过mirv_pgl）\n- [ ] 通过 mirv_pgl 读写消息\n- [ ] 比赛信息/录像下载\n- [ ] demo内置下载与下载的进度展示\n\n### 做好的饼\n\n- [x] 载入动画\n- [x] 升级v3界面（类 Fluent Design）\n- [x] 核心：Steam账号信息读取\n- [x] 核心：设置文件加密\n- [x] 核心：steam账号切换免登陆（需要保存密码）\n- [x] 核心：更新检查和点击下载安装，大版本强制更新\n- [x] 核心：安装包读取已安装路径  \n- [x] 核心：单实例\n- [x] 核心：广告\n- [x] 核心：系统托盘\n- [x] 工具：多启动项档位，快捷启动国服、国际服\n- [x] 工具：国服反和谐\n- [x] 工具：简易雷达\n- [x] 工具：VAC验证问题修复\n- [x] 工具：准星生成\n- [x] 工具：击杀条生成\n- [ ] 工具：加入地图、脚本、录像目录的快捷打开按钮\n- [x] 录像：文件夹设置、浏览、录像观看和改名\n- [x] 录像：HLAE和FFmpeg的安装、更新\n- [x] 录像：HLAE启动设置，包括自定义启动和覆盖设置切换\n- [x] 录像：分享链接转换功能（协议问题暂时移出，独立到[另一个仓库](https://github.com/One-Studio/csgo-demo-downloader)）\n- [x] CFG：备份、欢迎、修改文件名、直接打开 local/cfg 文件\n- [x] CFG：云端备份功能（安全问题暂时屏蔽）\n- [x] 录像：demo解析数据\n- [x] 录像：通过md5区分不同的demo 过滤合并信息\n- [x] 账号：用户信息复制和屏蔽功能\n\n## 捐赠\n\n- 支付宝：\n\n<img src=\"./assets/img/支付宝.png\" alt=\"Alipay\" style=\"zoom: 80%;\" />\n\n- 微信：\n\n<img src=\"./assets/img/微信.png\" alt=\"Wechat\" style=\"zoom:80%;\" />\n"
  },
  {
    "path": "assets/css/tailwind.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "nuxt.config.ts",
    "content": "import { defineNuxtConfig } from 'nuxt'\n\n// https://v3.nuxtjs.org/api/configuration/nuxt.config\nexport default defineNuxtConfig({\n\tapp: {\n\t\thead: {\n\t\t\t\"title\": 'CSGO工具箱',\n\t\t\t\"meta\": [{ name: 'description', content: '一个为CSGO游戏的各个方面带来便利的工具集合' }],\n\t\t\t\"link\": [],\n\t\t\t\"style\": [],\n\t\t\t\"script\": [],\n\t\t\t\"noscript\": [],\n\t\t\t\"charset\": \"utf-8\",\n\t\t\t\"viewport\": \"width=device-width, initial-scale=1\"\n\t\t}\n\t},\n\t\n\tmodules: [],\n\t\n\tssr: false,\n\t\n\tcss:[\n\t\t\"~/assets/css/tailwind.css\"\n\t],\n\t\n\tbuild: {\n\t\tpostcss: {\n\t\t\tpostcssOptions: {\n\t\t\t\tplugins: {\n\t\t\t\t\ttailwindcss: {},\n\t\t\t\t\tautoprefixer: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n})\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"scripts\": {\n    \"build\": \"nuxt build\",\n    \"dev\": \"nuxt dev\",\n    \"generate\": \"nuxt generate\",\n    \"preview\": \"nuxt preview\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^10.4.8\",\n    \"nuxt\": \"3.0.0-rc.7\",\n    \"postcss\": \"^8.4.16\",\n    \"tailwindcss\": \"^3.1.8\"\n  },\n  \"dependencies\": {\n    \"scrollreveal\": \"^4.0.9\"\n  }\n}\n"
  },
  {
    "path": "pages/index.vue",
    "content": "<template>\n\t<div class=\"bg\" v-cloak >\n\t\t<div class=\"fade-up-1\" >\n\t\t\t<img src=\"/img/logo.png\" class=\"logo\" alt=\"\" >\n\t\t</div>\n\t\t<div class=\"fade-up-2 relative\" >\n\t\t\t<p class=\"title\" >CSGO工具箱</p>\n\t\t\t<span class=\"badge\" >Beta</span>\n\t\t</div>\n\t\t<p class=\"slogan fade-up-3\" >一个为CSGO游戏的各个方面带来便利的工具集合</p>\n\t\t\n\t\t<div class=\"btn-group fade-up-4\" >\n\t\t\t<a href=\"https://api.upup.cool/get/csgo-toolbox\" target=\"_blank\" ><button class=\"btn-download\">\n\t\t\t\t下载\n\t\t\t</button></a>\n\t\t\t<a href=\"https://github.com/One-Studio/CSGO-Toolbox\" target=\"_blank\" ><button class=\"btn-repo\">\n\t\t\t\t<img src=\"/img/github-fill.svg\" class=\"w-5\" alt=\"github\" >\n\t\t\t\t项目\n\t\t\t</button></a>\n\t\t</div>\n\t\t\n\t\t<p class=\"text-xs opacity-70 tracking-wider fade-up-5\" >当前版本：{{ version }}</p>\n\t</div>\n</template>\n\n<script setup>\n// 版本号\nconst { data: version } = await useFetch('/api/version')\n\n// 动画\nconst { $ScrollReveal } = useNuxtApp();\n\n// 挂载\nonMounted(async () => {\n\tawait nextTick()\n\tawait $ScrollReveal().reveal('.fade-up-1', {delay: 200, duration: 1500, distance: '60px', animated: 'tada', reset: true, easing: 'cubic-bezier(.17,.62,.09,.97)', useDelay: 'always'})\n\tawait $ScrollReveal().reveal('.fade-up-2', {delay: 350, duration: 1200, distance: '60px', animated: 'tada', reset: true, easing: 'cubic-bezier(.17,.62,.09,.97)', useDelay: 'always'})\n\tawait $ScrollReveal().reveal('.fade-up-3', {delay: 550, duration: 1200, distance: '70px', animated: 'tada', reset: true, easing: 'cubic-bezier(.17,.62,.09,.97)', useDelay: 'always'})\n\tawait $ScrollReveal().reveal('.fade-up-4', {delay: 700, duration: 1200, distance: '80px', animated: 'tada', reset: true, easing: 'cubic-bezier(.17,.62,.09,.97)', useDelay: 'always'})\n\tawait $ScrollReveal().reveal('.fade-up-5', {delay: 850, duration: 1200, distance: '90px', animated: 'tada', reset: true, easing: 'cubic-bezier(.17,.62,.09,.97)', useDelay: 'always'})\n\t// await $ScrollReveal().reveal('.fade-up-short', {duration: 1000, distance: '20px', animated: 'tada', reset: true, easing: 'cubic-bezier(.17,.62,.09,.97)', useDelay: 'always', delay: 200})\n})\n\n</script>\n\n<style>\n* {\n\tfont-family: -apple-system, \"PingFang SC\", \"Microsoft YaHei\", system-ui, Arial, serif;\n}\n\nbody {\n\tbackground: linear-gradient(270deg, rgba(233,181,181,0.62), #F2EAF1);\n}\n\n[v-cloak]{\n\tdisplay: none !important;\n}\n</style>\n\n<style scoped>\n.bg {\n\t@apply w-[100vw] h-[100vh] p-4 flex flex-col content-center items-center justify-center text-center;\n\t//background: linear-gradient(270deg, rgba(233,181,181,0.62), #F2EAF1);\n}\n\n.logo {\n\t@apply w-36 shadow-lg hover:shadow-xl duration-300 m-8;\n\tborder-radius: 32px;\n}\n\n\n.title {\n\t@apply font-bold opacity-80 transition-all;\n\tfont-size: 56px;\n\tline-height: 64px;\n}\n\n@media (max-width: 640px) {\n\t.title {\n\t\tfont-size: 48px;\n\t\tline-height: 56px;\n\t}\n}\n\n.badge {\n\t@apply rounded-full bg-white bg-opacity-80 text-[#555] font-normal absolute px-2 py-0.5 -top-1 -right-11;\n\tfont-size: 10px;\n\tline-height: 18px;\n}\n\n.slogan {\n\t@apply opacity-60 m-3 tracking-widest;\n\tfont-size: 18px;\n\tline-height: 26px;\n}\n\n.btn-group {\n\t@apply flex gap-3 mt-6 mb-4;\n}\n\n.btn-download {\n\t@apply p-3 w-32 rounded-full text-sm shadow-sm hover:shadow-md hover:bg-[#E87B5C] active:scale-95 transition duration-300 bg-[#FF9071] text-white font-semibold tracking-wider;\n}\n\n.btn-repo {\n\t@apply py-3 px-6 rounded-full text-sm shadow-sm hover:shadow-md active:scale-95 transition duration-300 bg-white bg-opacity-70 flex justify-center items-center gap-1;\n}\n</style>\n\n"
  },
  {
    "path": "plugins/ScrollReveal.client.ts",
    "content": "import ScrollReveal from 'scrollreveal'\n\nexport default defineNuxtPlugin((nuxtApp) => {\n\t\n\treturn {\n\t\tprovide: {\n\t\t\tScrollReveal\n\t\t}\n\t}\n})\n"
  },
  {
    "path": "server/api/version.ts",
    "content": "export default defineEventHandler( async (event) => {\n\treturn await $fetch('https://api.upup.cool/get/CSGO-Toolbox/version')\n})\n"
  },
  {
    "path": "tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./components/**/*.{vue,js}\",\n    \"./layouts/**/*.vue\",\n    \"./pages/**/*.vue\",\n    \"./plugins/**/*.{js,ts}\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  // https://v3.nuxtjs.org/concepts/typescript\n  \"extends\": \"./.nuxt/tsconfig.json\"\n}\n"
  }
]