feat(showcase): use vanilla js instead due to incompatibility of wallpaper engine
This commit is contained in:
24
index.html
24
index.html
@@ -1,14 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1,user-scalable=no">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="renderer" content="webkit">
|
||||
<title>aklive2d</title>
|
||||
</head>
|
||||
<body style="background-image: url('./operator_bg.png');">
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.jsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1,user-scalable=no">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="renderer" content="webkit">
|
||||
<title>aklive2d</title>
|
||||
</head>
|
||||
<body style="background-image: url('./operator_bg.png');">
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/index.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -8,13 +8,11 @@
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vite": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"preact": "^10.11.3",
|
||||
"sharp": "^0.31.3",
|
||||
"yaml": "^2.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@preact/preset-vite": "^2.4.0",
|
||||
"vite": "^4.0.0"
|
||||
}
|
||||
}
|
||||
675
pnpm-lock.yaml
generated
675
pnpm-lock.yaml
generated
@@ -1,273 +1,21 @@
|
||||
lockfileVersion: 5.4
|
||||
|
||||
specifiers:
|
||||
'@preact/preset-vite': ^2.4.0
|
||||
preact: ^10.11.3
|
||||
sharp: ^0.31.3
|
||||
vite: ^4.0.0
|
||||
yaml: ^2.2.1
|
||||
|
||||
dependencies:
|
||||
preact: 10.11.3
|
||||
sharp: 0.31.3
|
||||
yaml: 2.2.1
|
||||
|
||||
devDependencies:
|
||||
'@preact/preset-vite': 2.5.0_6lv424qzfa5w4k4pp4rg6latw4
|
||||
vite: 4.0.4
|
||||
|
||||
packages:
|
||||
|
||||
/@ampproject/remapping/2.2.0:
|
||||
resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dependencies:
|
||||
'@jridgewell/gen-mapping': 0.1.1
|
||||
'@jridgewell/trace-mapping': 0.3.17
|
||||
dev: true
|
||||
|
||||
/@babel/code-frame/7.18.6:
|
||||
resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/highlight': 7.18.6
|
||||
dev: true
|
||||
|
||||
/@babel/compat-data/7.20.10:
|
||||
resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/core/7.20.7:
|
||||
resolution: {integrity: sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@ampproject/remapping': 2.2.0
|
||||
'@babel/code-frame': 7.18.6
|
||||
'@babel/generator': 7.20.7
|
||||
'@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7
|
||||
'@babel/helper-module-transforms': 7.20.11
|
||||
'@babel/helpers': 7.20.7
|
||||
'@babel/parser': 7.20.7
|
||||
'@babel/template': 7.20.7
|
||||
'@babel/traverse': 7.20.10
|
||||
'@babel/types': 7.20.7
|
||||
convert-source-map: 1.9.0
|
||||
debug: 4.3.4
|
||||
gensync: 1.0.0-beta.2
|
||||
json5: 2.2.3
|
||||
semver: 6.3.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@babel/generator/7.20.7:
|
||||
resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
'@jridgewell/gen-mapping': 0.3.2
|
||||
jsesc: 2.5.2
|
||||
dev: true
|
||||
|
||||
/@babel/helper-annotate-as-pure/7.18.6:
|
||||
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.7:
|
||||
resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.20.10
|
||||
'@babel/core': 7.20.7
|
||||
'@babel/helper-validator-option': 7.18.6
|
||||
browserslist: 4.21.4
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/@babel/helper-environment-visitor/7.18.9:
|
||||
resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helper-function-name/7.19.0:
|
||||
resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/template': 7.20.7
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/helper-hoist-variables/7.18.6:
|
||||
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/helper-module-imports/7.18.6:
|
||||
resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/helper-module-transforms/7.20.11:
|
||||
resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/helper-environment-visitor': 7.18.9
|
||||
'@babel/helper-module-imports': 7.18.6
|
||||
'@babel/helper-simple-access': 7.20.2
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
'@babel/template': 7.20.7
|
||||
'@babel/traverse': 7.20.10
|
||||
'@babel/types': 7.20.7
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@babel/helper-plugin-utils/7.20.2:
|
||||
resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helper-simple-access/7.20.2:
|
||||
resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/helper-split-export-declaration/7.18.6:
|
||||
resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/helper-string-parser/7.19.4:
|
||||
resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helper-validator-identifier/7.19.1:
|
||||
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helper-validator-option/7.18.6:
|
||||
resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helpers/7.20.7:
|
||||
resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/template': 7.20.7
|
||||
'@babel/traverse': 7.20.10
|
||||
'@babel/types': 7.20.7
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@babel/highlight/7.18.6:
|
||||
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
chalk: 2.4.2
|
||||
js-tokens: 4.0.0
|
||||
dev: true
|
||||
|
||||
/@babel/parser/7.20.7:
|
||||
resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.7:
|
||||
resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/core': 7.20.7
|
||||
'@babel/helper-plugin-utils': 7.20.2
|
||||
dev: true
|
||||
|
||||
/@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.7:
|
||||
resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/core': 7.20.7
|
||||
'@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.20.7:
|
||||
resolution: {integrity: sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/core': 7.20.7
|
||||
'@babel/helper-annotate-as-pure': 7.18.6
|
||||
'@babel/helper-module-imports': 7.18.6
|
||||
'@babel/helper-plugin-utils': 7.20.2
|
||||
'@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.7
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/template/7.20.7:
|
||||
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.18.6
|
||||
'@babel/parser': 7.20.7
|
||||
'@babel/types': 7.20.7
|
||||
dev: true
|
||||
|
||||
/@babel/traverse/7.20.10:
|
||||
resolution: {integrity: sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.18.6
|
||||
'@babel/generator': 7.20.7
|
||||
'@babel/helper-environment-visitor': 7.18.9
|
||||
'@babel/helper-function-name': 7.19.0
|
||||
'@babel/helper-hoist-variables': 7.18.6
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
'@babel/parser': 7.20.7
|
||||
'@babel/types': 7.20.7
|
||||
debug: 4.3.4
|
||||
globals: 11.12.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@babel/types/7.20.7:
|
||||
resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.19.4
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
to-fast-properties: 2.0.0
|
||||
dev: true
|
||||
|
||||
/@esbuild/android-arm/0.16.13:
|
||||
resolution: {integrity: sha512-JmtqThupn9Yf+FzANE+GG73ASUkssnPwOsndUElhp23685QzRK+MO1UompOlBaXV9D5FTuYcPnw7p4mCq2YbZQ==}
|
||||
/@esbuild/android-arm/0.16.17:
|
||||
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
@@ -275,8 +23,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm64/0.16.13:
|
||||
resolution: {integrity: sha512-r4xetsd1ez1NF9/9R2f9Q6AlxqiZLwUqo7ICOcvEVwopVkXUcspIjEbJk0EVTgT6Cp5+ymzGPT6YNV0ievx4yA==}
|
||||
/@esbuild/android-arm64/0.16.17:
|
||||
resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
@@ -284,8 +32,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64/0.16.13:
|
||||
resolution: {integrity: sha512-hKt1bFht/Vtp0xJ0ZVzFMnPy1y1ycmM3KNnp3zsyZfQmw7nhs2WLO4vxdR5YG+6RsHKCb2zbZ3VwlC0Tij0qyA==}
|
||||
/@esbuild/android-x64/0.16.17:
|
||||
resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
@@ -293,8 +41,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64/0.16.13:
|
||||
resolution: {integrity: sha512-ogrVuNi2URocrr3Ps20f075EMm9V7IeenOi9FRj4qdbT6mQlwLuP4l90PW2iBrKERx0oRkcZprEUNsz/3xd7ww==}
|
||||
/@esbuild/darwin-arm64/0.16.17:
|
||||
resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
@@ -302,8 +50,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64/0.16.13:
|
||||
resolution: {integrity: sha512-Agajik9SBGiKD7FPXE+ExW6x3MgA/dUdpZnXa9y1tyfE4lKQx+eQiknSdrBnWPeqa9wL0AOvkhghmYhpVkyqkA==}
|
||||
/@esbuild/darwin-x64/0.16.17:
|
||||
resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
@@ -311,8 +59,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64/0.16.13:
|
||||
resolution: {integrity: sha512-KxMO3/XihBcHM+xQUM6nQZO1SgQuOsd1DCnKF1a4SIf/i5VD45vrqN3k8ePgFrEbMi7m5JeGmvNqwJXinF0a4Q==}
|
||||
/@esbuild/freebsd-arm64/0.16.17:
|
||||
resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
@@ -320,8 +68,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64/0.16.13:
|
||||
resolution: {integrity: sha512-Ez15oqV1vwvZ30cVLeBW14BsWq/fdWNQGMOxxqaSJVQVLqHhvgfQ7gxGDiN9tpJdeQhqJO+Q0r02/Tce5+USNg==}
|
||||
/@esbuild/freebsd-x64/0.16.17:
|
||||
resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
@@ -329,8 +77,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm/0.16.13:
|
||||
resolution: {integrity: sha512-18dLd2L3mda+iFj6sswyBMSh2UwniamD9M4DwPv8VM+9apRFlQ5IGKxBdumnTuOI4NvwwAernmUseWhYQ9k+rg==}
|
||||
/@esbuild/linux-arm/0.16.17:
|
||||
resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
@@ -338,8 +86,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64/0.16.13:
|
||||
resolution: {integrity: sha512-qi5n7KwcGViyJeZeQnu8fB6dC3Mlm5PGaqSv2HhQDDx/MPvVfQGNMcv7zcBL4qk3FkuWhGVwXkjQ76x7R0PWlA==}
|
||||
/@esbuild/linux-arm64/0.16.17:
|
||||
resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
@@ -347,8 +95,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32/0.16.13:
|
||||
resolution: {integrity: sha512-2489Xad9sr+6GD7nB913fUqpCsSwVwgskkQTq4Or2mZntSPYPebyJm8l1YruHo7oqYMTGV6RiwGE4gRo3H+EPQ==}
|
||||
/@esbuild/linux-ia32/0.16.17:
|
||||
resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
@@ -356,8 +104,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64/0.16.13:
|
||||
resolution: {integrity: sha512-x8KplRu9Y43Px8I9YS+sPBwQ+fw44Mvp2BPVADopKDWz+h3fcj1BvRU58kxb89WObmwKX9sWdtYzepL4Fmx03A==}
|
||||
/@esbuild/linux-loong64/0.16.17:
|
||||
resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
@@ -365,8 +113,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el/0.16.13:
|
||||
resolution: {integrity: sha512-qhhdWph9FLwD9rVVC/nUf7k2U4NZIA6/mGx0B7+O6PFV0GjmPA2E3zDQ4NUjq9P26E0DeAZy9akH9dYcUBRU7A==}
|
||||
/@esbuild/linux-mips64el/0.16.17:
|
||||
resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
@@ -374,8 +122,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64/0.16.13:
|
||||
resolution: {integrity: sha512-cVWAPKsrRVxI1jCeJHnYSbE3BrEU+pZTZK2gfao9HRxuc+3m4+RLfs3EVEpGLmMKEcWfVCB9wZ3yNxnknutGKQ==}
|
||||
/@esbuild/linux-ppc64/0.16.17:
|
||||
resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
@@ -383,8 +131,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64/0.16.13:
|
||||
resolution: {integrity: sha512-Agb7dbRyZWnmPn5Vvf0eyqaEUqSsaIUwwyInu2EoFTaIDRp093QU2M5alUyOooMLkRbD1WvqQNwx08Z/g+SAcQ==}
|
||||
/@esbuild/linux-riscv64/0.16.17:
|
||||
resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
@@ -392,8 +140,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x/0.16.13:
|
||||
resolution: {integrity: sha512-AqRBIrc/+kl08ahliNG+EyU+j41wIzQfwBTKpi80cCDiYvYFPuXjvzZsD9muiu58Isj0RVni9VgC4xK/AnSW4g==}
|
||||
/@esbuild/linux-s390x/0.16.17:
|
||||
resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
@@ -401,8 +149,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64/0.16.13:
|
||||
resolution: {integrity: sha512-S4wn2BimuhPcoArRtVrdHUKIymCCZcYAXQE47kUiX4yrUrEX2/ifn5eKNbZ5c1jJKUlh1gC2ESIN+iw3wQax3g==}
|
||||
/@esbuild/linux-x64/0.16.17:
|
||||
resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
@@ -410,8 +158,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64/0.16.13:
|
||||
resolution: {integrity: sha512-2c8JWgfUMlQHTdaR5X3xNMwqOyad8kgeCupuVkdm3QkUOzGREjlTETQsK6oHifocYzDCo9FeKcUwsK356SdR+g==}
|
||||
/@esbuild/netbsd-x64/0.16.17:
|
||||
resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
@@ -419,8 +167,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64/0.16.13:
|
||||
resolution: {integrity: sha512-Bwh+PmKD/LK+xBjqIpnYnKYj0fIyQJ0YpRxsn0F+WfzvQ2OA+GKDlf8AHosiCns26Q4Dje388jQVwfOBZ1GaFw==}
|
||||
/@esbuild/openbsd-x64/0.16.17:
|
||||
resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
@@ -428,8 +176,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64/0.16.13:
|
||||
resolution: {integrity: sha512-8wwk6f9XGnhrF94/DBdFM4Xm1JeCyGTCj67r516VS9yvBVQf3Rar54L+XPVDs/oZOokwH+XsktrgkuTMAmjntg==}
|
||||
/@esbuild/sunos-x64/0.16.17:
|
||||
resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
@@ -437,8 +185,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64/0.16.13:
|
||||
resolution: {integrity: sha512-Jmwbp/5ArLCiRAHC33ODfcrlIcbP/exXkOEUVkADNJC4e/so2jm+i8IQFvVX/lA2GWvK3GdgcN0VFfp9YITAbg==}
|
||||
/@esbuild/win32-arm64/0.16.17:
|
||||
resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
@@ -446,8 +194,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32/0.16.13:
|
||||
resolution: {integrity: sha512-AX6WjntGjhJHzrPSVvjMD7grxt41koHfAOx6lxLorrpDwwIKKPaGDASPZgvFIZHTbwhOtILW6vAXxYPDsKpDJA==}
|
||||
/@esbuild/win32-ia32/0.16.17:
|
||||
resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
@@ -455,8 +203,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64/0.16.13:
|
||||
resolution: {integrity: sha512-A+U4gM6OOkPS03UgVU08GTpAAAxPsP/8Z4FmneGo4TaVSD99bK9gVJXlqUEPMO/htFXEAht2O6pX4ErtLY5tVg==}
|
||||
/@esbuild/win32-x64/0.16.17:
|
||||
resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
@@ -464,121 +212,6 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@jridgewell/gen-mapping/0.1.1:
|
||||
resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.4.14
|
||||
dev: true
|
||||
|
||||
/@jridgewell/gen-mapping/0.3.2:
|
||||
resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dependencies:
|
||||
'@jridgewell/set-array': 1.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.4.14
|
||||
'@jridgewell/trace-mapping': 0.3.17
|
||||
dev: true
|
||||
|
||||
/@jridgewell/resolve-uri/3.1.0:
|
||||
resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/set-array/1.1.2:
|
||||
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/sourcemap-codec/1.4.14:
|
||||
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/trace-mapping/0.3.17:
|
||||
resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.0
|
||||
'@jridgewell/sourcemap-codec': 1.4.14
|
||||
dev: true
|
||||
|
||||
/@preact/preset-vite/2.5.0_6lv424qzfa5w4k4pp4rg6latw4:
|
||||
resolution: {integrity: sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==}
|
||||
peerDependencies:
|
||||
'@babel/core': 7.x
|
||||
vite: 2.x || 3.x || 4.x
|
||||
dependencies:
|
||||
'@babel/core': 7.20.7
|
||||
'@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.7
|
||||
'@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.7
|
||||
'@prefresh/vite': 2.2.9_preact@10.11.3+vite@4.0.4
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
babel-plugin-transform-hook-names: 1.0.2_@babel+core@7.20.7
|
||||
debug: 4.3.4
|
||||
kolorist: 1.6.0
|
||||
resolve: 1.22.1
|
||||
vite: 4.0.4
|
||||
transitivePeerDependencies:
|
||||
- preact
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@prefresh/babel-plugin/0.4.4:
|
||||
resolution: {integrity: sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw==}
|
||||
dev: true
|
||||
|
||||
/@prefresh/core/1.4.1_preact@10.11.3:
|
||||
resolution: {integrity: sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==}
|
||||
peerDependencies:
|
||||
preact: ^10.0.0
|
||||
dependencies:
|
||||
preact: 10.11.3
|
||||
dev: true
|
||||
|
||||
/@prefresh/utils/1.1.3:
|
||||
resolution: {integrity: sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==}
|
||||
dev: true
|
||||
|
||||
/@prefresh/vite/2.2.9_preact@10.11.3+vite@4.0.4:
|
||||
resolution: {integrity: sha512-1ERBF85Ja9/lkrfaltmo4Gca7R2ClQPSHHDDysFgfvPzHmLUeyB0x9WHwhwov/AA1DnyPhsfYT54z3yQd8XrgA==}
|
||||
peerDependencies:
|
||||
preact: ^10.4.0
|
||||
vite: '>=2.0.0-beta.3'
|
||||
dependencies:
|
||||
'@babel/core': 7.20.7
|
||||
'@prefresh/babel-plugin': 0.4.4
|
||||
'@prefresh/core': 1.4.1_preact@10.11.3
|
||||
'@prefresh/utils': 1.1.3
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
preact: 10.11.3
|
||||
vite: 4.0.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@rollup/pluginutils/4.2.1:
|
||||
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
|
||||
engines: {node: '>= 8.0.0'}
|
||||
dependencies:
|
||||
estree-walker: 2.0.2
|
||||
picomatch: 2.3.1
|
||||
dev: true
|
||||
|
||||
/ansi-styles/3.2.1:
|
||||
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
|
||||
engines: {node: '>=4'}
|
||||
dependencies:
|
||||
color-convert: 1.9.3
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-hook-names/1.0.2_@babel+core@7.20.7:
|
||||
resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.12.10
|
||||
dependencies:
|
||||
'@babel/core': 7.20.7
|
||||
dev: true
|
||||
|
||||
/base64-js/1.5.1:
|
||||
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
||||
dev: false
|
||||
@@ -591,17 +224,6 @@ packages:
|
||||
readable-stream: 3.6.0
|
||||
dev: false
|
||||
|
||||
/browserslist/4.21.4:
|
||||
resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
caniuse-lite: 1.0.30001441
|
||||
electron-to-chromium: 1.4.284
|
||||
node-releases: 2.0.8
|
||||
update-browserslist-db: 1.0.10_browserslist@4.21.4
|
||||
dev: true
|
||||
|
||||
/buffer/5.7.1:
|
||||
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
||||
dependencies:
|
||||
@@ -609,29 +231,10 @@ packages:
|
||||
ieee754: 1.2.1
|
||||
dev: false
|
||||
|
||||
/caniuse-lite/1.0.30001441:
|
||||
resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==}
|
||||
dev: true
|
||||
|
||||
/chalk/2.4.2:
|
||||
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
|
||||
engines: {node: '>=4'}
|
||||
dependencies:
|
||||
ansi-styles: 3.2.1
|
||||
escape-string-regexp: 1.0.5
|
||||
supports-color: 5.5.0
|
||||
dev: true
|
||||
|
||||
/chownr/1.1.4:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
dev: false
|
||||
|
||||
/color-convert/1.9.3:
|
||||
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
|
||||
dependencies:
|
||||
color-name: 1.1.3
|
||||
dev: true
|
||||
|
||||
/color-convert/2.0.1:
|
||||
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
||||
engines: {node: '>=7.0.0'}
|
||||
@@ -639,9 +242,6 @@ packages:
|
||||
color-name: 1.1.4
|
||||
dev: false
|
||||
|
||||
/color-name/1.1.3:
|
||||
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
|
||||
|
||||
/color-name/1.1.4:
|
||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||
dev: false
|
||||
@@ -649,7 +249,7 @@ packages:
|
||||
/color-string/1.9.1:
|
||||
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
|
||||
dependencies:
|
||||
color-name: 1.1.3
|
||||
color-name: 1.1.4
|
||||
simple-swizzle: 0.2.2
|
||||
dev: false
|
||||
|
||||
@@ -661,22 +261,6 @@ packages:
|
||||
color-string: 1.9.1
|
||||
dev: false
|
||||
|
||||
/convert-source-map/1.9.0:
|
||||
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
|
||||
dev: true
|
||||
|
||||
/debug/4.3.4:
|
||||
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
||||
engines: {node: '>=6.0'}
|
||||
peerDependencies:
|
||||
supports-color: '*'
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
dev: true
|
||||
|
||||
/decompress-response/6.0.0:
|
||||
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -694,58 +278,40 @@ packages:
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/electron-to-chromium/1.4.284:
|
||||
resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
|
||||
dev: true
|
||||
|
||||
/end-of-stream/1.4.4:
|
||||
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
|
||||
dependencies:
|
||||
once: 1.4.0
|
||||
dev: false
|
||||
|
||||
/esbuild/0.16.13:
|
||||
resolution: {integrity: sha512-oYwFdSEIoKM1oYzyem1osgKJAvg5447XF+05ava21fOtilyb2HeQQh26/74K4WeAk5dZmj/Mx10zUqUnI14jhA==}
|
||||
/esbuild/0.16.17:
|
||||
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
optionalDependencies:
|
||||
'@esbuild/android-arm': 0.16.13
|
||||
'@esbuild/android-arm64': 0.16.13
|
||||
'@esbuild/android-x64': 0.16.13
|
||||
'@esbuild/darwin-arm64': 0.16.13
|
||||
'@esbuild/darwin-x64': 0.16.13
|
||||
'@esbuild/freebsd-arm64': 0.16.13
|
||||
'@esbuild/freebsd-x64': 0.16.13
|
||||
'@esbuild/linux-arm': 0.16.13
|
||||
'@esbuild/linux-arm64': 0.16.13
|
||||
'@esbuild/linux-ia32': 0.16.13
|
||||
'@esbuild/linux-loong64': 0.16.13
|
||||
'@esbuild/linux-mips64el': 0.16.13
|
||||
'@esbuild/linux-ppc64': 0.16.13
|
||||
'@esbuild/linux-riscv64': 0.16.13
|
||||
'@esbuild/linux-s390x': 0.16.13
|
||||
'@esbuild/linux-x64': 0.16.13
|
||||
'@esbuild/netbsd-x64': 0.16.13
|
||||
'@esbuild/openbsd-x64': 0.16.13
|
||||
'@esbuild/sunos-x64': 0.16.13
|
||||
'@esbuild/win32-arm64': 0.16.13
|
||||
'@esbuild/win32-ia32': 0.16.13
|
||||
'@esbuild/win32-x64': 0.16.13
|
||||
dev: true
|
||||
|
||||
/escalade/3.1.1:
|
||||
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/escape-string-regexp/1.0.5:
|
||||
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
|
||||
engines: {node: '>=0.8.0'}
|
||||
dev: true
|
||||
|
||||
/estree-walker/2.0.2:
|
||||
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
||||
'@esbuild/android-arm': 0.16.17
|
||||
'@esbuild/android-arm64': 0.16.17
|
||||
'@esbuild/android-x64': 0.16.17
|
||||
'@esbuild/darwin-arm64': 0.16.17
|
||||
'@esbuild/darwin-x64': 0.16.17
|
||||
'@esbuild/freebsd-arm64': 0.16.17
|
||||
'@esbuild/freebsd-x64': 0.16.17
|
||||
'@esbuild/linux-arm': 0.16.17
|
||||
'@esbuild/linux-arm64': 0.16.17
|
||||
'@esbuild/linux-ia32': 0.16.17
|
||||
'@esbuild/linux-loong64': 0.16.17
|
||||
'@esbuild/linux-mips64el': 0.16.17
|
||||
'@esbuild/linux-ppc64': 0.16.17
|
||||
'@esbuild/linux-riscv64': 0.16.17
|
||||
'@esbuild/linux-s390x': 0.16.17
|
||||
'@esbuild/linux-x64': 0.16.17
|
||||
'@esbuild/netbsd-x64': 0.16.17
|
||||
'@esbuild/openbsd-x64': 0.16.17
|
||||
'@esbuild/sunos-x64': 0.16.17
|
||||
'@esbuild/win32-arm64': 0.16.17
|
||||
'@esbuild/win32-ia32': 0.16.17
|
||||
'@esbuild/win32-x64': 0.16.17
|
||||
dev: true
|
||||
|
||||
/expand-template/2.0.3:
|
||||
@@ -769,25 +335,10 @@ packages:
|
||||
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
|
||||
dev: true
|
||||
|
||||
/gensync/1.0.0-beta.2:
|
||||
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/github-from-package/0.0.0:
|
||||
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
|
||||
dev: false
|
||||
|
||||
/globals/11.12.0:
|
||||
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
|
||||
engines: {node: '>=4'}
|
||||
dev: true
|
||||
|
||||
/has-flag/3.0.0:
|
||||
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
|
||||
engines: {node: '>=4'}
|
||||
dev: true
|
||||
|
||||
/has/1.0.3:
|
||||
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
@@ -817,32 +368,6 @@ packages:
|
||||
has: 1.0.3
|
||||
dev: true
|
||||
|
||||
/js-tokens/4.0.0:
|
||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||
dev: true
|
||||
|
||||
/jsesc/2.5.2:
|
||||
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/json5/2.2.3:
|
||||
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
|
||||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/kolorist/1.6.0:
|
||||
resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==}
|
||||
dev: true
|
||||
|
||||
/lru-cache/5.1.1:
|
||||
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
|
||||
dependencies:
|
||||
yallist: 3.1.1
|
||||
dev: true
|
||||
|
||||
/lru-cache/6.0.0:
|
||||
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -863,10 +388,6 @@ packages:
|
||||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||
dev: false
|
||||
|
||||
/ms/2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
dev: true
|
||||
|
||||
/nanoid/3.3.4:
|
||||
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
@@ -888,10 +409,6 @@ packages:
|
||||
resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==}
|
||||
dev: false
|
||||
|
||||
/node-releases/2.0.8:
|
||||
resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
|
||||
dev: true
|
||||
|
||||
/once/1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
dependencies:
|
||||
@@ -906,13 +423,8 @@ packages:
|
||||
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
|
||||
dev: true
|
||||
|
||||
/picomatch/2.3.1:
|
||||
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
||||
engines: {node: '>=8.6'}
|
||||
dev: true
|
||||
|
||||
/postcss/8.4.20:
|
||||
resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==}
|
||||
/postcss/8.4.21:
|
||||
resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
dependencies:
|
||||
nanoid: 3.3.4
|
||||
@@ -920,9 +432,6 @@ packages:
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/preact/10.11.3:
|
||||
resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==}
|
||||
|
||||
/prebuild-install/7.1.1:
|
||||
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -977,8 +486,8 @@ packages:
|
||||
supports-preserve-symlinks-flag: 1.0.0
|
||||
dev: true
|
||||
|
||||
/rollup/3.9.1:
|
||||
resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==}
|
||||
/rollup/3.10.0:
|
||||
resolution: {integrity: sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==}
|
||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
@@ -989,11 +498,6 @@ packages:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
dev: false
|
||||
|
||||
/semver/6.3.0:
|
||||
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/semver/7.3.8:
|
||||
resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -1051,13 +555,6 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/supports-color/5.5.0:
|
||||
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
|
||||
engines: {node: '>=4'}
|
||||
dependencies:
|
||||
has-flag: 3.0.0
|
||||
dev: true
|
||||
|
||||
/supports-preserve-symlinks-flag/1.0.0:
|
||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -1083,28 +580,12 @@ packages:
|
||||
readable-stream: 3.6.0
|
||||
dev: false
|
||||
|
||||
/to-fast-properties/2.0.0:
|
||||
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
|
||||
engines: {node: '>=4'}
|
||||
dev: true
|
||||
|
||||
/tunnel-agent/0.6.0:
|
||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
dev: false
|
||||
|
||||
/update-browserslist-db/1.0.10_browserslist@4.21.4:
|
||||
resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
dependencies:
|
||||
browserslist: 4.21.4
|
||||
escalade: 3.1.1
|
||||
picocolors: 1.0.0
|
||||
dev: true
|
||||
|
||||
/util-deprecate/1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
dev: false
|
||||
@@ -1134,10 +615,10 @@ packages:
|
||||
terser:
|
||||
optional: true
|
||||
dependencies:
|
||||
esbuild: 0.16.13
|
||||
postcss: 8.4.20
|
||||
esbuild: 0.16.17
|
||||
postcss: 8.4.21
|
||||
resolve: 1.22.1
|
||||
rollup: 3.9.1
|
||||
rollup: 3.10.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
@@ -1146,10 +627,6 @@ packages:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
dev: false
|
||||
|
||||
/yallist/3.1.1:
|
||||
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
||||
dev: true
|
||||
|
||||
/yallist/4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
dev: false
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 MiB |
BIN
public/assets/char_113_cqbw_epoque#7.png
Normal file
BIN
public/assets/char_113_cqbw_epoque#7.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 MiB |
BIN
public/assets/logo_babel.png
Executable file
BIN
public/assets/logo_babel.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 58 KiB |
18
src/app.css
18
src/app.css
@@ -1,18 +0,0 @@
|
||||
#widget-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.logo {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.invert-filter {
|
||||
filter: invert(1);
|
||||
opacity: 0.3;
|
||||
}
|
||||
46
src/app.jsx
46
src/app.jsx
@@ -1,46 +0,0 @@
|
||||
import { useState, useEffect, useRef } from 'preact/hooks'
|
||||
import '@/app.css'
|
||||
import '@/libs/wallpaper_engine'
|
||||
import check_web_gl from '@/libs/check_web_gl'
|
||||
import Player from '@/components/player'
|
||||
import Fallback from '@/components/fallback'
|
||||
import Settings from '@/components/settings'
|
||||
|
||||
export function App() {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const isSupportWebGL = check_web_gl()
|
||||
const logoRef = useRef(null);
|
||||
const [spinePlayer, setSpinePlayer] = useState(null);
|
||||
|
||||
const [showControls, setShowControls] = useState(params.has("controls"));
|
||||
const [showSettings, setShowSettings] = useState(params.has("settings") || import.meta.env.MODE === 'development');
|
||||
|
||||
useEffect(() => {
|
||||
document.title = import.meta.env.VITE_TITLE
|
||||
console.log("All resources are extracted from Arknights. Github: https://github.com/Halyul/aklive2d")
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<img src={`./assets/${import.meta.env.VITE_LOGO_FILENAME}.png `} class="logo invert-filter" id="logo" alt="operator logo" ref={logoRef} width={16} />
|
||||
<Settings
|
||||
spinePlayer={spinePlayer}
|
||||
setShowSettings={setShowSettings}
|
||||
hidden={!showSettings}
|
||||
logoEl={logoRef.current}
|
||||
/>
|
||||
<div id="widget-wrapper">
|
||||
{
|
||||
!isSupportWebGL ? (
|
||||
<Fallback />
|
||||
) : (
|
||||
<Player
|
||||
showControls={showControls}
|
||||
setSpinePlayer={setSpinePlayer}
|
||||
/>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
16
src/components/fallback.js
Normal file
16
src/components/fallback.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import '@/components/fallback.css'
|
||||
|
||||
export default function (el) {
|
||||
el.hidden = false;
|
||||
alert('WebGL is unavailable. Fallback image will be used.');
|
||||
const calculateScale = (width, height) => {
|
||||
return { x: window.innerWidth / width, y: window.innerHeight / height };
|
||||
}
|
||||
const fallback = () => {
|
||||
const scale = calculateScale(import.meta.env.VITE_IMAGE_WIDTH, import.meta.env.VITE_IMAGE_HEIGHT);
|
||||
el.style.width = import.meta.env.VITE_IMAGE_WIDTH * (scale.x > scale.y ? scale.y : scale.x) + "px";
|
||||
el.style.height = import.meta.env.VITE_IMAGE_HEIGHT * (scale.x > scale.y ? scale.y : scale.x) + "px";
|
||||
}
|
||||
fallback();
|
||||
window.addEventListener('resize', fallback, true);
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
import { useRef, useEffect } from 'preact/hooks'
|
||||
import '@/components/fallback.css'
|
||||
|
||||
export default function Fallback() {
|
||||
const fallbackRef = useRef(null)
|
||||
|
||||
useEffect(() => {
|
||||
alert('WebGL is unavailable. Fallback image will be used.');
|
||||
const calculateScale = (width, height) => {
|
||||
return { x: window.innerWidth / width, y: window.innerHeight / height };
|
||||
}
|
||||
const fallback = () => {
|
||||
const scale = calculateScale(import.meta.env.VITE_IMAGE_WIDTH, import.meta.env.VITE_IMAGE_HEIGHT);
|
||||
fallbackRef.current.style.width = import.meta.env.VITE_IMAGE_WIDTH * (scale.x > scale.y ? scale.y : scale.x) + "px";
|
||||
fallbackRef.current.style.height = import.meta.env.VITE_IMAGE_HEIGHT * (scale.x > scale.y ? scale.y : scale.x) + "px";
|
||||
}
|
||||
fallback();
|
||||
window.addEventListener('resize', fallback, true);
|
||||
return () => window.removeEventListener('resize', fallback, true);
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div id="fallback"
|
||||
style={{
|
||||
backgroundImage: `url(./assets/${import.meta.env.VITE_FALLBACK_FILENAME}.png)`,
|
||||
}}
|
||||
ref={fallbackRef}
|
||||
/>
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#container {
|
||||
#player {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
60
src/components/player.js
Normal file
60
src/components/player.js
Normal file
@@ -0,0 +1,60 @@
|
||||
import '@/libs/spine-player.css'
|
||||
import spine from '@/libs/spine-player'
|
||||
import assets from '#'
|
||||
import '@/components/player.css'
|
||||
|
||||
const showControls = (new URLSearchParams(window.location.search)).has("controls")
|
||||
let resetTime = window.performance.now();
|
||||
let isPlayingInteract = false;
|
||||
|
||||
export default function spinePlayer(el) {
|
||||
el.hidden = false
|
||||
return new spine.SpinePlayer(el, {
|
||||
skelUrl: `./assets/${import.meta.env.VITE_FILENAME}.skel`,
|
||||
atlasUrl: `./assets/${import.meta.env.VITE_FILENAME}.atlas`,
|
||||
rawDataURIs: assets,
|
||||
animation: "Idle",
|
||||
premultipliedAlpha: true,
|
||||
alpha: true,
|
||||
backgroundColor: "#00000000",
|
||||
viewport: {
|
||||
debugRender: false,
|
||||
padLeft: `${import.meta.env.VITE_VIEWPORT_LEFT}%`,
|
||||
padRight: `${import.meta.env.VITE_VIEWPORT_RIGHT}%`,
|
||||
padTop: `${import.meta.env.VITE_VIEWPORT_TOP}%`,
|
||||
padBottom: `${import.meta.env.VITE_VIEWPORT_BOTTOM}%`,
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
showControls: showControls,
|
||||
touch: showControls,
|
||||
fps: 60,
|
||||
defaultMix: 0,
|
||||
success: function (widget) {
|
||||
widget.animationState.addListener({
|
||||
end: (e) => {
|
||||
if (e.animation.name == "Interact") {
|
||||
isPlayingInteract = false;
|
||||
}
|
||||
},
|
||||
complete: (e) => {
|
||||
if (window.performance.now() - resetTime >= 8 * 1000 && Math.random() < 0.3) {
|
||||
resetTime = window.performance.now();
|
||||
let entry = widget.animationState.setAnimation(0, "Special", false, 0);
|
||||
entry.mixDuration = 0.3;
|
||||
widget.animationState.addAnimation(0, "Idle", true, 0);
|
||||
}
|
||||
},
|
||||
});
|
||||
widget.canvas.onclick = function () {
|
||||
if (isPlayingInteract) {
|
||||
return;
|
||||
}
|
||||
isPlayingInteract = true;
|
||||
let entry = widget.animationState.setAnimation(0, "Interact", false, 0);
|
||||
entry.mixDuration = 0.3;
|
||||
widget.animationState.addAnimation(0, "Idle", true, 0);
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
import { useRef, useEffect } from 'preact/hooks'
|
||||
import '@/libs/spine-player.css'
|
||||
import spine from '@/libs/spine-player'
|
||||
import assets from '#'
|
||||
import '@/components/player.css'
|
||||
|
||||
export default function Player({ showControls, setSpinePlayer }) {
|
||||
const spineRef = useRef(null)
|
||||
let resetTime = window.performance.now();
|
||||
let isPlayingInteract = false;
|
||||
|
||||
useEffect(() => {
|
||||
document.title = "Operator name";
|
||||
if (spineRef.current?.children.length == 0) {
|
||||
setSpinePlayer(new spine.SpinePlayer(spineRef.current, {
|
||||
skelUrl: `./assets/${import.meta.env.VITE_FILENAME}.skel`,
|
||||
atlasUrl: `./assets/${import.meta.env.VITE_FILENAME}.atlas`,
|
||||
rawDataURIs: assets,
|
||||
animation: "Idle",
|
||||
premultipliedAlpha: true,
|
||||
alpha: true,
|
||||
backgroundColor: "#00000000",
|
||||
viewport: {
|
||||
debugRender: false,
|
||||
padLeft: `${import.meta.env.VITE_VIEWPORT_LEFT}%`,
|
||||
padRight: `${import.meta.env.VITE_VIEWPORT_RIGHT}%`,
|
||||
padTop: `${import.meta.env.VITE_VIEWPORT_TOP}%`,
|
||||
padBottom: `${import.meta.env.VITE_VIEWPORT_BOTTOM}%`,
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
showControls: showControls,
|
||||
touch: showControls,
|
||||
fps: 60,
|
||||
defaultMix: 0,
|
||||
success: function (widget) {
|
||||
widget.animationState.addListener({
|
||||
end: (e) => {
|
||||
if (e.animation.name == "Interact") {
|
||||
isPlayingInteract = false;
|
||||
}
|
||||
},
|
||||
complete: (e) => {
|
||||
if (window.performance.now() - resetTime >= 8 * 1000 && Math.random() < 0.3) {
|
||||
resetTime = window.performance.now();
|
||||
let entry = widget.animationState.setAnimation(0, "Special", false, 0);
|
||||
entry.mixDuration = 0.3;
|
||||
widget.animationState.addAnimation(0, "Idle", true, 0);
|
||||
}
|
||||
},
|
||||
});
|
||||
widget.canvas.onclick = function () {
|
||||
if (isPlayingInteract) {
|
||||
return;
|
||||
}
|
||||
isPlayingInteract = true;
|
||||
let entry = widget.animationState.setAnimation(0, "Interact", false, 0);
|
||||
entry.mixDuration = 0.3;
|
||||
widget.animationState.addAnimation(0, "Idle", true, 0);
|
||||
}
|
||||
},
|
||||
}))
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div id="container" ref={spineRef}></div>
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
.website-settings {
|
||||
#settings {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
|
||||
408
src/components/settings.js
Normal file
408
src/components/settings.js
Normal file
@@ -0,0 +1,408 @@
|
||||
import '@/components/settings.css'
|
||||
|
||||
const getPercentage = (value) => parseInt(value.replace("%", ""))
|
||||
|
||||
export default class Settings {
|
||||
#el
|
||||
#logoEl
|
||||
#defaultLogoImage
|
||||
#defaultFps = 60
|
||||
#defaultRatio = 61.8
|
||||
#defaultOpacity = 30
|
||||
#defaulthideLogo = false
|
||||
#defaultBackgroundImage = getComputedStyle(document.body).backgroundImage
|
||||
#defaultInvertFilter = import.meta.env.VITE_INVERT_FILTER === "true"
|
||||
#defaultPadLeft = getPercentage(`${import.meta.env.VITE_VIEWPORT_LEFT}%`)
|
||||
#defaultPadRight = getPercentage(`${import.meta.env.VITE_VIEWPORT_RIGHT}%`)
|
||||
#defaultPadTop = getPercentage(`${import.meta.env.VITE_VIEWPORT_TOP}%`)
|
||||
#defaultPadBottom = getPercentage(`${import.meta.env.VITE_VIEWPORT_BOTTOM}%`)
|
||||
#defaultViewport = {
|
||||
debugRender: false,
|
||||
padLeft: `${this.#defaultPadLeft}%`,
|
||||
padRight: `${this.#defaultPadRight}%`,
|
||||
padTop: `${this.#defaultPadTop}%`,
|
||||
padBottom: `${this.#defaultPadBottom}%`,
|
||||
x: 0,
|
||||
y: 0,
|
||||
}
|
||||
#hidden = !((new URLSearchParams(window.location.search)).has("settings") || import.meta.env.MODE === 'development')
|
||||
#fps = this.#defaultFps
|
||||
#ratio = this.#defaultRatio
|
||||
#opacity = this.#defaultOpacity
|
||||
#padLeft = this.#defaultPadLeft
|
||||
#padRight = this.#defaultPadRight
|
||||
#padTop = this.#defaultPadTop
|
||||
#padBottom = this.#defaultPadBottom
|
||||
#hideLogo = this.#defaulthideLogo
|
||||
#hidePositionSettings = true
|
||||
#backgroundClearDisabled = true
|
||||
#logoClearDisabled = true
|
||||
#isPlaying = true
|
||||
|
||||
constructor(el, logoEl) {
|
||||
this.#el = el
|
||||
this.#logoEl = logoEl
|
||||
this.spinePlayer = null
|
||||
this.#defaultLogoImage = this.#logoEl.src
|
||||
this.#init()
|
||||
}
|
||||
|
||||
#init() {
|
||||
const _this = this
|
||||
window.addEventListener("contextmenu", e => e.preventDefault());
|
||||
document.addEventListener("gesturestart", e => e.preventDefault());
|
||||
|
||||
const resize = () => {
|
||||
_this.#resize(_this)
|
||||
}
|
||||
window.addEventListener("resize", resize, true);
|
||||
resize()
|
||||
this.#setLogoInvertFilter(this.#defaultInvertFilter)
|
||||
this.setLogoOpacity(this.#defaultOpacity)
|
||||
|
||||
this.#insertHTML()
|
||||
}
|
||||
|
||||
setFPS(value) {
|
||||
this.#fps = value
|
||||
console.log(typeof value)
|
||||
this.spinePlayer.setFps(value)
|
||||
}
|
||||
|
||||
setLogoDisplay(flag) {
|
||||
this.#hideLogo = flag
|
||||
this.#logoEl.hidden = flag;
|
||||
}
|
||||
|
||||
#resize(_this, value) {
|
||||
_this = _this || this
|
||||
_this.#logoEl.width = window.innerWidth / 2 * (value || _this.#ratio) / 100
|
||||
}
|
||||
|
||||
#setLogoInvertFilter(flag) {
|
||||
if (!flag) {
|
||||
this.#logoEl.style.filter = "invert(0)"
|
||||
} else {
|
||||
this.#logoEl.style.filter = "invert(1)"
|
||||
}
|
||||
}
|
||||
|
||||
setLogo(src, invert_filter) {
|
||||
this.#logoEl.src = src
|
||||
this.#resize()
|
||||
this.#setLogoInvertFilter(invert_filter)
|
||||
}
|
||||
|
||||
#readFile(e, onload, callback) {
|
||||
const file = e.target.files[0]
|
||||
if (!file) return
|
||||
const reader = new FileReader()
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = readerEvent => onload(readerEvent)
|
||||
callback()
|
||||
}
|
||||
|
||||
setLogoImage(e) {
|
||||
this.#readFile(
|
||||
e,
|
||||
(readerEvent) => {
|
||||
const content = readerEvent.target.result;
|
||||
this.setLogo(content, false)
|
||||
},
|
||||
() => document.getElementById("logo_image_clear").disabled = false
|
||||
)
|
||||
}
|
||||
|
||||
resetLogoImage() {
|
||||
this.setLogo(this.#defaultLogoImage, this.#defaultInvertFilter)
|
||||
document.getElementById("logo_image_clear").disabled = true
|
||||
}
|
||||
|
||||
setLogoRatio(value) {
|
||||
this.#ratio = value
|
||||
this.#resize(this, value)
|
||||
}
|
||||
|
||||
setLogoOpacity(value) {
|
||||
this.#logoEl.style.opacity = value / 100
|
||||
this.#opacity = value
|
||||
}
|
||||
|
||||
setBackgoundImage(v) {
|
||||
document.body.style.backgroundImage = v
|
||||
}
|
||||
|
||||
setBackground(e) {
|
||||
this.#readFile(
|
||||
e,
|
||||
(readerEvent) => {
|
||||
const content = readerEvent.target.result;
|
||||
this.setBackgoundImage(`url("${content}")`)
|
||||
},
|
||||
() => document.getElementById("background_image_clear").disabled = false
|
||||
)
|
||||
}
|
||||
|
||||
resetBackground() {
|
||||
this.setBackgoundImage(this.#defaultBackgroundImage)
|
||||
document.getElementById("background_image_clear").disabled = true
|
||||
}
|
||||
|
||||
positionPadding(key, value) {
|
||||
switch (key) {
|
||||
case "left":
|
||||
this.#padLeft = value
|
||||
this.spinePlayer.updateViewport({
|
||||
...this.#defaultViewport,
|
||||
padLeft: `${value}%`,
|
||||
})
|
||||
break;
|
||||
case "right":
|
||||
this.#padRight = value
|
||||
this.spinePlayer.updateViewport({
|
||||
...this.#defaultViewport,
|
||||
padRight: `${value}%`,
|
||||
})
|
||||
break;
|
||||
case "top":
|
||||
this.#padTop = value
|
||||
this.spinePlayer.updateViewport({
|
||||
...this.#defaultViewport,
|
||||
padTop: `${value}%`,
|
||||
})
|
||||
break;
|
||||
case "bottom":
|
||||
this.#padBottom = value
|
||||
this.spinePlayer.updateViewport({
|
||||
...this.#defaultViewport,
|
||||
padBottom: `${value}%`,
|
||||
})
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
positionReset() {
|
||||
this.#padLeft = this.#defaultPadLeft
|
||||
this.#padRight = this.#defaultPadRight
|
||||
this.#padTop = this.#defaultPadTop
|
||||
this.#padBottom = this.#defaultPadBottom
|
||||
this.spinePlayer.updateViewport(this.#defaultViewport)
|
||||
document.getElementById("position_padding_left_slider").value = this.#defaultPadLeft
|
||||
document.getElementById("position_padding_left_input").value = this.#defaultPadLeft
|
||||
document.getElementById("position_padding_right_slider").value = this.#defaultPadRight
|
||||
document.getElementById("position_padding_right_input").value = this.#defaultPadRight
|
||||
document.getElementById("position_padding_top_slider").value = this.#defaultPadTop
|
||||
document.getElementById("position_padding_top_input").value = this.#defaultPadTop
|
||||
document.getElementById("position_padding_bottom_slider").value = this.#defaultPadBottom
|
||||
document.getElementById("position_padding_bottom_input").value = this.#defaultPadBottom
|
||||
}
|
||||
|
||||
open() {
|
||||
this.#el.hidden = false;
|
||||
}
|
||||
|
||||
close() {
|
||||
this.#el.hidden = true;
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.positionReset()
|
||||
this.setLogoRatio(this.#defaultRatio)
|
||||
document.getElementById("logo_ratio_slider").value = this.#defaultRatio
|
||||
document.getElementById("logo_ratio_input").value = this.#defaultRatio
|
||||
this.setLogoOpacity(this.#defaultOpacity)
|
||||
document.getElementById("logo_opacity_slider").value = this.#defaultOpacity
|
||||
document.getElementById("logo_opacity_input").value = this.#defaultOpacity
|
||||
this.resetLogoImage()
|
||||
this.resetBackground()
|
||||
this.setLogoDisplay(this.#defaulthideLogo)
|
||||
this.setFPS(this.#defaultFps)
|
||||
document.getElementById("fps_slider").value = this.#defaultFps
|
||||
document.getElementById("fps_input").value = this.#defaultFps
|
||||
this.spinePlayer.play()
|
||||
}
|
||||
|
||||
#insertHTML() {
|
||||
this.#el.innerHTML = `
|
||||
<div ${this.#hidden && "hidden"}>
|
||||
<div>
|
||||
<label for="fps">FPS</label>
|
||||
<input type="range" min="1" max="60" value="${this.#fps}" step="1" id="fps_slider"/>
|
||||
<input type="number" id="fps_input" min="1" max="60" name="fps" value="${this.#fps}" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="operator_logo">Operator Logo</label>
|
||||
<input type="checkbox" id="operator_logo" name="operator_logo" checked data-checked="true"/>
|
||||
<div id="operator_logo_realted">
|
||||
<div>
|
||||
<label for="logo_image">Logo Image (Store Locally)</label>
|
||||
<input type="file" id="logo_image" />
|
||||
<button type="button" id="logo_image_clear" disabled>Clear</button>
|
||||
</div>
|
||||
<div>
|
||||
<label for="logo_ratio">Logo Ratio</label>
|
||||
<input type="range" min="0" max="100" step="0.1" id="logo_ratio_slider" value="${this.#ratio}" />
|
||||
<input type="number" id="logo_ratio_input" name="logo_ratio" value="${this.#ratio}" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="logo_opacity">Logo Opacity</label>
|
||||
<input type="range" min="0" max="100" data-css-class="logo" step="1" id="logo_opacity_slider" value="${this.#opacity}" />
|
||||
<input type="number" id="logo_opacity_input" name="logo_opacity" value="${this.#opacity}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="background_image">Background Image (Store Locally)</label>
|
||||
<input type="file" id="background_image"/>
|
||||
<button type="button" disabled id="background_image_clear" disabled>Clear</button>
|
||||
</div>
|
||||
<div>
|
||||
<label for="position">Position</label>
|
||||
<input type="checkbox" id="position" name="position" />
|
||||
<div id="position_realted" hidden>
|
||||
<div>
|
||||
<label for="position_padding_left">Padding Left</label>
|
||||
<input type="range" min="-100" max="100" id="position_padding_left_slider" value="${this.#padLeft}" />
|
||||
<input type="number" id="position_padding_left_input" name="position_padding_left" value="${this.#padLeft}" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="position_padding_right">Padding Right</label>
|
||||
<input type="range" min="-100" max="100" id="position_padding_right_slider" value="${this.padRight}" />
|
||||
<input type="number" id="position_padding_right_input" name="position_padding_right" value="${this.#padRight}" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="position_padding_top">Padding Top</label>
|
||||
<input type="range" min="-100" max="100" id="position_padding_top_slider" value="${this.#padTop}" />
|
||||
<input type="number" id="position_padding_top_input" name="position_padding_top" value="${this.#padTop}" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="position_padding_bottom">Padding Bottom</label>
|
||||
<input type="range" min="-100" max="100" id="position_padding_bottom_slider" value="${this.#padBottom}" />
|
||||
<input type="number" id="position_padding_bottom_input" name="position_padding_bottom" value="${this.#padBottom}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button type="button" id="settings_play" disabled>Play</button>
|
||||
<button type="button" id="settings_pause">Pause</button>
|
||||
<button type="button" id="settings_reset">Reset</button>
|
||||
<button type="button" id="settings_close">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
this.#addEventListeners()
|
||||
}
|
||||
|
||||
#sync(source, targetID) {
|
||||
document.getElementById(targetID).value = source.value;
|
||||
}
|
||||
|
||||
#showRelated(e, relatedSettingsID) {
|
||||
const eRelatedSettings = document.getElementById(relatedSettingsID)
|
||||
if (e.checked) {
|
||||
eRelatedSettings.hidden = false;
|
||||
} else {
|
||||
eRelatedSettings.hidden = true;
|
||||
}
|
||||
};
|
||||
|
||||
#addEventListeners() {
|
||||
const _this = this;
|
||||
|
||||
document.getElementById("fps_slider").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "fps_input");
|
||||
_this.setFPS(e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("fps_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "fps_slider");
|
||||
_this.setFPS(e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("operator_logo").addEventListener("click", e => {
|
||||
_this.#showRelated(e.currentTarget, "operator_logo_realted");
|
||||
_this.setLogoDisplay(!e.currentTarget.checked)
|
||||
})
|
||||
|
||||
document.getElementById("logo_image").addEventListener("change", e => _this.setLogoImage(e))
|
||||
document.getElementById("logo_image_clear").addEventListener("click", e => this.resetLogoImage())
|
||||
|
||||
document.getElementById("logo_ratio_slider").addEventListener("input", e => {
|
||||
_this.#sync(e.currentTarget, "logo_ratio_input");
|
||||
_this.setLogoRatio(e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("logo_ratio_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "logo_ratio_slider");
|
||||
_this.setLogoRatio(e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("logo_opacity_slider").addEventListener("input", e => {
|
||||
_this.#sync(e.currentTarget, "logo_opacity_input");
|
||||
_this.setLogoOpacity(e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("logo_opacity_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "logo_opacity_slider");
|
||||
_this.setLogoOpacity(e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("background_image").addEventListener("change", e => _this.setBackground(e))
|
||||
document.getElementById("background_image_clear").addEventListener("click", e => _this.resetBackground())
|
||||
|
||||
document.getElementById("position").addEventListener("click", e => {
|
||||
_this.#showRelated(e.currentTarget, "position_realted");
|
||||
if (!e.currentTarget.checked) _this.positionReset();
|
||||
})
|
||||
|
||||
document.getElementById("position_padding_left_slider").addEventListener("input", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_left_input");
|
||||
_this.positionPadding("left", e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("position_padding_left_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_left_slider");
|
||||
_this.positionPadding("left", e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("position_padding_right_slider").addEventListener("input", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_right_input");
|
||||
_this.positionPadding("right", e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("position_padding_right_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_right_slider");
|
||||
_this.positionPadding("right", e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("position_padding_top_slider").addEventListener("input", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_top_input");
|
||||
_this.positionPadding("top", e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("position_padding_top_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_top_slider");
|
||||
_this.positionPadding("top", e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("position_padding_bottom_slider").addEventListener("input", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_bottom_input");
|
||||
_this.positionPadding("bottom", e.currentTarget.value);
|
||||
})
|
||||
document.getElementById("position_padding_bottom_input").addEventListener("change", e => {
|
||||
_this.#sync(e.currentTarget, "position_padding_bottom_slider");
|
||||
_this.positionPadding("bottom", e.currentTarget.value);
|
||||
})
|
||||
|
||||
document.getElementById("settings_play").addEventListener("click", e => {
|
||||
this.spinePlayer.play();
|
||||
e.currentTarget.disabled = true;
|
||||
document.getElementById("settings_pause").disabled = false;
|
||||
})
|
||||
document.getElementById("settings_pause").addEventListener("click", e => {
|
||||
this.spinePlayer.pause();
|
||||
e.currentTarget.disabled = true;
|
||||
document.getElementById("settings_play").disabled = false;
|
||||
})
|
||||
document.getElementById("settings_reset").addEventListener("click", e => {
|
||||
_this.reset();
|
||||
})
|
||||
document.getElementById("settings_close").addEventListener("click", e => {
|
||||
_this.close();
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,499 +0,0 @@
|
||||
import { useState, useEffect } from 'preact/hooks'
|
||||
import '@/components/settings.css'
|
||||
import { subscribe, unsubscribe, publish } from '@/libs/events'
|
||||
import '@/libs/setting_hooks'
|
||||
|
||||
const getPercentage = (value) => parseInt(value.replace("%", ""))
|
||||
const defaultBackgroundImage = getComputedStyle(document.body).backgroundImage
|
||||
|
||||
export default function Settings({
|
||||
spinePlayer, setShowSettings, hidden, logoEl
|
||||
}) {
|
||||
const defaultFps = 60
|
||||
const defaultRatio = 61.8
|
||||
const defaultOpacity = 30
|
||||
const defaultShowLogo = false
|
||||
const defaultInvertFilter = import.meta.env.VITE_INVERT_FILTER === "true"
|
||||
const [defaultLogoImage, setDefaultLogoImage] = useState(null)
|
||||
const defaultPadLeft = getPercentage(`${import.meta.env.VITE_VIEWPORT_LEFT}%`)
|
||||
const defaultPadRight = getPercentage(`${import.meta.env.VITE_VIEWPORT_RIGHT}%`)
|
||||
const defaultPadTop = getPercentage(`${import.meta.env.VITE_VIEWPORT_TOP}%`)
|
||||
const defaultPadBottom = getPercentage(`${import.meta.env.VITE_VIEWPORT_BOTTOM}%`)
|
||||
const defaultViewport = {
|
||||
debugRender: false,
|
||||
padLeft: `${defaultPadLeft}%`,
|
||||
padRight: `${defaultPadRight}%`,
|
||||
padTop: `${defaultPadTop}%`,
|
||||
padBottom: `${defaultPadBottom}%`,
|
||||
x: 0,
|
||||
y: 0,
|
||||
}
|
||||
|
||||
const [fps, setFps] = useState(defaultFps)
|
||||
const [ratio, setRatio] = useState(defaultRatio)
|
||||
const [opacity, setOpacity] = useState(defaultOpacity)
|
||||
const [padLeft, setPadLeft] = useState(defaultPadLeft)
|
||||
const [padRight, setPadRight] = useState(defaultPadRight)
|
||||
const [padTop, setPadTop] = useState(defaultPadTop)
|
||||
const [padBottom, setPadBottom] = useState(defaultPadBottom)
|
||||
|
||||
const [showLogo, setShowLogo] = useState(defaultShowLogo)
|
||||
const [hidePositionSettings, setHidePositionSettings] = useState(true)
|
||||
const [backgroundClearDisabled, setBackgroundClearDisabled] = useState(true)
|
||||
const [logoClearDisabled, setLogoClearDisabled] = useState(true)
|
||||
|
||||
const [isPlaying, setIsPlaying] = useState(true)
|
||||
|
||||
const [eventFPSDelay, setEventFPSDelay] = useState(-1)
|
||||
const [eventLogoDelay, setEventLogoDelay] = useState(null)
|
||||
const [eventRatioDelay, setEventRatioDelay] = useState(-1)
|
||||
const [eventOpacityDelay, setEventOpacityDelay] = useState(-1)
|
||||
const [eventImageDelay, setEventImageDelay] = useState(null)
|
||||
const [eventPadLeftDelay, setEventPadLeftDelay] = useState(-1)
|
||||
const [eventPadRightDelay, setEventPadRightDelay] = useState(-1)
|
||||
const [eventPadTopDelay, setEventPadTopDelay] = useState(-1)
|
||||
const [eventPadBottomDelay, setEventPadBottomDelay] = useState(-1)
|
||||
const [eventPositionResetDelay, setEventPositionResetDelay] = useState(null)
|
||||
const [eventLogoResetDelay, setEventLogoResetDelay] = useState(null)
|
||||
|
||||
useEffect(() => {
|
||||
if (spinePlayer === null) return;
|
||||
if (eventFPSDelay !== -1) {
|
||||
setFPS(eventFPSDelay)
|
||||
setEventFPSDelay(-1)
|
||||
}
|
||||
if (eventPadLeftDelay !== -1) {
|
||||
positionPadding("left", eventPadLeftDelay)
|
||||
setEventPadLeftDelay(-1)
|
||||
}
|
||||
if (eventPadRightDelay !== -1) {
|
||||
positionPadding("right", eventPadRightDelay)
|
||||
setEventPadRightDelay(-1)
|
||||
}
|
||||
if (eventPadTopDelay !== -1) {
|
||||
positionPadding("top", eventPadTopDelay)
|
||||
setEventPadTopDelay(-1)
|
||||
}
|
||||
if (eventPadBottomDelay !== -1) {
|
||||
positionPadding("bottom", eventPadBottomDelay)
|
||||
setEventPadBottomDelay(-1)
|
||||
}
|
||||
if (eventPositionResetDelay) {
|
||||
positionReset()
|
||||
setEventPositionResetDelay(null)
|
||||
}
|
||||
}, [spinePlayer])
|
||||
|
||||
useEffect(() => {
|
||||
if (logoEl === null) return;
|
||||
if (eventLogoDelay !== null) {
|
||||
setLogoDisplay(eventLogoDelay)
|
||||
setEventLogoDelay(null)
|
||||
}
|
||||
if (eventRatioDelay !== -1) {
|
||||
setLogoRatio(eventRatioDelay)
|
||||
setEventRatioDelay(-1)
|
||||
}
|
||||
if (eventOpacityDelay !== -1) {
|
||||
setLogoOpacity(eventOpacityDelay)
|
||||
setEventOpacityDelay(-1)
|
||||
}
|
||||
if (eventImageDelay !== null) {
|
||||
setLogo(eventImageDelay)
|
||||
setEventImageDelay(null)
|
||||
}
|
||||
if (eventLogoResetDelay) {
|
||||
resetLogoImage()
|
||||
setEventLogoResetDelay(null)
|
||||
}
|
||||
}, [logoEl])
|
||||
|
||||
const setFPS = (value) => {
|
||||
setFps(value)
|
||||
spinePlayer.setFps(value)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
if (spinePlayer === null) {
|
||||
setEventFPSDelay(e.detail)
|
||||
return
|
||||
}
|
||||
setFPS(e.detail)
|
||||
}
|
||||
subscribe("settings:fps", handleListener)
|
||||
return () => unsubscribe("settings:fps", handleListener)
|
||||
}, [spinePlayer])
|
||||
|
||||
const setLogoDisplay = (flag) => {
|
||||
setShowLogo(flag)
|
||||
logoEl.hidden = flag;
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
if (logoEl === null) {
|
||||
setEventLogoDelay(e.detail)
|
||||
return
|
||||
}
|
||||
setLogoDisplay(e.detail)
|
||||
}
|
||||
subscribe("settings:logo", handleListener)
|
||||
return () => unsubscribe("settings:logo", handleListener)
|
||||
}, [logoEl])
|
||||
|
||||
const resize = (value) => {
|
||||
logoEl.width = window.innerWidth / 2 * (value || ratio) / 100
|
||||
}
|
||||
|
||||
const setLogo = (src, invert_filter) => {
|
||||
logoEl.src = src
|
||||
resize()
|
||||
setLogoInvertFilter(invert_filter)
|
||||
}
|
||||
|
||||
const readFile = (e, onload, callback) => {
|
||||
const file = e.target.files[0]
|
||||
if (!file) return
|
||||
const reader = new FileReader()
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = readerEvent => onload(readerEvent)
|
||||
callback()
|
||||
}
|
||||
|
||||
const setLogoImage = (e) => {
|
||||
readFile(
|
||||
e,
|
||||
(readerEvent) => {
|
||||
const content = readerEvent.target.result;
|
||||
setLogo(content, false)
|
||||
},
|
||||
() => setLogoClearDisabled(false)
|
||||
)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
if (logoEl === null) {
|
||||
setEventImageDelay(e.detail)
|
||||
return
|
||||
}
|
||||
setLogo(e.detail)
|
||||
}
|
||||
subscribe("settings:image:set", handleListener)
|
||||
return () => unsubscribe("settings:image:set", handleListener)
|
||||
}, [logoEl])
|
||||
|
||||
const resetLogoImage = () => {
|
||||
setLogo(defaultLogoImage, defaultInvertFilter)
|
||||
setLogoClearDisabled(true)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = () => {
|
||||
if (logoEl === null) {
|
||||
setEventLogoResetDelay(true)
|
||||
return
|
||||
}
|
||||
resetLogoImage()
|
||||
}
|
||||
subscribe("settings:image:reset", handleListener)
|
||||
return () => unsubscribe("settings:image:reset", handleListener)
|
||||
}, [logoEl])
|
||||
|
||||
const setLogoRatio = (value) => {
|
||||
setRatio(value)
|
||||
resize(value)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
if (logoEl === null) {
|
||||
setEventRatioDelay(e.detail)
|
||||
return
|
||||
}
|
||||
setLogoRatio(e.detail)
|
||||
}
|
||||
subscribe("settings:ratio", handleListener)
|
||||
return () => unsubscribe("settings:ratio", handleListener)
|
||||
}, [logoEl])
|
||||
|
||||
const setLogoOpacity = (value) => {
|
||||
setOpacity(value)
|
||||
logoEl.style.opacity = value / 100
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
if (logoEl === null) {
|
||||
setEventOpacityDelay(e.detail)
|
||||
return
|
||||
}
|
||||
setLogoOpacity(e.detail)
|
||||
}
|
||||
subscribe("settings:opacity", handleListener)
|
||||
return () => unsubscribe("settings:opacity", handleListener)
|
||||
}, [logoEl])
|
||||
|
||||
const setLogoInvertFilter = (flag) => {
|
||||
if (!flag) {
|
||||
logoEl.style.filter = "invert(0)"
|
||||
} else {
|
||||
logoEl.style.filter = "invert(1)"
|
||||
}
|
||||
}
|
||||
|
||||
const setBackgoundImage = (v) => {
|
||||
document.body.style.backgroundImage = v
|
||||
}
|
||||
|
||||
const setBackground = (e) => {
|
||||
readFile(
|
||||
e,
|
||||
(readerEvent) => {
|
||||
const content = readerEvent.target.result;
|
||||
setBackgoundImage(`url("${content}")`)
|
||||
},
|
||||
() => setBackgroundClearDisabled(false)
|
||||
)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
setBackgoundImage(`url("${e.detail}")`)
|
||||
}
|
||||
subscribe("settings:background:set", handleListener)
|
||||
return () => unsubscribe("settings:background:set", handleListener)
|
||||
}, [])
|
||||
|
||||
const resetBackground = () => {
|
||||
setBackgoundImage(defaultBackgroundImage)
|
||||
setBackgroundClearDisabled(true)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
subscribe("settings:background:reset", resetBackground)
|
||||
return () => unsubscribe("settings:background:reset", resetBackground)
|
||||
}, [])
|
||||
|
||||
const positionPadding = (key, value) => {
|
||||
switch (key) {
|
||||
case "left":
|
||||
setPadLeft(value)
|
||||
spinePlayer.updateViewport({
|
||||
...defaultViewport,
|
||||
padLeft: `${value}%`,
|
||||
})
|
||||
break;
|
||||
case "right":
|
||||
setPadRight(value)
|
||||
spinePlayer.updateViewport({
|
||||
...defaultViewport,
|
||||
padRight: `${value}%`,
|
||||
})
|
||||
break;
|
||||
case "top":
|
||||
setPadTop(value)
|
||||
spinePlayer.updateViewport({
|
||||
...defaultViewport,
|
||||
padTop: `${value}%`,
|
||||
})
|
||||
break;
|
||||
case "bottom":
|
||||
setPadBottom(value)
|
||||
spinePlayer.updateViewport({
|
||||
...defaultViewport,
|
||||
padBottom: `${value}%`,
|
||||
})
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = (e) => {
|
||||
if (spinePlayer === null) {
|
||||
switch (e.detail.key) {
|
||||
case "left":
|
||||
setEventPadLeftDelay(e.detail.value)
|
||||
break;
|
||||
case "right":
|
||||
setEventPadRightDelay(e.detail.value)
|
||||
break;
|
||||
case "top":
|
||||
setEventPadTopDelay(e.detail.value)
|
||||
break;
|
||||
case "bottom":
|
||||
setEventPadBottomDelay(e.detail.value)
|
||||
break;
|
||||
}
|
||||
return
|
||||
}
|
||||
positionPadding(e.detail.key, e.detail.value)
|
||||
}
|
||||
subscribe("settings:position:set", handleListener)
|
||||
return () => unsubscribe("settings:position:set", handleListener)
|
||||
}, [spinePlayer])
|
||||
|
||||
const positionReset = () => {
|
||||
setPadLeft(defaultPadLeft)
|
||||
setPadRight(defaultPadRight)
|
||||
setPadTop(defaultPadTop)
|
||||
setPadBottom(defaultPadBottom)
|
||||
spinePlayer.updateViewport(defaultViewport)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = () => {
|
||||
if (spinePlayer === null) {
|
||||
setEventPositionResetDelay(true)
|
||||
return
|
||||
}
|
||||
positionReset()
|
||||
}
|
||||
subscribe("settings:position:reset", handleListener)
|
||||
return () => unsubscribe("settings:position:reset", handleListener)
|
||||
}, [spinePlayer])
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = () => {
|
||||
setShowSettings(true)
|
||||
}
|
||||
subscribe("settings:open", handleListener)
|
||||
return () => unsubscribe("settings:open", handleListener)
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = () => {
|
||||
setShowSettings(false)
|
||||
}
|
||||
subscribe("settings:close", handleListener)
|
||||
return () => unsubscribe("settings:close", handleListener)
|
||||
}, [])
|
||||
|
||||
const settingsReset = () => {
|
||||
setFPS(defaultFps)
|
||||
setLogoDisplay(defaultShowLogo)
|
||||
resetLogoImage()
|
||||
setLogoRatio(defaultRatio)
|
||||
setLogoOpacity(defaultOpacity)
|
||||
resetBackground()
|
||||
positionReset()
|
||||
spinePlayer.play()
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const handleListener = () => {
|
||||
settingsReset()
|
||||
}
|
||||
subscribe("settings:reset", handleListener)
|
||||
return () => unsubscribe("settings:reset", handleListener)
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
if (logoEl) {
|
||||
resize()
|
||||
setLogoInvertFilter(defaultInvertFilter)
|
||||
setLogoOpacity(defaultOpacity)
|
||||
setDefaultLogoImage(logoEl.src)
|
||||
}
|
||||
}, [logoEl])
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("contextmenu", e => e.preventDefault());
|
||||
document.addEventListener("gesturestart", e => e.preventDefault());
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("resize", resize, true);
|
||||
return () => {
|
||||
window.removeEventListener("resize", resize, true);
|
||||
}
|
||||
}, [logoEl])
|
||||
|
||||
return (
|
||||
<div class="website-settings" hidden={hidden}>
|
||||
<div>
|
||||
<label for="fps">FPS</label>
|
||||
<input type="range" min="1" max="60" value={fps} step="1"
|
||||
onChange={(e) => setFPS(e.target.value)}
|
||||
/>
|
||||
<input type="number" id="fps_input" min="1" max="60" name="fps" value={fps}
|
||||
onChange={(e) => setFPS(e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="operator_logo">Operator Logo</label>
|
||||
<input type="checkbox" name="operator_logo" checked={!showLogo} onClick={(e) => setLogoDisplay(!e.target.checked)} />
|
||||
<div hidden={showLogo}>
|
||||
<div>
|
||||
<label for="logo_image">Logo Image (Store Locally)</label>
|
||||
<input type="file" onChange={(e) => setLogoImage(e)} />
|
||||
<button type="button" disabled={logoClearDisabled} onClick={() => resetLogoImage()}>Clear</button>
|
||||
</div>
|
||||
<div>
|
||||
<label for="logo_ratio">Logo Ratio</label>
|
||||
<input type="range" min="0" max="100" step="0.1" value={ratio} onChange={(e) => setLogoRatio(e.target.value)} />
|
||||
<input type="number" name="logo_ratio" value={ratio} onChange={(e) => setLogoRatio(e.target.value)} />
|
||||
</div>
|
||||
<div>
|
||||
<label for="logo_opacity">Logo Opacity</label>
|
||||
<input type="range" min="0" max="100" step="1" id="logo_opacity_slider" value={opacity} onChange={(e) => setLogoOpacity(e.target.value)} />
|
||||
<input type="number" id="logo_opacity_input" name="logo_opacity" value={opacity} onOpacity={(e) => setLogoOpacity(e.target.value)} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="background_image">Background Image (Store Locally)</label>
|
||||
<input type="file" onChange={(e) => setBackground(e)} />
|
||||
<button type="button" disabled={backgroundClearDisabled} onClick={() => resetBackground()}>Clear</button>
|
||||
</div>
|
||||
<div>
|
||||
<label for="position">Position</label>
|
||||
<input type="checkbox" name="position" checked={!hidePositionSettings} onClick={(e) => setHidePositionSettings(!e.target.checked)} />
|
||||
<div hidden={hidePositionSettings}>
|
||||
<div>
|
||||
<label for="position_padding_left">Padding Left</label>
|
||||
<input type="range" min="-100" max="100" value={padLeft} onChange={(e) => positionPadding("left", e.target.value)} />
|
||||
<input type="number" name="position_padding_left" value={padLeft} onChange={(e) => positionPadding("left", e.target.value)} />
|
||||
</div>
|
||||
<div>
|
||||
<label for="position_padding_right">Padding Right</label>
|
||||
<input type="range" min="-100" max="100" value={padRight} onChange={(e) => positionPadding("right", e.target.value)} />
|
||||
<input type="number" name="position_padding_right" value={padRight} onChange={(e) => positionPadding("right", e.target.value)} />
|
||||
</div>
|
||||
<div>
|
||||
<label for="position_padding_top">Padding Top</label>
|
||||
<input type="range" min="-100" max="100" value={padTop} onChange={(e) => positionPadding("top", e.target.value)} />
|
||||
<input type="number" name="position_padding_top" value={padTop} onChange={(e) => positionPadding("top", e.target.value)} />
|
||||
</div>
|
||||
<div>
|
||||
<label for="position_padding_bottom">Padding Bottom</label>
|
||||
<input type="range" min="-100" max="100" value={padBottom} onChange={(e) => positionPadding("bottom", e.target.value)} />
|
||||
<input type="number" name="position_padding_bottom" value={padBottom} onChange={(e) => positionPadding("bottom", e.target.value)} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button type="button" disabled={isPlaying}
|
||||
onClick={() => {
|
||||
spinePlayer.play()
|
||||
setIsPlaying(true)
|
||||
}}
|
||||
>Play
|
||||
</button>
|
||||
<button type="button" disabled={!isPlaying}
|
||||
onClick={() => {
|
||||
spinePlayer.pause()
|
||||
setIsPlaying(false)
|
||||
}}
|
||||
>
|
||||
Pause
|
||||
</button>
|
||||
<button type="button" onClick={() => settingsReset()}>
|
||||
Reset
|
||||
</button>
|
||||
<button type="button" onClick={() => setShowSettings(false)}>Close</button>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -8,7 +8,8 @@ html {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
body, #app {
|
||||
body,
|
||||
#app {
|
||||
margin: 0;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
@@ -17,4 +18,23 @@ body, #app {
|
||||
width: 100%;
|
||||
touch-action: none;
|
||||
-ms-touch-action: none;
|
||||
}
|
||||
|
||||
#widget-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.logo {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.invert-filter {
|
||||
filter: invert(1);
|
||||
opacity: 0.3;
|
||||
}
|
||||
30
src/index.js
Normal file
30
src/index.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import '@/index.css'
|
||||
import '@/libs/wallpaper_engine'
|
||||
import check_web_gl from '@/libs/check_web_gl'
|
||||
import Settings from '@/components/settings'
|
||||
|
||||
document.querySelector('#app').innerHTML = `
|
||||
<img src="./assets/${import.meta.env.VITE_LOGO_FILENAME}.png" class="logo invert-filter" id="logo" alt="operator logo" />
|
||||
<div id="settings"></div>
|
||||
<div id="widget-wrapper">
|
||||
<div id="fallback"
|
||||
style="background-image: url(./assets/${import.meta.env.VITE_FALLBACK_FILENAME}.png)"
|
||||
hidden
|
||||
></div>
|
||||
<div id="player" hidden></div>
|
||||
</div>
|
||||
`
|
||||
|
||||
window.settings = new Settings(document.querySelector('#settings'), document.querySelector('#logo'))
|
||||
document.title = import.meta.env.VITE_TITLE
|
||||
console.log("All resources are extracted from Arknights. Github: https://github.com/Halyul/aklive2d")
|
||||
|
||||
if (check_web_gl()) {
|
||||
import('@/components/player').then(({ default: spinePlayer }) => {
|
||||
window.settings.spinePlayer = spinePlayer(document.querySelector('#player'))
|
||||
})
|
||||
} else {
|
||||
import('@/components/fallback').then(({ default: fallback }) => {
|
||||
fallback(document.querySelector('#fallback'))
|
||||
})
|
||||
}
|
||||
1
src/javascript.svg
Normal file
1
src/javascript.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#F7DF1E" d="M0 0h256v256H0V0Z"></path><path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path></svg>
|
||||
|
After Width: | Height: | Size: 995 B |
@@ -1,13 +0,0 @@
|
||||
export function subscribe(eventName, listener) {
|
||||
document.addEventListener(eventName, listener);
|
||||
}
|
||||
|
||||
export function unsubscribe(eventName, listener) {
|
||||
document.removeEventListener(eventName, listener);
|
||||
}
|
||||
|
||||
export function publish(eventName, data) {
|
||||
const event = new CustomEvent(eventName, { detail: data });
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
// https://blog.logrocket.com/using-custom-events-react/
|
||||
@@ -1,37 +0,0 @@
|
||||
import { publish } from '@/libs/events'
|
||||
|
||||
window.settings = {
|
||||
setFPS: (fps) => {
|
||||
publish('settings:fps', fps)
|
||||
},
|
||||
displayLogo: (flag) => {
|
||||
publish('settings:logo', !flag)
|
||||
},
|
||||
resizeLogo: (value) => {
|
||||
publish('settings:ratio', value)
|
||||
},
|
||||
opacityLogo: (value) => {
|
||||
publish('settings:opacity', value)
|
||||
},
|
||||
setLogo: (url) => {
|
||||
publish('settings:image:set', 'file:///' + url)
|
||||
},
|
||||
setBackground: (url) => {
|
||||
publish('settings:background:set', 'file:///' + url)
|
||||
},
|
||||
positionPadding: (location, value) => {
|
||||
publish('settings:position:set', {
|
||||
key: location,
|
||||
value: value
|
||||
})
|
||||
},
|
||||
open: () => {
|
||||
publish('settings:open')
|
||||
},
|
||||
close: () => {
|
||||
publish('settings:close')
|
||||
},
|
||||
reset: () => {
|
||||
publish('settings:reset')
|
||||
}
|
||||
}
|
||||
@@ -1,67 +1,53 @@
|
||||
import { publish } from '@/libs/events'
|
||||
|
||||
window.wallpaperPropertyListener = {
|
||||
applyGeneralProperties: function (properties) {
|
||||
if (properties.fps) {
|
||||
publish('settings:fps', properties.fps.value)
|
||||
window.settings.setFPS(properties.fps)
|
||||
}
|
||||
},
|
||||
applyUserProperties: function (properties) {
|
||||
if (properties.logo) {
|
||||
publish('settings:logo', !properties.logo.value)
|
||||
window.settings.setLogoDisplay(!properties.logo.value)
|
||||
}
|
||||
if (properties.logoratio) {
|
||||
if (properties.logoratio.value) {
|
||||
publish('settings:ratio', properties.logoratio.value)
|
||||
window.settings.setLogoRatio(properties.logoratio.value)
|
||||
}
|
||||
}
|
||||
if (properties.logoopacity) {
|
||||
if (properties.logoopacity.value) {
|
||||
publish('settings:opacity', properties.logoopacity.value)
|
||||
window.settings.setLogoOpacity(properties.logoopacity.value)
|
||||
}
|
||||
}
|
||||
if (properties.logoimage) {
|
||||
if (properties.logoimage.value) {
|
||||
publish('settings:image:set', 'file:///' + properties.logoimage.value)
|
||||
window.settings.setLogo('file:///' + properties.logoimage.value)
|
||||
} else {
|
||||
publish('settings:image:reset')
|
||||
window.settings.resetLogoImage()
|
||||
}
|
||||
}
|
||||
if (properties.background) {
|
||||
if (properties.background.value) {
|
||||
publish('settings:background:set', 'file:///' + properties.background.value)
|
||||
window.settings.setBackgoundImage(`url('file:///${properties.background.value}`)
|
||||
} else {
|
||||
publish('settings:background:reset')
|
||||
window.settings.resetBackground()
|
||||
}
|
||||
}
|
||||
if (properties.position) {
|
||||
if (!properties.position.value) {
|
||||
publish('settings:position:reset')
|
||||
window.settings.positionReset()
|
||||
}
|
||||
}
|
||||
if (properties.paddingleft) {
|
||||
publish('settings:position:set', {
|
||||
key: "left",
|
||||
value: properties.paddingleft.value
|
||||
})
|
||||
window.settings.positionPadding("left", properties.paddingleft.value)
|
||||
}
|
||||
if (properties.paddingright) {
|
||||
publish('settings:position:set', {
|
||||
key: "right",
|
||||
value: properties.paddingright.value
|
||||
})
|
||||
window.settings.positionPadding("right", properties.paddingright.value)
|
||||
}
|
||||
if (properties.paddingtop) {
|
||||
publish('settings:position:set', {
|
||||
key: "top",
|
||||
value: properties.paddingtop.value
|
||||
})
|
||||
window.settings.positionPadding("top", properties.paddingtop.value)
|
||||
}
|
||||
if (properties.paddingbottom) {
|
||||
publish('settings:position:set', {
|
||||
key: "bottom",
|
||||
value: properties.paddingbottom.value
|
||||
})
|
||||
window.settings.positionPadding("bottom", properties.paddingbottom.value)
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -1,5 +0,0 @@
|
||||
import { render } from 'preact'
|
||||
import { App } from './app'
|
||||
import './index.css'
|
||||
|
||||
render(<App />, document.getElementById('app'))
|
||||
@@ -1,11 +1,9 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import preact from '@preact/preset-vite'
|
||||
import path from 'path'
|
||||
import data from './preprocessing'
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [preact()],
|
||||
base: "",
|
||||
resolve: {
|
||||
alias: {
|
||||
|
||||
Reference in New Issue
Block a user