From 2f95ef305d64d3c819898a47384c674887a107dd Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 25 Jun 2025 13:15:58 +0200 Subject: [PATCH 01/24] roll back to asyncTCP 3.4.2, add CS6800 mixer --- interface/package.json | 32 +- interface/pnpm-lock.yaml | 987 +++++++++++++++++++++------------- platformio.ini | 11 +- src/ESP32React/HttpEndpoint.h | 1 + src/core/device_library.h | 3 +- 5 files changed, 639 insertions(+), 395 deletions(-) diff --git a/interface/package.json b/interface/package.json index bfa4739e2..3acbbe780 100644 --- a/interface/package.json +++ b/interface/package.json @@ -22,19 +22,19 @@ "lint": "eslint . --fix" }, "dependencies": { - "@alova/adapter-xhr": "2.1.1", + "@alova/adapter-xhr": "2.2.1", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/icons-material": "^7.1.1", - "@mui/material": "^7.1.1", + "@mui/icons-material": "^7.1.2", + "@mui/material": "^7.1.2", "@table-library/react-table-library": "4.1.15", - "alova": "3.2.11", + "alova": "3.3.3", "async-validator": "^4.2.5", "formidable": "^3.5.4", "jwt-decode": "^4.0.0", "magic-string": "^0.30.17", "mime-types": "^3.0.1", - "preact": "^10.26.8", + "preact": "^10.26.9", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", @@ -45,23 +45,23 @@ }, "devDependencies": { "@babel/core": "^7.27.4", - "@eslint/js": "^9.28.0", + "@eslint/js": "^9.29.0", "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.1", "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^22.15.31", - "@types/react": "^19.1.7", + "@types/node": "^24.0.4", + "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", - "concurrently": "^9.1.2", - "eslint": "^9.28.0", + "concurrently": "^9.2.0", + "eslint": "^9.29.0", "eslint-config-prettier": "^10.1.5", - "prettier": "^3.5.3", - "rollup-plugin-visualizer": "^5.14.0", - "terser": "^5.42.0", - "typescript-eslint": "8.32.1", - "vite": "^6.3.5", + "prettier": "^3.6.0", + "rollup-plugin-visualizer": "^6.0.3", + "terser": "^5.43.1", + "typescript-eslint": "8.35.0", + "vite": "^7.0.0", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" }, - "packageManager": "pnpm@10.11.0" + "packageManager": "pnpm@10.12.3" } diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 9e3d26d25..978f4717c 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -9,26 +9,26 @@ importers: .: dependencies: '@alova/adapter-xhr': - specifier: 2.1.1 - version: 2.1.1(alova@3.2.11) + specifier: 2.2.1 + version: 2.2.1(alova@3.3.3) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.7)(react@19.1.0) + version: 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/styled': specifier: ^11.14.0 - version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0) + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/icons-material': - specifier: ^7.1.1 - version: 7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(react@19.1.0) + specifier: ^7.1.2 + version: 7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) '@mui/material': - specifier: ^7.1.1 - version: 7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.1.2 + version: 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@table-library/react-table-library': specifier: 4.1.15 - version: 4.1.15(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.1.15(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) alova: - specifier: 3.2.11 - version: 3.2.11 + specifier: 3.3.3 + version: 3.3.3 async-validator: specifier: ^4.2.5 version: 4.2.5 @@ -45,8 +45,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 preact: - specifier: ^10.26.8 - version: 10.26.8 + specifier: ^10.26.9 + version: 10.26.9 react: specifier: ^19.1.0 version: 19.1.0 @@ -73,66 +73,66 @@ importers: specifier: ^7.27.4 version: 7.27.4 '@eslint/js': - specifier: ^9.28.0 - version: 9.28.0 + specifier: ^9.29.0 + version: 9.29.0 '@preact/compat': specifier: ^18.3.1 - version: 18.3.1(preact@10.26.8) + version: 18.3.1(preact@10.26.9) '@preact/preset-vite': specifier: ^2.10.1 - version: 2.10.1(@babel/core@7.27.4)(preact@10.26.8)(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)) + version: 2.10.1(@babel/core@7.27.4)(preact@10.26.9)(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)) '@trivago/prettier-plugin-sort-imports': specifier: ^5.2.2 - version: 5.2.2(prettier@3.5.3) + version: 5.2.2(prettier@3.6.0) '@types/node': - specifier: ^22.15.31 - version: 22.15.31 + specifier: ^24.0.4 + version: 24.0.4 '@types/react': - specifier: ^19.1.7 - version: 19.1.7 + specifier: ^19.1.8 + version: 19.1.8 '@types/react-dom': specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.7) + version: 19.1.6(@types/react@19.1.8) concurrently: - specifier: ^9.1.2 - version: 9.1.2 + specifier: ^9.2.0 + version: 9.2.0 eslint: - specifier: ^9.28.0 - version: 9.28.0 + specifier: ^9.29.0 + version: 9.29.0 eslint-config-prettier: specifier: ^10.1.5 - version: 10.1.5(eslint@9.28.0) + version: 10.1.5(eslint@9.29.0) prettier: - specifier: ^3.5.3 - version: 3.5.3 + specifier: ^3.6.0 + version: 3.6.0 rollup-plugin-visualizer: - specifier: ^5.14.0 - version: 5.14.0(rollup@4.42.0) + specifier: ^6.0.3 + version: 6.0.3(rollup@4.44.0) terser: - specifier: ^5.42.0 - version: 5.42.0 + specifier: ^5.43.1 + version: 5.43.1 typescript-eslint: - specifier: 8.32.1 - version: 8.32.1(eslint@9.28.0)(typescript@5.8.3) + specifier: 8.35.0 + version: 8.35.0(eslint@9.29.0)(typescript@5.8.3) vite: - specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.31)(terser@5.42.0) + specifier: ^7.0.0 + version: 7.0.0(@types/node@24.0.4)(terser@5.43.1) vite-plugin-imagemin: specifier: ^0.6.1 - version: 0.6.1(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)) + version: 0.6.1(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)) + version: 5.1.4(typescript@5.8.3)(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)) packages: - '@alova/adapter-xhr@2.1.1': - resolution: {integrity: sha512-053tY4wVEL5PUX8HwvFrp/y1wTObGjMvwVBLUVSOcZKuZwcoUraWdQoWAdNRnSWfwJoPEd+ta9EdS4KPqTcz9g==} + '@alova/adapter-xhr@2.2.1': + resolution: {integrity: sha512-0aPVdFmmMn4Z4KvG+DOyWhzQKaBGCe8yPQ4mJz1hQNPzbrIfqq+0flVF6ArFL4EtPbOJVnKropJNE691sjtq5A==} peerDependencies: alova: ^3.0.20 - '@alova/shared@1.1.2': - resolution: {integrity: sha512-8q/gMHFpzm7XYcaUlsyTCMDRRhFnewwheTeObMjPl1+bFdr+wZuBEHEPYIyd8tyzLwfrqpBeonaMN2tlngM8EA==} + '@alova/shared@1.3.1': + resolution: {integrity: sha512-ijSOaFLUFcVzMKSY3avoEE5C03/p9atjMDPBwvNkwnzaCrhv6/m4A121NdadF8YlHCRuifyYfz90IyEdMXTsJg==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -451,32 +451,36 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.20.1': + resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + '@eslint/config-helpers@0.2.3': + resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.14.0': resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.15.0': + resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.28.0': - resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} + '@eslint/js@9.29.0': + resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.2': + resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -520,22 +524,22 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@mui/core-downloads-tracker@7.1.1': - resolution: {integrity: sha512-yBckQs4aQ8mqukLnPC6ivIRv6guhaXi8snVl00VtyojBbm+l6VbVhyTSZ68Abcx7Ah8B+GZhrB7BOli+e+9LkQ==} + '@mui/core-downloads-tracker@7.1.2': + resolution: {integrity: sha512-0gLO1PvbJwSYe5ji021tGj6HFqrtEPMGKK4L1zWwRbhzrWWUumUJvMvJUsIgWQIYQsgOnhq9k2Fc1BxLGHDsAg==} - '@mui/icons-material@7.1.1': - resolution: {integrity: sha512-X37+Yc8QpEnl0sYmz+WcLFy2dWgNRzbswDzLPXG7QU1XDVlP5TPp1HXjdmCupOWLL/I9m1fyhcyZl8/HPpp/Cg==} + '@mui/icons-material@7.1.2': + resolution: {integrity: sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^7.1.1 + '@mui/material': ^7.1.2 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/material@7.1.1': - resolution: {integrity: sha512-mTpdmdZCaHCGOH3SrYM41+XKvNL0iQfM9KlYgpSjgadXx/fEKhhvOktxm8++Xw6FFeOHoOiV+lzOI8X1rsv71A==} + '@mui/material@7.1.2': + resolution: {integrity: sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -665,103 +669,103 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/rollup-android-arm-eabi@4.42.0': - resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==} + '@rollup/rollup-android-arm-eabi@4.44.0': + resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.42.0': - resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==} + '@rollup/rollup-android-arm64@4.44.0': + resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.42.0': - resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==} + '@rollup/rollup-darwin-arm64@4.44.0': + resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.42.0': - resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==} + '@rollup/rollup-darwin-x64@4.44.0': + resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.42.0': - resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==} + '@rollup/rollup-freebsd-arm64@4.44.0': + resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.42.0': - resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==} + '@rollup/rollup-freebsd-x64@4.44.0': + resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.42.0': - resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==} + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.42.0': - resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==} + '@rollup/rollup-linux-arm-musleabihf@4.44.0': + resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.42.0': - resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==} + '@rollup/rollup-linux-arm64-gnu@4.44.0': + resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.42.0': - resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==} + '@rollup/rollup-linux-arm64-musl@4.44.0': + resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.42.0': - resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==} + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': - resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.42.0': - resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==} + '@rollup/rollup-linux-riscv64-gnu@4.44.0': + resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.42.0': - resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==} + '@rollup/rollup-linux-riscv64-musl@4.44.0': + resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.42.0': - resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==} + '@rollup/rollup-linux-s390x-gnu@4.44.0': + resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.42.0': - resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==} + '@rollup/rollup-linux-x64-gnu@4.44.0': + resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.42.0': - resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==} + '@rollup/rollup-linux-x64-musl@4.44.0': + resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.42.0': - resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==} + '@rollup/rollup-win32-arm64-msvc@4.44.0': + resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.42.0': - resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==} + '@rollup/rollup-win32-ia32-msvc@4.44.0': + resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.42.0': - resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==} + '@rollup/rollup-win32-x64-msvc@4.44.0': + resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} cpu: [x64] os: [win32] @@ -796,9 +800,6 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -835,8 +836,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@22.15.31': - resolution: {integrity: sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==} + '@types/node@24.0.4': + resolution: {integrity: sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -854,8 +855,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.1.7': - resolution: {integrity: sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==} + '@types/react@19.1.8': + resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -863,51 +864,63 @@ packages: '@types/svgo@2.6.4': resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} + '@typescript-eslint/eslint-plugin@8.35.0': + resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.35.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} + '@typescript-eslint/parser@8.35.0': + resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} + '@typescript-eslint/project-service@8.35.0': + resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.35.0': + resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} + '@typescript-eslint/tsconfig-utils@8.35.0': + resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.35.0': + resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} + '@typescript-eslint/types@8.35.0': + resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} + '@typescript-eslint/typescript-estree@8.35.0': + resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} + '@typescript-eslint/utils@8.35.0': + resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} + '@typescript-eslint/visitor-keys@8.35.0': + resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -923,8 +936,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - alova@3.2.11: - resolution: {integrity: sha512-e1vqJJYOcuq6SOQvO4DddjGsDEuEWm5/uQ1W6ruhrj23OkHQzXWhdXPLmVUWsi9KYt8vyIKuEEqo2FvCitpQwQ==} + alova@3.3.3: + resolution: {integrity: sha512-DB1t2qpQUERVaymz+u9bS71kcN5PzZ+G5LawHm9grabv++tfHOeYsKaW+LCpgMIJ/V7lQqFyqwOvTHGDph43Jw==} engines: {node: '>= 18.0.0'} ansi-regex@2.1.1: @@ -967,6 +980,10 @@ packages: async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -1008,11 +1025,11 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1044,6 +1061,18 @@ packages: cacheable-request@2.1.4: resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1056,8 +1085,8 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001721: - resolution: {integrity: sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==} + caniuse-lite@1.0.30001724: + resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==} caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -1103,8 +1132,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concurrently@9.1.2: - resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} + concurrently@9.2.0: + resolution: {integrity: sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==} engines: {node: '>=18'} hasBin: true @@ -1220,6 +1249,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -1265,17 +1298,21 @@ packages: resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==} engines: {node: '>=6'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - electron-to-chromium@1.5.166: - resolution: {integrity: sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==} + electron-to-chromium@1.5.173: + resolution: {integrity: sha512-2bFhXP2zqSfQHugjqJIDFVwa+qIxyNApenmXTp9EjaKtdPrES5Qcn9/aSFy/NaP2E+fWG/zxKu/LBvY36p5VNQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} @@ -1287,6 +1324,18 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + esbuild-android-64@0.14.54: resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} engines: {node: '>=12'} @@ -1447,8 +1496,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.28.0: - resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} + eslint@9.29.0: + resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1613,6 +1662,10 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + formidable@3.5.4: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} @@ -1646,6 +1699,14 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-proxy@2.1.0: resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} engines: {node: '>=4'} @@ -1706,6 +1767,10 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + got@7.1.0: resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} engines: {node: '>=4'} @@ -1728,12 +1793,23 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-symbol-support-x@1.4.2: resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-to-string-tag-x@1.4.1: resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1835,6 +1911,10 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -1905,6 +1985,10 @@ packages: resolution: {integrity: sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==} engines: {node: '>=6'} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} @@ -1915,6 +1999,9 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2058,6 +2145,10 @@ packages: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -2321,12 +2412,16 @@ packages: engines: {node: '>=10'} hasBin: true - postcss@8.5.4: - resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.8: - resolution: {integrity: sha512-1nMfdFjucm5hKvq0IClqZwK4FJkGXhRrQstOQ3P4vp8HxKrJEMFcY6RdBRVTdfQS/UlnX6gfbPuTvaqx/bDoeQ==} + preact@10.26.9: + resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2340,8 +2435,8 @@ packages: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} engines: {node: '>=4'} - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.0: + resolution: {integrity: sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==} engines: {node: '>=14'} hasBin: true @@ -2357,8 +2452,8 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -2477,12 +2572,12 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup-plugin-visualizer@5.14.0: - resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + rollup-plugin-visualizer@6.0.3: + resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} engines: {node: '>=18'} hasBin: true peerDependencies: - rolldown: 1.x + rolldown: 1.x || ^1.0.0-beta rollup: 2.x || 3.x || 4.x peerDependenciesMeta: rolldown: @@ -2490,8 +2585,8 @@ packages: rollup: optional: true - rollup@4.42.0: - resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==} + rollup@4.44.0: + resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2538,6 +2633,10 @@ packages: set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -2709,8 +2808,8 @@ packages: resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} engines: {node: '>=4'} - terser@5.42.0: - resolution: {integrity: sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==} + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true @@ -2725,8 +2824,9 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - to-buffer@1.1.1: - resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + to-buffer@1.2.1: + resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + engines: {node: '>= 0.4'} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2774,14 +2874,18 @@ packages: resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} engines: {node: '>=8'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + typesafe-i18n@5.26.2: resolution: {integrity: sha512-2QAriFmiY5JwUAJtG7yufoE/XZ1aFBY++wj7YFS2yo89a3jLBfKoWSdq5JfQYk1V2BS7V2c/u+KEcaCQoE65hw==} hasBin: true peerDependencies: typescript: '>=3.5.1' - typescript-eslint@8.32.1: - resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} + typescript-eslint@8.35.0: + resolution: {integrity: sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2795,8 +2899,8 @@ packages: unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -2852,19 +2956,19 @@ packages: vite: optional: true - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.0.0: + resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -2892,6 +2996,10 @@ packages: yaml: optional: true + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -2947,12 +3055,12 @@ packages: snapshots: - '@alova/adapter-xhr@2.1.1(alova@3.2.11)': + '@alova/adapter-xhr@2.2.1(alova@3.3.3)': dependencies: - '@alova/shared': 1.1.2 - alova: 3.2.11 + '@alova/shared': 1.3.1 + alova: 3.3.3 - '@alova/shared@1.1.2': {} + '@alova/shared@1.3.1': {} '@ampproject/remapping@2.3.0': dependencies: @@ -3120,7 +3228,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 '@emotion/babel-plugin': 11.13.5 @@ -3132,7 +3240,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 transitivePeerDependencies: - supports-color @@ -3146,18 +3254,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0)': + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.7)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 transitivePeerDependencies: - supports-color @@ -3249,14 +3357,14 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0)': dependencies: - eslint: 9.28.0 + eslint: 9.29.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.20.1': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1 @@ -3264,12 +3372,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.2': {} + '@eslint/config-helpers@0.2.3': {} '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.15.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -3284,13 +3396,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.28.0': {} + '@eslint/js@9.29.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.2': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.0 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -3328,25 +3440,25 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mui/core-downloads-tracker@7.1.1': {} + '@mui/core-downloads-tracker@7.1.2': {} - '@mui/icons-material@7.1.1(@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.7)(react@19.1.0)': + '@mui/icons-material@7.1.2(@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/material': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mui/material': 7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 optionalDependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 - '@mui/material@7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/material@7.1.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/core-downloads-tracker': 7.1.1 - '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0) - '@mui/types': 7.4.3(@types/react@19.1.7) - '@mui/utils': 7.1.1(@types/react@19.1.7)(react@19.1.0) + '@mui/core-downloads-tracker': 7.1.2 + '@mui/system': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@mui/types': 7.4.3(@types/react@19.1.8) + '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.1.7) + '@types/react-transition-group': 4.4.12(@types/react@19.1.8) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -3355,20 +3467,20 @@ snapshots: react-is: 19.1.0 react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.7)(react@19.1.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0) - '@types/react': 19.1.7 + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@types/react': 19.1.8 - '@mui/private-theming@7.1.1(@types/react@19.1.7)(react@19.1.0)': + '@mui/private-theming@7.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/utils': 7.1.1(@types/react@19.1.7)(react@19.1.0) + '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) prop-types: 15.8.1 react: 19.1.0 optionalDependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 - '@mui/styled-engine@7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(react@19.1.0)': + '@mui/styled-engine@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 '@emotion/cache': 11.14.0 @@ -3378,42 +3490,42 @@ snapshots: prop-types: 15.8.1 react: 19.1.0 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.7)(react@19.1.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0)': + '@mui/system@7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/private-theming': 7.1.1(@types/react@19.1.7)(react@19.1.0) - '@mui/styled-engine': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0))(react@19.1.0) - '@mui/types': 7.4.3(@types/react@19.1.7) - '@mui/utils': 7.1.1(@types/react@19.1.7)(react@19.1.0) + '@mui/private-theming': 7.1.1(@types/react@19.1.8)(react@19.1.0) + '@mui/styled-engine': 7.1.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0) + '@mui/types': 7.4.3(@types/react@19.1.8) + '@mui/utils': 7.1.1(@types/react@19.1.8)(react@19.1.0) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 19.1.0 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.7)(react@19.1.0) - '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(@types/react@19.1.7)(react@19.1.0) - '@types/react': 19.1.7 + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@types/react': 19.1.8 - '@mui/types@7.4.3(@types/react@19.1.7)': + '@mui/types@7.4.3(@types/react@19.1.8)': dependencies: '@babel/runtime': 7.27.6 optionalDependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 - '@mui/utils@7.1.1(@types/react@19.1.7)(react@19.1.0)': + '@mui/utils@7.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 - '@mui/types': 7.4.3(@types/react@19.1.7) + '@mui/types': 7.4.3(@types/react@19.1.8) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.0 react-is: 19.1.0 optionalDependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 '@noble/hashes@1.8.0': {} @@ -3435,43 +3547,43 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/compat@18.3.1(preact@10.26.8)': + '@preact/compat@18.3.1(preact@10.26.9)': dependencies: - preact: 10.26.8 + preact: 10.26.9 - '@preact/preset-vite@2.10.1(@babel/core@7.27.4)(preact@10.26.8)(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0))': + '@preact/preset-vite@2.10.1(@babel/core@7.27.4)(preact@10.26.9)(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1))': dependencies: '@babel/core': 7.27.4 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.4) - '@prefresh/vite': 2.4.7(preact@10.26.8)(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)) + '@prefresh/vite': 2.4.7(preact@10.26.9)(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.27.4) debug: 4.4.1 kolorist: 1.8.0 - vite: 6.3.5(@types/node@22.15.31)(terser@5.42.0) - vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)) + vite: 7.0.0(@types/node@24.0.4)(terser@5.43.1) + vite-prerender-plugin: 0.5.10(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)) transitivePeerDependencies: - preact - supports-color '@prefresh/babel-plugin@0.5.1': {} - '@prefresh/core@1.5.3(preact@10.26.8)': + '@prefresh/core@1.5.3(preact@10.26.9)': dependencies: - preact: 10.26.8 + preact: 10.26.9 '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.7(preact@10.26.8)(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0))': + '@prefresh/vite@2.4.7(preact@10.26.9)(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1))': dependencies: '@babel/core': 7.27.4 '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.3(preact@10.26.8) + '@prefresh/core': 1.5.3(preact@10.26.9) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 - preact: 10.26.8 - vite: 6.3.5(@types/node@22.15.31)(terser@5.42.0) + preact: 10.26.9 + vite: 7.0.0(@types/node@24.0.4)(terser@5.43.1) transitivePeerDependencies: - supports-color @@ -3480,78 +3592,78 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/rollup-android-arm-eabi@4.42.0': + '@rollup/rollup-android-arm-eabi@4.44.0': optional: true - '@rollup/rollup-android-arm64@4.42.0': + '@rollup/rollup-android-arm64@4.44.0': optional: true - '@rollup/rollup-darwin-arm64@4.42.0': + '@rollup/rollup-darwin-arm64@4.44.0': optional: true - '@rollup/rollup-darwin-x64@4.42.0': + '@rollup/rollup-darwin-x64@4.44.0': optional: true - '@rollup/rollup-freebsd-arm64@4.42.0': + '@rollup/rollup-freebsd-arm64@4.44.0': optional: true - '@rollup/rollup-freebsd-x64@4.42.0': + '@rollup/rollup-freebsd-x64@4.44.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.42.0': + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.42.0': + '@rollup/rollup-linux-arm-musleabihf@4.44.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.42.0': + '@rollup/rollup-linux-arm64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.42.0': + '@rollup/rollup-linux-arm64-musl@4.44.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.42.0': + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.42.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.42.0': + '@rollup/rollup-linux-riscv64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.42.0': + '@rollup/rollup-linux-riscv64-musl@4.44.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.42.0': + '@rollup/rollup-linux-s390x-gnu@4.44.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.42.0': + '@rollup/rollup-linux-x64-gnu@4.44.0': optional: true - '@rollup/rollup-linux-x64-musl@4.42.0': + '@rollup/rollup-linux-x64-musl@4.44.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.42.0': + '@rollup/rollup-win32-arm64-msvc@4.44.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.42.0': + '@rollup/rollup-win32-ia32-msvc@4.44.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.42.0': + '@rollup/rollup-win32-x64-msvc@4.44.0': optional: true '@sindresorhus/is@0.7.0': {} - '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.1.7)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.1.7)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) clsx: 1.1.1 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-virtualized-auto-sizer: 1.0.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-window: 1.8.11(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.0)': dependencies: '@babel/generator': 7.27.5 '@babel/parser': 7.27.5 @@ -3559,20 +3671,18 @@ snapshots: '@babel/types': 7.27.6 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 3.5.3 + prettier: 3.6.0 transitivePeerDependencies: - supports-color '@trysound/sax@0.2.0': {} - '@types/estree@1.0.7': {} - '@types/estree@1.0.8': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.31 + '@types/node': 24.0.4 '@types/imagemin-gifsicle@7.0.4': dependencies: @@ -3601,53 +3711,53 @@ snapshots: '@types/imagemin@7.0.1': dependencies: - '@types/node': 22.15.31 + '@types/node': 24.0.4 '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 22.15.31 + '@types/node': 24.0.4 '@types/minimatch@5.1.2': {} - '@types/node@22.15.31': + '@types/node@24.0.4': dependencies: - undici-types: 6.21.0 + undici-types: 7.8.0 '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.15': {} - '@types/react-dom@19.1.6(@types/react@19.1.7)': + '@types/react-dom@19.1.6(@types/react@19.1.8)': dependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 - '@types/react-transition-group@4.4.12(@types/react@19.1.7)': + '@types/react-transition-group@4.4.12(@types/react@19.1.8)': dependencies: - '@types/react': 19.1.7 + '@types/react': 19.1.8 - '@types/react@19.1.7': + '@types/react@19.1.8': dependencies: csstype: 3.1.3 '@types/responselike@1.0.3': dependencies: - '@types/node': 22.15.31 + '@types/node': 24.0.4 '@types/svgo@2.6.4': dependencies: - '@types/node': 22.15.31 + '@types/node': 24.0.4 - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0)(typescript@5.8.3))(eslint@9.29.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.28.0 + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/type-utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.0 + eslint: 9.29.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -3656,40 +3766,55 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.35.0(eslint@9.29.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.0 debug: 4.4.1 - eslint: 9.28.0 + eslint: 9.29.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.32.1': + '@typescript-eslint/project-service@8.35.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - - '@typescript-eslint/type-utils@8.32.1(eslint@9.28.0)(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0)(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3) + '@typescript-eslint/types': 8.35.0 debug: 4.4.1 - eslint: 9.28.0 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.35.0': + dependencies: + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/visitor-keys': 8.35.0 + + '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.35.0(eslint@9.29.0)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.29.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.32.1': {} + '@typescript-eslint/types@8.35.0': {} - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.35.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/project-service': 8.35.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3) + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/visitor-keys': 8.35.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -3700,20 +3825,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.28.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.35.0(eslint@9.29.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.28.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0) + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3) + eslint: 9.29.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.32.1': + '@typescript-eslint/visitor-keys@8.35.0': dependencies: - '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/types': 8.35.0 eslint-visitor-keys: 4.2.1 acorn-jsx@5.3.2(acorn@8.15.0): @@ -3729,9 +3854,9 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - alova@3.2.11: + alova@3.3.3: dependencies: - '@alova/shared': 1.1.2 + '@alova/shared': 1.3.1 rate-limiter-flexible: 5.0.5 ansi-regex@2.1.1: {} @@ -3760,6 +3885,10 @@ snapshots: async-validator@4.2.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + babel-plugin-macros@3.1.0: dependencies: '@babel/runtime': 7.27.6 @@ -3814,12 +3943,12 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -3829,8 +3958,8 @@ snapshots: browserslist@4.25.0: dependencies: - caniuse-lite: 1.0.30001721 - electron-to-chromium: 1.5.166 + caniuse-lite: 1.0.30001724 + electron-to-chromium: 1.5.173 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) @@ -3862,6 +3991,23 @@ snapshots: normalize-url: 2.0.1 responselike: 1.0.2 + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} camelcase-keys@2.1.0: @@ -3871,7 +4017,7 @@ snapshots: camelcase@2.1.1: {} - caniuse-lite@1.0.30001721: {} + caniuse-lite@1.0.30001724: {} caw@2.0.1: dependencies: @@ -3919,7 +4065,7 @@ snapshots: concat-map@0.0.1: {} - concurrently@9.1.2: + concurrently@9.2.0: dependencies: chalk: 4.1.2 lodash: 4.17.21 @@ -4066,6 +4212,12 @@ snapshots: deep-is@0.1.4: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + define-lazy-prop@2.0.0: {} dezalgo@1.0.4: @@ -4145,13 +4297,19 @@ snapshots: p-event: 2.3.1 pify: 3.0.0 + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer3@0.1.5: {} - electron-to-chromium@1.5.166: {} + electron-to-chromium@1.5.173: {} emoji-regex@8.0.0: {} - end-of-stream@1.4.4: + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -4163,6 +4321,14 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + esbuild-android-64@0.14.54: optional: true @@ -4281,9 +4447,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.5(eslint@9.28.0): + eslint-config-prettier@10.1.5(eslint@9.29.0): dependencies: - eslint: 9.28.0 + eslint: 9.29.0 eslint-scope@8.4.0: dependencies: @@ -4294,16 +4460,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.28.0: + eslint@9.29.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 + '@eslint/config-array': 0.20.1 + '@eslint/config-helpers': 0.2.3 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.28.0 - '@eslint/plugin-kit': 0.3.1 + '@eslint/js': 9.29.0 + '@eslint/plugin-kit': 0.3.2 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -4507,6 +4673,10 @@ snapshots: flatted@3.3.3: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + formidable@3.5.4: dependencies: '@paralleldrive/cuid2': 2.2.2 @@ -4537,6 +4707,24 @@ snapshots: get-caller-file@2.0.5: {} + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-proxy@2.1.0: dependencies: npm-conf: 1.1.3 @@ -4552,11 +4740,11 @@ snapshots: get-stream@4.1.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 get-stream@5.2.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 get-stream@6.0.1: {} @@ -4601,6 +4789,8 @@ snapshots: globrex@0.1.2: {} + gopd@1.2.0: {} + got@7.1.0: dependencies: '@types/keyv': 3.1.4 @@ -4652,12 +4842,22 @@ snapshots: has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + has-symbol-support-x@1.4.2: {} + has-symbols@1.1.0: {} + has-to-string-tag-x@1.4.1: dependencies: has-symbol-support-x: 1.4.2 + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -4764,6 +4964,8 @@ snapshots: is-arrayish@0.2.1: {} + is-callable@1.2.7: {} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -4810,6 +5012,10 @@ snapshots: dependencies: fast-xml-parser: 4.5.3 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + is-utf8@0.2.1: {} is-wsl@2.2.0: @@ -4818,6 +5024,8 @@ snapshots: isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} isurl@1.0.0: @@ -4951,6 +5159,8 @@ snapshots: map-obj@1.0.1: {} + math-intrinsics@1.1.0: {} + mdn-data@2.0.14: {} memoize-one@5.2.1: {} @@ -4989,11 +5199,11 @@ snapshots: minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -5190,13 +5400,15 @@ snapshots: bin-wrapper: 4.1.0 execa: 4.1.0 - postcss@8.5.4: + possible-typed-array-names@1.1.0: {} + + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.8: {} + preact@10.26.9: {} prelude-ls@1.2.1: {} @@ -5204,7 +5416,7 @@ snapshots: prepend-http@2.0.0: {} - prettier@3.5.3: {} + prettier@3.6.0: {} process-nextick-args@2.0.1: {} @@ -5218,9 +5430,9 @@ snapshots: pseudomap@1.0.2: {} - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} @@ -5337,39 +5549,39 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-visualizer@5.14.0(rollup@4.42.0): + rollup-plugin-visualizer@6.0.3(rollup@4.44.0): dependencies: open: 8.4.2 picomatch: 4.0.2 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.42.0 + rollup: 4.44.0 - rollup@4.42.0: + rollup@4.44.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.42.0 - '@rollup/rollup-android-arm64': 4.42.0 - '@rollup/rollup-darwin-arm64': 4.42.0 - '@rollup/rollup-darwin-x64': 4.42.0 - '@rollup/rollup-freebsd-arm64': 4.42.0 - '@rollup/rollup-freebsd-x64': 4.42.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.42.0 - '@rollup/rollup-linux-arm-musleabihf': 4.42.0 - '@rollup/rollup-linux-arm64-gnu': 4.42.0 - '@rollup/rollup-linux-arm64-musl': 4.42.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.42.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.42.0 - '@rollup/rollup-linux-riscv64-gnu': 4.42.0 - '@rollup/rollup-linux-riscv64-musl': 4.42.0 - '@rollup/rollup-linux-s390x-gnu': 4.42.0 - '@rollup/rollup-linux-x64-gnu': 4.42.0 - '@rollup/rollup-linux-x64-musl': 4.42.0 - '@rollup/rollup-win32-arm64-msvc': 4.42.0 - '@rollup/rollup-win32-ia32-msvc': 4.42.0 - '@rollup/rollup-win32-x64-msvc': 4.42.0 + '@rollup/rollup-android-arm-eabi': 4.44.0 + '@rollup/rollup-android-arm64': 4.44.0 + '@rollup/rollup-darwin-arm64': 4.44.0 + '@rollup/rollup-darwin-x64': 4.44.0 + '@rollup/rollup-freebsd-arm64': 4.44.0 + '@rollup/rollup-freebsd-x64': 4.44.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 + '@rollup/rollup-linux-arm-musleabihf': 4.44.0 + '@rollup/rollup-linux-arm64-gnu': 4.44.0 + '@rollup/rollup-linux-arm64-musl': 4.44.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-musl': 4.44.0 + '@rollup/rollup-linux-s390x-gnu': 4.44.0 + '@rollup/rollup-linux-x64-gnu': 4.44.0 + '@rollup/rollup-linux-x64-musl': 4.44.0 + '@rollup/rollup-win32-arm64-msvc': 4.44.0 + '@rollup/rollup-win32-ia32-msvc': 4.44.0 + '@rollup/rollup-win32-x64-msvc': 4.44.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -5404,6 +5616,15 @@ snapshots: set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -5547,10 +5768,10 @@ snapshots: dependencies: bl: 1.2.3 buffer-alloc: 1.2.0 - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 fs-constants: 1.0.0 readable-stream: 2.3.8 - to-buffer: 1.1.1 + to-buffer: 1.2.1 xtend: 4.0.2 temp-dir@1.0.0: {} @@ -5560,7 +5781,7 @@ snapshots: temp-dir: 1.0.0 uuid: 3.4.0 - terser@5.42.0: + terser@5.43.1: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.15.0 @@ -5576,7 +5797,11 @@ snapshots: fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 - to-buffer@1.1.1: {} + to-buffer@1.2.1: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 to-regex-range@5.0.1: dependencies: @@ -5610,16 +5835,22 @@ snapshots: type-fest@0.11.0: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + typesafe-i18n@5.26.2(typescript@5.8.3): dependencies: typescript: 5.8.3 - typescript-eslint@8.32.1(eslint@9.28.0)(typescript@5.8.3): + typescript-eslint@8.35.0(eslint@9.29.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.28.0)(typescript@5.8.3) - eslint: 9.28.0 + '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0)(typescript@5.8.3))(eslint@9.29.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0)(typescript@5.8.3) + eslint: 9.29.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5631,7 +5862,7 @@ snapshots: buffer: 5.7.1 through: 2.3.8 - undici-types@6.21.0: {} + undici-types@7.8.0: {} universalify@2.0.1: {} @@ -5664,7 +5895,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-plugin-imagemin@0.6.1(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)): + vite-plugin-imagemin@0.6.1(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)): dependencies: '@types/imagemin': 7.0.1 '@types/imagemin-gifsicle': 7.0.4 @@ -5689,11 +5920,11 @@ snapshots: imagemin-webp: 6.1.0 jpegtran-bin: 6.0.1 pathe: 0.2.0 - vite: 6.3.5(@types/node@22.15.31)(terser@5.42.0) + vite: 7.0.0(@types/node@24.0.4)(terser@5.43.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)): + vite-prerender-plugin@0.5.10(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.17 @@ -5701,31 +5932,41 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 6.3.5(@types/node@22.15.31)(terser@5.42.0) + vite: 7.0.0(@types/node@24.0.4)(terser@5.43.1) - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.31)(terser@5.42.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.0(@types/node@24.0.4)(terser@5.43.1)): dependencies: debug: 4.4.1 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 6.3.5(@types/node@22.15.31)(terser@5.42.0) + vite: 7.0.0(@types/node@24.0.4)(terser@5.43.1) transitivePeerDependencies: - supports-color - typescript - vite@6.3.5(@types/node@22.15.31)(terser@5.42.0): + vite@7.0.0(@types/node@24.0.4)(terser@5.43.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 - postcss: 8.5.4 - rollup: 4.42.0 + postcss: 8.5.6 + rollup: 4.44.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.31 + '@types/node': 24.0.4 fsevents: 2.3.3 - terser: 5.42.0 + terser: 5.43.1 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 which@1.3.1: dependencies: diff --git a/platformio.ini b/platformio.ini index 0f095e423..940ff7f94 100644 --- a/platformio.ini +++ b/platformio.ini @@ -39,12 +39,13 @@ build_flags = -D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000 ; default -D CONFIG_ASYNC_TCP_PRIORITY=10 ; default -D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 ; default - -D CONFIG_ASYNC_TCP_RUNNING_CORE=1 ; force async_tcp task to be on same core as Arduino app (default is any core) + -D CONFIG_ASYNC_TCP_RUNNING_CORE=0 ; force async_tcp task to be on other core as Arduino app (default is any core) -D CONFIG_ASYNC_TCP_STACK_SIZE=6144 ; stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k - (default is 16K) ; ESPAsyncWebServer -D WS_MAX_QUEUED_MESSAGES=0 ; log messages are already queued in ems-esp -D CORE_DEBUG_LEVEL=0 + unbuild_flags = ${common.core_unbuild_flags} @@ -54,7 +55,7 @@ framework = arduino board_build.partitions = partitions/esp32_partition_16M.csv board_upload.flash_size = 16MB board_build.app_partition_name = app0 -platform = espressif32@6.10.0 ; Arduino Core v2.0.17 / IDF v4.4.7 +platform = espressif32@6.11.0 ; Arduino Core v2.0.17 / IDF v4.4.7 ; 32MB Flash variants [espressif32_base_32M] @@ -62,7 +63,7 @@ framework = arduino board_build.partitions = partitions/esp32_partition_32M.csv board_upload.flash_size = 32MB board_build.app_partition_name = app0 -platform = espressif32@6.10.0 ; Arduino Core 2.0.17 / IDF 4.4.7 +platform = espressif32@6.11.0 ; Arduino Core 2.0.17 / IDF 4.4.7 ; use Tasmota's library for 4MB Flash variants. ; Removes libs (like mbedtsl, so no WiFi_secure.h) to increase available heap @@ -101,8 +102,8 @@ build_type = release board_build.filesystem = littlefs lib_deps = bblanchon/ArduinoJson @ 7.4.1 - ESP32Async/AsyncTCP @ 3.4.4 - ESP32Async/ESPAsyncWebServer @ 3.7.7 + ESP32Async/AsyncTCP @ 3.4.2 + ESP32Async/ESPAsyncWebServer @ 3.7.8 https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.7 ; diff --git a/src/ESP32React/HttpEndpoint.h b/src/ESP32React/HttpEndpoint.h index b2c34c99f..3b46a9e18 100644 --- a/src/ESP32React/HttpEndpoint.h +++ b/src/ESP32React/HttpEndpoint.h @@ -2,6 +2,7 @@ #define HttpEndpoint_h #include +#include #include #include "SecurityManager.h" diff --git a/src/core/device_library.h b/src/core/device_library.h index f628d8df1..1d5fc2e77 100644 --- a/src/core/device_library.h +++ b/src/core/device_library.h @@ -139,6 +139,7 @@ {164, DeviceType::SOLAR, "SM200, MS200", DeviceFlags::EMS_DEVICE_FLAG_SM100}, // Mixer Modules - 0x20-0x27 for HC, 0x28-0x29 for WWC and 0x11 for the MP100 +{ 8, DeviceType::MIXER, "XCUMixer", DeviceFlags::EMS_DEVICE_FLAG_MMPLUS}, // integrated in XCU_THH (CS6800, etc.) { 69, DeviceType::MIXER, "MM10", DeviceFlags::EMS_DEVICE_FLAG_MM10}, {100, DeviceType::MIXER, "IPM", DeviceFlags::EMS_DEVICE_FLAG_IPM}, {102, DeviceType::MIXER, "IPM2", DeviceFlags::EMS_DEVICE_FLAG_IPM}, @@ -157,7 +158,7 @@ {16, DeviceType::HEATPUMP, "CSH5800iG", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Ventilation - 0x51 -{231, DeviceType::VENTILATION, "Logavent HRV176", DeviceFlags::EMS_DEVICE_FLAG_NONE}, +{231, DeviceType::VENTILATION, "HRV176, HRV156, 5000c, MV200", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Heatsource - 0x60 {228, DeviceType::HEATSOURCE, "AM200", DeviceFlags::EMS_DEVICE_FLAG_NONE}, // alternative heatsource From 6691c819568dbd7e898b954a03e96e402f027cfa Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 25 Jun 2025 17:46:38 +0200 Subject: [PATCH 02/24] test for #2585 --- src/core/telegram.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/telegram.cpp b/src/core/telegram.cpp index a2ff5097c..2a7edc03d 100644 --- a/src/core/telegram.cpp +++ b/src/core/telegram.cpp @@ -649,7 +649,7 @@ uint16_t TxService::read_next_tx(const uint8_t offset, const uint8_t length) { return 0; } // we request all and get a short telegram with requested offset - if ((next_length + next_offset) == 0xFF && old_length < max_length - 1 && offset <= telegram_last_->offset) { + if ((next_length + next_offset) == 0xFF && old_length < max_length - 4 && offset <= telegram_last_->offset) { return 0; } if (offset >= telegram_last_->offset && old_length > 0 && next_length > 0) { From 6c42cbfb4b9f0c8b86db614c3f46b6f1f10fbed5 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 28 Jun 2025 13:00:53 +0200 Subject: [PATCH 03/24] make task cores configurable in platformio.ini --- lib/espMqttClient/src/MqttClient.cpp | 2 +- platformio.ini | 9 ++++++--- src/ESP32React/MqttSettingsService.cpp | 4 ++-- src/ESP32React/MqttSettingsService.h | 13 +++++++++++++ src/uart/emsuart_esp32.cpp | 15 +++++++++++---- src/uart/emsuart_esp32.h | 21 ++++++++++++++++----- src/web/WebSchedulerService.cpp | 7 ++++++- src/web/WebSchedulerService.h | 12 ++++++++++++ 8 files changed, 67 insertions(+), 16 deletions(-) diff --git a/lib/espMqttClient/src/MqttClient.cpp b/lib/espMqttClient/src/MqttClient.cpp index dc21f7456..a5d498e2c 100644 --- a/lib/espMqttClient/src/MqttClient.cpp +++ b/lib/espMqttClient/src/MqttClient.cpp @@ -74,7 +74,7 @@ MqttClient::MqttClient(espMqttClientTypes::UseInternalTask useInternalTask, uint MqttClient::~MqttClient() { disconnect(true); - _clearQueue(2); + clearQueue(true); #if defined(ARDUINO_ARCH_ESP32) vSemaphoreDelete(_xSemaphore); if (_useInternalTask == espMqttClientTypes::UseInternalTask::YES) { diff --git a/platformio.ini b/platformio.ini index 940ff7f94..f36a1f520 100644 --- a/platformio.ini +++ b/platformio.ini @@ -39,11 +39,14 @@ build_flags = -D CONFIG_ASYNC_TCP_MAX_ACK_TIME=5000 ; default -D CONFIG_ASYNC_TCP_PRIORITY=10 ; default -D CONFIG_ASYNC_TCP_QUEUE_SIZE=64 ; default - -D CONFIG_ASYNC_TCP_RUNNING_CORE=0 ; force async_tcp task to be on other core as Arduino app (default is any core) + -D CONFIG_ASYNC_TCP_RUNNING_CORE=1 ; force async_tcp task to be on same core as Arduino app (default is any core) -D CONFIG_ASYNC_TCP_STACK_SIZE=6144 ; stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k - (default is 16K) ; ESPAsyncWebServer -D WS_MAX_QUEUED_MESSAGES=0 ; log messages are already queued in ems-esp -D CORE_DEBUG_LEVEL=0 + -D EMSESP_SCHEDULER_RUNNING_CORE=1 + ; -D EMSESP_SCHEDULER_STACKSIZE=6144 + -D EMSESP_MQTT_RUNNING_CORE=1 unbuild_flags = @@ -101,10 +104,10 @@ monitor_filters = direct build_type = release board_build.filesystem = littlefs lib_deps = - bblanchon/ArduinoJson @ 7.4.1 + bblanchon/ArduinoJson @ 7.4.2 ESP32Async/AsyncTCP @ 3.4.2 ESP32Async/ESPAsyncWebServer @ 3.7.8 - https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.7 + https://github.com/MichaelDvP/EMS-ESP-Modules.git @ 1.0.8 ; ; Builds for different board types diff --git a/src/ESP32React/MqttSettingsService.cpp b/src/ESP32React/MqttSettingsService.cpp index f6fb78872..5514af3b4 100644 --- a/src/ESP32React/MqttSettingsService.cpp +++ b/src/ESP32React/MqttSettingsService.cpp @@ -44,7 +44,7 @@ void MqttSettingsService::startClient() { if (_state.enableTLS) { isSecure = true; if (emsesp::EMSESP::system_.PSram() > 0) { - _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::YES); + _mqttClient = new espMqttClientSecure(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE); } else { _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO); } @@ -64,7 +64,7 @@ void MqttSettingsService::startClient() { #endif isSecure = false; if (emsesp::EMSESP::system_.PSram() > 0) { - _mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::YES); + _mqttClient = new espMqttClient(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE); } else { _mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::NO); } diff --git a/src/ESP32React/MqttSettingsService.h b/src/ESP32React/MqttSettingsService.h index ef448af0d..2c4871a50 100644 --- a/src/ESP32React/MqttSettingsService.h +++ b/src/ESP32React/MqttSettingsService.h @@ -50,6 +50,19 @@ #define FACTORY_MQTT_MAX_TOPIC_LENGTH 128 #endif +#ifndef EMSESP_MQTT_RUNNING_CORE +#define EMSESP_MQTT_RUNNING_CORE 1 +#endif + +#ifdef EMSESP_MQTT_STACKSIZE +#undef EMC_TASK_STACK_SIZE +#define EMC_TASK_STACK_SIZE EMSESP_MQTT_STACKSIZE +#endif + +#ifndef EMSESP_MQTT_PRIORITY +#define EMSESP_MQTT_PRIORITY 1 +#endif + class MqttSettings { public: bool enabled; diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index bf13dfd4a..82fafb78a 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -33,6 +33,7 @@ namespace emsesp { uint8_t EMSuart::last_tx_src_ = 0; +static TaskHandle_t xHandle; static QueueHandle_t uart_queue; uint8_t tx_mode_ = 0xFF; uint32_t inverse_mask = 0; @@ -94,12 +95,18 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t uart_param_config(EMSUART_NUM, &uart_config); uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_set_line_inverse(EMSUART_NUM, inverse_mask); - uart_driver_install(EMSUART_NUM, 129, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo + uart_driver_install(EMSUART_NUM, UART_FIFO_LEN + 1, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo uart_set_rx_full_threshold(EMSUART_NUM, 1); uart_set_rx_timeout(EMSUART_NUM, 0); // disable // note esp32s3 crashes with 2k stacksize, stack overflow here sometimes wipes settingsfiles. - xTaskCreate(uart_event_task, "uart_event_task", 2560, NULL, configMAX_PRIORITIES - 1, NULL); +#if defined(CONFIG_FREERTOS_UNICORE) || (EMSESP_UART_RUNNING_CORE < 0) + xTaskCreate(uart_event_task, "uart_event_task", EMSESP_UART_STACKSIZE, NULL, EMSESP_UART_PRIORITY, &xHandle); +#else + xTaskCreatePinnedToCore(uart_event_task, "uart_event_task", EMSESP_UART_STACKSIZE, NULL, EMSESP_UART_PRIORITY, &xHandle, EMSESP_UART_RUNNING_CORE); +#endif + } else { + vTaskResume(xHandle); } tx_mode_ = tx_mode; uart_enable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA); @@ -111,7 +118,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t void EMSuart::stop() { if (tx_mode_ != 0xFF) { // only call after driver initialisation uart_disable_intr_mask(EMSUART_NUM, UART_BRK_DET_INT_ENA | UART_RXFIFO_FULL_INT_ENA); - // TODO should we xTaskSuspend() the event task here? + vTaskSuspend(xHandle); } }; @@ -139,7 +146,7 @@ void EMSuart::send_poll(const uint8_t data) { * buf contains the CRC and len is #bytes including the CRC * returns code, 1=success */ -uint16_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { +uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { if (len == 0 || len >= EMS_MAXBUFFERSIZE) { return EMS_TX_STATUS_ERR; } diff --git a/src/uart/emsuart_esp32.h b/src/uart/emsuart_esp32.h index e2b5cd643..620139e66 100644 --- a/src/uart/emsuart_esp32.h +++ b/src/uart/emsuart_esp32.h @@ -24,6 +24,17 @@ #ifndef EMSESP_EMSUART_H #define EMSESP_EMSUART_H +#ifndef EMSESP_UART_RUNNING_CORE +#define EMSESP_UART_RUNNING_CORE -1 +#endif + +#ifndef EMSESP_UART_STACKSIZE +#define EMSESP_UART_STACKSIZE 2560 +#endif + +#ifndef EMSESP_UART_PRIORITY +#define EMSESP_UART_PRIORITY configMAX_PRIORITIES - 1 +#endif #define EMS_MAXBUFFERSIZE 33 // max size of the buffer. EMS packets are max 32 bytes, plus extra for BRK #define EMSUART_NUM UART_NUM_1 // on C3 and S2 there is no UART2, use UART1 for all @@ -61,11 +72,11 @@ class EMSuart { EMSuart() = default; ~EMSuart() = default; - static void start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio); - static void send_poll(const uint8_t data); - static void stop(); - static uint16_t transmit(const uint8_t * buf, const uint8_t len); - static uint8_t last_tx_src() { + static void start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio); + static void send_poll(const uint8_t data); + static void stop(); + static uint8_t transmit(const uint8_t * buf, const uint8_t len); + static uint8_t last_tx_src() { return last_tx_src_; } diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index ef519cc31..d2fa168bd 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -40,7 +40,12 @@ void WebSchedulerService::begin() { Mqtt::subscribe(EMSdevice::DeviceType::SCHEDULER, topic, nullptr); // use empty function callback #ifndef EMSESP_STANDALONE if (EMSESP::system_.PSram()) { - xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", 5120, NULL, 1, NULL); +#if defined(CONFIG_FREERTOS_UNICORE) || (EMSESP_SCHEDULER_RUNNING_CORE < 0) + xTaskCreate((TaskFunction_t)scheduler_task, "scheduler_task", EMSESP_SCHEDULER_STACKSIZE, NULL, EMSESP_SCHEDULER_PRIORITY, NULL); +#else + xTaskCreatePinnedToCore( + (TaskFunction_t)scheduler_task, "scheduler_task", EMSESP_SCHEDULER_STACKSIZE, NULL, EMSESP_SCHEDULER_PRIORITY, NULL, EMSESP_SCHEDULER_RUNNING_CORE); +#endif } #endif } diff --git a/src/web/WebSchedulerService.h b/src/web/WebSchedulerService.h index 3cd1b8c88..8b40063b5 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -22,6 +22,18 @@ #define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json" #define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST +#ifndef EMSESP_SCHEDULER_RUNNING_CORE +#define EMSESP_SCHEDULER_RUNNING_CORE 1 +#endif + +#ifndef EMSESP_SCHEDULER_STACKSIZE +#define EMSESP_SCHEDULER_STACKSIZE 5120 +#endif + +#ifndef EMSESP_SCHEDULER_PRIORITY +#define EMSESP_SCHEDULER_PRIORITY 1 +#endif + // bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx // 0-127 (0->0x7F) is day schedule // 128/0x80 is timer From 4b2468d61680a37a24b8363ab110aa050fd1a7ae Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 10 Jul 2025 12:09:17 +0200 Subject: [PATCH 04/24] some checks --- src/ESP32React/MqttSettingsService.cpp | 22 +++++++++++++--------- src/ESP32React/NTPSettingsService.cpp | 2 +- src/core/default_settings.h | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/ESP32React/MqttSettingsService.cpp b/src/ESP32React/MqttSettingsService.cpp index 5514af3b4..395f5a421 100644 --- a/src/ESP32React/MqttSettingsService.cpp +++ b/src/ESP32React/MqttSettingsService.cpp @@ -23,6 +23,7 @@ static String generateClientId() { MqttSettingsService::~MqttSettingsService() { delete _mqttClient; + _mqttClient = nullptr; } void MqttSettingsService::begin() { @@ -34,7 +35,7 @@ void MqttSettingsService::startClient() { static bool isSecure = false; if (_mqttClient != nullptr) { // do we need to change the client? - if ((isSecure && _state.enableTLS) || (!isSecure && !_state.enableTLS)) { + if (_state.enabled && ((isSecure && _state.enableTLS) || (!isSecure && !_state.enableTLS))) { return; } delete _mqttClient; @@ -43,10 +44,10 @@ void MqttSettingsService::startClient() { #ifndef TASMOTA_SDK if (_state.enableTLS) { isSecure = true; - if (emsesp::EMSESP::system_.PSram() > 0) { - _mqttClient = new espMqttClientSecure(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE); - } else { + if (emsesp::EMSESP::system_.PSram() == 0) { _mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO); + } else { + _mqttClient = new espMqttClientSecure(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE); } if (!_mqttClient) { emsesp::EMSESP::logger().warning("MQTT Client alloc failed"); @@ -63,10 +64,10 @@ void MqttSettingsService::startClient() { } #endif isSecure = false; - if (emsesp::EMSESP::system_.PSram() > 0) { - _mqttClient = new espMqttClient(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE); - } else { + if (emsesp::EMSESP::system_.PSram() == 0) { _mqttClient = new espMqttClient(espMqttClientTypes::UseInternalTask::NO); + } else { + _mqttClient = new espMqttClient(EMSESP_MQTT_PRIORITY, EMSESP_MQTT_RUNNING_CORE); } static_cast(_mqttClient)->onConnect([this](bool sessionPresent) { onMqttConnect(sessionPresent); }); static_cast(_mqttClient)->onDisconnect([this](espMqttClientTypes::DisconnectReason reason) { onMqttDisconnect(reason); }); @@ -78,6 +79,9 @@ void MqttSettingsService::startClient() { } void MqttSettingsService::loop() { + if (!_state.enabled || _mqttClient == nullptr || emsesp::EMSESP::system_.systemStatus() != 0) { + return; + } if (_reconfigureMqtt || (_disconnectedAt && static_cast(uuid::get_uptime() - _disconnectedAt) >= MQTT_RECONNECTION_DELAY)) { // reconfigure MQTT client _disconnectedAt = configureMqtt() ? 0 : uuid::get_uptime(); @@ -93,11 +97,11 @@ bool MqttSettingsService::isEnabled() { } bool MqttSettingsService::isConnected() { - return _mqttClient->connected(); + return _mqttClient ? _mqttClient->connected() : false; } const char * MqttSettingsService::getClientId() { - return _mqttClient->getClientId(); + return _mqttClient ? _mqttClient->getClientId() : ""; } void MqttSettingsService::onMqttMessage(const espMqttClientTypes::MessageProperties & properties, diff --git a/src/ESP32React/NTPSettingsService.cpp b/src/ESP32React/NTPSettingsService.cpp index 337e1649e..81e5cdf82 100644 --- a/src/ESP32React/NTPSettingsService.cpp +++ b/src/ESP32React/NTPSettingsService.cpp @@ -25,7 +25,7 @@ void NTPSettingsService::WiFiEvent(WiFiEvent_t event) { switch (event) { case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: case ARDUINO_EVENT_ETH_DISCONNECTED: - if (_connected) { + if (_connected && emsesp::EMSESP::system_.ntp_connected()) { emsesp::EMSESP::logger().info("WiFi connection dropped, stopping NTP"); _connected = false; configureNTP(); diff --git a/src/core/default_settings.h b/src/core/default_settings.h index 5a32df6af..47f991256 100644 --- a/src/core/default_settings.h +++ b/src/core/default_settings.h @@ -293,7 +293,7 @@ enum { #ifndef STRINGIZE #define STRINGIZE(s) #s #endif -#if TASMOTA_SDK +#ifdef TASMOTA_SDK #define ARDUINO_VERSION_STR(major, minor, patch) "Tasmota Arduino v" STRINGIZE(major) "." STRINGIZE(minor) "." STRINGIZE(patch) #else #define ARDUINO_VERSION_STR(major, minor, patch) "ESP32 Arduino v" STRINGIZE(major) "." STRINGIZE(minor) "." STRINGIZE(patch) From 5d2bd6a2afb924a03a0807c0b04b890bec8dd66a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 23 Jul 2025 11:55:11 +0200 Subject: [PATCH 05/24] set climate action cooling --- src/core/mqtt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index 54a5262df..03b579342 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -1332,7 +1332,7 @@ bool Mqtt::publish_ha_climate_config(const int8_t tag, const bool has_roomtemp, // add hvac_action - https://github.com/emsesp/EMS-ESP32/discussions/2562 doc["action_topic"] = "~/boiler_data"; - doc["action_template"] = "{% if value_json.heatingactive=='on'%}heating{%else%}idle{%endif%}"; + doc["action_template"] = "{% if value_json.hpactivity=='cooling'%}cooling{%elif value_json.heatingactive=='on'%}heating{%else%}idle{%endif%}"; // the HA climate component only responds to auto, heat and off JsonArray modes = doc["modes"].to(); From bee703eb1febcdd49a9f39a8207237cf61d59522 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 23 Jul 2025 11:56:27 +0200 Subject: [PATCH 06/24] test: fetch MM100 config only once --- src/devices/mixer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index 6e18766c9..6996738dd 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -31,7 +31,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c if (flags == EMSdevice::EMS_DEVICE_FLAG_MMPLUS) { register_telegram_type(device_id - 0x20 + 0x02D7, "MMPLUSStatusMessage", false, MAKE_PF_CB(process_MMPLUSStatusMessage_HC)); // register_telegram_type(device_id - 0x20 + 0x02E1, "MMPLUSSetMessage", true, MAKE_PF_CB(process_MMPLUSSetMessage_HC)); - register_telegram_type(device_id - 0x20 + 0x02CD, "MMPLUSConfigMessage", true, MAKE_PF_CB(process_MMPLUSConfigMessage_HC)); + register_telegram_type(device_id - 0x20 + 0x02CD, "MMPLUSConfigMessage", false, MAKE_PF_CB(process_MMPLUSConfigMessage_HC)); register_device_value(tag, &flowTempHc_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(flowTempHc), DeviceValueUOM::DEGREES); register_device_value(tag, &status_, DeviceValueType::UINT8, FL_(mixerStatus), DeviceValueUOM::PERCENT); register_device_value(tag, &flowSetTemp_, DeviceValueType::UINT8, FL_(flowSetTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flowSetTemp)); @@ -47,6 +47,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c 10, 600); register_device_value(tag, &flowTempOffset_, DeviceValueType::UINT8, FL_(flowtempoffset), DeviceValueUOM::K, MAKE_CF_CB(set_flowTempOffset), 0, 20); + EMSESP::send_read_request(device_id - 0x20 + 0x02CD, device_id, 0, 3); } // EMS 1.0 From c537d0ab8bb9f0b443a1845a1b88084228de7c62 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 23 Jul 2025 18:47:33 +0200 Subject: [PATCH 07/24] add gateway E32V3, autodetect by gpio39 core voltage --- interface/src/app/main/types.ts | 1 + src/core/analogsensor.cpp | 20 +++++++++++++++++++- src/core/analogsensor.h | 2 +- src/core/console.cpp | 2 +- src/core/emsesp.cpp | 4 ++-- src/core/system.cpp | 2 ++ src/core/temperaturesensor.cpp | 27 ++++++++++++++++++++++++++- src/core/temperaturesensor.h | 13 +++++++------ src/emsesp_version.h | 2 +- src/web/WebSettingsService.cpp | 7 ++++++- 10 files changed, 66 insertions(+), 14 deletions(-) diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index 2f967eacd..272228d18 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -259,6 +259,7 @@ export const BOARD_PROFILES: BoardProfiles = { S32S3: 'BBQKees Gateway S3', E32: 'BBQKees Gateway E32', E32V2: 'BBQKees Gateway E32 V2', + E32V3: 'BBQKees Gateway E32 V3', NODEMCU: 'NodeMCU 32S', 'MH-ET': 'MH-ET Live D1 Mini', LOLIN: 'Lolin D32', diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index 281cfe1a6..e63c94788 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -23,7 +23,25 @@ namespace emsesp { uuid::log::Logger AnalogSensor::logger_{F_(analogsensor), uuid::log::Facility::DAEMON}; -void AnalogSensor::start() { +void AnalogSensor::start(const bool factory_settings) { + // if (factory_settings && EMSESP::nvs_.getString("boot").equals("E32V3") && EMSESP::nvs_.getString("hwrevision").equals("3.0")) { + if (factory_settings && analogReadMilliVolts(35) > 800) { // core voltage > 3V + EMSESP::webCustomizationService.update([&](WebCustomization & settings) { + auto newSensor = AnalogCustomization(); + newSensor.gpio = 39; + newSensor.name = "core_voltage"; + newSensor.offset = 0; + newSensor.factor = 0.00377136; // Divider 24k - 8,66k + newSensor.uom = DeviceValueUOM::VOLTS; + newSensor.type = AnalogType::ADC; + settings.analogCustomizations.push_back(newSensor); + newSensor.gpio = 36; + newSensor.name = "supply_voltage"; + newSensor.factor = 0.017; // Divider 24k - 1,5k + settings.analogCustomizations.push_back(newSensor); + return StateUpdateResult::CHANGED; // persist the change + }); + } reload(true); // fetch the list of sensors from our customization service if (!analog_enabled_) { diff --git a/src/core/analogsensor.h b/src/core/analogsensor.h index 6504944cb..a00f86098 100644 --- a/src/core/analogsensor.h +++ b/src/core/analogsensor.h @@ -127,7 +127,7 @@ class AnalogSensor { RGB = 11 }; - void start(); + void start(const bool factory_settings = false); void loop(); void publish_sensor(const Sensor & sensor) const; void publish_values(const bool force); diff --git a/src/core/console.cpp b/src/core/console.cpp index ce34b6d83..9215a0650 100644 --- a/src/core/console.cpp +++ b/src/core/console.cpp @@ -302,7 +302,7 @@ static void setup_commands(std::shared_ptr const & commands) { std::vector data; // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode std::string board_profile = Helpers::toUpper(arguments.front()); if (!EMSESP::system_.load_board_profile(data, board_profile)) { - shell.println("Invalid board profile (S32, E32, E32V2, MH-ET, NODEMCU, LOLIN, OLIMEX, OLIMEXPOE, C3MINI, S2MINI, S3MINI, S32S3, CUSTOM)"); + shell.println("Invalid board profile (S32, E32, E32V2, E32V3, MH-ET, NODEMCU, LOLIN, OLIMEX, OLIMEXPOE, C3MINI, S2MINI, S3MINI, S32S3, CUSTOM)"); return; } diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index 364525be2..5553b9301 100644 --- a/src/core/emsesp.cpp +++ b/src/core/emsesp.cpp @@ -1711,8 +1711,8 @@ void EMSESP::start() { mqtt_.start(); // mqtt init system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart shower_.start(); // initialize shower timer and shower alert - temperaturesensor_.start(); // Temperature external sensors - analogsensor_.start(); // Analog external sensors + temperaturesensor_.start(factory_settings); // Temperature external sensors + analogsensor_.start(factory_settings); // Analog external sensors // start web services webLogService.start(); // apply settings to weblog service diff --git a/src/core/system.cpp b/src/core/system.cpp index 559905a01..5a4186d57 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -1877,6 +1877,8 @@ bool System::load_board_profile(std::vector & data, const std::string & data = {2, 4, 5, 17, 33, PHY_type::PHY_TYPE_LAN8720, 16, 1, 0, 0}; // BBQKees Gateway E32 } else if (board_profile == "E32V2") { data = {2, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1, 0}; // BBQKees Gateway E32 V2 + } else if (board_profile == "E32V3") { + data = {32, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1, 1}; // BBQKees Gateway E32 V3 } else if (board_profile == "MH-ET") { data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // MH-ET Live D1 Mini } else if (board_profile == "NODEMCU") { diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index e7664a1d1..140725204 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -32,7 +32,9 @@ namespace emsesp { uuid::log::Logger TemperatureSensor::logger_{F_(temperaturesensor), uuid::log::Facility::DAEMON}; // start the 1-wire -void TemperatureSensor::start() { +void TemperatureSensor::start(const bool factory_settings) { + // set_internal_ = factory_settings && EMSESP::nvs_.getString("boot").equals("E32V3") && EMSESP::nvs_.getString("hwrevision").equals("3.0"); + set_internal_ = factory_settings && analogReadMilliVolts(35) > 800; // core voltage > 3V reload(); if (!dallas_gpio_) { @@ -199,6 +201,29 @@ void TemperatureSensor::loop() { scancnt_ = 0; } else if (scancnt_ == SCAN_START + 1) { // startup firstscan_ = sensors_.size(); + if (firstscan_ > 0 && set_internal_) { + set_internal_ = false; + Sensor * s = &sensors_[0]; + if (firstscan_ > 1) { + for (auto s1 : sensors_) { + if (EMSESP::nvs_.getString("intTemp").equals(s1.id().c_str())) { + s = &s1; + } + } + } + s->set_name("gateway_temperature"); + if (!EMSESP::nvs_.isKey("intTemp")) { + EMSESP::nvs_.putString("intTemp", s->id().c_str()); + } + EMSESP::webCustomizationService.update([&](WebCustomization & settings) { + auto newSensor = SensorCustomization(); + newSensor.id = s->id(); + newSensor.name = s->name(); + newSensor.offset = 0; + settings.sensorCustomizations.push_back(newSensor); + return StateUpdateResult::CHANGED; + }); + } // LOG_DEBUG("Adding %d sensor(s) from first scan", firstscan_); } else if ((scancnt_ <= 0) && (firstscan_ != sensors_.size())) { // check 2 times for no change of sensor # scancnt_ = SCAN_START; diff --git a/src/core/temperaturesensor.h b/src/core/temperaturesensor.h index d63017884..5ab1302ba 100644 --- a/src/core/temperaturesensor.h +++ b/src/core/temperaturesensor.h @@ -77,7 +77,7 @@ class TemperatureSensor { TemperatureSensor() = default; ~TemperatureSensor() = default; - void start(); + void start(const bool factory_settings = false); void loop(); void publish_sensor(const Sensor & sensor); void publish_values(const bool force); @@ -165,11 +165,12 @@ class TemperatureSensor { int8_t scanretry_ = 0; #endif - uint8_t dallas_gpio_ = 0; - bool parasite_ = false; - bool changed_ = false; - uint32_t sensorfails_ = 0; - uint32_t sensorreads_ = 0; + uint8_t dallas_gpio_ = 0; + bool parasite_ = false; + bool changed_ = false; + uint32_t sensorfails_ = 0; + uint32_t sensorreads_ = 0; + bool set_internal_ = false; }; } // namespace emsesp diff --git a/src/emsesp_version.h b/src/emsesp_version.h index 661757bb4..d265f92c5 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.3-dev.14" +#define EMSESP_APP_VERSION "3.7.3-dev.15" diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index 688318728..c23852482 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -179,7 +179,12 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { #else if (ETH.begin(ETH_PHY_LAN8720, 0, 23, 18, 15, ETH_CLOCK_GPIO0_OUT)) { #endif - settings.board_profile = "E32V2"; // Ethernet and PSRAM + + if (analogReadMilliVolts(39) > 800) { // core voltage > 3V + settings.board_profile = "E32V3"; // Ethernet, PSRAM, internal sensors + } else { + settings.board_profile = "E32V2"; // Ethernet and PSRAM + } } else { settings.board_profile = "S32"; // ESP32 standard WiFi with PSRAM } From c8033692b1fb2523771ced9dd7a8b33951b880bb Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 23 Jul 2025 19:15:28 +0200 Subject: [PATCH 08/24] update pkg --- interface/package.json | 14 +- interface/pnpm-lock.yaml | 712 +++++++++++++++++++-------------------- 2 files changed, 360 insertions(+), 366 deletions(-) diff --git a/interface/package.json b/interface/package.json index 7a09a5491..0bbe49137 100644 --- a/interface/package.json +++ b/interface/package.json @@ -38,28 +38,28 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", - "react-router": "^7.6.3", + "react-router": "^7.7.0", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", "typescript": "^5.8.3" }, "devDependencies": { "@babel/core": "^7.28.0", - "@eslint/js": "^9.30.1", + "@eslint/js": "^9.31.0", "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^24.0.12", + "@types/node": "^24.1.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "concurrently": "^9.2.0", - "eslint": "^9.30.1", - "eslint-config-prettier": "^10.1.5", + "eslint": "^9.31.0", + "eslint-config-prettier": "^10.1.8", "prettier": "^3.6.2", "rollup-plugin-visualizer": "^6.0.3", "terser": "^5.43.1", - "typescript-eslint": "^8.36.0", - "vite": "^7.0.4", + "typescript-eslint": "^8.38.0", + "vite": "^7.0.5", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" }, diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index aaa2cda44..e12a71bdb 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -57,8 +57,8 @@ importers: specifier: ^5.5.0 version: 5.5.0(react@19.1.0) react-router: - specifier: ^7.6.3 - version: 7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.7.0 + version: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-toastify: specifier: ^11.0.5 version: 11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -73,20 +73,20 @@ importers: specifier: ^7.28.0 version: 7.28.0 '@eslint/js': - specifier: ^9.30.1 - version: 9.30.1 + specifier: ^9.31.0 + version: 9.31.0 '@preact/compat': specifier: ^18.3.1 version: 18.3.1(preact@10.26.9) '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.26.9)(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) '@trivago/prettier-plugin-sort-imports': specifier: ^5.2.2 version: 5.2.2(prettier@3.6.2) '@types/node': - specifier: ^24.0.12 - version: 24.0.12 + specifier: ^24.1.0 + version: 24.1.0 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -97,32 +97,32 @@ importers: specifier: ^9.2.0 version: 9.2.0 eslint: - specifier: ^9.30.1 - version: 9.30.1 + specifier: ^9.31.0 + version: 9.31.0 eslint-config-prettier: - specifier: ^10.1.5 - version: 10.1.5(eslint@9.30.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@9.31.0) prettier: specifier: ^3.6.2 version: 3.6.2 rollup-plugin-visualizer: specifier: ^6.0.3 - version: 6.0.3(rollup@4.44.2) + version: 6.0.3(rollup@4.45.1) terser: specifier: ^5.43.1 version: 5.43.1 typescript-eslint: - specifier: ^8.36.0 - version: 8.36.0(eslint@9.30.1)(typescript@5.8.3) + specifier: ^8.38.0 + version: 8.38.0(eslint@9.31.0)(typescript@5.8.3) vite: - specifier: ^7.0.4 - version: 7.0.4(@types/node@24.0.12)(terser@5.43.1) + specifier: ^7.0.5 + version: 7.0.5(@types/node@24.1.0)(terser@5.43.1) vite-plugin-imagemin: specifier: ^0.6.1 - version: 0.6.1(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)) + version: 0.6.1(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)) + version: 5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) packages: @@ -231,8 +231,8 @@ packages: resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.0': - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} '@emotion/babel-plugin@11.13.5': @@ -289,68 +289,68 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.25.6': - resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} + '@esbuild/aix-ppc64@0.25.8': + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.6': - resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} + '@esbuild/android-arm64@0.25.8': + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.6': - resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} + '@esbuild/android-arm@0.25.8': + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.6': - resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} + '@esbuild/android-x64@0.25.8': + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.6': - resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} + '@esbuild/darwin-arm64@0.25.8': + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.6': - resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} + '@esbuild/darwin-x64@0.25.8': + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.6': - resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} + '@esbuild/freebsd-arm64@0.25.8': + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.6': - resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} + '@esbuild/freebsd-x64@0.25.8': + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.6': - resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} + '@esbuild/linux-arm64@0.25.8': + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.6': - resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} + '@esbuild/linux-arm@0.25.8': + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.6': - resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} + '@esbuild/linux-ia32@0.25.8': + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -361,92 +361,92 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.6': - resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} + '@esbuild/linux-loong64@0.25.8': + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.6': - resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} + '@esbuild/linux-mips64el@0.25.8': + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.6': - resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} + '@esbuild/linux-ppc64@0.25.8': + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.6': - resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} + '@esbuild/linux-riscv64@0.25.8': + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.6': - resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} + '@esbuild/linux-s390x@0.25.8': + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.6': - resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} + '@esbuild/linux-x64@0.25.8': + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.6': - resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} + '@esbuild/netbsd-arm64@0.25.8': + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.6': - resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} + '@esbuild/netbsd-x64@0.25.8': + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.6': - resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} + '@esbuild/openbsd-arm64@0.25.8': + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.6': - resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} + '@esbuild/openbsd-x64@0.25.8': + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.6': - resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + '@esbuild/openharmony-arm64@0.25.8': + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.6': - resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} + '@esbuild/sunos-x64@0.25.8': + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.6': - resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} + '@esbuild/win32-arm64@0.25.8': + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.6': - resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} + '@esbuild/win32-ia32@0.25.8': + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.6': - resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} + '@esbuild/win32-x64@0.25.8': + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -469,10 +469,6 @@ packages: resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -481,16 +477,16 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.30.1': - resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} + '@eslint/js@9.31.0': + resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.3': - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -682,103 +678,103 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/rollup-android-arm-eabi@4.44.2': - resolution: {integrity: sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==} + '@rollup/rollup-android-arm-eabi@4.45.1': + resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.44.2': - resolution: {integrity: sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==} + '@rollup/rollup-android-arm64@4.45.1': + resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.44.2': - resolution: {integrity: sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==} + '@rollup/rollup-darwin-arm64@4.45.1': + resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.44.2': - resolution: {integrity: sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==} + '@rollup/rollup-darwin-x64@4.45.1': + resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.44.2': - resolution: {integrity: sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==} + '@rollup/rollup-freebsd-arm64@4.45.1': + resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.44.2': - resolution: {integrity: sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==} + '@rollup/rollup-freebsd-x64@4.45.1': + resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.44.2': - resolution: {integrity: sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.44.2': - resolution: {integrity: sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==} + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.44.2': - resolution: {integrity: sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==} + '@rollup/rollup-linux-arm64-gnu@4.45.1': + resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.44.2': - resolution: {integrity: sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==} + '@rollup/rollup-linux-arm64-musl@4.45.1': + resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.44.2': - resolution: {integrity: sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==} + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.44.2': - resolution: {integrity: sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.44.2': - resolution: {integrity: sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==} + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.44.2': - resolution: {integrity: sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==} + '@rollup/rollup-linux-riscv64-musl@4.45.1': + resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.44.2': - resolution: {integrity: sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==} + '@rollup/rollup-linux-s390x-gnu@4.45.1': + resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.44.2': - resolution: {integrity: sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==} + '@rollup/rollup-linux-x64-gnu@4.45.1': + resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.44.2': - resolution: {integrity: sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==} + '@rollup/rollup-linux-x64-musl@4.45.1': + resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.44.2': - resolution: {integrity: sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==} + '@rollup/rollup-win32-arm64-msvc@4.45.1': + resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.44.2': - resolution: {integrity: sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==} + '@rollup/rollup-win32-ia32-msvc@4.45.1': + resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.44.2': - resolution: {integrity: sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==} + '@rollup/rollup-win32-x64-msvc@4.45.1': + resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} cpu: [x64] os: [win32] @@ -850,8 +846,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@24.0.12': - resolution: {integrity: sha512-LtOrbvDf5ndC9Xi+4QZjVL0woFymF/xSTKZKPgrrl7H7XoeDvnD+E2IclKVDyaK9UM756W/3BXqSU+JEHopA9g==} + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -878,63 +874,63 @@ packages: '@types/svgo@2.6.4': resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} - '@typescript-eslint/eslint-plugin@8.36.0': - resolution: {integrity: sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.36.0 + '@typescript-eslint/parser': ^8.38.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.36.0': - resolution: {integrity: sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==} + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.36.0': - resolution: {integrity: sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==} + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.36.0': - resolution: {integrity: sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==} + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.36.0': - resolution: {integrity: sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==} + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.36.0': - resolution: {integrity: sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==} + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.36.0': - resolution: {integrity: sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.36.0': - resolution: {integrity: sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==} + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.36.0': - resolution: {integrity: sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==} + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.36.0': - resolution: {integrity: sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==} + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -1319,8 +1315,8 @@ packages: duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - electron-to-chromium@1.5.182: - resolution: {integrity: sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==} + electron-to-chromium@1.5.190: + resolution: {integrity: sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1475,8 +1471,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.6: - resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} + esbuild@0.25.8: + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} hasBin: true @@ -1492,8 +1488,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@10.1.5: - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1510,8 +1506,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.30.1: - resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} + eslint@9.31.0: + resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2397,8 +2393,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pify@2.3.0: @@ -2499,8 +2495,8 @@ packages: react-is@19.1.0: resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} - react-router@7.6.3: - resolution: {integrity: sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==} + react-router@7.7.0: + resolution: {integrity: sha512-3FUYSwlvB/5wRJVTL/aavqHmfUKe0+Xm9MllkYgGo9eDwNdkvwlJGjpPxono1kCycLt6AnDTgjmXvK3/B4QGuw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -2599,8 +2595,8 @@ packages: rollup: optional: true - rollup@4.44.2: - resolution: {integrity: sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==} + rollup@4.45.1: + resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2898,8 +2894,8 @@ packages: peerDependencies: typescript: '>=3.5.1' - typescript-eslint@8.36.0: - resolution: {integrity: sha512-fTCqxthY+h9QbEgSIBfL9iV6CvKDFuoxg6bHPNpJ9HIUzS+jy2lCEyCmGyZRWEBSaykqcDPf1SJ+BfCI8DRopA==} + typescript-eslint@8.38.0: + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2970,8 +2966,8 @@ packages: vite: optional: true - vite@7.0.4: - resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} + vite@7.0.5: + resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3100,7 +3096,7 @@ snapshots: '@babel/parser': 7.28.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -3112,14 +3108,14 @@ snapshots: '@babel/generator@7.28.0': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -3134,7 +3130,7 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -3158,11 +3154,11 @@ snapshots: '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': dependencies: @@ -3183,7 +3179,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -3193,7 +3189,7 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 '@babel/traverse@7.28.0': dependencies: @@ -3202,12 +3198,12 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/types@7.28.0': + '@babel/types@7.28.1': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -3295,90 +3291,90 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.25.6': + '@esbuild/aix-ppc64@0.25.8': optional: true - '@esbuild/android-arm64@0.25.6': + '@esbuild/android-arm64@0.25.8': optional: true - '@esbuild/android-arm@0.25.6': + '@esbuild/android-arm@0.25.8': optional: true - '@esbuild/android-x64@0.25.6': + '@esbuild/android-x64@0.25.8': optional: true - '@esbuild/darwin-arm64@0.25.6': + '@esbuild/darwin-arm64@0.25.8': optional: true - '@esbuild/darwin-x64@0.25.6': + '@esbuild/darwin-x64@0.25.8': optional: true - '@esbuild/freebsd-arm64@0.25.6': + '@esbuild/freebsd-arm64@0.25.8': optional: true - '@esbuild/freebsd-x64@0.25.6': + '@esbuild/freebsd-x64@0.25.8': optional: true - '@esbuild/linux-arm64@0.25.6': + '@esbuild/linux-arm64@0.25.8': optional: true - '@esbuild/linux-arm@0.25.6': + '@esbuild/linux-arm@0.25.8': optional: true - '@esbuild/linux-ia32@0.25.6': + '@esbuild/linux-ia32@0.25.8': optional: true '@esbuild/linux-loong64@0.14.54': optional: true - '@esbuild/linux-loong64@0.25.6': + '@esbuild/linux-loong64@0.25.8': optional: true - '@esbuild/linux-mips64el@0.25.6': + '@esbuild/linux-mips64el@0.25.8': optional: true - '@esbuild/linux-ppc64@0.25.6': + '@esbuild/linux-ppc64@0.25.8': optional: true - '@esbuild/linux-riscv64@0.25.6': + '@esbuild/linux-riscv64@0.25.8': optional: true - '@esbuild/linux-s390x@0.25.6': + '@esbuild/linux-s390x@0.25.8': optional: true - '@esbuild/linux-x64@0.25.6': + '@esbuild/linux-x64@0.25.8': optional: true - '@esbuild/netbsd-arm64@0.25.6': + '@esbuild/netbsd-arm64@0.25.8': optional: true - '@esbuild/netbsd-x64@0.25.6': + '@esbuild/netbsd-x64@0.25.8': optional: true - '@esbuild/openbsd-arm64@0.25.6': + '@esbuild/openbsd-arm64@0.25.8': optional: true - '@esbuild/openbsd-x64@0.25.6': + '@esbuild/openbsd-x64@0.25.8': optional: true - '@esbuild/openharmony-arm64@0.25.6': + '@esbuild/openharmony-arm64@0.25.8': optional: true - '@esbuild/sunos-x64@0.25.6': + '@esbuild/sunos-x64@0.25.8': optional: true - '@esbuild/win32-arm64@0.25.6': + '@esbuild/win32-arm64@0.25.8': optional: true - '@esbuild/win32-ia32@0.25.6': + '@esbuild/win32-ia32@0.25.8': optional: true - '@esbuild/win32-x64@0.25.6': + '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0)': dependencies: - eslint: 9.30.1 + eslint: 9.31.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3393,10 +3389,6 @@ snapshots: '@eslint/config-helpers@0.3.0': {} - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 @@ -3415,11 +3407,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.30.1': {} + '@eslint/js@9.31.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.3': + '@eslint/plugin-kit@0.3.4': dependencies: '@eslint/core': 0.15.1 levn: 0.4.1 @@ -3573,18 +3565,18 @@ snapshots: dependencies: preact: 10.26.9 - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.26.9)(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.26.9)(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)) + '@prefresh/vite': 2.4.8(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.0.4(@types/node@24.0.12)(terser@5.43.1) - vite-prerender-plugin: 0.5.11(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)) + vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) + vite-prerender-plugin: 0.5.11(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) transitivePeerDependencies: - preact - supports-color @@ -3597,7 +3589,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.8(preact@10.26.9)(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1))': + '@prefresh/vite@2.4.8(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -3605,7 +3597,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.26.9 - vite: 7.0.4(@types/node@24.0.12)(terser@5.43.1) + vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: - supports-color @@ -3614,64 +3606,64 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/rollup-android-arm-eabi@4.44.2': + '@rollup/rollup-android-arm-eabi@4.45.1': optional: true - '@rollup/rollup-android-arm64@4.44.2': + '@rollup/rollup-android-arm64@4.45.1': optional: true - '@rollup/rollup-darwin-arm64@4.44.2': + '@rollup/rollup-darwin-arm64@4.45.1': optional: true - '@rollup/rollup-darwin-x64@4.44.2': + '@rollup/rollup-darwin-x64@4.45.1': optional: true - '@rollup/rollup-freebsd-arm64@4.44.2': + '@rollup/rollup-freebsd-arm64@4.45.1': optional: true - '@rollup/rollup-freebsd-x64@4.44.2': + '@rollup/rollup-freebsd-x64@4.45.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.44.2': + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.44.2': + '@rollup/rollup-linux-arm-musleabihf@4.45.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.44.2': + '@rollup/rollup-linux-arm64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.44.2': + '@rollup/rollup-linux-arm64-musl@4.45.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.44.2': + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.44.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.44.2': + '@rollup/rollup-linux-riscv64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.44.2': + '@rollup/rollup-linux-riscv64-musl@4.45.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.44.2': + '@rollup/rollup-linux-s390x-gnu@4.45.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.44.2': + '@rollup/rollup-linux-x64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-x64-musl@4.44.2': + '@rollup/rollup-linux-x64-musl@4.45.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.44.2': + '@rollup/rollup-win32-arm64-msvc@4.45.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.44.2': + '@rollup/rollup-win32-ia32-msvc@4.45.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.44.2': + '@rollup/rollup-win32-x64-msvc@4.45.1': optional: true '@sindresorhus/is@0.7.0': {} @@ -3690,7 +3682,7 @@ snapshots: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.1 javascript-natural-sort: 0.7.1 lodash: 4.17.21 prettier: 3.6.2 @@ -3704,7 +3696,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.0.12 + '@types/node': 24.1.0 '@types/imagemin-gifsicle@7.0.4': dependencies: @@ -3733,19 +3725,19 @@ snapshots: '@types/imagemin@7.0.1': dependencies: - '@types/node': 24.0.12 + '@types/node': 24.1.0 '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 24.0.12 + '@types/node': 24.1.0 '@types/minimatch@6.0.0': dependencies: minimatch: 10.0.3 - '@types/node@24.0.12': + '@types/node@24.1.0': dependencies: undici-types: 7.8.0 @@ -3767,21 +3759,21 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 24.0.12 + '@types/node': 24.1.0 '@types/svgo@2.6.4': dependencies: - '@types/node': 24.0.12 + '@types/node': 24.1.0 - '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/type-utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.36.0 - eslint: 9.30.1 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.31.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -3790,55 +3782,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.31.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.36.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.30.1 + eslint: 9.31.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.36.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) - '@typescript-eslint/types': 8.36.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.36.0': + '@typescript-eslint/scope-manager@8.38.0': dependencies: - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/visitor-keys': 8.36.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.36.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.36.0(eslint@9.30.1)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) debug: 4.4.1 - eslint: 9.30.1 + eslint: 9.31.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.36.0': {} + '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.36.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.36.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3) - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/visitor-keys': 8.36.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -3849,20 +3842,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.36.0(eslint@9.30.1)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.31.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) - '@typescript-eslint/scope-manager': 8.36.0 - '@typescript-eslint/types': 8.36.0 - '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) - eslint: 9.30.1 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + eslint: 9.31.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.36.0': + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 8.36.0 + '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 acorn-jsx@5.3.2(acorn@8.15.0): @@ -3983,7 +3976,7 @@ snapshots: browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.182 + electron-to-chromium: 1.5.190 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -4329,7 +4322,7 @@ snapshots: duplexer3@0.1.5: {} - electron-to-chromium@1.5.182: {} + electron-to-chromium@1.5.190: {} emoji-regex@8.0.0: {} @@ -4437,34 +4430,34 @@ snapshots: esbuild-windows-64: 0.14.54 esbuild-windows-arm64: 0.14.54 - esbuild@0.25.6: + esbuild@0.25.8: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.6 - '@esbuild/android-arm': 0.25.6 - '@esbuild/android-arm64': 0.25.6 - '@esbuild/android-x64': 0.25.6 - '@esbuild/darwin-arm64': 0.25.6 - '@esbuild/darwin-x64': 0.25.6 - '@esbuild/freebsd-arm64': 0.25.6 - '@esbuild/freebsd-x64': 0.25.6 - '@esbuild/linux-arm': 0.25.6 - '@esbuild/linux-arm64': 0.25.6 - '@esbuild/linux-ia32': 0.25.6 - '@esbuild/linux-loong64': 0.25.6 - '@esbuild/linux-mips64el': 0.25.6 - '@esbuild/linux-ppc64': 0.25.6 - '@esbuild/linux-riscv64': 0.25.6 - '@esbuild/linux-s390x': 0.25.6 - '@esbuild/linux-x64': 0.25.6 - '@esbuild/netbsd-arm64': 0.25.6 - '@esbuild/netbsd-x64': 0.25.6 - '@esbuild/openbsd-arm64': 0.25.6 - '@esbuild/openbsd-x64': 0.25.6 - '@esbuild/openharmony-arm64': 0.25.6 - '@esbuild/sunos-x64': 0.25.6 - '@esbuild/win32-arm64': 0.25.6 - '@esbuild/win32-ia32': 0.25.6 - '@esbuild/win32-x64': 0.25.6 + '@esbuild/aix-ppc64': 0.25.8 + '@esbuild/android-arm': 0.25.8 + '@esbuild/android-arm64': 0.25.8 + '@esbuild/android-x64': 0.25.8 + '@esbuild/darwin-arm64': 0.25.8 + '@esbuild/darwin-x64': 0.25.8 + '@esbuild/freebsd-arm64': 0.25.8 + '@esbuild/freebsd-x64': 0.25.8 + '@esbuild/linux-arm': 0.25.8 + '@esbuild/linux-arm64': 0.25.8 + '@esbuild/linux-ia32': 0.25.8 + '@esbuild/linux-loong64': 0.25.8 + '@esbuild/linux-mips64el': 0.25.8 + '@esbuild/linux-ppc64': 0.25.8 + '@esbuild/linux-riscv64': 0.25.8 + '@esbuild/linux-s390x': 0.25.8 + '@esbuild/linux-x64': 0.25.8 + '@esbuild/netbsd-arm64': 0.25.8 + '@esbuild/netbsd-x64': 0.25.8 + '@esbuild/openbsd-arm64': 0.25.8 + '@esbuild/openbsd-x64': 0.25.8 + '@esbuild/openharmony-arm64': 0.25.8 + '@esbuild/sunos-x64': 0.25.8 + '@esbuild/win32-arm64': 0.25.8 + '@esbuild/win32-ia32': 0.25.8 + '@esbuild/win32-x64': 0.25.8 escalade@3.2.0: {} @@ -4472,9 +4465,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.5(eslint@9.30.1): + eslint-config-prettier@10.1.8(eslint@9.31.0): dependencies: - eslint: 9.30.1 + eslint: 9.31.0 eslint-scope@8.4.0: dependencies: @@ -4485,16 +4478,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.30.1: + eslint@9.31.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.1 - '@eslint/plugin-kit': 0.3.3 + '@eslint/js': 9.31.0 + '@eslint/plugin-kit': 0.3.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -4636,9 +4629,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.6(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 figures@1.7.0: dependencies: @@ -5407,7 +5400,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pify@2.3.0: {} @@ -5487,7 +5480,7 @@ snapshots: react-is@19.1.0: {} - react-router@7.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: cookie: 1.0.2 react: 19.1.0 @@ -5576,39 +5569,39 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-visualizer@6.0.3(rollup@4.44.2): + rollup-plugin-visualizer@6.0.3(rollup@4.45.1): dependencies: open: 8.4.2 - picomatch: 4.0.2 + picomatch: 4.0.3 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.44.2 + rollup: 4.45.1 - rollup@4.44.2: + rollup@4.45.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.44.2 - '@rollup/rollup-android-arm64': 4.44.2 - '@rollup/rollup-darwin-arm64': 4.44.2 - '@rollup/rollup-darwin-x64': 4.44.2 - '@rollup/rollup-freebsd-arm64': 4.44.2 - '@rollup/rollup-freebsd-x64': 4.44.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.44.2 - '@rollup/rollup-linux-arm-musleabihf': 4.44.2 - '@rollup/rollup-linux-arm64-gnu': 4.44.2 - '@rollup/rollup-linux-arm64-musl': 4.44.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.44.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.44.2 - '@rollup/rollup-linux-riscv64-gnu': 4.44.2 - '@rollup/rollup-linux-riscv64-musl': 4.44.2 - '@rollup/rollup-linux-s390x-gnu': 4.44.2 - '@rollup/rollup-linux-x64-gnu': 4.44.2 - '@rollup/rollup-linux-x64-musl': 4.44.2 - '@rollup/rollup-win32-arm64-msvc': 4.44.2 - '@rollup/rollup-win32-ia32-msvc': 4.44.2 - '@rollup/rollup-win32-x64-msvc': 4.44.2 + '@rollup/rollup-android-arm-eabi': 4.45.1 + '@rollup/rollup-android-arm64': 4.45.1 + '@rollup/rollup-darwin-arm64': 4.45.1 + '@rollup/rollup-darwin-x64': 4.45.1 + '@rollup/rollup-freebsd-arm64': 4.45.1 + '@rollup/rollup-freebsd-x64': 4.45.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 + '@rollup/rollup-linux-arm-musleabihf': 4.45.1 + '@rollup/rollup-linux-arm64-gnu': 4.45.1 + '@rollup/rollup-linux-arm64-musl': 4.45.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-musl': 4.45.1 + '@rollup/rollup-linux-s390x-gnu': 4.45.1 + '@rollup/rollup-linux-x64-gnu': 4.45.1 + '@rollup/rollup-linux-x64-musl': 4.45.1 + '@rollup/rollup-win32-arm64-msvc': 4.45.1 + '@rollup/rollup-win32-ia32-msvc': 4.45.1 + '@rollup/rollup-win32-x64-msvc': 4.45.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -5821,8 +5814,8 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 to-buffer@1.2.1: dependencies: @@ -5872,12 +5865,13 @@ snapshots: dependencies: typescript: 5.8.3 - typescript-eslint@8.36.0(eslint@9.30.1)(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.31.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3) - '@typescript-eslint/parser': 8.36.0(eslint@9.30.1)(typescript@5.8.3) - '@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) - eslint: 9.30.1 + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + eslint: 9.31.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5922,7 +5916,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-plugin-imagemin@0.6.1(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)): + vite-plugin-imagemin@0.6.1(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)): dependencies: '@types/imagemin': 7.0.1 '@types/imagemin-gifsicle': 7.0.4 @@ -5947,11 +5941,11 @@ snapshots: imagemin-webp: 6.1.0 jpegtran-bin: 6.0.1 pathe: 0.2.0 - vite: 7.0.4(@types/node@24.0.12)(terser@5.43.1) + vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.11(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)): + vite-prerender-plugin@0.5.11(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.17 @@ -5959,29 +5953,29 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 7.0.4(@types/node@24.0.12)(terser@5.43.1) + vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.4(@types/node@24.0.12)(terser@5.43.1)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)): dependencies: debug: 4.4.1 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 7.0.4(@types/node@24.0.12)(terser@5.43.1) + vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: - supports-color - typescript - vite@7.0.4(@types/node@24.0.12)(terser@5.43.1): + vite@7.0.5(@types/node@24.1.0)(terser@5.43.1): dependencies: - esbuild: 0.25.6 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + esbuild: 0.25.8 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.44.2 + rollup: 4.45.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.12 + '@types/node': 24.1.0 fsevents: 2.3.3 terser: 5.43.1 From c27134f185be6d415e66ed359d7089df607a7789 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 23 Jul 2025 20:39:24 +0200 Subject: [PATCH 09/24] fix gpio for core voltage detect --- src/core/analogsensor.cpp | 2 +- src/core/temperaturesensor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index e63c94788..241acf08d 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -25,7 +25,7 @@ uuid::log::Logger AnalogSensor::logger_{F_(analogsensor), uuid::log::Facility::D void AnalogSensor::start(const bool factory_settings) { // if (factory_settings && EMSESP::nvs_.getString("boot").equals("E32V3") && EMSESP::nvs_.getString("hwrevision").equals("3.0")) { - if (factory_settings && analogReadMilliVolts(35) > 800) { // core voltage > 3V + if (factory_settings && analogReadMilliVolts(39) > 800) { // core voltage > 3V EMSESP::webCustomizationService.update([&](WebCustomization & settings) { auto newSensor = AnalogCustomization(); newSensor.gpio = 39; diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index 140725204..a567e8aa9 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -34,7 +34,7 @@ uuid::log::Logger TemperatureSensor::logger_{F_(temperaturesensor), uuid::log::F // start the 1-wire void TemperatureSensor::start(const bool factory_settings) { // set_internal_ = factory_settings && EMSESP::nvs_.getString("boot").equals("E32V3") && EMSESP::nvs_.getString("hwrevision").equals("3.0"); - set_internal_ = factory_settings && analogReadMilliVolts(35) > 800; // core voltage > 3V + set_internal_ = factory_settings && analogReadMilliVolts(39) > 800; // core voltage > 3V reload(); if (!dallas_gpio_) { From 2aa691212c41b82179227d8c1541f2b0b782284a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 28 Jul 2025 13:47:52 +0200 Subject: [PATCH 10/24] add command system/fuse/mfg, board E32V2.2, check systemvolatage >2.6V --- interface/src/app/main/types.ts | 2 +- src/core/analogsensor.cpp | 8 +++---- src/core/helpers.cpp | 7 +++++- src/core/system.cpp | 40 ++++++++++++++++++++++++++++----- src/core/temperaturesensor.cpp | 12 +++++----- src/web/WebSettingsService.cpp | 4 ++-- 6 files changed, 55 insertions(+), 18 deletions(-) diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index 272228d18..924d57a5a 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -259,7 +259,7 @@ export const BOARD_PROFILES: BoardProfiles = { S32S3: 'BBQKees Gateway S3', E32: 'BBQKees Gateway E32', E32V2: 'BBQKees Gateway E32 V2', - E32V3: 'BBQKees Gateway E32 V3', + E32V2_2: 'BBQKees Gateway E32 V2.2', NODEMCU: 'NodeMCU 32S', 'MH-ET': 'MH-ET Live D1 Mini', LOLIN: 'Lolin D32', diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index 241acf08d..dadebe4e4 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -24,8 +24,8 @@ namespace emsesp { uuid::log::Logger AnalogSensor::logger_{F_(analogsensor), uuid::log::Facility::DAEMON}; void AnalogSensor::start(const bool factory_settings) { - // if (factory_settings && EMSESP::nvs_.getString("boot").equals("E32V3") && EMSESP::nvs_.getString("hwrevision").equals("3.0")) { - if (factory_settings && analogReadMilliVolts(39) > 800) { // core voltage > 3V + // if (factory_settings && EMSESP::nvs_.getString("boot").equals("E32V2_2") && EMSESP::nvs_.getString("hwrevision").equals("3.0")) { + if (factory_settings && analogReadMilliVolts(39) > 700) { // core voltage > 2.6V EMSESP::webCustomizationService.update([&](WebCustomization & settings) { auto newSensor = AnalogCustomization(); newSensor.gpio = 39; @@ -35,8 +35,8 @@ void AnalogSensor::start(const bool factory_settings) { newSensor.uom = DeviceValueUOM::VOLTS; newSensor.type = AnalogType::ADC; settings.analogCustomizations.push_back(newSensor); - newSensor.gpio = 36; - newSensor.name = "supply_voltage"; + newSensor.gpio = 36; + newSensor.name = "supply_voltage"; newSensor.factor = 0.017; // Divider 24k - 1,5k settings.analogCustomizations.push_back(newSensor); return StateUpdateResult::CHANGED; // persist the change diff --git a/src/core/helpers.cpp b/src/core/helpers.cpp index 685181bce..911ca5876 100644 --- a/src/core/helpers.cpp +++ b/src/core/helpers.cpp @@ -524,7 +524,12 @@ bool Helpers::value2number(const char * value, int & value_i, const int min, con return false; } - value_i = atoi(value); + if (strlen(value) > 2 && value[0] == '0' && value[1] == 'x') { + value_i = hextoint(value); + } else { + value_i = atoi(value); + } + if (value_i >= min && value_i <= max) { return true; } diff --git a/src/core/system.cpp b/src/core/system.cpp index 5a4186d57..4797b2d5e 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -50,6 +50,8 @@ #include +#include "esp_efuse.h" + namespace emsesp { // Languages supported. Note: the order is important @@ -1423,6 +1425,13 @@ bool System::command_service(const char * cmd, const char * value) { ok = true; } } + int n; + if (!ok && Helpers::value2number(value, n)) { + if (!strcmp(cmd, "fuse/mfg")) { // && esp_efuse_read_reg(EFUSE_BLK3, 0) == 0) { + ok = esp_efuse_write_reg(EFUSE_BLK3, 0, (uint32_t)n) == ESP_OK; + LOG_INFO("fuse programed with value '%X': %s", n, ok ? "successful" : "failed"); + } + } if (ok) { LOG_INFO("System command '%s' with value '%s'", cmd, value); @@ -1877,8 +1886,8 @@ bool System::load_board_profile(std::vector & data, const std::string & data = {2, 4, 5, 17, 33, PHY_type::PHY_TYPE_LAN8720, 16, 1, 0, 0}; // BBQKees Gateway E32 } else if (board_profile == "E32V2") { data = {2, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1, 0}; // BBQKees Gateway E32 V2 - } else if (board_profile == "E32V3") { - data = {32, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1, 1}; // BBQKees Gateway E32 V3 + } else if (board_profile == "E32V2_2") { + data = {32, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1, 1}; // BBQKees Gateway E32 V2.2, rgb led } else if (board_profile == "MH-ET") { data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // MH-ET Live D1 Mini } else if (board_profile == "NODEMCU") { @@ -2029,6 +2038,7 @@ bool System::ntp_connected() { // see if its a BBQKees Gateway by checking the nvs values String System::getBBQKeesGatewayDetails() { #ifndef EMSESP_STANDALONE + /* if (!EMSESP::nvs_.isKey("mfg")) { return ""; } @@ -2042,6 +2052,26 @@ String System::getBBQKeesGatewayDetails() { } return "BBQKees Gateway Model " + EMSESP::nvs_.getString("model") + " v" + EMSESP::nvs_.getString("hwrevision") + "/" + EMSESP::nvs_.getString("batch"); +*/ + union { + struct { + uint32_t no : 4; + uint32_t month : 4; + uint32_t year : 8; + uint32_t rev_minor : 4; + uint32_t rev_major : 4; + uint32_t model : 4; + uint32_t mfg : 4; + }; + uint32_t reg; + } gw; + gw.reg = esp_efuse_read_reg(EFUSE_BLK3, 0); + const char * mfg[] = {"unknown", "BBQKees Electronics", "", "", "", "", "", ""}; + const char * model[] = {"unknown", "S3", "E32V2", "E32V2.2", "S32", "E32", "", "", ""}; + + return gw.reg ? String(mfg[gw.mfg]) + " " + String(model[gw.model]) + " rev." + String(gw.rev_major) + "." + String(gw.rev_minor) + "/" + + String(2000 + gw.year) + "-" + String(gw.month) + "-" + String(gw.no) + " (fuse 0x" + String(gw.reg, 16) + ")" + : ""; #else return ""; #endif @@ -2160,7 +2190,7 @@ bool System::readCommand(const char * data) { // first check deviceID if ((p = strtok(data_args, " ,"))) { // delimiter comma or space - strlcpy(value, p, 10); // get string + strlcpy(value, p, sizeof(value)); // get string device_id = (uint8_t)Helpers::hextoint(value); // convert hex to int if (!EMSESP::valid_device(device_id)) { LOG_ERROR("Invalid device ID (0x%02X) in read command", device_id); @@ -2171,8 +2201,8 @@ bool System::readCommand(const char * data) { // iterate until end uint8_t num_args = 0; while (p != 0) { - if ((p = strtok(nullptr, " ,"))) { // delimiter comma or space - strlcpy(value, p, 10); // get string + if ((p = strtok(nullptr, " ,"))) { // delimiter comma or space + strlcpy(value, p, sizeof(value)); // get string if (num_args == 0) { type_id = (uint16_t)Helpers::hextoint(value); // convert hex to int } else if (num_args == 1) { diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index a567e8aa9..af03f2831 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -33,8 +33,8 @@ uuid::log::Logger TemperatureSensor::logger_{F_(temperaturesensor), uuid::log::F // start the 1-wire void TemperatureSensor::start(const bool factory_settings) { - // set_internal_ = factory_settings && EMSESP::nvs_.getString("boot").equals("E32V3") && EMSESP::nvs_.getString("hwrevision").equals("3.0"); - set_internal_ = factory_settings && analogReadMilliVolts(39) > 800; // core voltage > 3V + // set_internal_ = factory_settings && EMSESP::nvs_.getString("boot").equals("E32V2_2") && EMSESP::nvs_.getString("hwrevision").equals("3.0"); + set_internal_ = factory_settings && analogReadMilliVolts(39) > 700; // core voltage > 2.6V reload(); if (!dallas_gpio_) { @@ -205,9 +205,11 @@ void TemperatureSensor::loop() { set_internal_ = false; Sensor * s = &sensors_[0]; if (firstscan_ > 1) { - for (auto s1 : sensors_) { - if (EMSESP::nvs_.getString("intTemp").equals(s1.id().c_str())) { - s = &s1; + std::string s_nvs = EMSESP::nvs_.getString("intTemp").c_str(); + for (uint8_t i = 0; i < firstscan_; i++) { + if (s_nvs == sensors_[i].id()) { + s = &sensors_[i]; + break; } } } diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index c23852482..849484949 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -180,8 +180,8 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { if (ETH.begin(ETH_PHY_LAN8720, 0, 23, 18, 15, ETH_CLOCK_GPIO0_OUT)) { #endif - if (analogReadMilliVolts(39) > 800) { // core voltage > 3V - settings.board_profile = "E32V3"; // Ethernet, PSRAM, internal sensors + if (analogReadMilliVolts(39) > 700) { // core voltage > 2.6V + settings.board_profile = "E32V2_2"; // Ethernet, PSRAM, internal sensors } else { settings.board_profile = "E32V2"; // Ethernet and PSRAM } From 69964482f875ca885b2b832929054eeb8702cc7a Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 31 Jul 2025 18:55:23 +0200 Subject: [PATCH 11/24] AsyncTCP 3.4.6, check log queue for overflow --- platformio.ini | 14 +++++++++----- src/web/WebLogService.cpp | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/platformio.ini b/platformio.ini index 59cd5902b..34e83e684 100644 --- a/platformio.ini +++ b/platformio.ini @@ -42,11 +42,15 @@ build_flags = -D CONFIG_ASYNC_TCP_RUNNING_CORE=1 ; force async_tcp task to be on same core as Arduino app (default is any core) -D CONFIG_ASYNC_TCP_STACK_SIZE=6144 ; stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k - (default is 16K) ; ESPAsyncWebServer - -D WS_MAX_QUEUED_MESSAGES=0 ; log messages are already queued in ems-esp + ; -D WS_MAX_QUEUED_MESSAGES=0 ; not used, default 8 + ; -D SSE_MAX_QUEUED_MESSAGES=1 ; for log messages, default 32 -D CORE_DEBUG_LEVEL=0 -D EMSESP_SCHEDULER_RUNNING_CORE=1 - -D EMSESP_SCHEDULER_STACKSIZE=6144 - -D EMSESP_MQTT_RUNNING_CORE=1 + -D EMSESP_SCHEDULER_STACKSIZE=8192 + -D EMSESP_MQTT_RUNNING_CORE=1 ; default 1 + ; -D EMSESP_MQTT_STACKSIZE=5120 ; default + -D EMSESP_UART_RUNNING_CORE=1 ; default any core + ; -D EMSESP_UART_STACKSIZE=2560 ; default unbuild_flags = ${common.core_unbuild_flags} @@ -104,8 +108,8 @@ build_type = release board_build.filesystem = littlefs lib_deps = bblanchon/ArduinoJson @ 7.4.2 - ESP32Async/AsyncTCP @ 3.4.2 - ESP32Async/ESPAsyncWebServer @ 3.7.9 + ESP32Async/AsyncTCP @ 3.4.6 + ESP32Async/ESPAsyncWebServer @ 3.7.10 https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 ; diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index 7921812b1..214204f2c 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -164,7 +164,7 @@ void WebLogService::show(Shell & shell) { } void WebLogService::loop() { - if (!events_.count() || log_messages_.empty()) { + if (!events_.count() || log_messages_.empty() || events_.avgPacketsWaiting() >= SSE_MAX_QUEUED_MESSAGES) { return; } From d514e67eb8c6d42f7c5d86d79ad3daca1a1b28b0 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 31 Jul 2025 18:55:37 +0200 Subject: [PATCH 12/24] update pkg --- interface/package.json | 20 +- interface/pnpm-lock.yaml | 632 +++++++++++++++++++-------------------- 2 files changed, 326 insertions(+), 326 deletions(-) diff --git a/interface/package.json b/interface/package.json index 0bbe49137..a87398be6 100644 --- a/interface/package.json +++ b/interface/package.json @@ -34,34 +34,34 @@ "jwt-decode": "^4.0.0", "magic-string": "^0.30.17", "mime-types": "^3.0.1", - "preact": "^10.26.9", - "react": "^19.1.0", - "react-dom": "^19.1.0", + "preact": "^10.27.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", "react-icons": "^5.5.0", - "react-router": "^7.7.0", + "react-router": "^7.7.1", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", "typescript": "^5.8.3" }, "devDependencies": { "@babel/core": "^7.28.0", - "@eslint/js": "^9.31.0", + "@eslint/js": "^9.32.0", "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/node": "^24.1.0", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", "concurrently": "^9.2.0", - "eslint": "^9.31.0", + "eslint": "^9.32.0", "eslint-config-prettier": "^10.1.8", "prettier": "^3.6.2", "rollup-plugin-visualizer": "^6.0.3", "terser": "^5.43.1", "typescript-eslint": "^8.38.0", - "vite": "^7.0.5", + "vite": "^7.0.6", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" }, - "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad" + "packageManager": "pnpm@10.14.0" } diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index e12a71bdb..7a41a1e14 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -13,19 +13,19 @@ importers: version: 2.2.1(alova@3.3.4) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.8)(react@19.1.0) + version: 11.14.0(@types/react@19.1.9)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) '@mui/icons-material': specifier: ^7.2.0 - version: 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + version: 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) '@mui/material': specifier: ^7.2.0 - version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@table-library/react-table-library': specifier: 4.1.15 - version: 4.1.15(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 4.1.15(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) alova: specifier: 3.3.4 version: 3.3.4 @@ -45,23 +45,23 @@ importers: specifier: ^3.0.1 version: 3.0.1 preact: - specifier: ^10.26.9 - version: 10.26.9 + specifier: ^10.27.0 + version: 10.27.0 react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-icons: specifier: ^5.5.0 - version: 5.5.0(react@19.1.0) + version: 5.5.0(react@19.1.1) react-router: - specifier: ^7.7.0 - version: 7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.7.1 + version: 7.7.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react-toastify: specifier: ^11.0.5 - version: 11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 11.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) typesafe-i18n: specifier: ^5.26.2 version: 5.26.2(typescript@5.8.3) @@ -73,14 +73,14 @@ importers: specifier: ^7.28.0 version: 7.28.0 '@eslint/js': - specifier: ^9.31.0 - version: 9.31.0 + specifier: ^9.32.0 + version: 9.32.0 '@preact/compat': specifier: ^18.3.1 - version: 18.3.1(preact@10.26.9) + version: 18.3.1(preact@10.27.0) '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.0)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) '@trivago/prettier-plugin-sort-imports': specifier: ^5.2.2 version: 5.2.2(prettier@3.6.2) @@ -88,41 +88,41 @@ importers: specifier: ^24.1.0 version: 24.1.0 '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.9 + version: 19.1.9 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.9) concurrently: specifier: ^9.2.0 version: 9.2.0 eslint: - specifier: ^9.31.0 - version: 9.31.0 + specifier: ^9.32.0 + version: 9.32.0 eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.31.0) + version: 10.1.8(eslint@9.32.0) prettier: specifier: ^3.6.2 version: 3.6.2 rollup-plugin-visualizer: specifier: ^6.0.3 - version: 6.0.3(rollup@4.45.1) + version: 6.0.3(rollup@4.46.2) terser: specifier: ^5.43.1 version: 5.43.1 typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.31.0)(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@24.1.0)(terser@5.43.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@24.1.0)(terser@5.43.1) vite-plugin-imagemin: specifier: ^0.6.1 - version: 0.6.1(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) + version: 0.6.1(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) + version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) packages: @@ -192,8 +192,8 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + '@babel/helpers@7.28.2': + resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} engines: {node: '>=6.9.0'} '@babel/parser@7.28.0': @@ -219,8 +219,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.27.6': - resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} + '@babel/runtime@7.28.2': + resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': @@ -231,8 +231,8 @@ packages: resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.1': - resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} '@emotion/babel-plugin@11.13.5': @@ -477,8 +477,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.31.0': - resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -678,103 +678,103 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/rollup-android-arm-eabi@4.45.1': - resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.45.1': - resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.45.1': - resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.45.1': - resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.45.1': - resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.45.1': - resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': - resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.45.1': - resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.45.1': - resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.45.1': - resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': - resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': - resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.45.1': - resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.45.1': - resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.45.1': - resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.45.1': - resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.45.1': - resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.45.1': - resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.45.1': - resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.45.1': - resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} cpu: [x64] os: [win32] @@ -855,8 +855,8 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} peerDependencies: '@types/react': ^19.0.0 @@ -865,8 +865,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + '@types/react@19.1.9': + resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -1095,8 +1095,8 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + caniuse-lite@1.0.30001731: + resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -1315,8 +1315,8 @@ packages: duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - electron-to-chromium@1.5.190: - resolution: {integrity: sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==} + electron-to-chromium@1.5.193: + resolution: {integrity: sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1506,8 +1506,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.31.0: - resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2430,8 +2430,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.9: - resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} + preact@10.27.0: + resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2479,10 +2479,10 @@ packages: rate-limiter-flexible@5.0.5: resolution: {integrity: sha512-+/dSQfo+3FYwYygUs/V2BBdwGa9nFtakDwKt4l0bnvNB53TNT++QSFewwHX9qXrZJuMe9j+TUaU21lm5ARgqdQ==} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^19.1.0 + react: ^19.1.1 react-icons@5.5.0: resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} @@ -2492,11 +2492,11 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@19.1.0: - resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} + react-is@19.1.1: + resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} - react-router@7.7.0: - resolution: {integrity: sha512-3FUYSwlvB/5wRJVTL/aavqHmfUKe0+Xm9MllkYgGo9eDwNdkvwlJGjpPxono1kCycLt6AnDTgjmXvK3/B4QGuw==} + react-router@7.7.1: + resolution: {integrity: sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -2530,8 +2530,8 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} read-pkg-up@1.0.1: @@ -2595,8 +2595,8 @@ packages: rollup: optional: true - rollup@4.45.1: - resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2704,9 +2704,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -2966,8 +2966,8 @@ packages: vite: optional: true - vite@7.0.5: - resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} + vite@7.0.6: + resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3092,11 +3092,11 @@ snapshots: '@babel/generator': 7.28.0 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.27.6 + '@babel/helpers': 7.28.2 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -3108,14 +3108,14 @@ snapshots: '@babel/generator@7.28.0': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -3130,7 +3130,7 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -3151,14 +3151,14 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.6': + '@babel/helpers@7.28.2': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': dependencies: @@ -3179,17 +3179,17 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/runtime@7.27.6': {} + '@babel/runtime@7.28.2': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 '@babel/traverse@7.28.0': dependencies: @@ -3198,12 +3198,12 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/types@7.28.1': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -3211,7 +3211,7 @@ snapshots: '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -3240,19 +3240,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 transitivePeerDependencies: - supports-color @@ -3266,26 +3266,26 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 transitivePeerDependencies: - supports-color '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 '@emotion/utils@1.4.2': {} @@ -3372,9 +3372,9 @@ snapshots: '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': dependencies: - eslint: 9.31.0 + eslint: 9.32.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3407,7 +3407,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.31.0': {} + '@eslint/js@9.32.0': {} '@eslint/object-schema@2.1.6': {} @@ -3456,90 +3456,90 @@ snapshots: '@mui/core-downloads-tracker@7.2.0': {} - '@mui/icons-material@7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/icons-material@7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 - '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 + '@babel/runtime': 7.28.2 + '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 '@mui/core-downloads-tracker': 7.2.0 - '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@mui/types': 7.4.4(@types/react@19.1.8) - '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) + '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + '@mui/types': 7.4.4(@types/react@19.1.9) + '@mui/utils': 7.2.0(@types/react@19.1.9)(react@19.1.1) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.1.8) + '@types/react-transition-group': 4.4.12(@types/react@19.1.9) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-is: 19.1.0 - react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-is: 19.1.1 + react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@types/react': 19.1.8 + '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + '@types/react': 19.1.9 - '@mui/private-theming@7.2.0(@types/react@19.1.8)(react@19.1.0)': + '@mui/private-theming@7.2.0(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 - '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) + '@babel/runtime': 7.28.2 + '@mui/utils': 7.2.0(@types/react@19.1.9)(react@19.1.1) prop-types: 15.8.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@mui/styled-engine@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0)': + '@mui/styled-engine@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/sheet': 1.4.0 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) - '@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0)': + '@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 - '@mui/private-theming': 7.2.0(@types/react@19.1.8)(react@19.1.0) - '@mui/styled-engine': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0))(react@19.1.0) - '@mui/types': 7.4.4(@types/react@19.1.8) - '@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.0) + '@babel/runtime': 7.28.2 + '@mui/private-theming': 7.2.0(@types/react@19.1.9)(react@19.1.1) + '@mui/styled-engine': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(react@19.1.1) + '@mui/types': 7.4.4(@types/react@19.1.9) + '@mui/utils': 7.2.0(@types/react@19.1.9)(react@19.1.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(react@19.1.0) - '@types/react': 19.1.8 + '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + '@types/react': 19.1.9 - '@mui/types@7.4.4(@types/react@19.1.8)': + '@mui/types@7.4.4(@types/react@19.1.9)': dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@mui/utils@7.2.0(@types/react@19.1.8)(react@19.1.0)': + '@mui/utils@7.2.0(@types/react@19.1.9)(react@19.1.1)': dependencies: - '@babel/runtime': 7.27.6 - '@mui/types': 7.4.4(@types/react@19.1.8) + '@babel/runtime': 7.28.2 + '@mui/types': 7.4.4(@types/react@19.1.9) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.1.0 - react-is: 19.1.0 + react: 19.1.1 + react-is: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 '@noble/hashes@1.8.0': {} @@ -3561,43 +3561,43 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/compat@18.3.1(preact@10.26.9)': + '@preact/compat@18.3.1(preact@10.27.0)': dependencies: - preact: 10.26.9 + preact: 10.27.0 - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.0)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) + '@prefresh/vite': 2.4.8(preact@10.27.0)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) - vite-prerender-plugin: 0.5.11(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)) + vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) + vite-prerender-plugin: 0.5.11(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) transitivePeerDependencies: - preact - supports-color '@prefresh/babel-plugin@0.5.2': {} - '@prefresh/core@1.5.5(preact@10.26.9)': + '@prefresh/core@1.5.5(preact@10.27.0)': dependencies: - preact: 10.26.9 + preact: 10.27.0 '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.8(preact@10.26.9)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1))': + '@prefresh/vite@2.4.8(preact@10.27.0)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 - '@prefresh/core': 1.5.5(preact@10.26.9) + '@prefresh/core': 1.5.5(preact@10.27.0) '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 - preact: 10.26.9 - vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) + preact: 10.27.0 + vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: - supports-color @@ -3606,83 +3606,83 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/rollup-android-arm-eabi@4.45.1': + '@rollup/rollup-android-arm-eabi@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.45.1': + '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.45.1': + '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.45.1': + '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.45.1': + '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.45.1': + '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.45.1': + '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.45.1': + '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.45.1': + '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.45.1': + '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.45.1': + '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.45.1': + '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.45.1': + '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.45.1': + '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.45.1': + '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.45.1': + '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.45.1': + '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true '@sindresorhus/is@0.7.0': {} - '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.0) + '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) clsx: 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-virtualized-auto-sizer: 1.0.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-window: 1.8.11(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-virtualized-auto-sizer: 1.0.26(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react-window: 1.8.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.2)': dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.2 javascript-natural-sort: 0.7.1 lodash: 4.17.21 prettier: 3.6.2 @@ -3745,15 +3745,15 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.1.7(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@types/react-transition-group@4.4.12(@types/react@19.1.8)': + '@types/react-transition-group@4.4.12(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@types/react@19.1.8': + '@types/react@19.1.9': dependencies: csstype: 3.1.3 @@ -3765,15 +3765,15 @@ snapshots: dependencies: '@types/node': 24.1.0 - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.31.0 + eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -3782,14 +3782,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.31.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.31.0 + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -3812,13 +3812,13 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) debug: 4.4.1 - eslint: 9.31.0 + eslint: 9.32.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -3842,13 +3842,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.31.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.31.0 + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -3908,7 +3908,7 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 cosmiconfig: 7.1.0 resolve: 1.22.10 @@ -3975,8 +3975,8 @@ snapshots: browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.190 + caniuse-lite: 1.0.30001731 + electron-to-chromium: 1.5.193 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -4034,7 +4034,7 @@ snapshots: camelcase@2.1.1: {} - caniuse-lite@1.0.30001727: {} + caniuse-lite@1.0.30001731: {} caw@2.0.1: dependencies: @@ -4248,7 +4248,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 csstype: 3.1.3 dom-serializer@1.4.1: @@ -4322,7 +4322,7 @@ snapshots: duplexer3@0.1.5: {} - electron-to-chromium@1.5.190: {} + electron-to-chromium@1.5.193: {} emoji-regex@8.0.0: {} @@ -4465,9 +4465,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.31.0): + eslint-config-prettier@10.1.8(eslint@9.32.0): dependencies: - eslint: 9.31.0 + eslint: 9.32.0 eslint-scope@8.4.0: dependencies: @@ -4478,15 +4478,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.31.0: + eslint@9.32.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.31.0 + '@eslint/js': 9.32.0 '@eslint/plugin-kit': 0.3.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -5428,7 +5428,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.9: {} + preact@10.27.0: {} prelude-ls@1.2.1: {} @@ -5467,55 +5467,55 @@ snapshots: rate-limiter-flexible@5.0.5: {} - react-dom@19.1.0(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.26.0 - react-icons@5.5.0(react@19.1.0): + react-icons@5.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 react-is@16.13.1: {} - react-is@19.1.0: {} + react-is@19.1.1: {} - react-router@7.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.7.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: cookie: 1.0.2 - react: 19.1.0 + react: 19.1.1 set-cookie-parser: 2.7.1 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.1.1(react@19.1.1) - react-toastify@11.0.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-toastify@11.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: clsx: 2.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-transition-group@4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - react-virtualized-auto-sizer@1.0.26(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-virtualized-auto-sizer@1.0.26(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - react-window@1.8.11(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-window@1.8.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.2 memoize-one: 5.2.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - react@19.1.0: {} + react@19.1.1: {} read-pkg-up@1.0.1: dependencies: @@ -5569,39 +5569,39 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-visualizer@6.0.3(rollup@4.45.1): + rollup-plugin-visualizer@6.0.3(rollup@4.46.2): dependencies: open: 8.4.2 picomatch: 4.0.3 - source-map: 0.7.4 + source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.45.1 + rollup: 4.46.2 - rollup@4.45.1: + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.45.1 - '@rollup/rollup-android-arm64': 4.45.1 - '@rollup/rollup-darwin-arm64': 4.45.1 - '@rollup/rollup-darwin-x64': 4.45.1 - '@rollup/rollup-freebsd-arm64': 4.45.1 - '@rollup/rollup-freebsd-x64': 4.45.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 - '@rollup/rollup-linux-arm-musleabihf': 4.45.1 - '@rollup/rollup-linux-arm64-gnu': 4.45.1 - '@rollup/rollup-linux-arm64-musl': 4.45.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-musl': 4.45.1 - '@rollup/rollup-linux-s390x-gnu': 4.45.1 - '@rollup/rollup-linux-x64-gnu': 4.45.1 - '@rollup/rollup-linux-x64-musl': 4.45.1 - '@rollup/rollup-win32-arm64-msvc': 4.45.1 - '@rollup/rollup-win32-ia32-msvc': 4.45.1 - '@rollup/rollup-win32-x64-msvc': 4.45.1 + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 run-parallel@1.2.0: @@ -5690,7 +5690,7 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} + source-map@0.7.6: {} spdx-correct@3.2.0: dependencies: @@ -5865,13 +5865,13 @@ snapshots: dependencies: typescript: 5.8.3 - typescript-eslint@8.38.0(eslint@9.31.0)(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0)(typescript@5.8.3) - eslint: 9.31.0 + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + eslint: 9.32.0 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -5916,7 +5916,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-plugin-imagemin@0.6.1(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)): + vite-plugin-imagemin@0.6.1(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)): dependencies: '@types/imagemin': 7.0.1 '@types/imagemin-gifsicle': 7.0.4 @@ -5941,38 +5941,38 @@ snapshots: imagemin-webp: 6.1.0 jpegtran-bin: 6.0.1 pathe: 0.2.0 - vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) + vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.11(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)): + vite-prerender-plugin@0.5.11(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.17 node-html-parser: 6.1.13 simple-code-frame: 1.3.0 - source-map: 0.7.4 + source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) + vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.5(@types/node@24.1.0)(terser@5.43.1)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)): dependencies: debug: 4.4.1 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 7.0.5(@types/node@24.1.0)(terser@5.43.1) + vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: - supports-color - typescript - vite@7.0.5(@types/node@24.1.0)(terser@5.43.1): + vite@7.0.6(@types/node@24.1.0)(terser@5.43.1): dependencies: esbuild: 0.25.8 fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.45.1 + rollup: 4.46.2 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 24.1.0 From 8a48da38b8de7b4e045f26a1c7272ad5ad2ff8c0 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 31 Jul 2025 18:56:17 +0200 Subject: [PATCH 13/24] revert to fetch mixer config --- src/devices/mixer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index 6996738dd..ebf990b85 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -31,7 +31,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c if (flags == EMSdevice::EMS_DEVICE_FLAG_MMPLUS) { register_telegram_type(device_id - 0x20 + 0x02D7, "MMPLUSStatusMessage", false, MAKE_PF_CB(process_MMPLUSStatusMessage_HC)); // register_telegram_type(device_id - 0x20 + 0x02E1, "MMPLUSSetMessage", true, MAKE_PF_CB(process_MMPLUSSetMessage_HC)); - register_telegram_type(device_id - 0x20 + 0x02CD, "MMPLUSConfigMessage", false, MAKE_PF_CB(process_MMPLUSConfigMessage_HC)); + register_telegram_type(device_id - 0x20 + 0x02CD, "MMPLUSConfigMessage", true, MAKE_PF_CB(process_MMPLUSConfigMessage_HC)); register_device_value(tag, &flowTempHc_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(flowTempHc), DeviceValueUOM::DEGREES); register_device_value(tag, &status_, DeviceValueType::UINT8, FL_(mixerStatus), DeviceValueUOM::PERCENT); register_device_value(tag, &flowSetTemp_, DeviceValueType::UINT8, FL_(flowSetTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flowSetTemp)); @@ -47,7 +47,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c 10, 600); register_device_value(tag, &flowTempOffset_, DeviceValueType::UINT8, FL_(flowtempoffset), DeviceValueUOM::K, MAKE_CF_CB(set_flowTempOffset), 0, 20); - EMSESP::send_read_request(device_id - 0x20 + 0x02CD, device_id, 0, 3); + // EMSESP::send_read_request(device_id - 0x20 + 0x02CD, device_id, 0, 3); } // EMS 1.0 From 5cc166067532df1d03865b5eef31b32182e63c8e Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 2 Aug 2025 13:03:45 +0200 Subject: [PATCH 14/24] update AsyncTCP 3.4.7 --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 34e83e684..c2669c445 100644 --- a/platformio.ini +++ b/platformio.ini @@ -108,7 +108,7 @@ build_type = release board_build.filesystem = littlefs lib_deps = bblanchon/ArduinoJson @ 7.4.2 - ESP32Async/AsyncTCP @ 3.4.6 + ESP32Async/AsyncTCP @ 3.4.7 ESP32Async/ESPAsyncWebServer @ 3.7.10 https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 From a318f34988b6ee96e4a0c29303185693dd195528 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 2 Aug 2025 13:04:24 +0200 Subject: [PATCH 15/24] update packages --- interface/package.json | 2 +- interface/pnpm-lock.yaml | 106 +++++++++++++++++++-------------------- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/interface/package.json b/interface/package.json index a87398be6..3e4de991a 100644 --- a/interface/package.json +++ b/interface/package.json @@ -41,7 +41,7 @@ "react-router": "^7.7.1", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", - "typescript": "^5.8.3" + "typescript": "^5.9.2" }, "devDependencies": { "@babel/core": "^7.28.0", diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 7a41a1e14..55aef5bfd 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -64,10 +64,10 @@ importers: version: 11.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) typesafe-i18n: specifier: ^5.26.2 - version: 5.26.2(typescript@5.8.3) + version: 5.26.2(typescript@5.9.2) typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 devDependencies: '@babel/core': specifier: ^7.28.0 @@ -113,7 +113,7 @@ importers: version: 5.43.1 typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) vite: specifier: ^7.0.6 version: 7.0.6(@types/node@24.1.0)(terser@5.43.1) @@ -122,7 +122,7 @@ importers: version: 0.6.1(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) + version: 5.1.4(typescript@5.9.2)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)) packages: @@ -1315,8 +1315,8 @@ packages: duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - electron-to-chromium@1.5.193: - resolution: {integrity: sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA==} + electron-to-chromium@1.5.194: + resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2901,8 +2901,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -3765,41 +3765,41 @@ snapshots: dependencies: '@types/node': 24.1.0 - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 eslint: 9.32.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 debug: 4.4.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -3808,28 +3808,28 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 @@ -3837,19 +3837,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) eslint: 9.32.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -3976,7 +3976,7 @@ snapshots: browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.193 + electron-to-chromium: 1.5.194 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -4322,7 +4322,7 @@ snapshots: duplexer3@0.1.5: {} - electron-to-chromium@1.5.193: {} + electron-to-chromium@1.5.194: {} emoji-regex@8.0.0: {} @@ -5835,13 +5835,13 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - tsconfck@3.1.6(typescript@5.8.3): + tsconfck@3.1.6(typescript@5.9.2): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 tslib@2.8.1: {} @@ -5861,22 +5861,22 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typesafe-i18n@5.26.2(typescript@5.8.3): + typesafe-i18n@5.26.2(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) eslint: 9.32.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.2: {} unbzip2-stream@1.4.3: dependencies: @@ -5955,11 +5955,11 @@ snapshots: stack-trace: 1.0.0-pre2 vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.0.6(@types/node@24.1.0)(terser@5.43.1)): dependencies: debug: 4.4.1 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.8.3) + tsconfck: 3.1.6(typescript@5.9.2) optionalDependencies: vite: 7.0.6(@types/node@24.1.0)(terser@5.43.1) transitivePeerDependencies: From 83987b71e0c308d58e768fdff717c96fd6418ed3 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 2 Aug 2025 13:08:09 +0200 Subject: [PATCH 16/24] MM100 flow and pressure --- src/core/locale_translations.h | 1 + src/devices/mixer.cpp | 17 ++++++++++++++++- src/devices/mixer.h | 3 +++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/locale_translations.h b/src/core/locale_translations.h index 32a5b3aa5..fe3f131e6 100644 --- a/src/core/locale_translations.h +++ b/src/core/locale_translations.h @@ -796,6 +796,7 @@ MAKE_TRANSLATION(pumpStatus, "pumpstatus", "pump status (PC1)", "Pumpenstatus HK MAKE_TRANSLATION(mixerStatus, "valvestatus", "mixing valve actuator (VC1)", "Mischerventilposition (VC1)", "positie mixerklep (VC1)", "Shuntventil Status (VC1)", "siłownik zaworu mieszającego (VC1)", "shuntventil status (VC1)", "actionnement vanne mélangeur (VC1)", "karışım vanası aktüatörü (VC1)", "posizione valvola miscela (VC1)", "pohon zmiešavacieho ventilu (VC1)", "pohon směšovacího ventilu (VC1)") MAKE_TRANSLATION(flowTempVf, "flowtempvf", "flow temperature in header (T0/Vf)", "Vorlauftemperatur am Verteiler (T0/Vf)", "aanvoertemperatuur verdeler (T0/Vf)", "Flödestemperatur Fördelare (T0/Vf)", "temperatura zasilania na rozdzielaczu (T0/Vf)", "turtemperatur ved fordeleren (T0/Vf)", "température départ collecteur (T0/Vf)", "başlıkta akış sıcaklığı", "Temperatura di mandata al distributore (T0/Vf)", "teplota prívodu v zberači (T0/Vf)", "teplota přívodu v hlavici (T0/Vf)") MAKE_TRANSLATION(mixerSetTime, "valvesettime", "time to set valve", "Zeit zum einstellen des Ventils", "Inschakeltijd mengklep", "Inställningstid Shuntventil", "czas na ustawienie zaworu", "instillningstid ventil", "délai activation vanne", "vana ayar zamanı", "ritardo attivazione valvola", "čas na nastavenie ventilu", "čas pro nastavení ventilu") +MAKE_TRANSLATION(setDiffPress, "setdiffpress", "set differential pressure", "Pumpensolldruck", "", "Tryckskillnad", "różnica ciśnień", "", "", "", "", "nastaviť diferenčný tlak", "nastavení rozdílového tlaku") // TODO translate // mixer pool MAKE_TRANSLATION(poolSetTemp, "poolsettemp", "pool set temperature", "Sollwert Pooltemperatur", "Streeftemperatuur zwembad", "Pool Temperatur Börvärde", "zadana temperatura basenu", "valgt temp basseng", "température consigne piscine", "hedef havuz sıcaklığı", "temperatura nominale piscina", "nastavená teplota bazéna", "cílová teplota bazénu") diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index ebf990b85..3cc2fc00a 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -37,6 +37,9 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c register_device_value(tag, &flowSetTemp_, DeviceValueType::UINT8, FL_(flowSetTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_flowSetTemp)); register_device_value(tag, &pumpStatus_, DeviceValueType::BOOL, FL_(pumpStatus), DeviceValueUOM::NONE, MAKE_CF_CB(set_pump)); register_device_value(tag, &activated_, DeviceValueType::BOOL, FL_(activated), DeviceValueUOM::NONE, MAKE_CF_CB(set_activated)); + register_device_value(tag, &flowRate_, DeviceValueType::UINT16, FL_(flow), DeviceValueUOM::LH); + register_device_value( + tag, &pressure_, DeviceValueType::UINT8, DeviceValueNumOp::DV_NUMOP_MUL50, FL_(setDiffPress), DeviceValueUOM::MBAR, MAKE_CF_CB(set_pressure)); register_device_value(tag, &setValveTime_, DeviceValueType::UINT8, @@ -91,7 +94,8 @@ void Mixer::process_MMPLUSStatusMessage_HC(std::shared_ptr teleg has_update(telegram, flowTempHc_, 3); // is * 10 has_update(telegram, flowSetTemp_, 5); has_bitupdate(telegram, pumpStatus_, 0, 0); - has_update(telegram, status_, 2); // valve status + has_update(telegram, status_, 2); // valve status + has_update(telegram, flowRate_, 9); // l/h } // Mixer IPM - 0x010C @@ -153,6 +157,7 @@ void Mixer::process_MMPLUSConfigMessage_HC(std::shared_ptr teleg has_update(telegram, activated_, 0); // on = 0xFF has_update(telegram, setValveTime_, 1); // valve runtime in 10 sec, default 120 s, max 600 s has_update(telegram, flowTempOffset_, 2); // Mixer increase [0-20 K] + has_update(telegram, pressure_, 9); } // Thermostat(0x10) -> Mixer(0x20), ?(0x2E1), data: 01 1C 64 00 01 @@ -271,4 +276,14 @@ bool Mixer::set_flowTempOffset(const char * value, const int8_t id) { return false; } +bool Mixer::set_pressure(const char * value, const int8_t id) { + int v; + if (!Helpers::value2number(value, v)) { + return false; + } + uint8_t hc = device_id() - 0x20; + write_command(0x2CD + hc, 9, v / 50, 0x2CD + hc); + return true; +} + } // namespace emsesp diff --git a/src/devices/mixer.h b/src/devices/mixer.h index fb2cc8523..2e4c3475a 100644 --- a/src/devices/mixer.h +++ b/src/devices/mixer.h @@ -45,6 +45,7 @@ class Mixer : public EMSdevice { bool set_activated(const char * value, const int8_t id); bool set_setValveTime(const char * value, const int8_t id); bool set_flowTempOffset(const char * value, const int8_t id); + bool set_pressure(const char * value, const int8_t id); private: uint16_t flowTempHc_; @@ -55,6 +56,8 @@ class Mixer : public EMSdevice { uint8_t activated_; uint8_t setValveTime_; uint8_t flowTempOffset_; + uint16_t flowRate_; // l/h + uint8_t pressure_; // setting 150-750mbar, scale 50 }; } // namespace emsesp From cfa973b08b6e28a028db46570752a7087c9d4ff4 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 2 Aug 2025 16:07:27 +0200 Subject: [PATCH 17/24] fix standalone --- src/core/system.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/system.cpp b/src/core/system.cpp index 4797b2d5e..26896ab98 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -50,7 +50,9 @@ #include +#ifndef EMSESP_STANDALONE #include "esp_efuse.h" +#endif namespace emsesp { @@ -1427,10 +1429,12 @@ bool System::command_service(const char * cmd, const char * value) { } int n; if (!ok && Helpers::value2number(value, n)) { +#ifndef EMSESP_STANDALONE if (!strcmp(cmd, "fuse/mfg")) { // && esp_efuse_read_reg(EFUSE_BLK3, 0) == 0) { ok = esp_efuse_write_reg(EFUSE_BLK3, 0, (uint32_t)n) == ESP_OK; LOG_INFO("fuse programed with value '%X': %s", n, ok ? "successful" : "failed"); } +#endif } if (ok) { From ed9e2704b0322cc964bc73c2f6e54fd3c5a12f7e Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 4 Aug 2025 10:15:15 +0200 Subject: [PATCH 18/24] syslog, changing level is not a fail --- lib/uuid-syslog/src/syslog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/uuid-syslog/src/syslog.cpp b/lib/uuid-syslog/src/syslog.cpp index 9c7a7c0ab..d0d5c9844 100644 --- a/lib/uuid-syslog/src/syslog.cpp +++ b/lib/uuid-syslog/src/syslog.cpp @@ -122,7 +122,6 @@ void SyslogService::remove_queued_messages(uuid::log::Level level) { } log_message_id_ -= offset; - log_message_fails_ += offset; } void SyslogService::log_level(uuid::log::Level level) { From f10f3d530595a99286ebcb088559507c58e28f56 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 4 Aug 2025 10:15:59 +0200 Subject: [PATCH 19/24] esp32: some pins have no internal pullup --- lib/PButton/PButon.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/PButton/PButon.cpp b/lib/PButton/PButon.cpp index 00c9c7058..8324b7728 100644 --- a/lib/PButton/PButon.cpp +++ b/lib/PButton/PButon.cpp @@ -54,7 +54,15 @@ bool PButton::init(uint8_t pin, bool pullMode) { pullMode_ = pullMode; // 1=HIGH (pullup) 0=LOW (pulldown) #if defined(ESP32) +#if CONFIG_IDF_TARGET_ESP32 + if (pin_ == 34 || pin_ == 35 || pin_ == 36 || pin_ == 39) { + pinMode(pin_, INPUT); + } else { + pinMode(pin_, pullMode ? INPUT_PULLUP : INPUT_PULLDOWN); + } +#else pinMode(pin_, pullMode ? INPUT_PULLUP : INPUT_PULLDOWN); +#endif #else // esp8266 and standalone pinMode(pin_, pullMode ? INPUT_PULLUP : INPUT); #endif @@ -93,7 +101,15 @@ bool PButton::check(void) { // make sure the pin is still input #if defined(ESP32) +#if CONFIG_IDF_TARGET_ESP32 + if (pin_ == 34 || pin_ == 35 || pin_ == 36 || pin_ == 39) { + pinMode(pin_, INPUT); + } else { + pinMode(pin_, pullMode_ ? INPUT_PULLUP : INPUT_PULLDOWN); + } +#else pinMode(pin_, pullMode_ ? INPUT_PULLUP : INPUT_PULLDOWN); +#endif #else // esp8266 and standalone pinMode(pin_, pullMode_ ? INPUT_PULLUP : INPUT); #endif From 7b0169bb6842bef2b8518300f84fe95a4007ae47 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 4 Aug 2025 10:16:50 +0200 Subject: [PATCH 20/24] update to eModbus 1.7.4 --- lib/eModbus/library.properties | 9 ++++ lib/eModbus/src/CoilData.cpp | 2 + lib/eModbus/src/ModbusBridgeTemp.h | 47 +++++++++++++------- lib/eModbus/src/ModbusClient.cpp | 7 +++ lib/eModbus/src/ModbusClient.h | 6 +-- lib/eModbus/src/ModbusClientRTU.cpp | 10 +++-- lib/eModbus/src/ModbusClientRTU.h | 7 ++- lib/eModbus/src/ModbusClientTCP.cpp | 55 +++++++++++++++++++++--- lib/eModbus/src/ModbusClientTCP.h | 24 +++++++---- lib/eModbus/src/ModbusClientTCPasync.cpp | 10 ++--- lib/eModbus/src/ModbusClientTCPasync.h | 12 +++--- lib/eModbus/src/ModbusMessage.cpp | 26 +++++------ lib/eModbus/src/ModbusServer.cpp | 7 ++- lib/eModbus/src/ModbusServer.h | 5 +-- lib/eModbus/src/ModbusServerEthernet.h | 4 +- lib/eModbus/src/ModbusServerRTU.cpp | 12 ++++-- lib/eModbus/src/ModbusServerRTU.h | 5 ++- lib/eModbus/src/ModbusServerTCPasync.cpp | 6 +-- lib/eModbus/src/ModbusServerTCPasync.h | 1 - lib/eModbus/src/ModbusServerTCPtemp.h | 6 +-- lib/eModbus/src/ModbusTypeDefs.h | 4 +- lib/eModbus/src/RTUutils.cpp | 6 +-- lib/eModbus/src/RTUutils.h | 5 +-- lib/eModbus/src/options.h | 3 -- 24 files changed, 178 insertions(+), 101 deletions(-) create mode 100644 lib/eModbus/library.properties diff --git a/lib/eModbus/library.properties b/lib/eModbus/library.properties new file mode 100644 index 000000000..904bda3aa --- /dev/null +++ b/lib/eModbus/library.properties @@ -0,0 +1,9 @@ +name=eModbus +version=1.7.4 +author=bertmelis,Miq1 +maintainer=Miq1 +sentence=eModbus provides Modbus RTU, ASCII and TCP functions for ESP32. +paragraph=This library is non-blocking for the program using it. Modbus requests and responses will be returned to user-supplied callback functions. All Modbus function codes are supported implicitly, the codes specified by the Modbus specs are parameter-checked. +category=Communication +url=https://github.com/eModbus/eModbus +architectures=esp32,FreeRTOS diff --git a/lib/eModbus/src/CoilData.cpp b/lib/eModbus/src/CoilData.cpp index 8348080d5..42b7839a8 100644 --- a/lib/eModbus/src/CoilData.cpp +++ b/lib/eModbus/src/CoilData.cpp @@ -47,6 +47,8 @@ CoilData::~CoilData() { // Assignment operator CoilData& CoilData::operator=(const CoilData& m) { + // Avoid self-assignment + if (this == &m) return *this; // Remove old data if (CDbuffer) { delete CDbuffer; diff --git a/lib/eModbus/src/ModbusBridgeTemp.h b/lib/eModbus/src/ModbusBridgeTemp.h index 8bd2f039c..96fae9bb9 100644 --- a/lib/eModbus/src/ModbusBridgeTemp.h +++ b/lib/eModbus/src/ModbusBridgeTemp.h @@ -8,6 +8,7 @@ #include #include #include "ModbusClient.h" +#include "ModbusServer.h" #include "ModbusClientTCP.h" // Needed for client.setTarget() #include "RTUutils.h" // Needed for RTScallback @@ -29,7 +30,7 @@ public: ModbusBridge(); // Constructors for the RTU variant. Parameters as are for ModbusServerRTU - ModbusBridge(uint32_t timeout, int rtsPin = -1); + explicit ModbusBridge(uint32_t timeout, int rtsPin = -1); ModbusBridge(uint32_t timeout, RTScallback rts); // Destructor @@ -230,42 +231,56 @@ ModbusMessage ModbusBridge::bridgeWorker(ModbusMessage msg) { uint8_t aliasID = msg.getServerID(); uint8_t functionCode = msg.getFunctionCode(); ModbusMessage response; + bool foundServer = false; + uint8_t usableID = 255; // Find the (alias) serverID if (servers.find(aliasID) != servers.end()) { + foundServer = true; + usableID = aliasID; + } else { + if (servers.find(ANY_SERVER) != servers.end()) { + foundServer = true; + usableID = ANY_SERVER; + } + } + if (foundServer) { // Found it. We may use servers[aliasID] now without allocating a new map slot // Request filter hook to be called here - if (servers[aliasID]->requestFilter) { + if (servers[usableID]->requestFilter) { LOG_D("Calling request filter\n"); - msg = servers[aliasID]->requestFilter(msg); + msg = servers[usableID]->requestFilter(msg); } // Set real target server ID - msg.setServerID(servers[aliasID]->serverID); - - // Issue the request - LOG_D("Request (%02X/%02X) sent\n", servers[aliasID]->serverID, msg.getFunctionCode()); - // TCP servers have a target host/port that needs to be set in the client - if (servers[aliasID]->serverType == TCP_SERVER) { - response = reinterpret_cast(servers[aliasID]->client)->syncRequestMT(msg, (uint32_t)millis(), servers[aliasID]->host, servers[aliasID]->port); - } else { - response = servers[aliasID]->client->syncRequestM(msg, (uint32_t)millis()); + if (servers[usableID]->serverID != ANY_SERVER) { + msg.setServerID(servers[usableID]->serverID); } - // Response filter hook to be called here - if (servers[aliasID]->responseFilter) { - LOG_D("Calling response filter\n"); - response = servers[aliasID]->responseFilter(response); + // Issue the request + LOG_D("Request (%02X/%02X) sent\n", servers[usableID]->serverID, msg.getFunctionCode()); + // TCP servers have a target host/port that needs to be set in the client + if (servers[usableID]->serverType == TCP_SERVER) { + response = reinterpret_cast(servers[usableID]->client)->syncRequestMT(msg, (uint32_t)micros(), servers[usableID]->host, servers[usableID]->port); + } else { + response = servers[usableID]->client->syncRequestM(msg, (uint32_t)micros()); } // Re-set the requested server ID and function code (may have been modified by filters) response.setServerID(aliasID); + if (response.getError() != SUCCESS) { response.setFunctionCode(functionCode | 0x80); } else { response.setFunctionCode(functionCode); } + + // Response filter hook to be called here + if (servers[usableID]->responseFilter) { + LOG_D("Calling response filter\n"); + response = servers[usableID]->responseFilter(response); + } } else { // If we get here, something has gone wrong internally. We send back an error response anyway. response.setError(aliasID, functionCode, INVALID_SERVER); diff --git a/lib/eModbus/src/ModbusClient.cpp b/lib/eModbus/src/ModbusClient.cpp index d57c1397a..bd1f627ee 100644 --- a/lib/eModbus/src/ModbusClient.cpp +++ b/lib/eModbus/src/ModbusClient.cpp @@ -21,6 +21,13 @@ ModbusClient::ModbusClient() : onError(nullptr), onResponse(nullptr) { instanceCounter++; } +// Default destructor: reduce number of clients by one +ModbusClient::~ModbusClient() { + if (instanceCounter) { + instanceCounter--; + } +} + // onDataHandler: register callback for data responses bool ModbusClient::onDataHandler(MBOnData handler) { if (onData) { diff --git a/lib/eModbus/src/ModbusClient.h b/lib/eModbus/src/ModbusClient.h index 2025a1f28..3c9ec42e3 100644 --- a/lib/eModbus/src/ModbusClient.h +++ b/lib/eModbus/src/ModbusClient.h @@ -37,8 +37,8 @@ public: uint32_t getMessageCount(); // Informative: return number of messages created uint32_t getErrorCount(); // Informative: return number of errors received void resetCounts(); // Set both message and error counts to zero - inline Error addRequest(ModbusMessage m, uint32_t token) { return addRequestM(m, token); } - inline ModbusMessage syncRequest(ModbusMessage m, uint32_t token) { return syncRequestM(m, token); } + inline Error addRequest(const ModbusMessage& m, uint32_t token) { return addRequestM(m, token); } + inline ModbusMessage syncRequest(const ModbusMessage& m, uint32_t token) { return syncRequestM(m, token); } // Template function to generate syncRequest functions as long as there is a // matching ModbusMessage::setMessage() call @@ -85,7 +85,7 @@ public: protected: ModbusClient(); // Default constructor - virtual void isInstance() = 0; // Make class abstract + virtual ~ModbusClient(); // Destructor ModbusMessage waitSync(uint8_t serverID, uint8_t functionCode, uint32_t token); // wait for syncRequest response to arrive // Virtual addRequest variant needed internally. All others done by template! virtual Error addRequestM(ModbusMessage msg, uint32_t token) = 0; diff --git a/lib/eModbus/src/ModbusClientRTU.cpp b/lib/eModbus/src/ModbusClientRTU.cpp index 9052ab2c2..2520d83b7 100644 --- a/lib/eModbus/src/ModbusClientRTU.cpp +++ b/lib/eModbus/src/ModbusClientRTU.cpp @@ -86,7 +86,7 @@ void ModbusClientRTU::doBegin(uint32_t baudRate, int coreID, uint32_t userInterv char taskName[18]; snprintf(taskName, 18, "Modbus%02XRTU", instanceCounter); // Start task to handle the queue - xTaskCreatePinnedToCore((TaskFunction_t)&handleConnection, taskName, CLIENT_TASK_STACK, this, 6, &worker, coreID >= 0 ? coreID : NULL); + xTaskCreatePinnedToCore((TaskFunction_t)&handleConnection, taskName, CLIENT_TASK_STACK, this, 6, &worker, coreID >= 0 ? coreID : tskNO_AFFINITY); LOG_D("Client task %d started. Interval=%d\n", (uint32_t)worker, MR_interval); } @@ -151,6 +151,7 @@ void ModbusClientRTU::clearQueue() { std::queue empty; LOCK_GUARD(lockGuard, qLock); + // Empty queue std::swap(requests, empty); } @@ -342,8 +343,11 @@ void ModbusClientRTU::handleConnection(ModbusClientRTU *instance) { { // Safely lock the queue LOCK_GUARD(lockGuard, instance->qLock); - // Remove the front queue entry - instance->requests.pop(); + + // Remove the front queue entry if the queue is not empty + if (!instance->requests.empty()) { + instance->requests.pop(); + } } } else { delay(1); diff --git a/lib/eModbus/src/ModbusClientRTU.h b/lib/eModbus/src/ModbusClientRTU.h index 9f419ee34..280981cad 100644 --- a/lib/eModbus/src/ModbusClientRTU.h +++ b/lib/eModbus/src/ModbusClientRTU.h @@ -67,15 +67,15 @@ protected: uint32_t token; ModbusMessage msg; bool isSyncRequest; - RequestEntry(uint32_t t, ModbusMessage m, bool syncReq = false) : + RequestEntry(uint32_t t, const ModbusMessage& m, bool syncReq = false) : token(t), msg(m), isSyncRequest(syncReq) {} }; // Base addRequest and syncRequest must be present - Error addRequestM(ModbusMessage msg, uint32_t token); - ModbusMessage syncRequestM(ModbusMessage msg, uint32_t token); + Error addRequestM(ModbusMessage msg, uint32_t token) override; + ModbusMessage syncRequestM(ModbusMessage msg, uint32_t token) override; // addToQueue: send freshly created request to queue bool addToQueue(uint32_t token, ModbusMessage msg, bool syncReq = false); @@ -89,7 +89,6 @@ protected: // start background task void doBegin(uint32_t baudRate, int coreID, uint32_t userInterval); - void isInstance() { return; } // make class instantiable queue requests; // Queue to hold requests to be processed #if USE_MUTEX mutex qLock; // Mutex to protect queue diff --git a/lib/eModbus/src/ModbusClientTCP.cpp b/lib/eModbus/src/ModbusClientTCP.cpp index ec34a2d52..b6ea5d431 100644 --- a/lib/eModbus/src/ModbusClientTCP.cpp +++ b/lib/eModbus/src/ModbusClientTCP.cpp @@ -18,7 +18,8 @@ ModbusClientTCP::ModbusClientTCP(Client& client, uint16_t queueLimit) : MT_target(IPAddress(0, 0, 0, 0), 0, DEFAULTTIMEOUT, TARGETHOSTINTERVAL), MT_defaultTimeout(DEFAULTTIMEOUT), MT_defaultInterval(TARGETHOSTINTERVAL), - MT_qLimit(queueLimit) + MT_qLimit(queueLimit), + MT_timeoutsToClose(0) { } // Alternative Constructor takes reference to Client (EthernetClient or WiFiClient) plus initial target host @@ -29,7 +30,8 @@ ModbusClientTCP::ModbusClientTCP(Client& client, IPAddress host, uint16_t port, MT_target(host, port, DEFAULTTIMEOUT, TARGETHOSTINTERVAL), MT_defaultTimeout(DEFAULTTIMEOUT), MT_defaultInterval(TARGETHOSTINTERVAL), - MT_qLimit(queueLimit) + MT_qLimit(queueLimit), + MT_timeoutsToClose(0) { } // Destructor: clean up queue, task etc. @@ -64,7 +66,7 @@ void ModbusClientTCP::end() { // begin: start worker task #if IS_LINUX void *ModbusClientTCP::pHandle(void *p) { - handleConnection((ModbusClientTCP *)p); + handleConnection(static_cast(p)); return nullptr; } #endif @@ -84,7 +86,7 @@ void ModbusClientTCP::begin(int coreID) { char taskName[18]; snprintf(taskName, 18, "Modbus%02XTCP", instanceCounter); // Start task to handle the queue - xTaskCreatePinnedToCore((TaskFunction_t)&handleConnection, taskName, CLIENT_TASK_STACK, this, 5, &worker, coreID >= 0 ? coreID : NULL); + xTaskCreatePinnedToCore((TaskFunction_t)&handleConnection, taskName, CLIENT_TASK_STACK, this, 5, &worker, coreID >= 0 ? coreID : tskNO_AFFINITY); LOG_D("TCP client worker %s started\n", taskName); #endif } else { @@ -119,9 +121,25 @@ uint32_t ModbusClientTCP::pendingRequests() { void ModbusClientTCP::clearQueue() { std::queue empty; LOCK_GUARD(lockGuard, qLock); + // Delete queue entries if still on the queue + while (!requests.empty()) { + RequestEntry *re = requests.front(); + delete re; + requests.pop(); + } + // Now flush the queue std::swap(requests, empty); } +// Set number of timeouts to tolerate before a connection is forcibly closed. +// 0: never, 1..255: desired number +// Returns previous value. +uint8_t ModbusClientTCP::closeConnectionOnTimeouts(uint8_t n) { + uint8_t oldValue = MT_timeoutsToClose; + MT_timeoutsToClose = n; + return oldValue; +} + // Base addRequest for preformatted ModbusMessage and last set target Error ModbusClientTCP::addRequestM(ModbusMessage msg, uint32_t token) { Error rc = SUCCESS; // Return value @@ -225,6 +243,7 @@ bool ModbusClientTCP::addToQueue(uint32_t token, ModbusMessage request, TargetHo void ModbusClientTCP::handleConnection(ModbusClientTCP *instance) { bool doNotPop; unsigned long lastRequest = millis(); + uint16_t timeoutCount = 0; // Run time counter of consecutive timeouts. // Loop forever - or until task is killed while (1) { @@ -273,6 +292,8 @@ void ModbusClientTCP::handleConnection(ModbusClientTCP *instance) { // Did we get a normal response? if (response.getError()==SUCCESS) { LOG_D("Data response.\n"); + // Reset timeout counter + timeoutCount = 0; // Yes. Is it a synchronous request? if (request->isSyncRequest) { // Yes. Put the response into the response map @@ -299,6 +320,25 @@ void ModbusClientTCP::handleConnection(ModbusClientTCP *instance) { LOCK_GUARD(responseCnt, instance->countAccessM); instance->errorCount++; } + // Is it a TIMEOUT and do we need to track it? + if (response.getError()==TIMEOUT && instance->MT_timeoutsToClose) { + LOG_D("Checking timeout sequence\n"); + // Yes. First count timeout conter up + timeoutCount++; + // Is the count above the limit? + if (timeoutCount > instance->MT_timeoutsToClose) { + LOG_D("Timeouts: %d exceeding limit (%d), closing connection\n", + timeoutCount, instance->MT_timeoutsToClose); + // Yes. We need to cut the connection + instance->MT_client.stop(); + delay(1); + // reset timeout count + timeoutCount = 0; + } + } else { + // No TIMEOUT or no limit: reset timeout count + timeoutCount = 0; + } // Is it a synchronous request? if (request->isSyncRequest) { // Yes. Put the response into the response map @@ -345,8 +385,11 @@ void ModbusClientTCP::handleConnection(ModbusClientTCP *instance) { { // Safely lock the queue LOCK_GUARD(lockGuard, instance->qLock); - // Remove the front queue entry - instance->requests.pop(); + + // Remove the front queue entry if the queue is not empty + if (!instance->requests.empty()) { + instance->requests.pop(); + } // Delete request delete request; LOG_D("Request popped from queue.\n"); diff --git a/lib/eModbus/src/ModbusClientTCP.h b/lib/eModbus/src/ModbusClientTCP.h index 23f4af5c2..3e5e1bfe3 100644 --- a/lib/eModbus/src/ModbusClientTCP.h +++ b/lib/eModbus/src/ModbusClientTCP.h @@ -50,6 +50,11 @@ public: // Remove all pending request from queue void clearQueue(); + // Set number of timeouts to tolerate before a connection is forcibly closed. + // 0: never, 1..255: desired number + // Returns previous value. + uint8_t closeConnectionOnTimeouts(uint8_t n=3); + protected: // class describing a target server struct TargetHost { @@ -58,7 +63,7 @@ protected: uint32_t timeout; // Time in ms waiting for a response uint32_t interval; // Time in ms to wait between requests - inline TargetHost& operator=(TargetHost& t) { + inline TargetHost& operator=(const TargetHost& t) { host = t.host; port = t.port; timeout = t.timeout; @@ -66,7 +71,7 @@ protected: return *this; } - inline TargetHost(TargetHost& t) : + inline TargetHost(const TargetHost& t) : host(t.host), port(t.port), timeout(t.timeout), @@ -86,13 +91,13 @@ protected: interval(interval) { } - inline bool operator==(TargetHost& t) { + inline bool operator==(const TargetHost& t) { if (host != t.host) return false; if (port != t.port) return false; return true; } - inline bool operator!=(TargetHost& t) { + inline bool operator!=(const TargetHost& t) { if (host != t.host) return true; if (port != t.port) return true; return false; @@ -135,7 +140,7 @@ protected: } protected: - uint8_t headRoom[6]; // Buffer to hold MSB-first TCP header + uint8_t headRoom[6] = {0,0,0,0,0,0}; // Buffer to hold MSB-first TCP header }; struct RequestEntry { @@ -144,7 +149,7 @@ protected: TargetHost target; ModbusTCPhead head; bool isSyncRequest; - RequestEntry(uint32_t t, ModbusMessage m, TargetHost tg, bool syncReq = false) : + RequestEntry(uint32_t t, const ModbusMessage& m, TargetHost tg, bool syncReq = false) : token(t), msg(m), target(tg), @@ -153,8 +158,8 @@ protected: }; // Base addRequest and syncRequest must be present - Error addRequestM(ModbusMessage msg, uint32_t token); - ModbusMessage syncRequestM(ModbusMessage msg, uint32_t token); + Error addRequestM(ModbusMessage msg, uint32_t token) override; + ModbusMessage syncRequestM(ModbusMessage msg, uint32_t token) override; // TCP-specific addition "...MT()" including adhoc target - used by bridge Error addRequestMT(ModbusMessage msg, uint32_t token, IPAddress targetHost, uint16_t targetPort); ModbusMessage syncRequestMT(ModbusMessage msg, uint32_t token, IPAddress targetHost, uint16_t targetPort); @@ -174,7 +179,6 @@ protected: // receive: get response via Client connection ModbusMessage receive(RequestEntry *request); - void isInstance() { return; } // make class instantiable queue requests; // Queue to hold requests to be processed #if USE_MUTEX mutex qLock; // Mutex to protect queue @@ -185,6 +189,8 @@ protected: uint32_t MT_defaultTimeout; // Standard timeout value taken if no dedicated was set uint32_t MT_defaultInterval; // Standard interval value taken if no dedicated was set uint16_t MT_qLimit; // Maximum number of requests to accept in queue + uint8_t MT_timeoutsToClose; // 0: disregard, 1-255: number of timeouts to tolerate before + // forcibly closing a connection. // Let any ModbusBridge class use protected members template friend class ModbusBridge; diff --git a/lib/eModbus/src/ModbusClientTCPasync.cpp b/lib/eModbus/src/ModbusClientTCPasync.cpp index 163d552a0..949de2c49 100644 --- a/lib/eModbus/src/ModbusClientTCPasync.cpp +++ b/lib/eModbus/src/ModbusClientTCPasync.cpp @@ -223,19 +223,17 @@ void onAck(size_t len, uint32_t time) { } */ void ModbusClientTCPasync::onPacket(uint8_t* data, size_t length) { - LOG_D("packet received (len:%d)\n", length); + LOG_D("packet received (len:%u)\n", length); // reset idle timeout MTA_lastActivity = millis(); if (length) { - LOG_D("parsing (len:%d)\n", length + 1); + LOG_D("parsing (len:%u)\n", length + 1); } while (length > 0) { RequestEntry* request = nullptr; ModbusMessage* response = nullptr; uint16_t transactionID = 0; - uint16_t protocolID = 0; - uint16_t messageLength = 0; bool isOkay = false; // 1. Check for valid modbus message @@ -244,8 +242,8 @@ void ModbusClientTCPasync::onPacket(uint8_t* data, size_t length) { // total message should fit MBAP plus remaining bytes (in data[4], data[5]) if (length > 6) { transactionID = (data[0] << 8) | data[1]; - protocolID = (data[2] << 8) | data[3]; - messageLength = (data[4] << 8) | data[5]; + uint16_t protocolID = (data[2] << 8) | data[3]; + uint16_t messageLength = (data[4] << 8) | data[5]; if (protocolID == 0 && length >= (uint32_t)messageLength + 6 && messageLength < 256) { diff --git a/lib/eModbus/src/ModbusClientTCPasync.h b/lib/eModbus/src/ModbusClientTCPasync.h index a1f2aeea0..f0d49b8d5 100644 --- a/lib/eModbus/src/ModbusClientTCPasync.h +++ b/lib/eModbus/src/ModbusClientTCPasync.h @@ -83,7 +83,7 @@ protected: return headRoom; } - inline ModbusTCPhead& operator= (ModbusTCPhead& t) { + inline ModbusTCPhead& operator= (const ModbusTCPhead& t) { transactionID = t.transactionID; protocolID = t.protocolID; len = t.len; @@ -91,7 +91,7 @@ protected: } protected: - uint8_t headRoom[6]; // Buffer to hold MSB-first TCP header + uint8_t headRoom[6] = {0,0,0,0,0,0}; // Buffer to hold MSB-first TCP header }; struct RequestEntry { @@ -100,7 +100,7 @@ protected: ModbusTCPhead head; uint32_t sentTime; bool isSyncRequest; - RequestEntry(uint32_t t, ModbusMessage m, bool syncReq = false) : + RequestEntry(uint32_t t, const ModbusMessage& m, bool syncReq = false) : token(t), msg(m), head(ModbusTCPhead()), @@ -109,8 +109,8 @@ protected: }; // Base addRequest and syncRequest both must be present - Error addRequestM(ModbusMessage msg, uint32_t token); - ModbusMessage syncRequestM(ModbusMessage msg, uint32_t token); + Error addRequestM(ModbusMessage msg, uint32_t token) override; + ModbusMessage syncRequestM(ModbusMessage msg, uint32_t token) override; // addToQueue: send freshly created request to queue bool addToQueue(int32_t token, ModbusMessage request, bool syncReq = false); @@ -121,8 +121,6 @@ protected: // receive: get response via Client connection // TCPResponse* receive(uint8_t* data, size_t length); - void isInstance() { return; } // make class instantiable - // TCP handling code, all static taking a class instancs as param void onConnected(); void onDisconnected(); diff --git a/lib/eModbus/src/ModbusMessage.cpp b/lib/eModbus/src/ModbusMessage.cpp index 1ed48360d..7e63bdb95 100644 --- a/lib/eModbus/src/ModbusMessage.cpp +++ b/lib/eModbus/src/ModbusMessage.cpp @@ -6,6 +6,7 @@ #undef LOCAL_LOG_LEVEL // #define LOCAL_LOG_LEVEL LOG_LEVEL_ERROR #include "Logging.h" +#include // Default Constructor - takes optional size of MM_data to allocate memory ModbusMessage::ModbusMessage(uint16_t dataLen) { @@ -146,21 +147,19 @@ void ModbusMessage::setServerID(uint8_t serverID) { } void ModbusMessage::setFunctionCode(uint8_t FC) { - // We accept here that [0], [1] may allocate bytes! - if (MM_data.empty()) { - MM_data.reserve(3); // At least an error message should fit + if (MM_data.size() < 2) { + MM_data.resize(2); // Resize to at least 2 to ensure indices 0 and 1 are valid + MM_data[0] = 0; // Optional: Invalid server ID as a placeholder } - // No serverID set yet? use a 0 to initialize it to an error-generating value - if (MM_data.size() < 2) MM_data[0] = 0; // intentional invalid server ID! - MM_data[1] = FC; + MM_data[1] = FC; // Safely set the function code } // add() variant to copy a buffer into MM_data. Returns updated size uint16_t ModbusMessage::add(const uint8_t *arrayOfBytes, uint16_t count) { + uint16_t originalSize = MM_data.size(); + MM_data.resize(originalSize + count); // Copy it - while (count--) { - MM_data.push_back(*arrayOfBytes++); - } + std::copy(arrayOfBytes, arrayOfBytes + count, MM_data.begin() + originalSize); // Return updated size (logical length of message so far) return MM_data.size(); } @@ -181,7 +180,7 @@ uint8_t ModbusMessage::determineFloatOrder() { uint32_t i = 77230; // int value to go into a float without rounding error float f = i; // assign it uint8_t *b = (uint8_t *)&f; // Pointer to bytes of f - uint8_t expect[floatSize] = { 0x47, 0x96, 0xd7, 0x00 }; // IEEE754 representation + const uint8_t expect[floatSize] = { 0x47, 0x96, 0xd7, 0x00 }; // IEEE754 representation uint8_t matches = 0; // number of bytes successfully matched // Loop over the bytes of the expected sequence @@ -225,7 +224,7 @@ uint8_t ModbusMessage::determineDoubleOrder() { uint64_t i = 5791007487489389; // int64 value to go into a double without rounding error double f = i; // assign it uint8_t *b = (uint8_t *)&f; // Pointer to bytes of f - uint8_t expect[doubleSize] = { 0x43, 0x34, 0x92, 0xE4, 0x00, 0x2E, 0xF5, 0x6D }; // IEEE754 representation + const uint8_t expect[doubleSize] = { 0x43, 0x34, 0x92, 0xE4, 0x00, 0x2E, 0xF5, 0x6D }; // IEEE754 representation uint8_t matches = 0; // number of bytes successfully matched // Loop over the bytes of the expected sequence @@ -306,10 +305,7 @@ double ModbusMessage::swapDouble(double& f, int swapRule) { // add() variant for a vector of uint8_t uint16_t ModbusMessage::add(vector v) { - for (auto& b: v) { - MM_data.push_back(b); - } - return MM_data.size(); + return add(v.data(), v.size()); } // add() variants for float and double values diff --git a/lib/eModbus/src/ModbusServer.cpp b/lib/eModbus/src/ModbusServer.cpp index b814bd9b2..90cdcda49 100644 --- a/lib/eModbus/src/ModbusServer.cpp +++ b/lib/eModbus/src/ModbusServer.cpp @@ -30,7 +30,6 @@ MBSworker ModbusServer::getWorker(uint8_t serverID, uint8_t functionCode) { svmap = workerMap.find(ANY_SERVER); if (svmap != workerMap.end()) { serverFound = true; - serverID = ANY_SERVER; } } // Did we find a serverID? @@ -49,7 +48,6 @@ MBSworker ModbusServer::getWorker(uint8_t serverID, uint8_t functionCode) { if (fcmap != svmap->second.end()) { // Yes. Return the function pointer for it. functionCodeFound = true; - functionCode = ANY_FUNCTION_CODE; } } if (functionCodeFound) { @@ -104,6 +102,11 @@ bool ModbusServer::isServerFor(uint8_t serverID) { // Is there one? if (svmap != workerMap.end()) { return true; + } else { + svmap = workerMap.find(ANY_SERVER); + if (svmap != workerMap.end()) { + return true; + } } return false; } diff --git a/lib/eModbus/src/ModbusServer.h b/lib/eModbus/src/ModbusServer.h index 933e27e9c..70c88a6f9 100644 --- a/lib/eModbus/src/ModbusServer.h +++ b/lib/eModbus/src/ModbusServer.h @@ -68,15 +68,12 @@ protected: ModbusServer(); // Destructor - ~ModbusServer(); + virtual ~ModbusServer(); // Prevent copy construction or assignment ModbusServer(ModbusServer& other) = delete; ModbusServer& operator=(ModbusServer& other) = delete; - // Virtual function to prevent this class being instantiated - virtual void isInstance() = 0; - std::map> workerMap; // map on serverID->functionCode->worker function uint32_t messageCount; // Number of Requests processed uint32_t errorCount; // Number of errors responded diff --git a/lib/eModbus/src/ModbusServerEthernet.h b/lib/eModbus/src/ModbusServerEthernet.h index 0a8591031..c520c9f77 100644 --- a/lib/eModbus/src/ModbusServerEthernet.h +++ b/lib/eModbus/src/ModbusServerEthernet.h @@ -15,8 +15,8 @@ // Create own non-virtual EthernetServer class class EthernetServerEM : public EthernetServer { public: - EthernetServerEM(uint16_t port) : EthernetServer(port) { } - void begin(uint16_t port = 0) { } + explicit EthernetServerEM(uint16_t port) : EthernetServer(port) { } + void begin(uint16_t port = 0) override { } }; #include "ModbusServerTCPtemp.h" diff --git a/lib/eModbus/src/ModbusServerRTU.cpp b/lib/eModbus/src/ModbusServerRTU.cpp index 88859d8d3..f7e19eae2 100644 --- a/lib/eModbus/src/ModbusServerRTU.cpp +++ b/lib/eModbus/src/ModbusServerRTU.cpp @@ -94,7 +94,7 @@ void ModbusServerRTU::doBegin(uint32_t baudRate, int coreID, uint32_t userInterv snprintf(taskName, 18, "MBsrv%02XRTU", instanceCounter); // Start task to handle the client - xTaskCreatePinnedToCore((TaskFunction_t)&serve, taskName, SERVER_TASK_STACK, this, 8, &serverTask, coreID >= 0 ? coreID : NULL); + xTaskCreatePinnedToCore((TaskFunction_t)&serve, taskName, SERVER_TASK_STACK, this, 8, &serverTask, coreID >= 0 ? coreID : tskNO_AFFINITY); LOG_D("Server task %d started. Interval=%d\n", (uint32_t)serverTask, MSRinterval); } @@ -126,6 +126,12 @@ bool ModbusServerRTU::isModbusASCII() { return MSRuseASCII; } +// set timeout +void ModbusServerRTU::setModbusTimeout(unsigned long timeout) +{ + serverTimeout = timeout; +} + // Toggle skipping of leading 0x00 byte void ModbusServerRTU::skipLeading0x00(bool onOff) { MSRskipLeadingZeroByte = onOff; @@ -231,8 +237,8 @@ void ModbusServerRTU::serve(ModbusServerRTU *myServer) { response = m; } } else { - // No callback. Is at least the serverID valid and no broadcast? - if (myServer->isServerFor(request[0]) && request[0] != 0x00) { + // No callback. Is at least the serverID valid? + if (myServer->isServerFor(request[0])) { // Yes. Send back a ILLEGAL_FUNCTION error response.setError(request.getServerID(), request.getFunctionCode(), ILLEGAL_FUNCTION); } diff --git a/lib/eModbus/src/ModbusServerRTU.h b/lib/eModbus/src/ModbusServerRTU.h index fd5b8ab96..76c67b740 100644 --- a/lib/eModbus/src/ModbusServerRTU.h +++ b/lib/eModbus/src/ModbusServerRTU.h @@ -47,6 +47,9 @@ public: // Inquire protocol mode bool isModbusASCII(); + // set timeout + void setModbusTimeout(unsigned long timeout); + // Toggle skipping of leading 0x00 byte void skipLeading0x00(bool onOff = true); @@ -61,8 +64,6 @@ protected: ModbusServerRTU(ModbusServerRTU& m) = delete; ModbusServerRTU& operator=(ModbusServerRTU& m) = delete; - inline void isInstance() { } // Make class instantiable - // internal common begin function void doBegin(uint32_t baudRate, int coreID, uint32_t userInterval); diff --git a/lib/eModbus/src/ModbusServerTCPasync.cpp b/lib/eModbus/src/ModbusServerTCPasync.cpp index c08372454..e8d0a43dc 100644 --- a/lib/eModbus/src/ModbusServerTCPasync.cpp +++ b/lib/eModbus/src/ModbusServerTCPasync.cpp @@ -32,7 +32,7 @@ ModbusServerTCPasync::mb_client::~mb_client() { void ModbusServerTCPasync::mb_client::onData(uint8_t* data, size_t len) { lastActiveTime = millis(); - LOG_D("data len %d\n", len); + LOG_D("data len %u\n", len); Error error = SUCCESS; size_t i = 0; @@ -250,7 +250,7 @@ void ModbusServerTCPasync::onClientConnect(AsyncClient* client) { LOCK_GUARD(lock1, cListLock); if (clients.size() < maxNoClients) { clients.emplace_back(new mb_client(this, client)); - LOG_D("nr clients: %d\n", clients.size()); + LOG_D("nr clients: %u\n", clients.size()); } else { LOG_D("max number of clients reached, closing new\n"); client->close(true); @@ -264,5 +264,5 @@ void ModbusServerTCPasync::onClientDisconnect(mb_client* client) { clients.remove_if([client](mb_client* i) { return i->client == client->client; }); // delete client itself delete client; - LOG_D("nr clients: %d\n", clients.size()); + LOG_D("nr clients: %u\n", clients.size()); } diff --git a/lib/eModbus/src/ModbusServerTCPasync.h b/lib/eModbus/src/ModbusServerTCPasync.h index 410d8d6fb..4ae8ac3df 100644 --- a/lib/eModbus/src/ModbusServerTCPasync.h +++ b/lib/eModbus/src/ModbusServerTCPasync.h @@ -76,7 +76,6 @@ class ModbusServerTCPasync : public ModbusServer { bool isRunning(); protected: - inline void isInstance() { } void onClientConnect(AsyncClient* client); void onClientDisconnect(mb_client* client); diff --git a/lib/eModbus/src/ModbusServerTCPtemp.h b/lib/eModbus/src/ModbusServerTCPtemp.h index 7ae5b2bc9..56c1fa91d 100644 --- a/lib/eModbus/src/ModbusServerTCPtemp.h +++ b/lib/eModbus/src/ModbusServerTCPtemp.h @@ -44,8 +44,6 @@ protected: ModbusServerTCP(ModbusServerTCP& m) = delete; ModbusServerTCP& operator=(ModbusServerTCP& m) = delete; - inline void isInstance() { } - uint8_t numClients; TaskHandle_t serverTask; uint16_t serverPort; @@ -159,7 +157,7 @@ template snprintf(taskName, 18, "MBserve%04X", port); // Start task to handle the client - xTaskCreatePinnedToCore((TaskFunction_t)&serve, taskName, SERVER_TASK_STACK, this, 5, &serverTask, coreID >= 0 ? coreID : NULL); + xTaskCreatePinnedToCore((TaskFunction_t)&serve, taskName, SERVER_TASK_STACK, this, 5, &serverTask, coreID >= 0 ? coreID : tskNO_AFFINITY); LOG_D("Server task %s started (%d).\n", taskName, (uint32_t)serverTask); // Wait two seconds for it to establish @@ -206,7 +204,7 @@ bool ModbusServerTCP::accept(CT& client, uint32_t timeout, int coreID) { snprintf(taskName, 18, "MBsrv%02Xclnt", i); // Start task to handle the client - xTaskCreatePinnedToCore((TaskFunction_t)&worker, taskName, SERVER_TASK_STACK, clients[i], 5, &clients[i]->task, coreID >= 0 ? coreID : NULL); + xTaskCreatePinnedToCore((TaskFunction_t)&worker, taskName, SERVER_TASK_STACK, clients[i], 5, &clients[i]->task, coreID >= 0 ? coreID : tskNO_AFFINITY); LOG_D("Started client %d task %d\n", i, (uint32_t)(clients[i]->task)); return true; diff --git a/lib/eModbus/src/ModbusTypeDefs.h b/lib/eModbus/src/ModbusTypeDefs.h index 5aad1d5dd..cb281ad20 100644 --- a/lib/eModbus/src/ModbusTypeDefs.h +++ b/lib/eModbus/src/ModbusTypeDefs.h @@ -109,8 +109,8 @@ const uint8_t swapTables[8][8] = { enum FCType : uint8_t { FC01_TYPE, // Two uint16_t parameters (FC 0x01, 0x02, 0x03, 0x04, 0x05, 0x06) FC07_TYPE, // no additional parameter (FCs 0x07, 0x0b, 0x0c, 0x11) - FC0F_TYPE, // two uint16_t parameters, a uint8_t length byte and a uint16_t* pointer to array of bytes (FC 0x0f) - FC10_TYPE, // two uint16_t parameters, a uint8_t length byte and a uint8_t* pointer to array of words (FC 0x10) + FC0F_TYPE, // two uint16_t parameters, a uint8_t length byte and a uint8_t* pointer to array of bytes (FC 0x0f) + FC10_TYPE, // two uint16_t parameters, a uint8_t length byte and a uint16_t* pointer to array of words (FC 0x10) FC16_TYPE, // three uint16_t parameters (FC 0x16) FC18_TYPE, // one uint16_t parameter (FC 0x18) FCGENERIC, // for FCs not yet explicitly coded (or too complex) diff --git a/lib/eModbus/src/RTUutils.cpp b/lib/eModbus/src/RTUutils.cpp index d360c95af..c92d0ffd5 100644 --- a/lib/eModbus/src/RTUutils.cpp +++ b/lib/eModbus/src/RTUutils.cpp @@ -3,13 +3,13 @@ // MIT license - see license.md for details // ================================================================================================= #include "options.h" +#if HAS_FREERTOS #include "ModbusMessage.h" #include "RTUutils.h" #undef LOCAL_LOG_LEVEL // #define LOCAL_LOG_LEVEL LOG_LEVEL_VERBOSE #include "Logging.h" -#if HAS_FREERTOS // calcCRC: calculate Modbus CRC16 on a given array of bytes uint16_t RTUutils::calcCRC(const uint8_t *data, uint16_t len) { // CRC16 pre-calculated tables @@ -57,10 +57,9 @@ uint16_t RTUutils::calcCRC(const uint8_t *data, uint16_t len) { uint8_t crcHi = 0xFF; uint8_t crcLo = 0xFF; - uint8_t index; while (len--) { - index = crcLo ^ *data++; + uint8_t index = crcLo ^ *data++; crcLo = crcHi ^ crcHiTable[index]; crcHi = crcLoTable[index]; } @@ -464,4 +463,5 @@ const char RTUutils::ASCIIread[] = { const char RTUutils::ASCIIwrite[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }; + #endif diff --git a/lib/eModbus/src/RTUutils.h b/lib/eModbus/src/RTUutils.h index f50d8f449..e3f41be3e 100644 --- a/lib/eModbus/src/RTUutils.h +++ b/lib/eModbus/src/RTUutils.h @@ -5,9 +5,6 @@ #ifndef _RTU_UTILS_H #define _RTU_UTILS_H #include -#if NEED_UART_PATCH -#include -#endif #include #include "Stream.h" #include "ModbusTypeDefs.h" @@ -52,11 +49,13 @@ public: // RTSauto: dummy callback for auto half duplex RS485 boards inline static void RTSauto(bool level) { return; } // NOLINT +#if HAS_FREERTOS // Necessary preparations for a HardwareSerial static void prepareHardwareSerial(HardwareSerial& s, uint16_t bufferSize = 260) { s.setRxBufferSize(bufferSize); s.setTxBufferSize(bufferSize); } +#endif protected: // Printable characters for ASCII protocol: 012345678ABCDEF diff --git a/lib/eModbus/src/options.h b/lib/eModbus/src/options.h index c65bc1c2b..9de44e97a 100644 --- a/lib/eModbus/src/options.h +++ b/lib/eModbus/src/options.h @@ -12,7 +12,6 @@ #define HAS_FREERTOS 1 #define HAS_ETHERNET 1 #define IS_LINUX 0 -#define NEED_UART_PATCH 1 const unsigned int SERVER_TASK_STACK = 4096; const unsigned int CLIENT_TASK_STACK = 4096; @@ -23,7 +22,6 @@ const unsigned int CLIENT_TASK_STACK = 4096; #define HAS_FREERTOS 0 #define HAS_ETHERNET 0 #define IS_LINUX 0 -#define NEED_UART_PATCH 0 /* === LINUX DEFINITIONS AND MACROS === */ #elif defined(__linux__) @@ -31,7 +29,6 @@ const unsigned int CLIENT_TASK_STACK = 4096; #define HAS_FREERTOS 0 #define HAS_ETHERNET 0 #define IS_LINUX 1 -#define NEED_UART_PATCH 0 #include // for printf() #include // for memcpy(), strlen() etc. #include // for uint32_t etc. From 7965ecd856c4ac9ed1dcdc04dbfc332acf445250 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 4 Aug 2025 10:30:40 +0200 Subject: [PATCH 21/24] NTC parameters for E32V2.2 P2B --- src/core/analogsensor.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/analogsensor.h b/src/core/analogsensor.h index a00f86098..32b31a0e6 100644 --- a/src/core/analogsensor.h +++ b/src/core/analogsensor.h @@ -168,11 +168,11 @@ class AnalogSensor { void store_counters(); private: - static constexpr double Beta = 3380; + static constexpr double Beta = 4260; static constexpr double T0 = 273.15; static constexpr double T25 = 298.15; - static constexpr double R0 = 10000; - static constexpr double Rt = 10000; + static constexpr double R0 = 100000; + static constexpr double Rt = 60000; static constexpr uint8_t MAX_SENSORS = 20; static constexpr uint32_t MEASURE_ANALOG_INTERVAL = 500; From 92b1515c8ad7a20002a598419a9b77d0494e30a1 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 14 Aug 2025 07:52:12 +0200 Subject: [PATCH 22/24] update pkg --- interface/package.json | 18 +- interface/pnpm-lock.yaml | 476 +++++++++++++++++++-------------------- 2 files changed, 247 insertions(+), 247 deletions(-) diff --git a/interface/package.json b/interface/package.json index 48ad4dcfa..29f21ecb9 100644 --- a/interface/package.json +++ b/interface/package.json @@ -25,8 +25,8 @@ "@alova/adapter-xhr": "2.2.1", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@mui/icons-material": "^7.2.0", - "@mui/material": "^7.2.0", + "@mui/icons-material": "^7.3.1", + "@mui/material": "^7.3.1", "@table-library/react-table-library": "4.1.15", "alova": "3.3.4", "async-validator": "^4.2.5", @@ -38,28 +38,28 @@ "react": "^19.1.1", "react-dom": "^19.1.1", "react-icons": "^5.5.0", - "react-router": "^7.7.1", + "react-router": "^7.8.0", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", "typescript": "^5.9.2" }, "devDependencies": { "@babel/core": "^7.28.0", - "@eslint/js": "^9.32.0", + "@eslint/js": "^9.33.0", "@preact/compat": "^18.3.1", "@preact/preset-vite": "^2.10.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^24.2.0", - "@types/react": "^19.1.9", + "@types/node": "^24.2.1", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", "concurrently": "^9.2.0", - "eslint": "^9.32.0", + "eslint": "^9.33.0", "eslint-config-prettier": "^10.1.8", "prettier": "^3.6.2", "rollup-plugin-visualizer": "^6.0.3", "terser": "^5.43.1", - "typescript-eslint": "^8.38.0", - "vite": "^7.0.6", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.1.4" }, diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 2b738d319..e685fb929 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -13,19 +13,19 @@ importers: version: 2.2.1(alova@3.3.4) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.1.9)(react@19.1.1) + version: 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) '@mui/icons-material': - specifier: ^7.2.0 - version: 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + specifier: ^7.3.1 + version: 7.3.1(@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) '@mui/material': - specifier: ^7.2.0 - version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^7.3.1 + version: 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@table-library/react-table-library': specifier: 4.1.15 - version: 4.1.15(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 4.1.15(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) alova: specifier: 3.3.4 version: 3.3.4 @@ -57,8 +57,8 @@ importers: specifier: ^5.5.0 version: 5.5.0(react@19.1.1) react-router: - specifier: ^7.7.1 - version: 7.7.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^7.8.0 + version: 7.8.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react-toastify: specifier: ^11.0.5 version: 11.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -73,35 +73,35 @@ importers: specifier: ^7.28.0 version: 7.28.0 '@eslint/js': - specifier: ^9.32.0 - version: 9.32.0 + specifier: ^9.33.0 + version: 9.33.0 '@preact/compat': specifier: ^18.3.1 version: 18.3.1(preact@10.27.0) '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.0)(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.0)(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)) '@trivago/prettier-plugin-sort-imports': specifier: ^5.2.2 version: 5.2.2(prettier@3.6.2) '@types/node': - specifier: ^24.2.0 - version: 24.2.0 + specifier: ^24.2.1 + version: 24.2.1 '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) concurrently: specifier: ^9.2.0 version: 9.2.0 eslint: - specifier: ^9.32.0 - version: 9.32.0 + specifier: ^9.33.0 + version: 9.33.0 eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.32.0) + version: 10.1.8(eslint@9.33.0) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -112,17 +112,17 @@ importers: specifier: ^5.43.1 version: 5.43.1 typescript-eslint: - specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) + specifier: ^8.39.1 + version: 8.39.1(eslint@9.33.0)(typescript@5.9.2) vite: - specifier: ^7.0.6 - version: 7.0.6(@types/node@24.2.0)(terser@5.43.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@24.2.1)(terser@5.43.1) vite-plugin-imagemin: specifier: ^0.6.1 - version: 0.6.1(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)) + version: 0.6.1(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.2)(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)) + version: 5.1.4(typescript@5.9.2)(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)) packages: @@ -465,28 +465,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.32.0': - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + '@eslint/js@9.33.0': + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -533,27 +533,27 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@mui/core-downloads-tracker@7.2.0': - resolution: {integrity: sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==} + '@mui/core-downloads-tracker@7.3.1': + resolution: {integrity: sha512-+mIK1Z0BhOaQ0vCgOkT1mSrIpEHLo338h4/duuL4TBLXPvUMit732mnwJY3W40Avy30HdeSfwUAAGRkKmwRaEQ==} - '@mui/icons-material@7.2.0': - resolution: {integrity: sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==} + '@mui/icons-material@7.3.1': + resolution: {integrity: sha512-upzCtG6awpL6noEZlJ5Z01khZ9VnLNLaj7tb6iPbN6G97eYfUTs8e9OyPKy3rEms3VQWmVBfri7jzeaRxdFIzA==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^7.2.0 + '@mui/material': ^7.3.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/material@7.2.0': - resolution: {integrity: sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==} + '@mui/material@7.3.1': + resolution: {integrity: sha512-Xf6Shbo03YmcBedZMwSpEFOwpYDtU7tC+rhAHTrA9FHk0FpsDqiQ9jUa1j/9s3HLs7KWb5mDcGnlwdh9Q9KAag==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.2.0 + '@mui/material-pigment-css': ^7.3.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -567,8 +567,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@7.2.0': - resolution: {integrity: sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==} + '@mui/private-theming@7.3.1': + resolution: {integrity: sha512-WU3YLkKXii/x8ZEKnrLKsPwplCVE11yZxUvlaaZSIzCcI3x2OdFC8eMlNy74hVeUsYQvzzX1Es/k4ARPlFvpPQ==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -577,8 +577,8 @@ packages: '@types/react': optional: true - '@mui/styled-engine@7.2.0': - resolution: {integrity: sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==} + '@mui/styled-engine@7.3.1': + resolution: {integrity: sha512-Nqo6OHjvJpXJ1+9TekTE//+8RybgPQUKwns2Lh0sq+8rJOUSUKS3KALv4InSOdHhIM9Mdi8/L7LTF1/Ky6D6TQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -590,8 +590,8 @@ packages: '@emotion/styled': optional: true - '@mui/system@7.2.0': - resolution: {integrity: sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==} + '@mui/system@7.3.1': + resolution: {integrity: sha512-mIidecvcNVpNJMdPDmCeoSL5zshKBbYPcphjuh6ZMjhybhqhZ4mX6k9zmIWh6XOXcqRQMg5KrcjnO0QstrNj3w==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -606,16 +606,16 @@ packages: '@types/react': optional: true - '@mui/types@7.4.4': - resolution: {integrity: sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==} + '@mui/types@7.4.5': + resolution: {integrity: sha512-ZPwlAOE3e8C0piCKbaabwrqZbW4QvWz0uapVPWya7fYj6PeDkl5sSJmomT7wjOcZGPB48G/a6Ubidqreptxz4g==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/utils@7.2.0': - resolution: {integrity: sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==} + '@mui/utils@7.3.1': + resolution: {integrity: sha512-/31y4wZqVWa0jzMnzo6JPjxwP6xXy4P3+iLbosFg/mJQowL1KIou0LC+lquWW60FKVbKz5ZUWBg2H3jausa0pw==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -846,8 +846,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@24.2.0': - resolution: {integrity: sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==} + '@types/node@24.2.1': + resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -865,8 +865,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.1.9': - resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} + '@types/react@19.1.10': + resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -874,63 +874,63 @@ packages: '@types/svgo@2.6.4': resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + '@typescript-eslint/eslint-plugin@8.39.1': + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + '@typescript-eslint/parser@8.39.1': + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + '@typescript-eslint/project-service@8.39.1': + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + '@typescript-eslint/scope-manager@8.39.1': + resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + '@typescript-eslint/tsconfig-utils@8.39.1': + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + '@typescript-eslint/type-utils@8.39.1': + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + '@typescript-eslint/types@8.39.1': + resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + '@typescript-eslint/typescript-estree@8.39.1': + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + '@typescript-eslint/utils@8.39.1': + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + '@typescript-eslint/visitor-keys@8.39.1': + resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -1045,8 +1045,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1095,8 +1095,8 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001733: + resolution: {integrity: sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==} caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -1315,8 +1315,8 @@ packages: duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - electron-to-chromium@1.5.194: - resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==} + electron-to-chromium@1.5.199: + resolution: {integrity: sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1506,8 +1506,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.32.0: - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + eslint@9.33.0: + resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2495,8 +2495,8 @@ packages: react-is@19.1.1: resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} - react-router@7.7.1: - resolution: {integrity: sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==} + react-router@7.8.0: + resolution: {integrity: sha512-r15M3+LHKgM4SOapNmsH3smAizWds1vJ0Z9C4mWaKnT9/wD7+d/0jYcj6LmOvonkrO4Rgdyp4KQ/29gWN2i1eg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -2717,8 +2717,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + spdx-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} squeak@1.3.0: resolution: {integrity: sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==} @@ -2894,12 +2894,12 @@ packages: peerDependencies: typescript: '>=3.5.1' - typescript-eslint@8.38.0: - resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + typescript-eslint@8.39.1: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} @@ -2966,8 +2966,8 @@ packages: vite: optional: true - vite@7.0.6: - resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + vite@7.1.2: + resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3121,7 +3121,7 @@ snapshots: dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.25.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -3240,7 +3240,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1)': + '@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 '@emotion/babel-plugin': 11.13.5 @@ -3252,7 +3252,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 transitivePeerDependencies: - supports-color @@ -3266,18 +3266,18 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.1) '@emotion/utils': 1.4.2 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 transitivePeerDependencies: - supports-color @@ -3372,9 +3372,9 @@ snapshots: '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0)': dependencies: - eslint: 9.32.0 + eslint: 9.33.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3387,9 +3387,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -3407,13 +3407,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.32.0': {} + '@eslint/js@9.33.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.4': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -3454,25 +3454,25 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 - '@mui/core-downloads-tracker@7.2.0': {} + '@mui/core-downloads-tracker@7.3.1': {} - '@mui/icons-material@7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': + '@mui/icons-material@7.3.1(@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@mui/material': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 - '@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@mui/material@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/core-downloads-tracker': 7.2.0 - '@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) - '@mui/types': 7.4.4(@types/react@19.1.9) - '@mui/utils': 7.2.0(@types/react@19.1.9)(react@19.1.1) + '@mui/core-downloads-tracker': 7.3.1 + '@mui/system': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) + '@mui/types': 7.4.5(@types/react@19.1.10) + '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.1.9) + '@types/react-transition-group': 4.4.12(@types/react@19.1.10) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -3481,20 +3481,20 @@ snapshots: react-is: 19.1.1 react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) - '@types/react': 19.1.9 + '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) + '@types/react': 19.1.10 - '@mui/private-theming@7.2.0(@types/react@19.1.9)(react@19.1.1)': + '@mui/private-theming@7.3.1(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/utils': 7.2.0(@types/react@19.1.9)(react@19.1.1) + '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) prop-types: 15.8.1 react: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 - '@mui/styled-engine@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(react@19.1.1)': + '@mui/styled-engine@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 '@emotion/cache': 11.14.0 @@ -3504,42 +3504,42 @@ snapshots: prop-types: 15.8.1 react: 19.1.1 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) - '@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1)': + '@mui/system@7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/private-theming': 7.2.0(@types/react@19.1.9)(react@19.1.1) - '@mui/styled-engine': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1))(react@19.1.1) - '@mui/types': 7.4.4(@types/react@19.1.9) - '@mui/utils': 7.2.0(@types/react@19.1.9)(react@19.1.1) + '@mui/private-theming': 7.3.1(@types/react@19.1.10)(react@19.1.1) + '@mui/styled-engine': 7.3.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1))(react@19.1.1) + '@mui/types': 7.4.5(@types/react@19.1.10) + '@mui/utils': 7.3.1(@types/react@19.1.10)(react@19.1.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 19.1.1 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(@types/react@19.1.9)(react@19.1.1) - '@types/react': 19.1.9 + '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(@types/react@19.1.10)(react@19.1.1) + '@types/react': 19.1.10 - '@mui/types@7.4.4(@types/react@19.1.9)': + '@mui/types@7.4.5(@types/react@19.1.10)': dependencies: '@babel/runtime': 7.28.2 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 - '@mui/utils@7.2.0(@types/react@19.1.9)(react@19.1.1)': + '@mui/utils@7.3.1(@types/react@19.1.10)(react@19.1.1)': dependencies: '@babel/runtime': 7.28.2 - '@mui/types': 7.4.4(@types/react@19.1.9) + '@mui/types': 7.4.5(@types/react@19.1.10) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 19.1.1 react-is: 19.1.1 optionalDependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 '@noble/hashes@1.8.0': {} @@ -3565,18 +3565,18 @@ snapshots: dependencies: preact: 10.27.0 - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.0)(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.0)(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.27.0)(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)) + '@prefresh/vite': 2.4.8(preact@10.27.0)(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.0.6(@types/node@24.2.0)(terser@5.43.1) - vite-prerender-plugin: 0.5.11(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)) + vite: 7.1.2(@types/node@24.2.1)(terser@5.43.1) + vite-prerender-plugin: 0.5.11(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)) transitivePeerDependencies: - preact - supports-color @@ -3589,7 +3589,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.8(preact@10.27.0)(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1))': + '@prefresh/vite@2.4.8(preact@10.27.0)(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -3597,7 +3597,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.27.0 - vite: 7.0.6(@types/node@24.2.0)(terser@5.43.1) + vite: 7.1.2(@types/node@24.2.1)(terser@5.43.1) transitivePeerDependencies: - supports-color @@ -3668,9 +3668,9 @@ snapshots: '@sindresorhus/is@0.7.0': {} - '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.1.9)(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.1.10)(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.1.9)(react@19.1.1) + '@emotion/react': 11.14.0(@types/react@19.1.10)(react@19.1.1) clsx: 1.1.1 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -3696,7 +3696,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.2.0 + '@types/node': 24.2.1 '@types/imagemin-gifsicle@7.0.4': dependencies: @@ -3725,19 +3725,19 @@ snapshots: '@types/imagemin@7.0.1': dependencies: - '@types/node': 24.2.0 + '@types/node': 24.2.1 '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 24.2.0 + '@types/node': 24.2.1 '@types/minimatch@6.0.0': dependencies: minimatch: 10.0.3 - '@types/node@24.2.0': + '@types/node@24.2.1': dependencies: undici-types: 7.10.0 @@ -3745,35 +3745,35 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-dom@19.1.7(@types/react@19.1.9)': + '@types/react-dom@19.1.7(@types/react@19.1.10)': dependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 - '@types/react-transition-group@4.4.12(@types/react@19.1.9)': + '@types/react-transition-group@4.4.12(@types/react@19.1.10)': dependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 - '@types/react@19.1.9': + '@types/react@19.1.10': dependencies: csstype: 3.1.3 '@types/responselike@1.0.3': dependencies: - '@types/node': 24.2.0 + '@types/node': 24.2.1 '@types/svgo@2.6.4': dependencies: - '@types/node': 24.2.0 + '@types/node': 24.2.1 - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0)(typescript@5.9.2))(eslint@9.33.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.32.0 + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 + eslint: 9.33.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -3782,56 +3782,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/parser@8.39.1(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 - eslint: 9.32.0 + eslint: 9.33.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.38.0': + '@typescript-eslint/scope-manager@8.39.1': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.1(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0)(typescript@5.9.2) debug: 4.4.1 - eslint: 9.32.0 + eslint: 9.33.0 ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/types@8.39.1': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -3842,20 +3842,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.1(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - eslint: 9.32.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + eslint: 9.33.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.38.0': + '@typescript-eslint/visitor-keys@8.39.1': dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 acorn-jsx@5.3.2(acorn@8.15.0): @@ -3973,12 +3973,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.1: + browserslist@4.25.2: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.194 + caniuse-lite: 1.0.30001733 + electron-to-chromium: 1.5.199 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + update-browserslist-db: 1.1.3(browserslist@4.25.2) buffer-alloc-unsafe@1.1.0: {} @@ -4034,7 +4034,7 @@ snapshots: camelcase@2.1.1: {} - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001733: {} caw@2.0.1: dependencies: @@ -4322,7 +4322,7 @@ snapshots: duplexer3@0.1.5: {} - electron-to-chromium@1.5.194: {} + electron-to-chromium@1.5.199: {} emoji-regex@8.0.0: {} @@ -4465,9 +4465,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.32.0): + eslint-config-prettier@10.1.8(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 eslint-scope@8.4.0: dependencies: @@ -4478,16 +4478,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.32.0: + eslint@9.33.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.1 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 - '@eslint/plugin-kit': 0.3.4 + '@eslint/js': 9.33.0 + '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -5480,7 +5480,7 @@ snapshots: react-is@19.1.1: {} - react-router@7.7.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + react-router@7.8.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: cookie: 1.0.2 react: 19.1.1 @@ -5695,16 +5695,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 + spdx-license-ids: 3.0.22 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 + spdx-license-ids: 3.0.22 - spdx-license-ids@3.0.21: {} + spdx-license-ids@3.0.22: {} squeak@1.3.0: dependencies: @@ -5865,13 +5865,13 @@ snapshots: dependencies: typescript: 5.9.2 - typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.9.2): + typescript-eslint@8.39.1(eslint@9.33.0)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - eslint: 9.32.0 + '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0)(typescript@5.9.2))(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0)(typescript@5.9.2) + eslint: 9.33.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -5887,9 +5887,9 @@ snapshots: universalify@2.0.1: {} - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.25.2): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -5916,7 +5916,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-plugin-imagemin@0.6.1(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)): + vite-plugin-imagemin@0.6.1(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)): dependencies: '@types/imagemin': 7.0.1 '@types/imagemin-gifsicle': 7.0.4 @@ -5941,11 +5941,11 @@ snapshots: imagemin-webp: 6.1.0 jpegtran-bin: 6.0.1 pathe: 0.2.0 - vite: 7.0.6(@types/node@24.2.0)(terser@5.43.1) + vite: 7.1.2(@types/node@24.2.1)(terser@5.43.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.11(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)): + vite-prerender-plugin@0.5.11(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.17 @@ -5953,20 +5953,20 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.0.6(@types/node@24.2.0)(terser@5.43.1) + vite: 7.1.2(@types/node@24.2.1)(terser@5.43.1) - vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.0.6(@types/node@24.2.0)(terser@5.43.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.2(@types/node@24.2.1)(terser@5.43.1)): dependencies: debug: 4.4.1 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.2) optionalDependencies: - vite: 7.0.6(@types/node@24.2.0)(terser@5.43.1) + vite: 7.1.2(@types/node@24.2.1)(terser@5.43.1) transitivePeerDependencies: - supports-color - typescript - vite@7.0.6(@types/node@24.2.0)(terser@5.43.1): + vite@7.1.2(@types/node@24.2.1)(terser@5.43.1): dependencies: esbuild: 0.25.8 fdir: 6.4.6(picomatch@4.0.3) @@ -5975,7 +5975,7 @@ snapshots: rollup: 4.46.2 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.2.0 + '@types/node': 24.2.1 fsevents: 2.3.3 terser: 5.43.1 From a50227638bc55e928ad530caece734751180bd23 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 18 Aug 2025 17:34:16 +0200 Subject: [PATCH 23/24] fix boiler wwMaxPower and ww_disinfect, dev16 --- src/devices/boiler.cpp | 18 +++++++++++------- src/devices/boiler.h | 2 +- src/emsesp_version.h | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 7cdac85ed..130133672 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -52,7 +52,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const // not ems1.0, but HT3 if (model() != EMSdevice::EMS_DEVICE_FLAG_EMS) { - register_telegram_type(0x26, "UBASettingsWW", true, MAKE_PF_CB(process_UBASettingsWW)); + register_telegram_type(0x27, "UBASettingsWW", true, MAKE_PF_CB(process_UBASettingsWW)); register_telegram_type(0x2A, "MC110Status", false, MAKE_PF_CB(process_MC110Status)); } @@ -1365,7 +1365,7 @@ void Boiler::process_UBAParameters(std::shared_ptr telegram) { * Boiler(0x08) -> Me(0x0B), ?(0x26), data: 01 05 00 0F 00 1E 58 5A */ void Boiler::process_UBASettingsWW(std::shared_ptr telegram) { - has_update(telegram, wwMaxPower_, 7); + has_update(telegram, wwMaxPower_, 10); } // 0x33 @@ -2578,7 +2578,7 @@ bool Boiler::set_ww_maxpower(const char * value, const int8_t id) { return false; } - write_command(EMS_TYPE_UBASettingsWW, 7, v, EMS_TYPE_UBASettingsWW); + write_command(EMS_TYPE_UBASettingsWW, 10, v, EMS_TYPE_UBASettingsWW); return true; } @@ -2839,7 +2839,7 @@ bool Boiler::set_ww_disinfect(const char * value, const int8_t id) { } if (is_received(EMS_TYPE_UBAParameterWWPlus)) { - write_command(EMS_TYPE_UBAFlags, 0, (v ? 0x44 : 0x04), 0xE9); // not sure if this is in flags + write_command(0x05, 44, (v ? 0xFF : 0xFE), 0xE9); // https://github.com/emsesp/EMS-ESP32/discussions/2601 } else { write_command(EMS_TYPE_UBAFlags, 0, (v ? 0x44 : 0x04), 0x34); } @@ -2916,11 +2916,11 @@ bool Boiler::set_reset(const char * value, const int8_t id) { return true; // dash } else if (num == 1) { // LOG_INFO("Reset boiler maintenance message"); - write_command(0x05, 0x08, 0xFF, 0x1C); + write_command(0x05, 8, 0xFF, 0x1C); return true; } else if (num == 2) { // LOG_INFO("Reset boiler error message"); - write_command(0x05, 0x00, 0x5A); // error reset + write_command(0x05, 0, 0x5A); // error reset return true; } else if (num == 3) { // LOG_INFO("Reset boiler history"); @@ -2928,7 +2928,11 @@ bool Boiler::set_reset(const char * value, const int8_t id) { return true; } else if (num == 4) { // LOG_INFO("Reset boiler message"); - write_command(0x05, 0x08, 0xFF); // same as maintenance + write_command(0x05, 8, 0xFF); // same as maintenance + return true; + } else if (num == 5) { + // LOG_INFO("Factory Reset"); + write_command(0x05, 6, 154); return true; } return false; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 48061d255..3ff03cf76 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -43,7 +43,7 @@ class Boiler : public EMSdevice { uint8_t boilerState_ = EMS_VALUE_UINT8_NOTSET; // Boiler state flag - FOR INTERNAL USE - static constexpr uint8_t EMS_TYPE_UBASettingsWW = 0x26; + static constexpr uint8_t EMS_TYPE_UBASettingsWW = 0x27; static constexpr uint8_t EMS_TYPE_UBAParameterWW = 0x33; static constexpr uint8_t EMS_TYPE_UBAFunctionTest = 0x1D; static constexpr uint8_t EMS_TYPE_UBAFlags = 0x35; diff --git a/src/emsesp_version.h b/src/emsesp_version.h index d265f92c5..5ff361f20 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.3-dev.15" +#define EMSESP_APP_VERSION "3.7.3-dev.16" From deb87cf5d7cacdbf984e3aa9e647bc98c0e5ebd4 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 23 Aug 2025 19:25:59 +0200 Subject: [PATCH 24/24] fix standalone --- lib_standalone/ESPAsyncWebServer.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib_standalone/ESPAsyncWebServer.h b/lib_standalone/ESPAsyncWebServer.h index 9ed4acfe5..69deeb3cd 100644 --- a/lib_standalone/ESPAsyncWebServer.h +++ b/lib_standalone/ESPAsyncWebServer.h @@ -243,6 +243,9 @@ class AsyncWebServer { void on(const char * uri, WebRequestMethodComposite method, ArRequestHandlerFunction onRequest) {}; }; +#ifndef SSE_MAX_QUEUED_MESSAGES +#define SSE_MAX_QUEUED_MESSAGES 32 +#endif class AsyncEventSource : public AsyncWebHandler { public: @@ -252,6 +255,9 @@ class AsyncEventSource : public AsyncWebHandler { size_t count() const { return 1; } + size_t avgPacketsWaiting() const { + return 0; + }; void send(const char * message, const char * event = NULL, uint32_t id = 0, uint32_t reconnect = 0) {}; };