From e91ab15e27254223402c68722ec673b5b6d19966 Mon Sep 17 00:00:00 2001 From: chennan Date: Fri, 6 Feb 2026 16:58:09 +0800 Subject: [PATCH 1/5] mobile reminder --- spx-gui/src/App.vue | 19 ++- .../mobile/DesktopRequiredGuide.vue | 112 ++++++++++++++++++ .../components/mobile/desktop-required.png | Bin 0 -> 18328 bytes 3 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 spx-gui/src/components/mobile/DesktopRequiredGuide.vue create mode 100644 spx-gui/src/components/mobile/desktop-required.png diff --git a/spx-gui/src/App.vue b/spx-gui/src/App.vue index 21f047d20..3c3c61a14 100644 --- a/spx-gui/src/App.vue +++ b/spx-gui/src/App.vue @@ -1,6 +1,7 @@ + + diff --git a/spx-gui/src/components/mobile/desktop-required.png b/spx-gui/src/components/mobile/desktop-required.png new file mode 100644 index 0000000000000000000000000000000000000000..392530b76f3e1e1e64d29406f874902ebc8ae076 GIT binary patch literal 18328 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 literal 0 HcmV?d00001 From 36d60a4b36fd21f906da459f21fab5de2a71d970 Mon Sep 17 00:00:00 2001 From: chennan Date: Wed, 11 Feb 2026 08:25:54 +0800 Subject: [PATCH 2/5] browser version reminder --- spx-gui/package-lock.json | 92 ++++++++++++++++++ spx-gui/package.json | 1 + spx-gui/src/App.vue | 22 ++--- .../components/ua/BrowserVersionReminder.vue | 88 +++++++++++++++++ .../MobileReminder.vue} | 6 +- .../{mobile => ua}/desktop-required.png | Bin spx-gui/src/utils/ua.ts | 41 ++++++++ 7 files changed, 232 insertions(+), 18 deletions(-) create mode 100644 spx-gui/src/components/ua/BrowserVersionReminder.vue rename spx-gui/src/components/{mobile/DesktopRequiredGuide.vue => ua/MobileReminder.vue} (95%) rename spx-gui/src/components/{mobile => ua}/desktop-required.png (100%) create mode 100644 spx-gui/src/utils/ua.ts diff --git a/spx-gui/package-lock.json b/spx-gui/package-lock.json index 1cc7cce1a..8cfc6a27a 100644 --- a/spx-gui/package-lock.json +++ b/spx-gui/package-lock.json @@ -58,6 +58,7 @@ "shiki": "^3.2.2", "sortablejs": "^1.15.6", "typescript": "^5.9.3", + "ua-parser-js": "^2.0.9", "vite": "^6.4.1", "vite-plugin-ejs": "^1.7.0", "vite-plugin-vercel": "^9.0.8", @@ -5218,6 +5219,26 @@ "node": ">=6" } }, + "node_modules/detect-europe-js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/detect-europe-js/-/detect-europe-js-0.1.2.tgz", + "integrity": "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -7027,6 +7048,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-standalone-pwa": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz", + "integrity": "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, "node_modules/is-stream": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", @@ -10345,6 +10386,57 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/ua-is-frozen": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz", + "integrity": "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/ua-parser-js": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.9.tgz", + "integrity": "sha512-OsqGhxyo/wGdLSXMSJxuMGN6H4gDnKz6Fb3IBm4bxZFMnyy0sdf6MN96Ie8tC6z/btdO+Bsy8guxlvLdwT076w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "AGPL-3.0-or-later", + "dependencies": { + "detect-europe-js": "^0.1.2", + "is-standalone-pwa": "^0.1.1", + "ua-is-frozen": "^0.1.2" + }, + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", diff --git a/spx-gui/package.json b/spx-gui/package.json index 7bb772f6b..badbbb46d 100644 --- a/spx-gui/package.json +++ b/spx-gui/package.json @@ -75,6 +75,7 @@ "vue-konva": "^3.1.0", "vue-router": "^4.2.5", "vue-tsc": "^3.1.1", + "ua-parser-js": "^2.0.9", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" }, diff --git a/spx-gui/src/App.vue b/spx-gui/src/App.vue index 3c3c61a14..fad928040 100644 --- a/spx-gui/src/App.vue +++ b/spx-gui/src/App.vue @@ -1,8 +1,9 @@ + + diff --git a/spx-gui/src/components/mobile/DesktopRequiredGuide.vue b/spx-gui/src/components/ua/MobileReminder.vue similarity index 95% rename from spx-gui/src/components/mobile/DesktopRequiredGuide.vue rename to spx-gui/src/components/ua/MobileReminder.vue index 58cf883b9..37c08509e 100644 --- a/spx-gui/src/components/mobile/DesktopRequiredGuide.vue +++ b/spx-gui/src/components/ua/MobileReminder.vue @@ -1,5 +1,5 @@