Feature: Make RGB LED (preset colors) accessible via API/etc #3039

Fixes #3063
This commit is contained in:
proddy
2026-05-15 10:07:17 +02:00
parent 208717a896
commit 33fda705c0
15 changed files with 514 additions and 280 deletions

View File

@@ -38,7 +38,7 @@
"react": "^19.2.6",
"react-dom": "^19.2.6",
"react-icons": "^5.6.0",
"react-router": "^7.15.0",
"react-router": "^7.15.1",
"react-toastify": "^11.1.0",
"typesafe-i18n": "^5.27.1",
"typescript": "^6.0.3"
@@ -47,7 +47,7 @@
"@eslint/js": "^10.0.1",
"@preact/preset-vite": "^2.10.5",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"@types/node": "^25.7.0",
"@types/node": "^25.8.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"concurrently": "^9.2.1",

View File

@@ -54,8 +54,8 @@ importers:
specifier: ^5.6.0
version: 5.6.0(react@19.2.6)
react-router:
specifier: ^7.15.0
version: 7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
specifier: ^7.15.1
version: 7.15.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
react-toastify:
specifier: ^11.1.0
version: 11.1.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
@@ -71,13 +71,13 @@ importers:
version: 10.0.1(eslint@10.3.0)
'@preact/preset-vite':
specifier: ^2.10.5
version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.59.0)(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1))
version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.59.0)(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1))
'@trivago/prettier-plugin-sort-imports':
specifier: ^6.0.2
version: 6.0.2(prettier@3.8.3)
'@types/node':
specifier: ^25.7.0
version: 25.7.0
specifier: ^25.8.0
version: 25.8.0
'@types/react':
specifier: ^19.2.14
version: 19.2.14
@@ -107,10 +107,10 @@ importers:
version: 8.59.3(eslint@10.3.0)(typescript@6.0.3)
vite:
specifier: ^8.0.13
version: 8.0.13(@types/node@25.7.0)(terser@5.47.1)
version: 8.0.13(@types/node@25.8.0)(terser@5.47.1)
vite-plugin-imagemin:
specifier: ^0.6.1
version: 0.6.1(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1))
version: 0.6.1(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1))
packages:
@@ -829,8 +829,8 @@ packages:
resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==}
deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed.
'@types/node@25.7.0':
resolution: {integrity: sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==}
'@types/node@25.8.0':
resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==}
'@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -1330,8 +1330,8 @@ packages:
duplexer3@0.1.5:
resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
electron-to-chromium@1.5.355:
resolution: {integrity: sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ==}
electron-to-chromium@1.5.356:
resolution: {integrity: sha512-9NgFd7m5t5MCJ5rUSjJITUXAH9mEGlrlofnMf4YEr+pz6JlP7cWmTAH+JFmbPnaSW8koVTkuW7pacORWAnA5Yw==}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -2589,8 +2589,8 @@ packages:
react-is@19.2.6:
resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==}
react-router@7.15.0:
resolution: {integrity: sha512-HW9vYwuM8f4yx66Izy8xfrzCM+SBJluoZcCbww9A1TySax11S5Vgw6fi3ZjMONw9J4gQwngL7PzkyIpJJpJ7RQ==}
react-router@7.15.1:
resolution: {integrity: sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==}
engines: {node: '>=20.0.0'}
peerDependencies:
react: '>=18'
@@ -3010,8 +3010,8 @@ packages:
unbzip2-stream@1.4.3:
resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
undici-types@7.21.0:
resolution: {integrity: sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==}
undici-types@7.24.6:
resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
@@ -3604,19 +3604,19 @@ snapshots:
'@popperjs/core@2.11.8': {}
'@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.59.0)(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1))':
'@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.59.0)(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0)
'@prefresh/vite': 2.4.12(preact@10.29.1)(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1))
'@prefresh/vite': 2.4.12(preact@10.29.1)(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1))
'@rollup/pluginutils': 5.3.0(rollup@4.59.0)
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0)
debug: 4.4.3
magic-string: 0.30.21
picocolors: 1.1.1
vite: 8.0.13(@types/node@25.7.0)(terser@5.47.1)
vite-prerender-plugin: 0.5.13(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1))
vite: 8.0.13(@types/node@25.8.0)(terser@5.47.1)
vite-prerender-plugin: 0.5.13(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1))
zimmerframe: 1.1.4
transitivePeerDependencies:
- preact
@@ -3631,7 +3631,7 @@ snapshots:
'@prefresh/utils@1.2.1': {}
'@prefresh/vite@2.4.12(preact@10.29.1)(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1))':
'@prefresh/vite@2.4.12(preact@10.29.1)(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1))':
dependencies:
'@babel/core': 7.29.0
'@prefresh/babel-plugin': 0.5.3
@@ -3639,7 +3639,7 @@ snapshots:
'@prefresh/utils': 1.2.1
'@rollup/pluginutils': 4.2.1
preact: 10.29.1
vite: 8.0.13(@types/node@25.7.0)(terser@5.47.1)
vite: 8.0.13(@types/node@25.8.0)(terser@5.47.1)
transitivePeerDependencies:
- supports-color
@@ -3822,7 +3822,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 6.0.0
'@types/node': 25.7.0
'@types/node': 25.8.0
'@types/imagemin-gifsicle@7.0.4':
dependencies:
@@ -3851,21 +3851,21 @@ snapshots:
'@types/imagemin@7.0.1':
dependencies:
'@types/node': 25.7.0
'@types/node': 25.8.0
'@types/json-schema@7.0.15': {}
'@types/keyv@3.1.4':
dependencies:
'@types/node': 25.7.0
'@types/node': 25.8.0
'@types/minimatch@6.0.0':
dependencies:
minimatch: 10.2.5
'@types/node@25.7.0':
'@types/node@25.8.0':
dependencies:
undici-types: 7.21.0
undici-types: 7.24.6
'@types/parse-json@4.0.2': {}
@@ -3885,11 +3885,11 @@ snapshots:
'@types/responselike@1.0.3':
dependencies:
'@types/node': 25.7.0
'@types/node': 25.8.0
'@types/svgo@2.6.4':
dependencies:
'@types/node': 25.7.0
'@types/node': 25.8.0
'@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3)':
dependencies:
@@ -4109,7 +4109,7 @@ snapshots:
dependencies:
baseline-browser-mapping: 2.10.29
caniuse-lite: 1.0.30001792
electron-to-chromium: 1.5.355
electron-to-chromium: 1.5.356
node-releases: 2.0.44
update-browserslist-db: 1.2.3(browserslist@4.28.2)
@@ -4468,7 +4468,7 @@ snapshots:
duplexer3@0.1.5: {}
electron-to-chromium@1.5.355: {}
electron-to-chromium@1.5.356: {}
emoji-regex@10.6.0: {}
@@ -5648,7 +5648,7 @@ snapshots:
react-is@19.2.6: {}
react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
react-router@7.15.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
dependencies:
cookie: 1.1.1
react: 19.2.6
@@ -6088,7 +6088,7 @@ snapshots:
buffer: 5.7.1
through: 2.3.8
undici-types@7.21.0: {}
undici-types@7.24.6: {}
universalify@2.0.1: {}
@@ -6121,7 +6121,7 @@ snapshots:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
vite-plugin-imagemin@0.6.1(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1)):
vite-plugin-imagemin@0.6.1(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1)):
dependencies:
'@types/imagemin': 7.0.1
'@types/imagemin-gifsicle': 7.0.4
@@ -6146,11 +6146,11 @@ snapshots:
imagemin-webp: 6.1.0
jpegtran-bin: 6.0.1
pathe: 0.2.0
vite: 8.0.13(@types/node@25.7.0)(terser@5.47.1)
vite: 8.0.13(@types/node@25.8.0)(terser@5.47.1)
transitivePeerDependencies:
- supports-color
vite-prerender-plugin@0.5.13(vite@8.0.13(@types/node@25.7.0)(terser@5.47.1)):
vite-prerender-plugin@0.5.13(vite@8.0.13(@types/node@25.8.0)(terser@5.47.1)):
dependencies:
kolorist: 1.8.0
magic-string: 0.30.21
@@ -6158,9 +6158,9 @@ snapshots:
simple-code-frame: 1.3.0
source-map: 0.7.6
stack-trace: 1.0.0
vite: 8.0.13(@types/node@25.7.0)(terser@5.47.1)
vite: 8.0.13(@types/node@25.8.0)(terser@5.47.1)
vite@8.0.13(@types/node@25.7.0)(terser@5.47.1):
vite@8.0.13(@types/node@25.8.0)(terser@5.47.1):
dependencies:
lightningcss: 1.32.0
picomatch: 4.0.4
@@ -6168,7 +6168,7 @@ snapshots:
rolldown: 1.0.1
tinyglobby: 0.2.16
optionalDependencies:
'@types/node': 25.7.0
'@types/node': 25.8.0
fsevents: 2.3.3
terser: 5.47.1