diff --git a/.github/ISSUE_TEMPLATE/SPA-en.yml b/.github/ISSUE_TEMPLATE/SPA-en.yml new file mode 100644 index 00000000..9e6bda85 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/SPA-en.yml @@ -0,0 +1,53 @@ +name: 🗒️New Standard +description: Propose, establish, or modify a standard. +title: "🗒️[SPA]" +labels: enhancement +type: Feature +body: + - type: markdown + attributes: + value: | + > [!NOTE] + > To avoid unnecessary trouble, please check if anyone else has already reported the same proposal before filing an issue. [Check for duplicates](https://github.com/xystudiocode/pyClickMouse/issues) 😊 + + > [!IMPORTANT] + > We do not handle issues on Gitee, please use GitHub. 🙋♂️ + + > [!TIP] + > Please report only one proposal at a time. 😀 + - type: textarea + attributes: + label: 🧾New proposal + placeholder: | + Please enter the proposal content here. + description: 🧾Please describe in detail the standard you want to propose. + validations: + required: true + - type: input + attributes: + label: ℹ️Clickmouse version for the proposal + placeholder: | + >=X.X.X or >=X.X.X.X + description: 🔠Provide a three‑ or four‑part version number. + value: | + next official Clickmouse release + validations: + required: true + - type: textarea + attributes: + label: ❓Reason for this proposal + placeholder: | + What problem does it solve? + What does it improve? + Other reasons... + description: ❓Why is this proposal needed? + validations: + required: false + - type: textarea + attributes: + label: ➕Additional information + description: ✉️Anything else you know. + placeholder: | + More information. + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/SPA.yml b/.github/ISSUE_TEMPLATE/SPA.yml index e72c2d35..86b59521 100644 --- a/.github/ISSUE_TEMPLATE/SPA.yml +++ b/.github/ISSUE_TEMPLATE/SPA.yml @@ -8,7 +8,7 @@ body: attributes: value: | > [!NOTE] - > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的立项。[检查是否存在重复](https://github.com/xystudiocode/pyclickmouse/issues)😊 + > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的立项。[检查是否存在重复](https://github.com/xystudiocode/pyClickMouse/issues)😊 > [!IMPORTANT] > 我们不会在gitee上处理issue,请使用github发布。🙋♂️ diff --git a/.github/ISSUE_TEMPLATE/bug-en.yml b/.github/ISSUE_TEMPLATE/bug-en.yml new file mode 100644 index 00000000..4c7924b3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-en.yml @@ -0,0 +1,163 @@ +name: "🐛Bug" +title: "🐛[BUG]" +description: Report a bug. +labels: + - bug +type: Bug +body: +- type: markdown + attributes: + value: | + > [!NOTE] + > To avoid unnecessary trouble, please check if anyone else has already reported the same issue before filing an issue. [Check for duplicates](https://github.com/xystudiocode/pyClickMouse/issues) 😊 + + > [!IMPORTANT] + > We do not handle issues on Gitee, please use GitHub. 🙋♂️ + + > [!TIP] + > Please report only one issue at a time. 😀 +- type: input + attributes: + label: 🔡Clickmouse version + placeholder: X.X.X or X.X.X.X + description: Provide a three‑ or four‑part version number. You can find the current Clickmouse version in "Help" → "About". + validations: + required: true +- type: dropdown + attributes: + label: 🎭Did you find the bug in an official version? + description: ❗Official Clickmouse versions are only published on [GitHub Releases](https://github.com/xystudiocode/pyClickMouse/releases) or [Gitee Releases](https://gitee.com/xystudio889/pyClickMouse/releases). Any other sources are unofficial. + multiple: false + options: + - ✅Yes + - ❌No + - ❓I don't know / forgot + validations: + required: true +- id: modules + type: dropdown + attributes: + label: 🐛Module where the bug occurred + description: 🐛Select the module(s) where you experienced the bug. Multiple selections allowed. + multiple: true + options: + - 🖱️Clicking feature + - 🧮Real‑time calculation and evaluation of click delay (including main window, settings, and quick click) + - ⚙️Settings + - ✳️Adaptive theme switching + - ⌨️Hotkeys + - ️⬜System tray application + - ☁️Other main program features + - ⬇️Initialization program + - 📦Package manager (including the package manager during initialization) + - 🗑️Uninstaller + - 🔄️Update check service + - 🔧Repair tool + - ⤴️Update installation + - 💠Other extensions + - ♻️Cache cleaning + - 🏳️🌈Theme / styling + - 📄Documentation site + - 🟦clickClean + - ❓Other / unknown + validations: + required: true +- type: textarea + attributes: + label: 🐍Bug description + placeholder: | + Please describe it here. + description: 🐍Describe your bug. + validations: + required: true +- type: textarea + attributes: + label: 🔦Impact of this bug + placeholder: | + Please describe it here. + description: 🔦Describe the impact of this bug. + validations: + required: false +- type: textarea + attributes: + label: 📝Steps to reproduce + placeholder: | + 1. Step 1 + 2. Step 2 + 3. Step 3 + 4. Step... + description: 🔧Describe how to reproduce this bug. + validations: + required: false +- type: input + attributes: + label: ℹ️Estimated affected Clickmouse version(s) + placeholder: | + >=X.X.X or >=X.X.X.X + description: 🔠Provide a three‑ or four‑part version number with “>=”. + validations: + required: false +- type: textarea + attributes: + label: 📄Your ideas for fixing the bug + placeholder: | + - Solution 1: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Solution 2: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Solution 3: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Other solutions... + description: ♻️You can provide multiple solutions, but each must be able to resolve your issue. + validations: + required: false +- type: textarea + attributes: + label: 🔄️Workarounds for the bug + placeholder: | + - Workaround 1: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Workaround 2: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Workaround 3: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Other workarounds... + description: 🔄️You can provide multiple workarounds, but each must be able to mitigate your issue. + validations: + required: false +- type: textarea + attributes: + label: 📂Log file + placeholder: | + Paste the last section of the log file here... + description: | + ✉️The log is located at `clickmouse installation directory/cache/logs/ today's date.log`. + **Log sections are separated by `---`. Please copy the last section of the log here**. + validations: + required: false +- type: textarea + attributes: + label: ➕Additional information + placeholder: | + Your operating system version, system language, software that caused the bug, etc. + description: ✉️Provide more information, such as operating system version, system language, software that caused the bug, etc. + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index ef3234e2..6070eb16 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -9,7 +9,7 @@ body: attributes: value: | > [!NOTE] - > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。[检查是否存在重复](https://github.com/xystudiocode/pyclickmouse/issues)😊 + > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。[检查是否存在重复](https://github.com/xystudiocode/pyClickMouse/issues)😊 > [!IMPORTANT] > 我们不会在gitee上处理issue,请使用github发布。🙋♂️ @@ -26,7 +26,7 @@ body: - type: dropdown attributes: label: 🎭你是否从官方版本发现bug - description: ❗clickmouse官方版本只在[github releases](https://github.com/xystudiocode/pyclickmouse/releases)或[gitee releases](https://gitee.com/xystudio889/pyclickmouse/releases)页面发布,其他均为非官方版本。 + description: ❗clickmouse官方版本只在[github releases](https://github.com/xystudiocode/pyClickMouse/releases)或[gitee releases](https://gitee.com/xystudio889/pyClickMouse/releases)页面发布,其他均为非官方版本。 multiple: false options: - ✅是 @@ -57,7 +57,7 @@ body: - 💠其他扩展 - ♻️清理缓存 - 🏳️🌈主题/样式 - - 📄文档 + - 📄文档站 - 🟦clickClean - ❓其他/未知 validations: diff --git a/.github/ISSUE_TEMPLATE/feature-en.yml b/.github/ISSUE_TEMPLATE/feature-en.yml new file mode 100644 index 00000000..fde6ac0f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-en.yml @@ -0,0 +1,93 @@ +name: ❇️New Feature +description: A feature you would like to suggest. +title: "❇️[FEATURE]" +labels: enhancement +type: Feature +body: +- type: markdown + attributes: + value: | + > [!NOTE] + > To avoid unnecessary trouble, please check if anyone else has already reported the same issue before filing an issue. [Check for duplicates](https://github.com/xystudiocode/pyClickMouse/issues) 😊 + + > [!IMPORTANT] + > We do not handle issues on Gitee, please use GitHub. 🙋♂️ + + > [!TIP] + > Please report only one feature at a time. 😀 +- type: dropdown + attributes: + label: ❇️Module for the new feature + description: ❇️Which module does the new feature belong to? + multiple: true + options: + - 🖱️Clicking feature + - 🧮Real‑time calculation and evaluation of click delay (including main window, settings, and quick click) + - ⚙️Settings + - ✳️Adaptive theme switching + - ⌨️Hotkeys + - ️⬜System tray application + - ☁️Other main program features + - ⬇️Initialization program + - 📦Package manager (including the package manager during initialization) + - 🗑️Uninstaller + - 🔄️Update check service + - 🔧Repair tool + - ⤴️Update installation + - 💠Other extensions + - ♻️Cache cleaning + - 📄Documentation site + - 🏳️🌈Theme / styling + - 🟦clickClean + - ❓Other / unknown + validations: + required: true +- type: textarea + attributes: + label: 📄New feature description + placeholder: | + Describe in detail the feature you want to add. + description: 📄Please describe in detail the feature you want to add. + validations: + required: true +- type: textarea + attributes: + label: ❔Reason for this feature + placeholder: | + What problem does it solve? + What does it improve? + Other reasons... + description: ❔Why is this feature needed? + validations: + required: false +- type: textarea + attributes: + label: 🧾Implementation steps ideas + placeholder: | + - Plan 1: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Plan 2: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Plan 3: + - 1. Step 1 + - 2. Step 2 + - 3. Step 3 + - 4. Step... + - Other plans... + description: ♻️You can provide multiple implementation plans, but each must be able to fulfill your requirement. + validations: + required: false +- type: textarea + attributes: + label: ➕Additional information + description: 📄Anything else you know. + placeholder: | + More information. + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml index beb6d94c..adbf69ba 100644 --- a/.github/ISSUE_TEMPLATE/feature.yml +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -8,7 +8,7 @@ body: attributes: value: | > [!NOTE] - > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。[检查是否存在重复](https://github.com/xystudiocode/pyclickmouse/issues)😊 + > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。[检查是否存在重复](https://github.com/xystudiocode/pyClickMouse/issues)😊 > [!IMPORTANT] > 我们不会在gitee上处理issue,请使用github发布。🙋♂️ @@ -36,7 +36,7 @@ body: - ⤴️安装更新 - 💠其他扩展 - ♻️清理缓存 - - 📄文档 + - 📄文档站 - 🏳️🌈主题/样式 - 🟦clickClean - ❓其他/未知 diff --git a/.github/ISSUE_TEMPLATE/tasks-en.yml b/.github/ISSUE_TEMPLATE/tasks-en.yml new file mode 100644 index 00000000..f42f6e8a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/tasks-en.yml @@ -0,0 +1,129 @@ +name: ☑️Task List +description: Task lists, e.g., for drafting a new release plan. +title: "☑️[TASK]" +labels: enhancement +type: Task +body: +- type: markdown + attributes: + value: | + > [!NOTE] + > To avoid unnecessary trouble, please check if anyone else has already reported the same issue before filing an issue. [Check for duplicates](https://github.com/xystudiocode/pyClickMouse/issues) 😊 + + > [!IMPORTANT] + > We do not handle issues on Gitee, please use GitHub. 🙋♂️ +- type: dropdown + attributes: + label: ☑️Modules covered by the new task + description: ☑️Which modules should the new task cover? + multiple: true + options: + - 🖱️Clicking feature + - 🧮Real‑time calculation and evaluation of click delay (including main window, settings, and quick click) + - ⚙️Settings + - ✳️Adaptive theme switching + - ⌨️Hotkeys + - ️⬜System tray application + - ☁️Other main program features + - ⬇️Initialization program + - 📦Package manager (including the package manager during initialization) + - 🗑️Uninstaller + - 🔄️Update check service + - 🔧Repair tool + - ⤴️Update installation + - 💠Other extensions + - ♻️Cache cleaning + - 📄Documentation site + - 🏳️🌈Theme / styling + - 🟦clickClean + - ❓Other / unknown + validations: + required: true +- type: textarea + attributes: + label: 🧾Description of each new feature + placeholder: | + - New feature 1 + - New feature 2 + - New feature 3 + - New feature... + description: 🧾Please describe in detail the features you want to add. + validations: + required: true +- type: textarea + attributes: + label: ❓Reason for these features + placeholder: | + What problem does it solve? + What does it improve? + Other reasons... + description: ❓Why are these features needed? + validations: + required: false +- type: textarea + attributes: + label: 📄Ideas for implementation steps + placeholder: | + - New feature 1: + - - Plan 1: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Plan 2: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Plan 3: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Other plans... + - New feature 2: + - - Plan 1: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Plan 2: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Plan 3: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Other plans... + - New feature 3: + - - Plan 1: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Plan 2: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Plan 3: + - - 1. Step 1 + - - 2. Step 2 + - - 3. Step 3 + - - 4. Step... + - - Other plans... + - Other features... + description: ♻️You can provide multiple implementation plans for multiple new features, but each plan must be able to fulfill your requirement. + validations: + required: false +- type: textarea + attributes: + label: ➕Additional information + description: ✉️Anything else you know + placeholder: | + More information. + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/tasks.yml b/.github/ISSUE_TEMPLATE/tasks.yml index 07965b1e..815831bb 100644 --- a/.github/ISSUE_TEMPLATE/tasks.yml +++ b/.github/ISSUE_TEMPLATE/tasks.yml @@ -8,7 +8,7 @@ body: attributes: value: | > [!NOTE] - > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。[检查是否存在重复](https://github.com/xystudiocode/pyclickmouse/issues)😊 + > 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。[检查是否存在重复](https://github.com/xystudiocode/pyClickMouse/issues)😊 > [!IMPORTANT] > 我们不会在gitee上处理issue,请使用github发布。🙋♂️ @@ -33,7 +33,7 @@ body: - ⤴️安装更新 - 💠其他扩展 - ♻️清理缓存 - - 📄文档 + - 📄文档站 - 🏳️🌈主题/样式 - 🟦clickClean - ❓其他/未知 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..0e5dba4b --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,46 @@ +name: Deploy to GitHub Pages + +# 1. 定义触发工作流的事件:当推送到分支时触发,手动触发 +on: + push: + branches: + - main # 推送到 main 分支时触发 + - release_preview # 推送到 release_preview 分支时触发 + - develop # 推送到 develop 分支时触发 + workflow_dispatch: + +permissions: + contents: write + +jobs: + build-and-deploy: + # 任务运行的环境:最新版本的 Ubuntu 虚拟机 + runs-on: ubuntu-latest + + # 3. 任务的具体步骤 + steps: + # 步骤1: 签出你的仓库代码到虚拟机 + - name: Checkout 🛎️ + uses: actions/checkout@v3 + + # 设置 Node.js 环境 + - name: Setup Node.js 🔧 + uses: actions/setup-node@v3 + with: + node-version: '24' + cache: 'npm' # 启用 npm 缓存以加速后续安装 + + # 安装项目依赖 + - name: Install Dependencies 📦 + run: npm ci + + # 构建项目(生成静态文件到 dist/ 或 build/ 目录) + - name: Build Project 🏗️ + run: npm run build + + # 部署到 GitHub Pages 分支 + - name: Deploy to GitHub Pages 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: gh-pages + folder: documents/.vitepress/dist diff --git a/.gitignore b/.gitignore index ccfdfc2c..cb43d78d 100644 --- a/.gitignore +++ b/.gitignore @@ -410,12 +410,8 @@ updater.old/ updaterback/ data/ key.json -gui/dev_list/* -!gui/dev_list/in_dev res/packages/ Gui/packages.json - -dev.dat *.zip *.7z source/ @@ -601,3 +597,148 @@ cython_debug/ # PyPI configuration file .pypirc + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.* +!.env.example + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Sveltekit cache directory +.svelte-kit/ + +# vitepress build output +**/.vitepress/dist + +# vitepress cache directory +**/.vitepress/cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# Firebase cache directory +.firebase/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v3 +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# Vite logs files +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +cache/ +source/ + +demo/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 95575a18..669399bc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,7 @@ "markdown-preview-enhanced.previewTheme": "atom-dark.css", "files.associations": { "*.qss": "css", - "*.gui": "json" + "*.gui": "xml" }, "gitLineAuthor.colorConfigs": [ { diff --git a/CONTRIBUTING-zh_CN.md b/CONTRIBUTING-zh_CN.md new file mode 100644 index 00000000..3e0bcd96 --- /dev/null +++ b/CONTRIBUTING-zh_CN.md @@ -0,0 +1,159 @@ +# ❓怎么贡献? +
+ +## ⬆️commit message + +需要遵循以下格式: +``` +更新类型(更新模块):(可选)(版本号) (更新概括): + +- [(可选)子更新类型]更新内容1 +- [(可选)子更新类型]更新内容2 +- ... +``` + +更新类型有这些内容: +| 类型 | 说明 | +| --- | --- | +| ✅feat | 新功能 | +| 🔧modify | 修改功能 | +| 🐛fix | 修bug | +| ⚒️refactor | 重构 | +| 📃docs | 改文档,比如README | +| ❇️style | 改代码风格,不影响功能 | +| 🔎test | 加测试、改测试 | +| 📆chore | 杂项,比如改.gitignore | +| ⏫perf | 性能优化 | +| 🛒ci | CI/CD相关改动 | +| 🚅build | 改构建系统或依赖 | +| ◀️revert | 回滚 | +| 🔡dependency | 依赖更新 | +| ❌remove | 删除弃用的组件 | +| ↪️move | 移动了组件 | +| ❓unknown | 未知类型 | +| 自定义 | 尽量以一个直观的英文单词描述,最好配上emoji | + +内容较多时需要对更新内容添加更新类型提示 + +## 🗂️分支 + +请按此图所示的分支结构来更新: +
+
+创建的分支需要以`feature/`开头,以表示功能分支,或创建一个fork,并在fork的分支开发。
+
+发布pr时不限定合并分支,只要不是`main`分支都可以。
+
+## 🔠版本号
+clickmouse版本格式为:`A.B.C.D[(alpha | beta |.dev | rc) E]`
+## 😊正式版本
+正式版不带.dev、alpha、beta或rc后缀。
+
+A位代表有重大更新,有代码级的变动。如1.0升级到2.0就重构了代码。
+
+B位代表有普通更新,通常是更新一些大功能。
+
+C位代表有修复更新,通常会更新一些小功能和一些bug。
+
+D位代表版本代号,通常每A, B, C位有变动时候+1。也有可能A, B, C位没有变动,D位+1,这代表紧急更新,通常是修复几个重大影响的bug。
+
+## 🅱️测试版本
+测试版本带.dev、alpha、beta或rc后缀。
+
+通常前面的`A.B.C.D`在一个测试周期内不变,代表下一个版本。
+
+`.dev`代表早期开发更新,功能不稳定,bug很多,位于版本项目初期。这阶段新增的功能将会被放到实验室中,并默认关闭。
+
+`alpha`代表晚期开发更新,功能不完善,bug较多,位于版本项目早期。这阶段新增的功能将会被放到实验室中,并默认关闭。
+
+`beta`代表发布测试更新,功能完善,bug较少,不会再新增功能,位于版本项目中期,并且会逐步合并实验室中的feature。
+
+`rc`代表预备发布版本,功能完善,bug较少,会修复一些重要安全问题或bug,最接近正式版,即将发布正式版,位于版本项目末期。
+
+## ❓issue
+- 标题格式:`[类型] 标题`
+- 内容应准确写出你的需求,并选择性给出解决方案,上传截图,添加附加信息(如clickmouse版本号)
+- 类型为`bug`、`enhancement`、`question`等。
+- 我们给了一些模板,可直接使用。
+- 使用`labels`来标记issue的类型,比如`bug`、`enhancement`、`question`等。
+- 设置issue的`milestone`为你想应用的issue版本。
+- 安全问题请见[安全说明文档](./SECURITY.md)。
+
+## ❇️pr
+- 标题格式:`[类型] 标题`
+- 使用`labels`来标记pr的类型,比如`bug`、`enhancement`、`question`等。
+- 关联issue,这样我们就可以知道这个pr解决了哪个issue。
+- 需要准确写出更新内容,关联到版本号的milestone。
+- 可选添加实现思路
+
+### 🎫规范
+我们pr合并的顺序为:
+```mermaid
+graph LR
+A(其他用户的功能开发分支) --> B(develop/rp分支)
+B --> C(main分支)
+```
+
+pr无特定格式,但是必须清晰描述更新内容,关联到版本号的milestone;标题要简略描述更新内容,若修复或添加了issue里的建议,把该issue编号写进该行为,若出现多个重复issue,则只用写一个,并简单描述此bug。
+
+### ✈️快车pr
+> [!WARNING]
+> 快车pr请谨慎使用
+- 快车pr的意思是跳过部分正常的pr合并分支步骤,以更快的合并到目标分支的功能。
+- 标题格式:`[✈️快车] 标题`
+- 使用快车必须在pr描述中说明使用的原因
+
+如果有人快车合并,但没写快车合并的原因,则拒绝合并该人的分支。
+
+快车pr有高优先级,会优先进行处理。
+
+## 📊milestone
+- 我们给每个版本都设置了一个milestone,用来管理该版本的issue和pr。
+- 需要每个issue或pr都关联到一个milestone,这样我们才能知道该issue或pr是否在下个版本中添加。
+- milestone格式为:`dev_版本号`
+
+## ⬇️配置仓库
+1. 下载仓库:`git clone https://github.com/xystudiocode/pyClickMouse.git`
+2. 对于python版本安装python,推荐使用3.13,和软件开发者的版本一一致,[下载连接](https://www.python.org/downloads/release/python-31312/)
+3. 对于头文件和dll版本,可以安装[visual studio](https://visualstudio.microsoft.com/)。
+### 🖥️GUI
+1. 下载源码
+2. 放置一个`7z.exe`和`7z.dll`到`gui`目录
+3. 安装chocolately
+```powershell
+Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
+```
+4. 安装make工具
+```powershell
+choco install make
+```
+5. 配置python包
+```powershell
+pip install -r requirements.txt
+```
+6. 编译
+```powershell
+make clickmouse # 编译clickmouse
+make extension # 编译扩展
+make clickclean # 如果你要编译精简版,请用这个。
+```
+7. 运行`dist/clickmouse/clickmouse/main.exe`就可以加载clickmouse了。
+### 🥴头文件
+仅需修改头文件,就可以被调用
+### ⚙️dll调用
+使用visual studio修改`./dll/dll.sln`里的`源文件/dllmain.cpp`
+### 💾gui旧版本
+> [!NOTE]
+> gui旧版本的再编译不接受pull request
+使用visual studio修改`./ClickMouse-old/ClickMouse.sln`里的`源文件/clickmouse.cpp`
+### 🐍python库调用
+修改`clickmouse/`下的代码,运行`pip install .`安装
+### 🦎pyd调用
+修改`cython/main.py`的代码,然后执行
+```python cython/setup.py build_ext --inplace```
+编译结束后,该目录下应该会有个以`.pyd`结尾的文件。
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9712a086..c0bed8fa 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,152 +1,180 @@
-# ❓怎么贡献?
-## ⬆️commit message
+# ❓ How to Contribute?
+
+
+
+## ⬆️ Commit Message
+
+Must follow the format below:
-需要遵循以下格式:
```
-更新类型(更新模块):(可选)(版本号) (更新概括):
+UpdateType(Module):(optional)(Version) Summary:
-- [(可选)子更新类型]更新内容1
-- [(可选)子更新类型]更新内容2
+- [(optional) Sub-updateType] Update content 1
+- [(optional) Sub-updateType] Update content 2
- ...
```
-更新类型有这些内容:
-| 类型 | 说明 |
+Update types include:
+
+| Type | Description |
| --- | --- |
-| ✅feat | 新功能 |
-| 🔧modify | 修改功能 |
-| 🐛fix | 修bug |
-| ⚒️refactor | 重构 |
-| 📃docs | 改文档,比如README |
-| ❇️style | 改代码风格,不影响功能 |
-| 🔎test | 加测试、改测试 |
-| 📆chore | 杂项,比如改.gitignore |
-| ⏫perf | 性能优化 |
-| 🛒ci | CI/CD相关改动 |
-| 🚅build | 改构建系统或依赖 |
-| ◀️revert | 回滚 |
-| 🔡dependency | 依赖更新 |
-| ❌remove | 删除弃用的组件 |
-| ↪️move | 移动了组件 |
-| ❓unknown | 未知类型 |
-| 自定义 | 尽量以一个直观的英文单词描述,最好配上emoji |
+| ✅feat | New feature |
+| 🔧modify | Modify functionality |
+| 🐛fix | Bug fix |
+| ⚒️refactor | Refactor |
+| 📃docs | Documentation changes (e.g., README) |
+| ❇️style | Code style changes, no functional impact |
+| 🔎test | Add or modify tests |
+| 📆chore | Chores, e.g., modify .gitignore |
+| ⏫perf | Performance improvements |
+| 🛒ci | CI/CD related changes |
+| 🚅build | Build system or dependency changes |
+| ◀️revert | Revert changes |
+| 🔡dependency | Dependency updates |
+| ❌remove | Remove deprecated components |
+| ↪️move | Move components |
+| ❓unknown | Unknown type |
+| custom | Use an intuitive English word, preferably with an emoji |
-内容较多时需要对更新内容添加更新类型提示
+When there are many updates, add an update type hint for each update item.
-## 🗂️分支
+## 🗂️ Branches
-请按此图所示的分支结构来更新:
-
+Please follow the branching structure shown in the image below:
-创建的分支需要以`feature/`开头,以表示功能分支,或创建一个fork,并在fork的分支开发。
+
-发布pr时不限定合并分支,只要不是`main`分支都可以。
+Create branches with the prefix `feature/` to indicate a feature branch, or create a fork and develop on a branch within the fork.
-## 🔠版本号
-clickmouse版本格式为:`A.B.C.D[(alpha | beta |.dev | rc) E]`
-## 😊正式版本
-正式版不带.dev、alpha、beta或rc后缀。
+When opening a PR, the target branch is not restricted, as long as it is not the `main` branch.
-A位代表有重大更新,有代码级的变动。如1.0升级到2.0就重构了代码。
+## 🔠 Version Number
-B位代表有普通更新,通常是更新一些大功能。
+The clickmouse version format is: `A.B.C.D[(alpha | beta | .dev | rc) E]`
-C位代表有修复更新,通常会更新一些小功能和一些bug。
+## 😊 Official Releases
-D位代表版本代号,通常每A, B, C位有变动时候+1。也有可能A, B, C位没有变动,D位+1,这代表紧急更新,通常是修复几个重大影响的bug。
+Official releases do not include the suffixes .dev, alpha, beta, or rc.
-## 🅱️测试版本
-测试版本带.dev、alpha、beta或rc后缀。
+- The A digit indicates major updates with code-level changes. For example, upgrading from 1.0 to 2.0 involves a code refactor.
+- The B digit indicates regular updates, usually introducing major features.
+- The C digit indicates patch updates, typically including minor features and bug fixes.
+- The D digit indicates the version codename, incremented whenever A, B, or C change. It may also be incremented without changes to A, B, or C for emergency updates (e.g., fixing several critical bugs).
-通常前面的`A.B.C.D`在一个测试周期内不变,代表下一个版本。
+## 🅱️ Pre-release Versions
-`.dev`代表早期开发更新,功能不稳定,bug很多,位于版本项目初期。这阶段新增的功能将会被放到实验室中,并默认关闭。
+Pre-release versions include .dev, alpha, beta, or rc suffixes. Typically, the preceding `A.B.C.D` remains unchanged during a test cycle, representing the next version.
-`alpha`代表晚期开发更新,功能不完善,bug较多,位于版本项目早期。这阶段新增的功能将会被放到实验室中,并默认关闭。
+- `.dev` represents early development updates, unstable features, many bugs, at the project's initial stage. New features will be placed in the lab and disabled by default.
+- `alpha` represents late development updates, incomplete features, many bugs, at the project's early stage. New features will be placed in the lab and disabled by default.
+- `beta` represents release candidate testing updates, complete features, fewer bugs, no new features added, at the project's mid stage, gradually merging lab features.
+- `rc` represents a release candidate, complete features, fewer bugs, critical security or bug fixes, closest to the official release, at the project's final stage.
-`beta`代表发布测试更新,功能完善,bug较少,不会再新增功能,位于版本项目中期,并且会逐步合并实验室中的feature。
+## ❓ Issues
-`rc`代表预备发布版本,功能完善,bug较少,会修复一些重要安全问题或bug,最接近正式版,即将发布正式版,位于版本项目末期。
+- Title format: `[Type] Title`
+- Content should accurately describe your request, optionally provide a solution, upload screenshots, and add additional information (e.g., clickmouse version number).
+- Types include `bug`, `enhancement`, `question`, etc.
+- We provide templates that can be used directly.
+- Use `labels` to mark the issue type, such as `bug`, `enhancement`, `question`, etc.
+- Set the issue's `milestone` to the version you intend to apply the issue to.
+- For security issues, refer to the [Security Documentation](./SECURITY.md).
-## ❓issue
-- 标题格式:`[类型] 标题`
-- 内容应准确写出你的需求,并选择性给出解决方案,上传截图,添加附加信息(如clickmouse版本号)
-- 类型为`bug`、`enhancement`、`question`等。
-- 我们给了一些模板,可直接使用。
-- 使用`labels`来标记issue的类型,比如`bug`、`enhancement`、`question`等。
-- 设置issue的`milestone`为你想应用的issue版本。
-- 安全问题请见[安全说明文档](./SECURITY.md)。
+## ❇️ Pull Requests
-## ❇️pr
-- 标题格式:`[类型] 标题`
-- 使用`labels`来标记pr的类型,比如`bug`、`enhancement`、`question`等。
-- 关联issue,这样我们就可以知道这个pr解决了哪个issue。
-- 需要准确写出更新内容,关联到版本号的milestone。
-- 可选添加实现思路
+- Title format: `[Type] Title`
+- Use `labels` to mark the PR type, such as `bug`, `enhancement`, `question`, etc.
+- Link to an issue so we know which issue this PR resolves.
+- Accurately describe the changes and link to the version milestone.
+- Optionally provide implementation ideas.
+
+### 🎫 Guidelines
+
+The order of PR merging is as follows:
-### 🎫规范
-我们pr合并的顺序为:
```mermaid
graph LR
-A(其他用户的功能开发分支) --> B(develop/rp分支)
-B --> C(main分支)
+A(Other user's feature branch) --> B(develop/rp branch)
+B --> C(main branch)
```
-pr无特定格式,但是必须清晰描述更新内容,关联到版本号的milestone;标题要简略描述更新内容,若修复或添加了issue里的建议,把该issue编号写进该行为,若出现多个重复issue,则只用写一个,并简单描述此bug。
+PRs do not have a strict format but must clearly describe the changes, link to the version milestone, and have a title that briefly summarizes the changes. If the PR fixes or implements a suggestion from an issue, include the issue number in that line. For multiple duplicate issues, only write one and briefly describe the bug.
+
+### ✈️ Express PR
-### ✈️快车pr
> [!WARNING]
-> 快车pr请谨慎使用
-- 快车pr的意思是跳过部分正常的pr合并分支步骤,以更快的合并到目标分支的功能。
-- 标题格式:`[✈️快车] 标题`
-- 使用快车必须在pr描述中说明使用的原因
-
-如果有人快车合并,但没写快车合并的原因,则拒绝合并该人的分支。
-
-快车pr有高优先级,会优先进行处理。
-
-## 📊milestone
-- 我们给每个版本都设置了一个milestone,用来管理该版本的issue和pr。
-- 需要每个issue或pr都关联到一个milestone,这样我们才能知道该issue或pr是否在下个版本中添加。
-- milestone格式为:`dev_版本号`
-
-## ⬇️配置仓库
-1. 下载仓库:`git clone https://github.com/xystudiocode/pyclickmouse.git`
-2. 对于python版本安装python,推荐使用3.13,和软件开发者的版本一一致,[下载连接](https://www.python.org/downloads/release/python-31312/)
-3. 对于头文件和dll版本,可以安装[visual studio](https://visualstudio.microsoft.com/)。
-### 🖥️GUI
-1. 下载源码
-2. 放置一个`7z.exe`和`7z.dll`到`gui`目录
-3. 安装chocolately
+> Use express PRs with caution.
+
+- Express PR means skipping some normal PR merge steps to merge into the target branch faster.
+- Title format: `[✈️Express] Title`
+- You must explain the reason for using an express PR in the PR description.
+
+If someone merges via express PR without stating the reason, the merge will be rejected.
+
+Express PRs have high priority and will be handled first.
+
+## 📊 Milestones
+
+- We set a milestone for each version to manage issues and PRs for that version.
+- Each issue or PR must be linked to a milestone so we know whether it will be included in the next version.
+- Milestone format: `dev_version_number`
+
+## ⬇️ Setting Up the Repository
+
+1. Clone the repository: `git clone https://github.com/xystudiocode/pyClickMouse.git`
+2. For the Python version, install Python (recommended version 3.13, consistent with the software developer's version). [Download link](https://www.python.org/downloads/release/python-31312/)
+3. For the header file and DLL versions, you can install [Visual Studio](https://visualstudio.microsoft.com/).
+
+### 🖥️ GUI
+
+1. Download the source code.
+2. Place `7z.exe` and `7z.dll` in the `gui` directory.
+3. Install Chocolatey:
```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
```
-4. 安装make工具
+4. Install make:
```powershell
choco install make
```
-5. 配置python包
+5. Install Python packages:
```powershell
pip install -r requirements.txt
```
-6. 编译
+6. Build:
```powershell
-make clickmouse # 编译clickmouse
-make extension # 编译扩展
-make clickclean # 如果你要编译精简版,请用这个。
+make clickmouse # Build clickmouse
+make extension # Build extension
+make clickclean # Use this if you want to build the slim version
```
-7. 运行`dist/clickmouse/clickmouse/main.exe`就可以加载clickmouse了。
-### 🥴头文件
-仅需修改头文件,就可以被调用
-### ⚙️dll调用
-使用visual studio修改`./dll/dll.sln`里的`源文件/dllmain.cpp`
-### 💾gui旧版本
+7. Run `dist/clickmouse/clickmouse/main.exe` to load clickmouse.
+
+### 🥴 Header Files
+
+You only need to modify the header files to call the library.
+
+### ⚙️ DLL Usage
+
+Modify `源文件/dllmain.cpp` in `./dll/dll.sln` using Visual Studio.
+
+### 💾 Old GUI Version
+
> [!NOTE]
-> gui旧版本的再编译不接受pull request
-使用visual studio修改`./ClickMouse-old/ClickMouse.sln`里的`源文件/clickmouse.cpp`
-### 🐍python库调用
-修改`clickmouse/`下的代码,运行`pip install .`安装
-### 🦎pyd调用
-修改`cython/main.py`的代码,然后执行
+> Recompilation of the old GUI version will not accept pull requests.
+
+Modify `源文件/clickmouse.cpp` in `./ClickMouse-old/ClickMouse.sln` using Visual Studio.
+
+### 🐍 Python Library Usage
+
+Modify the code in `clickmouse/` and run `pip install .` to install.
+
+### 🦎 PYD Usage
+
+Modify the code in `cython/main.py`, then execute:
```python cython/setup.py build_ext --inplace```
-编译结束后,该目录下应该会有个以`.pyd`结尾的文件。
\ No newline at end of file
+After compilation, there should be a file ending with `.pyd` in the directory.
\ No newline at end of file
diff --git a/Gui/install_pack.py b/Gui/install_pack.py
index 80555cd8..10d75b8e 100644
--- a/Gui/install_pack.py
+++ b/Gui/install_pack.py
@@ -4,7 +4,7 @@
app = QApplication(sys.argv)
from uiStyles.QUI import *
-from uiStyles import PagesUI, UMessageBox, MessageButtonTemplate, styles, maps, UCheckBox
+from uiStyles import PagesUI, UMessageBox, MessageButton, styles, maps, UCheckBox
import pyperclip
from sharelibs import (get_lang, settings, get_inst_lang, get_icon, system_lang, parse_system_language_to_lang_id, run_software, get_resource_path, is_admin, get_init_lang, QtThread, mem_id)
import win32com.client
@@ -143,8 +143,8 @@ def new_msg(parent,
title: str,
text: str,
icon: QMessageBox.Icon,
- buttons: MessageButtonTemplate = MessageButtonTemplate.OK,
- defaultButton: MessageButtonTemplate = MessageButtonTemplate.OK):
+ buttons: MessageButton = MessageButton.OK,
+ defaultButton: MessageButton = MessageButton.OK):
msg_box = UMessageBox.new_msg(parent, title, text, icon, buttons, defaultButton)
new_color_bar(msg_box)
@@ -216,7 +216,7 @@ def apply_titleBar(self, window: QMainWindow | QDialog):
'''应用标题栏样式'''
hwnd = window.winId().__int__()
- if select_styles.css_data['.meta']['mode'] == 'dark':
+ if select_styles.css_data['.meta']['--mode'] == 'dark':
is_dark_mode = 1
else:
is_dark_mode = 0
@@ -738,7 +738,7 @@ def install(self):
winreg.SetValueEx(uninstall_key, 'DisplayVersion', 0, winreg.REG_SZ, version)
winreg.SetValueEx(uninstall_key, 'EstimatedSize', 0, winreg.REG_DWORD, int(get_dir_size_for_reg(install_path)))
- winreg.SetValueEx(uninstall_key, 'URLInfoAbout', 0, winreg.REG_SZ, 'https://www.github.com/xystudiocode/pyclickmouse')
+ winreg.SetValueEx(uninstall_key, 'URLInfoAbout', 0, winreg.REG_SZ, 'https://www.github.com/xystudiocode/pyClickMouse')
winreg.SetValueEx(uninstall_key, 'DisplayIcon', 0, winreg.REG_SZ, fr'{install_path}\res\icons\clickmouse\icon.ico')
winreg.SetValueEx(uninstall_key, 'RegOwner', 0, winreg.REG_SZ, 'xystudio')
@@ -781,7 +781,7 @@ def on_next(self):
self,
get_ipk_lang('1a'),
get_ipk_lang('24').format('\n'.join(self.changes if self.changes else [get_ipk_lang('2f')])),
- MessageButtonTemplate.YESNO,
+ MessageButton.YESNO,
)
for i in packages_info:
@@ -793,7 +793,7 @@ def on_next(self):
self.changes = get_list_diff(select_package_id, package_id_list)
- if message == 3:
+ if message == MessageButton.NO:
return
else:
message =QMessageBox.question(
diff --git a/Gui/logger.py b/Gui/logger.py
index 4f0666b6..956e6e81 100644
--- a/Gui/logger.py
+++ b/Gui/logger.py
@@ -3,6 +3,10 @@
from datetime import datetime
from pathlib import Path
import logging
+import functools
+import traceback
+from PySide6.QtWidgets import QMessageBox
+import sys
def remove_old_log(directory_path):
'''
@@ -45,6 +49,12 @@ def remove_old_log(directory_path):
os.remove(file_path)
except Exception as e:
pass
+
+class ExceptionVal:
+ raise_trace = 0b1
+ output_msg = 0b10
+ exit = 0b100
+ all = raise_trace | output_msg | exit
# 定义日志路径
folder_path = Path("cache/logs")
@@ -69,18 +79,29 @@ def format(self, record):
return record.getMessage()
else:
return self.default_formatter.format(record)
+
+class LogFilter(logging.Filter):
+ def __init__(self, default_service_id):
+ super().__init__()
+ self.default_service_id = default_service_id
+
+ def filter(self, record):
+ if not hasattr(record, 'service_id'):
+ record.service_id = self.default_service_id
+ return True
class Logger:
- def __init__(self, name):
+ def __init__(self, default_service_id):
+ self.default_service_id = default_service_id
# 创建self.logger对象
- self.logger = logging.getLogger(name)
+ self.logger = logging.getLogger(default_service_id)
self.logger.setLevel(logging.DEBUG) # 设置最低日志级别
# 控制台处理器 - 仅WARNING及以上级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING) # 设置控制台日志级别
format = {
- 'default_format': '%(asctime)s - %(levelname)s - %(message)s',
+ 'default_format': '%(asctime)s - %(service_id)s - %(levelname)s - %(message)s',
'simple_format': '%(message)s' # 仅输出消息
}
console_fmt = ConditionalFormatter(
@@ -99,11 +120,53 @@ def __init__(self, name):
# 添加处理器
self.logger.addHandler(console_handler)
self.logger.addHandler(file_handler)
+ self.logger.addFilter(LogFilter(default_service_id=default_service_id))
self.info(f'{"-" * 50}', extra={'simple_format': True})
self.info(f'logger Started')
remove_old_log(folder_path)
+ def auto_logger(self, service_id: str | None=None, parent:list | None=None , start_extra_text: str='', end_extra_text:str='', start_extra:str | None=None, end_extra: str | None=None, level=logging.INFO):
+ def decorator(func):
+ @functools.wraps(func)
+ def wrapper(*args, **kwargs):
+ match level:
+ case logging.DEBUG:
+ log_func = self.debug
+ case logging.INFO:
+ log_func = self.info
+ case logging.WARNING:
+ log_func = self.warning
+ case logging.ERROR:
+ log_func = self.error
+ case logging.CRITICAL:
+ log_func = self.critical
+ case _:
+ log_func = self.info
+ out_service_id = self.default_service_id if service_id is None else service_id
+ start_extra_out = {} if start_extra is None else start_extra
+ end_extra_out = {} if end_extra is None else end_extra
+ parent_out = [] if parent is None else parent
+
+ function_name = '.'.join(parent_out) + ('.' if parent else '') + func.__name__
+
+ log_func(f'Running function: {function_name} args={args} kwargs={kwargs}', extra={'service_id': out_service_id, **start_extra_out})
+ if start_extra_text:
+ log_func(start_extra_text, extra={'service_id': out_service_id, **start_extra_out})
+ try:
+ result = func(*args, **kwargs)
+ except Exception as e:
+ trace = traceback.format_exc()
+ self.exception(out_service_id, trace, f'Function {function_name} raised an unexpected exception', extra={'service_id': out_service_id, **end_extra_out})
+ QMessageBox.critical(None, 'An unexpected error occurred', f'An unexpected error occurred in {function_name}: \n{trace}\nPlease look the log path: {(folder_path / f"{log_id}.log").resolve()} and send me the log file on issue: https://github.com/xystudiocode/pyClickMouse/issues/new/choose')
+ sys.exit(1) # 退出程序
+ log_func(f'Function {function_name} running successfull, returned: {result}', extra={'service_id': out_service_id, **end_extra_out})
+ if end_extra_text:
+ log_func(end_extra_text, extra={'service_id': out_service_id, **end_extra_out})
+ return result
+ return wrapper
+ return decorator
+
def debug(self, msg, extra=None):
self.logger.debug(msg, extra=extra)
@@ -119,5 +182,13 @@ def error(self, msg, extra=None):
def critical(self, msg, extra=None):
self.logger.critical(msg, extra=extra)
- def exception(self, service, trace, msg='', extra=None):
- self.critical(f'{msg}: An error occurred in {service}:\n{trace}', extra=extra)
\ No newline at end of file
+ def exception(self, service, msg='', extra=None, mode: ExceptionVal = ExceptionVal.raise_trace):
+ if mode & ExceptionVal.raise_trace: # 获取堆栈
+ trace = '\n' + traceback.format_exc()
+ else:
+ trace = ''
+ self.critical(f'{msg}: An error occurred in {service}:{trace}', extra=extra)
+ if mode & ExceptionVal.output_msg: # 输出消息
+ QMessageBox.critical(None, 'An unexpected error occurred', f'An unexpected error occurred: {trace}\nPlease look the log path: {(folder_path / f"{log_id}.log").resolve()} and send me the log file on issue: https://github.com/xystudiocode/pyClickMouse/issues/new/choose')
+ if mode & ExceptionVal.exit: # 退出程序
+ sys.exit(1) # 退出程序
diff --git a/Gui/main.py b/Gui/main.py
index 1e51b76a..2f17336e 100644
--- a/Gui/main.py
+++ b/Gui/main.py
@@ -1,24 +1,25 @@
# 加载ui框架
from PySide6.QtWidgets import QApplication
import sys
-from logger import Logger
+from logger import Logger, logging, ExceptionVal
app = QApplication(sys.argv)
-logger = Logger('Main')
-from uiStyles.QUI import *
+logger = Logger('clickmouse.main')
# 加载框架
+try:
+ from sharelibs import * # 共享库
+except:
+ logger.exception('clickmouse.main', mode=ExceptionVal.all)
+from uiStyles.QUI import *
+from uiStyles import *
from datetime import datetime # 检查时间
from pynput import keyboard # 热键功能库
import pyautogui # 鼠标操作库
from time import sleep, time # 延迟
from webbrowser import open as open_url # 关于作者
from check_update import check_update, web_data, download_file # 更新检查
-from uiStyles import (UnitInputLayout, styles, maps, StyleReplaceMode, ULabel, CustonMessageButton, SelectUI, UCheckBox, UMessageBox, MessageButtonTemplate) # 软件界面样式
-from uiStyles import indexes as style_indexes # 界面组件样式索引
-from sharelibs import (run_software, langs, create_shortcut, __version__, is_pre, get_icon, default_button_text,
- get_unit_value, unit_lang, get_size_text, get_file_hash, system_lang, settings, QtThread,
- default_settings, mem_id, get_resource_path, run_as_admin, get_lang, multi_replace) # 共享库
-import parse_dev # 解析开发固件配置
+from uiStyles import indexes as style_indexes
+from sharelibs import __version__ # 版本号
import winreg # 注册表库
import math # 数学库
import colorsys # 颜色库
@@ -39,6 +40,7 @@
# TODO: 添加更多更新设置,使用hashlib.algorithms_available获取支持的hash算法
+@logger.auto_logger()
def get_windows_version():
'''获取winmdows版本'''
# 检查系统
@@ -56,28 +58,29 @@ def get_windows_version():
else:
return major_version
+@logger.auto_logger()
def filter_hotkey(text:str):
return text.split('(')[0]
+@logger.auto_logger('clickmouse.update')
def load_update_cache():
'''
加载更新缓存文件
'''
- logger.info('Load update cache.')
+ service = 'clickmouse.update'
if update_cache_path.exists():
with open(update_cache_path, 'r', encoding='utf-8') as f:
cache = json.load(f)
return cache
else:
- logger.warning('Update cache file not found, will create a new one.')
+ logger.warning('Update cache file not found, will create a new one.', extra={'service_id': service})
with open(update_cache_path, 'w', encoding='utf-8') as f:
f.write('{}')
return {}
+@logger.auto_logger('clickmouse.update')
def save_update_cache(**kwargs):
'''写入更新缓存文件'''
- logger.info('Save update cache')
-
cache_data = {
'last_check_time': time(),
**kwargs
@@ -86,11 +89,11 @@ def save_update_cache(**kwargs):
with open(update_cache_path, 'w', encoding='utf-8') as f:
json.dump(cache_data, f)
+@logger.auto_logger('clickmouse.update')
def should_check_update():
'''
检查是否应该检查更新
'''
- logger.info('Checking update.')
last_check_time = update_cache.get('last_check_time')
if not last_check_time:
return True
@@ -114,14 +117,15 @@ def should_check_update():
return True
return False
+@logger.auto_logger('clickmouse.setting')
def save_settings():
'''
保存设置
'''
- logger.info('Saving settings.')
with open(data_path / 'settings.json', 'w', encoding='utf-8') as f:
json.dump(settings, f)
+@logger.auto_logger('clickmouse.ipk.main')
def get_packages():
lang_index = [] # 语言包索引
show = []
@@ -134,6 +138,7 @@ def get_packages():
show.append(package.get('show_in_extension_list', True))
return (lang_index, show, package_id)
+@logger.auto_logger()
def get_application_instance():
'''获取或创建 QApplication 实例'''
app = QApplication.instance()
@@ -141,17 +146,20 @@ def get_application_instance():
app = QApplication(sys.argv)
return app
+@logger.auto_logger('clickmouse.setting.hotkeyManager', level=logging.DEBUG)
def all_in_list(list1, list2):
if len(list1) != len(list2):
return False
return all(item in list2 for item in list1)
+@logger.auto_logger('clickmouse.ipk.main')
def import_package(package_id: str):
for i in packages_info:
if i['package_name'] == package_id:
return i
raise ValueError(f'包名 {package_id} 不存在')
+@logger.auto_logger('clickmouse.colorGetter', level=logging.DEBUG)
def get_windows_accent_color():
'''读取Windows强调色'''
# 主题色存储在 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM
@@ -173,13 +181,7 @@ def get_windows_accent_color():
# 通常我们使用RGB格式,忽略Alpha通道
return f'#{r_str}{g_str}{b_str}'
-def new_color_bar(obj):
- '''
- 给创建添加样式标题栏
- '''
- color_getter.style_changed.connect(lambda: color_getter.apply_titleBar(obj))
- color_getter.style_changed.emit()
-
+@logger.auto_logger('clickmouse.colorGetter')
def lighten_color_hex(hex_color, factor):
'''
使用HSL色彩空间提亮颜色
@@ -222,6 +224,7 @@ def lighten_color_hex(hex_color, factor):
return hex_result
+@logger.auto_logger('clickmouse.setting.startupManager')
def datetime_to_filetime(dt_utc: datetime):
'''
将datetime对象转换为FILETIME(64位整数)
@@ -239,6 +242,7 @@ def datetime_to_filetime(dt_utc: datetime):
return int(filetime_units)
+@logger.auto_logger('clickmouse.setting.startupManager')
def get_now_filetime():
'''
获取当前UTC时间对应的FILETIME值
@@ -251,30 +255,7 @@ def get_now_filetime():
little_endian = struct.pack('UIWindow: + return self.code_list[id+'.gui'] def create_setting_page(self, title): logger.info(f'Loading setting page: {title}') page = QWidget() - layout = QVBoxLayout(page) def set_content_label(text): logger.debug(f'Set content label: {text}') @@ -2367,220 +2314,53 @@ def set_content_label(text): def create_horizontal_line(): logger.debug('Create horizontal line') line = UFrame() - line.setFrameShape(UFrame.Shape.HLine) # 水平线 return line def parse_hotkey(input: UHotkeyLineEdit): return input.text().split('+') - - # 标题标签 - title_label = QLabel(title) - set_style(title_label, StyleClass.big_24) - - # 内容标签 - content_label = QLabel(get_lang('7d')) - set_style(content_label, StyleClass.dest) - # 布局 - layout.addWidget(title_label) - layout.addWidget(content_label) - layout.addWidget(create_horizontal_line()) - - # 主程序 - self.app = get_application_instance() + self.addtional_local_value.update({'title': title}) + if title in [self.page_general, self.page_style, self.page_click]: + layout_code = UIWindow(uiml.compile_ui_file(get_resource_path('ui', 'settings', self.ui_file_name[self.page_choice_buttons.index(title)]), additional=self.addtional_local_value)) + self.code_list[self.ui_file_name[self.page_choice_buttons.index(title)]] = layout_code + + layout = layout_code.show() + page.setLayout(layout) + else: + layout = QVBoxLayout(page) + # 标题标签 + title_label = QLabel(title) + set_style(title_label, StyleClass.big_24) + + # 内容标签 + content_label = QLabel(get_lang('7d')) + set_style(content_label, StyleClass.dest) + + # 布局 + layout.addWidget(title_label) + layout.addWidget(content_label) + layout.addWidget(create_horizontal_line()) # 添加一些示例设置控件 match title: case self.page_general: - set_content_label(get_lang('7f')) - # 选择语言 - lang_choice_layout = QHBoxLayout() # 语言选择布局 - self.lang_choice = QComboBox() - self.lang_choice.addItems([i['lang_name'] for i in langs]) - self.lang_choice.setCurrentIndex(setting_value.select_lang) - - # 布局 - lang_choice_layout.addWidget(QLabel(f'{get_lang('45')}{get_lang('b5')}:')) # 选择语言提示 - lang_choice_layout.addWidget(self.lang_choice) - lang_choice_layout.addStretch(1) - - # 显示托盘图标 - tray_layout = QHBoxLayout() # 窗口风格布局 - tray = UCheckBox(get_lang('80')) - tray.setChecked(setting_value.show_tray_icon) - - tray_layout.addWidget(tray) - tray_layout.addStretch(1) - - # 开机自启动 - start_layout = QHBoxLayout() # 开机自启动布局 - self.start_checkbox = UCheckBox(get_lang('b6')) - self.start_checkbox.setChecked(auto_start_manager.auto_start) - - start_layout.addWidget(self.start_checkbox) - start_layout.addStretch(1) - - auto_start_manager.updated.connect(lambda enb: self.start_checkbox.setChecked(enb)) - self.start_checkbox.checkStateChanged.connect(self.on_auto_start_changed) - - # 重置开机自启动 - repair_start_layout = QHBoxLayout() # 重置开机自启动布局 - repair_start_button = QPushButton(get_lang('20')) - - repair_tip = QLabel(get_lang('d1')) - set_style(repair_tip, StyleClass.d_11) - - repair_start_layout.addWidget(repair_start_button) - repair_start_layout.addWidget(repair_tip) - repair_start_layout.addStretch(1) - - # 延迟 - soft_delay_layout = QHBoxLayout() # 颜色延迟布局 - soft_delay_setting = setting_value.soft_delay - - soft_delay = QSlider(Qt.Horizontal) - soft_delay.setMinimum(5) - soft_delay.setMaximum(100) - soft_delay.setValue(soft_delay_setting // 10) - soft_delay.setTickPosition(QSlider.TicksBelow) - soft_delay.setTickInterval(10) - soft_delay.setFixedWidth(200) - - delay_tip_label = QLabel(get_lang("8a")) - set_style(delay_tip_label, StyleClass.d_11) - - # 布局 - soft_delay_layout.addWidget(QLabel(f'{get_lang('b0')}\n{get_lang('b5')}:')) - soft_delay_layout.addWidget(soft_delay) - soft_delay_layout.addStretch(1) - - delay_layout_text = QLabel(f'{get_lang('b0')}:{soft_delay_setting}{get_lang("ms", source=unit_lang)}') - set_style(delay_layout_text, StyleClass.big_16) - - # 反馈路径 - feedback_layout = QHBoxLayout() # 反馈路径布局 - - feedback_input = QLineEdit() - feedback_input.setText(setting_value.feedback) - - repair_feedback_link_button = QPushButton(get_lang('20')) - - # 布局 - feedback_layout.addWidget(QLabel(get_lang('c3')), 1) - feedback_layout.addWidget(feedback_input, 6) - feedback_layout.addWidget(repair_feedback_link_button, 1) - - # 重置所有设置 - repair_layout = QHBoxLayout() # 重置布局 - self.repair_button = QPushButton(get_lang('5e')) - - repair_layout.addWidget(self.repair_button) - repair_layout.addStretch(1) - - # 无实验项时自动隐藏实验室 - hide_flags_checkbox = UCheckBox(get_lang('d5')) - hide_flags_checkbox.setChecked(setting_value.hide_flags) - - # 布局 - layout.addLayout(lang_choice_layout) - layout.addLayout(tray_layout) - layout.addWidget(create_horizontal_line()) - layout.addLayout(start_layout) - - layout.addLayout(repair_start_layout) - layout.addWidget(create_horizontal_line()) - layout.addLayout(soft_delay_layout) - layout.addWidget(delay_layout_text) - layout.addWidget(delay_tip_label) - layout.addWidget(create_horizontal_line()) - layout.addLayout(repair_layout) - - # 绑定事件 - self.lang_choice.currentIndexChanged.connect(lambda: self.on_need_restart_setting_changed(self.lang_choice.currentIndex, SettingText.select_lang)) - tray.checkStateChanged.connect(lambda: self.on_setting_changed(tray.isChecked, SettingText.show_tray_icon)) - tray.checkStateChanged.connect(lambda: self.app.setQuitOnLastWindowClosed(not tray.isChecked())) # 关闭窗口时不退出应用 - soft_delay.valueChanged.connect(lambda: self.on_setting_changed(lambda: soft_delay.value() * 10 if soft_delay.value() > 0 else 1, SettingText.soft_delay)) - soft_delay.valueChanged.connect(lambda: delay_layout_text.setText(f'{get_lang('b0')}: {soft_delay.value() * 10 if soft_delay.value() > 0 else 1}{get_lang("ms", source=unit_lang)}')) - self.repair_button.clicked.connect(self.repair_all_settings) - feedback_input.textChanged.connect(lambda: self.on_setting_changed(feedback_input.text, SettingText.feedback)) - repair_feedback_link_button.clicked.connect(lambda: self.repair_settings(SettingText.feedback)) - repair_start_button.clicked.connect(self.repair_auto_start) - hide_flags_checkbox.checkStateChanged.connect(lambda: self.on_setting_changed(hide_flags_checkbox.isChecked, SettingText.hide_flags)) - hide_flags_checkbox.checkStateChanged.connect(lambda: self.restart_window()) + auto_start_manager.updated.connect(lambda enb: self.get_code('general').find_widget('general.start_layout.start_checkbox').setChecked(enb)) + self.get_code('general').find_widget('general.delay_layout.delay_label').setText(f'{get_lang('b0')}:{setting_value.soft_delay}{get_lang("ms", source=unit_lang)}') case self.page_click: - set_content_label(get_lang('84')) - # 选择默认连点器延迟 - layout_delay = QVBoxLayout() # 延迟布局 - unit_delay_layout = QHBoxLayout() # 窗口风格布局 - self.default_delay = QLineEdit() - self.default_delay.setText(setting_value.click_delay) - self.delay_combo = QComboBox() - self.delay_combo.addItems([get_lang('ms', source=unit_lang), get_lang('s', source=unit_lang)]) - self.delay_combo.setCurrentIndex(setting_value.delay_unit) - - unit_delay_layout.addWidget(QLabel(get_lang('46') + ': ')) - unit_delay_layout.addWidget(self.default_delay) - unit_delay_layout.addWidget(self.delay_combo) - unit_delay_layout.addStretch(1) - - # 连点出错时使用默认值 - use_default_delay = UCheckBox(get_lang('47')) - use_default_delay.setChecked(setting_value.delay_error_use_default) + self.default_delay: QLineEdit = self.get_code('clicker').find_widget('clicker.delay_layout.delay_input_layout.delay_input') + self.delay_combo: QComboBox = self.get_code('clicker').find_widget('clicker.delay_layout.delay_input_layout.delay_combo') + self.use_default_delay: QCheckBox = self.get_code('clicker').find_widget('clicker.delay_layout.error_use_default_delay') if not self.default_delay.text(): - use_default_delay.setEnabled(False) - - # 布局 - layout_delay.addLayout(unit_delay_layout) - layout_delay.addWidget(use_default_delay) - layout_delay.addWidget(create_horizontal_line()) - layout_delay.addStretch(1) - - # 连点器默认点击次数 - layout_time = QVBoxLayout() # 次数布局 - unit_time_layout = QHBoxLayout() # 窗口风格布局 - self.default_time = QLineEdit() - self.default_time.setText(str(setting_value.click_times)) - self.times_combo = QComboBox() - self.times_combo.addItems([get_lang('66'), get_lang('2a'), get_lang('2b')]) - self.times_combo.setCurrentIndex(setting_value.times_unit) - - unit_time_layout.addWidget(QLabel(get_lang('85') + ': ')) - unit_time_layout.addWidget(self.default_time) - unit_time_layout.addWidget(self.times_combo) - unit_time_layout.addStretch(1) - - # 连点出错时使用默认值 - use_default_time = UCheckBox(get_lang('86')) - use_default_time.setChecked(setting_value.times_error_use_default) + self.use_default_delay.setEnabled(False) + self.default_time: QLineEdit = self.get_code('clicker').find_widget('clicker.times_layout.times_input_layout.times_input') + self.times_combo: QComboBox = self.get_code('clicker').find_widget('clicker.times_layout.times_input_layout.times_combo') + self.use_default_times: QCheckBox = self.get_code('clicker').find_widget('clicker.times_layout.error_use_default_times') if not self.default_time.text(): - use_default_time.setEnabled(False) - self.total_time_label = QLabel(f'{get_lang('2c')}: {get_lang('61')}') - self.total_time_label.setAlignment(Qt.AlignHCenter) - set_style(self.total_time_label, StyleClass.big_16) - - # 布局 - layout_time.addLayout(unit_time_layout) - layout_time.addWidget(use_default_time) - layout_time.addWidget(create_horizontal_line()) - layout_time.addStretch(1) - - # 布局 - layout.addLayout(layout_delay) - layout.addLayout(layout_time) - layout.addWidget(self.total_time_label) - layout.addStretch(1) - - # 连接信号 - self.default_delay.textChanged.connect(lambda: self.on_default_input_changed(self.default_delay, SettingText.click_delay, use_default_delay)) - self.default_delay.textChanged.connect(lambda: on_input_change(type=InputChange.setting_window)) - use_default_delay.checkStateChanged.connect(lambda: self.on_setting_changed(use_default_delay.isChecked, SettingText.delay_error_use_default)) - self.default_time.textChanged.connect(lambda: self.on_default_input_changed(self.default_time, SettingText.click_times, use_default_time)) - self.default_time.textChanged.connect(lambda: on_input_change(type=InputChange.setting_window)) - use_default_time.checkStateChanged.connect(lambda: self.on_setting_changed(use_default_time.isChecked, SettingText.times_error_use_default)) - self.delay_combo.currentIndexChanged.connect(lambda: self.on_setting_changed(self.delay_combo.currentIndex, SettingText.delay_unit)) - self.delay_combo.currentIndexChanged.connect(lambda: on_input_change(type=InputChange.setting_window)) - self.times_combo.currentIndexChanged.connect(lambda: self.on_setting_changed(self.times_combo.currentIndex, SettingText.times_unit)) - self.times_combo.currentIndexChanged.connect(lambda: on_input_change(type=InputChange.setting_window)) + self.use_default_times.setEnabled(False) + self.total_time_label: QLabel = self.get_code('clicker').find_widget('clicker.total_time_label') + if dev_flags.get('new_settings', False): + self.modify_using_default_input = self.get_code('clicker').find_widget('clicker.attributes_layout.modify_using_default_input') + self.modify_using_default_combo = self.get_code('clicker').find_widget('clicker.attributes_layout.modify_using_default_combo') case self.page_update: set_content_label(get_lang('87')) # 选择更新检查提示 @@ -2621,180 +2401,65 @@ def parse_hotkey(input: UHotkeyLineEdit): self.quiet_install.checkStateChanged.connect(lambda: self.on_setting_changed(self.quiet_install.isChecked, SettingText.quiet_update)) self.update_ok.checkStateChanged.connect(lambda: self.on_setting_changed(self.update_ok.isChecked, SettingText.update_ok_notify)) self.update_frequency.currentIndexChanged.connect(lambda: self.on_setting_changed(self.update_frequency.currentIndex, SettingText.update_frequency)) - self.on_enable_update(self.enable_update.isChecked()) - case self.page_style: - set_content_label(get_lang('a7')) - # 选择窗口风格 - style_layout = QHBoxLayout() # 窗口风格布局 - self.style_choice = QComboBox() - - items = list(style_indexes[select_lang]['lang_package'].values()) - - self.style_choice.addItems([get_lang('82')] + items) - self.style_choice.setCurrentIndex(setting_value.select_style) - - # 布局 - style_layout.addWidget(QLabel(get_lang('81'))) # 选择窗口风格提示 - style_layout.addWidget(self.style_choice) - style_layout.addStretch(1) - - style_use_windows_layout = QHBoxLayout() # 颜色使用windows按钮布局 - style_choice_use_windows = UCheckBox(get_lang('a8')) - tip_label = QLabel(get_lang('b4')) - set_style(tip_label, StyleClass.d_11) - style_choice_use_windows.setChecked(setting_value.use_windows_color) - - # 布局 - style_use_windows_layout.addWidget(style_choice_use_windows) - style_use_windows_layout.addStretch(1) - - theme_layout = QHBoxLayout() # 主题布局 - theme_tip_label = QLabel(get_lang('4b')) - set_style(theme_tip_label, StyleClass.d_11) - theme_combo = QComboBox() - theme_combo.addItems(QStyleFactory.keys()) - theme_combo.setCurrentText(setting_value.theme) - - # 布局 - theme_layout.addWidget(QLabel(get_lang('23'))) - theme_layout.addWidget(theme_combo) - theme_layout.addStretch(1) - - # 布局 - layout.addLayout(style_layout) - layout.addWidget(create_horizontal_line()) - layout.addLayout(style_use_windows_layout) - layout.addWidget(tip_label) - layout.addWidget(create_horizontal_line()) - layout.addLayout(theme_layout) - layout.addWidget(theme_tip_label) - layout.addWidget(create_horizontal_line()) - - # 连接信号 - self.style_choice.currentIndexChanged.connect(lambda: self.on_setting_changed(self.style_choice.currentIndex, SettingText.select_style)) - style_choice_use_windows.checkStateChanged.connect(lambda: self.on_setting_changed(style_choice_use_windows.isChecked, SettingText.use_windows_color)) - theme_combo.currentIndexChanged.connect(lambda: self.on_setting_changed(theme_combo.currentText, SettingText.theme)) - theme_combo.currentIndexChanged.connect(lambda: refresh.run()) - theme_combo.currentIndexChanged.connect(lambda: self.app.setStyle(theme_combo.currentText())) + if dev_flags.get('new_settings', False): + self.update_notify.checkStateChanged.connect(self.on_sync_notice) + self.update_ok.checkStateChanged.connect(self.on_sync_ok_notice) + else: + self.on_enable_update(self.enable_update.isChecked()) case self.page_hotkey: set_content_label(get_lang('21')) self.hotkey_enabled = UCheckBox(get_lang('c9')) # 热键启用 self.hotkey_enabled.setChecked(setting_value.hotkey_enabled) - - # 左键连点 - self.left_click_layout = QHBoxLayout() - self.left_click_input = UHotkeyLineEdit() # 左键连点输入框 - self.left_click_input.setText(format_keys(setting_value.left_click_hotkey)) - self.left_repair_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - - # 布局 - self.left_click_layout.addWidget(QLabel(f'{get_lang('0c')}: '), 1) # 左键连点提示 - self.left_click_layout.addWidget(self.left_click_input, 6) - self.left_click_layout.addWidget(self.left_repair_button, 1) - self.left_click_layout.addStretch() - - # 右键连点 - self.right_click_layout = QHBoxLayout() # 右键连点布局 - self.right_click_input = UHotkeyLineEdit() # 右键连点输入框 - self.right_repair_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - - self.right_click_input.setText(format_keys(setting_value.right_click_hotkey)) - - # 布局 - self.right_click_layout.addWidget(QLabel(f'{get_lang('0d')}: '), 1) # 右键连点提示 - self.right_click_layout.addWidget(self.right_click_input, 6) - self.right_click_layout.addWidget(self.right_repair_button, 1) - self.right_click_layout.addStretch() - - # 暂停/重启连点 - self.pause_click_layout = QHBoxLayout() # 暂停/重启连点布局 - self.pause_click_input = UHotkeyLineEdit() # 暂停/重启连点输入框 - self.pause_click_input.setText(format_keys(setting_value.pause_click_hotkey)) - self.pause_repair_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - - # 布局 - self.pause_click_layout.addWidget(QLabel(f'{get_lang('6b')}: '), 1) # 暂停/重启连点提示 - self.pause_click_layout.addWidget(self.pause_click_input, 6) - self.pause_click_layout.addWidget(self.pause_repair_button, 1) - self.pause_click_layout.addStretch() - - # 停止连点 - self.stop_click_layout = QHBoxLayout() # 停止连点布局 - self.stop_click_input = UHotkeyLineEdit() # 停止连点输入框 - self.stop_click_input.setText(format_keys(setting_value.stop_click_hotkey)) - self.stop_repair_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - - # 布局 - self.stop_click_layout.addWidget(QLabel(f'{get_lang('6c')}: '), 1) # 停止连点提示 - self.stop_click_layout.addWidget(self.stop_click_input, 6) - self.stop_click_layout.addWidget(self.stop_repair_button, 1) - self.stop_click_layout.addStretch() - - # 连点属性 - self.click_attr_layout = QHBoxLayout() # 连点属性布局 - self.click_attr_input = UHotkeyLineEdit() # 连点属性输入框 - self.click_attr_input.setText(format_keys(setting_value.click_attr_hotkey)) - self.click_attr_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - - # 布局 - self.click_attr_layout.addWidget(QLabel(f'{get_lang('8c')}: '), 1) # 连点属性提示 - self.click_attr_layout.addWidget(self.click_attr_input, 6) - self.click_attr_layout.addWidget(self.click_attr_button, 1) - self.click_attr_layout.addStretch() - - # 快速连点 - self.fast_click_layout = QHBoxLayout() # 快速连点布局 - self.fast_click_input = UHotkeyLineEdit() # 快速连点输入框 - self.fast_click_input.setText(format_keys(setting_value.fast_click_hotkey)) - self.fast_click_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - - # 布局 - self.fast_click_layout.addWidget(QLabel(f'{get_lang('75')}: '), 1) # 快速连点提示 - self.fast_click_layout.addWidget(self.fast_click_input, 6) - self.fast_click_layout.addWidget(self.fast_click_button, 1) - self.fast_click_layout.addStretch() - - # 主窗口 - self.main_window_layout = QHBoxLayout() # 主窗口布局 - self.main_window_input = UHotkeyLineEdit() # 主窗口输入框 - self.main_window_input.setText(format_keys(setting_value.main_window_hotkey)) - self.main_window_button = QPushButton(get_lang('20')) # 还原默认设置按钮 - # 布局 - self.main_window_layout.addWidget(QLabel(f'{get_lang('76')}: '), 1) # 主窗口提示 - self.main_window_layout.addWidget(self.main_window_input, 6) - self.main_window_layout.addWidget(self.main_window_button, 1) - self.main_window_layout.addStretch() + self.hotkeys_widget_list = [] - # 布局 - layout.addLayout(self.left_click_layout) - layout.addLayout(self.right_click_layout) - layout.addLayout(self.pause_click_layout) - layout.addLayout(self.stop_click_layout) - layout.addLayout(self.click_attr_layout) - layout.addLayout(self.fast_click_layout) - layout.addLayout(self.main_window_layout) - - # 连接信号 - self.left_click_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.left_click_input), SettingText.left_click_hotkey)) - self.right_click_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.right_click_input), SettingText.right_click_hotkey)) - self.pause_click_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.pause_click_input), SettingText.pause_click_hotkey)) - self.stop_click_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.stop_click_input), SettingText.stop_click_hotkey)) - self.click_attr_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.click_attr_input), SettingText.click_attr_hotkey)) - self.fast_click_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.fast_click_input), SettingText.fast_click_hotkey)) - self.main_window_input.textChanged.connect(lambda: self.on_setting_changed(lambda: parse_hotkey(self.main_window_input), SettingText.main_window_hotkey)) - - self.left_repair_button.clicked.connect(lambda: self.repair_settings(SettingText.left_click_hotkey)) - self.right_repair_button.clicked.connect(lambda: self.repair_settings(SettingText.right_click_hotkey)) - self.pause_repair_button.clicked.connect(lambda: self.repair_settings(SettingText.pause_click_hotkey)) - self.stop_repair_button.clicked.connect(lambda: self.repair_settings(SettingText.stop_click_hotkey)) - self.click_attr_button.clicked.connect(lambda: self.repair_settings(SettingText.click_attr_hotkey)) - self.fast_click_button.clicked.connect(lambda: self.repair_settings(SettingText.fast_click_hotkey)) - self.main_window_button.clicked.connect(lambda: self.repair_settings(SettingText.main_window_hotkey)) - self.hotkey_enabled.checkStateChanged.connect(self.on_enable_hotkey_changed) - self.on_enable_hotkey_changed(True) + self.on_enable_hotkey_changed(self.hotkey_enabled.isChecked() if dev_flags.get('new_settings', False) else True) + + # 布局 + if dev_flags.get('new_settings', False): + layout.addWidget(self.hotkey_enabled) + + lang_id = { + "left_click": ["0c", False], + "right_click": ["0d", False], + "pause_click": ["6b", False], + "stop_click": ["6c", False], + "click_attr": ["8c", True], + "main_window": ["76", False] + } + + for hotkey, enabled, lang, k in zip( + setting_value.hotkey_list.values(), + setting_value.hotkey_enabled_list.values(), + lang_id.values(), + setting_keys, + ): + # 设置元件 + input = UHotkeyLineEdit() + input.setText(format_keys(hotkey)) + repair_button = QPushButton(get_lang('20')) # 还原默认设置按钮 + + if not enabled: + repair_button.setEnabled(False) + input.setEnabled(False) + + # 添加布局 + hotkey_layout = QHBoxLayout() + hotkey_layout.addWidget(QLabel(f'{filter_hotkey(get_lang(lang[0])) if lang[1] else get_lang(lang[0])}: '), 1) + hotkey_layout.addWidget(input, 6) + hotkey_layout.addWidget(repair_button, 1) + hotkey_layout.addStretch() + + layout.addLayout(hotkey_layout) + + # 添加列表 + self.hotkeys_widget_list.append([input, repair_button]) + + # 连接信号 + input.textChanged.connect(lambda val, inp=input, key=k: self.on_setting_changed(lambda: parse_hotkey(inp), f'hotkey,hotkeys,{key}')) + repair_button.clicked.connect(lambda b, key=k: self.repair_settings([f'hotkey,hotkeys,{key}', f'hotkey,enabled,{key}'])) case self.page_doc: set_content_label(get_lang('ca')) @@ -2847,25 +2512,118 @@ def parse_hotkey(input: UHotkeyLineEdit): update_log_path_input.textChanged.connect(lambda: self.on_setting_changed(update_log_path_input.text, SettingText.update_log_path)) repair_default_doc_link_button.clicked.connect(lambda: self.repair_settings(SettingText.default_doc_link)) repair_update_log_path_button.clicked.connect(lambda: self.repair_settings(SettingText.update_log_path)) + case self.page_notify: + set_content_label(get_lang('cc')) + + # 更新提示 + self.notice_update_notify = UCheckBox(get_lang('4a')) + self.notice_update_notify.setChecked(setting_value.update_notify) + + # 更新完成提示 + self.notice_update_ok_notify = UCheckBox(get_lang('4c')) + self.notice_update_ok_notify.setChecked(setting_value.update_ok_notify) + + # 启用软件启动警告 + self.start_warning = UCheckBox(get_lang('cd')) + tip_label = QLabel(get_lang('ce')) + set_style(tip_label, StyleClass.d_11) + self.start_warning.setChecked(setting_value.show_warning) + + self.package_warning = UCheckBox(get_lang('cf')) + self.package_warning.setChecked(setting_value.show_package_warning) + + # 布局 + layout.addWidget(self.notice_update_notify) + layout.addWidget(self.notice_update_ok_notify) + layout.addWidget(create_horizontal_line()) + layout.addWidget(self.start_warning) + layout.addWidget(tip_label) + layout.addWidget(self.package_warning) + + # 连接信号 + self.notice_update_notify.checkStateChanged.connect(lambda: self.on_setting_changed(self.notice_update_notify.isChecked, SettingText.update_notify)) + self.notice_update_notify.checkStateChanged.connect(self.on_sync_notice) + self.notice_update_ok_notify.checkStateChanged.connect(lambda: self.on_setting_changed(self.notice_update_ok_notify.isChecked, SettingText.update_ok_notify)) + self.notice_update_ok_notify.checkStateChanged.connect(self.on_sync_ok_notice) + self.start_warning.checkStateChanged.connect(self.on_enable_warn) + self.package_warning.checkStateChanged.connect(lambda: self.on_setting_changed(self.package_warning.isChecked, SettingText.show_package_warning)) + + self.on_enable_update(self.enable_update.isChecked()) + self.on_warning_update(self.start_warning.isChecked()) + case self.page_flags: + set_content_label(get_lang('d4')) + + if not dev_settings: + layout.addWidget(QLabel('No dev settings found.')) + else: + for i in dev_settings: + checkbox = UCheckBox(i['name']) + if i['key'] == 'new_settings': + checkbox.checkStateChanged.connect(lambda chk,idx=i['key']:(self.save_dev_config(chk, idx),self.window_restarted.emit(),)) + else: + checkbox.checkStateChanged.connect(lambda chk,idx=i['key']:(self.save_dev_config(chk, idx))) + checkbox.setChecked(dev_flags.get(i['key'], False)) + desc = QLabel(i['desc']) + set_style(desc, StyleClass.d_11) + + layout.addWidget(checkbox) + layout.addWidget(desc) + layout.addWidget(create_horizontal_line()) - restart_layout = QHBoxLayout() # 重启提示布局 - self.restart_button = QPushButton(get_lang('7e')) + restart = uiml.compile_ui_file(get_resource_path('ui', 'settings', 'bottom.gui'), additional=self.addtional_local_value) + + layout.addLayout(UIWindow(restart).show()) + layout.addStretch(1) - set_style(self.restart_button, StyleClass.selected) - self.restart_button.clicked.connect(self.restart) + return page + + def on_clicker_changed(self, func, value, checkbox: UCheckBox=None): + '''clicker更新状态改变事件''' + if checkbox is not None: + if not func(): + checkbox.setEnabled(False) + else: + checkbox.setEnabled(True) + self.on_setting_changed(func, value) + on_input_change(type=InputChange.setting_window) + + def on_theme_updated(self, theme: str): + style_list = QStyleFactory.keys() - restart_layout.addStretch() - restart_layout.addWidget(self.restart_button) + self.on_setting_changed(lambda: style_list[theme], SettingText.theme) + refresh.run() + self.app.setStyle(style_list[theme]) + + def on_hide_flag_changed(self, state): + self.on_setting_changed(self.get_code('general').find_widget('general.hide_flag').isChecked, SettingText.hide_flags) + self.restart_window() + + def on_soft_delay_changed(self, value): + soft_delay: QSlider = self.get_code('general').find_widget('general.delay_layout.software_delay_layout.software_delay') + delay_layout_text: QLabel = self.get_code('general').find_widget('general.delay_layout.delay_label') - if not settings_need_restart: - self.restart_button.hide() + self.on_setting_changed(lambda: soft_delay.value() * 10 if soft_delay.value() > 0 else 1, SettingText.soft_delay) + delay_layout_text.setText(f'{get_lang('b0')}: {soft_delay.value() * 10 if soft_delay.value() > 0 else 1}{get_lang("ms", source=unit_lang)}') + + def on_tray_checked(self, state): + '''托盘图标选择事件''' + tray = self.get_code('general').find_widget('general.tray_layout.tray') + self.on_setting_changed(tray.isChecked, SettingText.show_tray_icon) + self.app.setQuitOnLastWindowClosed(not tray.isChecked()) + + def save_dev_config(self, checked: bool, flag_name: str): + dev_flags[flag_name] = checked + with open('data/dev_flags.json', 'w', encoding='utf-8') as f: + json.dump(dev_flags, f) + + def on_warning_update(self, state): + '''启用软件启动警告''' + self.package_warning.setEnabled(state) - layout.addLayout(restart_layout) - - # 添加弹簧,让内容靠上显示 - layout.addStretch() - - return page + def on_enable_warn(self, state): + '''启用软件启动警告''' + self.on_warning_update(state) + self.on_setting_changed(self.start_warning.isChecked, SettingText.show_warning) def on_sync_notice(self, state): '''提示同步''' @@ -2879,23 +2637,9 @@ def on_sync_ok_notice(self, state): def on_enable_hotkey(self, state): '''启用热键''' - # 输入框 - self.left_click_input.setEnabled(state) - self.right_click_input.setEnabled(state) - self.pause_click_input.setEnabled(state) - self.stop_click_input.setEnabled(state) - self.click_attr_input.setEnabled(state) - self.fast_click_input.setEnabled(state) - self.main_window_input.setEnabled(state) - - # 按钮 - self.left_repair_button.setEnabled(state) - self.right_repair_button.setEnabled(state) - self.pause_repair_button.setEnabled(state) - self.stop_repair_button.setEnabled(state) - self.click_attr_button.setEnabled(state) - self.fast_click_button.setEnabled(state) - self.main_window_button.setEnabled(state) + for input, btn in self.hotkeys_widget_list: + input.setEnabled(state) + btn.setEnabled(state) def on_enable_update_changed(self, state): '''更新提示复选框状态改变''' @@ -2903,7 +2647,7 @@ def on_enable_update_changed(self, state): self.on_enable_update(state) if not state: - if MessageBox.warning(self, get_lang('15'), get_lang('c8'), MessageButtonTemplate.YESNO) == 3: + if MessageBox.warning(self, get_lang('15'), get_lang('c8'), MessageButton.YESNO) == MessageButton.ReturnValue.NO: self.enable_update.setCheckState(Qt.Checked) return else: @@ -2929,13 +2673,23 @@ def repair_auto_start(self): auto_start_manager.create_reg() MessageBox.information(self, get_lang('16'), get_lang('d2')) - def repair_settings(self, key: str): - '''还原默认设置''' + def repair_settings(self, key: str | list): + ''' + 还原默认设置 + + :param key: 控制要恢复的设置项,可以是单个键,也可以是多个键组成的列表。 + ''' global settings - if MessageBox.warning(self, get_lang('15'), get_lang('22'), MessageButtonTemplate.YESNO) != 2: # 不确认重置 + if MessageBox.warning(self, get_lang('15'), get_lang('22'), MessageButton.YESNO) != MessageButton.ReturnValue.NO: # 不确认重置 return try: - del settings[key] + if isinstance(key, str): + self.set_nested_value(settings, key, 'del', ) # 删除键:一个 + elif isinstance(key, list): + for k in key: + self.set_nested_value(settings, k, 'del', ) # 删除键:多个 + else: + raise ValueError(f'Invalid key type: {type(key)}') except KeyError: pass save_settings() @@ -2944,7 +2698,7 @@ def repair_settings(self, key: str): def repair_all_settings(self): logger.info('Reset all settings') global settings - if MessageBox.warning(self, get_lang('15'), get_lang('22'), MessageButtonTemplate.YESNO) != 2: # 不确认重置 + if MessageBox.warning(self, get_lang('15'), get_lang('22'), MessageButton.YESNO) != MessageButton.ReturnValue.NO: # 不确认重置 return settings = {} save_settings() @@ -2966,14 +2720,16 @@ def on_need_restart_setting_changed(self, handle, key: str, restart_place: list[ self.on_setting_changed(handle, key, *args) settings_need_restart = True - lang = self.lang_choice.currentIndex() + lang = self.code_list['general.gui'].find_widget('general.lang_choice_layout.lang_choice').currentIndex() + if lang >= 1: + lang -= 1 + elif lang == 0: + lang = system_lang restart_place = list(map(lambda x: get_lang(x, lang_id=lang), restart_place)) - selected_lang_yes = CustonMessageButton(get_lang('01', source=default_button_text, lang_id=lang), QMessageBox.YesRole) - selected_lang_no = CustonMessageButton(get_lang('02', source=default_button_text, lang_id=lang), QMessageBox.AcceptRole) - need_restart = MessageBox.warning(self, get_lang('15', lang_id=lang), f'{get_lang("89", lang_id=lang)}: {", ".join(restart_place)}', [selected_lang_yes, selected_lang_no], selected_lang_yes) - if need_restart == 2: + need_restart = MessageBox.warning(self, get_lang('15', lang_id=lang), f'{get_lang("89", lang_id=lang)}: {", ".join(restart_place)}', MessageButton.YESNO, MessageButton.YES) + if need_restart == MessageButton.ReturnValue.YES: self.restart() else: self.restart_window() @@ -2984,16 +2740,39 @@ def restart_window(self): def on_setting_changed(self, handle, key, *args): '''更新检查提示选择事件''' logger.info(f'Setting changed: {key}') - settings[key] = handle(*args) + self.set_nested_value(settings, key, 'set', handle(*args)) save_settings() - def on_default_input_changed(self, default: QLineEdit, key: str, use_default: UCheckBox): - '''默认延迟输入框内容变化事件''' - if not default.text(): - use_default.setEnabled(False) - else: - use_default.setEnabled(True) - self.on_setting_changed(default.text, key) + def set_nested_value(self, dic: dict, path: str, mode:str, value=None) -> None: + ''' + 在字典中按路径设置值。 + - 如果路径不含逗号,则直接设置 dic[path] = value。 + - 如果路径含逗号,则按逗号分割为多级键,逐层递进,在最后一级键处设置值。 + 若中间键不存在,则自动创建新字典;若中间键存在但不是字典,则覆盖为字典(原值丢失)。 + ''' + def check_dic(dic, path, val): + if mode == 'set': + dic[path] = val + elif mode == 'del': + del dic[path] + else: + raise ValueError('Invalid mode: ' + mode) + + if ',' not in path: + check_dic(dic, path, value) + return + + keys = [k.strip() for k in path.split(',')] # 去除可能的空格 + current = dic + # 逐层深入到倒数第二个键 + for key in keys[:-1]: + if key not in current: + check_dic(current, key, {}) + elif not isinstance(current[key], dict): + raise ValueError('Invalid path: ' + path) # 路径中存在无效的键 + current = current[key] + # 在最后一级键处赋值 + check_dic(current, keys[-1], value) def on_page_button_clicked(self, index): '''处理页面按钮点击事件''' @@ -3034,9 +2813,19 @@ def __init__(self): self.setGeometry(100, 100, 200, 125) self.setWindowIcon(icon) self.setFixedSize(self.width(), self.height()) - self.init_ui() - + + if dev_flags.get('decoupling', False): + self.init_ui() + else: + self.init_ui_old() + def init_ui(self): + self.main_layout = UIWindow(uiml.compile_ui_file(get_resource_path('ui', 'importExtension.gui'), additional=self.addtional_local_value)) + self.setLayout(self.main_layout.show()) + + logger.debug('Init import extension mode window finished') + + def init_ui_old(self): layout = QVBoxLayout() self.setLayout(layout) @@ -3060,13 +2849,18 @@ def init_ui(self): layout.addWidget(mode_button) # 连接信号 - mode_button.clicked.connect(self.on_mode_button_clicked) + mode_button.clicked.connect(self.on_mode_button_clicked_old) logger.debug('Init import extension mode window finished') - def on_mode_button_clicked(self): + def on_mode_button_clicked_old(self): self.close() main_window.show_import_extension(self.mode_combo.currentIndex()) + + def on_mode_button_clicked(self): + self.close() + mode_combo = self.main_layout.find_widget('main_layout.mode_combo') + # main_window.show_import_extension(mode_combo.currentIndex()) class TrayApp: def __init__(self): @@ -3088,7 +2882,7 @@ def __init__(self): # 创建热键监听器 self.hotkey_listener = get_hotkey_listener_instance() - self.hotkey_listener.combination_pressed.connect(self.run_combination) + hotkey_listener.combination_pressed.connect(self.run_combination) # 创建系统托盘图标 self.setup_tray_icon() @@ -3097,7 +2891,6 @@ def __init__(self): clicker.click_changed.connect(main_window.on_click_changed) clicker.stopped.connect(main_window.on_stop) clicker.click_conuter.connect(main_window.on_click_counter) - clicker.started.connect(self.on_start) clicker.started.connect(main_window.on_start) logger.info('Initializing tray app finished') @@ -3139,15 +2932,14 @@ def create_menu(self): pause_action = QAction(get_lang('6b'), self.app) stop_action = QAction(get_lang('6c'), self.app) set_delay_action = QAction(get_lang('75'), self.app) - click_attr_action = QAction(get_lang('8c'), self.app) + click_attr_action = QAction(filter_hotkey(get_lang('8c')), self.app) - set_delay_action.triggered.connect(lambda: self.show_window(fast_click_window)) - left_click_action.triggered.connect(lambda: self.on_combination_pressed(setting_value.left_click_hotkey)) - right_click_action.triggered.connect(lambda: self.on_combination_pressed(setting_value.right_click_hotkey)) - pause_action.triggered.connect(lambda: self.on_combination_pressed(setting_value.pause_click_hotkey)) - stop_action.triggered.connect(lambda: self.on_combination_pressed(setting_value.stop_click_hotkey)) + left_click_action.triggered.connect(lambda: self.run_command(0)) + right_click_action.triggered.connect(lambda: self.run_command(1)) + pause_action.triggered.connect(lambda: self.run_command(2)) + stop_action.triggered.connect(lambda: self.run_command(3)) click_attr_action.triggered.connect(lambda: self.show_window(click_attr_window)) - + tray_menu.addAction(left_click_action) tray_menu.addAction(right_click_action) tray_menu.addAction(pause_action) @@ -3177,7 +2969,6 @@ def on_tray_icon_activated(self, reason): '''处理托盘图标激活事件''' if reason == QSystemTrayIcon.ActivationReason.Trigger: # 左键点击 self.show_window(main_window) - self.refresh() def check_delay(self, input_delay): try: @@ -3199,17 +2990,14 @@ def run(self): '''运行应用程序''' logger.info('Running tray app') code = self.app.exec() + logger.info(f'Main program exited with {code}') if can_update: run_software('updater.old/updater.py', 'updater.old/updater.exe') else: # 进行清理 run_after.run() - logger.info(f'Main program exited with {code}') self.quit() sys.exit(code) - - def refresh(self): - refresh.run() def quit(self, code=lambda: None): if update_window.down_thread is not None: @@ -3270,53 +3058,50 @@ def show_window(self, window: QMainWindow | QDialog): window.hide() else: window.show() - self.refresh() + refresh.run() def on_combination_pressed(self, combination): '''处理组合键事件''' combination = format_keys(combination, source=True) - if all_in_list(combination, setting_value.fast_click_hotkey): - # 处理快速连点组合键 - if clicker.running: - self.tray_icon.showMessage(get_lang('14'), get_lang('af'), QSystemTrayIcon.MessageIcon.Critical, 1000) - else: - self.show_window(fast_click_window) - elif all_in_list(combination, setting_value.main_window_hotkey): - # 处理主窗口组合键 - self.show_window(main_window) - if not main_window.isVisible(): - main_window.is_start_from_tray = True - elif all_in_list(combination, setting_value.click_attr_hotkey): - # 处理连点属性组合键 - self.show_window(click_attr_window) - elif all_in_list(combination, setting_value.left_click_hotkey): - self.on_start_clicker_tray('left') # 左键 - elif all_in_list(combination, setting_value.right_click_hotkey): - self.on_start_clicker_tray('right') # 右键 - elif all_in_list(combination, setting_value.pause_click_hotkey): - if clicker.running: - clicker.pause_click() - if clicker.paused: - self.tray_icon.showMessage(get_lang('6e'), get_lang('71'), QSystemTrayIcon.MessageIcon.Information, 1000) - else: - self.tray_icon.showMessage(get_lang('6e'), get_lang('72'), QSystemTrayIcon.MessageIcon.Information, 1000) - else: - self.tray_icon.showMessage(get_lang('6e'), get_lang('74'), QSystemTrayIcon.MessageIcon.Warning, 1000) - elif all_in_list(combination, setting_value.stop_click_hotkey): - if clicker.running: - main_window.on_stop() - self.tray_icon.showMessage(get_lang('6e'), get_lang('73'), QSystemTrayIcon.MessageIcon.Information, 1000) - else: - self.tray_icon.showMessage(get_lang('6e'), get_lang('74'), QSystemTrayIcon.MessageIcon.Warning, 1000) - - def on_start(self): - '''连点器启动事件''' - if fast_click_window.isVisible(): - fast_click_window.hide() - self.tray_icon.showMessage(get_lang('14'), get_lang('af'), QSystemTrayIcon.MessageIcon.Critical, 1000) + for index, i in enumerate(setting_keys): + if all_in_list(combination, setting_value.hotkey_list[i]): + self.run_command(index) + break + def run_command(self, command): + '''运行命令''' + match command: + case 0: + self.on_start_clicker_tray('left') # 左键 + case 1: + self.on_start_clicker_tray('right') # 右键 + case 2: + if clicker.running: + clicker.pause_click() + if clicker.paused: + self.tray_icon.showMessage(get_lang('6e'), get_lang('71'), QSystemTrayIcon.MessageIcon.Information, 1000) + else: + self.tray_icon.showMessage(get_lang('6e'), get_lang('72'), QSystemTrayIcon.MessageIcon.Information, 1000) + else: + self.tray_icon.showMessage(get_lang('6e'), get_lang('74'), QSystemTrayIcon.MessageIcon.Warning, 1000) + case 3: + if clicker.running: + main_window.on_stop() + self.tray_icon.showMessage(get_lang('6e'), get_lang('73'), QSystemTrayIcon.MessageIcon.Information, 1000) + else: + self.tray_icon.showMessage(get_lang('6e'), get_lang('74'), QSystemTrayIcon.MessageIcon.Warning, 1000) + case 4: + self.show_window(click_attr_window) + case 5: + self.show_window(main_window) + if not main_window.isVisible(): + main_window.is_start_from_tray = True + case _: + raise ValueError(f'Invalid command: {command}') if __name__ == '__main__': + init_success = False + shared_memory = QSharedMemory(mem_id[0]) if shared_memory.attach(): # 已经有一个实例在运行 @@ -3376,14 +3161,9 @@ def on_start(self): if os.path.exists('extensions') and os.path.isdir('extensions'): shutil.rmtree('extensions') pass - - logger.info('Loading value') - logger.debug('Loading const value') - has_packages = os.path.exists(get_resource_path('packages')) - package_names, show_list, package_ids = get_packages() - + # Windows API常量 - logger.debug('sSetting WinAPI const value') + logger.debug('Setting WinAPI const value') DWMWA_USE_IMMERSIVE = 20 DWMWA_USE_IMMERSIVE_DARK_MODE = 20 DWM_WINDOW_CORNER_PREFERENCE = 33 @@ -3391,11 +3171,18 @@ def on_start(self): DWMNCRP_ENABLED = 1 logger.info('Loading services') + refresh = Refresh() setting_value = SettingValue() clicker = Click() auto_start_manager = StartManager() color_getter = ColorGetter() run_after = RunAfter() + hotkey_listener = get_hotkey_listener_instance() + + logger.info('Loading value') + logger.debug('Loading const value') + has_packages = os.path.exists(get_resource_path('packages')) + package_names, show_list, package_ids = get_packages() # 变量 logger.info('Define pathes') @@ -3417,15 +3204,44 @@ def on_start(self): settings_need_restart = False can_update = False + + try: + with open(data_path / 'dev_flags.json', 'r', encoding='utf-8') as f: + dev_flags = json.load(f) + except (FileNotFoundError, json.JSONDecodeError): + dev_flags = {} + + try: + with open(get_resource_path('dev_settings.json'), 'r', encoding='utf-8') as f: + dev_settings = json.load(f) + except (FileNotFoundError, json.JSONDecodeError): + dev_settings = {} + + dev_back = dev_flags.copy() + for k in dev_flags.keys(): + if k not in [i['key'] for i in dev_settings]: + del dev_back[k] + logger.warning(f'Beta feature ID:{k} is deprecated. Auto delete.') + dev_flags = dev_back.copy() + with open(data_path / 'dev_flags.json', 'w', encoding='utf-8') as f: + json.dump(dev_flags, f) # 单位控制 latest_index = 2 - select_lang = setting_value.select_lang + + # 热键管理相关 + is_error = True + delay_num = 0 + time_num = 0 # 其他 - dev_config = parse_dev.parse() # 开发者模式配置 can_run_hotkey = True # 热键是否可用 result = (None, None, None, None) # 更新检查结果 + setting_keys = list(setting_value.hotkey_list.keys()) # 热键列表 + + if in_dev: + logger.info('In development mode') + uiml.set_namespace(is_debug=True) # 系统版本 windows_version = get_windows_version() @@ -3454,21 +3270,19 @@ def on_start(self): logger.info('Loading ui') main_window = MainWindow() - on_input_change(type=InputChange.main_window) # 更新时间估计状态 about_window = AboutWindow() clean_cache_window = CleanCacheWindow() update_ok_window = UpdateOKWindow() update_window = UpdateWindow() click_attr_window = ClickAttrWindow() - fast_click_window = FastSetClickWindow() setting_window = SettingWindow() + set_import_extension_window = SetImportExtensionModeWindow() on_input_change(type=InputChange.setting_window) # 更新时间估计状态 setting_window.click_setting_changed.connect(lambda: on_input_change(type=InputChange.setting_window)) setting_window.window_restarted.connect(on_update_setting_window) - - set_import_extension_window = SetImportExtensionModeWindow() app = TrayApp() app.app.setStyle(setting_value.theme) + init_success = True app.run() \ No newline at end of file diff --git a/Gui/parse_dev.py b/Gui/parse_dev.py deleted file mode 100644 index 83e9551c..00000000 --- a/Gui/parse_dev.py +++ /dev/null @@ -1,31 +0,0 @@ -import json -from sharelibs import get_resource_path - -with open(get_resource_path('dev_data.json'), 'r', encoding='utf-8') as f: - dev_data = json.load(f) # 读取规则 - -def write(bytes:list[int]): - '''写入数据到文件''' - array = bytearray(bytes) - with open('dev.dat', 'wb') as f: - f.write(array) - -def parse(): - '''解析数据''' - config = {} - - try: - with open('dev.dat', 'rb') as f: - data = f.read() - except FileNotFoundError: - data = b'\x00' * len(dev_data) - - # 解析数据 - for index, i in enumerate(dev_data): - value = data[index] - for k, v in i['cases'].items(): - k = int(k) - if value == k: - config[i['config_in_data']] = v - - return config \ No newline at end of file diff --git a/Gui/res/defaultsetting.json b/Gui/res/defaultsetting.json index 294a8511..4ac71c05 100644 --- a/Gui/res/defaultsetting.json +++ b/Gui/res/defaultsetting.json @@ -1 +1,47 @@ -{"select_lang": "!var system_lang", "show_tray_icon": true, "soft_delay": 100, "click_delay": "", "click_times": "", "delay_unit": 0, "times_unit": 0, "failed_use_default": false, "times_failed_use_default": false, "update_enabled": true, "update_notify": true, "quiet_update": false, "update_ok_notify": true, "update_frequency": 1, "select_style": 0, "use_windows_color": true, "theme": "!var default_theme", "left_click_hotkey": ["F2"], "right_click_hotkey": ["F3"], "pause_click_hotkey": ["F4"], "stop_click_hotkey": ["F6"], "click_attr_hotkey": ["Ctrl", "Alt", "A"], "fast_click_hotkey": ["Ctrl", "Alt", "F"], "main_window_hotkey": ["Ctrl", "Alt", "M"], "default_doc_link": "https://xystudiocode.github.io/clickmouse_docs/{lang}", "lang_doc": 0, "update_log_path": "updatelog", "hotkey_enabled": false, "show_warning": true, "show_package_warning": true, "feedback": "https://github.com/xystudiocode/pyClickMouse/issues/new/choose", "hide_flags": true} \ No newline at end of file +{ + "select_lang": 0, + "show_tray_icon": true, + "soft_delay": 100, + "click_delay": "", + "click_times": "", + "delay_unit": 0, + "times_unit": 0, + "failed_use_default": false, + "times_failed_use_default": false, + "update_enabled": true, + "update_notify": true, + "quiet_update": false, + "update_ok_notify": true, + "update_frequency": 1, + "select_style": 0, + "use_windows_color": true, + "theme": "!var default_theme", + "hotkey": { + "hotkey_enabled": true, + "hotkeys": { + "left_click": ["F2"], + "right_click": ["F3"], + "pause_click": ["F4"], + "stop_click": ["F6"], + "click_attr": ["Ctrl","Alt","A"], + "main_window": ["Ctrl","Alt","M"] + }, + "enabled": { + "left_click": true, + "right_click": true, + "pause_click": true, + "stop_click": true, + "click_attr": true, + "main_window": true + } + }, + "default_doc_link": "https://xystudiocode.github.io/pyClickMouse/{lang}", + "lang_doc": 0, + "update_log_path": "updatelog", + "show_warning": true, + "show_package_warning": true, + "feedback": "https://github.com/xystudiocode/pyClickMouse/issues/new/choose", + "hide_flags": true, + "modify_using_default_input": false, + "modify_using_default_combo": false +} \ No newline at end of file diff --git a/Gui/res/dev_data.json b/Gui/res/dev_data.json deleted file mode 100644 index 32960f8c..00000000 --- a/Gui/res/dev_data.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] \ No newline at end of file diff --git a/Gui/res/dev_settings.json b/Gui/res/dev_settings.json index 0967ef42..45e6f184 100644 --- a/Gui/res/dev_settings.json +++ b/Gui/res/dev_settings.json @@ -1 +1,12 @@ -{} +[ + { + "name": "More settings", + "key": "new_settings", + "desc": "To add more settings include:\nToast settings\nEnable hotkey checkbox\nFeedback settings and more..." + }, + { + "name": "Decoupling UI and program", + "key": "decoupling", + "desc": "To decouple the UI and program.This need to restart the program to\nake effect." + } +] diff --git a/Gui/res/langs/langs.json b/Gui/res/langs/langs.json index 76d39791..4d6a0c7a 100644 --- a/Gui/res/langs/langs.json +++ b/Gui/res/langs/langs.json @@ -102,7 +102,7 @@ "64": "Total {0} clicks, {1} clicks completed, {2} clicks remaining; Total {3} seconds spent, {4} seconds spent, {5} seconds remaining, click interval {6}", "65": "preview", "66": "times", - "67": null, + "67": "Number too large", "68": "Open Application", "69": "Hotkey", "6a": "Revert", @@ -212,7 +212,12 @@ "d3": "Lab", "d4": "To test some experimental features, which may not be stable.", "d5": "Hide \"lab\" when no experimental features", - "d6": "There is already an instance running, if you can't find the window, you can wake it up from the tray." + "d6": "There is already an instance running, if you can't find the window, you can wake it up from the tray.", + "d7": "Modify click attributes using the default values", + "d8": "Modify click units using the default values", + "d9": "If you enable it, click input blanks will use the default\nvalue when another one is filled. (by default, only all of the input boxes is\nblank will use the default value).", + "da": "If you enable it, unit comboboxes as unit, and unit input as number.\nrepresenting the unit (by default, only the combo box equal to the settings will\nuse the default value).", + "db": "All" } }, { @@ -318,7 +323,7 @@ "64": "共{0}次连点,已完成{1}次,剩余{2}次;共花费{3},已花费{4},剩余{5},连点间隔{6}", "65": "预览版", "66": "次", - "67": null, + "67": "数值过大", "68": "打开应用", "69": "热键", "6a": "回滚", @@ -355,7 +360,7 @@ "89": "需要重启以下服务", "8a": "响应延迟越快,软件使用越顺畅,但会造成更多的占用。", "8b": "Clickmouse", - "8c": "连点属性", + "8c": "连点属性(&A)", "8d": "离开菜单栏以显示连点进度", "8e": "扩展(&X)", "90": "官方扩展(&O)", @@ -423,12 +428,17 @@ "ce": "软件启动会检查资源,如果缺少一些资源,将会警告。", "cf": "官方扩展包丢失警告", "d0": "我们不建议关闭更新,因为这会让你的clickmouse变得不稳定。", - "d1": "如果你的开机自启动出现问题,或打开了clickmouse窗口,可尝试点击\n它来修复。", + "d1": "如果你的开机自启动出现问题,或打开了clickmouse窗口,可尝试点\n击它来修复。", "d2": "修复成功。", "d3": "实验室", "d4": "用于测试一些功能,可能不稳定。", "d5": "无实验项时候隐藏\"实验室\"设置项", - "d6": "已经有一个实例在运行,如果你没有找到窗口,可前往托盘唤醒。" + "d6": "已经有一个实例在运行,如果你没有找到窗口,可前往托盘唤醒。", + "d7": "使用默认值修改连点属性", + "d8": "使用默认值修改连点单位", + "d9": "如果启用,点击输入框空白时会使用默认值,当其他输入框有值时,不会使用默认值。\n(默认情况下,只有所有输入框都为空时才会使用默认值)", + "da": "如果启用,单位组合框作为单位,单位输入框作为数字代表单位(默认情况下,只有设置\n的值等于组合框的值时才会使用默认值)", + "db": "全部" } } ] \ No newline at end of file diff --git a/Gui/res/ui/clickattr.gui b/Gui/res/ui/clickattr.gui new file mode 100644 index 00000000..7cb40d19 --- /dev/null +++ b/Gui/res/ui/clickattr.gui @@ -0,0 +1,12 @@ ++ \ No newline at end of file diff --git a/Gui/res/ui/importExtension.gui b/Gui/res/ui/importExtension.gui new file mode 100644 index 00000000..ac1a0916 --- /dev/null +++ b/Gui/res/ui/importExtension.gui @@ -0,0 +1,5 @@ ++ + + + + + + + ++ + \ No newline at end of file diff --git a/Gui/res/ui/settings/bottom.gui b/Gui/res/ui/settings/bottom.gui new file mode 100644 index 00000000..6fb8a38f --- /dev/null +++ b/Gui/res/ui/settings/bottom.gui @@ -0,0 +1,8 @@ ++ + + + \ No newline at end of file diff --git a/Gui/res/ui/settings/clicker.gui b/Gui/res/ui/settings/clicker.gui new file mode 100644 index 00000000..dec300c9 --- /dev/null +++ b/Gui/res/ui/settings/clicker.gui @@ -0,0 +1,77 @@ ++ + \ No newline at end of file diff --git a/Gui/res/ui/settings/general.gui b/Gui/res/ui/settings/general.gui new file mode 100644 index 00000000..7caad654 --- /dev/null +++ b/Gui/res/ui/settings/general.gui @@ -0,0 +1,78 @@ ++ + + ++ + 、 + + + + + ++ ++ + + + + + ++ ++ + + + + + + \ No newline at end of file diff --git a/Gui/res/ui/settings/style.gui b/Gui/res/ui/settings/style.gui new file mode 100644 index 00000000..ff2d263c --- /dev/null +++ b/Gui/res/ui/settings/style.gui @@ -0,0 +1,34 @@ ++ + + + ++ + + ++ + + ++ + ++ + + + ++ + + + + ++ ++ + + + + + + + ++ + \ No newline at end of file diff --git a/Gui/res/update.json b/Gui/res/update.json index 13752961..25abe428 100644 --- a/Gui/res/update.json +++ b/Gui/res/update.json @@ -1,9 +1,9 @@ [ { "website_name": "github", - "down_web": "https://github.com/xystudiocode/pyclickmouse/releases/download/{latest_version}/clickmouse.7z", + "down_web": "https://github.com/xystudiocode/pyClickMouse/releases/download/{latest_version}/clickmouse.7z", "open_web": "https://github.com/xystudiocode/pyClickMouse/releases/latest", - "api_web": "https://api.github.com/repos/xystudiocode/pyclickmouse/releases", + "api_web": "https://api.github.com/repos/xystudiocode/pyClickMouse/releases", "header": {"Authorization": "token {0}"}, "addtional_info": {"verify": false}, "lang": "default", diff --git a/Gui/res/versions.json b/Gui/res/versions.json index 27c46bc7..50d70f82 100644 --- a/Gui/res/versions.json +++ b/Gui/res/versions.json @@ -1 +1 @@ -{"clickmouse":"3.2.3.22"} +{"clickmouse":"3.3.0.23alpha6"} diff --git a/Gui/sharelibs.py b/Gui/sharelibs.py index 8356cc75..20764d1d 100644 --- a/Gui/sharelibs.py +++ b/Gui/sharelibs.py @@ -2,28 +2,22 @@ import json from pathlib import Path +import uiml +from uiml import set_style from PySide6.QtWidgets import QMessageBox from PySide6.QtGui import QIcon from PySide6.QtCore import QThread, Signal import os import subprocess import winreg -import sys import ctypes import win32com.client import hashlib import re +from typing import * setting_path = Path('data', 'settings.json') setting_path.parent.mkdir(parents=True, exist_ok=True) - -def _show_message(message, title, status): - if status == 0: - QMessageBox.information(None, title, message) - elif status == 1: - QMessageBox.warning(None, title, message) - elif status == 2: - QMessageBox.critical(None, title, message) def multi_replace(text, replace_dict): '''一次性替换多个子串''' @@ -37,31 +31,20 @@ def get_resource_path(*paths): ''' 获取资源文件路径 ''' - try: - resource = Path('res') # 获取当前目录的资源文件夹路径 - if not resource.exists(): - raise FileNotFoundError('Resource folder missing: res not found') - return str(resource.joinpath(*paths)) - except Exception as e: - _show_message(f'Resource file missing: {e}', 'Error', 2) - sys.exit(1) + resource = Path('res') # 获取当前目录的资源文件夹路径 + if not resource.exists(): + raise FileNotFoundError('Resource not found') + return str(resource.joinpath(*paths)) -try: - lang_path = Path('res', 'langs') - with open(lang_path / 'langs.json', 'r', encoding='utf-8') as f: - langs = json.load(f) - - with open(lang_path / 'control.json', 'r', encoding='utf-8') as f: - control_langs = json.load(f) +lang_path = Path('res', 'langs') +with open(lang_path / 'langs.json', 'r', encoding='utf-8') as f: + langs = json.load(f) - with open(lang_path / 'init.json', 'r', encoding='utf-8') as f: - init_langs = json.load(f) -except FileNotFoundError: - _show_message('Resource file missing: langs not found', 'Error', 2) - sys.exit(1) -except json.JSONDecodeError: - _show_message('Resource file damaged: langs format error', 'Error', 2) - sys.exit(1) +with open(lang_path / 'control.json', 'r', encoding='utf-8') as f: + control_langs = json.load(f) + +with open(lang_path / 'init.json', 'r', encoding='utf-8') as f: + init_langs = json.load(f) def load_settings(): ''' @@ -85,7 +68,7 @@ def load_settings(): def get_lang(lang_package_id, lang_id = None, source = None): source = langs if source is None else source - lang_id = settings.get('select_lang', 0) if lang_id is None else lang_id + lang_id = select_lang if lang_id is None else lang_id for i in source: if i['lang_id'] == 0: # 设置默认语言包 default_lang_text = i['lang_package'] @@ -94,7 +77,7 @@ def get_lang(lang_package_id, lang_id = None, source = None): try: return lang_text[lang_package_id] except KeyError: - print(f'{lang_package_id} not found') + print(f'Language {lang_package_id} not found') return 'Language not found' except UnboundLocalError: lang_text = {} @@ -118,6 +101,9 @@ def parse_system_language_to_lang_id(): return 0 system_lang = parse_system_language_to_lang_id() +select_lang = settings.get('select_lang', 0) +if select_lang == -1: + select_lang = system_lang def get_control_lang(lang_id): return get_lang(lang_id, source=control_langs) @@ -277,7 +263,7 @@ def get_file_hash(file_path, algorithm): except FileNotFoundError: return None except Exception as e: - print(f'计算哈希时出错: {e}') + raise Exception(f'计算哈希时出错: {e}') return None class QtThread(QThread): @@ -293,4 +279,174 @@ def __init__(self, func, args=(), kwargs={}, parent=None): def run(self): '''线程执行函数''' result = self.func(*self.args, **self.kwargs) - self.finished.emit(result) \ No newline at end of file + self.finished.emit(result) + +def widget_replacer(ui_data: str): + ''' + 替换UI中的widget,使用函数式返回 + ''' + if ui_data.startswith('!lang '): + if len(ui_data.split(' ')) == 2: + return get_lang(ui_data.split(' ')[1]) # 语言解析 + else: + return get_lang(ui_data.split(' ')[1], source=globals()[ui_data.split(' ')[2]]) # 语言解析 + else: + return uiml.default_replacer(ui_data) # 交由uiml进行替换 + +def layout_parser(ui_data: Dict[str, Any], namespace=None, additional=None): + additional_value = additional if additional is not None else {} # 额外参数 + if not ui_data.get('show_if', True): + return None + if ui_data.get('direction').lower() == 'u': + input_compiled_list = [] + # 索引0 -- 字 + # 索引1 -- 输入框 + # 索引2 -- 选择框 + inputs = ui_data['content'][1] + for input in inputs['content']: + input_compiled_list.append(uiml.compile_ui(input, namespace, additional_value)) # 递归解析 + combos = ui_data['content'][2] # 组合框 + combos_compiled_list = [] + for combo in combos['content']: + combos_compiled_list.append(uiml.compile_ui(combo, namespace, additional_value)) # 递归解析 + return {'name': ui_data.get('name'), 'direction': ui_data.get('direction'), "texts": ui_data['content'][0]['values'], 'inputs': input_compiled_list, 'combos': combos_compiled_list} + return uiml.default_layout_parser(ui_data, namespace, additional_value) # 交由uiml进行替换 + +def widget_parser(ui_data: Dict[str, Any], namespace=None, additional=None): + additional_value = additional if additional is not None else {} # 额外参数 + show_value = ui_data.get('show_if', True) + uiml_value = uiml.default_widget_parser(ui_data, namespace, additional_value) # 交由uiml进行替换 + if not show_value: + return None + return uiml_value + +uiml.set_namespace( + value_replace_func=widget_replacer, layout_parser_func=layout_parser, widget_parser_func=widget_parser, + additional_used_widget_key=['show_if'], additional_used_layout_key=['show_if'], reverse=True, + enable_value_convert=True +) # 设置uiml的控制函数 + +class UIWindow(uiml.UIMLLayout): + def __init__(self, list=None): + super().__init__(list) + + def find_widget(self, path: str, data=None): + ''' + 在嵌套字典结构中按点分隔路径查找元素。 + + 规则: + - 路径中的每一段对应字典中的 'name' 字段。 + - 若当前节点是布局(含有 'direction' 键),且不是最后一段,则自动进入其子元素继续查找。 + - 普通布局(direction 非 'u')的子元素在 'content' 列表中。 + - 特殊布局(direction == 'u')的子元素在 'inputs' 和 'combos' 列表中('texts' 不参与导航)。 + - 最后一段如果是普通布局,返回其 'content' 列表;如果是 'u' 布局,返回 {'texts':..., 'inputs':..., 'combos':...};如果是控件,返回其 'content'。 + - 路径必须完整且精确,找不到时抛出 KeyError。 + + 参数: + path: 点分隔的路径字符串,如 "layout.vlayout.checkbox2" + data: 根字典(例如 {'name': 'layout', 'direction': 'h', 'content': [...]}) + + 返回: + 根据路径找到的控件对象、布局的 content 列表,或 'u' 布局的 texts/inputs/combos 字典。 + ''' + data = self.list if data is None else data + parts = path.split('.') + if not parts: + raise ValueError("Empty path") + + # 根节点名称必须匹配第一段 + if data.get('name') != parts[0]: + raise KeyError(f"Root name mismatch: expected '{parts[0]}', got '{data.get('name')}'") + + current = data + + for i, part in enumerate(parts): + # 检查当前节点名称是否匹配 + if current.get('name') != part: + raise KeyError(f"Name mismatch: expected '{part}', got '{current.get('name')}'") + + # 最后一段 + if i == len(parts) - 1: + if 'direction' in current: + direction = current.get('direction', '').lower() + if direction == 'u': + # 特殊布局:返回 texts、inputs、combos 组成的字典 + return { + 'texts': current.get('texts', []), + 'inputs': current.get('inputs', []), + 'combos': current.get('combos', []) + } + else: + # 普通布局:返回 content 列表 + content = current.get('content') + if content is None: + raise ValueError(f"Layout '{part}' has no content") + if not isinstance(content, list): + raise TypeError(f"Layout '{part}' content is not a list") + return content + else: + # 控件:返回 content 属性 + content = current.get('content') + if content is None: + raise ValueError(f"Widget '{part}' has no content") + return content + + # 不是最后一段,当前节点必须是布局 + if 'direction' not in current: + raise KeyError(f"'{part}' is not a layout, cannot traverse further") + + direction = current.get('direction', '').lower() + next_name = parts[i + 1] + found = None + + if direction == 'u': + # 从 inputs 和 combos 中查找子元素 + for child in current.get('inputs', []) + current.get('combos', []): + if child.get('name') == next_name: + found = child + break + else: + # 普通布局从 content 中查找 + for child in current.get('content', []): + if child.get('name') == next_name: + found = child + break + + if found is None: + raise KeyError(f"Child '{next_name}' not found in layout '{part}'") + current = found + + # 正常流程不会执行到这里 + return None + + def return_layout(self, layout): + return layout, 'layout', 0 + + def extend_layout(self, list_info): + if list_info['direction'].lower() == 'u': + from uiStyles.widgets import UnitInputLayout + layout = UnitInputLayout() + for text, input, combo in zip(list_info['texts'], list_info['inputs'], list_info['combos']): + if text.startswith('!lang '): # 语言解析 + text = get_lang(text[6:]) + layout.addUnitRow(text, input['content'], combo['content']) + return layout, 'layout', 0 + else: + uiml.WidgetError.direction_error() # 交由 uiml 进行处理 + + def adder(self, widget_info): + return (widget_info[0], ), {'stretch': widget_info[2]} + + def add_layout(self, list_content: Dict, layout: uiml.QLayout): + draw_on_end = list_content.get('stretch_place', 'end') == 'end' # 是否在布局末尾绘制拉伸 + if not draw_on_end: # 在布局前绘制拉伸 + self._add_stretch(list_content, layout) # 添加伸缩 + self._for_loop(list_content, layout) # 递归绘制子布局 + if draw_on_end: # 在布局末尾绘制拉伸 + self._add_stretch(list_content, layout) # 添加伸缩 + return self.return_layout(layout) + + def extend_widget(self, widget_info): + widget = list(super().extend_widget(widget_info)) + widget.append(widget_info.get('stretch', 0)) + return tuple(widget) \ No newline at end of file diff --git a/Gui/tests/test_nest.py b/Gui/tests/test_nest.py new file mode 100644 index 00000000..923df50d --- /dev/null +++ b/Gui/tests/test_nest.py @@ -0,0 +1,45 @@ +def set_nested_value(dic: dict, path: str, mode:str, value) -> None: + ''' + 在字典中按路径设置值。 + - 如果路径不含逗号,则直接设置 dic[path] = value。 + - 如果路径含逗号,则按逗号分割为多级键,逐层递进,在最后一级键处设置值。 + 若中间键不存在,则自动创建新字典;若中间键存在但不是字典,则覆盖为字典(原值丢失)。 + ''' + def check_dic(dic, path, val): + if mode == 'set': + dic[path] = val + elif mode == 'del': + del dic[path] + else: + raise ValueError('Invalid mode: ' + mode) + + if ',' not in path: + check_dic(dic, path, value) + return + + keys = [k.strip() for k in path.split(',')] # 去除可能的空格 + current = dic + # 逐层深入到倒数第二个键 + for key in keys[:-1]: + if key not in current: + check_dic(current, key, {}) + elif not isinstance(current[key], dict): + raise ValueError('Invalid path: ' + path) # 路径中存在无效的键 + current = current[key] + # 在最后一级键处赋值 + check_dic(current, keys[-1], value) + +def test_main(): + dic = {'a': {'b': {'c': 1}}} + set_nested_value(dic, 'a,b,c', 'set', 2) + print(dic) # 输出 {'a': {'b': {'c': 2}}} + assert dic['a']['b']['c'] == 2 + set_nested_value(dic, 'a,b,c', 'del', None) + print(dic) # 输出 {'a': {'b': {}}} + assert 'c' not in dic['a']['b'] + set_nested_value(dic, 'a,d', 'set', 3) + assert dic['a']['d'] == 3 + print(dic) # 输出 {'a': {'b': {}, 'd': 3}} + +if __name__ == '__main__': + test_main() \ No newline at end of file diff --git a/Gui/txtinfo.py b/Gui/txtinfo.py index 19825be0..07ecbda9 100644 --- a/Gui/txtinfo.py +++ b/Gui/txtinfo.py @@ -20,13 +20,7 @@ class SettingText: select_style = 'select_style' use_windows_color = 'use_windows_color' theme = 'theme' - left_click_hotkey = 'left_click_hotkey' - right_click_hotkey = 'right_click_hotkey' - pause_click_hotkey = 'pause_click_hotkey' - stop_click_hotkey ='stop_click_hotkey' - click_attr_hotkey = 'click_attr_hotkey' - fast_click_hotkey = 'fast_click_hotkey' - main_window_hotkey = 'main_window_hotkey' + hotkey = 'hotkey' default_doc_link = 'default_doc_link' lang_doc = 'lang_doc' update_log_path = 'update_log_path' @@ -35,14 +29,13 @@ class SettingText: show_package_warning ='show_package_warning' feedback = 'feedback' hide_flags = 'hide_flags' + modify_using_default_input = 'modify_using_default_input' + modify_using_default_combo = 'modify_using_default_combo' class SettingValue: def get(self, value): default_value = default_settings.get(value, None) - if isinstance(default_value, str): - if default_value.startswith('!var '): # 需要加载变量 - var_name = default_value[5:] - default_value = eval(var_name) + return settings.get(value, default_value) def __getitem__(self, key): @@ -122,33 +115,19 @@ def use_windows_color(self): def theme(self): return self[SettingText.theme] - @property - def left_click_hotkey(self): - return self[SettingText.left_click_hotkey] - - @property - def right_click_hotkey(self): - return self[SettingText.right_click_hotkey] - - @property - def pause_click_hotkey(self): - return self[SettingText.pause_click_hotkey] - - @property - def stop_click_hotkey(self): - return self[SettingText.stop_click_hotkey] - - @property - def click_attr_hotkey(self): - return self[SettingText.click_attr_hotkey] + def _get_hotkey(self, val_name): + setting_value = settings.get(SettingText.hotkey, {}).get(val_name, {}) + default_value = default_settings.get(SettingText.hotkey, {}).get(val_name, {}) + + return default_value | setting_value # 右侧覆盖左侧 @property - def fast_click_hotkey(self): - return self[SettingText.fast_click_hotkey] + def hotkey_list(self): + return self._get_hotkey('hotkeys') @property - def main_window_hotkey(self): - return self[SettingText.main_window_hotkey] + def hotkey_enabled_list(self): + return self._get_hotkey('enabled') @property def default_doc_link(self): @@ -164,7 +143,7 @@ def update_log_path(self): @property def hotkey_enabled(self): - return self[SettingText.hotkey_enabled] + return self[SettingText.hotkey].get(SettingText.hotkey_enabled, True) @property def show_warning(self): @@ -182,6 +161,14 @@ def feedback(self): def hide_flags(self): return self[SettingText.hide_flags] + @property + def modify_using_default_input(self): + return self[SettingText.modify_using_default_input] + + @property + def modify_using_default_combo(self): + return self[SettingText.modify_using_default_combo] + class StyleClass: big_16 = 'big_text_16' big_20 = 'big_text_20' diff --git a/Gui/uiStyles/uiTemplate.py b/Gui/uiStyles/uiTemplate.py index 6e734b16..cabf6013 100644 --- a/Gui/uiStyles/uiTemplate.py +++ b/Gui/uiStyles/uiTemplate.py @@ -17,20 +17,20 @@ def __init__(self): def init_base_ui(self): '''创建基础UI''' # 创建中心部件和主布局 - central_widget = QWidget() - self.setCentralWidget(central_widget) - main_layout = QHBoxLayout(central_widget) + self.central_widget = QWidget() + self.setCentralWidget(self.central_widget) + self.main_layout = QHBoxLayout(self.central_widget) # 设置两个滚动区域之间的间距为15像素 - main_layout.setSpacing(15) + self.main_layout.setSpacing(15) # 创建左侧滚动区域 self.left_scroll = QScrollArea() - main_layout.addWidget(self.left_scroll, 1) # 拉伸系数为1 + self.main_layout.addWidget(self.left_scroll, 1) # 拉伸系数为1 # 创建右侧滚动区域 self.right_scroll = VScrollArea() - main_layout.addWidget(self.right_scroll, 5) # 拉伸系数为5 + self.main_layout.addWidget(self.right_scroll, 5) # 拉伸系数为5 def init_ui(self): '''创建设置界面''' @@ -46,7 +46,7 @@ def draw_page_choice(self): for i, page_title in enumerate(self.page_choice_buttons): button = QPushButton(page_title) # 连接按钮点击信号到槽函数 - button.clicked.connect(lambda checked, idx=i: self.on_page_button_clicked(idx)) + button.clicked.connect(lambda checked, idx=i: (self.on_page_button_clicked(idx))) content_layout.addWidget(button) self.buttons.append(button) @@ -54,6 +54,11 @@ def draw_page_choice(self): content_layout.addStretch() self.left_scroll.setWidget(content) + + def on_page_button_clicked(self, idx): + '''页面按钮点击槽函数''' + # 请自行实现 + pass def init_right_pages(self): '''初始化右侧设置页面''' diff --git a/Gui/uiStyles/widgets.py b/Gui/uiStyles/widgets.py index 73abd9b8..8d8b91e4 100644 --- a/Gui/uiStyles/widgets.py +++ b/Gui/uiStyles/widgets.py @@ -1,9 +1,18 @@ -from uiStyles.QUI import * -from sharelibs import get_lang,default_button_text +# from uiStyles.QUI import * +from PySide6.QtWidgets import * +from PySide6.QtCore import * +from PySide6.QtGui import * +import ctypes # 用于获取系统风格 +from sharelibs import get_lang, default_button_text -__all__ = ['UMessageBox', 'VScrollArea', 'HScrollArea', 'UCheckBox', 'UnitInputLayout', 'ULabel', 'MessageButtonTemplate', 'CustonMessageButton'] +__all__ = ['UMessageBox', 'VScrollArea', 'HScrollArea', 'UCheckBox', 'UnitInputLayout', 'ULabel', 'MessageButton', 'CustonMessageButton', 'MessageIcon'] -class MessageButtonTemplate: +# 定义消息框图标对应的声音常量 +MB_ICONHAND = 0x00000010 # 错误(手形) +MB_ICONEXCLAMATION = 0x00000030 # 警告 +MB_ICONASTERISK = 0x00000040 # 信息 + +class MessageButton: NOBUTTON = 0b0 YES = 0b1 NO = 0b10 @@ -12,85 +21,167 @@ class MessageButtonTemplate: YESNO = YES | NO OKCANCEL = OK | CANCEL + class ReturnValue: + YES = 0 + NO = 1 + OK = 2 + CANCEL = 3 + +class MessageIcon: + INFO = 0b1 + WARNING = 0b10 + CRITICAL = 0b100 + QUESTION = 0b1000 + class CustonMessageButton: def __init__(self, text, role): self.text = text self.role = role -class UMessageBox(QMessageBox): - @staticmethod - def new_msg(parent, - title: str, - text: str, - icon: QMessageBox.Icon, - buttons: MessageButtonTemplate = MessageButtonTemplate.OK, - defaultButton: MessageButtonTemplate = MessageButtonTemplate.OK): - - msg_box = QMessageBox(icon, title, text, buttons=QMessageBox.NoButton, parent=parent) - - default_btn = None - - # 虽然下面的规则匹配有点奇怪,但是为了显示整齐所以要这样写 +class UMessageBox(QDialog): + def __init__(self, parent: QWidget | None, title: str, text: str, icon: MessageIcon, buttons: MessageButton, defaultButton: MessageButton): + super().__init__(parent) + + self.setWindowTitle(title) + + self.text = text + match icon: + case MessageIcon.INFO: + self.icon = QStyle.SP_MessageBoxInformation + case MessageIcon.WARNING: + self.icon = QStyle.SP_MessageBoxWarning + case MessageIcon.CRITICAL: + self.icon = QStyle.SP_MessageBoxCritical + case MessageIcon.QUESTION: + self.icon = QStyle.SP_MessageBoxQuestion + case _: + raise ValueError('Invalid icon value') + + self.buttons = {} + self.defaultButton = None + + self.btn_id = 5 # 前四个为默认按钮id,后面为自定义按钮id + if isinstance(buttons, int): - if buttons & MessageButtonTemplate.YES: - btn = msg_box.addButton(get_lang('01', source=default_button_text), QMessageBox.YesRole) - if defaultButton == MessageButtonTemplate.YES: - default_btn = btn - - if buttons & MessageButtonTemplate.NO: - btn = msg_box.addButton(get_lang('02', source=default_button_text), QMessageBox.AcceptRole) - if defaultButton == MessageButtonTemplate.NO: - default_btn = btn - - if buttons & MessageButtonTemplate.OK: - btn = msg_box.addButton(get_lang('03', source=default_button_text), QMessageBox.NoRole) - if defaultButton == MessageButtonTemplate.OK: - default_btn = btn - - if buttons & MessageButtonTemplate.CANCEL: - btn = msg_box.addButton(get_lang('04', source=default_button_text), QMessageBox.RejectRole) - if defaultButton == MessageButtonTemplate.CANCEL: - default_btn = btn - elif isinstance(buttons, CustonMessageButton): - btn = msg_box.addButton(buttons.text, buttons.role) - if defaultButton == buttons: - default_btn = btn - elif isinstance(buttons, list): + if buttons & MessageButton.YES: + btn = QPushButton(get_lang('01', source=default_button_text)) + msg_id = 1 + + self.buttons[msg_id] = btn + if defaultButton == MessageButton.YES: + self.defaultButton = btn + if buttons & MessageButton.NO: + btn = QPushButton(get_lang('02', source=default_button_text)) + msg_id = 2 + self.buttons[msg_id] = btn + + if defaultButton == MessageButton.NO: + self.defaultButton = btn + if buttons & MessageButton.OK: + btn = QPushButton(get_lang('03', source=default_button_text)) + msg_id = 3 + self.buttons[msg_id] = btn + + if defaultButton == MessageButton.OK: + self.defaultButton = btn + if buttons & MessageButton.CANCEL: + btn = QPushButton(get_lang('04', source=default_button_text)) + msg_id = 4 + self.buttons[msg_id] = btn + + if defaultButton == MessageButton.CANCEL: + self.defaultButton = btn + if isinstance(buttons, CustonMessageButton): + btn = QPushButton(buttons.text) + msg_id = self.btn_id + self.btn_id += 1 + self.buttons[msg_id] = btn + + if defaultButton == btn: + self.defaultButton = btn + if isinstance(buttons, list): for button in buttons: if isinstance(button, CustonMessageButton): - btn = msg_box.addButton(button.text, button.role) + btn = QPushButton(button.text, button.role) + msg_id = self.btn_id + self.buttons[msg_id] = btn if defaultButton == button: - default_btn = btn + self.defaultButton = btn else: - raise ValueError('buttons must be a list of CustonMessageButton') # 报错 - else: - raise ValueError('buttons must be a int or a list of CustonMessageButton') # 报错 - - if default_btn: - msg_box.setDefaultButton(default_btn) + raise ValueError('buttons must be a list of CustonMessageButton') - return msg_box - - @classmethod - def warning(cls, parent, title: str, text: str, buttons: MessageButtonTemplate = MessageButtonTemplate.OK, defaultButton: MessageButtonTemplate = MessageButtonTemplate.OK): - msg_box = cls.new_msg(parent, title, text, QMessageBox.Icon.Warning, buttons, defaultButton) - return msg_box.exec() + self.init_ui() + + def init_ui(self): + layout = QVBoxLayout(self) + + content_layout = QHBoxLayout() + icon = QLabel() + show_icon = icon.style().standardIcon(self.icon) + icon.setPixmap(show_icon.pixmap(32, 32)) + + # 将 label 保存为实例属性,以便后续设置最大宽度 + label = QLabel(self.text) + label.setAlignment(Qt.AlignLeft | Qt.AlignTop) + label.setWordWrap(True) # 文本换行 + label.setMaximumWidth(500) + + content_layout.addWidget(icon, 0) + content_layout.addWidget(label, 1) + buttons_layout = QHBoxLayout() + buttons_layout.addStretch() + buttons_layout.setContentsMargins(0, 8, 0, 0) + for k, button in self.buttons.items(): + button.clicked.connect(lambda b, key=k: self.done(key)) # 为按钮添加点击事件 + buttons_layout.addWidget(button) + if button == self.defaultButton: + button.setDefault(True) + + layout.addLayout(content_layout) + layout.addLayout(buttons_layout) + + self.setLayout(layout) + + def showEvent(self, event): + match self.icon: + case QStyle.SP_MessageBoxInformation: + sound = MB_ICONASTERISK + case QStyle.SP_MessageBoxWarning: + sound = MB_ICONEXCLAMATION + case QStyle.SP_MessageBoxCritical: + sound = MB_ICONHAND + case _: + sound = None + + if sound is not None: + ctypes.windll.user32.MessageBeep(sound) + return super().showEvent(event) + @classmethod - def critical(cls, parent, title: str, text: str, buttons: MessageButtonTemplate = MessageButtonTemplate.OK, defaultButton: MessageButtonTemplate = MessageButtonTemplate.OK): - msg_box = cls.new_msg(parent, title, text, QMessageBox.Icon.Critical, buttons, defaultButton) - return msg_box.exec() + def infomation(cls, parent: QWidget | None, title: str, text: str, buttons: MessageButton = None, defaultButton: MessageButton = None): + buttons = MessageButton.OK if buttons is None else buttons + defaultButton = MessageButton.OK if buttons is None else defaultButton + return cls(parent, title, text, MessageIcon.INFO, buttons, defaultButton).exec() @classmethod - def information(cls, parent, title: str, text: str, buttons: MessageButtonTemplate = MessageButtonTemplate.OK, defaultButton: MessageButtonTemplate = MessageButtonTemplate.OK): - msg_box = cls.new_msg(parent, title, text, QMessageBox.Icon.Information, buttons, defaultButton) - return msg_box.exec() + def warning(cls, parent: QWidget | None, title: str, text: str, buttons: MessageButton = None, defaultButton: MessageButton = None): + buttons = MessageButton.OK if buttons is None else buttons + defaultButton = MessageButton.OK if buttons is None else defaultButton + return cls(parent, title, text, MessageIcon.WARNING, buttons, defaultButton).exec() @classmethod - def question(cls, parent, title: str, text: str, buttons: MessageButtonTemplate = MessageButtonTemplate.YESNO, defaultButton: MessageButtonTemplate = MessageButtonTemplate.YES): - msg_box = cls.new_msg(parent, title, text, QMessageBox.Icon.Question, buttons, defaultButton) - return msg_box.exec() - + def critical(cls, parent: QWidget | None, title: str, text: str, buttons: MessageButton = None, defaultButton: MessageButton = None): + buttons = MessageButton.OK if buttons is None else buttons + defaultButton = MessageButton.OK if buttons is None else defaultButton + return cls(parent, title, text, MessageIcon.CRITICAL, buttons, defaultButton).exec() + + @classmethod + def question(cls, parent: QWidget | None, title: str, text: str, buttons: MessageButton = None, defaultButton: MessageButton = None): + buttons = MessageButton.YESNO if buttons is None else buttons + defaultButton = MessageButton.YESNO if buttons is None else defaultButton + return cls(parent, title, text, MessageIcon.QUESTION, buttons, defaultButton).exec() + class VScrollArea(QScrollArea): def __init__(self, parent=None): super().__init__(parent) diff --git a/clickmouse_api/clickmouse_API/command.py b/MANIFEST.in similarity index 100% rename from clickmouse_api/clickmouse_API/command.py rename to MANIFEST.in diff --git a/README-py.md b/README-py.md new file mode 100644 index 00000000..89b00b03 --- /dev/null +++ b/README-py.md @@ -0,0 +1,18 @@ +# Python package usage + +## 📝 Installation +```bash +pip install ClickMouse +``` + +## 🚀 Usage +For Python call or .pyd call, use the following code: +```python +import clickmouse + +clickmouse.click_mouse(clickmouse.LEFT, 1000, 10, 10) # click left button 10 times, interval 1000ms, press duration 10ms +``` +~~Command line call~~ +```bash +ClickMouse.exe /h # show help +``` diff --git a/README-zh_CN.md b/README-zh_CN.md new file mode 100644 index 00000000..8766cbcb --- /dev/null +++ b/README-zh_CN.md @@ -0,0 +1,167 @@ ++ + + + ++ + + + ++ + + + ++ ++ + + ++ +--- + +> [!IMPORTANT] +> clickmouse主程序是main.exe,如果要运行clickmouse请点击main.exe,不要点击其他文件 + +> [!TIP] +> 我们不会在gitee上处理issue和pr,请使用github。 + +## 🅱️版权声明 +鼠标 的图标 Icons8 + +## 📄介绍 +一款快捷,简洁,轻便;使用python制作的鼠标连点器。 + +这个软件可以有较多的版本,基本都是C/C++调用版本、python调用版本和命令行交互版本。 + +## 📚使用的第三方库和使用的功能 + +### 🐍python +#### 📔需要使用的库 +- PySide6:对于gui界面,他是图形核心框架 +- pyautogui:鼠标连点器核心 +- requests:用于检查版本号 +- nuitka:打包为gui或~~交互式命令行~~的库 +- cython:打包为pyd的库 +- setuptools:打包为python包的库 +- pywin32:win32控制 +- pynput: 键盘控制库 +- pyperclip: 剪贴板库 +- psutil: 进程管理库 +- packaging: 版本管理库 +- pytz: 时区管理库 + +#### 📖clickmouse官方制作的库 +- clickmouse: 连点器管理库 +- clickmouse_api: 扩展制作的调用api + +### ⬇️快速安装 +输入`pip install -r requirements.txt`安装 + +## 🛠️支持调用的工具 +- [x] C/C++头文件调用 使用原本C++版本的clickMouse改装而来 速度最快,兼容性最好,但是使用失效的可能性最大。可以从[releases](https://github.com/xystudiocode/pyClickMouse)下载 +- [x] 使用原本C++版本的clickMouse 速度最快,兼容性最好,但是使用失效的可能性最大,已经停止更新,可以从[releases](https://github.com/xystudiocode/pyClickMouse)下载,[之前的clickmouse项目](https://github.com/xystudio889/ClickMouse) +- [x] 使用.dll调用 基于C++语言,速度最快,兼容性较好,使用失效的可能性最大。(配置较难,推荐使用C/C++头文件)可以从[releases](https://github.com/xystudiocode/pyClickMouse)下载 +- [x] (开发人员推荐)python调用 速度中等,兼容性最好,使用失效的可能性最小。可以使用`pip install clickmouse`下载 +- [x] 使用.pyd调用 基于python语言,速度较快,兼容性较差(不同版本的python可能不兼容),使用失效的可能性较小。可以从[releases](https://github.com/xystudiocode/pyClickMouse)下载(单独编译仅需编译cython/目录) +- [x] (普通用户推荐)使用exe 使用 基于交互式命令行添加了gui。可以从[releases](https://github.com/xystudiocode/pyClickMouse)下载 +- [ ] 使用交互式命令行 使用 基于python语言,比gui轻便。~~可以从[releases](https://github.com/xystudiocode/pyClickMouse)下载~~ 暂时没有该版本,敬请期待 +- [ ] 使用标准命令行 使用 基于python语言。~~将会自带在gui版本和pip安装版本中~~ 暂时没有该版本,敬请期待 +- [x] 精简版(ClickClean) 比exe gui版本更加精简,告别臃肿的无用功能。可以从[releases](https://github.com/xystudiocode/pyClickMouse) + +## ⚒️安装和调用 +Gui版本和~~命令行交互版本~~无需安装,直接运行即可。 + +C/C++头文件调用可以直接使用以下代码调用(需要配置include目录) +```C++ +#include+
Clickmouse
+
+ 一款快捷,简洁,轻便;使用python制作的鼠标连点器。 +
+ ++ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ ++ + +
+ + +
+ +
++
+
+#include +using namespace std; + +int main(){ + cout << CLICKMOUSE_VERSION << endl; // 打印版本信息,若成功输出一串数字,则安装成功 + clickMouse(LEFT, 1000, 10, 10); // 连点10次左键,间隔为1000ms,按下时间为10ms + return 0; +} +``` + +> [!IMPORTANT] +> 下载基于pyd的文件时候需要注意:必须下载是你python版本的文件(如`lickmouse.cp39-win_amd64.pyd`)仅支持python3.9(cp后面的是版本,如果你使用python3.13以后的版本,不需要下载后面有t的版本(除非你使用free thread开发)) + +python调用或.pyd调用可以直接使用以下代码调用: +```python +import clickmouse + +clickMouse.click_mouse(clickmouse.LEFT, 1000, 10, 10) # 连点10次左键,间隔为1000ms,按下时间为10ms +``` +~~命令行调用~~ +```bash +ClickMouse.exe /h # 查看帮助 +``` +## 💻再次编译方法 +见[协作文档](./CONTRIBUTING.md),找到`## ⬇️配置仓库`这一段,按照说明配置仓库。 +### 📊使用优先级 +开发人员: +```mermaid +graph LR +A[python] --> B[pyd调用] --> D[命令行调用] +C[C/C++] --> E[dll调用] --> D +``` +鼠标连点器会一直保持运行,直到关闭程序或手动停止。 +目前支持暂停和停止功能。 + +## 🖥️Clickmouse 软件 +clickmouse版本格式为:`A.B.C.D[(alpha | beta |.dev | rc) E]` +## 😊正式版本 +正式版不带.dev、alpha、beta或rc后缀。 + +A位代表有重大更新,有代码级的变动。如1.0升级到2.0就重构了代码。 + +B位代表有普通更新,通常是更新一些大功能。 + +C位代表有修复更新,通常会更新一些小功能和一些bug。 + +D位代表版本代号,通常每A, B, C位有变动时候+1。也有可能A, B, C位没有变动,D位+1,这代表紧急更新,通常是修复几个重大影响的bug。 + +## 🅱️测试版本 +测试版本带.dev、alpha、beta或rc后缀。 + +通常前面的`A.B.C.D`在一个测试周期内不变,代表下一个版本。 + +`.dev`代表早期开发更新,功能不稳定,bug很多,位于版本项目初期。这阶段新增的功能将会被放到实验室中,并默认关闭。 + +`alpha`代表晚期开发更新,功能不完善,bug较多,位于版本项目早期。这阶段新增的功能将会被放到实验室中,并默认关闭。 + +`beta`代表发布测试更新,功能完善,bug较少,不会再新增功能,位于版本项目中期。并且会逐步合并实验室中的feature。 + +`rc`代表预备发布版本,功能完善,bug较少,会修复一些重要安全问题或bug,最接近正式版,即将发布正式版,位于版本项目末期。 + +::: tip 提示 +rc最后一个版本将直接合并到测试版,不再单独发布;功能完全一样。 +::: diff --git a/README.md b/README.md index f259df67..6ba39392 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,15 @@ -# Clickmouse - - +++
Clickmouse
+
+ A fast, simple, lightweight mouse clicker made with Python. +
+ ++ + +
+
@@ -9,10 +18,10 @@
-
+
-
+
B[pyd调用] --> D[命令行调用] -C[C/C++] --> E[dll调用] --> D +A[python] --> B[pyd call] --> D[command line call] +C[C/C++] --> E[dll call] --> D ``` -鼠标连点器会一直保持运行,直到关闭程序或手动停止。 -目前支持暂停和停止功能。 - -## 🖥️Clickmouse 软件 -clickmouse版本格式为:`A.B.C.D[(alpha | beta |.dev | rc) E]` -## 😊正式版本 -正式版不带.dev、alpha、beta或rc后缀。 - -A位代表有重大更新,有代码级的变动。如1.0升级到2.0就重构了代码。 - -B位代表有普通更新,通常是更新一些大功能。 - -C位代表有修复更新,通常会更新一些小功能和一些bug。 - -D位代表版本代号,通常每A, B, C位有变动时候+1。也有可能A, B, C位没有变动,D位+1,这代表紧急更新,通常是修复几个重大影响的bug。 +The auto-clicker will keep running until the program is closed or manually stopped. +Supports pause and stop functions. -## 🅱️测试版本 -测试版本带.dev、alpha、beta或rc后缀。 +## 🖥️ Clickmouse Software +Clickmouse version format: `A.B.C.D[(alpha | beta | .dev | rc) E]` -通常前面的`A.B.C.D`在一个测试周期内不变,代表下一个版本。 +## 😊 Stable versions +Stable versions do not have suffixes like .dev, alpha, beta, or rc. -`.dev`代表早期开发更新,功能不稳定,bug很多,位于版本项目初期。这阶段新增的功能将会被放到实验室中,并默认关闭。 +- A digit: major updates with code-level changes. For example, upgrading from 1.0 to 2.0 means a code refactor. +- B digit: regular updates, usually adding major features. +- C digit: patch updates, usually adding minor features and bug fixes. +- D digit: release identifier, incremented whenever A, B, or C changes. It may also increment without changes to A, B, C, indicating an emergency update that fixes several critical bugs. -`alpha`代表晚期开发更新,功能不完善,bug较多,位于版本项目早期。这阶段新增的功能将会被放到实验室中,并默认关闭。 +## 🅱️ Test versions +Test versions have suffixes like .dev, alpha, beta, or rc. -`beta`代表发布测试更新,功能完善,bug较少,不会再新增功能,位于版本项目中期。并且会逐步合并实验室中的feature。 +Typically the preceding `A.B.C.D` remains unchanged during a test cycle and represents the next version. -`rc`代表预备发布版本,功能完善,bug较少,会修复一些重要安全问题或bug,最接近正式版,即将发布正式版,位于版本项目末期。 +- `.dev` – early development update, unstable features, many bugs, at the project's early stage. New features added during this phase are placed in the lab and disabled by default. +- `alpha` – late development update, incomplete features, many bugs, at the project's early stage. New features added during this phase are placed in the lab and disabled by default. +- `beta` – release candidate testing update, features complete, few bugs, no new features added; at the project's mid stage. Features from the lab are gradually merged. +- `rc` – release candidate, features complete, few bugs; will fix critical security or stability issues; very close to stable release; at the final stage of the project. -::: tip 提示 -rc最后一个版本将直接合并到测试版,不再单独发布;功能完全一样。 -::: +> [!tip] +> The last rc version will be merged directly into the test version and not released separately; the features are identical. \ No newline at end of file diff --git a/SECURITY-zh_CN.md b/SECURITY-zh_CN.md new file mode 100644 index 00000000..a8804be2 --- /dev/null +++ b/SECURITY-zh_CN.md @@ -0,0 +1,36 @@ +# 安全漏洞报告 + + + +## 怎么提交漏洞? + +提交一个github security,详细说明漏洞的影响范围、触发条件、漏洞详情等。 + +## 提交漏洞格式 + +```markdown +# Security Policy + +## Supported Versions + +clickmouse >= **version** + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. + +## How to fix +> [!TIP] +> This section is optional. + +If the vulnerability is accepted, provide information on how to fix the vulnerability. +``` \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md index 95d1d80b..cd0ed9d4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,10 +1,17 @@ -# 安全漏洞报告 +# Security Vulnerability Report -## 怎么提交漏洞? + -提交一个github security,详细说明漏洞的影响范围、触发条件、漏洞详情等。 +## How to submit a vulnerability? -## 提交漏洞格式 +Submit to GitHub Security, detailing the impact range of the vulnerability, triggering conditions, vulnerability details, etc. + +## Vulnerability submission format ```markdown # Security Policy diff --git a/clickmouse_api/README.md b/clickmouse_api/README.md deleted file mode 100644 index ba8adb02..00000000 --- a/clickmouse_api/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ClickMouse API工具库 - -使用clickmouse api来实现clickmouse扩展开发! -导入方法: -```python -from clickmouse_APIv1 as clickmouse -``` -语言包格式: -```json -[ - { - "lang_id": 0, - "lang_system_name":"en", - "lang_package": { - "01": "This is the language package file", - } - }, - { - "lang_id": 1, - "lang_system_name": "zh-CN", - "lang_package": { - "01": "这是语言包文件", - } - } -] -``` -编辑扩展完成后,打包为exe,使用clickmouse导入测试 -若clickmouse已经安装,设置的数据将会导入到clickmouse中 \ No newline at end of file diff --git a/clickmouse_api/clickmouse_API/GUI/__init__.py b/clickmouse_api/clickmouse_API/GUI/__init__.py deleted file mode 100644 index 52e36a6f..00000000 --- a/clickmouse_api/clickmouse_API/GUI/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from wx import * -from clickmouse_API.GUI import styles diff --git a/clickmouse_api/pyproject.toml b/clickmouse_api/pyproject.toml deleted file mode 100644 index 3b5ba98d..00000000 --- a/clickmouse_api/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[build-system] -requires = ["setuptools>=61.0.0"] -build-backend = "setuptools.build_meta" - -[project] -name = "ClickMouse_api" -version = "1.0.1" -authors = [ - {name = "xystudio", email = "173288240@qq.com"} -] -description = "基于Python的鼠标连点工具扩展api" -readme = "README.md" -requires-python = ">=3.8" -license = {text = "MIT"} -keywords = ["mouse", "click", "automation", "clickmouse", "api"] -classifiers = [ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", -] -dependencies = [ - "wxpython" -] - -[project.urls] -Homepage = "https://github.com/xystudiocode/pyClickMouse" - -[project.scripts] -clickmouse = "clickmouse.__main__:main" - -[project.optional-dependencies] -clickmouse_control = ["clickmouse"] \ No newline at end of file diff --git a/clickmouse_api/setup.py b/clickmouse_api/setup.py deleted file mode 100644 index 887cfd28..00000000 --- a/clickmouse_api/setup.py +++ /dev/null @@ -1,37 +0,0 @@ -"""这个是使用setuptools打包的脚本,用于安装使用python调用的clickmouse工具 -这个库仅供开发人员使用,普通人请前往github releases(https://github.com/xystudio/pyClickMouse/releases) -推荐通过'pip install clickmouse'安装,若网络较差,可以使用清华镜像源'pip install clickmouse -i https://pypi.tuna.tsinghua.edu.cn/simple' -若要下载本地安装包,建议下载whl格式的安装包,下载地址:https://github.com/xystudio/pyClickMouse/releases,下载结束后在下载位置打开命令行,运行'python setup.py install'""" - -# 以下为setup.py文件内容 -# 导入setuptools模块 -import setuptools - -# 定义setup函数 -setuptools.setup( - name="ClickMouse_api", # 包名 - version="1.0.1", # 版本号 - author="xystudio", # 作者 - author_email="173288240@qq.com", # 作者邮箱 - description="基于Python的鼠标连点工具扩展api", # 包描述 - url="https://github.com/xystudiocode/pyClickMouse", # 包的github地址 - long_description=open("README.md", "r", encoding="utf-8").read(), # 包的readme文件 - long_description_content_type="text/markdown", # 指定readme文件格式为markdown - packages=setuptools.find_packages(), # 包的目录结构 - classifiers=[ # 包的分类列表 - "Programming Language :: Python :: 3", # python版本 - "License :: OSI Approved :: MIT License", # 许可证 - "Operating System :: OS Independent",# 系统 - ], - keywords=["mouse", "click", "automation", "clickmouse", "api"], # 包的关键字列表 - python_requires='>=3.8', # python版本要求 - install_requires=['wxpython'], # 依赖的包列表 - entry_points={ # 脚本入口 - "console_scripts": [ - "clickmouse = clickmouse.__main__:main", - ] - }, - extras_require = { - "clickmouse_control": ["clickmouse"] - } -) diff --git a/cython/main.py b/cython/main.py deleted file mode 100644 index 18f9d1ba..00000000 --- a/cython/main.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ClickMouse - pyd库 ---- -该库提供了鼠标点击操作的函数。 - -使用方法: -import clickmouse - -# 点击鼠标左键 -clickmouse.click_mouse(clickmouse.LEFT, 100, 100, 10) # 鼠标左键点击10次,延迟为100毫秒,按下时间为100毫秒 -clickmouse.click_mouse(clickmouse.RIGHT, 100, 100, 10) # 鼠标右键点击10次,延迟为100毫秒,按下时间为100毫秒 -""" - -# 需要的库和功能 -from clickmouse import * -from clickmouse import __author__, __version__ \ No newline at end of file diff --git a/cython/setup.py b/cython/setup.py deleted file mode 100644 index 003136a9..00000000 --- a/cython/setup.py +++ /dev/null @@ -1,12 +0,0 @@ -"""这个是使用setuptools打包的脚本,用于安装使用pyd调用的clickmouse工具 -这个库仅供开发人员使用,普通人请前往github releases(https://github.com/xystudio/pyClickMouse/releases)下载安装包 -""" -# 导入模块 -from setuptools import setup -from Cython.Build import cythonize - -# 定义setup函数 -setup( - ext_modules=cythonize(["main.py"]), # 编译main.py为.pyd文件 - install_requires=["clickmouse"], # 依赖模块 -) \ No newline at end of file diff --git a/documents/.vitepress/config.js b/documents/.vitepress/config.js new file mode 100644 index 00000000..1db94306 --- /dev/null +++ b/documents/.vitepress/config.js @@ -0,0 +1,881 @@ +import { withMermaid } from "vitepress-plugin-mermaid"; + +export default withMermaid({ + base: '/pyClickMouse/', + head: [['link', { rel: 'icon', href: '/imgs/icons/icon.ico' }]], + markdown: { + emoji: { + enabled: 'off', + }, + }, + + // 主题配置 + themeConfig: { + logo: '/imgs/icons/icon.ico', + siteTitle: 'Clickmouse docs', + + // 搜索功能 + search: { + provider: 'local', + options: { + locales: { + 'zh-CN': { + translations: { + button: { + buttonText: '搜索', + buttonAriaLabel: '搜索', + }, + modal: { + noResultsText: '无法找到相关结果', + resetButtonTitle: '清除查询条件', + footer: { + selectText: '选择', + navigateText: '切换', + closeText: '关闭', + }, + }, + }, + }, + en: { + translations: { + button: { + buttonText: 'Search', + buttonAriaLabel: 'Search', + }, + modal: { + noResultsText: 'No results found', + resetButtonTitle: 'Clear query', + footer: { + selectText: 'to select', + navigateText: 'to navigate', + closeText: 'to close', + }, + }, + }, + }, + }, + }, + }, + }, + + // 多语言配置 + locales: { + en: { + title: 'Clickmouse docs', + description: 'Clickmouse docs powered by vitepress', + label: 'English', + lang: 'en', + link: '/en/', + themeConfig: { + outlineTitle: 'On this page', + lastUpdatedText: 'Last Updated', + editLink: { + pattern: + 'https://github.com/xystudiocode/pyClickMouse/tree/main/documents/:path', + text: 'Edit this page', + }, + docFooter: { + prev: 'Previous', + next: 'Next', + }, + notFound: { + title: 'PAGE NOT FOUND', + quote: + "But if you don't change your direction, and if you keep looking, you may end up where you are heading.", + linkText: 'Take me home', + }, + // 配置主题 + lightModeSwitchTitle: 'Switch to light mode', + darkModeSwitchTitle: 'Switch to dark mode', + // 社交链接 + socialLinks: [ + { icon: 'github', link: 'https://github.com/xystudiocode/pyClickMouse' }, + { icon: 'gitee', link: 'https://gitee.com/xystudio889/pyClickMouse' }, + ], + sidebar: { + '/en/guide/': [ + { + text: 'Guide', + items: [ + { text: 'Introduction', link: '/en/guide/' }, + { text: 'Getting Started', link: '/en/guide/getting-started' }, + { text: 'FAQ', link: '/en/guide/faq',}, + { text: 'Version Naming', link: '/en/guide/version-naming',}, + { text: 'License', link: '/en/guide/license',}, + ], + }, + ], + '/en/updatelog/': [ + { + text: 'Update log', + items: [ + { + text: 'Final', + collapsed: true, + items: [ + { + text: 'v3.x.x.x', + collapsed: true, + items: [ + { + text: '3.2.3.22', + link: '/en/updatelog/final/3/32322', + }, + { + text: '3.2.2.21', + link: '/en/updatelog/final/3/32221', + }, + { + text: '3.2.1.20', + link: '/en/updatelog/final/3/32120', + }, + { + text: '3.2.0.19', + link: '/en/updatelog/final/3/32019', + }, + { + text: '3.1.3.18', + link: '/en/updatelog/final/3/31318', + }, + { + text: '3.1.2.17', + link: '/en/updatelog/final/3/31217', + }, + { + text: '3.1.1.16', + link: '/en/updatelog/final/3/31116', + }, + { + text: '3.1.0.15', + link: '/en/updatelog/final/3/31015', + }, + { + text: '3.0.3.14', + link: '/en/updatelog/final/3/30314', + }, + { + text: '3.0.2.13', + link: '/en/updatelog/final/3/30213', + }, + { + text: '3.0.1.12', + link: '/en/updatelog/final/3/30112', + }, + { + text: '3.0.0.11', + link: '/en/updatelog/final/3/30011', + }, + ], + }, + { + text: 'v2.x.x.x', + collapsed: true, + items: [ + { + text: '2.2.3.10', + link: '/en/updatelog/final/2/22310', + }, + { + text: '2.2.2.9', + link: '/en/updatelog/final/2/2229', + }, + { + text: '2.2.1.8', + link: '/en/updatelog/final/2/2218', + }, + { + text: '2.2.0.7', + link: '/en/updatelog/final/2/2207', + }, + { + text: '2.1.1.6', + link: '/en/updatelog/final/2/2116', + }, + { + text: '2.1.0.5', + link: '/en/updatelog/final/2/2105', + }, + { + text: '2.0.0.4', + link: '/en/updatelog/final/2/2004', + }, + ], + }, + { + text: 'v1.x.x.x', + collapsed: true, + items: [ + { + text: '1.0.2.3', + link: '/en/updatelog/final/1/1023', + }, + { + text: '1.0.2.2', + link: '/en/updatelog/final/1/1022', + }, + { + text: '1.0.1.1', + link: '/en/updatelog/final/1/1011', + }, + { + text: '1.0.0.0', + link: '/en/updatelog/final/1/1000', + }, + ], + }, + ], + }, + { + text: 'Preview', + collapsed: true, + items: [ + { + text: 'v3.x.x.x', + collapsed: true, + items: [ + { + text: '3.3.0.23alpha6', + link: '/en/updatelog/beta/3/33023a6', + }, + { + text: '3.3.0.23alpha5', + link: '/en/updatelog/beta/3/33023a5', + }, + { + text: '3.3.0.23alpha4', + link: '/en/updatelog/beta/3/33022a4', + }, + { + text: '3.3.0.23alpha2', + link: '/en/updatelog/beta/3/32120a2', + }, + { + text: '3.3.0.23alpha1', + link: '/en/updatelog/beta/3/32120a1', + }, + { + text: '3.2.0.19rc3', + link: '/en/updatelog/beta/3/32019rc3', + }, + { + text: '3.2.0.19rc2', + link: '/en/updatelog/beta/3/32019rc2', + }, + { + text: '3.2.0.19rc1', + link: '/en/updatelog/beta/3/32019rc1', + }, + { + text: '3.2.0.19beta11', + link: '/en/updatelog/beta/3/32019b11', + }, + { + text: '3.2.0.19beta10', + link: '/en/updatelog/beta/3/32019b10', + }, + { + text: '3.2.0.19beta9', + link: '/en/updatelog/beta/3/32019b9', + }, + { + text: '3.2.0.18beta8', + link: '/en/updatelog/beta/3/32018b8', + }, + { + text: '3.2.0.18beta5', + link: '/en/updatelog/beta/3/32018b5', + }, + { + text: '3.2.0.18beta4', + link: '/en/updatelog/beta/3/32018b4', + }, + { + text: '3.1.2.17beta3', + link: '/en/updatelog/beta/3/31217b3', + }, + { + text: '3.1.2.17beta1', + link: '/en/updatelog/beta/3/31217b1', + }, + { + text: '3.1.0.15beta3', + link: '/en/updatelog/beta/3/31015b3', + }, + { + text: '3.1.0.15beta2', + link: '/en/updatelog/beta/3/31015b2', + }, + { + text: '3.1.0.15beta1', + link: '/en/updatelog/beta/3/31015b1', + }, + { + text: '3.1.0.15.dev0', + link: '/en/updatelog/beta/3/31015dev0', + }, + { + text: '3.0.2.13rc1', + link: '/en/updatelog/beta/3/30213rc1', + }, + { + text: '3.0.1.12rc1', + link: '/en/updatelog/beta/3/30112rc1', + }, + { + text: '3.0.0.11rc1', + link: '/en/updatelog/beta/3/30011rc1', + }, + { + text: '3.0.0.11alpha3', + link: '/en/updatelog/beta/3/30011a3', + }, + { + text: '3.0.0.11alpha2', + link: '/en/updatelog/beta/3/30011a2', + }, + { + text: '3.0.0.11alpha1', + link: '/en/updatelog/beta/3/30011a1', + }, + { + text: '3.0.0.11.dev4', + link: '/en/updatelog/beta/3/30011dev4', + }, + { + text: '3.0.0.11.dev3', + link: '/en/updatelog/beta/3/30011dev3', + }, + { + text: '3.0.0.11.dev1', + link: '/en/updatelog/beta/3/30011dev1', + }, + ], + }, + ], + }, + ], + }, + ], + '/en/features/': [ + { + text: 'Features', + items: [ + { + text: 'Introduction', + link: '/en/features/', + }, + { + text: 'Clean cache', + link: '/en/features/cleancache', + }, + { + text: 'Settings', + link: '/en/features/settings', + }, + { + text: 'Update', + link: '/en/features/update', + }, + { + text: 'Help', + link: '/en/features/help', + }, + { + text: 'clickclean', + link: '/en/features/clickclean', + }, + { + text: 'Extensions', + collapsed: true, + items: [{ text: 'Introducing', link: '/en/features/extensions' }, { text: 'Repair', link: '/en/features/extensions/repair' }], + }, + ], + }, + ], + '/en/develop': [ + { + text: 'Developers', + items: [ + { + text: 'Introduction', + link: '/en/develop/index', + }, + { + text: 'Dependencies', + link: '/en/develop/dependencies', + }, + { + text: 'Clickmouse library usage', + collapsed: true, + items: [ + { + text: 'Introduction', + link: '/en/develop/clicker/index', + }, + { + text: 'Calling using Python/pyd', + link: '/en/develop/clicker/python', + }, + { + text: 'Calling using C++/dll', + link: '/en/develop/clicker/cpp', + } + ], + }, + { + text: 'Contributing', + collapsed: true, + items: [ + { + text: 'Contributing clickmouse', + link: '/en/develop/contributing/github', + }, + { + text: 'Configuration development environment', + link: '/en/develop/contributing/configuration', + }, + { + text: 'Documentation development', + link: '/en/develop/contributing/doc', + }, + { + text: 'Issue template', + link: '/en/develop/contributing/issue_template' + }, + { + text: 'Security policy', + link: '/en/develop/contributing/security' + }, + { + text: 'License', + link: '/en/develop/contributing/license' + } + ], + }, + ], + }, + ], + }, + nav: [ + { text: 'Home', link: '/en/' }, + { text: 'Guide', link: '/en/guide/' }, + { text: 'Features', link: '/en/features/' }, + { text: 'Update log', link: '/en/updatelog/' }, + { text: 'Developers', link: '/en/develop/'} + ], + returnToTopLabel: 'Return to top', + }, + }, + 'zh-CN': { + label: '简体中文', + description: '基于 vitepress 搭建的 Clickmouse 文档', + title: 'Clickmouse 文档 | VitePress', + link: '/zh-CN/', + lang: 'zh-CN', + themeConfig: { + siteTitle: 'Clickmouse 文档', + returnToTopLabel: '返回顶部', + outlineTitle: '本页目录', + lastUpdatedText: '最后更新', + sidebarMenuLabel: '目录', + editLink: { + pattern: + 'https://github.com/xystudiocode/pyClickMouse/tree/main/documents/:path', + text: '编辑此页', + }, + notFound: { + title: '页面不存在', + quote: '只要不改变你的方向,一直寻找,最终会找到你所寻找的目标', + linkText: '返回首页', + }, + // 配置主题 + lightModeSwitchTitle: '切换到浅色模式', + darkModeSwitchTitle: '切换到深色模式', + darkModeSwitchLabel: '主题', + // 社交链接 + socialLinks: [ + { icon: 'github', link: 'https://github.com/xystudiocode/pyClickMouse'}, + { icon: 'gitee', link: 'https://gitee.com/xystudio889/pyClickMouse' }, + ], + nav: [ + { text: '首页', link: '/zh-CN/' }, + { text: '指南', link: '/zh-CN/guide/' }, + { text: '功能', link: '/zh-CN/features/' }, + { text: '更新日志', link: '/zh-CN/updatelog/' }, + { text: '开发者', link: '/zh-CN/develop/' } + ], + docFooter: { + prev: '上一页', + next: '下一页', + }, + footer: { + message: '本软件使用MIT协议开源', + copyright: '© 2025-现在 xystudio版权所有', + }, + sidebar: { + '/zh-CN/guide/': [ + { + text: '指南', + items: [ + { text: '介绍', link: '/zh-CN/guide/' }, + { text: '开始使用', link: '/zh-CN/guide/getting-started' }, + { text: 'FAQ', link: '/zh-CN/guide/faq',}, + { text: '版本命名', link: '/zh-CN/guide/version-naming',}, + { text: '用户协议', link: '/zh-CN/guide/license',}, + ], + }, + ], + '/zh-CN/updatelog/': [ + { + text: '发行日志', + items: [ + { + text: '正式版', + collapsed: true, + items: [ + { + text: 'v3.x.x.x', + collapsed: true, + items: [ + { + text: '3.2.3.22', + link: '/zh-CN/updatelog/final/3/32322', + }, + { + text: '3.2.2.21', + link: '/zh-CN/updatelog/final/3/32221', + }, + { + text: '3.2.1.20', + link: '/zh-CN/updatelog/final/3/32120' + }, + { + text: '3.2.0.19', + link: '/zh-CN/updatelog/final/3/32019', + }, + { + text: '3.1.3.18', + link: '/zh-CN/updatelog/final/3/31318', + }, + { + text: '3.1.2.17', + link: '/zh-CN/updatelog/final/3/31217', + }, + { + text: '3.1.1.16', + link: '/zh-CN/updatelog/final/3/31116', + }, + { + text: '3.1.0.15', + link: '/zh-CN/updatelog/final/3/31015', + }, + { + text: '3.0.3.14', + link: '/zh-CN/updatelog/final/3/30314', + }, + { + text: '3.0.2.13', + link: '/zh-CN/updatelog/final/3/30213', + }, + { + text: '3.0.1.12', + link: '/zh-CN/updatelog/final/3/30112', + }, + { + text: '3.0.0.11', + link: '/zh-CN/updatelog/final/3/30011', + }, + ], + }, + { + text: 'v2.x.x.x', + collapsed: true, + items: [ + { + text: '2.2.3.10', + link: '/zh-CN/updatelog/final/2/22310', + }, + { + text: '2.2.2.9', + link: '/zh-CN/updatelog/final/2/2229', + }, + { + text: '2.2.1.8', + link: '/zh-CN/updatelog/final/2/2218', + }, + { + text: '2.2.0.7', + link: '/zh-CN/updatelog/final/2/2207', + }, + { + text: '2.1.1.6', + link: '/zh-CN/updatelog/final/2/2116', + }, + { + text: '2.1.0.5', + link: '/zh-CN/updatelog/final/2/2105', + }, + { + text: '2.0.0.4', + link: '/zh-CN/updatelog/final/2/2004', + }, + ], + }, + { + text: 'v1.x.x.x', + collapsed: true, + items: [ + { + text: '1.0.2.3', + link: '/zh-CN/updatelog/final/1/1023', + }, + { + text: '1.0.2.2', + link: '/zh-CN/updatelog/final/1/1022', + }, + { + text: '1.0.1.1', + link: '/zh-CN/updatelog/final/1/1011', + }, + { + text: '1.0.0.0', + link: '/zh-CN/updatelog/final/1/1000', + }, + ], + }, + ], + }, + { + text: '预览版', + collapsed: true, + items: [ + { + text: 'v3.x.x.x', + collapsed: true, + items: [ + { + text: '3.3.0.23alpha6', + link: '/zh-CN/updatelog/beta/3/33023a6', + }, + { + text: '3.3.0.23alpha5', + link: '/zh-CN/updatelog/beta/3/33023a5', + }, + { + text: '3.3.0.22alpha4', + link: '/zh-CN/updatelog/beta/3/33022a4', + }, + { + text: '3.2.1.20alpha2', + link: '/zh-CN/updatelog/beta/3/32120a2', + }, + { + text: '3.2.1.20alpha1', + link: '/zh-CN/updatelog/beta/3/32120a1', + }, + { + text: '3.2.0.19rc3', + link: '/zh-CN/updatelog/beta/3/32019rc3', + }, + { + text: '3.2.0.19rc2', + link: '/zh-CN/updatelog/beta/3/32019rc2', + }, + { + text: '3.2.0.19rc1', + link: '/zh-CN/updatelog/beta/3/32019rc1', + }, + { + text: '3.2.0.19beta11', + link: '/zh-CN/updatelog/beta/3/32019b11', + }, + { + text: '3.2.0.19beta10', + link: '/zh-CN/updatelog/beta/3/32019b10', + }, + { + text: '3.2.0.19beta9', + link: '/zh-CN/updatelog/beta/3/32019b9', + }, + { + text: '3.2.0.18beta8', + link: '/zh-CN/updatelog/beta/3/32018b8', + }, + { + text: '3.2.0.18beta5', + link: '/zh-CN/updatelog/beta/3/32018b5', + }, + { + text: '3.2.0.18beta4', + link: '/zh-CN/updatelog/beta/3/32018b4', + }, + { + text: '3.1.2.17beta3', + link: '/zh-CN/updatelog/beta/3/31217b3', + }, + { + text: '3.1.2.17beta1', + link: '/zh-CN/updatelog/beta/3/31217b1', + }, + { + text: '3.1.0.15beta3', + link: '/zh-CN/updatelog/beta/3/31015b3', + }, + { + text: '3.1.0.15beta2', + link: '/zh-CN/updatelog/beta/3/31015b2', + }, + { + text: '3.1.0.15beta1', + link: '/zh-CN/updatelog/beta/3/31015b1', + }, + { + text: '3.1.0.15.dev0', + link: '/zh-CN/updatelog/beta/3/31015dev0', + }, + { + text: '3.0.2.13rc1', + link: '/zh-CN/updatelog/beta/3/30213rc1', + }, + { + text: '3.0.1.12rc1', + link: '/zh-CN/updatelog/beta/3/30112rc1', + }, + { + text: '3.0.0.11rc1', + link: '/zh-CN/updatelog/beta/3/30011rc1', + }, + { + text: '3.0.0.11alpha3', + link: '/zh-CN/updatelog/beta/3/30011a3', + }, + { + text: '3.0.0.11alpha2', + link: '/zh-CN/updatelog/beta/3/30011a2', + }, + { + text: '3.0.0.11alpha1', + link: '/zh-CN/updatelog/beta/3/30011a1', + }, + { + text: '3.0.0.11.dev4', + link: '/zh-CN/updatelog/beta/3/30011dev4', + }, + { + text: '3.0.0.11.dev3', + link: '/zh-CN/updatelog/beta/3/30011dev3', + }, + { + text: '3.0.0.11.dev1', + link: '/zh-CN/updatelog/beta/3/30011dev1', + }, + ], + }, + ], + }, + ], + }, + ], + '/zh-CN/features/': [ + { + text: '功能', + items: [ + { + text: '介绍', + link: '/zh-CN/features/', + }, + { + text: '清理缓存', + link: '/zh-CN/features/cleancache', + }, + { + text: '设置', + link: '/zh-CN/features/settings', + }, + { + text: '更新', + link: '/zh-CN/features/update', + }, + { + text: '帮助', + link: '/zh-CN/features/help', + }, + { + text: 'clickclean', + link: '/zh-CN/features/clickclean', + }, + { + text: '扩展', + collapsed: true, + items: [{ text: '介绍', link: '/zh-CN/features/extensions' }], + }, + ], + }, + ], + '/zh-CN/develop': [ + { + text: '开发人员', + items: [ + { + text: '介绍', + link: '/zh-CN/develop/index', + }, + { + text: '依赖', + link: '/zh-CN/develop/dependencies', + }, + { + text: 'clickmouse库调用', + collapsed: true, + items: [ + { + text: '介绍', + link: '/zh-CN/develop/clicker/index', + }, + { + text: '基于python/pyd的调用', + link: '/zh-CN/develop/clicker/python', + }, + { + text: '基于C++/dll的调用', + link: '/zh-CN/develop/clicker/cpp', + } + ], + }, + { + text: '参与协作', + collapsed: true, + items: [ + { + text: '协作clickmouse', + link: '/zh-CN/develop/contributing/github', + }, + { + text: '配置开发环境', + link: '/zh-CN/develop/contributing/configuration', + }, + { + text: '文档协作', + link: '/zh-CN/develop/contributing/doc', + }, + { + text: 'issue 模板', + link: '/zh-CN/develop/contributing/issue_template' + },{ + text: '安全报告', + link: '/zh-CN/develop/contributing/security' + }, + { + text: '软件协议', + link: '/zh-CN/develop/contributing/license' + } + ], + }, + ], + }, + ], + }, + }, + }, + }, +}); diff --git a/documents/.vitepress/theme/components/alert.css b/documents/.vitepress/theme/components/alert.css new file mode 100644 index 00000000..660f2b04 --- /dev/null +++ b/documents/.vitepress/theme/components/alert.css @@ -0,0 +1,35 @@ +.md-tip { + display: block; + unicode-bidi: isolate; + padding: .5rem 1rem; + margin-bottom: .5rem; + margin-top: 1rem; + color: inherit; + border-left: 3px solid var(--color, #555); +} + +.md-title { + font-weight: 600; + align-items: center; + line-height: 1; + display: flex; + color: var(--color, #555); + margin-top: 0; +} + +svg { + margin-right: .5rem; +} + +.svg-alert { + vertical-align: text-bottom; + display: inline-block; + overflow: visible; + fill: var(--color, #555); +} + +.text { + line-height: 1.5; + margin-bottom: 0; + margin-top: 0; +} \ No newline at end of file diff --git a/documents/.vitepress/theme/components/alert.vue b/documents/.vitepress/theme/components/alert.vue new file mode 100644 index 00000000..d6145817 --- /dev/null +++ b/documents/.vitepress/theme/components/alert.vue @@ -0,0 +1,65 @@ + +
++ + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/caution.vue b/documents/.vitepress/theme/components/caution.vue new file mode 100644 index 00000000..2099558a --- /dev/null +++ b/documents/.vitepress/theme/components/caution.vue @@ -0,0 +1,25 @@ + ++ + {{ title }} +
++
+ + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/choiceBox.vue b/documents/.vitepress/theme/components/choiceBox.vue new file mode 100644 index 00000000..d70fb9f6 --- /dev/null +++ b/documents/.vitepress/theme/components/choiceBox.vue @@ -0,0 +1,495 @@ + ++ + + ++ + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/ginput.vue b/documents/.vitepress/theme/components/ginput.vue new file mode 100644 index 00000000..c422deff --- /dev/null +++ b/documents/.vitepress/theme/components/ginput.vue @@ -0,0 +1,53 @@ + + + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/important.vue b/documents/.vitepress/theme/components/important.vue new file mode 100644 index 00000000..d9535fe6 --- /dev/null +++ b/documents/.vitepress/theme/components/important.vue @@ -0,0 +1,25 @@ + ++
+- + + + + {{ opt.label }} +
++ + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/info.vue b/documents/.vitepress/theme/components/info.vue new file mode 100644 index 00000000..1041dfa2 --- /dev/null +++ b/documents/.vitepress/theme/components/info.vue @@ -0,0 +1,27 @@ + ++ + + + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/mdinput.vue b/documents/.vitepress/theme/components/mdinput.vue new file mode 100644 index 00000000..df55b174 --- /dev/null +++ b/documents/.vitepress/theme/components/mdinput.vue @@ -0,0 +1,1456 @@ + ++ + + + + + +++ ++ + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/note.vue b/documents/.vitepress/theme/components/note.vue new file mode 100644 index 00000000..4adae87e --- /dev/null +++ b/documents/.vitepress/theme/components/note.vue @@ -0,0 +1,25 @@ + ++ + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/strongCard.vue b/documents/.vitepress/theme/components/strongCard.vue new file mode 100644 index 00000000..cb13df7a --- /dev/null +++ b/documents/.vitepress/theme/components/strongCard.vue @@ -0,0 +1,678 @@ + ++ ++ + + + + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/subtitle.vue b/documents/.vitepress/theme/components/subtitle.vue new file mode 100644 index 00000000..d56f9776 --- /dev/null +++ b/documents/.vitepress/theme/components/subtitle.vue @@ -0,0 +1,64 @@ + + ++ + ++ + ++ + {{ LangPack.Assignee ?? 'Assignee' }} +++ {{ LangPack.LabelDesc ?? 'Label' }} + + {{ LangPack.Label ?? 'None' }} +++ {{ LangPack.TypeDesc ?? 'Label' }} + + {{ LangPack.Type ?? 'None' }} +++ + {{ LangPack.Priority ?? 'Priority' }} +++ + {{ LangPack.StartDate ?? 'Start date' }} +++ + {{ LangPack.TargetDate ?? 'Target date' }} +++ + {{ LangPack.Effort ?? 'Effort' }} ++ ++ + {{ LangPack.Project ?? 'Project' }} +++ + {{ LangPack.Milestone ?? 'Milestone' }} +++ * + + {{ desc }}
+ + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/tip.vue b/documents/.vitepress/theme/components/tip.vue new file mode 100644 index 00000000..6d33f0f9 --- /dev/null +++ b/documents/.vitepress/theme/components/tip.vue @@ -0,0 +1,25 @@ + ++ + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/components/warning.vue b/documents/.vitepress/theme/components/warning.vue new file mode 100644 index 00000000..f3b01dcc --- /dev/null +++ b/documents/.vitepress/theme/components/warning.vue @@ -0,0 +1,25 @@ + ++ + + + + + + \ No newline at end of file diff --git a/documents/.vitepress/theme/custom.css b/documents/.vitepress/theme/custom.css new file mode 100644 index 00000000..a7a95b07 --- /dev/null +++ b/documents/.vitepress/theme/custom.css @@ -0,0 +1,165 @@ +/* 梦幻色系 */ +:root { + --dream-color-blue-1: #4b83fc; + --dream-color-blue-2: #4f52f4; + --dream-color-blue-3: #3bbaf9; + --dream-color-blue-soft: rgba(63, 87, 244, 0.3); + + --dream-color-cyan-1: #1fb4b2; + --dream-color-cyan-2: #0b90d2; + --dream-color-cyan-3: #51d1cf; + --dream-color-cyan-soft: rgba(13, 157, 154, 0.3); + + --dream-color-gray-1: #808080; + --dream-color-gray-2: #666666; + --dream-color-gray-3: #404040; + --dream-color-gray-soft: rgba(48, 48, 48, 0.3); + + --dream-color-white-1: #ffffff; + --dream-color-white-2: #fafafa; + --dream-color-white-3: #f2f2f2; + --dream-color-white-soft: rgba(247, 247, 247, 0.3); + + --dream-color-lightgray-1: #e0e0e0; + --dream-color-lightgray-2: #c6c6c6; + --dream-color-lightgray-3: #a5a5a5; + --dream-color-lightgray-soft: rgba(204, 204, 204, 0.3); + + --dream-color-black-1: #000000; + --dream-color-black-2: #202020; + --dream-color-black-3: #383838; + --dream-color-black-soft: #2d2d2d4d; + + --dream-color-darkgray-1: #202020; + --dream-color-darkgray-2: #2d2d2d; + --dream-color-darkgray-3: #383838; + --dream-color-darkgray-soft: #2020204d; + + --dream-color-green-1: #19c541; + --dream-color-green-2: #3eeb9d; + --dream-color-green-3: #95f472; + --dream-color-green-soft: rgba(59, 196, 111, 0.3); + + --drean-color-dodgerblue-1: #1e5184; + --dream-color-dogerblue-2: #1a90e4; + --dream-color-dogerblue-3: #7979ef; + --drean-color-dodgerblue-soft: rgba(38, 153, 235, 0.3); + + --drean-color-pink-1: #662a7b; + --drean-color-pink-2: #cf7bcf; + --drean-color-pink-3: #e361e6; + --drean-color-pink-soft: rgba(175, 119, 196, 0.3); + + --dream-color-purple-1: #612778; + --dream-color-purple-2: #9a52f6; + --dream-color-purple-3: #944cbb; + --dream-color-purple-soft: rgba(112, 66, 204, 0.3); + + --dream-color-yellow-1: #9b9917; + --dream-color-yellow-2: #eccb11; + --dream-color-yellow-3: #fcba05; + --dream-color-yellow-soft: rgba(236, 209, 12, 0.3); + + --dream-color-orange-1: #a06f2a; + --dream-color-orange-2: #ed6904; + --dream-color-orange-3: #dfa252; + --dream-color-orange-soft: rgba(238, 148, 14, 0.3); + + --dream-color-red-1: #751818; + --dream-color-red-2: #ec2c6c; + --dream-color-red-3: #e91505; + --dream-color-red-soft: rgba(239, 11, 34, 0.3); +} + +/* 浅色主题变量 */ +:root { + /* 背景色 */ + --vp-c-bg: var(--dream-color-white-1); + --vp-c-bg-alt: var(--dream-color-white-3); + --vp-c-bg-elv: var(--dream-color-white-1); + --vp-c-bg-soft: var(--dream-color-white-2); + + /* 文字色 */ + --vp-c-text-1: var(--dream-color-black-1); + --vp-c-text-2: var(--dream-color-black-2); + --vp-c-text-3: var(--dream-color-black-3); + + /* 品牌色 */ + --vp-c-brand-1: var(--dream-color-cyan-1); + --vp-c-brand-2: var(--dream-color-cyan-2); + --vp-c-brand-3: var(--dream-color-cyan-3); + --vp-c-brand-soft: var(--dream-color-cyan-soft); + + /* 边框 */ + --vp-c-border: var(--dream-color-white-3); + --vp-c-divider: var(--dream-color-lightgray-3); + --vp-c-gutter: var(--dream-color-white-3); + + --vp-c-tip-1: var(--dream-color-black-1); + --vp-c-tip-2: var(--dream-color-green-2); + --vp-c-tip-3: var(--dream-color-green-3); + --vp-c-tip-soft: var(--dream-color-green-soft); + + --vp-c-note-1: var(--dream-color-black-1); + --vp-c-note-2: var(--dream-color-dodgerblue-2); + --vp-c-note-3: var(--dream-color-dodgerblue-3); + --vp-c-note-soft: var(--drean-color-dodgerblue-soft); + + --vp-c-success-1: var(--dream-color-black-1); + --vp-c-success-2: var(--dream-color-pink-2); + --vp-c-success-3: var(--dream-color-pink-3); + --vp-c-success-soft: var(--drean-color-pink-soft); + + --vp-c-important-1: var(--dream-color-black-1); + --vp-c-important-2: var(--dream-color-purple-2); + --vp-c-important-3: var(--dream-color-purple-3); + --vp-c-important-soft: var(--dream-color-purple-soft); + + --vp-c-warning-1: var(--dream-color-black-1); + --vp-c-warning-2: var(--dream-color-yellow-2); + --vp-c-warning-3: var(--dream-color-yellow-3); + --vp-c-warning-soft: var(--dream-color-yellow-soft); + + --vp-c-danger-1: var(--dream-color-black-1); + --vp-c-danger-2: var(--dream-color-orange-2); + --vp-c-danger-3: var(--dream-color-orange-3); + --vp-c-danger-soft: var(--dream-color-orange-soft); + + --vp-c-caution-1: var(--dream-color-black-1); + --vp-c-caution-2: var(--dream-color-red-2); + --vp-c-caution-3: var(--dream-color-red-3); + --vp-c-caution-soft: var(--dream-color-red-soft); +} + +/* 深色主题变量 */ +.dark { + /* 背景色 */ + --vp-c-bg: var(--dream-color-darkgray-1); + --vp-c-bg-alt: var(--dream-color-darkgray-2); + --vp-c-bg-elv: var(--dream-color-darkgray-3); + --vp-c-bg-soft: var(--dream-color-darkgray-2); + + /* 文字色 */ + --vp-c-text-1: var(--dream-color-white-1); + --vp-c-text-2: var(--dream-color-gray-1); + --vp-c-text-3: var(--dream-color-lightgray-3); + + /* 品牌色 */ + --vp-c-brand-1: var(--dream-color-blue-1); + --vp-c-brand-2: var(--dream-color-blue-2); + --vp-c-brand-3: var(--dream-color-blue-3); + --vp-c-brand-soft: var(--dream-color-blue-soft); + + /* 边框 */ + --vp-c-border: var(--dream-color-gray-3); + --vp-c-divider: var(--dream-color-gray-1); + --vp-c-gutter: var(--dream-color-gray-2); + + --vp-c-tip-1: var(--dream-color-white-1); + --vp-c-note-1: var(--dream-color-white-1); + --vp-c-success-1: var(--dream-color-white-1); + --vp-c-important-1: var(--dream-color-white-1); + --vp-c-warning-1: var(--dream-color-white-1); + --vp-c-danger-1: var(--dream-color-white-1); + --vp-c-caution-1: var(--dream-color-white-1); +} \ No newline at end of file diff --git a/documents/.vitepress/theme/index.js b/documents/.vitepress/theme/index.js new file mode 100644 index 00000000..f0dda4e7 --- /dev/null +++ b/documents/.vitepress/theme/index.js @@ -0,0 +1,6 @@ +import DefaultTheme from 'vitepress/theme'; +import './custom.css'; + +export default { + ...DefaultTheme +}; diff --git a/documents/agents.md b/documents/agents.md new file mode 100644 index 00000000..bcfce2ca --- /dev/null +++ b/documents/agents.md @@ -0,0 +1,16 @@ +# agent对话模板 +## 需求 +需要把zh-CN下的所有markdown文件翻译成英语,并输出到en文件夹下。 + +如果文件内容有图片。并且图片路径有zh-CN,则把这个图片的zh-CN替换为en,并保持原文件夹结构。 + +## 条件 +- 不能把zh-CN文件夹替换掉,需要保留原文件夹;也不能修改zh-CN文件夹的内容 +- 我的中文文档不会有错误,如果有疑似错误,也不要修正后翻译,按照原文翻译。 +- 如果en文件夹已存在,则清空该文件夹后再写入。 +- 不要翻译已经是英文的内容(如产品名,网址等)。 +- 翻译的英文要符合语法。 +- 翻译不能修改文档的结构,需要和zh-CN的格式一致。 +- 注释不用翻译。 +- 必须翻译所有的内容,不能只翻译部分内容。 +- 不能动其他配置文件 \ No newline at end of file diff --git a/documents/en/blog/decoupling-code-and-ui.md b/documents/en/blog/decoupling-code-and-ui.md new file mode 100644 index 00000000..c451af85 --- /dev/null +++ b/documents/en/blog/decoupling-code-and-ui.md @@ -0,0 +1,59 @@ +--- +title: Decoupling code and ui +layout: doc +--- + +# Decoupling UI and program + +## Background + +- To increase extensibility, users can import other player's gui files. +- To reduce code redundancy. + +## Result + +Move all ui control code to `res/ui/` directory, so that other player's gui files can be imported to extend the functionality. + +Make the source code a code library, and modify the operation through the `name` component attribute. + +## Format + +The `gui` file is in json format, like: + +```json +{ + "name": "layout", + "value": { + "direction": "h", + "content": [ + { + "name": "button", + "value": { + "type": "QPushButton", + "args": ["hello"], + "style": "selected", + "init_steps": { "setFixedHeight": [30], "setFixedWidth": [100] } + } + }, + { + "name": "label", + "value": { + "type": "QLabel", + "args": ["world"], + "style": "big_text_16", + "init_steps": { "setFixedHeight": [30], "setFixedWidth": [100] } + } + } + ] + } +} +``` + +## Enable method + ++ +Open the main program settings, find `Labs`, check `Decoupling UI and program`, restart the program. \ No newline at end of file diff --git a/documents/en/develop/clicker/cpp.md b/documents/en/develop/clicker/cpp.md new file mode 100644 index 00000000..df400525 --- /dev/null +++ b/documents/en/develop/clicker/cpp.md @@ -0,0 +1,75 @@ +--- +title: Python/pyd calling +description: Introduction to how to use Python to call pyd files. +layout: doc +--- + + + +# header/dll calling + +This article introduces how to use Python to call pyd files. + +## Download + +Go to [github releases](https://github.com/xystudiocode/pyClickMouse/releases), find latest version with .h or dll version files. + +Minimum required clickmouse version
++Clickmouse beta, >=3.3.0.23alpha5 +
++In the following text, + +## Function Library + +`ClickMouse` function: +- Definition: +```cpp +CLICKMOUSE_CLASS ClickMouse( + unsinged int MouseButton, + unsigned int delay, + unsigned int pressTime, + int times = 1 +) +``` +- Parameters: +- - MouseButton: Pressed key, optional `LEFT` or `RIGHT` +- - delay: Click delay +- - time: Click count, default is 1 time, if `INFINITE` then infinite + +`LeftClick` function: +```cpp +CLICKMOUSE_CLASS LeftClick( + int times = 1, + unsigned int delay, + unsigned int pressTime +) +``` +Equivalent to `ClickMouse(LEFT, delay, pressTime, times)` + +`RightClick` function: +```cpp +CLICKMOUSE_CLASS RightClick( + int times = 1, + unsigned int delay, + unsigned int pressTime +) +``` +Equivalent to `ClickMouse(RIGHT, delay, pressTime, times)` + +## Example +```cpp +#includeCLICKMOUSE_CLASSin dll refers toint, in header calling refers tovoid. ++#include +using namespace std; + +int main(){ + cout << CLICKMOUSE_VERSION << endl; // Print version information, if successfully output a string of numbers, then installation successful + clickMouse(LEFT, 1000, 10, 10); // Click left button 10 times, interval 1000ms, press time 10ms + return 0; +} +``` +## Usage Priority +```mermaid +graph LR +C[C/C++] --> E[dll calling] --> D[command line calling] \ No newline at end of file diff --git a/documents/en/develop/clicker/index.md b/documents/en/develop/clicker/index.md new file mode 100644 index 00000000..322765f5 --- /dev/null +++ b/documents/en/develop/clicker/index.md @@ -0,0 +1,30 @@ +--- +title: clickmouse Clicker Introduction +description: Introduction to ClickMouse clicker +layout: doc +--- + +# Introduction + +clickmouse library is an open source mouse control library, can perform mouse click operations. + +## clickmouse library + +clickmouse library is a library for controlling mouse, can simulate mouse click operations. + +Select documentation on the right for reference. + +## Calling Methods +Calling methods include: +- ✅ C/C++ header file calling Using original C++ version clickMouse modified Fastest speed, best compatibility, but highest possibility of usage failure. Can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- ✅ Using original C++ version clickMouse Fastest speed, best compatibility, but highest possibility of usage failure, already stopped updating, can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases), [previous clickmouse project](https://github.com/xystudio889/ClickMouse) +- ✅ Using .dll calling Based on C++ language, fastest speed, better compatibility, highest possibility of usage failure. (Configuration more difficult, recommend using C/C++ header files) Can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- ✅ (Developer recommended) python calling Medium speed, best compatibility, lowest possibility of usage failure. Can use `pip install clickmouse` to download +- ✅ Using .pyd calling Based on python language, faster speed, poorer compatibility (different python versions may not be compatible), lower possibility of usage failure. Can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) (separate compilation only needs to compile cython/ directory) +- ❌ Using standard command line Based on python language. ~~Will be included in GUI version and pip installation version~~ Temporarily no such version, please stay tuned + +## Usage Priority +```mermaid +graph LR +A[python] --> B[pyd calling] --> D[command line calling] +C[C/C++] --> E[dll calling] --> D \ No newline at end of file diff --git a/documents/en/develop/clicker/python.md b/documents/en/develop/clicker/python.md new file mode 100644 index 00000000..a4355982 --- /dev/null +++ b/documents/en/develop/clicker/python.md @@ -0,0 +1,67 @@ +--- +title: Python/pyd calling +description: Introduction to how to use Python to call pyd files. +layout: doc +--- + + + +# Python/pyd calling + +This article introduces how to use Python to call pyd files. + +## Download + +### Library +Run `pip install clickmouse`, wait for download to complete + + +If you are in China, `pip` speed is slow, you can enter: + + + +```bash +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple clickmouse +``` + +### pyd +Go to [github releases](https://github.com/xystudiocode/pyClickMouse/releases), find latest version with pyd version files. + +::: warning Note +Please ensure downloading pyd files. + +pyd files need to match python version, for example Python3.7 needs to download version with `cp37`. + +free threaded version pyd files download needs to include t, such as 3.14t needs to download version with `cp314t`. +::: + +## Function Library + +`click_mouse` function: +- Definition: +```python +def click_mouse( + button: Literal['left', 'right'], + delay: int, + time: int=1) -> None: +``` +- Parameters: +- - button: Pressed key, optional `clickmouse.LEFT` or `clickmouse.RIGHT` +- - delay: Click delay +- - time: Click count, default is 1 time, if `clickmouse.INFINITE` then infinite + +## Example + +```python +import clickmouse + +clickMouse.click_mouse(clickmouse.LEFT, 1000, 10, 10) # Click left button 10 times, interval 1000ms, press interval 10ms +``` + +## Usage Priority +```mermaid +graph LR +A[python] --> B[pyd calling] --> D[command line calling] \ No newline at end of file diff --git a/documents/en/develop/contributing/Configuration.md b/documents/en/develop/contributing/Configuration.md new file mode 100644 index 00000000..0b6ba453 --- /dev/null +++ b/documents/en/develop/contributing/Configuration.md @@ -0,0 +1,47 @@ +--- +title: Configuring Repository +description: Introduction to how to configure repository +layout: doc +--- + +# Configuring Repository +1. Download repository: `git clone https://github.com/xystudiocode/pyClickMouse.git` +2. For python version install python, recommend using 3.13, consistent with software developer's version, [download link](https://www.python.org/downloads/release/python-31312/) +3. For header files and dll version, can install [visual studio](https://visualstudio.microsoft.com/). +## GUI Version +1. Download source code +2. Place a `7z.exe` and `7z.dll` in `gui` directory +3. Install chocolately +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +``` +4. Install make tool +```powershell +choco install make +``` +5. Configure python packages +```powershell +pip install -r requirements.txt +``` +6. Compile +```powershell +make clickmouse # compile clickmouse +make extension # compile extension +make clickclean # if you want to make clean version, please run this command +``` +7. Run `dist/clickmouse/main.exe` to load clickmouse. +## Header Files +Only need to modify header files, can be called +## dll Calling +Use visual studio modify `./dll/dll.sln` inside `source files/dllmain.cpp` +## GUI Old Version ++pip install -i https://pypi.tuna.tsinghua.edu.cn/simple clickmouseGUI old version recompilation does not accept pull request +Use visual studio modify `./ClickMouse-old/ClickMouse.sln` inside `source files/clickmouse.cpp` +## python Library Calling +Modify code under `clickmouse/`, run `pip install .` to install +## pyd Calling +Modify code of `cython/main.py`, then execute +```python cython/setup.py build_ext --inplace``` +After compilation ends, there should be a file ending with `.pyd` in this directory. \ No newline at end of file diff --git a/documents/en/develop/contributing/SECURITY.md b/documents/en/develop/contributing/SECURITY.md new file mode 100644 index 00000000..ebf862ff --- /dev/null +++ b/documents/en/develop/contributing/SECURITY.md @@ -0,0 +1,29 @@ +# Security Policy + +## How to report a vulnerability + +Commit a GitHub security to report a vulnerability. Provide detailed information about the affected range, trigger condition, and vulnerability details. + +## Security Policy + +```markdown +# Security Policy + +## Supported Versions + +clickmouse >= **version** + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. + +## How to fix +> [!TIP] +> This section is optional. + +If the vulnerability is accepted, provide information on how to fix the vulnerability. +``` \ No newline at end of file diff --git a/documents/en/develop/contributing/doc.md b/documents/en/develop/contributing/doc.md new file mode 100644 index 00000000..39387ad4 --- /dev/null +++ b/documents/en/develop/contributing/doc.md @@ -0,0 +1,136 @@ +--- +title: Participating in Documentation Collaboration +description: Introduction to how to participate in documentation collaboration +layout: doc +--- + +# Documentation Collaboration ++commit message etc. content not repeated, please check Collaboration Documentation + + +## Reasons for Modifying Content +If actual functionality does not match documentation description, please modify documentation description, not modify code. + +::: warning Note +Cannot modify code, only can modify content, and need to ensure modified content matches actual. +::: + +Also can be you want to modify typos, add new description + +Or documentation not updated in time, but this way you suggest first submit an issue. + +## Modification Methods +If you only want to modify one document, you can directly click `Edit this page` below document page to modify + +But if you want to modify many documents, you need to download repository then modify. + +::: warning Note +If want to modify content, need to submit PR not directly merge. +::: + +### Local Configuration +#### Install Environment +First you need to install git, Chinese users open [this link]`https://cn-git.com/`, foreign users please search yourself. +You also need to install nodejs, open [this link](https://nodejs.org/) + +#### Configure npm +npm is Node.js package management tool, we need to configure npm to use it. +##### Create Folders +Open your Node.js installation directory (e.g. D:\software\nodejs, following examples use this), manually create two folders: +``` +node_global +node_cache +``` + +##### Execute Configuration Commands +In terminal, execute following two commands in order (note replace with your actual path): +```bash +npm config set prefix "D:\software\nodejs\node_global" +npm config set cache "D:\software\nodejs\node_cache" +``` +##### Configure Environment Variables +If not configure this, later you use npm install -g installed tools will prompt "command not found". + +1. On desktop right click "This PC" -> "Properties" -> "Advanced system settings" -> "Environment Variables". +2. Modify `Path` in 【System Variables】: +2. 1. Find `Path` variable, click "Edit". +2. 2. Check if have default C drive npm path, if yes, delete it. +2. 3. Create new one, fill your Node.js installation path: `D:\software\nodejs\`. +3. Create/Modify Path in 【User Variables】: +3. 1. In 【User Variables】 find Path, click "Edit". +3. 2. Change default `C:\Users\username\AppData\Roaming\npm` to: `D:\software\nodejs\node_global`. +::: info Tip +If don't have this `C:\Users\username\AppData\Roaming\npm`, create new one, fill your Node.js installation path. +::: +4. Create `NODE_PATH` variable: +4. 1. In 【System Variables】 area, click "New". +4. 2. Variable name: `NODE_PATH` +4. 3. Variable value: `D:\software\nodejs\node_global\node_modules` +4. 4. Click OK save all windows. +##### Configure Mirror (For Chinese Developers) +Default npm source is abroad, download speed slow. We configure Taobao latest mirror source, in terminal input: +```bash +npm config set registry https://registry.npmmirror.com +``` +Verify if configuration successful: +```bash +npm config get registry +``` + +If returns `https://registry.npmmirror.com/`, indicates speed up successful. + +#### Clone Repository +You need create fork on github, then clone to local: + +You can use `git clone https://github.com/username/pyClickMouse.git` download source code to local + +Run `npm install` in **administrator terminal** to install dependencies. + +#### Publish and Submit +You need create new branch: +```bash +git checkout -b my-branch +``` +And create remote link: +```bash +git remote add origin https://github.com/username/pyClickMouse.git +``` + +Configure your email and username: +```bash +git config --global user.email "your email" +git config --global user.name "your name" +``` + +Then, you can submit. + +Documentation path is at `documents/`. + +--- + +When publishing, may need your username and password, so you need set a key on github. + +1. Set name and expiration time, in `Repository access` select All repositories, +2. Click `Add permissons`, select `Contents`, `Contents` checkbox select `Read and write`, then select `workflows`, confirm. + +Then, you can publish. + +#### Submit PR +You need create Pull request on [this link](https://github.com/xystudiocode/pyClickMouse), then wait for review. + +[Click to understand PR specifications](./github.md) + +Open [this link](https://github.com/settings/personal-access-tokens/new) + +#### Compile and Debug +Can run `npm run dev` open compilation environment, open webpage according to prompt. + +Run `npm run build` compile script, can put in `/pyClickMouse/` directory to deploy. + ++But we will automatically deploy each commit to main branch, so you don't need compile yourself. + \ No newline at end of file diff --git a/documents/en/develop/contributing/github.md b/documents/en/develop/contributing/github.md new file mode 100644 index 00000000..57c09701 --- /dev/null +++ b/documents/en/develop/contributing/github.md @@ -0,0 +1,123 @@ +--- +title: Participating in Collaboration +description: Introduction to how to participate in collaboration +layout: doc +--- + + + +# Participating in Collaboration +## commit message + +Need follow following format: +``` +Update type(Update module):(optional)(version number) (Update summary): + +- [(optional)Sub update type]Update content 1 +- [(optional)Sub update type]Update content 2 +- ... +``` + +Update types have these contents: +| Type | Description | +| --- | --- | +| ✅feat | New feature | +| 🔧modify | Modify feature | +| 🐛fix | Fix bug | +| ⚒️refactor | Refactor | +| 📃docs | Modify documentation, e.g. README | +| ❇️style | Modify code style, not affecting functionality | +| 🔎test | Add test, modify test | +| 📆chore | Miscellaneous, e.g. modify .gitignore | +| ⏫perf | Performance optimization | +| 🛒ci | CI/CD related changes | +| 🚅build | Modify build system or dependencies | +| ◀️revert | Rollback | +| 🔡dependency | Dependency update | +| ❌remove | Remove deprecated components | +| ↪️move | Moved components | +| ❓unknown | Unknown type | +| Custom | Try to describe with intuitive English word, best with emoji | + +When content many need add update type prompt for update content + +## Branches + +Please update according to branch structure shown in this diagram: ++ +Created branches need start with `feature/` to indicate feature branch, or create a fork, and develop in fork branch. + +When publishing pr need select **merge to `develop` branch**. + +## Version Number +clickmouse version format: `A.B.C.D[(alpha | beta |.dev | rc) E]` +## Official Version +Official version without .dev, alpha, beta or rc suffix. + +A position represents major update, has code level changes. E.g. 1.0 upgrade to 2.0 refactored code. + +B position represents normal update, usually updates some major features. + +C position represents fix update, usually updates some minor features and some bugs. + +D position represents version code, usually +1 when A, B, C positions change. Also possible A, B, C positions not change, D position +1, this represents emergency update, usually fixes several major impact bugs. + +## Test Version +Test version with .dev, alpha, beta or rc suffix. + +Usually preceding `A.B.C.D` unchanged during test cycle, represents next version. + +`.dev` represents early development update, functionality unstable, many bugs, located at version project initial stage.The new features in this phase will be put in the lab and turned off by default. + +`alpha` represents late development update, functionality incomplete, many bugs, located at version project early stage.The new features in this phase will be put in the lab and turned off by default. + +`beta` represents release test update, functionality complete, fewer bugs, will not add new features, located at version project middle stage. It is usually released in the middle of the development cycle and will gradually merge features from the lab. + +`rc` represents pre-release version, functionality complete, fewer bugs, will fix some important security issues or bugs, closest to official version, about to release official version, located at version project final stage. + +## issue +- Title format: `[Type] Title` etc., can write casually, but need accurately describe update content. +- Content should accurately write your requirements, and optionally give solutions, upload screenshots, add additional information (e.g. clickmouse version number) +- Types are `bug`, `enhancement`, `question` etc. +- We provided some templates, can directly use. +- Use `labels` to mark issue type, e.g. `bug`, `enhancement`, `question` etc. +- Set issue `milestone` to version you want to apply. +- Security issues please see [Security Documentation](./SECURITY.md). + +## pr +- Title format: `[Type] Title` +- Use `labels` to mark pr type, e.g. `bug`, `enhancement`, `question` etc. +- Associate issue, so we can know which issue this pr solves. +- Need accurately write update content, associate to version number milestone. +- Optionally add implementation ideas + +### Specifications +Our pr merge order: +```mermaid +graph LR +A(Other user feature development branch) --> B(develop branch) +B --> C(main branch) +``` + +pr no specific format, but must clearly describe update content, associate to version number milestone; title need briefly describe update content, if fixed or added suggestions in issue, write that issue number in this line, if multiple duplicate issues appear, only write one, and simply describe this bug. + +### Express pr +
+Express pr please use carefully + + +- Express pr means skip some normal pr merge branch steps, to faster merge to target branch functionality. +- Title format: `[✈️Express] Title` +- Using express must explain reason in pr description + +If someone express merge, but didn't write express merge reason, then reject merge that person's branch. + +Express pr has high priority, will process first. + +## milestone +- We set a milestone for each version, to manage that version's issues and pr. +- Need each issue or pr associate to a milestone, so we can know if that issue or pr added in next version. +- milestone format:`dev_version number` \ No newline at end of file diff --git a/documents/en/develop/contributing/issue_template.md b/documents/en/develop/contributing/issue_template.md new file mode 100644 index 00000000..61487a7d --- /dev/null +++ b/documents/en/develop/contributing/issue_template.md @@ -0,0 +1,213 @@ +--- +title: issue template +description: View issue template online +layout: doc +--- + + + + + + +# issue template +## Bug Report +Report a bug. +
++ + +## Feature Request +A new feature you suggest to add. +Add a title ++ To avoid unnecessary trouble, please check if anyone else has already reported the same issue before filing an issue. Check if duplicate exists😊 +We will not handle issues on gitee, please use github to publish.🙋♂️ +Please only report 1 problem at a time.😀 +🔡Clickmouse version ++ 🎭Did you discover bug from official version +❗clickmouse official version only published ongithub releases or gitee releases, others are unofficial versions.
++ +
+🐛Module where you encountered bug ++ 🐍Describe your bug. ++ 🔦Impact of this bug. ++ 📝Reproduction steps ++ ℹ️Estimated affected Clickmouse versions ++ 📄Your solution step ideas ++ 🔄️Bug mitigation solutions ++ 📂File logs ++ ➕Other related information ++
++ + +## New Standard +Will suggest, establish or modify a standard. +Add a title ++ To avoid causing more trouble, before reporting issue, first check if others have already reported same problem.Check if duplicate exists😊 +We will not handle issues on gitee, please use github to publish.🙋♂️ +Please only report 1 feature at a time.😀 +❇️Module for new feature ++ 📄New feature description ++ ❔Reason for needing this feature ++ 🧾Implementation step ideas ++ ➕Other related information ++
++ + +## Task Order +Some task orders, can be used to draft new version planning, etc. +Add a title ++ To avoid causing more trouble, before reporting issue, first check if others have already reported same problem.Check if duplicate exists😊 +We will not handle issues on gitee, please use github to publish.🙋♂️ +Please only report 1 project at a time.😀 +🧾New project ++ ℹ️Clickmouse version for project implementation ++ ❓Reason for needing these projects ++ ➕Other related information ++
++ \ No newline at end of file diff --git a/documents/en/develop/contributing/license.md b/documents/en/develop/contributing/license.md new file mode 100644 index 00000000..54e17b68 --- /dev/null +++ b/documents/en/develop/contributing/license.md @@ -0,0 +1,42 @@ +--- +title: Software License +description: Introduction to software license +layout: doc +--- +# Software License +## Copyright Notice +Mouse icon by Icons8 + +## Open Source License +This software is based on the MIT open source license. I will include the license content at the end. You can copy, modify, and distribute this software and documentation site, but you must retain the original author information and license declaration in the source code. + +This software and documentation site are both open source on GitHub. You can open them at [Software link](https://github.com/xystudiocode/pyClickMouse) + +At the same time, the software source code is open source on Gitee for convenient download by Chinese users. [Software link](https://gitee.com/xystudio889/pyClickMouse) + +## Commercial Authorization +We do not oppose commercial authorization. You can use this software for commercial purposes without contacting the author, but you must retain the original author information and license declaration in the source code. + +## License Content +``` +MIT License + +Copyright (c) 2026 xystudiocode + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/documents/en/develop/dependencies.md b/documents/en/develop/dependencies.md new file mode 100644 index 00000000..10ad1d96 --- /dev/null +++ b/documents/en/develop/dependencies.md @@ -0,0 +1,19 @@ +--- +title: Dependencies +description: clickmouse dependencies +layout: doc +--- + +# clickmouse dependencies +- PySide6: For GUI interface, it is the graphical core framework +- pyautogui: Mouse clicker core +- requests: Used to check version number +- nuitka: Library for packaging as GUI or ~~interactive command line~~ +- cython: Library for packaging as pyd +- setuptools: Library for packaging as python package +- pywin32: win32 control +- pynput: Keyboard control library +- pyperclip: Clipboard library +- psutil: Process management library +- packaging: Version management library +- pytz: Timezone management library \ No newline at end of file diff --git a/documents/en/develop/index.md b/documents/en/develop/index.md new file mode 100644 index 00000000..b4f67a81 --- /dev/null +++ b/documents/en/develop/index.md @@ -0,0 +1,34 @@ +--- +title: Introduction +description: Introduction to ClickMouse developer version +layout: doc +--- + + + +# Introduction + +ClickMouse developer version provides some code libraries, with the following features: + +- clickmouse library: +- - Library for controlling mouse, can simulate mouse click operations. +- ~~clickmouse api: Create clickmouse extensions through python~~ Not yet completed + +## clickmouse library + +clickmouse library is a library for controlling mouse, can simulate mouse click operations. + +Go to [documentation](./clicker/) for reference. + +## clickmouse api +~~clickmouse api creates clickmouse extensions through python, can implement some extension functions, such as:~~ + +::: warning Tip +clickmouse api not yet completed +::: + +## clickmouse officially made python libraries +- clickmouse: Clicker management library +- clickmouse_api: Extension creation calling api \ No newline at end of file diff --git a/documents/en/features/cleancache.md b/documents/en/features/cleancache.md new file mode 100644 index 00000000..26be13c6 --- /dev/null +++ b/documents/en/features/cleancache.md @@ -0,0 +1,39 @@ +--- +title: Clean Cache +description: Clean cache +layout: doc +--- + + + + +# Clean Cache + +::: warning Warning +Not recommended to manually clean cache, because clickmouse will automatically clean cache. +::: + +## Function Description + +Can be used to clean clickmouse's cache, currently can clean: + +- Logs: Used for feedback error information +- Update cache: Used to reduce update check requests +- Other temporary files: Usually not generated, unless you manually created temporary files + +Add a title ++ To avoid causing more trouble, before reporting issue, first check if others have already reported same problem.Check if duplicate exists😊 +We will not handle issues on gitee, please use github to publish.🙋♂️ +☑️Modules included in new task ++ 📄Description of each new feature ++ ❓Reason for needing these features ++ 📄Implementation step ideas ++ ➕Other related information ++ + +## Usage Method + +1. Open File - Clean Cache +2. Select the cache type to clean +3. (Optional) Click "Scan" button to scan cache file size +3. Click "Clean" button to start cleaning cache \ No newline at end of file diff --git a/documents/en/features/clickclean.md b/documents/en/features/clickclean.md new file mode 100644 index 00000000..23f0d78b --- /dev/null +++ b/documents/en/features/clickclean.md @@ -0,0 +1,42 @@ +--- +title: ClickClean +description: ClickClean +layout: doc +--- + + + +# ClickClean + +ClickClean is a version of clickmouse with a simplified interface, removing the following features: + +- Most settings, leaving only hotkeys, clicker, and a small number of basic settings +- Clicker properties and quick click settings +- Cache cleaning +- Updates +- Extensions +- Installer and uninstaller + +Additionally: +- Lightweight and fast: the installer is much smaller +- No installation required, just download and run + +
+
+diff --git a/documents/en/features/extensions/index.md b/documents/en/features/extensions/index.md new file mode 100644 index 00000000..43ddf817 --- /dev/null +++ b/documents/en/features/extensions/index.md @@ -0,0 +1,12 @@ +--- +title: Extensions +description: clickmouse features +layout: doc +--- + +# Features + +clickmouse provides powerful extensibility, but currently we are making extension api, so extensions are temporarily only official components. + +Official extension list: +- Repair Tool: One-click repair mouse clicker startup issues, can also restore to just downloaded state, and through removing components, no need for online reinstallation. \ No newline at end of file diff --git a/documents/en/features/help.md b/documents/en/features/help.md new file mode 100644 index 00000000..482a49f4 --- /dev/null +++ b/documents/en/features/help.md @@ -0,0 +1,46 @@ +--- +title: Help Menu +description: Help menu +layout: doc +--- + + + +# Help Menu + +## About + +### Function Description +Can query clickmouse version, author and other information. + +### Function List +- Query version number + +### Usage Method +1. Open `Help` menu -> click `About` button + +## Feedback +### Function Description +If you have any opinions or suggestions, you can provide feedback by clicking the feedback menu + +The opened URL is the `Software Feedback URL` in settings, default is [link](https://github.com/xystudiocode/pyClickMouse/issues/new/choose)`https://github.com/xystudiocode/pyClickMouse/issues/new/choose` + +### Usage Method +1. Open `Help` menu -> click `Feedback` button +2. According to prompts, fill in relevant content and submit + +## Documentation +### Function Description +Can open clickmouse's official documentation for reference + +Default opened URL is the `Documentation Link` in settings, default is [link](https://xystudiocode.github.io/pyClickMouse/)`https://xystudiocode.github.io/pyClickMouse/` + +
\ No newline at end of file diff --git a/documents/en/features/index.md b/documents/en/features/index.md new file mode 100644 index 00000000..3ed14de1 --- /dev/null +++ b/documents/en/features/index.md @@ -0,0 +1,26 @@ +--- +title: Features +description: clickmouse features +layout: doc +--- + +# Features + +clickmouse has many features, they are all in the menu section: + +- File: +- - Clean Cache: Clean cache, free up memory. +- - Exit: Exit program. +- Settings: Set some parameters of the software. +- Update: +- - Check for Updates: Check if software has updates. +- - Update Log: View update log. +- Help: +- - About: View software version, author, license information. +- - Hotkey Help: View software hotkeys. +- - Help: View clickmouse documentation. +- - Feedback: Send feedback to the author. +- Extensions: +- - Official Extensions: +- - - Manage Extensions: Install, uninstall extensions through clickmouse's package manager. +- - - Extension Software: Official extension software, see [Extension List](./extensions/). \ No newline at end of file diff --git a/documents/en/features/settings.md b/documents/en/features/settings.md new file mode 100644 index 00000000..0927fe61 --- /dev/null +++ b/documents/en/features/settings.md @@ -0,0 +1,569 @@ +--- +title: Settings +description: Settings +layout: doc +--- + + + + + +# Settings + +
Some settings items need beta version and open some developing features to enable. + +## Function Description + +Can be used to manage clickmouse's operation strategies. + +## Function List + +- General Settings: Adjust some items not in the list below, such as software language. +- Style Settings: Set clickmouse's theme, style. +- Clicker Settings: Control clicker behavior, such as default click interval, click count. +- Update Settings: Used to control clickmouse's update service, such as whether to auto-update, update check frequency. +- Hotkey Settings: Used to control hotkey functions, such as left click, right click hotkeys. +- Documentation Settings: Control documentation function default opened website. +- Notification Settings: Used to control software notification reminders, such as whether to show notifications. + +## General Settings +General settings include some basic software settings, such as software language, etc. + +Setting items include: +- Software Language: Used to switch software language, currently officially supports Simplified Chinese and English. +- - Type: Dropdown box +- - Default value: System language +- - Optional values: Determined by language pack files, officially supports `Simplified Chinese` and `English`. +- - Field name: `select_language` +::: tip Tip +After switching language, software needs to restart to take effect. +::: +::: info Tip +If custom language pack is not updated in time, lacking translation for new content, new content will display in English. +::: +- Keep Tray Icon: Used to control whether software shows icon in taskbar; +- - Type: Checkbox +- - Default value: On +- - Field name: `show_tray_icon` ++If turn off Keep Tray Icon option, tray icon will not completely close, but will exit after program main window closes. + + +- Auto-start on Boot: If checked, software will automatically start when system boots; +- - Default value: Off +- - Field name: None, it depends on system's own auto-start settings. +- Reset Auto-start Configuration: If your auto-start shows window or has other issues, you can try clicking this button to repair. +- - Type: Button +- Software Feedback URL: Controls the URL opened during software feedback. +This setting item needs to enable + +- - Type: Input box +- - Default value: [link](https://github.com/xystudiocode/pyClickMouse/issues/new/choose) `https://github.com/xystudiocode/pyClickMouse/issues/new/choose` +- - Field name: `feedback` +- Reset feedback URL: Reset the feedback URL to default value. +More settingsto enable.This setting item needs to enable + +- - Type: Button +- Software Response Delay: Used to control software response speed; *Faster response delay means faster response when switching styles, but CPU usage will also be higher.* +- - Type: Slider +- - Default value: 100ms +- - Minimum value: 1ms +- - Maximum value: 1000ms +- - Interval value: 10ms +- - Field name: `soft_delay` + +- Hide "lab" tab when no experimental features: If checked, "lab" tab will be hidden when no experimental features. +More settingsto enable.This setting item needs to enable + +- - Type: Checkbox +- - Default value: On +- - Field name: `hide_flags` + +- Reset All Settings: Used to restore default settings, after restoration need to restart software to take effect. +- - Type: Button + +::: warning Warning +***Settings modifications take effect immediately, but some settings require restarting software to take effect.*** + +This operation will overwrite previous settings, relatively dangerous, please operate carefully. +::: + +More settingsto enable.+ +--- + +## Style Settings + +Style settings used to adjust software theme and style. + +Setting items include: +- Window Style: Used to switch software window style; +- - Type: Dropdown box +- - Default value: System default +- - Optional values: Determined by style files, officially supports according to system color, light, dark +- - Field name: `select_style` +- Use Windows accent color to display components: Control whether components use Windows accent color; after turning off, use clickmouse color. See demo below +- - Type: Checkbox +- - Default value: On +- - Field name: `use_windows_color` +
+This operation will not completely change component style, checkboxes and other components will still use system accent color + + +++ +- Window Theme: Set window theme +- - Type: Dropdown box +- - Default value: Determined by system version: +- - - Windows 10: `Windows10` style +- - - Windows 11: `Windows11` style +- - - Other Windows: `Windows` style +- - - Other: `Fusion` style +- - Optional values: Determined by system, Windows has: `Windows standard style`, `Windows classic style`, `Windows Vista style` and `Fusion style` +- - Field name: `theme` + +::: warning Warning +Some themes cannot adapt well to other clickmouse components, such as dark mode, inverted color mode, etc. +::: + +Color demo:
+ + ++ +## Clicker Settings + +Can set some clicker parameters, such as click interval, click count, etc. + +Setting items include: +- Click Delay Default Value: Control default delay when click number is empty +- - Type: Input box +- - Default value: Empty +- - Field name: `click_delay` +- Click Delay Unit: Control default delay unit +- - Type: Dropdown box +- - Default value: `Millisecond` +- - Optional values: `Millisecond`, `Second` +- - Field name: `delay_unit` +- Default Value Used When Click Delay Error: If enabled, when click delay input box input error, will use default value +- - Type: Checkbox +- - Default value: Off +- - Field name: `delay_error_use_default` + +
+This operation is disabled when + +Click Delayparameter is set to empty ++If turn off this option, only when click is empty will use default value; after enabling, as long as input format error will use default value. + + +- Modify click attributes using the default values: If enabled, then in the click delay change, the default value will continue to use. +- - Type:Checkbox +- - Field name: Off +- - Field name: `modify_using_default_input` +- Modify click units using the default values: If enabled, then in the unit change, the default value will continue to use. +- - Type:Checkbox +- - Field name: Off +- - Field name: `modify_using_default_combo` +- Click Count Default Value: Control default count when click count is empty +- - Type: Input box +- - Default value: Empty +- - Field name: `click_times` +- Click Count Unit: Control default click count unit +- - Type: Dropdown box +- - Default value: `Times` +- - Optional values: `Times`, `Ten thousand times`, `Infinite` +- - Field name: `times_unit` +- Default Value Used When Click Count Error: If enabled, when click count input box input error, will use default value +- - Type: Checkbox +- - Default value: Off +- - Field name: `times_error_use_default` +- Total Click Time: Total time calculated through software click count and interval. +- - Type: Text +- - Value: Total time calculated based on click count and interval +- - Field name: None + ++ +## Update Settings + +Used to control software's update service, such as whether to auto-update, update check frequency. +Setting items include: +- Enable Update: If enabled, can manage update settings below. +- - Type: Checkbox +- - Default value: On +- - Field name: `update_enabled` +
+I do not recommend turning off updates, this will cause more problems for your clickmouse. + + +::: tip Tip +If you find check update prompt: 'Update not enabled', please turn on this setting. +::: + +- Update Notification: If turned off, then cannot see update notification. +- - Type: Checkbox +- - Default value: On +- - Field name: `update_notify` + ++ +
+This setting is independent of update completion notification, if turn off this setting, update completion notification will also not turn off. + + +- Silent Update: If enabled, then software update will not pop up notification box. +- - Type: Checkbox +- - Default value: Off +- - Field name: `quiet_update` + ++If enable this setting, then update notification will be turned off, even if you enabled this setting. + + +- Update Completion Notification: If enabled, then after update completion will pop up notification box. +- - Type: Checkbox +- - Default value: On +- - Field name: `update_ok_notify` + ++ +
+This popup will appear after silent update completion. + + +::: tip Tip +The notification settings below are also affected by update settings, if grayed out, may be because update service not enabled. +::: + ++ +## Hotkey Settings + +Used to set software's hotkey functions, such as left click, right click hotkeys. + +Setting items include: +- Hotkey Enabled: If turned off, then software's hotkey function will be turned off. +
This setting item needs to enable + +- - Type: Checkbox +- - Default value: On +- - Field name: `hotkey,hotkey_enabled` +- Left Click Hotkey: Set left click hotkey. +- - Type: Input box +- - Default value: `F2` +- - Field name: `hotkey,hotkeys,left_click_hotkey` +- Right Click Hotkey: Set right click hotkey. +- - Type: Input box +- - Default value: `F3` +- - Field name: `hotkey,hotkeys,right_click_hotkey` +- Pause/Restart Click Hotkey: Set pause/restart clicker hotkey. +- - Type: Input box +- - Default value: `F4` +- - Field name: `hotkey,hotkeys,pause_click_hotkey` +- Stop Click Hotkey: Set stop click hotkey. +- - Type: Input box +- - Default value: `F6` +- - Field name: `hotkey,hotkeys,stop_click_hotkey` +- Click Attribute Hotkey: Set open click attribute hotkey. +- - Type: Input box +- - Default value: `Ctrl+Alt+A` +- - Field name: `hotkey,hotkeys,click_attr_hotkey` +- Main Window Hotkey: Set open main window hotkey. +- - Type: Input box +- - Default value: `Ctrl+Alt+M` +- - Field name: `hotkey,hotkeys,main_window_hotkey` +- Reset Left Click Settings: Used to restore default left click settings. +- - Type: Button +- Reset Right Click Settings: Used to restore default right click settings. +- - Type: Button +- Reset Pause/Restart Click Settings: Used to restore default pause/restart click settings. +- - Type: Button +- Reset Stop Click Settings: Used to restore default stop click settings. +- - Type: Button +- Reset Click Attribute Settings: Used to restore default click attribute settings. +- - Type: Button +- Reset Fast Click Settings: Used to restore default fast click settings. +- - Type: Button +- Reset Main Window Settings: Used to restore default main window settings. +- - Type: Button + +More settingsto enable.+ +## Documentation Settings + +Used to set documentation function default opened website. + +Setting items include: +- Documentation Default Link: +- - Type: Input box +- - Default value: [link](https://xystudiocode.github.io/pyClickMouse/{lang})`https://xystudiocode.github.io/pyClickMouse/{lang}` +- - Field name: `doc_default_link` +- Reset documentation default link: Used to restore default documentation default link. +
This setting item needs to enable + +- - Type: Button +::: tip Tip +`{lang}` will be replaced with current software language, such as `zh-CN` or `en`. +::: + +- Documentation Language: +- - Type: Dropdown box +- - Default value: Software language +- - Optional values: `Software language`, `System language` and according to software supported language packs (default `Simplified Chinese`, `English`) + +- Update Log Path: Set update log path. +- - Type: Input box +- - Default value: `updatelog` +- Reset update log path: Used to restore default update log path. +More settingsto enable.This setting item needs to enable + +- - Type: Button + +::: tip Tip +Software's update log path is relative to documentation default link path, such as default open update log link is [link](https://xystudiocode.github.io/pyClickMouse/{lang}/updatelog)`https://xystudiocode.github.io/pyClickMouse/{lang}/updatelog`, then update log path fill in `updatelog`. +::: + +> This section's {lang} will also be parsed. + +More settingsto enable.+ +## Notification Settings + +Used to control software's notification reminders, such as whether to show notifications. + +Setting items include: + +Used to control software's update service, such as whether to auto-update, update check frequency. +Setting items include: +- Enable Update: If enabled, can manage update settings below. +- - Type: Checkbox +- - Default value: On +- - Field name: `update_enabled` +
+I do not recommend turning off updates, this will cause more problems for your clickmouse. + + ++If you find check update prompt: 'Update not enabled', please turn on this setting. + + +- Update Notification: If turned off, then cannot see update notification. +- - Type: Checkbox +- - Default value: On +- - Field name: `update_notify` + ++ +
+If enable this setting, then update notification will be turned off, even if you enabled this setting. + + +- Update Completion Notification: If enabled, then after update completion will pop up notification box. +- - Type: Checkbox +- - Default value: On +- - Field name: `update_ok_notify` + ++This popup will appear after silent update completion. + + +::: tip Tip +The update settings above are also affected by notification settings, if grayed out, may be because update service not enabled. +::: + +- Software Startup Warning: If enabled, then when software starts, resource loss will pop up warning notification box. +- - Type: Checkbox +- - Default value: On +- - Field name: `show_warning` + +::: info Tip +clickmouse checks resources when starting, if finds missing some content, will pop up `Software Startup Warning` +::: + +- Official Extension Package Missing Warning: If enabled, then when software starts, official extension package missing will pop up warning notification box. +- - Type: Checkbox +- - Default value: On +- - Field name: `show_package_warning` + ++ +## Lab + +To test new features. + +Because the test items will be updated with each version, the settings items are not listed. + +
+ +## Usage Method + +1. Open Settings - Settings options +2. On left side select option to switch settings +3. Click switch/input box on right side to toggle settings \ No newline at end of file diff --git a/documents/en/features/update.md b/documents/en/features/update.md new file mode 100644 index 00000000..eca4d203 --- /dev/null +++ b/documents/en/features/update.md @@ -0,0 +1,45 @@ +--- +title: Update Management Menu +description: Update management menu +layout: doc +--- + + + +# Update Management Menu + +## Check for Updates + +### Function Description + +Check for updates function can help users check if software has new version released, and prompt users to download latest version. + +### Usage Method + +As long as update is enabled, clickmouse will periodically check for updates. + +To start through menu, please go to "Update" - "Check for Updates" to view updates + +### FAQ + +**1. Software update failed: Update service not enabled** + +Please go to `Settings`, select `Update` on the left, then enable `Enable Update`, then try again. + +
+ +## Update Log +### Function Description +Open a webpage, domain is combined value of `Documentation Default Link` and `Update Log Path` in settings, default is [link](https://xystudiocode.github.io/updatelog/)`https://xystudiocode.github.io/updatelog/` + +### Usage Method + +1. Open Update - Update Log \ No newline at end of file diff --git a/documents/en/guide/faq.md b/documents/en/guide/faq.md new file mode 100644 index 00000000..4e3715f0 --- /dev/null +++ b/documents/en/guide/faq.md @@ -0,0 +1,130 @@ +--- +layout: doc +title: Frequently Asked Questions +--- + + + + + +# Frequently Asked Questions + +
+All paths in this page are relative to the clickmouse installation directory. +If Windows cannot open the files mentioned inside, please try opening with Notepad. + + +## Errors + +**1. Language pack does not exist:** + +Please check if there is a langs directory in clickmouse's `res` directory. If yes, check if there is a `langs.json` file inside. If not, please reinstall clickmouse. [Download link](https://github.com/xystudiocode/pyClickMouse/releases/latest) + ++ +**2. Cannot start:** + +There might be some bugs. You can modify the content in `packages.json` to: +```json +["xystudio.clickmouse", "xystudio.clickmouse.repair"] +``` +Then run the `repair.exe` file in the current directory, check the content you want to clear, click the `Repair` button, and start clickmouse again to see. + +::: tip Tip +It is recommended to select all repair items, but this will delete all user data and extensions, restoring to initial state. +::: + +If you can compile source code, you can also try using makefile, remove the `--windows-console-mode=disable` from compiling source code to get error stack trace. + +If still not working, try uninstalling and reinstalling clickmouse. [Download link](https://github.com/xystudiocode/pyClickMouse/releases/latest) + +If the problem persists, you can [report an issue](https://github.com/xystudiocode/pyClickMouse/issues/new/choose) + +**3. Cannot connect to update, showing `timeout`:** + +Our update content is stored on GitHub, and the network in China is slower. + +You can install [watt toolkit](https://gitee.com/rmbgame/SteamTools/releases/download/3.0.0-rc.16/Steam%20%20_v3.0.0-rc.16_win_x64.exe) +Then: +1. Open watt toolkit, click `Network Acceleration` on the left +2. Check `github` +3. Click `One-click Acceleration` + +> This method can only ensure no timeout error, but cannot guarantee fast network speed. + +If still not working, I have no more methods + +## Software Function Usage Issues +**1. Why is the click button grayed out?** + +You may not have correctly entered click delay and click count. You can set click time and click count in the input boxes below, and select the unit for click count/delay in the dropdown box. + +::: warning Note +Need to enter correct numbers, otherwise clicking will fail. +::: + +**2. Click input box is grayed out/cannot open click settings** + +This may be because you are currently clicking, need to click the `Stop` button to stop before entering again. + +
+
++ +**3. Software update failed: Update service not enabled** + +Please go to `Settings`, select `Update` on the left, then enable `Enable Update` + +
+ +**4. Prompt that package manager folder does not exist, pops up every time** + +You can go to Settings - Notifications - turn off `Official extension package missing warning` + +
+ +**5. Checkbox click invalid** + +You may have clicked on the text area. Clickmouse checkbox needs to be clicked inside the box to be effective. \ No newline at end of file diff --git a/documents/en/guide/getting-started.md b/documents/en/guide/getting-started.md new file mode 100644 index 00000000..445a9b89 --- /dev/null +++ b/documents/en/guide/getting-started.md @@ -0,0 +1,90 @@ +--- +layout: doc +title: Getting Started +--- + + + +# Getting Started +## Download and Install + +Go to [GitHub releases page](https://github.com/xystudiocode/pyClickMouse/releases/latest) + +Select `clickmouse.7z`, then download, after downloading, extract to current directory + +## Running +### Initialization +Click `extracted folder/main.exe`, agree to UAC popup, wait for program initialization to complete. + +First click Next, then "Agree to this agreement", click "Next" 2 times +
+ +Then you will be asked whether to create a shortcut, recommended to create, click "Next" + +
+ +Then select packages, you can choose as appropriate, click "Next", confirm component selection popup. + +
+ +Then wait for installation to complete, enter installation completion prompt page, recommended to check "Run clickmouse", click "Finish" + +
+ +### Usage + +Set a click interval and click count, the button next to the click input box can set the unit + +After setting, click "Left Click" or "Right Click" button to start clicking + +> If grayed out, check if numbers are entered, clickmouse only detects integer numbers + +Click "Stop" button to stop clicking + +Click "Pause" button can pause clicking, then you can click "Restart" button to continue clicking + +
+ +::: tip Tip +Afterwards, to run, you can double-click `extracted folder/main.exe` to run the program, or right-click desktop or start menu shortcut to run +::: \ No newline at end of file diff --git a/documents/en/guide/index.md b/documents/en/guide/index.md new file mode 100644 index 00000000..3992394d --- /dev/null +++ b/documents/en/guide/index.md @@ -0,0 +1,36 @@ +--- +layout: doc +title: Clickmouse Guide +--- + +# Clickmouse Guide + +## Introduction +Clickmouse guide, mainly introducing the usage methods, features, principles, configurations, etc., of Clickmouse GUI. + +Click on the sidebar to browse. + +## Features +- Clicking functionality +- Input interval +- Hotkey startup +- Input count +- Automatic update check +- Automatic download and installation of updates +- Settings +- Official installation assistant +- Package management +- Background operation + +## Clicking Features +- Mouse auto-clicking +- Custom click interval +- Custom click count + +## ⬇️Download +Go to [releases](https://github.com/xystudiocode/pyClickMouse/releases/releases) to download + +## Usage Priority +```mermaid +graph LR +A[exe] --> B["cli version (not completed)"] \ No newline at end of file diff --git a/documents/en/guide/license.md b/documents/en/guide/license.md new file mode 100644 index 00000000..54e17b68 --- /dev/null +++ b/documents/en/guide/license.md @@ -0,0 +1,42 @@ +--- +title: Software License +description: Introduction to software license +layout: doc +--- +# Software License +## Copyright Notice +Mouse icon by Icons8 + +## Open Source License +This software is based on the MIT open source license. I will include the license content at the end. You can copy, modify, and distribute this software and documentation site, but you must retain the original author information and license declaration in the source code. + +This software and documentation site are both open source on GitHub. You can open them at [Software link](https://github.com/xystudiocode/pyClickMouse) + +At the same time, the software source code is open source on Gitee for convenient download by Chinese users. [Software link](https://gitee.com/xystudio889/pyClickMouse) + +## Commercial Authorization +We do not oppose commercial authorization. You can use this software for commercial purposes without contacting the author, but you must retain the original author information and license declaration in the source code. + +## License Content +``` +MIT License + +Copyright (c) 2026 xystudiocode + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/documents/en/guide/version-naming.md b/documents/en/guide/version-naming.md new file mode 100644 index 00000000..7214f0e4 --- /dev/null +++ b/documents/en/guide/version-naming.md @@ -0,0 +1,35 @@ +--- +title: Version Naming Rules +description: Introduction to ClickMouse version naming rules. +layout: doc +--- + +# Version Naming Rules +clickmouse version format is: `A.B.C.D[(alpha | beta |.dev | rc) E]` +## Official Versions +Official versions do not have .dev, alpha, beta, or rc suffixes. + +A position represents major updates with code-level changes. For example, upgrading from 1.0 to 2.0 involves code refactoring. + +B position represents regular updates, usually updating some major features. + +C position represents fix updates, usually updating some small features and fixing some bugs. + +D position represents version code, usually increments by 1 when A, B, C positions change. It is also possible that A, B, C positions do not change but D position increments by 1, representing emergency updates, usually fixing several major impact bugs. + +## Test Versions +Test versions have .dev, alpha, beta, or rc suffixes. + +Usually the preceding `A.B.C.D` does not change within a testing cycle, representing the next version. + +`.dev` represents early development updates, features are unstable, many bugs, located in the early stage of version project.The new features in this phase will be put in the lab and turned off by default. + +`alpha` represents late development updates, features are incomplete, many bugs, located in the early stage of version project.The new features in this phase will be put in the lab and turned off by default. + +`beta` represents release testing updates, features are complete, few bugs, no new features will be added, located in the middle stage of version project. It is usually released in the middle of the development cycle and will gradually merge features from the lab. + +`rc` represents release candidate versions, features are complete, few bugs, will fix some important security issues or bugs, closest to official version, about to release official version, located in the late stage of version project. + +::: tip Tip +The last rc version will be directly merged into the beta version; features are exactly the same. +::: \ No newline at end of file diff --git a/documents/en/index.md b/documents/en/index.md new file mode 100644 index 00000000..2b9dc73e --- /dev/null +++ b/documents/en/index.md @@ -0,0 +1,59 @@ +--- +layout: home +lang: en +title: Home +description: Clickmouse documentation built with VitePress. +hero: + title: Clickmouse + text: Clickmouse + tagline: A fast, simple, lightweight mouse auto-clicker made with Python + image: + src: /imgs/icons/icon.ico + alt: Clickmouse Logo + actions: + - theme: brand + text: Download + link: https://github.com/xystudiocode/pyClickMouse/releases/latest + - theme: brand + text: Get Started + link: /en/guide/getting-started + - theme: alt + text: View Source Code + link: /en/githublink +features: + - icon: ⬇️ + title: Rich Clicking Features + details: Offers extensive clicking capabilities, including setting click count, interval time, default click properties, hotkey clicking, etc. + - icon: ⚙️ + title: Abundant Settings + details: Can configure theme, default click count and interval; use default values on errors, etc. + - icon: ♻️ + title: Lightweight + details: Clean UI, simple and lightweight to use. + - icon: 🔄️ + title: Auto Update + details: Software automatically updates to ensure you have the latest version. + - icon: 🖥️ + title: Background Operation + details: Software can run in the background without affecting your work; can be awakened or start clicking using hotkeys. + - icon: 🧩 + title: High Extensibility + details: Software can be extended by importing extensions to achieve more functionality. + - icon: 💻 + title: Easy Development + details: Extension development is simple, only requiring the use of the clickmouseAPI library. + - icon: + dark: /imgs/icons/cmd/dark.png + light: /imgs/icons/cmd/light.png + title: Command Line and CLI + details: Software supports more lightweight command line and CLI modes, easily callable by other software. + - icon: 🎀 + title: Installation Assistant + details: The official installation assistant makes it easy to configure clickmouse and package manager, simplifying your operations. + - icon: 📦 + title: Package Manager + details: Software officially supports package manager for easy installation, uninstallation, and updating of extensions. + - icon: 🔛 + title: Open Source + details: This software is open source under the MIT license, allowing you to freely modify, distribute, use, and even charge for it; you can also make suggestions to the clickmouse official team to help improve the software. +--- diff --git a/documents/en/updatelog/beta/3/30011a1.md b/documents/en/updatelog/beta/3/30011a1.md new file mode 100644 index 00000000..1da615a1 --- /dev/null +++ b/documents/en/updatelog/beta/3/30011a1.md @@ -0,0 +1,32 @@ +--- +title: 3.0.0.11alpha1 +layout: doc +--- + +# 3.0.0.11alpha1 + +Release Date: 2025/12/06 + +## Update Content + +- Added a new settings UI. This UI is a redesigned UI, not ported from wx. +- Beautified buttons. +- Added adaptive system color functionality, perfectly compatible with Windows light/dark modes. +- Shortcut key: ctrl+alt+d to show or hide the main window. + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0alpha1-re) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011a2.md b/documents/en/updatelog/beta/3/30011a2.md new file mode 100644 index 00000000..0f27e3b5 --- /dev/null +++ b/documents/en/updatelog/beta/3/30011a2.md @@ -0,0 +1,31 @@ +--- +title: 3.0.0.11alpha2 +layout: doc +--- + +# 3.0.0.11alpha2 + +Release Date: 2025/12/07 + +## Update Content + +- Completely refactored settings +- New setting options: software theme, show tray icon. +- Continued modifying and beautifying components + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0alpha2) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011a3.md b/documents/en/updatelog/beta/3/30011a3.md new file mode 100644 index 00000000..7800b7b2 --- /dev/null +++ b/documents/en/updatelog/beta/3/30011a3.md @@ -0,0 +1,29 @@ +--- +title: 3.0.0.11alpha3 +layout: doc +--- + +# 3.0.0.11alpha3 + +Release Date: 2025/12/11 + +## Update Content + +- Continued modifying and beautifying components + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0alpha3) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011dev1.md b/documents/en/updatelog/beta/3/30011dev1.md new file mode 100644 index 00000000..b1eecb23 --- /dev/null +++ b/documents/en/updatelog/beta/3/30011dev1.md @@ -0,0 +1,27 @@ +--- +title: 3.0.0.11.dev1 +layout: doc +--- + +# 3.0.0.11.dev1 + +Release Date: 2025/11/23 + +## Update Content + +- Rewrote clickmouse using pyside6 (based on Qt) + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.dev1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011dev3.md b/documents/en/updatelog/beta/3/30011dev3.md new file mode 100644 index 00000000..f0ab8cb6 --- /dev/null +++ b/documents/en/updatelog/beta/3/30011dev3.md @@ -0,0 +1,31 @@ +--- +title: 3.0.0.11.dev4 +layout: doc +--- + +# 3.0.0.11.dev4 + +Release Date: 2025/11/29 + +## Update Content + +- Changed the clear cache page to a tri-state checkbox +- Check for updates and select language interface refactored based on Pyside6 +- Fixed some bugs + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.dev3) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011dev4.md b/documents/en/updatelog/beta/3/30011dev4.md new file mode 100644 index 00000000..2283477a --- /dev/null +++ b/documents/en/updatelog/beta/3/30011dev4.md @@ -0,0 +1,31 @@ +--- +title: 3.0.0.11.dev4 +layout: doc +--- + +# 3.0.0.11.dev4 + +Release Date: 2025/11/30 + +## Update Content + +- Added clickmouse background running functionality +- Added hotkey startup functionality. +- Fixed the issue where the software could not start immediately after selecting a language. + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.dev3) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011rc1.md b/documents/en/updatelog/beta/3/30011rc1.md new file mode 100644 index 00000000..f6bbd421 --- /dev/null +++ b/documents/en/updatelog/beta/3/30011rc1.md @@ -0,0 +1,40 @@ +--- +title: 3.0.0.11rc1 +layout: doc +--- + +# 3.0.0.11rc1 + +Release Date: 2025/12/13 + +## Update Content + +- UI refactored using Pyside6, giving the interface a fresh new look +- New setting content +- Added hotkey startup, hotkeys can be found in software help +- Added click input count functionality +- Added status bar to view clicking status. +- Temporarily disabled features originally planned for release in 2.3.0, postponed to 3.1.0.12. +- Fixed some bugs + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| English language pack has unexpected characters | None | ==3.0.0.11 | 3.0.1.12 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/26) | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.11rc1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30011rc2.md b/documents/en/updatelog/beta/3/30011rc2.md new file mode 100644 index 00000000..dc95baee --- /dev/null +++ b/documents/en/updatelog/beta/3/30011rc2.md @@ -0,0 +1,36 @@ +--- +title: 3.0.0.11rc2 +layout: doc +--- + +# 3.0.0.11rc2 + +Release Date: 2025/12/14 + +## Update Content + +- Added support for English + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| English language pack has unexpected characters | None | ==3.0.0.11 | 3.0.1.12 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/26) | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.11rc2) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30112rc1.md b/documents/en/updatelog/beta/3/30112rc1.md new file mode 100644 index 00000000..584088a9 --- /dev/null +++ b/documents/en/updatelog/beta/3/30112rc1.md @@ -0,0 +1,42 @@ +--- +title: 3.0.1.12rc1 +layout: doc +--- + +# 3.0.1.12rc1 + +Release Date: 2025/12/19 + +## Update Content + +- Optimized language packs +- - Modified the English language pack, fixed the issue where some version number characters displayed without spaces, and removed extra commas +- - Other language pack optimizations... +- Error style automatic uninstallation functionality +- Fixed some bugs: +- - After switching languages, the interface opened again would become the selected updated language, causing interface fragmentation +- - Fixed the issue where the English language pack had unexpected characters +- - Some other bugs... +- - Adjusted settings: Changed the 'Software needs to restart' interface to a pop-up window and removed character display +- - Removed clickmouse initialization, now automatically gets language + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Next Version Preview +Version number: 3.1.0.13 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.1.12rc1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/30213rc1.md b/documents/en/updatelog/beta/3/30213rc1.md new file mode 100644 index 00000000..a0532ea9 --- /dev/null +++ b/documents/en/updatelog/beta/3/30213rc1.md @@ -0,0 +1,36 @@ +--- +title: 3.0.2.13rc1 +layout: doc +--- + +# 3.0.2.13rc1 + +Release Date: 2025/12/27 + +## Update Content + +- Optimized color management +- - Added Windows accent color detection functionality +- - Added dark title bar in light mode + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| Sometimes, style-changed buttons still have the original style color | None | ==3.0.2.13 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/40) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Next Version Preview +Version number: 3.1.0.14 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.2.13rc1-re1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/31015b1.md b/documents/en/updatelog/beta/3/31015b1.md new file mode 100644 index 00000000..0c8096ba --- /dev/null +++ b/documents/en/updatelog/beta/3/31015b1.md @@ -0,0 +1,34 @@ +--- +title: 3.1.0.15beta1 +layout: doc +--- + +# 3.1.0.15beta1 +Release Date: 2026/01/10 + +## Update Content + +- Modified styles: +- - Integrated styles into one file +- - Removed no-style mode +- - Fixed some style display bugs +- - Added style out-of-bounds protection +- - Changed styles +- Unified the style of initialization and installing extension applications +- Completed installation program and package manager + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| init program's component selection is still in English even when the window displays Chinese | None | >=3.1.0.15beta1, only applies to beta versions | None | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/74) | +| Settings response delay slider displays as 1 | None | >=3.1.0.15;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.14beta1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/31015b2.md b/documents/en/updatelog/beta/3/31015b2.md new file mode 100644 index 00000000..617a9d31 --- /dev/null +++ b/documents/en/updatelog/beta/3/31015b2.md @@ -0,0 +1,28 @@ +--- +title: 3.1.0.15beta2 +layout: doc +--- + +# 3.1.0.15beta3 +Release Date: 2026/01/11 + +## Update Content + +- Modified start menu creation files for file installation +- Modified uninstall program, now cannot be removed from Control Panel + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| init program's component selection is still in English even when the window displays Chinese | None | >=3.1.0.15beta1, only applies to beta versions | None | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/74) | +| Settings response delay slider displays as 1 | None | >=3.1.0.15;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.15beta2) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/31015b3.md b/documents/en/updatelog/beta/3/31015b3.md new file mode 100644 index 00000000..f632dfbb --- /dev/null +++ b/documents/en/updatelog/beta/3/31015b3.md @@ -0,0 +1,30 @@ +--- +title: 3.1.0.15beta1 +layout: doc +--- + +# 3.1.0.15beta3 +Release Date: 2026/01/17 + +## Update Content + +- Modified styles +- Fixed some bugs +- Modified style, using light checkmarks in light mode +- Modified uninstall program, now cannot be removed from Control Panel + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| init program's component selection is still in English even when the window displays Chinese | None | >=3.1.0.15beta1, only applies to beta versions | None | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/74) | +| Settings response delay slider displays as 1 | None | >=3.1.0.15;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.15beta3) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/31015dev0.md b/documents/en/updatelog/beta/3/31015dev0.md new file mode 100644 index 00000000..db1fe476 --- /dev/null +++ b/documents/en/updatelog/beta/3/31015dev0.md @@ -0,0 +1,36 @@ +--- +title: 3.1.0.15.dev0 +layout: doc +--- + +# 3.1.0.15.dev0 + +Release Date: 2025/12/27 + +## Update Content + +- Added menus for extensions, macros, and documentation + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| Sometimes, style-changed buttons still have the original style color | None | ==3.0.2.13 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/40) | +| Settings opened then closed, changing Windows theme at this time will display settings | None | ==3.0.2.13 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/41) | +| When hovering over the menu, status bar characters disappear | None | >=3.0.0.11;<3.1.0.15 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/43) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Next Version Preview +Version number: 3.1.0.14 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.14.dev0) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/31217b1.md b/documents/en/updatelog/beta/3/31217b1.md new file mode 100644 index 00000000..5f06015e --- /dev/null +++ b/documents/en/updatelog/beta/3/31217b1.md @@ -0,0 +1,28 @@ +--- +title: 3.1.2.17beta1 +layout: doc +--- + +# 3.1.2.17beta1 +Release Date: 2026/01/23 + +## Update Content + +- Optimized performance +- Added setting delay settings +- Optimized clicker settings display +- Modified update log +- Fixed "langs.json does not exist" when displaying auto-start on boot + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.2.17beta1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/31217b3.md b/documents/en/updatelog/beta/3/31217b3.md new file mode 100644 index 00000000..03044ee3 --- /dev/null +++ b/documents/en/updatelog/beta/3/31217b3.md @@ -0,0 +1,30 @@ +--- +title: 3.1.2.17beta3 +layout: doc +--- + +# 3.1.2.17beta3 +Release Date: 2026/01/25 + +## Update Content + +- For beta versions, all clickmouse component icons will have 'pre' text below them. +- New message box version, now message box options are translated into Chinese, multilingual version will be released later. +- Fixed bug where clear cache tool checkboxes become unresponsive after selecting "Select All" +- Fixed issue where settings response delay slider displays as 1 +- Fixed bug where init program cannot run +- Refactored clickmouse cache clearing tool +- Modified logs, now reduces output text and is easier to manage +- Now cache calculation filters undeletable files, making calculations more accurate + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.2.17beta3) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32018b4.md b/documents/en/updatelog/beta/3/32018b4.md new file mode 100644 index 00000000..f53a3a56 --- /dev/null +++ b/documents/en/updatelog/beta/3/32018b4.md @@ -0,0 +1,31 @@ +--- +title: 3.2.0.18beta4 +layout: doc +--- + +# 3.2.0.18beta4 +Release Date: 2026/02/03 + +## Update Content + +- Completed update installation service +- Added "Report Bug" button +- Fixed some bugs: +- - When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups #123 +- - In English mode, dragging response delay, total delay prompt becomes Chinese #121 +- - Fixed issue where update resource decryption failed + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| If the latest version checked by clickmouse does not have clickmouse.7z, it will report an error | None | >=3.2.0.18beta3;<3.2.0.18beta7, only in beta versions | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/140) | +| Software update fails, showing 404 | None | >=3.2.0.18beta3;<3.2.0.18beta7, only in beta versions | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/151) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| If your language is Chinese, the maximum value unit will display in English | None | >=3.2.0.18beta4;<3.2.0.19beta9, only in beta versions | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/170) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.18beta4-re2) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32018b5.md b/documents/en/updatelog/beta/3/32018b5.md new file mode 100644 index 00000000..eb34cce6 --- /dev/null +++ b/documents/en/updatelog/beta/3/32018b5.md @@ -0,0 +1,28 @@ +--- +title: 3.2.0.18beta5 +layout: doc +--- + +# 3.2.0.18beta5 +Release Date: 2026/02/04 + +## Update Content + +- Added themes, original themes have been retranslated as "Style" +- ~~If the release is a remastered version, it will not detect the update~~ bug still exists + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| If the latest version checked by clickmouse does not have clickmouse.7z, it will report an error | None | >=3.2.0.18beta3;<3.2.0.18beta7, only in beta versions | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/140) | +| Software update fails, showing 404 | None | >=3.2.0.18beta3;<3.2.0.18beta7, only in beta versions | 3.2.0.18beta7 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/151) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| If your language is Chinese, the maximum value unit will display in English | None | >=3.2.0.18beta4;<3.2.0.19beta9, only in beta versions | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/170) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.18beta5) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32018b8.md b/documents/en/updatelog/beta/3/32018b8.md new file mode 100644 index 00000000..f26ff754 --- /dev/null +++ b/documents/en/updatelog/beta/3/32018b8.md @@ -0,0 +1,28 @@ +--- +title: 3.2.0.18beta8 +layout: doc +--- + +# 3.2.0.18beta8 +Release Date: 2026/02/14 + +## Update Content + +- Fixed update program bugs: +- - If the version number tag is a remastered version, the download program cannot be used and reports error 404 +- - Software update index error causes update failure, showing 404 +- - If the latest version checked by clickmouse does not have clickmouse.7z, it will report an error +- Documentation functionality completed +- Removed local update logs, changed to online document viewing +- Modified about interface prompt text + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| If your language is Chinese, the maximum value unit will display in English | None | >=3.2.0.18beta4;<3.2.0.19beta9, only in beta versions | 3.2.0.19beta9 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/170) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.18beta8-re1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32019b10.md b/documents/en/updatelog/beta/3/32019b10.md new file mode 100644 index 00000000..e20e8968 --- /dev/null +++ b/documents/en/updatelog/beta/3/32019b10.md @@ -0,0 +1,28 @@ +--- +title: 3.2.0.19beta10 +layout: doc +--- + +# 3.2.0.19beta10 +Release Date: 2026/02/19 + +## Update Content + +- Fix the problem that Init cannot run +- Removed unnecessary content + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Cannot load default total delay when first loading settings | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/182) | +| The title bar is light when the style is dark and open a window twice | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/183) | +| The folder will not revert when revert an update | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/184) | +| If there is an update and the installation is complete, the update is displayed as "updating" when opening it again | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/185) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19beta10) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32019b11.md b/documents/en/updatelog/beta/3/32019b11.md new file mode 100644 index 00000000..902d835d --- /dev/null +++ b/documents/en/updatelog/beta/3/32019b11.md @@ -0,0 +1,29 @@ +--- +title: 3.2.0.19beta11 +layout: doc +--- + +# 3.2.0.19beta11 +Release date: 2026/02/20 + +## Update content + +- Fix some bugs: +- - Rollback clickmouse update folder +- - Estimated time to load settings doesn't load default value for the first time +- - If there is an update and installed, then closing the update completed and opening again will show that it is updating +- - When the mode is dark and multiple windows are opened, the title bar becomes white +- Rollback when installing the update, close the window +- Prevent switching between clicking when running +- Optimize performance + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19beta11) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32019b9.md b/documents/en/updatelog/beta/3/32019b9.md new file mode 100644 index 00000000..e194f595 --- /dev/null +++ b/documents/en/updatelog/beta/3/32019b9.md @@ -0,0 +1,36 @@ +--- +title: 3.2.0.19beta9 +layout: doc +--- + +# 3.2.0.19beta9 +Release Date: 2026/02/18 + +## Update Content + +- Simplify components, optimize code structure, improve performance and compress installation package size. +- Fix some bugs: +- - Fix the problem that infinite clicking cannot be enabled in English mode. +- - Fix the error of "Paused" displayed in English mode. +- - Fix the problem that the unit of the maximum value is displayed in English if your language is Chinese. +- - Fix the problem that you need to click cancel to confirm the installation. +- Add the translation of the new feature in English. +- Remove the hotkey documentation from the help menu. +- Change the default response delay to 100ms, 1000ms is too slow. + + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Init cannot run | None | ==3.2.0.19beta9 | 3.2.0.18beta10 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/173) | +| Cannot load default total delay when first loading settings | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/182) | +| The title bar is light when the style is dark and open a window twice | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/183) | +| The folder will not revert when revert an update | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/184) | +| If there is an update and the installation is complete, the update is displayed as "updating" when opening it again | None | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/185) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19beta9) diff --git a/documents/en/updatelog/beta/3/32019rc1.md b/documents/en/updatelog/beta/3/32019rc1.md new file mode 100644 index 00000000..09a9b373 --- /dev/null +++ b/documents/en/updatelog/beta/3/32019rc1.md @@ -0,0 +1,25 @@ +--- +title: 3.2.0.19rc1 +layout: doc +--- + +# 3.2.0.19rc1 +Release date: 2026/02/22 + +## Update content + +- Add simple documentation and update settings +- Simple modification of styles +- Added security when updating +- Simplified components + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click here to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19rc1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32019rc2.md b/documents/en/updatelog/beta/3/32019rc2.md new file mode 100644 index 00000000..d912ed1a --- /dev/null +++ b/documents/en/updatelog/beta/3/32019rc2.md @@ -0,0 +1,22 @@ +--- +title: 3.2.0.19rc2 +layout: doc +--- + +# 3.2.0.19rc2 +Release date: 2026/02/24 + +## Update content + +- Update style + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click here to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19rc2) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32019rc3.md b/documents/en/updatelog/beta/3/32019rc3.md new file mode 100644 index 00000000..9436ae11 --- /dev/null +++ b/documents/en/updatelog/beta/3/32019rc3.md @@ -0,0 +1,21 @@ +--- +title: 3.2.0.19rc2 +layout: doc +--- + +# 3.2.0.19rc2 + +## Update Content + +- Bug fixes: +- - Tray right-click language display error +- - Cannot use "Set Delay" function +- - If you modify the hotkey, you cannot use the tray right-click + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19rc3) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32120a1.md b/documents/en/updatelog/beta/3/32120a1.md new file mode 100644 index 00000000..38a0631f --- /dev/null +++ b/documents/en/updatelog/beta/3/32120a1.md @@ -0,0 +1,28 @@ +--- +title: 3.2.1.20alpha1 +layout: doc +--- + +# 3.2.1.20alpha1 +Release date: 2026/03/10 + +## Update content + +- After that, new features will be added to the lab first, and then merged into the official version gradually. +- New experimental projects: More settings: +- - Reset startup components +- - Feedback software website +- - Reset documentation link button +- - Notification settings +- Bug fixes: +- - Tray right-click language display error +- - Cannot use "Set delay" function +- - If you modify the hotkey, you cannot use the tray right-click + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.20alpha1) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/32120a2.md b/documents/en/updatelog/beta/3/32120a2.md new file mode 100644 index 00000000..912ae91d --- /dev/null +++ b/documents/en/updatelog/beta/3/32120a2.md @@ -0,0 +1,18 @@ +--- +title: 3.2.1.20alpha2 +layout: doc +--- + +# 3.2.1.20alpha2 +Release date: 2026/03/14 + +## Update content +- Added a setting item to close the experiment menu when there are no experimental items + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.1.20alpha2) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/33022a4.md b/documents/en/updatelog/beta/3/33022a4.md new file mode 100644 index 00000000..01e44133 --- /dev/null +++ b/documents/en/updatelog/beta/3/33022a4.md @@ -0,0 +1,35 @@ +--- +title: 3.3.0.22alpha4 +layout: doc +--- + +# 3.3.0.22alpha4 +Release date: 2026/04/19 + +This is a development update. Upgraded from the original `3.2.1.20`, synchronized with the current `3.2.1.20` and `3.2.2.21` + +## Update content + +- Fix the following issues: +- - In the inverted or dark mode, non-windows default style menu bar will display abnormally: the font is the current style, but the background is the system color. +- - In the inverted or dark mode, non-windows default style title bar may "crash", the dark mode title bar is light color. +- - Clean cache cannot be cleaned +- Upgrade to Qt 6.11 version, fixing or adding some display: +- - Now, the maximize button will hide or become lighter, just like the effect of 3.1.0 using Qt 6.9, not the effect of 6.10. +- - Added immersive rounded menu bar and dropdown box, not the straight-cornered dropdown box and the uncropped rounded menu bar. +- Adjust the lower limit of response delay to 50ms, to fix the "crash" problem of the title bar. +- New product: `clickclean`, which has greatly simplified clickmouse, leaving only the clicker and its related settings, its update frequency is slower than clickmouse, and you need to manually check for updates. +- Now, startup on boot will run in the background. If you are an older version user, you need to reset the startup on boot configuration in the settings to enable it. +- Setting window icon changes to the clickmouse logo, not clickmouse logo with a setting icon. +- Changed the `More settings` item description to `To enable or disable experimental features, click here.` + +## ClickClean update content +- Setting window icon changes to the clickmouse logo, not clickmouse logo with a setting icon. + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.2.21) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/33023a5.md b/documents/en/updatelog/beta/3/33023a5.md new file mode 100644 index 00000000..17901d8a --- /dev/null +++ b/documents/en/updatelog/beta/3/33023a5.md @@ -0,0 +1,28 @@ +--- +title: 3.3.0.22alpha5 +layout: doc +--- + +# 3.3.0.22alpha5 +Release Date: 2026/05/23 + +> This is a development update of the 4th version of the `3.3.0` development cycle, synchronized with the current `3.2.3.22`. + +## Update Content + +- Now, the status bar will display the click status immediately when starting to click. +- If there is already a clickmouse instance running, clicking another clickmouse program will pop up a prompt box instead of displaying the window directly. +- *[Laboratory Functions]* The **Click attributes** and **Fast click settings** windows are now decoupled from the code and turned into independent gui files. +> For more information about code decoupling, please refer to [this](/en/blog/decoupling-code-and-ui) + +## ClickClean Update Content +- Now, the status bar will display the click status immediately when starting to click. +- If there is already a clickmouse instance running, clicking another clickmouse program will pop up a prompt box instead of displaying the window directly. + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Cannot open dev flags "Decoupling UI and program" | None | clickmouse beta, 3.3.0.23alpha5 | None | Fixing | https://github.com/xystudiocode/pyClickMouse/issues/255 | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.3.0.22alpha5) \ No newline at end of file diff --git a/documents/en/updatelog/beta/3/33023a6.md b/documents/en/updatelog/beta/3/33023a6.md new file mode 100644 index 00000000..befc25fe --- /dev/null +++ b/documents/en/updatelog/beta/3/33023a6.md @@ -0,0 +1,32 @@ +--- +title: 3.3.0.23alpha6 +layout: doc +--- + +# 3.3.0.23alpha6 + +Release Date: 2026/06/27 + +> This is a development test version, the 5th release in the `3.3.0` development cycle. + +## What's New +- [refactor] Upgraded the logging system, more detailed +- [refactot] Replaced some UI elements, enforcing the new UI +- [feat] Added two new settings for the clicker: +- - Changing some input box content won’t affect calculations +- - Changing some units won’t affect calculations +- [fix] Fixed some bugs and improved user experience +- - Values in the main window don’t change after changing default settings +- - Modifying default unit automatically updates the main window default unit +- - Unable to open the "Decoupling UI and program" developer option +- - Program crashes if total click duration exceeds 1.8e308 days +- Removed the “Quick Set Delay” interface as it wasn’t very useful +- [build] Upgraded the build system +- - Merged API, main library, and Cython version files +- - Updated pyd version implementation, allowing you to create pyd files for your Python version +- - Changed the location of runhook, moved it to the root directory +- - Moved git clean into runhook +- Added documentation for multiple prophecy versions + +## Download Link +[Click to Download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.3.0.23alpha6) \ No newline at end of file diff --git a/documents/en/updatelog/final/1/1000.md b/documents/en/updatelog/final/1/1000.md new file mode 100644 index 00000000..15569610 --- /dev/null +++ b/documents/en/updatelog/final/1/1000.md @@ -0,0 +1,22 @@ +--- +title: 1.0.0.0 +layout: doc +--- + +# 1.0.0.0 + +Release Date: 2025/08/03 + +## Update Content + +Initial version + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | Issue Link | +| --- | --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | None | + +## Download Link + +[Click to download](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.0) \ No newline at end of file diff --git a/documents/en/updatelog/final/1/1011.md b/documents/en/updatelog/final/1/1011.md new file mode 100644 index 00000000..3b78e335 --- /dev/null +++ b/documents/en/updatelog/final/1/1011.md @@ -0,0 +1,26 @@ +--- +title: 1.0.1.1 +layout: doc +--- + +# 1.0.1.1 + +Release Date: 2025/08/04 + +## Update Content + +- Updated 'About' interface: + +- - Added 'Support Author' button +- - Moved 'Update' button to the 'Help' menu in the main window +- Added click failure prompt + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Download Link + +[Click to download](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.1.0) \ No newline at end of file diff --git a/documents/en/updatelog/final/1/1022.md b/documents/en/updatelog/final/1/1022.md new file mode 100644 index 00000000..11e60f05 --- /dev/null +++ b/documents/en/updatelog/final/1/1022.md @@ -0,0 +1,22 @@ +--- +title: 1.0.2.2 +layout: doc +--- + +# 1.0.2.2 + +Release Date: 2025/08/08 + +## Update Content + +Added "Update Log" option. + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| When closing "Update Log", the main window also closes | None | 1.0.2.2 | 1.0.2.3 | Fixed | None | +| Some places display incorrectly | None | 1.0.2.2 | 1.0.2.3 | Fixed | None | + +## Download Link +[Click to download](https://github.com/xystudioc889/clickmouse/releases/tag/v1.0.2.2) \ No newline at end of file diff --git a/documents/en/updatelog/final/1/1023.md b/documents/en/updatelog/final/1/1023.md new file mode 100644 index 00000000..635e8771 --- /dev/null +++ b/documents/en/updatelog/final/1/1023.md @@ -0,0 +1,23 @@ +--- +title: 1.0.2.3 +layout: doc +--- + +# 1.0.2.3 + +Release Date: 2025/08/12 + +## Update Content + +- Modified some display characters + +- Fixed the issue where the main window also closes when closing "Update Log" + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Download Link +[Click to download](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.2.3) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/2004.md b/documents/en/updatelog/final/2/2004.md new file mode 100644 index 00000000..6894c839 --- /dev/null +++ b/documents/en/updatelog/final/2/2004.md @@ -0,0 +1,21 @@ +--- +title: 2.0.0.4 +layout: doc +--- + +# 2.0.0.4 + +Release Date: 2025/08/21 + +## Update Content + +- Rewrote the program's GUI interface using Python and wxPython, making the program more beautiful and concise. + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.0.0.0) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.0.0.4) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/2105.md b/documents/en/updatelog/final/2/2105.md new file mode 100644 index 00000000..babe151c --- /dev/null +++ b/documents/en/updatelog/final/2/2105.md @@ -0,0 +1,23 @@ +--- +title: 2.1.0.5 +layout: doc +--- + +# 2.1.0.5 + +Release Date: 2025/08/24 + +## Update Content + +- Added logging system. If there are bugs, it is recommended to provide log files at the same time. +- Added automatic update function, which can automatically detect new versions and download/install them. + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Update prompt not displayed | Please manually go to [github releases](https://github.com/xystudiocode/pyClickMouse/releases) or [gitee releases](https://gitee.com/xystudio889/pyClickMouse/releases) to manually download the new version | >=2.1.0.5;<2.2.0.7 | 2.2.0.7 | Fixed | None | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5 | None | Fixed | None | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.1.0.5) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.1.0.5) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/2116.md b/documents/en/updatelog/final/2/2116.md new file mode 100644 index 00000000..85294850 --- /dev/null +++ b/documents/en/updatelog/final/2/2116.md @@ -0,0 +1,22 @@ +--- +title: 2.1.1.6 +layout: doc +--- + +# 2.1.1.6 + +Release Date: 2025/08/25 + +## Update Content + +- ~~Fixed the issue where update prompt was not displayed~~ Still has bug, reverted fix. + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Update prompt not displayed | Please manually go to [github releases](https://github.com/xystudiocode/pyClickMouse/releases) or [gitee releases](https://gitee.com/xystudio889/pyClickMouse/releases) to manually download the new version | >=2.1.0.5;<2.2.0.7 | 2.2.0.7 | Fixed | None | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5 | None | Fixed | None | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.1.1.6) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.1.1.6) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/2207.md b/documents/en/updatelog/final/2/2207.md new file mode 100644 index 00000000..8e9e6903 --- /dev/null +++ b/documents/en/updatelog/final/2/2207.md @@ -0,0 +1,33 @@ +--- +title: 2.2.0.7 +layout: doc +--- + +# 2.2.0.7 + +Release Date: 2025/09/05 + +## Update Content + +- Added cache clearing functionality + +- Changed and added functions to the top menu bar: +- - Update-related functions moved to the Update menu bar +- - Added "Edit/Options" menu bar +- Fixed the issue where updates could not be checked + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5 | None | Fixed | None | + +## Next Version Preview +Version number: 2.3.0.8 (tentative) + +Expected update content: +- Add update installer, no need to replace folders +- Add installation manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.0.7) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.0.7) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/2218.md b/documents/en/updatelog/final/2/2218.md new file mode 100644 index 00000000..6dd4bd1e --- /dev/null +++ b/documents/en/updatelog/final/2/2218.md @@ -0,0 +1,34 @@ +--- +title: 2.2.1.8 +layout: doc +--- + +# 2.2.1.8 + +Release Date: 2025/10/02 + +## Update Content + +- Added language selection functionality +- Added file not found prompt +- Refactored some code + +## Known Issues + +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| 2.1.1.8 update log does not display version number | None | >=2.2.1.8;<2.2.3.10 | 2.2.3.10 | Fixed | None | +| About interface in English shows Chinese buttons | None | >=2.2.1.8;<2.2.3.10 | 2.2.3.10 | Fixed | None | +| Clear cache selecting "Select All" switches to "Partial Select" | None | >=2.2.1.8;<2.2.3.10 | 2.2.3.10 | Fixed | None | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5 | None | Fixed | None | + +## Next Version Preview +Version number: 2.3.0.8 (tentative) + +Expected update content: +- Add update installer, no need to replace folders +- Add installation manager +- Add command line + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.1.8) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.1.8) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/2229.md b/documents/en/updatelog/final/2/2229.md new file mode 100644 index 00000000..7e48429b --- /dev/null +++ b/documents/en/updatelog/final/2/2229.md @@ -0,0 +1,38 @@ +--- +title: 2.2.2.9 +layout: doc +--- + +# 2.2.2.9 + +Release Date: 2025/10/03 + +## Update Content + +- Fixed some bugs: +- - Fixed the issue where 2.1.1.8 update log does not display version number +- - Fixed the issue where Chinese buttons appear in the "About" page in English +- - Fixed "Clear Cache" issues: +- - - Fixed the issue where "Select All" switches to "Partially Selected" prompt +- - - Fixed the issue where partial selection displays as "Select None" + +- Updated "Changing language pack requires restart": +- - Modified language prompts and display icons +- - Modified click steps, no longer has prompts for saving only language or saving all settings +- - Removed "Restart Now" button + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5 | None | Fixed | None | + +## Next Version Preview +Version number: 2.3.0.11 (tentative) + +Expected update content: +- Add update installer, no need to replace folders +- Add installation manager +- Add command line + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.2.9) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.2.9) \ No newline at end of file diff --git a/documents/en/updatelog/final/2/22310.md b/documents/en/updatelog/final/2/22310.md new file mode 100644 index 00000000..155862f9 --- /dev/null +++ b/documents/en/updatelog/final/2/22310.md @@ -0,0 +1,28 @@ +--- +title: 2.2.3.10 +layout: doc +--- + +# 2.2.3.10 + +Release Date: 2025/11/29 + +## Update Content + +- Improved clickmouse quality + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5 | None | Fixed | None | + +## Next Version Preview +Version number: 2.3.0.11 (tentative) + +Expected update content: +- Add update installer, no need to replace folders +- Add installation manager +- Add command line + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.3.10) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.3.10) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/30011.md b/documents/en/updatelog/final/3/30011.md new file mode 100644 index 00000000..50ad7308 --- /dev/null +++ b/documents/en/updatelog/final/3/30011.md @@ -0,0 +1,46 @@ +--- +title: 3.0.0.11 +layout: doc +--- + +# 3.0.0.11 + +Release Date: 2025/12/14 + +## Update Content + +- UI refactored using Pyside6, giving the interface a fresh new look +- New setting content +- Added hotkey startup, hotkeys can be found in software help +- Added click input count functionality +- Added status bar to view clicking status. +- Temporarily disabled features originally planned for release in 2.3.0, postponed to 3.1.0.12. +- Fixed some bugs + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| English language pack has unexpected characters | None | ==3.0.0.11 | 3.0.1.12 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/26) | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| When hovering over the menu, status bar characters disappear | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/43) | +| After switching languages, the interface opened again would become the selected updated language, causing interface fragmentation | None | ==3.0.0.11 | 3.0.1.12 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/23) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview +Version number: 3.1.0.12 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager +- Documentation functionality +- Add command line and CLI + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.11) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.0.11) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/30112.md b/documents/en/updatelog/final/3/30112.md new file mode 100644 index 00000000..b0165dff --- /dev/null +++ b/documents/en/updatelog/final/3/30112.md @@ -0,0 +1,44 @@ +--- +title: 3.0.1.12 +layout: doc +--- + +# 3.0.1.12 + +Release Date: 2025/12/20 + +## Update Content + +- Optimized language packs +- - Modified the English language pack, fixed the issue where some version number characters displayed without spaces, and removed extra commas +- - Other language pack optimizations... +- Error style automatic uninstallation functionality +- Fixed some bugs: +- - After switching languages, the interface opened again would become the selected updated language, causing interface fragmentation +- - Fixed the issue where the English language pack had unexpected characters +- - Some other bugs... +- - Adjusted settings: Changed the 'Software needs to restart' interface to a pop-up window and removed character display +- - Removed clickmouse initialization, now automatically gets language + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview +Version number: 3.1.0.13 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.1.12) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.1.12) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/30213.md b/documents/en/updatelog/final/3/30213.md new file mode 100644 index 00000000..4a0adc17 --- /dev/null +++ b/documents/en/updatelog/final/3/30213.md @@ -0,0 +1,38 @@ +--- +title: 3.0.2.13 +layout: doc +--- + +# 3.0.2.13 + +Release Date: 2025/12/27 + +## Update Content + +- Optimized color management +- - Added Windows accent color detection functionality +- - Added dark title bar in light mode + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| After settings trigger a restart, it returns to the first page | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| Sometimes, style-changed buttons still have the original style color | None | ==3.0.2.13 | 3.0.3.14 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/40) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview +Version number: 3.1.0.14 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.2.13) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.2.13) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/30314.md b/documents/en/updatelog/final/3/30314.md new file mode 100644 index 00000000..9d441df3 --- /dev/null +++ b/documents/en/updatelog/final/3/30314.md @@ -0,0 +1,47 @@ +--- +title: 3.0.3.14 +layout: doc +--- + +# 3.0.3.14 + +Release Date: 2026/01/11 + +## Update Content + +- Fixed some issues: +- - English language pack has unexpected characters +- - Settings opened then closed, changing Windows theme at this time will display settings +- - After settings trigger a restart, it returns to the first page +- - When hovering over the menu, status bar characters disappear +- - Sometimes clicker ending does not cause button display changes +- Added retain settings tab page functionality +- Now when the clicker is running, clicker settings or time changes cannot be made to avoid misunderstandings. +- Modified styles: +- - Integrated styles into one file +- - Removed no-style mode +- - Fixed some style display bugs +- - Added style out-of-bounds protection + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| Settings cannot enable `Use default value when click count is wrong` | None | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview +Version number: 3.1.0.15 (tentative) + +Expected update content: +- Add an initialization program, no need to replace folders +- Add a package manager + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.3.14) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.3.14) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/31015.md b/documents/en/updatelog/final/3/31015.md new file mode 100644 index 00000000..7cf48fd7 --- /dev/null +++ b/documents/en/updatelog/final/3/31015.md @@ -0,0 +1,53 @@ +--- +title: 3.1.0.15 +layout: doc +--- + +# 3.1.0.15 + +Release Date: 2026/01/11 + +## Update Content + +- Added package manager +- Added initialization program and Control Panel installation information functionality +- Added uninstall clickmouse functionality +- Added clickmouse restore environment component extension +- Modified styles: +- - Added system color hover highlight +- - Settings checkbox shows white checkmark in light mode +- - Fixed some style bugs +- - Some other features +- Fixed some bugs: +- - Settings cannot enable "Use default value when click count is wrong" +- - Fixed some style issues +- - Other bug fixes + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| Settings response delay slider displays as 1 | None | >=3.0.0.11;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview +## 3.1.1.16 +- Add auto-start on boot settings +## 3.2.0.17 +- Add update installer +- Add some settings +- - Theme settings +- - Documentation settings +- - ~~Update settings~~ temporarily not added in 3.2.0 version +- Fix some bugs +- Documentation functionality +- Remove local update logs + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.15) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.1.0.15) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/31116.md b/documents/en/updatelog/final/3/31116.md new file mode 100644 index 00000000..ef259f72 --- /dev/null +++ b/documents/en/updatelog/final/3/31116.md @@ -0,0 +1,46 @@ +--- +title: 3.1.1.16 +layout: doc +--- + +# 3.1.1.16 + +Release Date: 2026/01/22 + +## Update Content + +- Added auto-start on boot settings +- Added anti-multiple instance functionality +- Optimized program performance +- Added update file automatic modification of Control Panel version number functionality +- Fixed some bugs + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| Settings response delay slider displays as 1 | None | >=3.0.0.11;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| Clear cache tool checkboxes become unresponsive after selecting "Select All" | Manually check sub-options | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| init program cannot run | Manually run as administrator | ==3.1.1.16 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/116) | +| Auto-start on boot shows "langs.json does not exist" | Manually start | ==3.1.1.16 | 3.1.2.17 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/90) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview + +## 3.2.0.17 +- Add update installer +- Add some settings +- - Theme settings +- - Documentation settings +- - ~~Update settings~~ temporarily not added in 3.2.0 version +- Fix some bugs +- Documentation functionality +- Remove local update logs + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.1.16) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.1.1.16) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/31217.md b/documents/en/updatelog/final/3/31217.md new file mode 100644 index 00000000..c1f4ed2b --- /dev/null +++ b/documents/en/updatelog/final/3/31217.md @@ -0,0 +1,53 @@ +--- +title: 3.1.2.17 +layout: doc +--- + +# 3.1.2.17 + +Release Date: 2026/01/31 + +## Update Content + +- For beta versions, all clickmouse component icons will have 'pre' text below them. +- New message box version, now message box options are translated into Chinese, multilingual version will be released later. +- Fixed bug where clear cache tool checkboxes become unresponsive after selecting "Select All" +- Fixed issue where settings response delay slider displays as 1 +- Fixed issue where auto-start on boot cannot run +- Refactored clickmouse cache clearing tool +- Modified logs, now reduces output text and is easier to manage +- Now cache calculation filters undeletable files, making calculations more accurate +- Optimized performance +- Added setting delay settings +- Optimized clicker settings display +- Modified update log +- Fixed "langs.json does not exist" when displaying auto-start on boot + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| If the release is a remastered version, it will not detect the update | None | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| When there is an update, opening the application from the tray shows there is an update, causing continuous pop-ups | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| In English mode, dragging response delay, total delay prompt becomes Chinese | None | >=3.1.2.17 | None | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/121) | +| English mode cannot enable infinite clicking | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| English mode "Paused" display error | None | >=3.0.0.11 | 3.1.3.18 | Fixed | [Issue Link](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| If the hotkey is modified, the tray right-click cannot be used | >=3.2.0.19beta9; only in beta versions | None | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/206) | + +## Next Version Preview + +## 3.1.3.18 +- Add update installer +- Add some settings +- - Theme settings +- - Documentation settings +- - ~~Update settings~~ temporarily not added in 3.2.0 version +- - Hotkey settings +- Optimize performance +- Fix some bugs +- Documentation functionality +- Remove local update logs + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.2.17) or [China Accelerated Link](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.1.2.17) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/31318.md b/documents/en/updatelog/final/3/31318.md new file mode 100644 index 00000000..35e39329 --- /dev/null +++ b/documents/en/updatelog/final/3/31318.md @@ -0,0 +1,39 @@ +--- +title: 3.1.3.18 +layout: doc +--- + +# 3.1.3.18 +Release Date: 2026/02/19 + +## Update Log + +- Add "Feedback" button +- Fix some bugs: + - When there is an update, the application will always pop up the update notification, which will cause the application to always pop up the update notification. + - The drag response delay in English mode is too long, and the total delay prompt is in Chinese. + - Fix the problem of decryption of update resources. + - If the version label is a reissue, the download program cannot be used and an error 404 is reported. + - Fix the problem of unable to enable infinite clicking in English mode. + - Fix the problem of "Paused" in English mode is displayed incorrectly. + - Fix the problem of the unit of the maximum value being displayed in English if your language is Chinese. + - Fix the problem of not being able to confirm the installation, you need to click cancel to install. +- Document function completed +- Remove the local update log and turn it into online document consultation. +- Modify the prompt text of the about interface. +- Significantly simplify components, optimize code structure, improve performance and compress the installation package size. +- Modify the default response delay to 100ms, 1000ms is too slow. + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| Cannot load default total delay when first loading settings | None | 3.1.3.18 | 3.2.0.19 | Already fixed in beta version | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/182) | +| The title bar is light when the style is dark and open a window twice | None | 3.1.3.18 | 3.2.0.19 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/183) | +| The folder will not revert when revert an update | None | 3.1.3.18 | 3.2.0.19 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/184) | +| If there is an update and the installation is complete, the update is displayed as "updating" when opening it again | None | 3.1.3.18 | 3.2.0.19 | Fixed | [isssue link](https://github.com/xystudiocode/pyClickMouse/issues/185) | +| Tray right-click language display error | None | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| Unable to use the “Set Delay” function | None | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | Fixed | [issue link](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| Clean cache cannot clean | None | >3.1.3.18;<3.2.1.20 | 3.2.1.20 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/234 | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.3.18) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/32019.md b/documents/en/updatelog/final/3/32019.md new file mode 100644 index 00000000..ead4d298 --- /dev/null +++ b/documents/en/updatelog/final/3/32019.md @@ -0,0 +1,40 @@ +--- +title: 3.2.0.19 +layout: doc +--- + +# 3.2.0.19 +Release date: 2026/03/14 + +## Update content + +- Completed update installation service +- Added "Feedback bug" button +- Fixed some bugs: +- - The estimated time to load the default settings is not loaded for the first time +- - If there is an update and the installation is complete, then closing the update completed and opening again will show that it is updating +- - The folder will not be rolled back when rolling back updates +- - When the mode is dark and multiple windows are opened, the title bar becomes white +- - The language of the right-click menu in the tray is incorrect +- - The "Set delay" function cannot be used +- Added themes, the original theme has been re-translated into "style" +- Document function completed +- Removed local update log, and the online documentation is consulted +- Modified the prompt text in the About interface +- Compressed the installation package size +- Removed the hotkey help in the "Help" menu, because custom hotkeys have been added. +- Modified the default response delay to 100ms, 1000ms delay is too slow. +- Simplified unnecessary content +- Prevent switching between clicking when running +- Optimize performance +- Added update settings +- Simple style modification + +## Known issues +| Problem description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| Clean cache cannot clean | None | >3.1.3.18;<3.2.1.20 | 3.2.1.20 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/234 | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/32120.md b/documents/en/updatelog/final/3/32120.md new file mode 100644 index 00000000..204a017f --- /dev/null +++ b/documents/en/updatelog/final/3/32120.md @@ -0,0 +1,26 @@ +--- +title: 3.2.1.20 +layout: doc +--- + +# 3.2.1.20 +Release date: 2026/04/11 + +## Update Content + +- Fix the following issues: +- - Clean cache cannot be cleaned +- Upgrade to Qt 6.11 version, fixing or adding some display: +- - Now, the maximize button will hide or become lighter, just like the effect of 3.1.0 using Qt 6.9, not the effect of 6.10. +- - Added immersive rounded menu bar and dropdown box, not the straight-cornered dropdown box and the uncropped rounded menu bar. +- New product: `clickclean`, which has greatly simplified clickmouse, leaving only the clicker and its related settings, its update frequency is slower than clickmouse, and you need to manually check for updates. +- Now, startup on boot will run in the background. If you are an older version user, you need to reset the startup on boot configuration in the settings to enable it. + +## Known issues + +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| Non-default themes in inverted or dark mode display the title bar and menus abnormally | None | >3.2.0.19;<3.2.2.21 | 3.2.2.21 | Fixed | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.1.20) diff --git a/documents/en/updatelog/final/3/32221.md b/documents/en/updatelog/final/3/32221.md new file mode 100644 index 00000000..e4b95fa4 --- /dev/null +++ b/documents/en/updatelog/final/3/32221.md @@ -0,0 +1,29 @@ +--- +title: 3.2.2.21 +layout: doc +--- + +# 3.2.2.21 +Release date: 2026/04/19 + +This is a minor update, mainly fixing some known issues. + +## Update content + +- Fix the following issues: +- - In the inverted or dark mode, non-windows default style menu bar will display abnormally: the font is the current style, but the background is the system color. +- - In the inverted or dark mode, non-windows default style title bar may "crash", the dark mode title bar is light color. +- Adjust the lower limit of response delay to 50ms, to fix the "crash" problem of the title bar. +- Setting window icon changes to the clickmouse logo, not clickmouse logo with a setting icon. +- Disabled the lab. + +## ClickClean update content +- Setting window icon changes to the clickmouse logo, not clickmouse logo with a setting icon. + +## Known issues +| Issue description | Solution | Affected version | Fixed version | Status | Issue link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Download link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.2.21) \ No newline at end of file diff --git a/documents/en/updatelog/final/3/32322.md b/documents/en/updatelog/final/3/32322.md new file mode 100644 index 00000000..9e6f9e8d --- /dev/null +++ b/documents/en/updatelog/final/3/32322.md @@ -0,0 +1,26 @@ +--- +title: 3.2.3.22 +layout: doc +--- + +# 3.2.3.22 +Release Date: 2026/05/23 + +> This is a development update of the 4th version of the `3.3.0` development cycle, synchronized with the current `3.2.3.22`. + +## Update Content + +- Now, the status bar will display the click status immediately when starting to click. +- If there is already a clickmouse instance running, clicking another clickmouse program will pop up a prompt box instead of displaying the window directly. + +## ClickClean Update Content +- Now, the status bar will display the click status immediately when starting to click. +- If there is already a clickmouse instance running, clicking another clickmouse program will pop up a prompt box instead of displaying the window directly. + +## Known Issues +| Issue Description | Solution | Affected Version | Fixed Version | Status | Issue Link | +| --- | --- | --- | --- | --- | --- | +| None | None | None | None | None | None | + +## Download Link +[Click to download](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.3.22) \ No newline at end of file diff --git a/documents/en/updatelog/index.md b/documents/en/updatelog/index.md new file mode 100644 index 00000000..4ac3611e --- /dev/null +++ b/documents/en/updatelog/index.md @@ -0,0 +1,2 @@ +# Update Log +Please go to the directory to view the update log. \ No newline at end of file diff --git a/documents/index.md b/documents/index.md new file mode 100644 index 00000000..fd599452 --- /dev/null +++ b/documents/index.md @@ -0,0 +1,26 @@ + + +# Please select your language + +- [English](/en/) +- [简体中文](/zh-CN/) \ No newline at end of file diff --git a/documents/public/imgs/clickclean/en/dark/home.png b/documents/public/imgs/clickclean/en/dark/home.png new file mode 100644 index 00000000..297e63a2 Binary files /dev/null and b/documents/public/imgs/clickclean/en/dark/home.png differ diff --git a/documents/public/imgs/clickclean/en/dark/setting.png b/documents/public/imgs/clickclean/en/dark/setting.png new file mode 100644 index 00000000..85acba7a Binary files /dev/null and b/documents/public/imgs/clickclean/en/dark/setting.png differ diff --git a/documents/public/imgs/clickclean/en/light/home.png b/documents/public/imgs/clickclean/en/light/home.png new file mode 100644 index 00000000..ec4f9f50 Binary files /dev/null and b/documents/public/imgs/clickclean/en/light/home.png differ diff --git a/documents/public/imgs/clickclean/en/light/setting.png b/documents/public/imgs/clickclean/en/light/setting.png new file mode 100644 index 00000000..3c434405 Binary files /dev/null and b/documents/public/imgs/clickclean/en/light/setting.png differ diff --git a/documents/public/imgs/clickclean/zh-CN/dark/home.png b/documents/public/imgs/clickclean/zh-CN/dark/home.png new file mode 100644 index 00000000..452b94dc Binary files /dev/null and b/documents/public/imgs/clickclean/zh-CN/dark/home.png differ diff --git a/documents/public/imgs/clickclean/zh-CN/dark/setting.png b/documents/public/imgs/clickclean/zh-CN/dark/setting.png new file mode 100644 index 00000000..df6934ef Binary files /dev/null and b/documents/public/imgs/clickclean/zh-CN/dark/setting.png differ diff --git a/documents/public/imgs/clickclean/zh-CN/light/home.png b/documents/public/imgs/clickclean/zh-CN/light/home.png new file mode 100644 index 00000000..76256573 Binary files /dev/null and b/documents/public/imgs/clickclean/zh-CN/light/home.png differ diff --git a/documents/public/imgs/clickclean/zh-CN/light/setting.png b/documents/public/imgs/clickclean/zh-CN/light/setting.png new file mode 100644 index 00000000..6ffb99d8 Binary files /dev/null and b/documents/public/imgs/clickclean/zh-CN/light/setting.png differ diff --git a/documents/public/imgs/en/mergeSteps.png b/documents/public/imgs/en/mergeSteps.png new file mode 100644 index 00000000..226a017f Binary files /dev/null and b/documents/public/imgs/en/mergeSteps.png differ diff --git a/documents/public/imgs/faq/dark/lang_not_found.png b/documents/public/imgs/faq/dark/lang_not_found.png new file mode 100644 index 00000000..dafa0380 Binary files /dev/null and b/documents/public/imgs/faq/dark/lang_not_found.png differ diff --git a/documents/public/imgs/faq/en/dark/input_disable.png b/documents/public/imgs/faq/en/dark/input_disable.png new file mode 100644 index 00000000..772fcf74 Binary files /dev/null and b/documents/public/imgs/faq/en/dark/input_disable.png differ diff --git a/documents/public/imgs/faq/en/dark/ipk_not_found.png b/documents/public/imgs/faq/en/dark/ipk_not_found.png new file mode 100644 index 00000000..9d77d904 Binary files /dev/null and b/documents/public/imgs/faq/en/dark/ipk_not_found.png differ diff --git a/documents/public/imgs/faq/en/dark/stop_click.png b/documents/public/imgs/faq/en/dark/stop_click.png new file mode 100644 index 00000000..9759fb83 Binary files /dev/null and b/documents/public/imgs/faq/en/dark/stop_click.png differ diff --git a/documents/public/imgs/faq/en/dark/update_disable.png b/documents/public/imgs/faq/en/dark/update_disable.png new file mode 100644 index 00000000..90bd184f Binary files /dev/null and b/documents/public/imgs/faq/en/dark/update_disable.png differ diff --git a/documents/public/imgs/faq/en/light/input_disable.png b/documents/public/imgs/faq/en/light/input_disable.png new file mode 100644 index 00000000..4b22da32 Binary files /dev/null and b/documents/public/imgs/faq/en/light/input_disable.png differ diff --git a/documents/public/imgs/faq/en/light/ipk_not_found.png b/documents/public/imgs/faq/en/light/ipk_not_found.png new file mode 100644 index 00000000..fe3dd174 Binary files /dev/null and b/documents/public/imgs/faq/en/light/ipk_not_found.png differ diff --git a/documents/public/imgs/faq/en/light/stop_click.png b/documents/public/imgs/faq/en/light/stop_click.png new file mode 100644 index 00000000..7d43975c Binary files /dev/null and b/documents/public/imgs/faq/en/light/stop_click.png differ diff --git a/documents/public/imgs/faq/en/light/update_disable.png b/documents/public/imgs/faq/en/light/update_disable.png new file mode 100644 index 00000000..5b7d493b Binary files /dev/null and b/documents/public/imgs/faq/en/light/update_disable.png differ diff --git a/documents/public/imgs/faq/light/lang_not_found.png b/documents/public/imgs/faq/light/lang_not_found.png new file mode 100644 index 00000000..4b6211e5 Binary files /dev/null and b/documents/public/imgs/faq/light/lang_not_found.png differ diff --git a/documents/public/imgs/faq/zh-CN/dark/input_disable.png b/documents/public/imgs/faq/zh-CN/dark/input_disable.png new file mode 100644 index 00000000..3b234c4b Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/dark/input_disable.png differ diff --git a/documents/public/imgs/faq/zh-CN/dark/ipk_not_found.png b/documents/public/imgs/faq/zh-CN/dark/ipk_not_found.png new file mode 100644 index 00000000..1cfd4e74 Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/dark/ipk_not_found.png differ diff --git a/documents/public/imgs/faq/zh-CN/dark/stop_click.png b/documents/public/imgs/faq/zh-CN/dark/stop_click.png new file mode 100644 index 00000000..a22aeb82 Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/dark/stop_click.png differ diff --git a/documents/public/imgs/faq/zh-CN/dark/update_disable.png b/documents/public/imgs/faq/zh-CN/dark/update_disable.png new file mode 100644 index 00000000..d065bcef Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/dark/update_disable.png differ diff --git a/documents/public/imgs/faq/zh-CN/light/input_disable.png b/documents/public/imgs/faq/zh-CN/light/input_disable.png new file mode 100644 index 00000000..b9109a07 Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/light/input_disable.png differ diff --git a/documents/public/imgs/faq/zh-CN/light/ipk_not_found.png b/documents/public/imgs/faq/zh-CN/light/ipk_not_found.png new file mode 100644 index 00000000..d17edb7b Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/light/ipk_not_found.png differ diff --git a/documents/public/imgs/faq/zh-CN/light/stop_click.png b/documents/public/imgs/faq/zh-CN/light/stop_click.png new file mode 100644 index 00000000..78378b5f Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/light/stop_click.png differ diff --git a/documents/public/imgs/faq/zh-CN/light/update_disable.png b/documents/public/imgs/faq/zh-CN/light/update_disable.png new file mode 100644 index 00000000..c2417746 Binary files /dev/null and b/documents/public/imgs/faq/zh-CN/light/update_disable.png differ diff --git a/documents/public/imgs/features/en/dark/about.png b/documents/public/imgs/features/en/dark/about.png new file mode 100644 index 00000000..1d55c5a4 Binary files /dev/null and b/documents/public/imgs/features/en/dark/about.png differ diff --git a/documents/public/imgs/features/en/dark/cleancache.png b/documents/public/imgs/features/en/dark/cleancache.png new file mode 100644 index 00000000..7667552b Binary files /dev/null and b/documents/public/imgs/features/en/dark/cleancache.png differ diff --git a/documents/public/imgs/features/en/dark/settings/clicker.png b/documents/public/imgs/features/en/dark/settings/clicker.png new file mode 100644 index 00000000..0842bd9b Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/clicker.png differ diff --git a/documents/public/imgs/features/en/dark/settings/document.png b/documents/public/imgs/features/en/dark/settings/document.png new file mode 100644 index 00000000..475912ca Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/document.png differ diff --git a/documents/public/imgs/features/en/dark/settings/general.png b/documents/public/imgs/features/en/dark/settings/general.png new file mode 100644 index 00000000..ded83544 Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/general.png differ diff --git a/documents/public/imgs/features/en/dark/settings/hotkey.png b/documents/public/imgs/features/en/dark/settings/hotkey.png new file mode 100644 index 00000000..b38299c8 Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/hotkey.png differ diff --git a/documents/public/imgs/features/en/dark/settings/lab.png b/documents/public/imgs/features/en/dark/settings/lab.png new file mode 100644 index 00000000..49ea3ff9 Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/lab.png differ diff --git a/documents/public/imgs/features/en/dark/settings/notify.png b/documents/public/imgs/features/en/dark/settings/notify.png new file mode 100644 index 00000000..26c3e5de Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/notify.png differ diff --git a/documents/public/imgs/features/en/dark/settings/style.png b/documents/public/imgs/features/en/dark/settings/style.png new file mode 100644 index 00000000..a0e4a382 Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/style.png differ diff --git a/documents/public/imgs/features/en/dark/settings/update.png b/documents/public/imgs/features/en/dark/settings/update.png new file mode 100644 index 00000000..e20f3a68 Binary files /dev/null and b/documents/public/imgs/features/en/dark/settings/update.png differ diff --git a/documents/public/imgs/features/en/light/about.png b/documents/public/imgs/features/en/light/about.png new file mode 100644 index 00000000..f7143e70 Binary files /dev/null and b/documents/public/imgs/features/en/light/about.png differ diff --git a/documents/public/imgs/features/en/light/cleancache.png b/documents/public/imgs/features/en/light/cleancache.png new file mode 100644 index 00000000..3d21630c Binary files /dev/null and b/documents/public/imgs/features/en/light/cleancache.png differ diff --git a/documents/public/imgs/features/en/light/settings/clicker.png b/documents/public/imgs/features/en/light/settings/clicker.png new file mode 100644 index 00000000..6b3166fe Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/clicker.png differ diff --git a/documents/public/imgs/features/en/light/settings/document.png b/documents/public/imgs/features/en/light/settings/document.png new file mode 100644 index 00000000..f9ef9877 Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/document.png differ diff --git a/documents/public/imgs/features/en/light/settings/general.png b/documents/public/imgs/features/en/light/settings/general.png new file mode 100644 index 00000000..5ad40f81 Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/general.png differ diff --git a/documents/public/imgs/features/en/light/settings/hotkey.png b/documents/public/imgs/features/en/light/settings/hotkey.png new file mode 100644 index 00000000..511c6964 Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/hotkey.png differ diff --git a/documents/public/imgs/features/en/light/settings/lab.png b/documents/public/imgs/features/en/light/settings/lab.png new file mode 100644 index 00000000..0e4f554f Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/lab.png differ diff --git a/documents/public/imgs/features/en/light/settings/notify.png b/documents/public/imgs/features/en/light/settings/notify.png new file mode 100644 index 00000000..81fe2b0c Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/notify.png differ diff --git a/documents/public/imgs/features/en/light/settings/style.png b/documents/public/imgs/features/en/light/settings/style.png new file mode 100644 index 00000000..e7586bad Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/style.png differ diff --git a/documents/public/imgs/features/en/light/settings/update.png b/documents/public/imgs/features/en/light/settings/update.png new file mode 100644 index 00000000..f7eb5531 Binary files /dev/null and b/documents/public/imgs/features/en/light/settings/update.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/about.png b/documents/public/imgs/features/zh-CN/dark/about.png new file mode 100644 index 00000000..9d23ca32 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/about.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/cleancache.png b/documents/public/imgs/features/zh-CN/dark/cleancache.png new file mode 100644 index 00000000..e989f855 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/cleancache.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/clicker.png b/documents/public/imgs/features/zh-CN/dark/settings/clicker.png new file mode 100644 index 00000000..8878cd1c Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/clicker.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/document.png b/documents/public/imgs/features/zh-CN/dark/settings/document.png new file mode 100644 index 00000000..50b031bc Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/document.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/general.png b/documents/public/imgs/features/zh-CN/dark/settings/general.png new file mode 100644 index 00000000..649c2ca6 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/general.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/hotkey.png b/documents/public/imgs/features/zh-CN/dark/settings/hotkey.png new file mode 100644 index 00000000..aba6411f Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/hotkey.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/lab.png b/documents/public/imgs/features/zh-CN/dark/settings/lab.png new file mode 100644 index 00000000..cd7cd80d Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/lab.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/notify.png b/documents/public/imgs/features/zh-CN/dark/settings/notify.png new file mode 100644 index 00000000..6d659c5c Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/notify.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/style.png b/documents/public/imgs/features/zh-CN/dark/settings/style.png new file mode 100644 index 00000000..3ac1a830 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/style.png differ diff --git a/documents/public/imgs/features/zh-CN/dark/settings/update.png b/documents/public/imgs/features/zh-CN/dark/settings/update.png new file mode 100644 index 00000000..7f92b6d6 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/dark/settings/update.png differ diff --git a/documents/public/imgs/features/zh-CN/light/about.png b/documents/public/imgs/features/zh-CN/light/about.png new file mode 100644 index 00000000..3d78f2c5 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/about.png differ diff --git a/documents/public/imgs/features/zh-CN/light/cleancache.png b/documents/public/imgs/features/zh-CN/light/cleancache.png new file mode 100644 index 00000000..1972eabe Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/cleancache.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/clicker.png b/documents/public/imgs/features/zh-CN/light/settings/clicker.png new file mode 100644 index 00000000..b807938f Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/clicker.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/document.png b/documents/public/imgs/features/zh-CN/light/settings/document.png new file mode 100644 index 00000000..ba9fce38 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/document.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/general.png b/documents/public/imgs/features/zh-CN/light/settings/general.png new file mode 100644 index 00000000..a6f2328c Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/general.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/hotkey.png b/documents/public/imgs/features/zh-CN/light/settings/hotkey.png new file mode 100644 index 00000000..b336fdf0 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/hotkey.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/lab.png b/documents/public/imgs/features/zh-CN/light/settings/lab.png new file mode 100644 index 00000000..0ac41e3a Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/lab.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/notify.png b/documents/public/imgs/features/zh-CN/light/settings/notify.png new file mode 100644 index 00000000..5b510f1a Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/notify.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/style.png b/documents/public/imgs/features/zh-CN/light/settings/style.png new file mode 100644 index 00000000..75540b71 Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/style.png differ diff --git a/documents/public/imgs/features/zh-CN/light/settings/update.png b/documents/public/imgs/features/zh-CN/light/settings/update.png new file mode 100644 index 00000000..1ce7a60f Binary files /dev/null and b/documents/public/imgs/features/zh-CN/light/settings/update.png differ diff --git a/documents/public/imgs/icons/cmd/dark.png b/documents/public/imgs/icons/cmd/dark.png new file mode 100644 index 00000000..dff848a7 Binary files /dev/null and b/documents/public/imgs/icons/cmd/dark.png differ diff --git a/documents/public/imgs/icons/cmd/light.png b/documents/public/imgs/icons/cmd/light.png new file mode 100644 index 00000000..9c35a4ea Binary files /dev/null and b/documents/public/imgs/icons/cmd/light.png differ diff --git a/documents/public/imgs/icons/icon.ico b/documents/public/imgs/icons/icon.ico new file mode 100644 index 00000000..3724d95b Binary files /dev/null and b/documents/public/imgs/icons/icon.ico differ diff --git a/documents/public/imgs/install/en/dark/clickmouse.png b/documents/public/imgs/install/en/dark/clickmouse.png new file mode 100644 index 00000000..84a71884 Binary files /dev/null and b/documents/public/imgs/install/en/dark/clickmouse.png differ diff --git a/documents/public/imgs/install/en/dark/compoments.png b/documents/public/imgs/install/en/dark/compoments.png new file mode 100644 index 00000000..1134f412 Binary files /dev/null and b/documents/public/imgs/install/en/dark/compoments.png differ diff --git a/documents/public/imgs/install/en/dark/finish.png b/documents/public/imgs/install/en/dark/finish.png new file mode 100644 index 00000000..75bd5b06 Binary files /dev/null and b/documents/public/imgs/install/en/dark/finish.png differ diff --git a/documents/public/imgs/install/en/dark/license.png b/documents/public/imgs/install/en/dark/license.png new file mode 100644 index 00000000..f8733ddc Binary files /dev/null and b/documents/public/imgs/install/en/dark/license.png differ diff --git a/documents/public/imgs/install/en/dark/shortcut.png b/documents/public/imgs/install/en/dark/shortcut.png new file mode 100644 index 00000000..666ddb44 Binary files /dev/null and b/documents/public/imgs/install/en/dark/shortcut.png differ diff --git a/documents/public/imgs/install/en/light/clickmouse.png b/documents/public/imgs/install/en/light/clickmouse.png new file mode 100644 index 00000000..d66fbff9 Binary files /dev/null and b/documents/public/imgs/install/en/light/clickmouse.png differ diff --git a/documents/public/imgs/install/en/light/compoments.png b/documents/public/imgs/install/en/light/compoments.png new file mode 100644 index 00000000..a50c9a94 Binary files /dev/null and b/documents/public/imgs/install/en/light/compoments.png differ diff --git a/documents/public/imgs/install/en/light/finish.png b/documents/public/imgs/install/en/light/finish.png new file mode 100644 index 00000000..d7e1b782 Binary files /dev/null and b/documents/public/imgs/install/en/light/finish.png differ diff --git a/documents/public/imgs/install/en/light/license.png b/documents/public/imgs/install/en/light/license.png new file mode 100644 index 00000000..27ab412a Binary files /dev/null and b/documents/public/imgs/install/en/light/license.png differ diff --git a/documents/public/imgs/install/en/light/shortcut.png b/documents/public/imgs/install/en/light/shortcut.png new file mode 100644 index 00000000..771dff43 Binary files /dev/null and b/documents/public/imgs/install/en/light/shortcut.png differ diff --git a/documents/public/imgs/install/zh-CN/dark/clickmouse.png b/documents/public/imgs/install/zh-CN/dark/clickmouse.png new file mode 100644 index 00000000..dae0d9a1 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/dark/clickmouse.png differ diff --git a/documents/public/imgs/install/zh-CN/dark/compoments.png b/documents/public/imgs/install/zh-CN/dark/compoments.png new file mode 100644 index 00000000..945d87aa Binary files /dev/null and b/documents/public/imgs/install/zh-CN/dark/compoments.png differ diff --git a/documents/public/imgs/install/zh-CN/dark/finish.png b/documents/public/imgs/install/zh-CN/dark/finish.png new file mode 100644 index 00000000..482cd25d Binary files /dev/null and b/documents/public/imgs/install/zh-CN/dark/finish.png differ diff --git a/documents/public/imgs/install/zh-CN/dark/license.png b/documents/public/imgs/install/zh-CN/dark/license.png new file mode 100644 index 00000000..8e2731a3 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/dark/license.png differ diff --git a/documents/public/imgs/install/zh-CN/dark/shortcut.png b/documents/public/imgs/install/zh-CN/dark/shortcut.png new file mode 100644 index 00000000..783e6bb0 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/dark/shortcut.png differ diff --git a/documents/public/imgs/install/zh-CN/light/clickmouse.png b/documents/public/imgs/install/zh-CN/light/clickmouse.png new file mode 100644 index 00000000..186f43c4 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/light/clickmouse.png differ diff --git a/documents/public/imgs/install/zh-CN/light/compoments.png b/documents/public/imgs/install/zh-CN/light/compoments.png new file mode 100644 index 00000000..27ebb201 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/light/compoments.png differ diff --git a/documents/public/imgs/install/zh-CN/light/finish.png b/documents/public/imgs/install/zh-CN/light/finish.png new file mode 100644 index 00000000..a8903cd4 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/light/finish.png differ diff --git a/documents/public/imgs/install/zh-CN/light/license.png b/documents/public/imgs/install/zh-CN/light/license.png new file mode 100644 index 00000000..7934edc0 Binary files /dev/null and b/documents/public/imgs/install/zh-CN/light/license.png differ diff --git a/documents/public/imgs/install/zh-CN/light/shortcut.png b/documents/public/imgs/install/zh-CN/light/shortcut.png new file mode 100644 index 00000000..5618ed3c Binary files /dev/null and b/documents/public/imgs/install/zh-CN/light/shortcut.png differ diff --git a/documents/public/imgs/zh-CN/mergeSteps.png b/documents/public/imgs/zh-CN/mergeSteps.png new file mode 100644 index 00000000..e0e41890 Binary files /dev/null and b/documents/public/imgs/zh-CN/mergeSteps.png differ diff --git a/documents/zh-CN/blog/decoupling-code-and-ui.md b/documents/zh-CN/blog/decoupling-code-and-ui.md new file mode 100644 index 00000000..5852eb11 --- /dev/null +++ b/documents/zh-CN/blog/decoupling-code-and-ui.md @@ -0,0 +1,60 @@ +--- +title: Decoupling code and ui +layout: doc +--- + +# ui和代码解耦 + +## 背景 + +- 为了增加可扩展性,用户可以导入其他玩家的gui文件。 +- 减少代码冗余 + +## 结果 + +把所有ui控制的代码都移动到`res/ui/`下的gui文件,这样就可以通过导入其他玩家的gui文件来扩展功能。 + +把源码本身变成一个代码库,通过`name`的组件名字属性来修改操作 + +## 格式 + +`gui`文件采用json格式,类似: + +```json +{ + "name": "layout", + "value": { + "direction": "h", + "content": [ + { + "name": "button", + "value": { + "type": "QPushButton", + "args": ["hello"], + "style": "selected", + "init_steps": { "setFixedHeight": [30], "setFixedWidth": [100] } + } + }, + { + "name": "label", + "value": { + "type": "QLabel", + "args": ["world"], + "style": "big_text_16", + "init_steps": { "setFixedHeight": [30], "setFixedWidth": [100] } + } + } + ] + } +} +``` + +## 启用方法 + +
+ +打开主程序设置,找到`实验室`,勾选`Decoupling UI and program`,重启程序。 \ No newline at end of file diff --git a/documents/zh-CN/develop/clicker/cpp.md b/documents/zh-CN/develop/clicker/cpp.md new file mode 100644 index 00000000..07cf401e --- /dev/null +++ b/documents/zh-CN/develop/clicker/cpp.md @@ -0,0 +1,76 @@ +--- +title: Python/pyd调用 +description: 介绍如何使用Python调用pyd文件。 +layout: doc +--- + + + +# header/dll调用 + +本文介绍了如何使用Python调用pyd文件。 + +## 下载 + +前往[github releases](https://github.com/xystudiocode/pyClickMouse/releases),找到最新版本有.h或dll的版本文件。 + +最低要求的clickmouse版本
++Clickmouse测试版, >=3.3.0.23alpha5 +
++在下文, + +## 函数库 + +`ClickMouse`函数: +- 定义: +```cpp +CLICKMOUSE_CLASS ClickMouse( + unsinged int MouseButton, + unsigned int delay, + unsigned int pressTime, + int times = 1 +) +``` +- 参数: +- - MouseButton:按下的键位,可选`LEFT`或`RIGHT` +- - delay:点击延迟 +- - time:点击次数,默认为1次,如果是`INFINITE`则为无限 + +`LeftClick`函数: +```cpp +CLICKMOUSE_CLASS LeftClick( + int times = 1, + unsigned int delay, + unsigned int pressTime +) +``` +等同于`ClickMouse(LEFT, delay, pressTime, times)` + +`RightClick`函数: +```cpp +CLICKMOUSE_CLASS RightClick( + int times = 1, + unsigned int delay, + unsigned int pressTime +) +``` +等同于`ClickMouse(RIGHT, delay, pressTime, times)` + +## 示例 +```cpp +#includeCLICKMOUSE_CLASS在dll中指int,在header调用中指void。 ++#include +using namespace std; + +int main(){ + cout << CLICKMOUSE_VERSION << endl; // 打印版本信息,若成功输出一串数字,则安装成功 + clickMouse(LEFT, 1000, 10, 10); // 连点10次左键,间隔为1000ms,按下时间为10ms + return 0; +} +``` +## 使用优先级 +```mermaid +graph LR +C[C/C++] --> E[dll调用] --> D[命令行调用] +``` \ No newline at end of file diff --git a/documents/zh-CN/develop/clicker/index.md b/documents/zh-CN/develop/clicker/index.md new file mode 100644 index 00000000..57026b00 --- /dev/null +++ b/documents/zh-CN/develop/clicker/index.md @@ -0,0 +1,31 @@ +--- +title: clickmouse连点器介绍 +description: 介绍 ClickMouse 连点器 +layout: doc +--- + +# 介绍 + +clickmouse库是一款开源的控制鼠标库,可以进行鼠标连点的操作。 + +## clickmouse库 + +clickmouse库是用于控制鼠标的库,可以模拟鼠标点击操作。 + +选择右侧的文档进行查阅。 + +## 调用方法 +调用方法有: +- ✅ C/C++头文件调用 使用原本C++版本的clickMouse改装而来 速度最快,兼容性最好,但是使用失效的可能性最大。可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载 +- ✅ 使用原本C++版本的clickMouse 速度最快,兼容性最好,但是使用失效的可能性最大,已经停止更新,可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载,[之前的clickmouse项目](https://github.com/xystudio889/ClickMouse) +- ✅ 使用.dll调用 基于C++语言,速度最快,兼容性较好,使用失效的可能性最大。(配置较难,推荐使用C/C++头文件)可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载 +- ✅ (开发人员推荐)python调用 速度中等,兼容性最好,使用失效的可能性最小。可以使用`pip install clickmouse`下载 +- ✅ 使用.pyd调用 基于python语言,速度较快,兼容性较差(不同版本的python可能不兼容),使用失效的可能性较小。可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载(单独编译仅需编译cython/目录) +- ❌ 使用标准命令行 使用 基于python语言。~~将会自带在gui版本和pip安装版本中~~ 暂时没有该版本,敬请期待 + +## 使用优先级 +```mermaid +graph LR +A[python] --> B[pyd调用] --> D[命令行调用] +C[C/C++] --> E[dll调用] --> D +``` \ No newline at end of file diff --git a/documents/zh-CN/develop/clicker/python.md b/documents/zh-CN/develop/clicker/python.md new file mode 100644 index 00000000..4de84871 --- /dev/null +++ b/documents/zh-CN/develop/clicker/python.md @@ -0,0 +1,68 @@ +--- +title: Python/pyd调用 +description: 介绍如何使用Python调用pyd文件。 +layout: doc +--- + + + +# Python/pyd调用 + +本文介绍了如何使用Python调用pyd文件。 + +## 下载 + +### 库 +运行`pip install clickmouse`,等待下载完成 + + +若你在中国,`pip`的速度较慢,你可以输入: + + + +```bash +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple clickmouse +``` + +### pyd +前往[github releases](https://github.com/xystudiocode/pyClickMouse/releases),找到最新版本有pyd的版本文件。 + +::: warning 注意 +请确保下载的是pyd文件。 + +pyd文件要和python的版本匹配,比如Python3.7要下载带有`cp37`的版本。 + +free threaded版本的pyd文件下载要带t,如3.14t要下载带有`cp314t`的版本。 +::: + +## 函数库 + +`click_mouse`函数: +- 定义: +```python +def click_mouse( + button: Literal['left', 'right'], + delay: int, + time: int=1) -> None: +``` +- 参数: +- - button:按下的键位,可选`clickmouse.LEFT`或`clickmouse.RIGHT` +- - delay:点击延迟 +- - time:点击次数,默认为1次,如果是`clickmouse.INFINITE`则为无限 + +## 示例 + +```python +import clickmouse + +clickMouse.click_mouse(clickmouse.LEFT, 1000, 10, 10) # 连点10次左键,间隔为1000ms,按下间隔为10ms +``` + +## 使用优先级 +```mermaid +graph LR +A[python] --> B[pyd调用] --> D[命令行调用] +``` \ No newline at end of file diff --git a/documents/zh-CN/develop/contributing/Configuration.md b/documents/zh-CN/develop/contributing/Configuration.md new file mode 100644 index 00000000..9f9eac9d --- /dev/null +++ b/documents/zh-CN/develop/contributing/Configuration.md @@ -0,0 +1,47 @@ +--- +title: 配置仓库 +description: 介绍如何配置仓库 +layout: doc +--- + +# 配置仓库 +1. 下载仓库:`git clone https://github.com/xystudiocode/pyClickMouse.git` +2. 对于python版本安装python,推荐使用3.13,和软件开发者的版本一一致,[下载连接](https://www.python.org/downloads/release/python-31312/) +3. 对于头文件和dll版本,可以安装[visual studio](https://visualstudio.microsoft.com/)。 +## GUI版本 +1. 下载源码 +2. 放置一个`7z.exe`和`7z.dll`到`gui`目录 +3. 安装chocolately +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) +``` +4. 安装make工具 +```powershell +choco install make +``` +5. 配置python包 +```powershell +pip install -r requirements.txt +``` +6. 编译 +```powershell +make clickmouse # 编译clickmouse +make extension # 编译扩展 +make clickclean # 如果你要编译精简版,请用这个。 +``` +7. 运行`dist/clickmouse/main.exe`就可以加载clickmouse了。 +## 头文件 +仅需修改头文件,就可以被调用 +## dll调用 +使用visual studio修改`./dll/dll.sln`里的`源文件/dllmain.cpp` +## gui旧版本 ++pip install -i https://pypi.tuna.tsinghua.edu.cn/simple clickmousegui旧版本的再编译不接受pull request +使用visual studio修改`./ClickMouse-old/ClickMouse.sln`里的`源文件/clickmouse.cpp` +## python库调用 +修改`clickmouse/`下的代码,运行`pip install .`安装 +## pyd调用 +修改`cython/main.py`的代码,然后执行 +```python cython/setup.py build_ext --inplace``` +编译结束后,该目录下应该会有个以`.pyd`结尾的文件。 \ No newline at end of file diff --git a/documents/zh-CN/develop/contributing/SECURITY.md b/documents/zh-CN/develop/contributing/SECURITY.md new file mode 100644 index 00000000..95d1d80b --- /dev/null +++ b/documents/zh-CN/develop/contributing/SECURITY.md @@ -0,0 +1,29 @@ +# 安全漏洞报告 + +## 怎么提交漏洞? + +提交一个github security,详细说明漏洞的影响范围、触发条件、漏洞详情等。 + +## 提交漏洞格式 + +```markdown +# Security Policy + +## Supported Versions + +clickmouse >= **version** + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. + +## How to fix +> [!TIP] +> This section is optional. + +If the vulnerability is accepted, provide information on how to fix the vulnerability. +``` \ No newline at end of file diff --git a/documents/zh-CN/develop/contributing/doc.md b/documents/zh-CN/develop/contributing/doc.md new file mode 100644 index 00000000..3572de85 --- /dev/null +++ b/documents/zh-CN/develop/contributing/doc.md @@ -0,0 +1,134 @@ +--- +title: 参与文档协作 +description: 介绍如何参加文档协作 +layout: doc +--- + +# 文档协作 ++commit message等内容不再重复,请查看协作文档 + + +## 修改内容的原因 +如果实际功能与文档描述不符,请修改文档描述,而不是修改代码。 + +::: warning 注意 +不能修改代码,只能修改内容,并需要确保修改内容与实际一致。 +::: + +也可以是你想修改错字,添加新的描述 + +或者是文档未及时更新,但是这样你建议优先提出一个issue。 + +## 修改方法 +如果你只想修改一个文档,你可以直接点击文档页面下面的`编辑此页`来修改 + +但是如果你想修改很多文档,你需要下载仓库再修改。 + +::: warning 注意 +如果要修改内容,需要提交PR而不是直接合并。 +::: + +### 本地配置 +#### 安装环境 +首先你要安装git,中国用户打开[此链接]`https://cn-git.com/`,外国用户请自行查找。 +你还要同时安装nodejs,打开[此链接](https://nodejs.org/) + +#### 配置 npm +npm 是 Node.js 的包管理工具,我们需要配置 npm 才能使用它。 +##### 创建文件夹 +打开你的 Node.js 安装目录(例如 D:\software\nodejs,之后均以此为例),手动新建两个文件夹: +``` +node_global +node_cache +``` + +##### 执行配置命令 +在终端,依次执行以下两条命令(注意替换成你自己的实际路径): +```bash +npm config set prefix "D:\software\nodejs\node_global" +npm config set cache "D:\software\nodejs\node_cache" +``` +##### 配置环境变量 +如果不配置这个,以后你用 npm install -g 安装的工具都会提示“找不到命令”。 + +1. 在桌面右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。 +2. 修改【系统变量】中的 `Path`: +2. 1. 找到 `Path` 变量,点击“编辑”。 +2. 2. 检查是否有默认的 C 盘 npm 路径,如果有,删除它。 +2. 3. 新建一条,填入你的 Node.js 安装路径:`D:\software\nodejs\`。 +3. 新建/修改【用户变量】中的 Path: +3. 1. 在【用户变量】里找到 Path,点击“编辑”。 +3. 2. 将默认的`C:\Users\用户名\AppData\Roaming\npm`修改为:`D:\software\nodejs\node_global`。 +::: info 提示 +如果没有这个`C:\Users\用户名\AppData\Roaming\npm`,就新建一条,填入你的 Node.js 安装路径。 +::: +4. 新建 `NODE_PATH` 变量: +4. 1. 在【系统变量】区域,点击“新建”。 +4. 2. 变量名:`NODE_PATH` +4. 3. 变量值:`D:\software\nodejs\node_global\node_modules` +4. 4. 点击确定保存所有窗口。 +##### 配置镜像(对于中国开发者) +默认的 npm 源在国外,下载速度很慢。我们配置淘宝最新的镜像源,在终端输入: +```bash +npm config set registry https://registry.npmmirror.com +``` +验证是否配置成功: +```bash +npm config get registry +``` + +若返回 `https://registry.npmmirror.com/`,说明提速成功。 + +#### 克隆仓库 +你需要在github创建一个fork,然后克隆到本地: + +你可以使用`git clone https://github.com/username/pyClickMouse.git`下载源码到本地 + +在**管理员终端**运行`npm install`进行安装依赖。 + +#### 发布和提交 +你需要创建个新的分支: +```bash +git checkout -b my-branch +``` +并创建一个remote链接: +```bash +git remote add origin https://github.com/username/pyClickMouse.git +``` + +配置你的邮箱和用户名: +```bash +git config --global user.email "your email" +git config --global user.name "your name" +``` + +然后,你就可以提交了。 + +--- + +在发布的时候,可能需要你的用户名和密码,所以你需要在github上设置一个key。 + +1. 设置好名字和到期时间,在`Repository access`选择All repositories, +2. 点击`Add permissons`,选择`Contents`,`Contents`的选择框选择`Read and write`,再选择`workflows`,确定。 + +然后,你就可以发布了。 + +#### 提交PR +你需要在[此链接](https://github.com/xystudiocode/pyClickMouse)上创建一个Pull request,然后等待review。 + +[点击了解PR的规范](./github.md) + +打开[此链接](https://github.com/settings/personal-access-tokens/new) + +#### 编译和调试 +可以运行`npm run dev`打开编译环境,根据提示打开网页即可。 + +运行`npm run build`编译脚本,可以放到`/pyClickMouse/`目录来部署。 + ++但是我们会对每个提交到main分支的更改自动部署,所以你不需要自己编译。 + \ No newline at end of file diff --git a/documents/zh-CN/develop/contributing/github.md b/documents/zh-CN/develop/contributing/github.md new file mode 100644 index 00000000..e275f5f6 --- /dev/null +++ b/documents/zh-CN/develop/contributing/github.md @@ -0,0 +1,123 @@ +--- +title: 参与协作 +description: 介绍如何参加协作 +layout: doc +--- + + + +# 参与协作 +## commit message + +需要遵循以下格式: +``` +更新类型(更新模块):(可选)(版本号) (更新概括): + +- [(可选)子更新类型]更新内容1 +- [(可选)子更新类型]更新内容2 +- ... +``` + +更新类型有这些内容: +| 类型 | 说明 | +| --- | --- | +| ✅feat | 新功能 | +| 🔧modify | 修改功能 | +| 🐛fix | 修bug | +| ⚒️refactor | 重构 | +| 📃docs | 改文档,比如README | +| ❇️style | 改代码风格,不影响功能 | +| 🔎test | 加测试、改测试 | +| 📆chore | 杂项,比如改.gitignore | +| ⏫perf | 性能优化 | +| 🛒ci | CI/CD相关改动 | +| 🚅build | 改构建系统或依赖 | +| ◀️revert | 回滚 | +| 🔡dependency | 依赖更新 | +| ❌remove | 删除弃用的组件 | +| ↪️move | 移动了组件 | +| ❓unknown | 未知类型 | +| 自定义 | 尽量以一个直观的英文单词描述,最好配上emoji | + +内容较多时需要对更新内容添加更新类型提示 + +## 分支 + +请按此图所示的分支结构来更新: ++ +创建的分支需要以`feature/`开头,以表示功能分支,或创建一个fork,并在fork的分支开发。 + +发布pr时要选择**合并到`develop`分支**。 + +## 版本号 +clickmouse版本格式为:`A.B.C.D[(alpha | beta |.dev | rc) E]` +## 正式版本 +正式版不带.dev、alpha、beta或rc后缀。 + +A位代表有重大更新,有代码级的变动。如1.0升级到2.0就重构了代码。 + +B位代表有普通更新,通常是更新一些大功能。 + +C位代表有修复更新,通常会更新一些小功能和一些bug。 + +D位代表版本代号,通常每A, B, C位有变动时候+1。也有可能A, B, C位没有变动,D位+1,这代表紧急更新,通常是修复几个重大影响的bug。 + +## 测试版本 +测试版本带.dev、alpha、beta或rc后缀。 + +通常前面的`A.B.C.D`在一个测试周期内不变,代表下一个版本。 + +`.dev`代表早期开发更新,功能不稳定,bug很多,位于版本项目初期。这阶段新增的功能将会被放到实验室中,并默认关闭。 + +`alpha`代表晚期开发更新,功能不完善,bug较多,位于版本项目早期。这阶段新增的功能将会被放到实验室中,并默认关闭。 + +`beta`代表发布测试更新,功能完善,bug较少,不会再新增功能,位于版本项目中期,并且会逐步合并实验室中的feature。 + +`rc`代表预备发布版本,功能完善,bug较少,会修复一些重要安全问题或bug,最接近正式版,即将发布正式版,位于版本项目末期。 + +## issue +- 标题格式:`[类型] 标题`等,可以随便写,但要准确描述更新内容。 +- 内容应准确写出你的需求,并选择性给出解决方案,上传截图,添加附加信息(如clickmouse版本号) +- 类型为`bug`、`enhancement`、`question`等。 +- 我们给了一些模板,可直接使用。 +- 使用`labels`来标记issue的类型,比如`bug`、`enhancement`、`question`等。 +- 设置issue的`milestone`为你想应用的issue版本。 +- 安全问题请见[安全说明文档](./SECURITY.md)。 + +## pr +- 标题格式:`[类型] 标题` +- 使用`labels`来标记pr的类型,比如`bug`、`enhancement`、`question`等。 +- 关联issue,这样我们就可以知道这个pr解决了哪个issue。 +- 需要准确写出更新内容,关联到版本号的milestone。 +- 可选添加实现思路 + +### 规范 +我们pr合并的顺序为: +```mermaid +graph LR +A(其他用户的功能开发分支) --> B(develop分支) +B --> C(main分支) +``` + +pr无特定格式,但是必须清晰描述更新内容,关联到版本号的milestone;标题要简略描述更新内容,若修复或添加了issue里的建议,把该issue编号写进该行为,若出现多个重复issue,则只用写一个,并简单描述此bug。 + +### 快车pr +
+快车pr请谨慎使用 + + +- 快车pr的意思是跳过部分正常的pr合并分支步骤,以更快的合并到目标分支的功能。 +- 标题格式:`[✈️快车] 标题` +- 使用快车必须在pr描述中说明使用的原因 + +如果有人快车合并,但没写快车合并的原因,则拒绝合并该人的分支。 + +快车pr有高优先级,会优先进行处理。 + +## milestone +- 我们给每个版本都设置了一个milestone,用来管理该版本的issue和pr。 +- 需要每个issue或pr都关联到一个milestone,这样我们才能知道该issue或pr是否在下个版本中添加。 +- milestone格式为:`dev_版本号` diff --git a/documents/zh-CN/develop/contributing/issue_template.md b/documents/zh-CN/develop/contributing/issue_template.md new file mode 100644 index 00000000..98358e75 --- /dev/null +++ b/documents/zh-CN/develop/contributing/issue_template.md @@ -0,0 +1,269 @@ +--- +title: issue模板 +description: 在线查看issue模板 +layout: doc +--- + + + + + + +# issue模板 + +## Bug报告 + +报告一个bug。 +
++ + +## 功能请求 + +一个你建议添加的新功能。 +添加一个标题 ++ 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。检查是否存在重复😊 +我们不会在gitee上处理issue,请使用github发布。🙋♂️ +请一次只报告1个问题。😀 +🔡Clickmouse版本 ++ 🎭你是否从官方版本发现bug +❗clickmouse官方版本只在github releases或gitee releases页面发布,其他均为非官方版本。
++ +
+🐛你运行出现bug的模块 ++ 🐍描述你的bug。 ++ 🔦这个bug的影响。 ++ 📝重现步骤 ++ ℹ️你预估的受影响的Clickmouse版本 ++ 📄你的解决步骤想法 ++ 🔄️缓解bug的方案 ++ 📂文件日志 ++ ➕其他相关信息 ++
++ + +## 新标准 + +将会建议,建立或修改一个标准。 +添加一个标题 ++ 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。检查是否存在重复😊 +我们不会在gitee上处理issue,请使用github发布。🙋♂️ +请一次只报告1个功能。😀 +❇️新增功能的模块 ++ 📄新增功能描述 ++ ❔需要这个功能的原因 ++ 🧾实行步骤想法 ++ ➕其他相关信息 ++
++ + +## 任务单 + +一些任务单,可以用来起草新版本的规划等。 +添加一个标题 ++ 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。检查是否存在重复😊 +我们不会在gitee上处理issue,请使用github发布。🙋♂️ +请一次只报告1个立项。😀 +🧾新增的立项 ++ ℹ️立项施行的clickmouse版本 ++ ❓需要这些立项的原因 ++ ➕其他相关信息 ++
++ diff --git a/documents/zh-CN/develop/contributing/license.md b/documents/zh-CN/develop/contributing/license.md new file mode 100644 index 00000000..2dc2dc88 --- /dev/null +++ b/documents/zh-CN/develop/contributing/license.md @@ -0,0 +1,43 @@ +--- +title: 软件协议 +description: 介绍软件协议 +layout: doc +--- +# 软件协议 +## 版权声明 +鼠标 的图标 Icons8 + +## 开源协议 +本软件基于MIT开源协议,最后我会放出协议内容,你可以复制、修改、分发本软件及文档站,但你必须在源代码中保留原作者信息和协议声明。 + +本软件及文档站均开源在github上,你可以在[软件链接](https://github.com/xystudiocode/pyClickMouse)打开 + +同时软件的源代码开源在gitee上,方便中国用户下载。[软件链接](https://gitee.com/xystudio889/pyClickMouse) + +## 商业授权 +我们不反对商业授权,你可以在无需联系作者的情况下,将本软件用于商业用途,但必须在源代码中保留原作者信息和协议声明。 + +## 协议内容 +``` +MIT License + +Copyright (c) 2026 xystudiocode + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` \ No newline at end of file diff --git a/documents/zh-CN/develop/dependencies.md b/documents/zh-CN/develop/dependencies.md new file mode 100644 index 00000000..7f2f0aa5 --- /dev/null +++ b/documents/zh-CN/develop/dependencies.md @@ -0,0 +1,19 @@ +--- +title: 依赖 +description: clickmouse的依赖 +layout: doc +--- + +# clickmouse的依赖 +- PySide6:对于gui界面,他是图形核心框架 +- pyautogui:鼠标连点器核心 +- requests:用于检查版本号 +- nuitka:打包为gui或~~交互式命令行~~的库 +- cython:打包为pyd的库 +- setuptools:打包为python包的库 +- pywin32:win32控制 +- pynput: 键盘控制库 +- pyperclip: 剪贴板库 +- psutil: 进程管理库 +- packaging: 版本管理库 +- pytz: 时区管理库 \ No newline at end of file diff --git a/documents/zh-CN/develop/index.md b/documents/zh-CN/develop/index.md new file mode 100644 index 00000000..d39e0271 --- /dev/null +++ b/documents/zh-CN/develop/index.md @@ -0,0 +1,34 @@ +--- +title: 介绍 +description: 介绍 ClickMouse 开发人员版本 +layout: doc +--- + + + +# 介绍 + +ClickMouse 开发人员版本提供了一些代码库,具有以下功能: + +- clickmouse库: +- - 用于控制鼠标的库,可以模拟鼠标点击操作。 +- ~~clickmouse api:通过python制作clickmouse扩展~~暂未完成 + +## clickmouse库 + +clickmouse库是用于控制鼠标的库,可以模拟鼠标点击操作。 + +前往[文档](./clicker/)进行查阅。 + +## clickmouse api +~~clickmouse api通过python制作clickmouse扩展,可以实现一些扩展功能,如:~~ + +::: warning 提示 +clickmouse api暂未完成 +::: + +## clickmouse官方制作的python库 +- clickmouse: 连点器管理库 +- clickmouse_api: 扩展制作的调用api \ No newline at end of file diff --git a/documents/zh-CN/features/cleancache.md b/documents/zh-CN/features/cleancache.md new file mode 100644 index 00000000..4c2f9e33 --- /dev/null +++ b/documents/zh-CN/features/cleancache.md @@ -0,0 +1,39 @@ +--- +title: 清理缓存 +description: 清理缓存 +layout: doc +--- + + + + +# 清理缓存 + +::: warning 警告 +不建议手动清理缓存,因为clickmouse会自动清理缓存。 +::: + +## 功能描述 + +可以用来清理clickmouse的缓存,现在可以清理: + +- 日志:用于反馈错误信息 +- 更新缓存:用于减少检查更新的请求 +- 其他临时文件:通常不会产生,除非你手动创建了临时文件 + +添加一个标题 ++ 为避免造成更多的麻烦,请在报告issue前,先检查是否有其他人已经报告过相同的问题。检查是否存在重复😊 +我们不会在gitee上处理issue,请使用github发布。🙋♂️ +☑️新增任务包含的模块 ++ 📄新增的每个功能描述 ++ ❓需要这些功能的原因 ++ 📄实行步骤想法 ++ ➕其他相关信息 ++ + +## 使用方法 + +1. 打开文件-清理缓存 +2. 选择要清理的缓存类型 +3. (可选)点击“扫描”按钮,扫描缓存文件的大小 +3. 点击“清理”按钮,开始清理缓存 \ No newline at end of file diff --git a/documents/zh-CN/features/clickclean.md b/documents/zh-CN/features/clickclean.md new file mode 100644 index 00000000..861a7c13 --- /dev/null +++ b/documents/zh-CN/features/clickclean.md @@ -0,0 +1,42 @@ +--- +title: ClickClean +description: ClickClean +layout: doc +--- + + + +# ClickClean + +ClickClean是clickmouse的精简版,移除了以下内容: + +- 大部分设置,剩余热键、连点器和小部分基础设置 +- 连点属性查看和快速连点设置 +- 清理缓存 +- 更新 +- 扩展功能 +- 安装、卸载助手 + +并且: +- 轻便快捷:安装包大幅缩小 +- 无需安装,开箱即用 + +
+
+\ No newline at end of file diff --git a/documents/zh-CN/features/extensions/index.md b/documents/zh-CN/features/extensions/index.md new file mode 100644 index 00000000..1d5facd6 --- /dev/null +++ b/documents/zh-CN/features/extensions/index.md @@ -0,0 +1,21 @@ +--- +title: 扩展 +description: clickmouse的功能 +layout: doc +--- + +# 功能 +## 介绍 +clickmouse提供了强大的扩展性,但是目前我们正在制作扩展api,所以扩展暂时还只有官方组件。 + +官方的扩展列表: +- 修复工具:一键修复鼠标连点器无法启动的问题,也可以恢复到刚下载的状态,并且通过移除组件,不需要联网重装。 + +## 安装 +打开clickmouse,点击'扩展'-'官方扩展'-'修改' + +然后在选择扩展菜单编辑即可,完成后重启软件生效。 + +## FAQ +1. **'修改'菜单是灰色的** +可能是包管理器丢失,这样装不了扩展,请尝试重新安装clickmouse。 \ No newline at end of file diff --git a/documents/zh-CN/features/extensions/repair.md b/documents/zh-CN/features/extensions/repair.md new file mode 100644 index 00000000..ab07ec93 --- /dev/null +++ b/documents/zh-CN/features/extensions/repair.md @@ -0,0 +1,43 @@ +--- +title: 修复软件 +description: 修复clickmouse的问题 +layout: doc +--- + + + +# 功能 + +如果你的clickmouse软件出现问题,你可以在不重装软件的清情况下进行尽可能的修复。 + +## 修复项 + +- 缓存:清除错误的缓存文件,并重新构建来解决问题。(不会清除更新缓存) +- 更新缓存:重置更新缓存,并重新构建来解决问题。 +- 扩展文件:移除所有的扩展文件,以尝试解决扩展冲突。 +- 安装信息注册表:将会重置clickmouse的注册表信息,这样你可以再次运行初始化程序。 +- 软件数据:删除clickmouse的软件数据,并重新安装来解决问题。 +- 首次运行文件:如果删除,将会自动重新运行初始化程序。 + +
如果你全选修复项后修复,将会恢复到新装状态,但是要你的 + +## 打开方式 +1. 安装扩展:clickmouse 修复 +1. 1. 打开clickmouse,选择扩展-官方扩展-修改扩展; +1. 2. 点击“安装”按钮,选择要修复的扩展; +1. 3. 等待安装完成,点击“完成”按钮,并重启软件; +2. 点击扩展-官方扩展-修复; +3. 根据提示关闭软件和其托盘图标,然后将会启动修复程序; + +## 急救方案 +如果你主程序无法使用,你可以打开**管理员**终端,运行`./install_pack --ipk`来启动包管理器。 + +然后你再运行`repair.exe`来进行修复 + +如果你的包管理器也被损毁了,你可以修改packages.json,修改为以下内容: +```json +["xystudio.clickmouse", "xystudio.clickmouse.repair"] +``` +然后再运行`repair.exe`来进行修复。 diff --git a/documents/zh-CN/features/help.md b/documents/zh-CN/features/help.md new file mode 100644 index 00000000..36bbc93e --- /dev/null +++ b/documents/zh-CN/features/help.md @@ -0,0 +1,46 @@ +--- +title: 帮助菜单 +description: 帮助菜单 +layout: doc +--- + + + +# 帮助菜单 + +## 关于 + +### 功能介绍 +能查询clickmouse的版本,作者等信息。 + +### 功能列表 +- 查询版本号 + +### 使用方法 +1. 打开`帮助`菜单->点击`关于`按钮 + +## 反馈 +### 功能介绍 +如果您有任何意见或建议,可以通过点击反馈菜单来进行反馈 + +打开的网址是设置中的`软件反馈网址`,默认为[链接](https://github.com/xystudiocode/pyClickMouse/issues/new/choose)`https://github.com/xystudiocode/pyClickMouse/issues/new/choose` + +### 使用方法 +1. 打开`帮助`菜单->点击`反馈`按钮 +2. 根据提示,填写相关内容并提交 + +## 文档 +### 功能介绍 +能打开clickmouse的官方文档进行查阅 + +默认打开的网址是设置中的`文档链接`,默认为[链接](https://xystudiocode.github.io/pyClickMouse/)`https://xystudiocode.github.io/pyClickMouse/` + +res仍然完整就可以全新安装。\ No newline at end of file diff --git a/documents/zh-CN/features/index.md b/documents/zh-CN/features/index.md new file mode 100644 index 00000000..cbb6683c --- /dev/null +++ b/documents/zh-CN/features/index.md @@ -0,0 +1,26 @@ +--- +title: 功能 +description: clickmouse的功能 +layout: doc +--- + +# 功能 + +clickmouse有很多功能,他们都在menu栏目: + +- 文件: +- - 清理缓存:清理缓存,释放内存。 +- - 退出:退出程序。 +- 设置:设置软件的一些参数。 +- 更新: +- - 检查更新:检查软件是否有更新。 +- - 更新日志:查看更新日志。 +- 帮助: +- - 关于:查看软件的版本、作者、许可证信息。 +- - 热键帮助:查看软件的热键。 +- - 帮助:查看clickmouse文档。 +- - 反馈:给作者发送反馈。 +- 扩展: +- - 官方扩展: +- - - 管理扩展:通过clickmouse的包管理器来安装、卸载扩展。 +- - - 扩展软件:官方扩展软件,见[扩展列表](./extensions/)。 \ No newline at end of file diff --git a/documents/zh-CN/features/settings.md b/documents/zh-CN/features/settings.md new file mode 100644 index 00000000..bdc5c219 --- /dev/null +++ b/documents/zh-CN/features/settings.md @@ -0,0 +1,572 @@ +--- +title: 设置 +description: 设置 +layout: doc +--- + + + + + +# 设置 + +
有些设置项目可能需要进入测试版本打开部分实验项目才能启用。 + +## 功能介绍 + +可以用来管理clickmouse运行时候的策略。 + +## 功能列表 + +- 常规设置:调整一些不在下面列表中的项目,如软件语言。 +- 样式设置:设置clickmouse的主题、样式。 +- 连点器设置:控制连点器的行为,如默认连点间隔、连点次数。 +- 更新设置:用于控制clickmouse的更新服务,如是否自动更新、检查更新频率。 +- 热键设置:用于控制热键功能,如左键连点、右键连点的热键。 +- 文档设置:控制文档功能默认打开的网站。 +- 通知设置:用于控制软件的通知提醒,如是否显示通知。 + +## 常规设置 +常规设置包含了一些软件的基础设置,如软件语言等。 + +设置项目有: +- 软件语言:用于切换软件的语言,目前官方支持简体中文和英文。 +- - 类型:下拉框 +- - 默认值:系统语言 +- - 可选值:根据语言包文件决定,官方支持`简体中文`和`英语`。 +- - 字段名:`select_language` +::: tip 提示 +切换语言后,软件需要重启才能生效。 +::: +::: info 提示 +如果自定义语言包没有及时更新,缺少新内容的翻译,新内容将会显示为英文。 +::: +- 保留托盘图标:用于控制软件是否在任务栏显示图标; +- - 类型:开关 +- - 默认值:开启 +- - 字段名:`show_tray_icon` ++如果关闭保留托盘图标选项,托盘图标不会完全关闭,而是会在程序主窗口关闭后退出。 + + +- 开机自启动:如果勾选,软件会在系统启动时自动启动; +- - 默认值:关闭 +- - 字段名:无,他依赖系统自身的开机自启动设置。 +- 重置开机自启动配置:如果你的开机自启动会显示窗口或有其他问题,可以尝试点击这个按钮来修复。 +- - 类型:按钮 +- 软件反馈网址:控制在软件反馈时候打开的网址。 +这个设置项需要在实验室开启 + +- - 类型:输入框 +- - 默认值:[链接](https://github.com/xystudiocode/pyClickMouse/issues/new/choose) `https://github.com/xystudiocode/pyClickMouse/issues/new/choose` +- - 字段名:`feedback` +- 重置反馈链接:重置软件反馈网站的链接。 +More settings才能启用这个设置项需要在实验室开启 + +- - 类型:按钮 +- 软件响应延迟:用于控制软件响应速度;*相应延迟越快,软件在切换样式的时候相应越快,但是CPU占用率也会越高。* +- - 类型:滑块 +- - 默认值:100ms +- - 最小值:1ms +- - 最大值:1000ms +- - 间隔值:10ms +- - 字段名:`soft_delay` + +- 无实验项时候隐藏“实验室”设置项:如果勾选,没有实验室设置项目时候,“实验室”设置项会被隐藏。 +More settings才能启用这个设置项需要在实验室开启 + +- - 类型:开关 +- - 默认值:开启 +- - 字段名:`hide_flags` + +- 重置所有设置:用于恢复默认设置,恢复后需要重启软件才能生效。 +- - 类型:按钮 + +::: warning 警告 +***设置的修改会立即生效,但是部分设置需要重启软件才能生效。*** + +这个操作会覆盖掉之前的设置,比较危险,请谨慎操作。 +::: + +More settings才能启用+ +--- + +## 风格设置 + +风格设置用于调整软件的主题和样式。 + +设置项目有: +- 窗口样式:用于切换软件的窗口样式; +- - 类型:下拉框 +- - 默认值:系统默认 +- - 可选值:根据样式文件决定,官方支持根据系统颜色、浅色、深色 +- - 字段名:`select_style` +- 使用windows强调色显示组件:控制组件是否使用windows强调色;关闭后使用clickmouse颜色。下面查看demo +- - 类型:开关 +- - 默认值:开 +- - 字段名:`use_windows_color` +
+这个操作不会完全改变组件风格,选择框等组件仍会使用系统强调色 + + +++ +- 窗口主题:设置窗口主题 +- - 类型:下拉框 +- - 默认值:根据系统版本决定: +- - - Windows 10:`Windows10`样式 +- - - Windows 11:`Windows11`样式 +- - - 其他windows:`Windows`样式 +- - - 其他:`Fusion`样式 +- - 可选值:根据系统决定,windows有:`windows标准样式`、`windows经典样式`、`windows Vista样式`和`Fusion样式` +- - 字段名:`theme` + +::: warning 警告 +部分主题不能很好的适配clickmouse的其他组件,如深色模式、反色模式等。 +::: + +颜色demo:
+ + ++ +## 连点器设置 + +可以设置连点器的一些参数,如连点间隔、连点次数等。 + +设置项目有: +- 连点延迟默认值:控制连点数字为空的时候的默认延迟 +- - 类型:输入框 +- - 默认值:空 +- - 字段名:`click_delay` +- 连点延迟单位:控制默认延迟的单位 +- - 类型:下拉框 +- - 默认值:`毫秒` +- - 可选值:`毫秒`、`秒` +- - 字段名:`delay_unit` +- 连点延迟错误时候使用的默认值:如果开启,在连点延迟输入框输入错误的时候,会使用默认值 +- - 类型:开关 +- - 默认值:关 +- - 字段名:`delay_error_use_default` +
+此操作在 + +连点延迟参数设置为空的时候禁用 ++如果关闭此选项,只有在连点为空的时候才会使用默认值;开启后只要输入格式错误就会使用默认值。 + + +- 使用默认值修改连点属性:如果启用,那么在一个输入框有值时,另一个无值的输入框会继续沿用。 +- - 类型:开关 +- - 默认值:关 +- - 字段名:`modify_using_default_input` +- 使用默认值修改连点单位:如果启用,那么在单位变化时,默认的数值会继续沿用。 +- - 类型:开关 +- - 默认值:关 +- - 字段名:`modify_using_default_combo` +- 连点次数默认值:控制连点次数为空的时候的默认次数 +- - 类型:输入框 +- - 默认值:空 +- - 字段名:`click_times` +- 连点次数单位:控制默认连点次数的单位 +- - 类型:下拉框 +- - 默认值:`次` +- - 可选值:`次`、`万次`、`无限` +- - 字段名:`times_unit` +- 连点次数错误时候使用的默认值:如果开启,在连点次数输入框输入错误的时候,会使用默认值 +- - 类型:开关 +- - 默认值:关 +- - 字段名:`times_error_use_default` +- 连点总耗时:通过软件连点次数和间隔,计算出的总耗时。 +- - 类型:文本 +- - 值:根据连点次数和间隔计算出来的总耗时 +- - 字段名:无 + ++ +## 更新设置 + +用于控制软件的更新服务,如是否自动更新、检查更新频率。 +设置项目有: +- 开启更新:如果开启,就可以管理下面的更新设置。 +- - 类型:开关 +- - 默认值:开 +- - 字段名:`update_enabled` +
+我不建议关闭更新,这会让你的clickmouse有更多的问题。 + + +::: tip 提示 +如果你发现检查更新提示:'更新未开启',请打开这个设置。 +::: + +- 更新提示:如果关闭,那么看不到更新提示。‘ +- - 类型:开关 +- - 默认值:开 +- - 字段名:`update_notify` + ++ +
+这个设置和更新完成提示独立,如果关闭此设置,更新完成提示也不会关闭。 + + +- 静默更新:如果开启,那么软件更新时不会弹出提示框。 +- - 类型:开关 +- - 默认值:关 +- - 字段名:`quiet_update` + ++如果开启此设置,那么更新提示将会关闭,即使你开启了此设置。 + + +- 更新完成提示:如果开启,那么更新完成后会弹出提示框。 +- - 类型:开关 +- - 默认值:开 +- - 字段名:`update_ok_notify` + ++ +
+这个弹窗会在静默更新完成后弹出。 + + +::: tip 提示 +下面的通知设置也受更新设置影响,如果是灰色,可能是因为更新服务未开启。 +::: + ++ +## 热键设置 + +用于设置软件的热键功能,如左键连点、右键连点的热键。 + +设置项目有: +- 热键启用:如果关闭,那么软件的热键功能将会关闭。 +
这个设置项需要在实验室开启 + +- - 类型:开关 +- - 默认值:开 +- - 字段名:`hotkey,hotkey_enabled` +- 左键连点热键:设置左键连点的热键。 +- - 类型:输入框 +- - 默认值:`F2` +- - 字段名:`hotkey,hotkeys,left_click_hotkey` +- 右键连点热键:设置右键连点的热键。 +- - 类型:输入框 +- - 默认值:`F3` +- - 字段名:`hotkey,hotkeys,right_click_hotkey` +- 暂停/重启连点热键:设置暂停/重启连点器的热键。 +- - 类型:输入框 +- - 默认值:`F4` +- - 字段名:`hotkey,hotkeys,pause_click_hotkey` +- 停止连点热键:设置停止连点的热键。 +- - 类型:输入框 +- - 默认值:`F6` +- - 字段名:`hotkey,hotkeys,stop_click_hotkey` +- 连点属性热键:设置打开连点属性的热键。 +- - 类型:输入框 +- - 默认值:`Ctrl+Alt+A` +- - 字段名:`hotkey,hotkeys,click_attr_hotkey` +- 主窗口热键:设置打开主窗口的热键。 +- - 类型:输入框 +- - 默认值:`Ctrl+Alt+M` +- - 字段名:`hotkey,hotkeys,main_window_hotkey` +- 重置左键连点设置:用于恢复默认左键连点设置。 +- - 类型:按钮 +- 重置右键连点设置:用于恢复默认右键连点设置。 +- - 类型:按钮 +- 重置暂停/重启连点设置:用于恢复默认暂停/重启连点设置。 +- - 类型:按钮 +- 重置停止连点设置:用于恢复默认停止连点设置。 +- - 类型:按钮 +- 重置连点属性设置:用于恢复默认连点属性设置。 +- - 类型:按钮 +- 重置快速连点设置:用于恢复默认快速连点设置。 +- - 类型:按钮 +- 重置主窗口设置:用于恢复默认主窗口设置。 +- - 类型:按钮 + +More settings才能启用+ +## 文档设置 + +用于设置文档功能默认打开的网站。 + +设置项目有: +- 文档默认连接: +- - 类型:输入框 +- - 默认值:[链接](https://xystudiocode.github.io/pyClickMouse/{lang})`https://xystudiocode.github.io/pyClickMouse/{lang}` +- - 字段名:`doc_default_link` +- 重置文档默认链接:用于恢复默认文档默认链接。 +
这个设置项需要在实验室开启 + +- - 类型:按钮 + +::: tip 提示 +`{lang}`会被替换为当前软件语言,如`zh-CN`或`en`。 +::: + +- 文档语言: +- - 类型:下拉框 +- - 默认值:软件语言 +- - 可选值:`软件语言`、`系统语言`和根据软件支持的语言包(默认`简体中文`、`英语`) + +- 更新日志路径:设置更新日志的路径。 +- - 类型:输入框 +- - 默认值:`updatelog` + +::: tip 提示 +软件的更新日志路径是相对于文档默认连接的路径,如默认的打开更新日志的链接是[链接](https://xystudiocode.github.io/pyClickMouse/{lang}/updatelog)`https://xystudiocode.github.io/pyClickMouse/{lang}/updatelog`,那么更新日志路径就填入`updatelog`。 +::: + +- 重置更新日志路径:用于恢复默认更新日志路径。 +More settings才能启用这个设置项需要在实验室开启 + +- - 类型:按钮 + +> 这一段的{lang}也会被解析。 + +More settings才能启用+ +## 通知设置 + +
这个设置项需要在实验室开启 + +用于控制软件的通知提醒,如是否显示通知。 + +设置项目有: + +用于控制软件的更新服务,如是否自动更新、检查更新频率。 +设置项目有: +- 开启更新:如果开启,就可以管理下面的更新设置。 +- - 类型:开关 +- - 默认值:开 +- - 字段名:`update_enabled` +More settings才能启用+我不建议关闭更新,这会让你的clickmouse有更多的问题。 + + ++如果你发现检查更新提示:'更新未开启',请打开这个设置。 + + +- 更新提示:如果关闭,那么看不到更新提示。‘ +- - 类型:开关 +- - 默认值:开 +- - 字段名:`update_notify` + ++ +
+如果开启此设置,那么更新提示将会关闭,即使你开启了此设置。 + + +- 更新完成提示:如果开启,那么更新完成后会弹出提示框。 +- - 类型:开关 +- - 默认值:开 +- - 字段名:`update_ok_notify` + ++这个弹窗会在静默更新完成后弹出。 + + +::: tip 提示 +上面的更新设置也受通知设置影响,如果是灰色,可能是因为更新服务未开启。 +::: + +- 软件启动警告:如果开启,那么软件启动时资源丢失会弹出警告提示框。 +- - 类型:开关 +- - 默认值:开 +- - 字段名:`show_warning` + +::: info 提示 +clickmouse在启动时候会检查资源,如果发现缺少了部分内容,就会弹出`软件启动警告` +::: + +- 官方扩展包丢失警告:如果开启,那么软件启动时官方扩展包丢失会弹出警告提示框。 +- - 类型:开关 +- - 默认值:开 +- - 字段名:`show_package_warning` + ++ +## 实验室 + +将会测试新的功能 + +因为会随版本更新测试项,所以不例举设置项了。 + +
+ +## 使用方法 + +1. 打开设置-设置选项 +2. 在左侧选择要切换设置的选项 +3. 点击右侧的开关/输入框以切换设置 \ No newline at end of file diff --git a/documents/zh-CN/features/update.md b/documents/zh-CN/features/update.md new file mode 100644 index 00000000..a047bdef --- /dev/null +++ b/documents/zh-CN/features/update.md @@ -0,0 +1,45 @@ +--- +title: 更新管理菜单 +description: 更新管理菜单 +layout: doc +--- + + + +# 更新管理菜单 + +## 检查更新 + +### 功能描述 + +检查更新功能可以帮助用户检查软件是否有新版本发布,并提示用户下载最新版本。 + +### 使用方法 + +只要更新开启,clickmouse就会定期检查更新。 + +若要通过菜单启动,请前往“更新”-“检查更新”查看更新 + +### FAQ + +**1. 软件更新失败:更新服务未开启** + +请在`设置`,左侧选择`更新`,然后开启`启用更新`,然后再次尝试。 + +
+ +## 更新日志 +### 功能描述 +打开一个网页,域名是设置中的`文档默认连接`和`更新日志路径`合并后的值,默认为[链接](https://xystudiocode.github.io/updatelog/)`https://xystudiocode.github.io/updatelog/` + +### 使用方法 + +1. 打开更新-更新日志 \ No newline at end of file diff --git a/documents/zh-CN/guide/faq.md b/documents/zh-CN/guide/faq.md new file mode 100644 index 00000000..af26aff7 --- /dev/null +++ b/documents/zh-CN/guide/faq.md @@ -0,0 +1,132 @@ +--- +layout: doc +title: 常见问题 +--- + + + + + +# 常见问题 + +
+本页中所有路径均为相对于clickmouse安装目录的路径。 +如果windows无法打开里面提到的文件,请尝试用记事本打开。 + + +## 错误 + +**1. 语言包不存在:** + +请检查clickmouse的`res`目录里是否存在langs目录,如果有,检查里面是否有`langs.json`文件,如果没有,请重新安装clickmouse。[下载链接](https://github.com/xystudiocode/pyClickMouse/releases/latest) + ++ +**2. 无法启动:** + +可能是出现了一些bug,可以在`packages.json`中的内容修改为: +```json +["xystudio.clickmouse", "xystudio.clickmouse.repair"] +``` +然后运行当前目录的`repair.exe`文件,勾选你想清除的内容,点击`修复`按钮,再次启动clickmouse看看。 + +::: tip 提示 +推荐全选修复项,但是这样会删除所有用户数据和扩展,恢复到初始状态。 +::: + +如果你能编译源码,也可以尝试使用makefile,移除编译源码的`--windows-console-mode=disable`获取错误堆栈。 + +如果仍然不行,可尝试卸载重装clickmouse。[下载链接](https://github.com/xystudiocode/pyClickMouse/releases/latest) + +若问题持续,你可以向我们[报告问题](https://github.com/xystudiocode/pyClickMouse/issues/new/choose) + +**3. 无法连接到更新,提示`timeout`:** + +我们更新内容存放在github上,国内网络较慢。 + +你可以安装[watt toolkit](https://gitee.com/rmbgame/SteamTools/releases/download/3.0.0-rc.16/Steam%20%20_v3.0.0-rc.16_win_x64.exe) +然后: +1. 打开watt toolkit,点击左侧的`网络加速` +2. 勾选`github` +3. 点击`一键加速` + +> 这种方法只能保证不报错timeout,但是不能保证网速快。 + +如果仍然不行,我也没有更多方法了 + +## 软件功能使用问题 +**1. 为什么连点按钮是灰色的?** + +可能是你没有正确的血连点延迟和连点次数,可以在下面的输入框设置连点时间和连点次数,在下拉框中可以选择连点次数/延迟的单位 + +::: warning 注意 +需要填入正确的数字,否则会导致连点失败。 +::: + +**2. 连点输入框是灰色的/无法打开连点设置** + +这可能是你正在连点,需要点击`停止`按钮停止后再次输入。 + +
+
++ +**3. 软件更新失败:更新服务未开启** + +请在`设置`,左侧选择`更新`,然后开启`启用更新` + +
+ +**4. 提示包管理器文件夹不存在,每次都弹出** + +可以前往设置-通知-关闭`官方扩展包丢失警告` + +
+ +**5. 选择框点击无效** + +你可能点到了文字区域,clickmouse选择框需要点击到框内才有效。 + + diff --git a/documents/zh-CN/guide/getting-started.md b/documents/zh-CN/guide/getting-started.md new file mode 100644 index 00000000..401ea7bd --- /dev/null +++ b/documents/zh-CN/guide/getting-started.md @@ -0,0 +1,90 @@ +--- +layout: doc +title: 开始使用 +--- + + + +# 开始使用 +## 下载安装 + +前往[github发布页面](https://github.com/xystudiocode/pyClickMouse/releases/latest) + +选择`clickmouse.7z`,然后下载,下载完成后解压到当前目录 + +## 运行 +### 初始化 +点击`解压后的文件夹/main.exe`,同意UAC弹窗,等待程序初始化完成。 + +先点击下一步,然后"同意此协议",点击2次"下一步" +
+ +之后会让你选择是否创建快捷方式,建议创建,点击"下一步" + +
+ +然后是选择包,你可以酌情选择,点击"下一步",确认组件选择弹窗。 + +
+ +之后等待安装完成,进入安装完成提示页面,建议勾选"运行clickmouse",点击"完成" + +
+ +### 使用 + +设置一个连点间隔和连点次数,连点输入框旁边的按钮可以设置单位 + +设置结束后,点击"左键连点"或者"右键连点"按钮,开始连点 + +> 若是灰色,可以检查是否填入的是数字,clickmouse只检测整数数字 + +点击"停止"按钮停止连点 + +点击"暂停"按钮可以暂停连点,然后你可以点击"重启"按钮继续连点 + +
+ +::: tip 提示 +之后如果要运行,可以双击`解压后的文件夹/main.exe`运行程序,也可以右键点击桌面或开始菜单快捷方式运行 +::: \ No newline at end of file diff --git a/documents/zh-CN/guide/index.md b/documents/zh-CN/guide/index.md new file mode 100644 index 00000000..a1c630b8 --- /dev/null +++ b/documents/zh-CN/guide/index.md @@ -0,0 +1,59 @@ +--- +layout: doc +title: Clickmouse 指南 +--- + +# Clickmouse 指南 + +## 介绍 +Clickmouse指南,主要介绍Clickmouse gui的使用方法、功能、原理、配置等。 + +点击侧边栏以进行查阅。 + +## 功能 +- 连点功能 +- 输入间隔 +- 热键启动 +- 输入次数 +- 自动检查更新 +- 自动下载和安装更新 +- 设置 +- 官方安装助手 +- 包管理 +- 后台运行 + +## 调用方法 +- [x] C/C++头文件调用 使用原本C++版本的clickMouse改装而来 速度最快,兼容性最好,但是使用失效的可能性最大。可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载 +- [x] 使用原本C++版本的clickMouse 速度最快,兼容性最好,但是使用失效的可能性最大,已经停止更新,可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载,[之前的clickmouse项目](https://github.com/xystudio889/ClickMouse) +- [x] 使用.dll调用 基于C++语言,速度最快,兼容性较好,使用失效的可能性最大。(配置较难,推荐使用C/C++头文件)可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载 +- [x] (开发人员推荐)python调用 速度中等,兼容性最好,使用失效的可能性最小。可以使用`pip install clickmouse`下载 +- [x] 使用.pyd调用 基于python语言,速度较快,兼容性较差(不同版本的python可能不兼容),使用失效的可能性较小。可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载(单独编译仅需编译cython/目录) +- [x] (普通用户推荐)使用exe 使用 基于交互式命令行添加了gui。可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载 +- [ ] 使用交互式命令行 使用 基于python语言,比gui轻便。~~可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases)下载~~ 暂时没有该版本,敬请期待 +- [ ] 使用标准命令行 使用 基于python语言。~~将会自带在gui版本和pip安装版本中~~ 暂时没有该版本,敬请期待 +- [x] 精简版(ClickClean) 比exe gui版本更加精简,告别臃肿的无用功能。可以从[releases](https://github.com/xystudiocode/pyClickMouse/releases) + +## Usage +- [x] C/C++ header file usage: Use the original clickMouse re-packaged as C++ version, which is fast and compatible, but the maximum susceptibility to invalid use. You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- [x] Original C++ version usage: Use the original clickMouse, which is fast and compatible, but the maximum susceptibility to invalid use, and has stopped updating. You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- [x] dll calling: Based on C++ language, which is fast and compatible, but the maximum susceptibility to invalid use. (The configuration is more difficult, it is recommended to use C/C++ header file) You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- [x] (Developer recommended) Python calling: Slow, but compatible, and the minimum susceptibility to invalid use. (Recommended to use `pip install clickmouse`) You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- [x] .pyd calling: Based on python language, which is faster, but compatible (different versions of python may not be compatible), and the susceptibility to invalid use is relatively small. You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) (only need to compile cython/ directory) +- [x] (General user recommended) exe usage: Based on interactive command line with gui. You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) +- [ ] Interactive command line usage: Based on python language, lightweight than gui. (~~You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases)~~) Not yet available, please wait. +- [ ] Standard command line usage: Based on python language. (~~Will be included in the gui version and pip installation version~~) Not yet available, please wait. +- [x] Simplified version (ClickClean) is more lightweight and eliminates unnecessary functions. You can download from [releases](https://github.com/xystudiocode/pyClickMouse/releases) + +## 连点功能 +- 鼠标连点 +- 自定义连点间隔 +- 自定义连点次数 + +## ⬇️下载 +前往[releases](https://github.com/xystudiocode/pyClickMouse/releases/releases)下载 + +## 使用优先级 +```mermaid +graph LR +A[exe] --> B["cli版本(未完成)"] +``` \ No newline at end of file diff --git a/documents/zh-CN/guide/license.md b/documents/zh-CN/guide/license.md new file mode 100644 index 00000000..2dc2dc88 --- /dev/null +++ b/documents/zh-CN/guide/license.md @@ -0,0 +1,43 @@ +--- +title: 软件协议 +description: 介绍软件协议 +layout: doc +--- +# 软件协议 +## 版权声明 +鼠标 的图标 Icons8 + +## 开源协议 +本软件基于MIT开源协议,最后我会放出协议内容,你可以复制、修改、分发本软件及文档站,但你必须在源代码中保留原作者信息和协议声明。 + +本软件及文档站均开源在github上,你可以在[软件链接](https://github.com/xystudiocode/pyClickMouse)打开 + +同时软件的源代码开源在gitee上,方便中国用户下载。[软件链接](https://gitee.com/xystudio889/pyClickMouse) + +## 商业授权 +我们不反对商业授权,你可以在无需联系作者的情况下,将本软件用于商业用途,但必须在源代码中保留原作者信息和协议声明。 + +## 协议内容 +``` +MIT License + +Copyright (c) 2026 xystudiocode + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` \ No newline at end of file diff --git a/documents/zh-CN/guide/version-naming.md b/documents/zh-CN/guide/version-naming.md new file mode 100644 index 00000000..5ad54d76 --- /dev/null +++ b/documents/zh-CN/guide/version-naming.md @@ -0,0 +1,35 @@ +--- +title: 版本命名规则 +description: 介绍 ClickMouse 版本命名规则。 +layout: doc +--- + +# 版本命名规则 +clickmouse版本格式为:`A.B.C.D[(alpha | beta |.dev | rc) E]` +## 正式版本 +正式版不带.dev、alpha、beta或rc后缀。 + +A位代表有重大更新,有代码级的变动。如1.0升级到2.0就重构了代码。 + +B位代表有普通更新,通常是更新一些大功能。 + +C位代表有修复更新,通常会更新一些小功能和一些bug。 + +D位代表版本代号,通常每A, B, C位有变动时候+1。也有可能A, B, C位没有变动,D位+1,这代表紧急更新,通常是修复几个重大影响的bug。 + +## 测试版本 +测试版本带.dev、alpha、beta或rc后缀。 + +通常前面的`A.B.C.D`在一个测试周期内不变,代表下一个版本。 + +`.dev`代表早期开发更新,功能不稳定,bug很多,位于版本项目初期。这阶段新增的功能将会被放到实验室中,并默认关闭。 + +`alpha`代表晚期开发更新,功能不完善,bug较多,位于版本项目早期。这阶段新增的功能将会被放到实验室中,并默认关闭。 + +`beta`代表发布测试更新,功能完善,bug较少,不会再新增功能,位于版本项目中期,并且会逐步合并实验室中的feature。 + +`rc`代表预备发布版本,功能完善,bug较少,会修复一些重要安全问题或bug,最接近正式版,即将发布正式版,位于版本项目末期。 + +::: tip 提示 +rc最后一个版本将直接合并到测试版;功能完全一样。 +::: diff --git a/documents/zh-CN/index.md b/documents/zh-CN/index.md new file mode 100644 index 00000000..1039255c --- /dev/null +++ b/documents/zh-CN/index.md @@ -0,0 +1,59 @@ +--- +layout: home +lang: zh-CN +title: 首页 +description: 使用VitePress制作的Clickmouse文档。 +hero: + title: Clickmouse + text: Clickmouse + tagline: 一款快捷,简洁,轻便;使用python制作的鼠标连点器 + image: + src: /imgs/icons/icon.ico + alt: Clickmouse Logo + actions: + - theme: brand + text: 下载软件 + link: https://github.com/xystudiocode/pyClickMouse/releases/releases/latest + - theme: alt + text: 开始使用 + link: /zh-CN/guide/getting-started + - theme: alt + text: 查阅源码 + link: /zh-CN/githublink +features: + - icon: ⬇️ + title: 连点功能丰富 + details: 有丰富的连点功能,可以设置连点次数,间隔时间,默认连点属性,热键连点等 + - icon: ⚙️ + title: 设置丰富 + details: 可以设置主题,连点默认次数、间隔;错误时候使用默认值等 + - icon: ♻️ + title: 轻量化 + details: UI简洁,使用简单、轻便。 + - icon: 🔄️ + title: 自动更新 + details: 软件自动更新,保证软件最新。 + - icon: 🖥️ + title: 后台运行 + details: 软件可以后台运行,不会影响到你的工作;可以使用热键唤醒或开启连点。 + - icon: 🧩 + title: 扩展性强 + details: 软件可以扩展,导入扩展以实现更多功能。 + - icon: 💻 + title: 开发简单 + details: 扩展开发简单,只需要使用clickmouseAPI库即可制作。 + - icon: + dark: /imgs/icons/cmd/dark.png + light: /imgs/icons/cmd/light.png + title: 命令行和cli + details: 软件支持更轻便的命令行和cli模式,能被其他软件轻松调用 + - icon: 🎀 + title: 安装助手 + details: 通过官方的安装助手能很简单的配置clickmouse和包管理器,让你的操作更加简单。 + - icon: 📦 + title: 包管理器 + details: 软件官方支持包管理器,可以简单的安装、卸载、更新扩展。 + - icon: 🔛 + title: 开源 + details: 本软件使用mit协议开源,你可以任意修改,分发,使用,甚至收费;你也可以向clickmouse官方提出建议,帮助改进软件。 +--- diff --git a/documents/zh-CN/updatelog/beta/3/30011a1.md b/documents/zh-CN/updatelog/beta/3/30011a1.md new file mode 100644 index 00000000..c235714d --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011a1.md @@ -0,0 +1,32 @@ +--- +title: 3.0.0.11alpha1 +layout: doc +--- + +# 3.0.0.11alpha1 + +发布日期:2025/12/06 + +## 更新内容 + +- 新增了设置ui,该ui是重构的ui,而非从wx移植。 +- 美化了按钮。 +- 自适应系统颜色功能,完美兼容windows的亮暗模式。 +- 快捷键:ctrl+alt+d,显示或隐藏主窗口。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0alpha1-re) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011a2.md b/documents/zh-CN/updatelog/beta/3/30011a2.md new file mode 100644 index 00000000..72e34e74 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011a2.md @@ -0,0 +1,31 @@ +--- +title: 3.0.0.11alpha2 +layout: doc +--- + +# 3.0.0.11alpha2 + +发布日期:2025/12/07 + +## 更新内容 + +- 完全重构设置 +- 新的设置选项:软件主题,显示托盘图标。 +- 继续修改美化组件 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0alpha2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011a3.md b/documents/zh-CN/updatelog/beta/3/30011a3.md new file mode 100644 index 00000000..2ed07ad4 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011a3.md @@ -0,0 +1,29 @@ +--- +title: 3.0.0.11alpha3 +layout: doc +--- + +# 3.0.0.11alpha3 + +发布日期:2025/12/11 + +## 更新内容 + +- 继续修改美化组件 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0alpha3) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011dev1.md b/documents/zh-CN/updatelog/beta/3/30011dev1.md new file mode 100644 index 00000000..24e04b56 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011dev1.md @@ -0,0 +1,27 @@ +--- +title: 3.0.0.11.dev1 +layout: doc +--- + +# 3.0.0.11.dev1 + +发布日期:2025/11/23 + +## 更新内容 + +- 使用pyside6(基于Qt)重写了clickmouse + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.dev1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011dev3.md b/documents/zh-CN/updatelog/beta/3/30011dev3.md new file mode 100644 index 00000000..cdaf3e3e --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011dev3.md @@ -0,0 +1,31 @@ +--- +title: 3.0.0.11.dev4 +layout: doc +--- + +# 3.0.0.11.dev4 + +发布日期:2025/11/29 + +## 更新内容 + +- 将清理缓存页面换成了三态选择框 +- 基于Pyside6重构的检查更新、选择语言界面 +- 修复了一些bug + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.dev3) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011dev4.md b/documents/zh-CN/updatelog/beta/3/30011dev4.md new file mode 100644 index 00000000..3fb634da --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011dev4.md @@ -0,0 +1,31 @@ +--- +title: 3.0.0.11.dev4 +layout: doc +--- + +# 3.0.0.11.dev4 + +发布日期:2025/11/30 + +## 更新内容 + +- 新增了clickmouse后台运行功能 +- 新增了热键启动功能。 +- 修复了选择好语言后无法立即启动软件的问题。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.dev3) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011rc1.md b/documents/zh-CN/updatelog/beta/3/30011rc1.md new file mode 100644 index 00000000..b62c9ff0 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011rc1.md @@ -0,0 +1,40 @@ +--- +title: 3.0.0.11rc1 +layout: doc +--- + +# 3.0.0.11rc1 + +发布日期:2025/12/13 + +## 更新内容 + +- 使用Pyside6重构的ui,使界面焕然一新 +- 新的设置内容 +- 添加热键启动,热键请见软件帮助 +- 添加连点输入次数功能 +- 添加状态栏,查看连点状况。 +- 暂时禁用了原计划在2.3.0推出的功能,延期到3.1.0.12。 +- 修复了一些bug + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 英语语言包有意外字符 | 无 | ==3.0.0.11 | 3.0.1.12 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/26) | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.11rc1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30011rc2.md b/documents/zh-CN/updatelog/beta/3/30011rc2.md new file mode 100644 index 00000000..7ebda915 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30011rc2.md @@ -0,0 +1,36 @@ +--- +title: 3.0.0.11rc2 +layout: doc +--- + +# 3.0.0.11rc2 + +发布日期:2025/12/14 + +## 更新内容 + +- 添加对英语的支持 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 英语语言包有意外字符 | 无 | ==3.0.0.11 | 3.0.1.12 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/26) | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.11rc2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30112rc1.md b/documents/zh-CN/updatelog/beta/3/30112rc1.md new file mode 100644 index 00000000..05d974aa --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30112rc1.md @@ -0,0 +1,42 @@ +--- +title: 3.0.1.12rc1 +layout: doc +--- + +# 3.0.1.12rc1 + +发布日期:2025/12/19 + +## 更新内容 + +- 优化了语言包 +- - 修改了英语语言包,修复了部分版本号字符显示没有空格的问题,并删除了多余的逗号 +- - 其他语言包优化... +- 错误样式自动卸载功能 +- 修复了一些bug: +- - 切换语言后,再次打开的界面会变成选择更新后的语言,导致的界面割裂感 +- - 修复了英语语言包有意外字符的问题 +- - 其他一些bug... +- - 调整设置:更改了'软件需要重启'的界面,变成一个弹窗,并删除了字符显示 +- - 移除了clickmouse 初始化,现在自动获取语言 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.13(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.1.12rc1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/30213rc1.md b/documents/zh-CN/updatelog/beta/3/30213rc1.md new file mode 100644 index 00000000..76fdb986 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/30213rc1.md @@ -0,0 +1,36 @@ +--- +title: 3.0.2.13rc1 +layout: doc +--- + +# 3.0.2.13rc1 + +发布日期:2025/12/27 + +## 更新内容 + +- 对颜色管理优化 +- - 添加了检测windows强调色功能 +- - 添加了浅色模式下的深色标题栏 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有些时候,风格变化的按钮仍是原风格的颜色 | 无 | ==3.0.2.13 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/40) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.14(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.2.13rc1-re1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/31015b1.md b/documents/zh-CN/updatelog/beta/3/31015b1.md new file mode 100644 index 00000000..fb55f538 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/31015b1.md @@ -0,0 +1,34 @@ +--- +title: 3.1.0.15beta1 +layout: doc +--- + +# 3.1.0.15beta1 +发布日期:2026/01/10 + +## 更新内容 + +- 修改了风格: +- - 将风格整合为一个文件 +- - 移除了无风格模式 +- - 修复部分风格显示bug +- - 添加风格越界保护 +- - 更改风格 +- 统一初始化和安装扩展应用的风格 +- 完成的安装程序和包管理器 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| init程序的选择组件,即使窗口显示成中文仍是英文 | 无 | >=3.1.0.15beta1,仅作用与测试版 | 无 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/74) | +| 设置的响应延迟滚动条显示为1 | 无 | >=3.1.0.15;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.14beta1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/31015b2.md b/documents/zh-CN/updatelog/beta/3/31015b2.md new file mode 100644 index 00000000..b513df2f --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/31015b2.md @@ -0,0 +1,28 @@ +--- +title: 3.1.0.15beta2 +layout: doc +--- + +# 3.1.0.15beta3 +发布日期:2026/01/11 + +## 更新内容 + +- 修改文件安装的开始菜单创建文件 +- 修改了删除程序,现在不能从控制面板移除 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| init程序的选择组件,即使窗口显示成中文仍是英文 | 无 | >=3.1.0.15beta1,仅作用与测试版 | 无 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/74) | +| 设置的响应延迟滚动条显示为1 | 无 | >=3.1.0.15;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.15beta2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/31015b3.md b/documents/zh-CN/updatelog/beta/3/31015b3.md new file mode 100644 index 00000000..d8e16ecd --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/31015b3.md @@ -0,0 +1,30 @@ +--- +title: 3.1.0.15beta1 +layout: doc +--- + +# 3.1.0.15beta3 +发布日期:2026/01/17 + +## 更新内容 + +- 修改了风格 +- 修复了一些bug +- 修改style, 在浅色模式下使用浅色勾 +- 修改了删除程序,现在不能从控制面板移除 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| init程序的选择组件,即使窗口显示成中文仍是英文 | 无 | >=3.1.0.15beta1,仅作用与测试版 | 无 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/74) | +| 设置的响应延迟滚动条显示为1 | 无 | >=3.1.0.15;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.15beta3) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/31015dev0.md b/documents/zh-CN/updatelog/beta/3/31015dev0.md new file mode 100644 index 00000000..0fbc257d --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/31015dev0.md @@ -0,0 +1,36 @@ +--- +title: 3.1.0.15.dev0 +layout: doc +--- + +# 3.1.0.15.dev0 + +发布日期:2025/12/27 + +## 更新内容 + +- 添加扩展,宏和文档的菜单 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有些时候,风格变化的按钮仍是原风格的颜色 | 无 | ==3.0.2.13 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/40) | +| 设置先开启再关闭,此时更改windows主题会显示设置 | 无 | ==3.0.2.13 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/41) | +| 悬浮在menu上时,状态栏的字符会消失 | 无 | >=3.0.0.11;<3.1.0.15 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/43) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.14(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.14.dev0) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/31217b1.md b/documents/zh-CN/updatelog/beta/3/31217b1.md new file mode 100644 index 00000000..c99070e6 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/31217b1.md @@ -0,0 +1,28 @@ +--- +title: 3.1.2.17beta1 +layout: doc +--- + +# 3.1.2.17beta1 +发布日期:2026/01/23 + +## 更新内容 + +- 优化性能 +- 添加设置延迟设置 +- 优化连点器设置显示 +- 修改更新日志 +- 修复开机自启动显示“langs.json不存在” + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.2.17beta1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/31217b3.md b/documents/zh-CN/updatelog/beta/3/31217b3.md new file mode 100644 index 00000000..66be50df --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/31217b3.md @@ -0,0 +1,30 @@ +--- +title: 3.1.2.17beta3 +layout: doc +--- + +# 3.1.2.17beta3 +发布日期:2026/01/25 + +## 更新内容 + +- 对于测试版,所有clickmouse组件图标下方会有'pre'字样。 +- 新的提示框版本,现在提示框的选项已经翻译成中文,稍后会出多语言版本。 +- 修复清理缓存工具勾选为全选后子选项选择框无响应的bug +- 修复设置的响应延迟滚动条显示为1的问题 +- 修复init程序无法运行的bug +- 重构clickmouse缓存清除工具; +- 修改日志,现在减少了输出文本,并更易管理 +- 现在计算缓存会过滤无法删除文件,计算更准确 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.2.17beta3) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32018b4.md b/documents/zh-CN/updatelog/beta/3/32018b4.md new file mode 100644 index 00000000..bdaab3c5 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32018b4.md @@ -0,0 +1,31 @@ +--- +title: 3.2.0.18beta4 +layout: doc +--- + +# 3.2.0.18beta4 +发布日期:2026/02/03 + +## 更新内容 + +- 完成的更新安装服务 +- 添加“反馈bug”按钮 +- 修复了一些bug: +- - 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 #123 +- - 英文模式拖动响应延迟,总延迟提示变为中文 #121 +- - 修复了更新资源解密失败的问题 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 如果clickmouse检查到的最新版本没有clickmouse.7z会报错 | 无 | >=3.2.0.18beta3;<3.2.0.18beta7,仅在测试版 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/140) | +| 更新软件更新失败,显示404 | 无 | >=3.2.0.18beta3;<3.2.0.18beta7,仅在测试版 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/151) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 如果你的语言是中文,最大值的单位将显示为英文 | 无 | >=3.2.0.18beta4;<3.2.0.19beta9, 仅在测试版中 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/170) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.18beta4-re2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32018b5.md b/documents/zh-CN/updatelog/beta/3/32018b5.md new file mode 100644 index 00000000..a2537a7c --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32018b5.md @@ -0,0 +1,28 @@ +--- +title: 3.2.0.18beta5 +layout: doc +--- + +# 3.2.0.18beta5 +发布日期:2026/02/04 + +## 更新内容 + +- 添加了主题,原有的主题被重新翻译为了”风格“ +- ~~如果release是重制版,则不会检查到该更新~~bug仍然存在 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.2.0.18beta7 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 如果clickmouse检查到的最新版本没有clickmouse.7z会报错 | 无 | >=3.2.0.18beta3;<3.2.0.18beta7,仅在测试版 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/140) | +| 更新软件更新失败,显示404 | 无 | >=3.2.0.18beta3;<3.2.0.18beta7,仅在测试版 | 3.2.0.18beta7 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/151) | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 如果你的语言是中文,最大值的单位将显示为英文 | 无 | >=3.2.0.18beta4;<3.2.0.19beta9, 仅在测试版中 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/170) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.18beta5) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32018b8.md b/documents/zh-CN/updatelog/beta/3/32018b8.md new file mode 100644 index 00000000..fb2849a1 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32018b8.md @@ -0,0 +1,29 @@ +--- +title: 3.2.0.18beta8 +layout: doc +--- + +# 3.2.0.18beta8 +发布日期:2026/02/14 + +## 更新内容 + +- 修复更新程序bug: +- - 如果版本号标签是重制版,那么下载程序无法使用报错404 +- - 更新软件索引错误导致更新失败,显示404 +- - 如果clickmouse检查到的最新版本没有clickmouse.7z会报错 +- 文档功能完成 +- 移除了本地的更新日志,变为在线文档查阅 +- 修改了关于界面提示文本 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 英语模式无法启用无限连点| 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 如果你的语言是中文,最大值的单位将显示为英文 | 无 | >=3.2.0.18beta4;<3.2.0.19beta9, 仅在测试版中 | 3.2.0.19beta9 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/170) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.18beta8-re1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32019b10.md b/documents/zh-CN/updatelog/beta/3/32019b10.md new file mode 100644 index 00000000..d0ae7414 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32019b10.md @@ -0,0 +1,27 @@ +--- +title: 3.2.0.19beta10 +layout: doc +--- + +# 3.2.0.18beta10 +发布日期:2026/02/19 + +## 更新内容 + +- 修复Init无法运行的问题 +- 精简了无用的内容 + +## 已知问题 +| 问题描述 | 解决方案 | 受影响版本 | 已修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 第一次加载设置不会加载设置默认值的估计时间 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/182) | +| 如果有更新并安装完成,那么关闭更新完成再打开会显示正在更新 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/185) | +| 回滚更新时候,文件夹不会回滚 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/184) | +| 当模式是深色且多次打开一个窗口时候,标题栏变为白色 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/183) | +| 托盘右键语言显示错误 | 无 | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 如果修改了热键,那么无法使用托盘右键 | >=3.2.0.19beta9;仅在测试版 | 无 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +# 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19beta10) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32019b11.md b/documents/zh-CN/updatelog/beta/3/32019b11.md new file mode 100644 index 00000000..e4c136a7 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32019b11.md @@ -0,0 +1,29 @@ +--- +title: 3.2.0.19beta11 +layout: doc +--- + +# 3.2.0.19beta11 +发布日期: 2026/02/20 + +## 更新内容 + +- 修复一些bug: +- - 无法回滚clickmouse更新文件夹 +- - 第一次加载设置不会加载设置默认值的估计时间 +- - 如果有更新并安装完成,那么关闭更新完成再打开会显示正在更新 +- - 当模式是深色且多次打开一个窗口时候,标题栏变为白色 +- 在安装完成提示的地方回滚时候,关闭该窗口 +- 禁止在运行连点时候切换连点 +- 优化性能 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 托盘右键语言显示错误 | 无 | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 如果修改了热键,那么无法使用托盘右键 | >=3.2.0.19beta9;仅在测试版 | 无 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19beta11) diff --git a/documents/zh-CN/updatelog/beta/3/32019b9.md b/documents/zh-CN/updatelog/beta/3/32019b9.md new file mode 100644 index 00000000..74ff64e8 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32019b9.md @@ -0,0 +1,34 @@ +--- +title: 3.2.0.19beta9 +layout: doc +--- + +# 3.2.0.19beta9 +发布日期:2026/02/18 + +## 更新内容 + +- 大幅精简组件,优化代码结构,提升性能并压缩安装包体积。 +- 修复了一些bug: +- - 修复了英语模式无法启用无限连点的问题。 +- - 修复了英语模式"已暂停"显示错误的问题。 +- - 修复了如果你的语言是中文,最大值的单位将显示为英文的问题。 +- - 修复了无法确认安装,需要点击取消安装的问题 +- 添加新功能的英语翻译 +- 移除了“帮助”菜单的热键帮助,因为现在有了自定义热键。 +- 修改默认响应延迟为100ms,1000ms的延迟过于卡顿。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| init程序无法加载 | 无 | 3.2.0.19beta9 | 3.2.0.19beta10 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/173) | +| 如果有更新并安装完成,那么关闭更新完成再打开会显示正在更新 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/185) | +| 回滚更新时候,文件夹不会回滚 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/184) | +| 当模式是深色且多次打开一个窗口时候,标题栏变为白色 | 无 | 3.1.3.18; 3.2.0.19beta9; 3.2.0.19beta10 | 3.2.0.19beta11 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/183) | +| 托盘右键语言显示错误 | 无 | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 如果修改了热键,那么无法使用托盘右键 | >=3.2.0.19beta9;仅在测试版 | 无 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19beta9) diff --git a/documents/zh-CN/updatelog/beta/3/32019rc1.md b/documents/zh-CN/updatelog/beta/3/32019rc1.md new file mode 100644 index 00000000..d2571b2c --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32019rc1.md @@ -0,0 +1,25 @@ +--- +title: 3.2.0.19rc1 +layout: doc +--- + +# 3.2.0.19rc1 +发布日期:2026/02/22 + +## 更新内容 + +- 添加简单的文档和更新设置 +- 简单修改了样式 +- 增加了更新时候的安全性 +- 精简组件 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 托盘右键语言显示错误 | 无 | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 如果修改了热键,那么无法使用托盘右键 | >=3.2.0.19beta9;仅在测试版 | 无 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19rc1) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32019rc2.md b/documents/zh-CN/updatelog/beta/3/32019rc2.md new file mode 100644 index 00000000..d54d8270 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32019rc2.md @@ -0,0 +1,22 @@ +--- +title: 3.2.0.19rc2 +layout: doc +--- + +# 3.2.0.19rc2 +发布日期:2026/02/24 + +## 更新内容 + +- 修改样式 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 托盘右键语言显示错误 | 无 | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 如果修改了热键,那么无法使用托盘右键 | >=3.2.0.19beta9;仅在测试版 | 无 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/206) | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19rc2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/32019rc3.md b/documents/zh-CN/updatelog/beta/3/32019rc3.md new file mode 100644 index 00000000..0cfcc277 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32019rc3.md @@ -0,0 +1,23 @@ +--- +title: 3.2.0.19rc3 +layout: doc +--- + +# 3.2.0.19rc3 +发布日期:2026/03/10 + +## 更新内容 + +- 修复一些bug: +- - 托盘右键语言显示错误 +- - 无法使用“设置延迟“功能 +- - 如果修改了热键,那么无法使用托盘右键 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19rc3) diff --git a/documents/zh-CN/updatelog/beta/3/32120a1.md b/documents/zh-CN/updatelog/beta/3/32120a1.md new file mode 100644 index 00000000..3d5aedb0 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32120a1.md @@ -0,0 +1,29 @@ +--- +title: 3.2.1.20alpha1 +layout: doc +--- + +# 3.2.1.20alpha1 +发布日期:2026/03/10 + +## 更新内容 + +- 之后,预览版的新功能会先加入到实验室中,到beta阶段才会逐一合并到正式版 +- 新增实验项目:更多的设置,包括: +- - 重置开机启动组件 +- - 反馈软件网址 +- - 重置文档链接按钮 +- - 通知设置 +- 修复一些bug: +- - 托盘右键语言显示错误 +- - 无法使用“设置延迟“功能 +- - 如果修改了热键,那么无法使用托盘右键 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.20alpha1) diff --git a/documents/zh-CN/updatelog/beta/3/32120a2.md b/documents/zh-CN/updatelog/beta/3/32120a2.md new file mode 100644 index 00000000..462b8965 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/32120a2.md @@ -0,0 +1,20 @@ +--- +title: 3.2.1.20alpha2 +layout: doc +--- + +# 3.2.1.20alpha2 +发布日期:2026/03/14 + +## 更新内容 + +- 添加了“无实验项时候,关闭实验室菜单”的设置项目 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | 问题链接 | +| --- | --- | --- | --- | --- | --- | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19beta5;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.1.20alpha2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/beta/3/33022a4.md b/documents/zh-CN/updatelog/beta/3/33022a4.md new file mode 100644 index 00000000..dc274761 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/33022a4.md @@ -0,0 +1,35 @@ +--- +title: 3.2.3.22 +layout: doc +--- + +# 3.2.3.22 +发布日期: 2026/04/19 + +这是一个开发测试更新,为`3.3.0`的开发周期的第3个版本,由原`3.2.1.20`升级而来,同步了现在的`3.2.1.20`和`3.2.2.21`。 + +## 更新内容 + +- 修复以下问题: +- - 在反色或深色模式下,非windows默认样式的样式的菜单栏会显示异常:字体是当前风格的,但是背景是系统配色的。 +- - 在反色或深色模式下,非windows默认样式的标题栏有可能“卡壳”,深色模式标题栏是浅色的 +- - 清理缓存无法清理 +- 升级到Qt 6.11版本,修复或添加了一些显示: +- - 现在,最大化按钮会正常隐藏或变浅色,和3.1.0用的Qt 6.9版本的效果一样,而不是6.10的不起效果。 +- - 添加了沉浸式圆角菜单栏和下拉框,而不是直角下拉框和向没有抠图一样的圆角菜单栏。 +- 调整了响应延迟的下限,从1ms调整为50ms,以修复标题栏“卡壳”的问题 +- 新增新的产品: `clickclean`,大幅精简了clickmouse,只保留连点器和其相关的设置,它的更新频率会比clickmouse慢,并且要手动检查更新。 +- 现在开机自启动会在后台运行,若你是旧版本用户,需要在设置中重置开机自启动配置才能启用。 +- 设置窗口图标变成了clickmouse的logo,而不是带有设置图标的clickmouse logo。 +- `More settings`实验项的描述开头从`Can`变成了`To` + +## ClickClean更新内容 +- 设置窗口图标变成了clickmouse的logo,而不是带有设置图标的clickmouse logo。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.3.0.22alpha4) diff --git a/documents/zh-CN/updatelog/beta/3/33023a5.md b/documents/zh-CN/updatelog/beta/3/33023a5.md new file mode 100644 index 00000000..0e3a5f52 --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/33023a5.md @@ -0,0 +1,28 @@ +--- +title: 3.3.0.22alpha5 +layout: doc +--- + +# 3.3.0.22alpha5 +发布日期: 2026/05/23 + +> 这是一个开发测试版更新,为`3.3.0`的开发周期的第4个版本,同步了现在的`3.2.3.22`。 + +## 更新内容 + +- 现在无需等到第一次连点按下,启动连点时候状态栏会立即显示连点状态 +- 之后,如果已经有一个clickmouse实例在运行,再点击一个clickmouse程序会弹出提示框而不是直接不显示窗口。 +- *[实验室功能]*现在将**连点属性**和**快速连点设置**两个窗口与代码解耦,变成独立的gui文件。 +> 有关代码解耦的消息,请查阅[这个](/zh-CN/blog/decoupling-code-and-ui) + +## ClickClean更新内容 +- 现在无需等到第一次连点按下,启动连点时候状态栏会立即显示连点状态 +- 之后,如果已经有一个clickmouse实例在运行,再点击一个clickmouse程序会弹出提示框而不是直接不显示窗口。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无法打开"Decoupling UI and program"这个开发项 | None | clickmouse 测试版, 3.3.0.23alpha5 | None | 正在修复 | https://github.com/xystudiocode/pyClickMouse/issues/255 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.3.0.22alpha5) diff --git a/documents/zh-CN/updatelog/beta/3/33023a6.md b/documents/zh-CN/updatelog/beta/3/33023a6.md new file mode 100644 index 00000000..0e959f2f --- /dev/null +++ b/documents/zh-CN/updatelog/beta/3/33023a6.md @@ -0,0 +1,32 @@ +--- +title: 3.3.0.23alpha6 +layout: doc +--- + +# 3.3.0.23alpha6 + +发布日期:2026/06/27 + +> 这是一个开发测试版更新,为`3.3.0`的开发周期的第5个版本。 + +## 更新内容 +- [refactor]升级日志系统,更详细 +- [refactot]替换部分ui,强制新版ui +- [feat]添两个连点器新设置: +- - 更换部分输入框内容不影响计算 +- - 更换部分单位不影响计算 +- [fix]修复部分bug,优化用户体验 +- - 更改默认设置值后,主窗口的值不变 +- - 修改默认值单位自动更新主窗口的默认值单位 +- - 无法打开"Decoupling UI and program"这个开发项 +- - 当连点总耗时大于1.8e308天时候程序会崩溃 +- 移除"快速设置延迟"界面,因为没有太大用 +- [build]升级编译系统 +- - 合并api、主库和cython版本的文件 +- - 修改了pyd的版本实现,可以为你的python版本制作自己的pyd文件 +- - 修改了runhook的位置,移动到根目录 +- - 将git clean移动到runhook +- 添加多预言版本的文档 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.3.0.23alpha6) diff --git a/documents/zh-CN/updatelog/final/1/1000.md b/documents/zh-CN/updatelog/final/1/1000.md new file mode 100644 index 00000000..327dd79d --- /dev/null +++ b/documents/zh-CN/updatelog/final/1/1000.md @@ -0,0 +1,22 @@ +--- +title: 1.0.0.0 +layout: doc +--- + +# 1.0.0.0 + +发布日期:2025/08/03 + +## 更新内容 + +初始版本 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | issue链接 | +| --- | --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 + +[点击下载](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.0) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/1/1011.md b/documents/zh-CN/updatelog/final/1/1011.md new file mode 100644 index 00000000..daf48c00 --- /dev/null +++ b/documents/zh-CN/updatelog/final/1/1011.md @@ -0,0 +1,26 @@ +--- +title: 1.0.1.1 +layout: doc +--- + +# 1.0.1.1 + +发布日期:2025/08/04 + +## 更新内容 + +- 对'关于'界面更新: + +- - 添加了'支持作者按钮' +- - 移动'更新按钮'到主窗口的'帮助'菜单 +- 添加了连点失败提示 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 + +[点击下载](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.1.0) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/1/1022.md b/documents/zh-CN/updatelog/final/1/1022.md new file mode 100644 index 00000000..a6094101 --- /dev/null +++ b/documents/zh-CN/updatelog/final/1/1022.md @@ -0,0 +1,22 @@ +--- +title: 1.0.2.2 +layout: doc +--- + +# 1.0.2.2 + +发布日期:2025/08/08 + +## 更新内容 + +添加了"更新日志"选项。 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 当关闭"更新日志"时,主窗口一并关闭 | 无 | 1.0.2.2 | 1.0.2.3 | 已修复 | 无 | +| 部分地方显示有误 | 无 | 1.0.2.2 | 1.0.2.3 | 已修复 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.2.2) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/1/1023.md b/documents/zh-CN/updatelog/final/1/1023.md new file mode 100644 index 00000000..e8fbb49f --- /dev/null +++ b/documents/zh-CN/updatelog/final/1/1023.md @@ -0,0 +1,23 @@ +--- +title: 1.0.2.3 +layout: doc +--- + +# 1.0.2.3 + +发布日期:2025/08/12 + +## 更新内容 + +- 修改了部分显示字符 + +- 修复了当关闭"更新日志"时,主窗口一并关闭的问题 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudio889/clickmouse/releases/tag/v1.0.2.3) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/2/2004.md b/documents/zh-CN/updatelog/final/2/2004.md new file mode 100644 index 00000000..b4ba262f --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/2004.md @@ -0,0 +1,21 @@ +--- +title: 2.0.0.4 +layout: doc +--- + +# 2.0.0.4 + +发布日期:2025/08/21 + +## 更新内容 + +- 使用python和wxPython重写了程序的GUI界面,让程序更加美观、简洁。 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.0.0.0)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.0.0.4) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/2/2105.md b/documents/zh-CN/updatelog/final/2/2105.md new file mode 100644 index 00000000..df847913 --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/2105.md @@ -0,0 +1,23 @@ +--- +title: 2.1.0.5 +layout: doc +--- + +# 2.1.0.5 + +发布日期:2025/08/24 + +## 更新内容 + +- 添加日志系统,若有bug建议同时提供日志文件 +- 添加自动更新功能,可自动检测新版本并下载安装 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 不显示更新提示 | 请手动前往[github releases](https://github.com/xystudiocode/pyClickMouse/releases)或[gitee releases](https://gitee.com/xystudio889/pyClickMouse/releases)手动下载新版本 | >=2.1.0.5;<2.2.0.7 | 2.2.0.7 | 已修复 | 无 | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5 | 无 | 已修复 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.1.0.5)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.1.0.5) diff --git a/documents/zh-CN/updatelog/final/2/2116.md b/documents/zh-CN/updatelog/final/2/2116.md new file mode 100644 index 00000000..f191589b --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/2116.md @@ -0,0 +1,22 @@ +--- +title: 2.1.1.6 +layout: doc +--- + +# 2.1.1.6 + +发布日期:2025/08/25 + +## 更新内容 + +- ~~修复了不显示更新提示的问题~~ 仍然有bug,撤销修复。 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 不显示更新提示 | 请手动前往[github releases](https://github.com/xystudiocode/pyClickMouse/releases)或[gitee releases](https://gitee.com/xystudio889/pyClickMouse/releases)手动下载新版本 | >=2.1.0.5;<2.2.0.7 | 2.2.0.7 | 已修复 | 无 | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5 | 无 | 已修复 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.1.1.6)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.1.1.6) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/2/2207.md b/documents/zh-CN/updatelog/final/2/2207.md new file mode 100644 index 00000000..d5541d4a --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/2207.md @@ -0,0 +1,33 @@ +--- +title: 2.2.0.7 +layout: doc +--- + +# 2.2.0.7 + +发布日期:2025/09/05 + +## 更新内容 + +- 添加了清理缓存功能 + +- 更改和添加了上方的menu栏的功能: +- - 更新相关功能移动到更新菜单栏 +- - 添加了"编辑/选项"菜单栏 +- 修复了无法检查更新的问题 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5 | 无 | 已修复 | 无 | + +## 下个版本预告 +版本号为2.3.0.8(暂定) + +预计更新内容: +- 添加更新安装器,不用替换文件夹 +- 添加安装管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.0.7)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.0.7) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/2/2218.md b/documents/zh-CN/updatelog/final/2/2218.md new file mode 100644 index 00000000..5a6d9845 --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/2218.md @@ -0,0 +1,34 @@ +--- +title: 2.2.1.8 +layout: doc +--- + +# 2.2.1.8 + +发布日期:2025/10/02 + +## 更新内容 + +- 添加了语言选择功能 +- 添加了找不到文件的提示 +- 重构了一些代码 + +## 已知问题 + +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 2.1.1.8的更新日志不显示版本号的问题 | 无 | >=2.2.1.8;<2.2.3.10 | 2.2.3.10 | 已修复 | 无 | +| 英文下的关于界面出现中文按钮 | 无 | >=2.2.1.8;<2.2.3.10 | 2.2.3.10 | 已修复 | 无 | +| 清理缓存选择"全选"会切换为"部分选择" | 无 | >=2.2.1.8;<2.2.3.10 | 2.2.3.10 | 已修复 | 无 | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5 | 无 | 已修复 | 无 | + +## 下个版本预告 +版本号为2.3.0.8(暂定) + +预计更新内容: +- 添加更新安装器,不用替换文件夹 +- 添加安装管理器 +- 添加命令行 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.1.8)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.1.8) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/2/2229.md b/documents/zh-CN/updatelog/final/2/2229.md new file mode 100644 index 00000000..bb6b2320 --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/2229.md @@ -0,0 +1,38 @@ +--- +title: 2.2.2.9 +layout: doc +--- + +# 2.2.2.9 + +发布日期:2025/10/03 + +## 更新内容 + +- 修复了一些bug: +- - 修复了2.1.1.8的更新日志不显示版本号的问题 +- - 修复了在英文下,"关于"页面出现中文按钮的问题 +- - 修复了"清理缓存"的问题: +- - - 修复了"全选"会切换为"部分选中"提示的问题 +- - - 修复了部分选中时候显示为"全不选"问题 + +- 对"更换语言包需要重启"更新: +- - 修改了语言提示和显示图标 +- - 修改了点击步骤,不会再有选择仅保存语言和保存所有设置的提示 +- - 删除了"立即重启"按钮 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5 | 无 | 已修复 | 无 | + +## 下个版本预告 +版本号为2.3.0.11(暂定) + +预计更新内容: +- 添加更新安装器,不用替换文件夹 +- 添加安装管理器 +- 添加命令行 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.2.9)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.2.9) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/2/22310.md b/documents/zh-CN/updatelog/final/2/22310.md new file mode 100644 index 00000000..77ff99b9 --- /dev/null +++ b/documents/zh-CN/updatelog/final/2/22310.md @@ -0,0 +1,28 @@ +--- +title: 2.2.3.10 +layout: doc +--- + +# 2.2.3.10 + +发布日期:2025/11/29 + +## 更新内容 + +- 改进了clickmouse的质量 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5 | 无 | 已修复 | 无 | + +## 下个版本预告 +版本号为2.3.0.11(暂定) + +预计更新内容: +- 添加更新安装器,不用替换文件夹 +- 添加安装管理器 +- 添加命令行 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/2.2.3.10)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/2.2.3.10) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/30011.md b/documents/zh-CN/updatelog/final/3/30011.md new file mode 100644 index 00000000..7d945a6f --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/30011.md @@ -0,0 +1,44 @@ +--- +title: 3.0.0.11 +layout: doc +--- + +# 3.0.0.11 + +发布日期:2025/12/14 + +## 更新内容 + +- 使用Pyside6重构的ui,使界面焕然一新 +- 新的设置内容 +- 添加热键启动,热键请见软件帮助 +- 添加连点输入次数功能 +- 添加状态栏,查看连点状况。 +- 暂时禁用了原计划在2.3.0推出的功能,延期到3.1.0.12。 +- 修复了一些bug + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 英语语言包有意外字符 | 无 | ==3.0.0.11 | 3.0.1.12 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/26) | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 悬浮在menu上时,状态栏的字符会消失 | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/43) | +| 切换语言后,再次打开的界面会变成选择更新后的语言,导致的界面割裂感 | 无 | ==3.0.0.11 | 3.0.1.12 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/23) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.12(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 +- 文档功能 +- 添加命令行和cli + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.0.11)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.0.11) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/30112.md b/documents/zh-CN/updatelog/final/3/30112.md new file mode 100644 index 00000000..032ad961 --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/30112.md @@ -0,0 +1,42 @@ +--- +title: 3.0.1.12 +layout: doc +--- + +# 3.0.1.12 + +发布日期:2025/12/20 + +## 更新内容 + +- 优化了语言包 +- - 修改了英语语言包,修复了部分版本号字符显示没有空格的问题,并删除了多余的逗号 +- - 其他语言包优化... +- 错误样式自动卸载功能 +- 修复了一些bug: +- - 切换语言后,再次打开的界面会变成选择更新后的语言,导致的界面割裂感 +- - 修复了英语语言包有意外字符的问题 +- - 其他一些bug... +- - 调整设置:更改了'软件需要重启'的界面,变成一个弹窗,并删除了字符显示 +- - 移除了clickmouse 初始化,现在自动获取语言 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.0.3.14 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.13(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.1.12)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.1.12) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/30213.md b/documents/zh-CN/updatelog/final/3/30213.md new file mode 100644 index 00000000..d184c0d6 --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/30213.md @@ -0,0 +1,36 @@ +--- +title: 3.0.2.13 +layout: doc +--- + +# 3.0.2.13 + +发布日期:2025/12/27 + +## 更新内容 + +- 对颜色管理优化 +- - 添加了检测windows强调色功能 +- - 添加了浅色模式下的深色标题栏 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 设置触发重启后,会回到第一页 | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/42) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 在有些时候,风格变化的按钮仍是原风格的颜色 | 无 | ==3.0.2.13 | 3.0.3.14 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/40) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.14(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.2.13)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.2.13) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/30314.md b/documents/zh-CN/updatelog/final/3/30314.md new file mode 100644 index 00000000..adde3d17 --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/30314.md @@ -0,0 +1,45 @@ +--- +title: 3.0.3.14 +layout: doc +--- + +# 3.0.3.14 + +发布日期:2026/01/11 + +## 更新内容 + +- 修复一些问题: +- - 英语语言包有意外字符的问题 +- - 设置先开启再关闭,此时更改windows主题会显示设置 +- - 设置触发重启后,会回到第一页 +- - 悬浮在menu上时,状态栏的字符会消失 +- - 有些情况连点器结束不会导致按钮显示变化 +- 添加保留设置标签页面功能 +- 现在连点器运行时候不能进行连点器设置或者时间更改,以避免一些误会。 +- 修改了风格: +- - 将风格整合为一个文件 +- - 移除了无风格模式 +- - 修复部分风格显示bug +- - 添加风格越界保护 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 设置无法启用`连点次数错误时候使用默认值` | 无 | >=3.0.0.11;<3.1.0.15 | 3.1.0.15 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/70) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +版本号为3.1.0.15(暂定) + +预计更新内容: +- 添加初始化程序,不用替换文件夹 +- 添加包管理器 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.0.3.14)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.0.3.14) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/31015.md b/documents/zh-CN/updatelog/final/3/31015.md new file mode 100644 index 00000000..5a6a1d3f --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/31015.md @@ -0,0 +1,51 @@ +--- +title: 3.1.0.15 +layout: doc +--- + +# 3.1.0.15 + +发布日期:2026/01/11 + +## 更新内容 + +- 添加包管理器 +- 添加初始化程序和控制面板安装信息功能 +- 添加卸载clickmouse功能 +- 添加clickmouse 恢复环境组件扩展 +- 修改了风格: +- - 添加了系统色的悬停亮色 +- - 设置选择框亮色模式下显示白色勾 +- - 修复一些风格的bug +- - 一些其他功能 +- 修复了一些bug: +- - 设置无法启用“连点次数错误时候使用默认值” +- - 修复了部分风格的问题 +- - 其他bug修复 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 设置的响应延迟滚动条显示为1 | 无 | >=3.0.0.11;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 +## 3.1.1.16 +- 添加开机自启动设置 +## 3.2.0.17 +- 添加更新安装器 +- 添加一些设置 +- - 主题设置 +- - 文档设置 +- - ~~更新设置~~暂时不在3.2.0版本中添加 +- 修复一些bug +- 文档功能 +- 移除本地更新日志 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.0.15)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.1.0.15) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/31116.md b/documents/zh-CN/updatelog/final/3/31116.md new file mode 100644 index 00000000..58e49e2c --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/31116.md @@ -0,0 +1,44 @@ +--- +title: 3.1.1.16 +layout: doc +--- + +# 3.1.1.16 + +发布日期:2026/01/22 + +## 更新内容 + +- 添加开机自启动设置 +- 添加防多开功能 +- 优化程序性能 +- 添加更新文件自动修改控制面板版本号功能 +- 修复一些bug + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 设置的响应延迟滚动条显示为1 | 无 | >=3.0.0.11;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/115) | +| 清理缓存工具勾选为全选后子选项选择框无响应 | 手动勾选子选项 | >=3.0.3.14;<3.1.2.17 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/110) | +| init程序无法运行 | 手动以管理员身份运行 | ==3.1.1.16 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/116) | +| 开机自启动显示“langs.json不存在” | 手动启动 | ==3.1.1.16 | 3.1.2.17 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/90) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 + +## 3.2.0.17 +- 添加更新安装器 +- 添加一些设置 +- - 主题设置 +- - 文档设置 +- - ~~更新设置~~暂时不在3.2.0版本中添加 +- 修复一些bug +- 文档功能 +- 移除本地更新日志 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.1.16)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.1.1.16) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/31217.md b/documents/zh-CN/updatelog/final/3/31217.md new file mode 100644 index 00000000..d5d9dab0 --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/31217.md @@ -0,0 +1,51 @@ +--- +title: 3.1.2.17 +layout: doc +--- + +# 3.1.2.17 + +发布日期:2026/01/31 + +## 更新内容 + +- 对于测试版,所有clickmouse组件图标下方会有'pre'字样。 +- 新的提示框版本,现在提示框的选项已经翻译成中文,稍后会出多语言版本。 +- 修复清理缓存工具勾选为全选后子选项选择框无响应的bug +- 修复设置的响应延迟滚动条显示为1的问题 +- 修复开机自启动无法运行的问题 +- 重构clickmouse缓存清除工具 +- 修改日志,现在减少了输出文本,并更易管理 +- 现在计算缓存会过滤无法删除文件,计算更准确 +- 优化性能 +- 添加设置延迟设置 +- 优化连点器设置显示 +- 修改更新日志 +- 修复开机自启动显示“langs.json不存在” + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 如果release是重制版,则不会检查到该更新 | 无 | >=2.1.0.5;<3.1.3.18 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/132) | +| 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/123) | +| 英文模式拖动响应延迟,总延迟提示变为中文 | 无 | >=3.1.2.17 | 无 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/121) | +| 英语模式无法启用无限连点 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/168) | +| 英语模式"已暂停"显示错误 | 无 | >=3.0.0.11 | 3.1.3.18 | 已修复 | [issue链接](https://github.com/xystudiocode/pyClickMouse/issues/169) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | + +## 下个版本预告 + +## 3.1.3.18 +- 添加更新安装器 +- 添加一些设置 +- - 主题设置 +- - 文档设置 +- - ~~更新设置~~暂时不在3.2.0版本中添加 +- - 热键设置 +- 优化性能 +- 修复一些bug +- 文档功能 +- 移除本地更新日志 + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.2.17)或[中国加速链接](https://gitee.com/xystudio889/pyClickMouse/releases/tag/3.1.2.17) \ No newline at end of file diff --git a/documents/zh-CN/updatelog/final/3/31318.md b/documents/zh-CN/updatelog/final/3/31318.md new file mode 100644 index 00000000..5fbcfc9b --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/31318.md @@ -0,0 +1,40 @@ +--- + +title: 3.13.18 +layout: doc +--- + +# 3.1.3.18 +发布日期:2026/02/19 + +## 更新内容 + +- 添加“反馈bug”按钮 +- 修复了一些bug: +- - 在有更新的情况下,托盘打开应用程序会显示有更新,导致一直弹窗 +- - 英文模式拖动响应延迟,总延迟提示变为中文 +- - 修复了更新资源解密失败的问题 +- - 如果版本号标签是重制版,那么下载程序无法使用报错404 +- - 修复了英语模式无法启用无限连点的问题。 +- - 修复了英语模式"已暂停"显示错误的问题。 +- - 修复了如果你的语言是中文,最大值的单位将显示为英文的问题。 +- - 修复了无法确认安装,需要点击取消安装的问题 +- 文档功能完成 +- 移除了本地的更新日志,变为在线文档查阅 +- 修改了关于界面提示文本 +- 大幅精简组件,优化代码结构,提升性能并压缩安装包体积。 +- 修改默认响应延迟为100ms,1000ms的延迟过于卡顿。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 第一次加载设置不会加载设置默认值的估计时间 | 无 | 3.1.3.18 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/182) | +| 如果有更新并安装完成,那么关闭更新完成再打开会显示正在更新 | 无 | 3.1.3.18 | 3.2.0.19 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/185) | +| 回滚更新时候,文件夹不会回滚 | 无 | 3.1.3.18 | 3.2.0.19 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/184) | +| 当模式是深色且多次打开一个窗口时候,标题栏变为白色 | 无 | 3.1.3.18 | 3.2.0.19 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/183) | +| 托盘右键语言显示错误 | 无 | 3.1.3.18; >=3.2.0.19beta9; <3.2.0.19rc3 | 3.2.0.19rc3 | 已修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/205) | +| 无法使用“设置延迟“功能 | 无 | >3.0.0.11 | 3.2.0.19 | 已在测试版修复 | [isssue链接](https://github.com/xystudiocode/pyClickMouse/issues/207) | +| 清理缓存无法清理 | 无 | >3.1.3.18;<3.2.1.20 | 3.2.1.20 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/234 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.1.3.18) diff --git a/documents/zh-CN/updatelog/final/3/32019.md b/documents/zh-CN/updatelog/final/3/32019.md new file mode 100644 index 00000000..0e5b2290 --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/32019.md @@ -0,0 +1,40 @@ +--- +title: 3.2.0.19 +layout: doc +--- + +# 3.2.0.19 +发布日期: 2026/03/14 + +## 更新内容 + +- 完成的更新安装服务 +- 添加“反馈bug”按钮 +- 修复了一些bug: +- - 第一次加载设置不会加载设置默认值的估计时间 +- - 如果有更新并安装完成,那么关闭更新完成再打开会显示正在更新 +- - 回滚更新时候,文件夹不会回滚 +- - 当模式是深色且多次打开一个窗口时候,标题栏变为白色 +- - 托盘右键语言显示错误 +- - 无法使用“设置延迟“功能 +- 添加了主题,原有的主题被重新翻译为了”风格“ +- 文档功能完成 +- 移除了本地的更新日志,变为在线文档查阅 +- 修改了关于界面提示文本 +- 压缩安装包体积 +- 移除了“帮助”菜单的热键帮助,因为现在有了自定义热键。 +- 修改默认响应延迟为100ms,1000ms的延迟过于卡顿。 +- 精简了无用的内容 +- 禁止在运行连点时候切换连点 +- 优化性能 +- 添加更新设置 +- 简单修改了样式 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 清理缓存无法清理 | 无 | >3.1.3.18;<3.2.1.20 | 3.2.1.20 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/234 | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.0.19) diff --git a/documents/zh-CN/updatelog/final/3/32120.md b/documents/zh-CN/updatelog/final/3/32120.md new file mode 100644 index 00000000..6b18a38e --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/32120.md @@ -0,0 +1,26 @@ +--- +title: 3.2.1.20 +layout: doc +--- + +# 3.2.1.20 +发布日期: 2026/04/11 + +## 更新内容 + +- 修复以下问题: +- - 清理缓存无法清理 +- 升级到Qt 6.11版本,修复或添加了一些显示: +- - 现在,最大化按钮会正常隐藏或变浅色,和3.1.0用的Qt 6.9版本的效果一样,而不是6.10的不起效果。 +- - 添加了沉浸式圆角菜单栏和下拉框,而不是直角下拉框和向没有抠图一样的圆角菜单栏。 +- 新增新的产品: `clickclean`,大幅精简了clickmouse,只保留连点器和其相关的设置,它的更新频率会比clickmouse慢,并且要手动检查更新。 +- 现在开机自启动会在后台运行,若你是旧版本用户,需要在设置中重置开机自启动配置才能启用。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 反色或深色模式的非默认主题显示标题栏和菜单异常 | 无 | >3.2.0.19;<3.2.2.21 | 3.2.2.21 | 已修复 | https://github.com/xystudiocode/pyClickMouse/issues/240 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.1.20) + diff --git a/documents/zh-CN/updatelog/final/3/32221.md b/documents/zh-CN/updatelog/final/3/32221.md new file mode 100644 index 00000000..6064f17f --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/32221.md @@ -0,0 +1,29 @@ +--- +title: 3.2.2.21 +layout: doc +--- + +# 3.2.2.21 +发布日期: 2026/04/19 + +这是一个次要更新,主要修复了一些已知问题。 + +## 更新内容 + +- 修复以下问题: +- - 在反色或深色模式下,非windows默认样式的样式的菜单栏会显示异常:字体是当前风格的,但是背景是系统配色的。 +- - 在反色或深色模式下,非windows默认样式的标题栏有可能“卡壳”,深色模式标题栏是浅色的。 +- 调整了响应延迟的下限,从1ms调整为50ms,以修复标题栏“卡壳”的问题。 +- 设置窗口图标变成了clickmouse的logo,而不是带有设置图标的clickmouse logo。 +- 禁用了误加入的实验室功能。 + +## ClickClean更新内容 +- 设置窗口图标变成了clickmouse的logo,而不是带有设置图标的clickmouse logo。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.2.21) diff --git a/documents/zh-CN/updatelog/final/3/32322.md b/documents/zh-CN/updatelog/final/3/32322.md new file mode 100644 index 00000000..a3b3078b --- /dev/null +++ b/documents/zh-CN/updatelog/final/3/32322.md @@ -0,0 +1,26 @@ +--- +title: 3.2.3.22 +layout: doc +--- + +# 3.2.3.22 +发布日期: 2026/05/23 + +> 这是一个开发测试版更新,为`3.3.0`的开发周期的第4个版本,同步了现在的`3.2.3.22`。 + +## 更新内容 + +- 现在无需等到第一次连点按下,启动连点时候状态栏会立即显示连点状态 +- 之后,如果已经有一个clickmouse实例在运行,再点击一个clickmouse程序会弹出提示框而不是直接不显示窗口。 + +## ClickClean更新内容 +- 现在无需等到第一次连点按下,启动连点时候状态栏会立即显示连点状态 +- 之后,如果已经有一个clickmouse实例在运行,再点击一个clickmouse程序会弹出提示框而不是直接不显示窗口。 + +## 已知问题 +| 问题描述 | 解决方案 | 影响版本 | 修复版本 | 状态 | issue链接 | +| --- | --- | --- | --- | --- | --- | +| 无 | 无 | 无 | 无 | 无 | 无 | + +## 下载链接 +[点击下载](https://github.com/xystudiocode/pyClickMouse/releases/tag/3.2.3.22) diff --git a/documents/zh-CN/updatelog/index.md b/documents/zh-CN/updatelog/index.md new file mode 100644 index 00000000..bf0818cc --- /dev/null +++ b/documents/zh-CN/updatelog/index.md @@ -0,0 +1,2 @@ +# 更新日志 +请前往目录下查看更新日志。 \ No newline at end of file diff --git a/guiclean/txtinfo.py b/guiclean/txtinfo.py index b76f9e05..929a10c4 100644 --- a/guiclean/txtinfo.py +++ b/guiclean/txtinfo.py @@ -16,7 +16,6 @@ class SettingText: pause_click_hotkey = 'pause_click_hotkey' stop_click_hotkey ='stop_click_hotkey' click_attr_hotkey = 'click_attr_hotkey' - fast_click_hotkey = 'fast_click_hotkey' main_window_hotkey = 'main_window_hotkey' default_doc_link = 'default_doc_link' hotkey_enabled = 'hotkey_enabled' @@ -91,10 +90,6 @@ def stop_click_hotkey(self): def click_attr_hotkey(self): return self[SettingText.click_attr_hotkey] - @property - def fast_click_hotkey(self): - return self[SettingText.fast_click_hotkey] - @property def main_window_hotkey(self): return self[SettingText.main_window_hotkey] diff --git a/hooks/gitclean.py b/hooks/gitclean.py new file mode 100644 index 00000000..79036610 --- /dev/null +++ b/hooks/gitclean.py @@ -0,0 +1,3 @@ +import os + +os.system("git gc --aggressive --prune=now") \ No newline at end of file diff --git a/Gui/hooks/hotkey.py b/hooks/hotkey.py similarity index 100% rename from Gui/hooks/hotkey.py rename to hooks/hotkey.py diff --git a/Gui/hooks/keycrypter.py b/hooks/keycrypter.py similarity index 100% rename from Gui/hooks/keycrypter.py rename to hooks/keycrypter.py diff --git a/Gui/hooks/light_color.py b/hooks/light_color.py similarity index 100% rename from Gui/hooks/light_color.py rename to hooks/light_color.py diff --git a/Gui/hooks/ramdom_str.py b/hooks/ramdom_str.py similarity index 100% rename from Gui/hooks/ramdom_str.py rename to hooks/ramdom_str.py diff --git a/Gui/hooks/zip_json.py b/hooks/zip_json.py similarity index 100% rename from Gui/hooks/zip_json.py rename to hooks/zip_json.py diff --git a/imgs/readme/icon.ico b/imgs/readme/icon.ico new file mode 100644 index 00000000..3724d95b Binary files /dev/null and b/imgs/readme/icon.ico differ diff --git a/imgs/readme/mergeSteps-en.png b/imgs/readme/mergeSteps-en.png new file mode 100644 index 00000000..226a017f Binary files /dev/null and b/imgs/readme/mergeSteps-en.png differ diff --git a/makefile b/makefile index 3e2cd201..00ce1da7 100644 --- a/makefile +++ b/makefile @@ -1,11 +1,11 @@ -command = python -m nuitka --msvc=latest --remove-output --company-name="xystudio" --copyright="Copyright 2026 xystudio" --trademarks="xystudio" --product-version="3.2.3" --standalone +command = python -m nuitka --msvc=latest --remove-output --company-name="xystudio" --copyright="Copyright 2026 xystudio" --trademarks="xystudio" --product-version="3.3.0" --standalone main: echo Please run a build command, such as "make clickmouse". clickmouse: gui/main.py - $(command) --file-description="Clickmouse" --product-name="ClickMouse" --windows-icon-from-ico=gui/res/icons/clickmouse/icon.ico --include-data-dir=gui/res/=res/ --include-data-file=gui/key=key gui/main.py --file-version="3.2.3.22" --enable-plugin=pyside6 --windows-console-mode="disable" --include-data-file=gui/7z.exe=7z.exe --include-data-file=gui/7z.dll=7z.dll --output-dir=dist/clickmouse/ - $(command) --file-description="Clickmouse uninstall" --product-name="uninstall" --windows-icon-from-ico=gui/res/icons/clickmouse/uninstall.ico --file-version="2026.05.23.1" gui/uninstall.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ + $(command) --file-description="Clickmouse" --product-name="ClickMouse" --windows-icon-from-ico=gui/res/icons/clickmouse/icon.ico --include-data-dir=gui/res/=res/ --include-data-file=gui/key=key gui/main.py --file-version="3.3.0.23" --windows-console-mode="disable" --enable-plugin=pyside6 --include-data-file=gui/7z.exe=7z.exe --include-data-file=gui/7z.dll=7z.dll --output-dir=dist/clickmouse/ + $(command) --file-description="Clickmouse uninstall" --product-name="uninstall" --windows-icon-from-ico=gui/res/icons/clickmouse/uninstall.ico --file-version="2026.06.27.1" gui/uninstall.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ $(command) --file-description="Clickmouse IPK" --product-name="CmIPK" --windows-icon-from-ico=gui/res/icons/clickmouse/init.ico --file-version="2026.05.23.1" gui/install_pack.py --enable-plugin=pyside6 --windows-console-mode="disable" --output-dir=dist/clickmouse/ $(command) --file-description="Clickmouse repair" --product-name="CmRepair" --windows-icon-from-ico=gui/res/icons/clickmouse/repair.ico --file-version="2026.05.23.1" gui/repair.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ $(command) --file-version="2026.05.23.1" gui/check_reg_ver.py --windows-console-mode="disable" --output-dir=dist/clickmouse/ @@ -14,7 +14,7 @@ clickmouse: gui/main.py clickclean: guiclean/clickclean.py $(command) --file-version="3.2.3.22" guiclean/clickclean.py --windows-console-mode="disable" --product-name="ClickClean" --windows-icon-from-ico=guiclean/res/icons/clickmouse/icon.ico --file-description="ClickClean" --enable-plugin=pyside6 --include-data-dir=guiclean/res/=res/ --output-dir=dist/clickmouse/ - ren ./dist/clickclean.dist clickclean + ren ./dist/clickmouse/clickclean.dist clickclean clickmouse_lib: setup.py python setup.py bdist_wheel @@ -25,25 +25,7 @@ extension: echo No extension! powershell -ExecutionPolicy Bypass -Command "./merge-distFolders.ps1 -SourcePath ./dist/clickmouse/" -clean_pyd: - del -s -q -f build\ clickmouse.egg-info cython\*.c - -gitclean: - git gc --aggressive --prune=now - pyd: @echo off - setlocal enabledelayedexpansion - - set items="38" "39" "310" "311" "312" "313" "314" - - for %%i in (%items%) do ( - "C:\Program Files\Python%%i\python.exe" cython\setup.py build_ext --inplace - ) - set versions=3.13 3.14 - for %%v in (%versions%) do ( - set "orig=%%v" - set "nodot=!orig:.=!" - "C:\Program Files\Python!nodot!\python%!orig!t.exe" cython\setup.py build_ext --inplace - ) \ No newline at end of file + ./mkpyd.bat \ No newline at end of file diff --git a/mkpyd.bat b/mkpyd.bat new file mode 100644 index 00000000..a18e3f8e --- /dev/null +++ b/mkpyd.bat @@ -0,0 +1,27 @@ +@echo off +setlocal enabledelayedexpansion + +set versions=3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.13t 3.14t 3.15t +set setupPath=setup.py +set pydPath="src\clickmouse\" + +for %%i in (%versions%) do ( + py -V:%%i %setupPath% build_ext --inplace || echo "Python %%i is not installed." +) + +del build\ clickmouse.egg-info %pydPath%\*.c /s /q /f + +set "merged=" + +:: 处理第一个列表 +for %%a in (%versions%) do ( + set "item=%%a" + set "item=!item:.=!" + set "merged=!merged! !item!" +) + +echo Merged items: !merged! + +for %%i in (%merged%) do ( + ren %pydPath%__init__.cp%%i-win_amd64.pyd clickmouse.cp%%i-win_amd64.pyd || echo Renaming failed for __init__.cp%%i-win_amd64.pyd. +) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..943ea807 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3813 @@ +{ + "name": "clickmouse_docs", + "version": "1.2.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "clickmouse_docs", + "version": "1.2.0", + "license": "MIT", + "devDependencies": { + "marked": "^17.0.4", + "mermaid": "^11.14.0", + "vitepress": "^1.0.0-rc.32", + "vitepress-plugin-mermaid": "^2.0.17" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.19.0", + "resolved": "https://registry.npmmirror.com/@algolia/abtesting/-/abtesting-1.19.0.tgz", + "integrity": "sha512-Lhnez3hhXHk25lfxLAMxvkP4fmN3+1RgADhD2ssMDBYuAsDVReeyP+3SGRx+ntq8ijMrLqUyfvO72TB6jsTteQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-abtesting/-/client-abtesting-5.53.0.tgz", + "integrity": "sha512-0ZjA5Hcmaoz5Lj6OG0zhfIyeqzJZnLW2CRJA1W17UwMFGRtZAJ9yJKRvPEDA6gkpsIoQxORTSW6sWFiuYncPNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-5.53.0.tgz", + "integrity": "sha512-kWNodP75iiEaOtemC9F/hlxNBG5E2QUjN1BusnE6m2b4l7Qh/BUO3fGCVsmKJI65VO4VKGGmT43ICvHtTcJ2JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-5.53.0.tgz", + "integrity": "sha512-YPN45TXD9Wrse185t/Ta7nktZsqpv97oOjCzp2sblHnCL6rBc9TDeJAg1IGl2UpdwnSD05Zu/5wLB4watOUMyg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-insights/-/client-insights-5.53.0.tgz", + "integrity": "sha512-qAcYTDJE6m924FDDUQvdD6vh7DYaqOeSpFS74IP37/JRV0v4cGBauyxTF2WzDnokUylQDbqreoFIJZfg0Fitmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-5.53.0.tgz", + "integrity": "sha512-fQaY+DkSJOpuUVUe8MQTwrdiKAqkJGhpDarB08duBn/sUv7Bkib6MDRQauCcWTWTe4HIW+EbwQP9R4kci1V/Yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.53.0.tgz", + "integrity": "sha512-o72tsiEZGfeS/dxL9IADfzcZWGEwKDEe5CvtrBuT//3JR+SHuTtHRI2ZTf7D7bcKagcbojvO8hnkHdfoakSlYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-5.53.0.tgz", + "integrity": "sha512-Ds16IyPm/dNJPCU8OzApo2gwGrgWT5BYHhE3NFwZbpCveqyvPDB9sZDDkJ5DsdOGT2aC+R3i0/M1OVXF2qdgPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/ingestion/-/ingestion-1.53.0.tgz", + "integrity": "sha512-oNbT6z4NwD8Pou9VPINGlN/tlG1afESh2EbxqnP6rwl95xKVD/Zlciis1PpNeO/9U/rrajc1+7DcfKi03tX1KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/monitoring/-/monitoring-1.53.0.tgz", + "integrity": "sha512-G+KZb/yd+qAOFn/cEvTGeLxQm8aP3a0od50l3z/ylccY+/o4YG3TNcjU1tFQHW4mXC137GPyR7W70R0kRQDLnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/recommend/-/recommend-5.53.0.tgz", + "integrity": "sha512-6aVfYd55Un6IUgPLbo84WfgFZlS3L0vA1ttzXL5vahHewUJ8jYgd89TzlWRTeej7w70mb9RWsVlFYGmJ/diQww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.53.0.tgz", + "integrity": "sha512-ke27DqgzCOlt+RbeEdCxtXxMQOnAOi8ujr2wid0DmDKzR95Kw/f9sBsuhBxtjevCqJRJszfRTLY0B1pbO6IhkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-fetch/-/requester-fetch-5.53.0.tgz", + "integrity": "sha512-GngiOqt2Gq4oLno6yXQVj9om+qSO9SWAoduoTOEg79dKZ62brB8OOIvSJG/vDNoanYi6a7Al9uDZwXvi+bcVTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-5.53.0.tgz", + "integrity": "sha512-6mF9LZMUk0QqWvrnxkxBqhswwz6Xfiwy6/gmTzL5HrlhdVG3ITAqGV2k3XmVThP1h0Ulc3VQwiNCD7/Nr4JNlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmmirror.com/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.84", + "resolved": "https://registry.npmmirror.com/@iconify-json/simple-icons/-/simple-icons-1.2.84.tgz", + "integrity": "sha512-v4JVu6xIewGoETD4mm2k6UAdFAbTlY1duw5ZNSxYORfs2yFsHDhoU9Omn/BgrV0nR/ptWkF3ZIr/ZHoYXI/6Jw==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-3.1.3.tgz", + "integrity": "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "import-meta-resolve": "^4.2.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@mermaid-js/mermaid-mindmap": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@mermaid-js/mermaid-mindmap/-/mermaid-mindmap-9.3.0.tgz", + "integrity": "sha512-IhtYSVBBRYviH1Ehu8gk69pMDF8DSRqXBRDMWrEfHoaMruHeaP2DXA3PBnuwsMaCdPQhlUUcy/7DBLAEIXvCAw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.0.0", + "khroma": "^2.0.0", + "non-layered-tidy-tree-layout": "^2.0.2" + } + }, + "node_modules/@mermaid-js/mermaid-mindmap/node_modules/@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@mermaid-js/parser": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@mermaid-js/parser/-/parser-1.1.1.tgz", + "integrity": "sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@chevrotain/types": "~11.1.1" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", + "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", + "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", + "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", + "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", + "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", + "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", + "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", + "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", + "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", + "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", + "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", + "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", + "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", + "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", + "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", + "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", + "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", + "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", + "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", + "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", + "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", + "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", + "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", + "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", + "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmmirror.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmmirror.com/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmmirror.com/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmmirror.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmmirror.com/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmmirror.com/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmmirror.com/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmmirror.com/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmmirror.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmmirror.com/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.35.tgz", + "integrity": "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/shared": "3.5.35", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.35.tgz", + "integrity": "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.35.tgz", + "integrity": "sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/compiler-core": "3.5.35", + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.35.tgz", + "integrity": "sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.35.tgz", + "integrity": "sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.35.tgz", + "integrity": "sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.35.tgz", + "integrity": "sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/runtime-core": "3.5.35", + "@vue/shared": "3.5.35", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.35.tgz", + "integrity": "sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "vue": "3.5.35" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.35.tgz", + "integrity": "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/algoliasearch": { + "version": "5.53.0", + "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-5.53.0.tgz", + "integrity": "sha512-OGW1q6b91CRSSeiOnM8LxuR5NYJ2esvw66jUZ4IIvdv+ItNkx3pwLuyR+jaCdbGee4ov5WgUnyPryyh11xvByQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.19.0", + "@algolia/client-abtesting": "5.53.0", + "@algolia/client-analytics": "5.53.0", + "@algolia/client-common": "5.53.0", + "@algolia/client-insights": "5.53.0", + "@algolia/client-personalization": "5.53.0", + "@algolia/client-query-suggestions": "5.53.0", + "@algolia/client-search": "5.53.0", + "@algolia/ingestion": "1.53.0", + "@algolia/monitoring": "1.53.0", + "@algolia/recommend": "5.53.0", + "@algolia/requester-browser-xhr": "5.53.0", + "@algolia/requester-fetch": "5.53.0", + "@algolia/requester-node-http": "5.53.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dev": true, + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.33.4", + "resolved": "https://registry.npmmirror.com/cytoscape/-/cytoscape-3.33.4.tgz", + "integrity": "sha512-HIN5Pmd9MrX9BkV7tDwnOcEJCSFvCpc8X97h3f508J6I5FsqAY65wKOCvgH2CuP42CaahWaz4tuh32SOOIH7ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmmirror.com/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dev": true, + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmmirror.com/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmmirror.com/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "dev": true, + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.14", + "resolved": "https://registry.npmmirror.com/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/delaunator": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/delaunator/-/delaunator-5.1.0.tgz", + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dompurify": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.4.7.tgz", + "integrity": "sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA==", + "dev": true, + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-toolkit": { + "version": "1.47.0", + "resolved": "https://registry.npmmirror.com/es-toolkit/-/es-toolkit-1.47.0.tgz", + "integrity": "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==", + "dev": true, + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/focus-trap": { + "version": "7.8.0", + "resolved": "https://registry.npmmirror.com/focus-trap/-/focus-trap-7.8.0.tgz", + "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.4.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/katex": { + "version": "0.16.47", + "resolved": "https://registry.npmmirror.com/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==", + "dev": true + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmmirror.com/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/marked": { + "version": "17.0.6", + "resolved": "https://registry.npmmirror.com/marked/-/marked-17.0.6.tgz", + "integrity": "sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mermaid": { + "version": "11.15.0", + "resolved": "https://registry.npmmirror.com/mermaid/-/mermaid-11.15.0.tgz", + "integrity": "sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.1", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.1.1", + "@types/d3": "^7.4.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.1", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.19", + "dompurify": "^3.3.1", + "es-toolkit": "^1.45.1", + "katex": "^0.16.25", + "khroma": "^2.1.0", + "marked": "^16.3.0", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" + } + }, + "node_modules/mermaid/node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmmirror.com/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "dev": true, + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.29.2", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.29.2.tgz", + "integrity": "sha512-7tNmwg/7mzzAoB/8kSg6Hl37JraAZw3Z3A0JSY7VXlZwo82Xn0G7wKbNNs2qoF4ZEEsQGTwDAroNdqKs1ofJxQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/robust-predicates": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/rollup": { + "version": "4.60.4", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.60.4.tgz", + "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.4", + "@rollup/rollup-android-arm64": "4.60.4", + "@rollup/rollup-darwin-arm64": "4.60.4", + "@rollup/rollup-darwin-x64": "4.60.4", + "@rollup/rollup-freebsd-arm64": "4.60.4", + "@rollup/rollup-freebsd-x64": "4.60.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", + "@rollup/rollup-linux-arm-musleabihf": "4.60.4", + "@rollup/rollup-linux-arm64-gnu": "4.60.4", + "@rollup/rollup-linux-arm64-musl": "4.60.4", + "@rollup/rollup-linux-loong64-gnu": "4.60.4", + "@rollup/rollup-linux-loong64-musl": "4.60.4", + "@rollup/rollup-linux-ppc64-gnu": "4.60.4", + "@rollup/rollup-linux-ppc64-musl": "4.60.4", + "@rollup/rollup-linux-riscv64-gnu": "4.60.4", + "@rollup/rollup-linux-riscv64-musl": "4.60.4", + "@rollup/rollup-linux-s390x-gnu": "4.60.4", + "@rollup/rollup-linux-x64-gnu": "4.60.4", + "@rollup/rollup-linux-x64-musl": "4.60.4", + "@rollup/rollup-openbsd-x64": "4.60.4", + "@rollup/rollup-openharmony-arm64": "4.60.4", + "@rollup/rollup-win32-arm64-msvc": "4.60.4", + "@rollup/rollup-win32-ia32-msvc": "4.60.4", + "@rollup/rollup-win32-x64-gnu": "4.60.4", + "@rollup/rollup-win32-x64-msvc": "4.60.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmmirror.com/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stylis": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.4.0.tgz", + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-1.2.3.tgz", + "integrity": "sha512-g62dB+w1/OEFnPvmX0yd/HnetYITOL+1nJW7kitOycOeAvmbWC/nu0fwmmQ/kupNojqExzyC/T++pST/jRJ2mQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/uuid": { + "version": "14.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-14.0.0.tgz", + "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vitepress-plugin-mermaid": { + "version": "2.0.17", + "resolved": "https://registry.npmmirror.com/vitepress-plugin-mermaid/-/vitepress-plugin-mermaid-2.0.17.tgz", + "integrity": "sha512-IUzYpwf61GC6k0XzfmAmNrLvMi9TRrVRMsUyCA8KNXhg/mQ1VqWnO0/tBVPiX5UoKF1mDUwqn5QV4qAJl6JnUg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "@mermaid-js/mermaid-mindmap": "^9.3.0" + }, + "peerDependencies": { + "mermaid": "10 || 11", + "vitepress": "^1.0.0 || ^1.0.0-alpha" + } + }, + "node_modules/vue": { + "version": "3.5.35", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.35.tgz", + "integrity": "sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-sfc": "3.5.35", + "@vue/runtime-dom": "3.5.35", + "@vue/server-renderer": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..f8201d48 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "clickmouse_docs", + "version": "1.2.0", + "type": "module", + "description": "Clickmouse documentation built in vitepress", + "scripts": { + "dev": "vitepress dev documents", + "build": "vitepress build documents", + "preview": "vitepress preview documents" + }, + "author": "xystudio", + "license": "MIT", + "devDependencies": { + "marked": "^17.0.4", + "vitepress": "^1.0.0-rc.32", + "vitepress-plugin-mermaid": "^2.0.17", + "mermaid": "^11.14.0" + } +} diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 1d7e1dec..00000000 --- a/pyproject.toml +++ /dev/null @@ -1,28 +0,0 @@ -[build-system] -requires = ["setuptools", "wheel"] -build-backend = "setuptools.build_meta" - -[project] -name = "ClickMouse" -version = "2.1.0" -authors = [ - {name = "xystudio", email = "173288240@qq.com"}, -] -description = "基于Python的鼠标连点工具" -readme = "README.md" -requires-python = ">=3.8" -keywords = ["mouse", "click", "automation", "clickmouse"] -classifiers = [ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", -] -dependencies = [ - "pyautogui", -] - -[project.scripts] -pyplus = "pyplus_cmd:main" - -[project.urls] -homepage = "https://github.com/xystudiocode/pyClickMouse" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index eac476eb..5559d90e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,8 +8,8 @@ pyperclip>=1.5.2 pynput>=1 packaging>=22 clickmouse -clickMouse_api pytz>=2014 nuitka>=2.8 psutil>=1 -pytest>=5 \ No newline at end of file +pytest>=5 +uiml>=0.2 \ No newline at end of file diff --git a/Gui/runhook.bat b/runhook.bat similarity index 100% rename from Gui/runhook.bat rename to runhook.bat diff --git a/setup.py b/setup.py index 9317880b..d42276f6 100644 --- a/setup.py +++ b/setup.py @@ -6,18 +6,20 @@ # 以下为setup.py文件内容 # 导入setuptools模块 import setuptools +from Cython.Build import cythonize # 定义setup函数 setuptools.setup( name="ClickMouse", # 包名 - version="2.1.1", # 版本号 + version="3.3.0", # 版本号 + package_dir={"": "src"}, + packages=setuptools.find_packages(where="src"), author="xystudio", # 作者 author_email="173288240@qq.com", # 作者邮箱 description="基于Python的鼠标连点工具", # 包描述 url="https://github.com/xystudiocode/pyClickMouse", # 包的github地址 - long_description=open("README.md", "r", encoding="utf-8").read(), # 包的readme文件 + long_description=open("README-py.md", "r", encoding="utf-8").read(), # 包的readme文件 long_description_content_type="text/markdown", # 指定readme文件格式为markdown - packages=setuptools.find_packages(), # 包的目录结构 classifiers=[ # 包的分类列表 "Programming Language :: Python :: 3", # python版本 "License :: OSI Approved :: MIT License", # 许可证 @@ -29,9 +31,8 @@ entry_points={ # 脚本入口 "console_scripts": [ "clickmouse = clickmouse.__main__:main", + "clickmouse-apiCli = clickmouse_api.__main__:main" ] }, - extras_require = { - "api": ["clickmouse-api"] - } + ext_modules=cythonize(["src/clickmouse/__init__.py"]), # 编译main.py为.pyd文件 ) diff --git a/clickmouse/__init__.py b/src/clickmouse/__init__.py similarity index 100% rename from clickmouse/__init__.py rename to src/clickmouse/__init__.py diff --git a/clickmouse/__main__.py b/src/clickmouse/__main__.py similarity index 100% rename from clickmouse/__main__.py rename to src/clickmouse/__main__.py diff --git a/clickmouse/command_tools.py b/src/clickmouse/command_tools.py similarity index 100% rename from clickmouse/command_tools.py rename to src/clickmouse/command_tools.py diff --git a/clickmouse/version.py b/src/clickmouse/version.py similarity index 100% rename from clickmouse/version.py rename to src/clickmouse/version.py diff --git a/src/clickmouse_api/GUI/__init__.py b/src/clickmouse_api/GUI/__init__.py new file mode 100644 index 00000000..1c98b718 --- /dev/null +++ b/src/clickmouse_api/GUI/__init__.py @@ -0,0 +1,5 @@ +from PySide6.QtWidgets import * +from PySide6.QtCore import * +from PySide6.QtGui import * +import sys +from clickmouse_API.GUI import styles diff --git a/clickmouse_api/clickmouse_API/GUI/styles.py b/src/clickmouse_api/GUI/styles.py similarity index 100% rename from clickmouse_api/clickmouse_API/GUI/styles.py rename to src/clickmouse_api/GUI/styles.py diff --git a/clickmouse_api/clickmouse_API/__init__.py b/src/clickmouse_api/__init__.py similarity index 93% rename from clickmouse_api/clickmouse_API/__init__.py rename to src/clickmouse_api/__init__.py index da5a51e1..44c1ae0c 100644 --- a/clickmouse_api/clickmouse_API/__init__.py +++ b/src/clickmouse_api/__init__.py @@ -10,7 +10,7 @@ def check_clickmouse_installed(): with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, software_reg_key, 0, winreg.KEY_READ): pass except: - raise UserWarning('ClickMouse未安装!请前往https://www.github.com/xystudio889/pyclickmouse/releases下载安装.') + raise UserWarning('ClickMouse未安装!请前往https://www.github.com/xystudio889/pyClickMouse/releases下载安装.') check_clickmouse_installed() diff --git a/clickmouse_api/clickmouse_API/__main__.py b/src/clickmouse_api/__main__.py similarity index 100% rename from clickmouse_api/clickmouse_API/__main__.py rename to src/clickmouse_api/__main__.py diff --git a/clickmouse_api/api_package_format.json b/src/clickmouse_api/api_package_format.json similarity index 100% rename from clickmouse_api/api_package_format.json rename to src/clickmouse_api/api_package_format.json diff --git a/src/clickmouse_api/command.py b/src/clickmouse_api/command.py new file mode 100644 index 00000000..e69de29b diff --git a/src/clickmouse_api/install/install.bat b/src/clickmouse_api/install/install.bat new file mode 100644 index 00000000..e69de29b diff --git a/src/clickmouse_api/install/requirements.txt b/src/clickmouse_api/install/requirements.txt new file mode 100644 index 00000000..bacf386d --- /dev/null +++ b/src/clickmouse_api/install/requirements.txt @@ -0,0 +1,6 @@ +PySide6 >=6.10 +Nuitka >=4 +PyAutogui +uiml>=0.2 +pynput>=1 +pywin32>=303 \ No newline at end of file diff --git a/clickmouse_api/clickmouse_API/packageParser/__init__.py b/src/clickmouse_api/packageParser/__init__.py similarity index 100% rename from clickmouse_api/clickmouse_API/packageParser/__init__.py rename to src/clickmouse_api/packageParser/__init__.py