20260723存档01

This commit is contained in:
2026-07-23 01:29:55 +08:00
parent 0a2b8bd018
commit cdbb1e54a3
13 changed files with 774 additions and 82 deletions
+10
View File
@@ -23,6 +23,16 @@ nsis:
installerIcon: build/icon.ico
uninstallerIcon: build/icon.ico
installerHeaderIcon: build/icon.ico
installerHeader: build/installer-header.png
license: build/license.rtf
createDesktopShortcut: true
createStartMenuShortcut: true
shortcutName: Koring Launcher
include: build/installer-custom.nsh
script: build/installer-strings.nsh
uninstallDisplayName: "卸载 Koring Launcher"
displayLanguageSelector: true
installerLanguages:
- 2052
- 1028
- 1033
+2
View File
@@ -12,6 +12,7 @@ import { registerTaskHandlers } from './handlers/task';
import { registerSystemHandlers } from './handlers/system';
import { registerWindowHandlers } from './handlers/window';
import { registerCrashHandlers, setupCrashListeners, testCrashDialog } from './handlers/crash-monitor';
import { registerKoringAuthHandlers } from './handlers/koring-auth';
import { loadConfig, saveConfig, configExists } from './config';
const { app } = electron;
@@ -133,6 +134,7 @@ function registerAllHandlers() {
registerSystemHandlers();
registerWindowHandlers(win);
registerCrashHandlers();
registerKoringAuthHandlers();
}
app.whenReady().then(() => {
+3
View File
@@ -35,6 +35,8 @@
"@base-ui/react": "^1.6.0",
"@fontsource-variable/geist": "^5.2.9",
"@fontsource-variable/inter": "^5.2.8",
"@heroui/react": "^3.2.2",
"@heroui/styles": "^3.2.2",
"@react-three/fiber": "^9.6.1",
"@types/three": "^0.184.1",
"@xmcl/core": "^2.15.1",
@@ -45,6 +47,7 @@
"lucide-react": "^1.21.0",
"motion": "^12.42.2",
"next-themes": "^0.4.6",
"qrcode.react": "^4.2.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"sonner": "^2.0.7",
+660
View File
@@ -17,6 +17,12 @@ importers:
'@fontsource-variable/inter':
specifier: ^5.2.8
version: 5.2.8
'@heroui/react':
specifier: ^3.2.2
version: 3.2.2(@react-spectrum/provider@3.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(tailwindcss@4.3.1)
'@heroui/styles':
specifier: ^3.2.2
version: 3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.1)
'@react-three/fiber':
specifier: ^9.6.1
version: 9.6.1(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(three@0.184.0)
@@ -47,6 +53,9 @@ importers:
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
qrcode.react:
specifier: ^4.2.0
version: 4.2.0(react@19.2.7)
react:
specifier: ^19.1.0
version: 19.2.7
@@ -114,6 +123,24 @@ packages:
7zip-bin@5.2.0:
resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==}
'@adobe/react-spectrum-ui@1.2.1':
resolution: {integrity: sha512-wcrbEE2O/9WnEn6avBnaVRRx88S5PLFsPLr4wffzlbMfXeQsy+RMQwaJd3cbzrn18/j04Isit7f7Emfn0dhrJA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@adobe/react-spectrum-workflow@2.3.5':
resolution: {integrity: sha512-b53VIPwPWKb/T5gzE3qs+QlGP5gVrw/LnWV3xMksDU+CRl3rzOKUwxIGiZO8ICyYh1WiyqY4myGlPU/nAynBUg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0
'@adobe/react-spectrum@3.47.2':
resolution: {integrity: sha512-QxsE7bPBGpzwYofACF0RAL/Zs3p0u9HNvCDf9LEN87rEGFpkagIB+T+TSZ0xbl6BJ6z7S02m3zAFk3s9FoHJpQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@babel/code-frame@7.29.7':
resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
@@ -663,15 +690,54 @@ packages:
'@fontsource-variable/inter@5.2.8':
resolution: {integrity: sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==}
'@formatjs/ecma402-abstract@2.3.6':
resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==}
'@formatjs/fast-memoize@2.2.7':
resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==}
'@formatjs/icu-messageformat-parser@2.11.4':
resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==}
'@formatjs/icu-skeleton-parser@1.8.16':
resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==}
'@formatjs/intl-localematcher@0.6.2':
resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==}
'@gar/promisify@1.1.3':
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
'@heroui/react@3.2.2':
resolution: {integrity: sha512-TN8ccfHCRIxa9dGhWMaVSl5sGCKWH2E13z2NJ5QBZTFQCow8GogQzW3cn/dRz3YEdYt4B9zfH2N0oKEazVoKRA==}
peerDependencies:
react: '>=19.0.0'
react-dom: '>=19.0.0'
tailwindcss: '>=4.0.0'
'@heroui/styles@3.2.2':
resolution: {integrity: sha512-aDvmcF1bEtWMTg6xbbfv62PFhm2ldIoYIt1uFKyTXEwWH1VWbr+er4LvZojtddTbqA9t58rbE5y32xM8ei9gHg==}
peerDependencies:
tailwindcss: '>=4.0.0'
'@hono/node-server@1.19.14':
resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==}
engines: {node: '>=18.14.1'}
peerDependencies:
hono: ^4
'@internationalized/date@3.12.2':
resolution: {integrity: sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==}
'@internationalized/message@3.1.10':
resolution: {integrity: sha512-nc0Or6EdWHqZRcsXb6P9hBIpLsfSl/ILh0rk5h/OVBpzmhdExXtPy2cQtWsq8XKRBpRHwDNnAHt4OpolcB7dog==}
'@internationalized/number@3.6.7':
resolution: {integrity: sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==}
'@internationalized/string@3.2.9':
resolution: {integrity: sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg==}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -747,6 +813,135 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@radix-ui/react-avatar@1.1.11':
resolution: {integrity: sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-compose-refs@1.1.2':
resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-context@1.1.3':
resolution: {integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-primitive@2.1.4':
resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-slot@1.2.4':
resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-callback-ref@1.1.1':
resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-is-hydrated@0.1.0':
resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-layout-effect@1.1.1':
resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@react-aria/color@3.2.1':
resolution: {integrity: sha512-v/pZh1yBNeayQ5Kio0xRIX0gBf6uu+KjCRW4QSydTyRpmhvk6sMzHT9i9/vIMdaDHaYHBXlXF+Tp/mvS9CG4Zw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/i18n@3.13.1':
resolution: {integrity: sha512-z56ZYcbfpNmMyiGLhyEjytpmEfoTlBaksk84q4kds3HvNkf7QWKj+DJVfVDrJX+c1LyuBsszLSX7yxJRiHsYKQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/ssr@3.10.1':
resolution: {integrity: sha512-jn038/ZYmu6DpfXJ6r2U9zFFppjbc9wnApPJSCxao2RZVEqep4YyoniHSy8qv6V21/xyS4IV7W9a+X2jOjSuag==}
engines: {node: '>= 12'}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/utils@3.34.1':
resolution: {integrity: sha512-H6+rGZL+0f58bBNaUMfctEnT+NogqwAk+nHiB8sR3K+YlQ37GTuCijy2U/pPvQtFMS5mURrjZeBH5JNNXsx14A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-spectrum/color@3.2.1':
resolution: {integrity: sha512-FbB+GaVufsN+obNJmUAe8XGZTeJjEWvEf/k/7nxDxoDCBdg/o6eEPONAZyID5Dj1f8BZKNym8VURxDZx7IIyuQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-spectrum/provider@3.11.1':
resolution: {integrity: sha512-TsoNdVdmlQ7L+75ILq5Yb3+wp/I1AtIeat0o+Y+ZBxP+TtWpwT1ZtCB5l3cplFVzHzOpZlzO0VaDrDP9ElGYDw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-stately/color@3.10.1':
resolution: {integrity: sha512-v4YlLa/oRQpPa/M9Yq1e0Bl8Z7xzGZdNDAIbfIMZuiJtacaOKriPW+AOgjjT/Ab0fNX2YDbwIYvkiMOJBnTi5A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-stately/utils@3.12.1':
resolution: {integrity: sha512-NqKfzrknpfwiewx7R2vk1P+CneClInPDsIhw15+jOcUYSEfej0nta4cJywuKQJ2gsPwqX/ojDNixedCve9FWGw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-three/fiber@9.6.1':
resolution: {integrity: sha512-zF0rsKcVYpcJwbFEnv2HkHX9cvOEgsfQo/X8lwmR2dn13S4qEQJXir9fxf5js2LQFoXqxOY7MDkOkYx2uZ4gSg==}
peerDependencies:
@@ -772,6 +967,18 @@ packages:
react-native:
optional: true
'@react-types/color@3.2.0':
resolution: {integrity: sha512-beV3vz80nzZ1EuYUM7296Kyi3AHcMrbQw0qub/9yzHWVTKKc5sy/e4dCMKcWL/ArkeAyc7jDOiui190RQ4l0Fw==}
peerDependencies:
'@react-spectrum/provider': ^3.0.0
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-types/shared@3.36.0':
resolution: {integrity: sha512-DkP/H0C2YjjS7gZWKNqOmU8a16qHPjQNdzMwmTq9SzplM6Iw0kVMTZ0OIoe6FOgGqa+FwMsE2QbPjh/n3g/jXQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
@@ -924,6 +1131,23 @@ packages:
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
'@spectrum-icons/ui@3.7.1':
resolution: {integrity: sha512-veQymocUYo5OciXQajSailOdbWe+k6+2ehfF8D4d0V923D4xOUadtT253xXZ5vEQjPat6Kyp2WDKeQNjd7kL1w==}
peerDependencies:
'@adobe/react-spectrum': ^3.47.0
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@spectrum-icons/workflow@4.3.1':
resolution: {integrity: sha512-kDF+/EbFVyLGytotqqdYt4uSij4j/PQmDQO5km/C6DyzKjyuic3FnSBFinR+mA6oFv1OjMcLvrrDBqK3wbqRlA==}
peerDependencies:
'@adobe/react-spectrum': ^3.47.0
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@swc/helpers@0.5.23':
resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==}
'@szmarczak/http-timer@4.0.6':
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
@@ -1253,6 +1477,10 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
aria-hidden@1.2.6:
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
engines: {node: '>=10'}
assert-plus@1.0.0:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
engines: {node: '>=0.8'}
@@ -1433,6 +1661,9 @@ packages:
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
engines: {node: '>=8'}
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -1594,6 +1825,9 @@ packages:
supports-color:
optional: true
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
@@ -1675,6 +1909,9 @@ packages:
os: [darwin]
hasBin: true
dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -2186,6 +2423,15 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
input-otp@1.4.2:
resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
intl-messageformat@10.7.18:
resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==}
ip-address@10.2.0:
resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==}
engines: {node: '>= 12'}
@@ -2501,6 +2747,10 @@ packages:
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
engines: {node: '>=18'}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lowercase-keys@2.0.0:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
engines: {node: '>=8'}
@@ -2948,6 +3198,9 @@ packages:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -2959,6 +3212,11 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
qrcode.react@4.2.0:
resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
qs@6.15.2:
resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==}
engines: {node: '>=0.6'}
@@ -2978,15 +3236,41 @@ packages:
resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
engines: {node: '>= 0.10'}
react-aria-components@1.19.0:
resolution: {integrity: sha512-2smSS5nqJ8cGYMQezuUXveZm7eMyHCqTN6mDpylQBYLYbdF5dxCCuW1DHn1VKLe1DybSfPvX/cZtJlDmvFfn8A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-aria@3.50.0:
resolution: {integrity: sha512-S0Os6QZk33fzUAKu1QLT9afoUaCBt1ZNdoiq0n2YMVgKIdNIQS8zxiZ8O9hYE6QyDkHKjD6q39LQZ+qaSAIgjw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom@19.2.7:
resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==}
peerDependencies:
react: ^19.2.7
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
react-refresh@0.17.0:
resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
engines: {node: '>=0.10.0'}
react-stately@3.48.0:
resolution: {integrity: sha512-ImicSAG+lTotAe5izcs1fz49Zk48w7pDusqYg04WaPhCoej8BJ24soMu3iLXIrsi273s4P1gZrYGrqReMfgEEA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-transition-group@4.4.5:
resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
peerDependencies:
react: '>=16.6.0'
react-dom: '>=16.6.0'
react-use-measure@2.1.7:
resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==}
peerDependencies:
@@ -3299,9 +3583,22 @@ packages:
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true
tailwind-merge@3.4.0:
resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
tailwind-merge@3.6.0:
resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==}
tailwind-variants@3.2.2:
resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==}
engines: {node: '>=16.x', pnpm: '>=7.x'}
peerDependencies:
tailwind-merge: '>=3.0.0'
tailwindcss: '*'
peerDependenciesMeta:
tailwind-merge:
optional: true
tailwindcss@4.3.1:
resolution: {integrity: sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==}
@@ -3606,6 +3903,33 @@ snapshots:
7zip-bin@5.2.0: {}
'@adobe/react-spectrum-ui@1.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
'@adobe/react-spectrum-workflow@2.3.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
'@adobe/react-spectrum@3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@internationalized/date': 3.12.2
'@react-types/shared': 3.36.0(react@19.2.7)
'@spectrum-icons/ui': 3.7.1(@adobe/react-spectrum@3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@spectrum-icons/workflow': 4.3.1(@adobe/react-spectrum@3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@swc/helpers': 0.5.23
client-only: 0.0.1
clsx: 2.1.1
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-aria-components: 1.19.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
react-transition-group: 4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
use-sync-external-store: 1.6.0(react@19.2.7)
'@babel/code-frame@7.29.7':
dependencies:
'@babel/helper-validator-identifier': 7.29.7
@@ -4105,12 +4429,94 @@ snapshots:
'@fontsource-variable/inter@5.2.8': {}
'@formatjs/ecma402-abstract@2.3.6':
dependencies:
'@formatjs/fast-memoize': 2.2.7
'@formatjs/intl-localematcher': 0.6.2
decimal.js: 10.6.0
tslib: 2.8.1
'@formatjs/fast-memoize@2.2.7':
dependencies:
tslib: 2.8.1
'@formatjs/icu-messageformat-parser@2.11.4':
dependencies:
'@formatjs/ecma402-abstract': 2.3.6
'@formatjs/icu-skeleton-parser': 1.8.16
tslib: 2.8.1
'@formatjs/icu-skeleton-parser@1.8.16':
dependencies:
'@formatjs/ecma402-abstract': 2.3.6
tslib: 2.8.1
'@formatjs/intl-localematcher@0.6.2':
dependencies:
tslib: 2.8.1
'@gar/promisify@1.1.3': {}
'@heroui/react@3.2.2(@react-spectrum/provider@3.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(tailwindcss@4.3.1)':
dependencies:
'@heroui/styles': 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.3.1)
'@radix-ui/react-avatar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-aria/i18n': 3.13.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-aria/ssr': 3.10.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-aria/utils': 3.34.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-stately/utils': 3.12.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-types/color': 3.2.0(@react-spectrum/provider@3.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-types/shared': 3.36.0(react@19.2.7)
input-otp: 1.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-aria-components: 1.19.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
tailwind-merge: 3.4.0
tailwind-variants: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.3.1)
tailwindcss: 4.3.1
transitivePeerDependencies:
- '@react-spectrum/provider'
- '@types/react'
- '@types/react-dom'
'@heroui/styles@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.3.1)':
dependencies:
tailwind-variants: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.3.1)
tailwindcss: 4.3.1
tw-animate-css: 1.4.0
transitivePeerDependencies:
- tailwind-merge
'@heroui/styles@3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.1)':
dependencies:
tailwind-variants: 3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.1)
tailwindcss: 4.3.1
tw-animate-css: 1.4.0
transitivePeerDependencies:
- tailwind-merge
'@hono/node-server@1.19.14(hono@4.12.26)':
dependencies:
hono: 4.12.26
'@internationalized/date@3.12.2':
dependencies:
'@swc/helpers': 0.5.23
'@internationalized/message@3.1.10':
dependencies:
'@swc/helpers': 0.5.23
intl-messageformat: 10.7.18
'@internationalized/number@3.6.7':
dependencies:
'@swc/helpers': 0.5.23
'@internationalized/string@3.2.9':
dependencies:
'@swc/helpers': 0.5.23
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -4207,6 +4613,127 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@radix-ui/react-context': 1.1.3(@types/react@19.2.17)(react@19.2.7)
'@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.17)(react@19.2.7)
'@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.17)(react@19.2.7)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.7)
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
optionalDependencies:
'@types/react': 19.2.17
'@types/react-dom': 19.2.3(@types/react@19.2.17)
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.7)':
dependencies:
react: 19.2.7
optionalDependencies:
'@types/react': 19.2.17
'@radix-ui/react-context@1.1.3(@types/react@19.2.17)(react@19.2.7)':
dependencies:
react: 19.2.7
optionalDependencies:
'@types/react': 19.2.17
'@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@radix-ui/react-slot': 1.2.4(@types/react@19.2.17)(react@19.2.7)
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
optionalDependencies:
'@types/react': 19.2.17
'@types/react-dom': 19.2.3(@types/react@19.2.17)
'@radix-ui/react-slot@1.2.4(@types/react@19.2.17)(react@19.2.7)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.7)
react: 19.2.7
optionalDependencies:
'@types/react': 19.2.17
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.17)(react@19.2.7)':
dependencies:
react: 19.2.7
optionalDependencies:
'@types/react': 19.2.17
'@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.17)(react@19.2.7)':
dependencies:
react: 19.2.7
use-sync-external-store: 1.6.0(react@19.2.7)
optionalDependencies:
'@types/react': 19.2.17
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.7)':
dependencies:
react: 19.2.7
optionalDependencies:
'@types/react': 19.2.17
'@react-aria/color@3.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@swc/helpers': 0.5.23
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
'@react-aria/i18n@3.13.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@internationalized/date': 3.12.2
'@internationalized/message': 3.1.10
'@internationalized/string': 3.2.9
'@swc/helpers': 0.5.23
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
'@react-aria/ssr@3.10.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@swc/helpers': 0.5.23
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
'@react-aria/utils@3.34.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@swc/helpers': 0.5.23
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
'@react-spectrum/color@3.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@adobe/react-spectrum': 3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@swc/helpers': 0.5.23
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
'@react-spectrum/provider@3.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@adobe/react-spectrum': 3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@swc/helpers': 0.5.23
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
'@react-stately/color@3.10.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@swc/helpers': 0.5.23
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
'@react-stately/utils@3.12.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@swc/helpers': 0.5.23
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
'@react-three/fiber@9.6.1(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(three@0.184.0)':
dependencies:
'@babel/runtime': 7.29.7
@@ -4227,6 +4754,19 @@ snapshots:
- '@types/react'
- immer
'@react-types/color@3.2.0(@react-spectrum/provider@3.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@react-aria/color': 3.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-spectrum/color': 3.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-spectrum/provider': 3.11.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@react-stately/color': 3.10.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
'@react-types/shared@3.36.0(react@19.2.7)':
dependencies:
react: 19.2.7
'@rolldown/pluginutils@1.0.0-beta.27': {}
'@rollup/rollup-android-arm-eabi@4.62.0':
@@ -4310,6 +4850,27 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {}
'@spectrum-icons/ui@3.7.1(@adobe/react-spectrum@3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@adobe/react-spectrum': 3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@adobe/react-spectrum-ui': 1.2.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@babel/runtime': 7.29.7
'@swc/helpers': 0.5.23
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
'@spectrum-icons/workflow@4.3.1(@adobe/react-spectrum@3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@adobe/react-spectrum': 3.47.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@adobe/react-spectrum-workflow': 2.3.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@swc/helpers': 0.5.23
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
'@swc/helpers@0.5.23':
dependencies:
tslib: 2.8.1
'@szmarczak/http-timer@4.0.6':
dependencies:
defer-to-connect: 2.0.1
@@ -4692,6 +5253,10 @@ snapshots:
argparse@2.0.1: {}
aria-hidden@1.2.6:
dependencies:
tslib: 2.8.1
assert-plus@1.0.0:
optional: true
@@ -4908,6 +5473,8 @@ snapshots:
string-width: 4.2.3
optional: true
client-only@0.0.1: {}
cliui@8.0.1:
dependencies:
string-width: 4.2.3
@@ -5055,6 +5622,8 @@ snapshots:
dependencies:
ms: 2.1.3
decimal.js@10.6.0: {}
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
@@ -5139,6 +5708,11 @@ snapshots:
verror: 1.10.1
optional: true
dom-helpers@5.2.1:
dependencies:
'@babel/runtime': 7.29.7
csstype: 3.2.3
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
@@ -5807,6 +6381,18 @@ snapshots:
inherits@2.0.4: {}
input-otp@1.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
intl-messageformat@10.7.18:
dependencies:
'@formatjs/ecma402-abstract': 2.3.6
'@formatjs/fast-memoize': 2.2.7
'@formatjs/icu-messageformat-parser': 2.11.4
tslib: 2.8.1
ip-address@10.2.0: {}
ipaddr.js@1.9.1: {}
@@ -6031,6 +6617,10 @@ snapshots:
chalk: 5.6.2
is-unicode-supported: 1.3.0
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
lowercase-keys@2.0.0: {}
lru-cache@10.4.3: {}
@@ -6449,6 +7039,12 @@ snapshots:
kleur: 3.0.3
sisteransi: 1.0.5
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
@@ -6461,6 +7057,10 @@ snapshots:
punycode@2.3.1: {}
qrcode.react@4.2.0(react@19.2.7):
dependencies:
react: 19.2.7
qs@6.15.2:
dependencies:
side-channel: 1.1.1
@@ -6478,13 +7078,59 @@ snapshots:
iconv-lite: 0.7.2
unpipe: 1.0.0
react-aria-components@1.19.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
'@internationalized/date': 3.12.2
'@react-types/shared': 3.36.0(react@19.2.7)
'@swc/helpers': 0.5.23
client-only: 0.0.1
react: 19.2.7
react-aria: 3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
react-aria@3.50.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
'@internationalized/date': 3.12.2
'@internationalized/number': 3.6.7
'@internationalized/string': 3.2.9
'@react-types/shared': 3.36.0(react@19.2.7)
'@swc/helpers': 0.5.23
aria-hidden: 1.2.6
clsx: 2.1.1
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
react-stately: 3.48.0(react@19.2.7)
use-sync-external-store: 1.6.0(react@19.2.7)
react-dom@19.2.7(react@19.2.7):
dependencies:
react: 19.2.7
scheduler: 0.27.0
react-is@16.13.1: {}
react-refresh@0.17.0: {}
react-stately@3.48.0(react@19.2.7):
dependencies:
'@internationalized/date': 3.12.2
'@internationalized/number': 3.6.7
'@internationalized/string': 3.2.9
'@react-types/shared': 3.36.0(react@19.2.7)
'@swc/helpers': 0.5.23
react: 19.2.7
use-sync-external-store: 1.6.0(react@19.2.7)
react-transition-group@4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
'@babel/runtime': 7.29.7
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
react-use-measure@2.1.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
react: 19.2.7
@@ -6881,8 +7527,22 @@ snapshots:
systeminformation@5.31.7: {}
tailwind-merge@3.4.0: {}
tailwind-merge@3.6.0: {}
tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.3.1):
dependencies:
tailwindcss: 4.3.1
optionalDependencies:
tailwind-merge: 3.4.0
tailwind-variants@3.2.2(tailwind-merge@3.6.0)(tailwindcss@4.3.1):
dependencies:
tailwindcss: 4.3.1
optionalDependencies:
tailwind-merge: 3.6.0
tailwindcss@4.3.1: {}
tapable@2.3.3: {}
+8
View File
@@ -7,12 +7,14 @@ import { syncThemeFromConfig } from "./stores/themeStore";
import { syncA11yFromConfig } from "./stores/a11yStore";
import { syncBackgroundFromConfig } from "./stores/backgroundStore";
import { useAuthStore } from "./stores/authStore";
import { useKoringAuthStore } from "./stores/koringAuthStore";
import type { AppConfig } from "./api/config";
import { Home } from "./pages/home";
import { Store } from "./pages/store";
import { Today } from "./pages/today";
import { PlayLink } from "./pages/play-link";
import { Setting } from "./pages/setting";
import { SettingLogin } from "./pages/setting/login";
import { Gallery } from "./pages/gallery";
import { TaskQueue } from "./pages/task-queue";
import { Debug } from "./pages/debug";
@@ -24,6 +26,8 @@ import { CrashDebug } from "./pages/debug/crash-debug";
import { Oobe } from "./pages/oobe";
import { OobeLanguage } from "./pages/oobe/step-language";
import { OobeAgreement } from "./pages/oobe/step-agreement";
import { OobeLogin } from "./pages/oobe/step-login";
import { OobeWelcome } from "./pages/oobe/step-welcome";
import { OobeVersion } from "./pages/oobe/step-version";
import { OobeBetaTest } from "./pages/oobe/step-beta-test";
import { OobeFinish } from "./pages/oobe/step-finish";
@@ -35,11 +39,14 @@ const pageMap = {
today: Today,
"play-link": PlayLink,
setting: Setting,
"setting/login": SettingLogin,
gallery: Gallery,
"task-queue": TaskQueue,
oobe: Oobe,
"oobe/language": OobeLanguage,
"oobe/agreement": OobeAgreement,
"oobe/login": OobeLogin,
"oobe/welcome": OobeWelcome,
"oobe/version": OobeVersion,
"oobe/beta-test": OobeBetaTest,
"oobe/finish": OobeFinish,
@@ -66,6 +73,7 @@ function App() {
syncA11yFromConfig();
syncBackgroundFromConfig();
useAuthStore.getState().initFromRegistry();
useKoringAuthStore.getState().initFromDisk();
// Navigate to OOBE on first launch or if oobe not completed
if (isFirstLaunch || config.oobe) {
useRouteStore.getState().navigate("oobe");
+1
View File
@@ -1,4 +1,5 @@
@import "tailwindcss";
@import "@heroui/styles";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
@import "sonner/dist/styles.css";
+1 -1
View File
@@ -54,7 +54,7 @@ export function OobeAgreement() {
</label>
</div>
<NextButton onClick={() => navigate("oobe/version")} disabled={!checked} />
<NextButton onClick={() => navigate("oobe/welcome")} disabled={!checked} />
</OobeLayout>
);
}
+1 -1
View File
@@ -45,7 +45,7 @@ export function OobeLanguage() {
))}
</div>
<NextButton onClick={() => navigate("oobe/agreement")} />
<NextButton onClick={() => navigate("oobe/login")} />
</OobeLayout>
);
}
+1 -1
View File
@@ -12,7 +12,7 @@ export function OobeVersion() {
const isTestBuild = BUILD_MODE === "dev" || BUILD_MODE === "beta";
const badgeLabel = BUILD_MODE === "dev" ? "DEV" : BUILD_MODE === "beta" ? "BETA" : null;
const nextRoute = isTestBuild ? "oobe/beta-test" : "oobe/finish";
const nextRoute = isTestBuild ? "oobe/beta-test" : "oobe/login";
useEffect(() => {
fetch(`${import.meta.env.BASE_URL}changelog-${VERSION}.txt`)
+60 -71
View File
@@ -1,25 +1,19 @@
import { useAuthStore } from "@/stores/authStore";
import { Button } from "@/components/ui/button";
import { UserCircle, LogOut, RefreshCw } from "lucide-react";
import { useEffect } from "react";
import { useKoringAuthStore } from "@/stores/koringAuthStore";
import { useRouteStore } from "@/stores/routeStore";
import { UserCircle, LogOut, Loader2, ChevronRight } from "lucide-react";
function GlassCard({ children }: { children: React.ReactNode }) {
return <div className="glass-card px-5 py-4">{children}</div>;
}
function SettingRow({ label, desc, children }: { label: string; desc?: string; children: React.ReactNode }) {
return (
<div className="flex items-center justify-between gap-4">
<div className="flex-1 min-w-0">
<p className="text-sm font-medium text-foreground">{label}</p>
{desc && <p className="text-[13px] text-muted-foreground mt-0.5">{desc}</p>}
</div>
<div className="shrink-0">{children}</div>
</div>
);
}
export function AccountSetting() {
const { user, loading, logout, startMicrosoftLogin } = useAuthStore();
const { user, loading, initFromDisk, logout } = useKoringAuthStore();
const navigate = useRouteStore((s) => s.navigate);
useEffect(() => {
initFromDisk();
}, [initFromDisk]);
return (
<div>
@@ -27,24 +21,39 @@ export function AccountSetting() {
<p className="text-sm text-muted-foreground mb-6"> Koring </p>
<div className="space-y-6">
{/* ===== 账户信息 ===== */}
{/* 账户信息 */}
<div>
<h3 className="text-lg font-bold text-foreground mb-3"></h3>
<GlassCard>
{user ? (
<button
onClick={() => {
if (!user && !loading) navigate("setting/login");
}}
className={[
"glass-card px-5 py-4 w-full text-left transition-all duration-200",
!user && !loading ? "cursor-pointer hover:bg-foreground/[0.04]" : "cursor-default",
].join(" ")}
>
{loading ? (
<div className="flex items-center gap-2 py-2">
<Loader2 className="w-4 h-4 animate-spin text-muted-foreground" />
<span className="text-sm text-muted-foreground">...</span>
</div>
) : user ? (
<div className="flex items-center gap-4">
<div className="w-14 h-14 rounded-full bg-foreground/[0.06] flex items-center justify-center shrink-0">
<UserCircle className="w-8 h-8 text-foreground/40" />
<div className="w-14 h-14 rounded-full bg-foreground/[0.06] flex items-center justify-center shrink-0 overflow-hidden">
{user.picture ? (
<img src={user.picture} alt="" className="w-full h-full object-cover" />
) : (
<UserCircle className="w-8 h-8 text-foreground/40" />
)}
</div>
<div className="flex-1 min-w-0">
<p className="text-base font-medium text-foreground truncate">{user.username}</p>
<p className="text-[13px] text-muted-foreground mt-0.5">
{user.xboxProfile ? "Microsoft 账户" : "本地账户"}
<p className="text-base font-medium text-foreground truncate">
{user.name || user.username}
</p>
{user.uuid && (
<p className="text-[11px] text-muted-foreground/60 mt-0.5 font-mono">
UUID: {user.uuid}
</p>
<p className="text-[13px] text-muted-foreground mt-0.5">Koring </p>
{user.email && (
<p className="text-[11px] text-muted-foreground/60 mt-0.5">{user.email}</p>
)}
</div>
</div>
@@ -55,56 +64,36 @@ export function AccountSetting() {
</div>
<div className="flex-1 min-w-0">
<p className="text-sm text-muted-foreground"></p>
<p className="text-[12px] text-muted-foreground/60 mt-0.5"></p>
<p className="text-[12px] text-muted-foreground/60 mt-0.5"> Koring </p>
</div>
<ChevronRight className="w-4 h-4 text-foreground/20 shrink-0" />
</div>
)}
</GlassCard>
</button>
</div>
{/* ===== 账户操作 ===== */}
<div>
<h3 className="text-lg font-bold text-foreground mb-3"></h3>
<div className="space-y-3">
{user ? (
<>
<GlassCard>
<SettingRow
label="同步数据"
desc="立即拉取最新的云端配置与数据"
>
<Button variant="outline" size="sm" disabled={loading}>
<RefreshCw className="w-3.5 h-3.5 mr-1.5" />
</Button>
</SettingRow>
</GlassCard>
<GlassCard>
<SettingRow
label="退出登录"
desc="退出当前账户,数据将保留在本地"
>
<Button variant="destructive" size="sm" onClick={logout} disabled={loading}>
<LogOut className="w-3.5 h-3.5 mr-1.5" />
退
</Button>
</SettingRow>
</GlassCard>
</>
) : (
<GlassCard>
<SettingRow
label="登录 Koring 账户"
desc="通过 Microsoft 账户登录以同步数据、皮肤与个人配置"
{/* 退出登录 */}
{user && (
<div>
<h3 className="text-lg font-bold text-foreground mb-3"></h3>
<GlassCard>
<div className="flex items-center justify-between">
<div>
<p className="text-sm font-medium text-foreground">退</p>
<p className="text-[13px] text-muted-foreground mt-0.5">退</p>
</div>
<button
onClick={logout}
disabled={loading}
className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-md text-[13px] font-medium bg-red-500/10 text-red-600 dark:text-red-400 hover:bg-red-500/20 transition-colors disabled:opacity-40"
>
<Button size="sm" onClick={() => startMicrosoftLogin("00000000-0000-0000-0000-000000000000")} disabled={loading}>
</Button>
</SettingRow>
</GlassCard>
)}
<LogOut className="w-3.5 h-3.5" />
退
</button>
</div>
</GlassCard>
</div>
</div>
)}
</div>
</div>
);
+11 -8
View File
@@ -1,4 +1,5 @@
import { useAuthStore } from "@/stores/authStore";
import { useKoringAuthStore } from "@/stores/koringAuthStore";
import { useRouteStore } from "@/stores/routeStore";
import { BUILD_MODE } from "@/lib/mode";
import { useUpdateStore } from "@/stores/updateStore";
import {
@@ -62,7 +63,7 @@ interface HomeSettingProps {
}
export function HomeSetting({ onNavigate }: HomeSettingProps) {
const user = useAuthStore((s) => s.user);
const user = useKoringAuthStore((s) => s.user);
const { update } = useUpdateStore();
return (
@@ -85,17 +86,19 @@ export function HomeSetting({ onNavigate }: HomeSettingProps) {
<h3 className="text-lg font-bold text-foreground mb-3"></h3>
<GlassCard>
<div className="flex items-center gap-4">
<div className="w-12 h-12 rounded-full bg-foreground/[0.06] flex items-center justify-center shrink-0">
<UserCircle className="w-7 h-7 text-foreground/40" />
<div className="w-12 h-12 rounded-full bg-foreground/[0.06] flex items-center justify-center shrink-0 overflow-hidden">
{user?.picture ? (
<img src={user.picture} alt="" className="w-full h-full object-cover" />
) : (
<UserCircle className="w-7 h-7 text-foreground/40" />
)}
</div>
<div className="flex-1 min-w-0">
<p className="text-sm font-medium text-foreground truncate">
{user?.username ?? "未登录"}
{user ? (user.name || user.username) : "未登录"}
</p>
<p className="text-[12px] text-muted-foreground mt-0.5">
{user
? `${user.xboxProfile ? "Microsoft" : "离线"} 账户`
: "登录以同步数据和皮肤"}
{user ? "Koring 账户" : "登录以同步数据和皮肤"}
</p>
</div>
<span className="text-[11px] text-muted-foreground shrink-0">
+6
View File
@@ -6,6 +6,7 @@ export type RouteKey =
| "today"
| "play-link"
| "setting"
| "setting/login"
| "gallery"
| "task-queue"
| "oobe"
@@ -13,6 +14,8 @@ export type RouteKey =
| "oobe/agreement"
| "oobe/version"
| "oobe/beta-test"
| "oobe/login"
| "oobe/welcome"
| "oobe/finish"
| "oobe/about-info"
| "debug"
@@ -45,12 +48,15 @@ export const routes: RouteItem[] = [
export const allRoutes: RouteItem[] = [
...routes,
{ key: "setting/login", label: "登录", path: "/setting/login", hidden: true, backable: true },
{ key: "task-queue", label: "任务队列", path: "/task-queue", hidden: true },
{ key: "oobe", label: "OOBE", path: "/oobe", hidden: true },
{ key: "oobe/language", label: "语言设置", path: "/oobe/language", hidden: true },
{ key: "oobe/agreement", label: "同意协议", path: "/oobe/agreement", hidden: true },
{ key: "oobe/version", label: "当前版本", path: "/oobe/version", hidden: true },
{ key: "oobe/beta-test", label: "测试协议", path: "/oobe/beta-test", hidden: true },
{ key: "oobe/login", label: "登录", path: "/oobe/login", hidden: true },
{ key: "oobe/welcome", label: "欢迎", path: "/oobe/welcome", hidden: true },
{ key: "oobe/finish", label: "完成", path: "/oobe/finish", hidden: true },
{ key: "oobe/about-info", label: "关于信息", path: "/oobe/about-info", hidden: true, backable: true },
{ key: "debug", label: "调试", path: "/debug", hidden: true },
+10
View File
@@ -16,12 +16,22 @@ export default defineConfig(async () => ({
},
base: "./",
build: {
chunkSizeWarningLimit: 1000,
rollupOptions: {
input: {
main: path.resolve(__dirname, "index.html"),
splash: path.resolve(__dirname, "splash.html"),
crash: path.resolve(__dirname, "crash.html"),
},
output: {
manualChunks: {
"vendor-react": ["react", "react-dom"],
"vendor-motion": ["motion"],
"vendor-ui": ["lucide-react", "clsx", "tailwind-merge"],
"vendor-three": ["three", "@react-three/fiber"],
"vendor-zustand": ["zustand"],
},
},
},
},
clearScreen: false,