From 73af1f444b6077a0721b0e7e92f4318ed8fcd89f Mon Sep 17 00:00:00 2001 From: Bluefox Date: Sun, 8 Dec 2024 13:46:38 +0000 Subject: [PATCH] Showed value in object edit dialog (#2845) --- README.md | 6 +- package-lock.json | 484 +++++++++--------- packages/adapter-react-v5/README.md | 4 +- packages/adapter-react-v5/package.json | 12 +- .../src/Components/IconDeviceType.tsx | 5 + .../src/Components/ObjectBrowser.tsx | 3 +- .../adapter-react-v5/src/LegacyConnection.tsx | 1 - packages/adapter-react-v5/src/i18n/de.json | 4 +- packages/adapter-react-v5/src/i18n/en.json | 3 +- packages/admin/package.json | 10 +- packages/admin/src-admin/package.json | 4 +- packages/admin/src-admin/src/App.tsx | 12 +- .../components/Adapters/AdapterGeneric.tsx | 18 +- .../src/components/Adapters/AdaptersList.tsx | 67 ++- .../src/components/Hosts/HostRow.tsx | 2 +- .../Object/ObjectBrowserEditObject.tsx | 317 +++++++++++- .../components/Object/ObjectBrowserValue.tsx | 20 +- .../src/components/Object/ObjectChart.tsx | 4 +- .../components/Object/ObjectHistoryData.tsx | 4 +- .../SystemSettingsTabs/MainSettingsDialog.tsx | 5 +- .../SystemSettingsTabs/RepositoriesDialog.tsx | 1 - packages/admin/src-admin/src/i18n/de.json | 7 +- packages/admin/src-admin/src/i18n/en.json | 3 + packages/admin/src-admin/src/i18n/es.json | 3 + packages/admin/src-admin/src/i18n/fr.json | 3 + packages/admin/src-admin/src/i18n/it.json | 3 + packages/admin/src-admin/src/i18n/nl.json | 3 + packages/admin/src-admin/src/i18n/pl.json | 3 + packages/admin/src-admin/src/i18n/pt.json | 3 + packages/admin/src-admin/src/i18n/ru.json | 3 + packages/admin/src-admin/src/i18n/uk.json | 3 + packages/admin/src-admin/src/i18n/zh-cn.json | 3 + .../admin/src-admin/src/tabs/Adapters.tsx | 44 +- packages/admin/src-admin/src/tabs/Hosts.tsx | 13 +- packages/admin/src/lib/web.ts | 1 - packages/admin/src/main.ts | 1 - .../src/JsonConfigComponent/ConfigPanel.tsx | 6 +- .../src/JsonConfigComponent/ConfigTable.tsx | 2 +- 38 files changed, 763 insertions(+), 327 deletions(-) diff --git a/README.md b/README.md index a6c1d5add..b3439b7f5 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ And with rest-api instance: `https://iobroker.mydomain.com/ioBrokerAPI/ => http: You can add the following lines into Reverse Proxy tab to let Intro tab run behind reverse proxy properly: | Global path | Instance | Instance path behind proxy | -| ----------------- | ------------- | -------------------------- | +|-------------------|---------------|----------------------------| | `/ioBrokerAdmin/` | `web.0` | `/ioBrokerWeb/` | | | `rest-api.0` | `/ioBrokerAPI/` | | | `admin.0` | `/ioBrokerAdmin/` | @@ -87,6 +87,10 @@ The icons may not be reused in other projects without the proper flaticon licens +### **WORK IN PROGRESS** + +- (@GermanBluefox) Showed value in object edit dialog + ### 7.4.3 (2024-12-01) - (@GermanBluefox) Changed information box on the hosts tab diff --git a/package-lock.json b/package-lock.json index a66eb384e..a423dfa5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4089,15 +4089,15 @@ } }, "node_modules/@iobroker/adapter-core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@iobroker/adapter-core/-/adapter-core-3.2.2.tgz", - "integrity": "sha512-Cuiga42WRkJ/NduyrIGgSVWpLgD6ihIflIvZiWVThwgWfDyI+Okgw3snVSlf/p4ki6BAr3MH6Dfa0qPySCGWvQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@iobroker/adapter-core/-/adapter-core-3.2.3.tgz", + "integrity": "sha512-ktk2KGexzOAbUZpkv/9JATJvO2DUHIfQAWhtpRjLxcR3+hs5/73hvt46XPSqwSpY/wnw5+E7kM7BqkfN7G19IQ==", "license": "MIT", "engines": { "node": ">=16" }, "peerDependencies": { - "@iobroker/types": "^6.0.11" + "@iobroker/types": ">=6.0.11" } }, "node_modules/@iobroker/adapter-react-v5": { @@ -4105,15 +4105,15 @@ "link": true }, "node_modules/@iobroker/admin-component-easy-access": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@iobroker/admin-component-easy-access/-/admin-component-easy-access-1.0.8.tgz", - "integrity": "sha512-JSb+7WIRhoY7CGeCJ3UsnVU/+4ZgnGy7e7r9kgI0mR93Jji42+WpwQMwdO446QQhCsloIIM+xxEOixZll/SFNQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@iobroker/admin-component-easy-access/-/admin-component-easy-access-1.0.11.tgz", + "integrity": "sha512-tp5PTdnJv6E0i13h+cgtTLitsLjSnbkJMrNLmpTtWsru+D5ee84XStyEslct52mcfzUUQyd5b3MvN1Jy5BVLMA==", "dev": true }, "node_modules/@iobroker/build-tools": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@iobroker/build-tools/-/build-tools-2.0.9.tgz", - "integrity": "sha512-IE/hawJUAWJ2xsbZawpMyQf3pHd+KhA3TI9/7wIZnR2KRCiBo/kv8YTIL7SVPd9G08/Z0NDUW2CEdJXAYu3kSw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@iobroker/build-tools/-/build-tools-2.0.11.tgz", + "integrity": "sha512-rlc9WpKQ/14chWSW6disUYcTuIgy/qXazDsdEwtMxxp1XydWV6VJz3L/we5YC37LpIYTnpBsgzm2vb+kpDWmQw==", "dev": true, "dependencies": { "glob": "^11.0.0" @@ -4216,12 +4216,12 @@ } }, "node_modules/@iobroker/db-base": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-base/-/db-base-6.0.11.tgz", - "integrity": "sha512-WImlfdwr0O5+sQOQkI9zaScB4UFNuIGXs+K+5bL4+f1yJIPIuFU+njBDI7vUz6zoE+cLGkQRqNxwh6wfMVxBuQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-base/-/db-base-7.0.5.tgz", + "integrity": "sha512-sVE9oyQeGhPEeHtfTMX5efgfvp1fIWSXtIKeOOq62TfF/6DRBdpNnaFRtxzXnbhUTyaeFxaAHBxH1W0qTTWKtg==", "license": "MIT", "dependencies": { - "@iobroker/js-controller-common-db": "6.0.11", + "@iobroker/js-controller-common-db": "7.0.5", "deep-clone": "^3.0.3", "fs-extra": "^11.1.0", "respjs": "^4.2.0" @@ -4245,13 +4245,13 @@ } }, "node_modules/@iobroker/db-objects-file": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-objects-file/-/db-objects-file-6.0.11.tgz", - "integrity": "sha512-MqCzDftazOj+IZQcfviaG7xUTdIuILjrjmf2wXSbFYsZbnK5zDhm4wxnWPT+dVrPBWnqWJ3aAzhhaq6I3BQPqQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-objects-file/-/db-objects-file-7.0.5.tgz", + "integrity": "sha512-3NuUQ75W86IaaAif/mGdFGBEN37s1svE6+0VmCOHXQDFsGoTPqrYcF3NTjlqGKokJ3FpHKLfFsrcucz1eN4q8g==", "license": "Apache 2.0", "dependencies": { - "@iobroker/db-base": "6.0.11", - "@iobroker/db-objects-redis": "6.0.11", + "@iobroker/db-base": "7.0.5", + "@iobroker/db-objects-redis": "7.0.5", "deep-clone": "^3.0.3", "fs-extra": "^11.1.0" }, @@ -4274,15 +4274,15 @@ } }, "node_modules/@iobroker/db-objects-jsonl": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-objects-jsonl/-/db-objects-jsonl-6.0.11.tgz", - "integrity": "sha512-DBPykrMKvx3mxPVB1U8HE6d8NbA5pSHYIEXq+b6/IgwLLGX+LmjSz5TNqmO5gaYA6a4z4kOg44F56SRrUBIgCg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-objects-jsonl/-/db-objects-jsonl-7.0.5.tgz", + "integrity": "sha512-FSMXOeMBMDrHjr6hYAVyV0x2RutGySHNSd8NG0ct71gp6PPs0wi0tuWpIHK1DfepRGzSE/iSnqyJjb5u83PPCg==", "license": "Apache 2.0", "dependencies": { "@alcalzone/jsonl-db": "~3.1.1", - "@iobroker/db-base": "6.0.11", - "@iobroker/db-objects-file": "6.0.11", - "@iobroker/db-objects-redis": "6.0.11", + "@iobroker/db-base": "7.0.5", + "@iobroker/db-objects-file": "7.0.5", + "@iobroker/db-objects-redis": "7.0.5", "deep-clone": "^3.0.3", "fs-extra": "^11.1.0" }, @@ -4305,12 +4305,12 @@ } }, "node_modules/@iobroker/db-objects-redis": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-objects-redis/-/db-objects-redis-6.0.11.tgz", - "integrity": "sha512-aOAcfG1iCWVilTkjhbTialP9BhYh+HrB1RwfIqF/56MMroKFCPMCi9E/zlrooNYWWAdN6EFb4DcIM4ZpQlXDVg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-objects-redis/-/db-objects-redis-7.0.5.tgz", + "integrity": "sha512-ckoA6uZtG6bZynCbNglfwAQMckCC2sy6irmyXedGqKj9wpxgE9JlrSpL6HkLHmkpOwUtk24g2jC/nixZjhlTNg==", "license": "Apache 2.0", "dependencies": { - "@iobroker/db-base": "6.0.11", + "@iobroker/db-base": "7.0.5", "deep-clone": "^3.0.3", "ioredis": "^4.28.2", "mime-types": "^2.1.35", @@ -4322,40 +4322,40 @@ } }, "node_modules/@iobroker/db-states-file": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-states-file/-/db-states-file-6.0.11.tgz", - "integrity": "sha512-K1tRuaqaIpwlpeo/z2btWTPKsILYM5jXf+8aw3AVCwULA328MbMpBBMreehliGGVTTIUoq25ZdcR/zLjYl2lJA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-states-file/-/db-states-file-7.0.5.tgz", + "integrity": "sha512-WLIpDuitJBOR0/kBnlSVj25Pbl8lI8BuztNIM2VqYGypfxhTfEqqn5WUN4wAhKmJZR8/a3fnkj98IWFDWfPJsQ==", "license": "MIT", "dependencies": { - "@iobroker/db-base": "6.0.11", - "@iobroker/db-states-redis": "6.0.11" + "@iobroker/db-base": "7.0.5", + "@iobroker/db-states-redis": "7.0.5" }, "engines": { "node": ">=12.0.0" } }, "node_modules/@iobroker/db-states-jsonl": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-states-jsonl/-/db-states-jsonl-6.0.11.tgz", - "integrity": "sha512-Q06TvVLdfH+FPBo29CHLLIXeaOZXJ3tyImlp17mOr9wVqCr64sN6iZ+vsIe5Dd4j7nzg+pptR2il8TgAyJg8Yw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-states-jsonl/-/db-states-jsonl-7.0.5.tgz", + "integrity": "sha512-Z/qQgdQ7YYr+qN4xzmMCG/wPvXryhDgLRZs2X5dp9FHbpBzOotog+cvNONpZemzEe9wJRTloz/abFCBWg9XcoA==", "license": "MIT", "dependencies": { "@alcalzone/jsonl-db": "~3.1.1", - "@iobroker/db-base": "6.0.11", - "@iobroker/db-states-file": "6.0.11", - "@iobroker/db-states-redis": "6.0.11" + "@iobroker/db-base": "7.0.5", + "@iobroker/db-states-file": "7.0.5", + "@iobroker/db-states-redis": "7.0.5" }, "engines": { "node": ">=12.0.0" } }, "node_modules/@iobroker/db-states-redis": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/db-states-redis/-/db-states-redis-6.0.11.tgz", - "integrity": "sha512-9/oiBfCMmPLDIj3IJSHF3TNbbksEOF1t6JlLSkPI0Vvs8WAE1C+dUb3VSq9FFKk9d6Fp00l8JObACPD01/AImg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/db-states-redis/-/db-states-redis-7.0.5.tgz", + "integrity": "sha512-m5fa/0nKKJ/fGuCVmWR6uzPnCwk/v7IroYZVwPt/OlYcc2a48VUOZyXuGcH/OADobGS4hcjQiEARMaOMvnitIA==", "license": "MIT", "dependencies": { - "@iobroker/db-base": "6.0.11", + "@iobroker/db-base": "7.0.5", "ioredis": "^4.28.2" }, "engines": { @@ -4408,19 +4408,20 @@ } }, "node_modules/@iobroker/js-controller-common": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/js-controller-common/-/js-controller-common-6.0.11.tgz", - "integrity": "sha512-VZH04ksSPADIltOQsy83PkQkaHhLEdCAnwOWJARrLWg6aGtl0DjAoQDl6DmgXErkDWurlRH73BdkfaVh5+TZQg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/js-controller-common/-/js-controller-common-7.0.5.tgz", + "integrity": "sha512-oNzW+9qZduafv8qt3KpPXddBqZJQebgjNnxjuxTnkOaVo4CtT13+LGDdGAgCrqTehytK30K+I8k6eg/ePd6Hxw==", "license": "MIT", "dependencies": { - "@iobroker/db-objects-file": "6.0.11", - "@iobroker/db-objects-jsonl": "6.0.11", - "@iobroker/db-objects-redis": "6.0.11", - "@iobroker/db-states-file": "6.0.11", - "@iobroker/db-states-jsonl": "6.0.11", - "@iobroker/db-states-redis": "6.0.11", - "@iobroker/js-controller-common-db": "6.0.11", - "fs-extra": "^11.1.0" + "@iobroker/db-objects-file": "7.0.5", + "@iobroker/db-objects-jsonl": "7.0.5", + "@iobroker/db-objects-redis": "7.0.5", + "@iobroker/db-states-file": "7.0.5", + "@iobroker/db-states-jsonl": "7.0.5", + "@iobroker/db-states-redis": "7.0.5", + "@iobroker/js-controller-common-db": "7.0.5", + "fs-extra": "^11.1.0", + "jszip": "^3.10.1" }, "engines": { "node": ">=12.0.0" @@ -4431,13 +4432,13 @@ } }, "node_modules/@iobroker/js-controller-common-db": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/js-controller-common-db/-/js-controller-common-db-6.0.11.tgz", - "integrity": "sha512-7HhcEgK3qT6oKWF9U4a7RmruNyDvsxXf/YXWKuE2C4iuoOX5Q9dJDlYs1LP6t9eGGULaylVa06v5nK9xh0VCuA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/js-controller-common-db/-/js-controller-common-db-7.0.5.tgz", + "integrity": "sha512-d4Iug8Oei0I0+gVvVqs5nzTZFS91UzCYtSXM7QFennkPnuYGgC7xV7Nqu6cm2ABm3uICr2VFKWmtyu0O5Ze8gg==", "license": "MIT", "dependencies": { "@alcalzone/pak": "^0.8.1", - "axios": "^1.6.3", + "axios": "^1.7.4", "ci-info": "^3.8.0", "deep-clone": "^3.0.3", "event-stream": "^4.0.1", @@ -4540,14 +4541,14 @@ } }, "node_modules/@iobroker/socket-classes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@iobroker/socket-classes/-/socket-classes-1.6.1.tgz", - "integrity": "sha512-XtBXHJ95qCHI+3NXuxBCmTqeQr6k7mbZ28krANXP4tBeIGSMvI5VeYUhAPNCtF3btAAgYXtqbjnA5Gr+Oc+Guw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@iobroker/socket-classes/-/socket-classes-1.6.2.tgz", + "integrity": "sha512-hSmKpnSmJp9MSQEvO7vcU7AgwFdmMvNrxcT3tsNX/OLPlQnqxilcKezUKxi/ZWIEhvo+4rn5D6lYEIxde1nrxQ==", "license": "MIT", "dependencies": { "@iobroker/adapter-core": "^3.2.2", - "axios": "^1.7.7", - "cookie-parser": "^1.4.6", + "axios": "^1.7.8", + "cookie-parser": "^1.4.7", "passport": "^0.7.0" } }, @@ -4590,9 +4591,9 @@ } }, "node_modules/@iobroker/types": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@iobroker/types/-/types-6.0.11.tgz", - "integrity": "sha512-RNDURjtL5Cm9wt6ocCqdRi86Qx1350zBIvvrJ9+Fjgasoi6cWCdoOghkwEeb95TH2j//q/uLqWwL8SZ0vxx6Kw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@iobroker/types/-/types-7.0.5.tgz", + "integrity": "sha512-RR72kGAJrojLDxBP6US297oJ8tiVfW/BPljpiTGKKbFy7y3lhSawgQalj/tBlYgvIxzg0T0vKwbhZhmSdNnjXg==", "license": "MIT", "engines": { "node": ">=12.0.0" @@ -5396,9 +5397,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.9.tgz", - "integrity": "sha512-TWqj7b1w5cmSz4H/uf+y2AHxAH4ldPR7D2bz0XVyn60GCAo/zRbRPx7cF8gTs/i7CiYeHzV6dtat0VpMwOtolw==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.10.tgz", + "integrity": "sha512-LY5wdiLCBDY7u+Od8UmFINZFGN/5ZU90fhAslf/ZtfP+5RhuY45f679pqYIxe0y54l6Gkv9PFOc8Cs10LDTBYg==", "license": "MIT", "funding": { "type": "opencollective", @@ -5406,9 +5407,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.9.tgz", - "integrity": "sha512-AzlhIT51rdjkZ/EcUV2dbhNkNSUHIqCnNoUxodpiTw8buyAUBd+qnxg5OBSuPpun/ZEdSSB8Q7Uyh6zqjiMsEQ==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.10.tgz", + "integrity": "sha512-G6P1BCSt6EQDcKca47KwvKjlqgOXFbp2I3oWiOlFgKYTANBH89yk7ttMQ5ysqNxSYAB+4TdM37MlPYp4+FkVrQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -5421,7 +5422,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.1.9", + "@mui/material": "^6.1.10", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -5432,16 +5433,16 @@ } }, "node_modules/@mui/material": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz", - "integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.10.tgz", + "integrity": "sha512-txnwYObY4N9ugv5T2n5h1KcbISegZ6l65w1/7tpSU5OB6MQCU94YkP8n/3slDw2KcEfRk4+4D8EUGfhSPMODEQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.1.9", - "@mui/system": "^6.1.9", + "@mui/core-downloads-tracker": "^6.1.10", + "@mui/system": "^6.1.10", "@mui/types": "^7.2.19", - "@mui/utils": "^6.1.9", + "@mui/utils": "^6.1.10", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", @@ -5460,7 +5461,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.1.9", + "@mui/material-pigment-css": "^6.1.10", "@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" @@ -5481,13 +5482,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.9.tgz", - "integrity": "sha512-7aum/O1RquBYhfwL/7egDyl9GqJgPM6hoJDFFBbhF6Sgv9yI9v4w3ArKUkuVvR0CtVj4NXRVMKEioh1bjUzvuA==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.10.tgz", + "integrity": "sha512-DqgsH0XFEweeG3rQfVkqTkeXcj/E76PGYWag8flbPdV8IYdMo+DfVdFlZK8JEjsaIVD2Eu1kJg972XnH5pfnBQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.1.9", + "@mui/utils": "^6.1.10", "prop-types": "^15.8.1" }, "engines": { @@ -5508,9 +5509,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.9.tgz", - "integrity": "sha512-xynSLlJRxHLzSfQaiDjkaTx8LiFb9ByVa7aOdwFnTxGWFMY1F+mkXwAUY4jDDE+MAxkWxlzzQE0wOohnsxhdQg==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.10.tgz", + "integrity": "sha512-+NV9adKZYhslJ270iPjf2yzdVJwav7CIaXcMlPSi1Xy1S/zRe5xFgZ6BEoMdmGRpr34lIahE8H1acXP2myrvRw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -5542,16 +5543,16 @@ } }, "node_modules/@mui/system": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.9.tgz", - "integrity": "sha512-8x+RucnNp21gfFYsklCaZf0COXbv3+v0lrVuXONxvPEkESi2rwLlOi8UPJfcz6LxZOAX3v3oQ7qw18vnpgueRg==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.10.tgz", + "integrity": "sha512-5YNIqxETR23SIkyP7MY2fFnXmplX/M4wNi2R+10AVRd3Ub+NLctWY/Vs5vq1oAMF0eSDLhRTGUjaUe+IGSfWqg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.1.9", - "@mui/styled-engine": "^6.1.9", + "@mui/private-theming": "^6.1.10", + "@mui/styled-engine": "^6.1.10", "@mui/types": "^7.2.19", - "@mui/utils": "^6.1.9", + "@mui/utils": "^6.1.10", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -5596,9 +5597,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.9.tgz", - "integrity": "sha512-N7uzBp7p2or+xanXn3aH2OTINC6F/Ru/U8h6amhRZEev8bJhKN86rIDIoxZZ902tj+09LXtH83iLxFMjMHyqNA==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.10.tgz", + "integrity": "sha512-1ETuwswGjUiAf2dP9TkBy8p49qrw2wXa+RuAjNTRE5+91vtXJ1HKrs7H9s8CZd1zDlQVzUcUAPm9lpQwF5ogTw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -6829,9 +6830,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.1.tgz", - "integrity": "sha512-0kdAbmic3J09I6dT8e9vE2JOCSt13wHCW5x/ly8TSt2bDtuIWe2TgLZZDHdcziw9AVCzflMAXCrVyRIhIs44Ng==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.5.0.tgz", + "integrity": "sha512-6TQAc/5uRILE6deixJ1CR8rXyTbzXIXNgO1D0Woi9Bqicz2FV5iKP3BHYEg6o4UATCMcbQQ0jbmeaOkn/HQk2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6996,92 +6997,75 @@ "license": "MIT" }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.41.0.tgz", - "integrity": "sha512-nU7Bn3jEUmf1QXRUT3j2ewUBlFJpe9vnAnjqpeVPDWTsVI52BwVNcJHuE37PrGs66OZ1ZkGMfKnQk43oCAa+oQ==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.42.0.tgz", + "integrity": "sha512-xzgRI0wglKYsPrna574w1t38aftuvo44gjOKFvPNGPnYfiW9y4m+64kUz3JFbtanvOrKPcaITpdYiB4DeJXEbA==", "license": "MIT", "dependencies": { - "@sentry/core": "8.41.0", - "@sentry/types": "8.41.0" + "@sentry/core": "8.42.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.41.0.tgz", - "integrity": "sha512-bw+BrSNw8abOnu/IpD8YSbYubXkkT8jyNS7TM4e4UPZMuXcbtia7/r5d7kAiUfKv/sV5PNMlZLOk+EYJeLTANg==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.42.0.tgz", + "integrity": "sha512-dkIw5Wdukwzngg5gNJ0QcK48LyJaMAnBspqTqZ3ItR01STi6Z+6+/Bt5XgmrvDgRD+FNBinflc5zMmfdFXXhvw==", "license": "MIT", "dependencies": { - "@sentry/core": "8.41.0", - "@sentry/types": "8.41.0" + "@sentry/core": "8.42.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.41.0.tgz", - "integrity": "sha512-ByXEY7JI95y4Qr9fS3d28l9uuVU5Qa0HgL+xDmYElNx7CXz3Q9hFN6ibgUeC3h8BO5pDULxWNgAppl7FRY8N5w==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.42.0.tgz", + "integrity": "sha512-oNcJEBlDfXnRFYC5Mxj5fairyZHNqlnU4g8kPuztB9G5zlsyLgWfPxzcn1ixVQunth2/WZRklDi4o1ZfyHww7w==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.41.0", - "@sentry/core": "8.41.0", - "@sentry/types": "8.41.0" + "@sentry-internal/browser-utils": "8.42.0", + "@sentry/core": "8.42.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.41.0.tgz", - "integrity": "sha512-lpgOBHWr1ZNxidD72A2pfoUMjIpwonOPYoQZWAHr86Oa3eIVQOyfklZlHW+gKPFl2/IEl9Lbtcke0JiDp3dkIQ==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.42.0.tgz", + "integrity": "sha512-XrPErqVhPsPh/oFLVKvz7Wb+Fi2J1zCPLeZCxWqFuPWI2agRyLVu0KvqJyzSpSrRAEJC/XFzuSVILlYlXXSfgA==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "8.41.0", - "@sentry/core": "8.41.0", - "@sentry/types": "8.41.0" + "@sentry-internal/replay": "8.42.0", + "@sentry/core": "8.42.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/browser": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.41.0.tgz", - "integrity": "sha512-FfAU55eYwW2lG4M3dEw2472RvHrD5YWSfHCZvuRf/4skX38kFvKghZQ+epL+CVHTzvIRHOrbj8qQK6YLTGl9ew==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.42.0.tgz", + "integrity": "sha512-lStrEk609KJHwXfDrOgoYVVoFFExixHywxSExk7ZDtwj2YPv6r6Y1gogvgr7dAZj7jWzadHkxZ33l9EOSJBfug==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.41.0", - "@sentry-internal/feedback": "8.41.0", - "@sentry-internal/replay": "8.41.0", - "@sentry-internal/replay-canvas": "8.41.0", - "@sentry/core": "8.41.0", - "@sentry/types": "8.41.0" + "@sentry-internal/browser-utils": "8.42.0", + "@sentry-internal/feedback": "8.42.0", + "@sentry-internal/replay": "8.42.0", + "@sentry-internal/replay-canvas": "8.42.0", + "@sentry/core": "8.42.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/core": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.41.0.tgz", - "integrity": "sha512-3v7u3t4LozCA5SpZY4yqUN2U3jSrkXNoLgz6L2SUUiydyCuSwXZIFEwpLJfgQyidpNDifeQbBI5E1O910XkPsA==", - "license": "MIT", - "dependencies": { - "@sentry/types": "8.41.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/types": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.41.0.tgz", - "integrity": "sha512-eqdnGr9k9H++b9CjVUoTNUVahPVWeNnMy0YGkqS5+cjWWC+x43p56202oidGFmWo6702ub/xwUNH6M5PC4kq6A==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.42.0.tgz", + "integrity": "sha512-ac6O3pgoIbU6rpwz6LlwW0wp3/GAHuSI0C5IsTgIY6baN8rOBnlAtG6KrHDDkGmUQ2srxkDJu9n1O6Td3cBCqw==", "license": "MIT", "engines": { "node": ">=14.18" @@ -9364,14 +9348,11 @@ } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -10270,9 +10251,9 @@ } }, "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -25080,9 +25061,9 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -25104,7 +25085,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -25119,6 +25100,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express-fileupload": { @@ -26632,36 +26617,20 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", "dev": true, "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -27640,13 +27609,13 @@ "peer": true }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -27798,6 +27767,12 @@ "node": ">=0.10.0" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/immer": { "version": "9.0.21", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", @@ -31294,6 +31269,48 @@ "node": ">=4.0" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/just-diff": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", @@ -31815,6 +31832,15 @@ "node": ">=8" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -35436,20 +35462,20 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz", + "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==", "dev": true, "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -35511,9 +35537,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "license": "(MIT AND Zlib)", - "peer": true + "license": "(MIT AND Zlib)" }, "node_modules/parallel-transform": { "version": "1.2.0", @@ -35875,9 +35899,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/path-type": { @@ -38058,20 +38082,20 @@ } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -38181,18 +38205,18 @@ } }, "node_modules/puppeteer": { - "version": "23.9.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.9.0.tgz", - "integrity": "sha512-WfB8jGwFV+qrD9dcJJVvWPFJBU6kxeu2wxJz9WooDGfM3vIiKLgzImEDBxUQnCBK/2cXB3d4dV6gs/LLpgfLDg==", + "version": "23.10.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.10.1.tgz", + "integrity": "sha512-kbcO+vu91fgUyBzEwByPe4q5lEEuBq4cuOZnZeRL42G7r5UrfbUFlxBJayXBLBsD6pREdk/92ZFwFQq3MaN6ww==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.4.1", + "@puppeteer/browsers": "2.5.0", "chromium-bidi": "0.8.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1367902", - "puppeteer-core": "23.9.0", + "puppeteer-core": "23.10.1", "typed-query-selector": "^2.12.0" }, "bin": { @@ -38203,13 +38227,13 @@ } }, "node_modules/puppeteer-core": { - "version": "23.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.9.0.tgz", - "integrity": "sha512-hLVrav2HYMVdK0YILtfJwtnkBAwNOztUdR4aJ5YKDvgsbtagNr6urUJk9HyjRA9e+PaLI3jzJ0wM7A4jSZ7Qxw==", + "version": "23.10.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.10.1.tgz", + "integrity": "sha512-ey6NwixHYEUnhCA/uYi7uQQ4a0CZw4k+MatbHXGl5GEzaiRQziYUxc2HGpdQZ/gnh4KQWAKkocyIg1/dIm5d0g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.4.1", + "@puppeteer/browsers": "2.5.0", "chromium-bidi": "0.8.0", "debug": "^4.3.7", "devtools-protocol": "0.0.1367902", @@ -40934,9 +40958,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -41617,13 +41639,13 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -47009,13 +47031,13 @@ "dependencies": { "@emotion/react": "^11.13.5", "@emotion/styled": "^11.13.5", - "@iobroker/js-controller-common": "^6.0.11", - "@iobroker/js-controller-common-db": "6.0.11", + "@iobroker/js-controller-common": "^7.0.5", + "@iobroker/js-controller-common-db": "^7.0.5", "@iobroker/socket-client": "^3.1.3", - "@iobroker/types": "^6.0.11", - "@mui/icons-material": "^6.1.9", - "@mui/material": "^6.1.9", - "@sentry/browser": "^8.41.0", + "@iobroker/types": "^7.0.5", + "@mui/icons-material": "^6.1.10", + "@mui/material": "^6.1.10", + "@sentry/browser": "^8.42.0", "cronstrue": "^2.52.0", "react-color": "^2.19.3", "react-colorful": "^5.6.1", @@ -47047,9 +47069,9 @@ "version": "7.4.3", "license": "MIT", "dependencies": { - "@iobroker/adapter-core": "^3.2.2", + "@iobroker/adapter-core": "^3.2.3", "@iobroker/i18n": "^0.3.1", - "@iobroker/socket-classes": "^1.6.1", + "@iobroker/socket-classes": "^1.6.2", "@iobroker/webserver": "^1.0.6", "@iobroker/ws": "^2.0.0", "@iobroker/ws-server": "4.1.0", @@ -47058,7 +47080,7 @@ "body-parser": "^1.20.3", "compression": "^1.7.5", "connect-flash": "^0.1.1", - "express": "^4.21.1", + "express": "^4.21.2", "express-fileupload": "^1.5.1", "express-session": "^1.18.1", "json5": "^2.2.3", @@ -47067,7 +47089,7 @@ "semver": "^7.6.3" }, "devDependencies": { - "@iobroker/build-tools": "^2.0.9", + "@iobroker/build-tools": "^2.0.11", "@iobroker/dm-gui-components": "file:../dm-gui-components", "@iobroker/json-config": "file:../jsonConfig", "@iobroker/legacy-testing": "^2.0.1", @@ -47085,7 +47107,7 @@ "@types/validator": "^13.12.2", "colorette": "^2.0.20", "less": "^4.2.1", - "puppeteer": "^23.9.0", + "puppeteer": "^23.10.1", "src-rx": "file:src-admin", "typescript": "^5.7.2" }, @@ -48024,7 +48046,7 @@ }, "packages/admin/src-admin": { "name": "src-rx", - "version": "7.4.2", + "version": "7.4.3", "dev": true, "dependencies": { "@iobroker/adapter-react-v5": "file:../../adapter-react-v5", @@ -48041,7 +48063,7 @@ "@fnando/sparkline": "^0.3.10", "@foxriver76/iob-component-lib": "^0.1.6", "@honkhonk/vite-plugin-svgr": "^1.1.0", - "@iobroker/admin-component-easy-access": "^1.0.8", + "@iobroker/admin-component-easy-access": "^1.0.11", "@iobroker/dm-utils": "^0.6.9", "@iobroker/socket-client": "^3.1.3", "@originjs/vite-plugin-commonjs": "^1.0.3", diff --git a/packages/adapter-react-v5/README.md b/packages/adapter-react-v5/README.md index 99941567f..5653288df 100644 --- a/packages/adapter-react-v5/README.md +++ b/packages/adapter-react-v5/README.md @@ -13,7 +13,7 @@ If you want to create the configuration page with ReactJS: - Change `name` from `src` to `ADAPTERNAME-admin` (Of course replace `ADAPTERNAME` with yours) - Add to devDependencies: ```json - "@iobroker/adapter-react-v5": "^7.4.2", + "@iobroker/adapter-react-v5": "^7.4.3", ``` Versions can be higher. So your `src/package.json` should look like: @@ -24,7 +24,7 @@ If you want to create the configuration page with ReactJS: "version": "0.1.0", "private": true, "dependencies": { - "@iobroker/adapter-react-v5": "^7.4.2", + "@iobroker/adapter-react-v5": "^7.4.3", "@iobroker/build-tools": "^1.0.0", "babel-eslint": "^10.1.0", "react-scripts": "^5.0.1" diff --git a/packages/adapter-react-v5/package.json b/packages/adapter-react-v5/package.json index d5c811e52..36949726e 100644 --- a/packages/adapter-react-v5/package.json +++ b/packages/adapter-react-v5/package.json @@ -56,13 +56,13 @@ "dependencies": { "@emotion/react": "^11.13.5", "@emotion/styled": "^11.13.5", - "@iobroker/js-controller-common": "^6.0.11", - "@iobroker/js-controller-common-db": "6.0.11", + "@iobroker/js-controller-common": "^7.0.5", + "@iobroker/js-controller-common-db": "^7.0.5", "@iobroker/socket-client": "^3.1.3", - "@iobroker/types": "^6.0.11", - "@mui/icons-material": "^6.1.9", - "@mui/material": "^6.1.9", - "@sentry/browser": "^8.41.0", + "@iobroker/types": "^7.0.5", + "@mui/icons-material": "^6.1.10", + "@mui/material": "^6.1.10", + "@sentry/browser": "^8.42.0", "cronstrue": "^2.52.0", "react-color": "^2.19.3", "react-colorful": "^5.6.1", diff --git a/packages/adapter-react-v5/src/Components/IconDeviceType.tsx b/packages/adapter-react-v5/src/Components/IconDeviceType.tsx index 2b63a9823..96fa0ec6b 100644 --- a/packages/adapter-react-v5/src/Components/IconDeviceType.tsx +++ b/packages/adapter-react-v5/src/Components/IconDeviceType.tsx @@ -32,6 +32,7 @@ import { Warning, Water, WaterDrop, + WbIridescent, WbSunny, Whatshot, Window, @@ -61,6 +62,7 @@ const deviceTypes = [ 'gate', 'hue', 'humidity', + 'illuminance', 'image', 'info', 'instance', @@ -143,6 +145,9 @@ export function getDeviceIcon(type: DeviceType, props?: IconProps): React.JSX.El if (type === 'humidity') { SvgComponent = WaterDrop; } + if (type === 'illuminance') { + SvgComponent = WbIridescent; + } if (type === 'image') { SvgComponent = Image; } diff --git a/packages/adapter-react-v5/src/Components/ObjectBrowser.tsx b/packages/adapter-react-v5/src/Components/ObjectBrowser.tsx index b19f4048f..c5e4439a1 100644 --- a/packages/adapter-react-v5/src/Components/ObjectBrowser.tsx +++ b/packages/adapter-react-v5/src/Components/ObjectBrowser.tsx @@ -2045,6 +2045,7 @@ function formatValue(options: FormatValueOptions): { if (isCommon?.unit) { valText.u = isCommon.unit; } + let valFull: | { /** label */ @@ -5575,7 +5576,7 @@ export class ObjectBrowserClass extends Component { diff --git a/packages/adapter-react-v5/src/LegacyConnection.tsx b/packages/adapter-react-v5/src/LegacyConnection.tsx index d84ca420f..3ca17d91f 100644 --- a/packages/adapter-react-v5/src/LegacyConnection.tsx +++ b/packages/adapter-react-v5/src/LegacyConnection.tsx @@ -1674,7 +1674,6 @@ export class LegacyConnection { obj._id = newId as ioBroker.ObjectIDs.Group; if (newName !== undefined) { obj.common = obj.common || ({} as ioBroker.GroupCommon); - // @ts-expect-error will be corrected in the next js-controller release obj.common.name = newName; } diff --git a/packages/adapter-react-v5/src/i18n/de.json b/packages/adapter-react-v5/src/i18n/de.json index 8a8054176..4c7209890 100644 --- a/packages/adapter-react-v5/src/i18n/de.json +++ b/packages/adapter-react-v5/src/i18n/de.json @@ -7,7 +7,7 @@ "ra_Add objects tree from JSON file": "Objektbaum aus JSON-Datei hinzufügen", "ra_Add row": "Zeile hinzufügen", "ra_Advanced options": "Erweiterte Optionen", - "ra_All items are filtered out": "Alle Elemente werden herausgefiltert", + "ra_All items are filtered out": "Alle Elemente sind herausgefiltert", "ra_All objects": "Alle Objekte", "ra_Append": "Anhängen", "ra_Append %s entries or replace existing?": "%s Einträge anhängen oder vorhandene ersetzen?", @@ -447,4 +447,4 @@ "sch_validTo": "bis", "sch_wholeDay": "Ganzer Tag", "sch_yearEveryMonth": "jeden Monat" -} \ No newline at end of file +} diff --git a/packages/adapter-react-v5/src/i18n/en.json b/packages/adapter-react-v5/src/i18n/en.json index 55d5249d4..fb34606ff 100644 --- a/packages/adapter-react-v5/src/i18n/en.json +++ b/packages/adapter-react-v5/src/i18n/en.json @@ -115,6 +115,7 @@ "ra_License %s": "License %s", "ra_License agreement": "License agreement", "ra_License does not exist": "License does not exist", + "ra_tooltip_expire": "Expires in", "ra_License expired on %s": "License expired on %s", "ra_License for other product \"%s\"": "License for other product \"%s\"", "ra_License is for version %s, but required version is %s.": "License is for version %s, but required version is %s.", @@ -447,4 +448,4 @@ "sch_validTo": "to", "sch_wholeDay": "Whole day", "sch_yearEveryMonth": "every month" -} \ No newline at end of file +} diff --git a/packages/admin/package.json b/packages/admin/package.json index d01c2e4dd..652deeb3e 100644 --- a/packages/admin/package.json +++ b/packages/admin/package.json @@ -23,9 +23,9 @@ "setup" ], "dependencies": { - "@iobroker/adapter-core": "^3.2.2", + "@iobroker/adapter-core": "^3.2.3", "@iobroker/i18n": "^0.3.1", - "@iobroker/socket-classes": "^1.6.1", + "@iobroker/socket-classes": "^1.6.2", "@iobroker/webserver": "^1.0.6", "@iobroker/ws": "^2.0.0", "@iobroker/ws-server": "4.1.0", @@ -34,7 +34,7 @@ "body-parser": "^1.20.3", "compression": "^1.7.5", "connect-flash": "^0.1.1", - "express": "^4.21.1", + "express": "^4.21.2", "express-fileupload": "^1.5.1", "express-session": "^1.18.1", "json5": "^2.2.3", @@ -43,7 +43,7 @@ "semver": "^7.6.3" }, "devDependencies": { - "@iobroker/build-tools": "^2.0.9", + "@iobroker/build-tools": "^2.0.11", "@iobroker/dm-gui-components": "file:../dm-gui-components", "@iobroker/json-config": "file:../jsonConfig", "@iobroker/legacy-testing": "^2.0.1", @@ -61,7 +61,7 @@ "@types/validator": "^13.12.2", "colorette": "^2.0.20", "less": "^4.2.1", - "puppeteer": "^23.9.0", + "puppeteer": "^23.10.1", "src-rx": "file:src-admin", "typescript": "^5.7.2" }, diff --git a/packages/admin/src-admin/package.json b/packages/admin/src-admin/package.json index dbe018222..1644ae1a7 100644 --- a/packages/admin/src-admin/package.json +++ b/packages/admin/src-admin/package.json @@ -35,7 +35,7 @@ "@fnando/sparkline": "^0.3.10", "@foxriver76/iob-component-lib": "^0.1.6", "@honkhonk/vite-plugin-svgr": "^1.1.0", - "@iobroker/admin-component-easy-access": "^1.0.8", + "@iobroker/admin-component-easy-access": "^1.0.11", "@iobroker/dm-utils": "^0.6.9", "@iobroker/socket-client": "^3.1.3", "@originjs/vite-plugin-commonjs": "^1.0.3", @@ -103,5 +103,5 @@ } ] ], - "version": "7.4.2" + "version": "7.4.3" } diff --git a/packages/admin/src-admin/src/App.tsx b/packages/admin/src-admin/src/App.tsx index 706d50884..50df31da6 100644 --- a/packages/admin/src-admin/src/App.tsx +++ b/packages/admin/src-admin/src/App.tsx @@ -2411,13 +2411,9 @@ class App extends Router { if (this.state.user && this.props.width !== 'xs' && this.props.width !== 'sm') { return (
- { - // @ts-expect-error fixed in js-controller 7 - this.state.systemConfig.common.siteName ? ( - // @ts-expect-error fixed in js-controller 7 -
{this.state.systemConfig.common.siteName}
- ) : null - } + {this.state.systemConfig.common.siteName ? ( +
{this.state.systemConfig.common.siteName}
+ ) : null} {
); } - // @ts-expect-error fixed in js-controller 7 if (this.props.width !== 'xs' && this.props.width !== 'sm' && this.state.systemConfig.common.siteName) { - // @ts-expect-error fixed in js-controller 7 return
{this.state.systemConfig.common.siteName}
; } return null; diff --git a/packages/admin/src-admin/src/components/Adapters/AdapterGeneric.tsx b/packages/admin/src-admin/src/components/Adapters/AdapterGeneric.tsx index bed72cd3a..eedee40bc 100644 --- a/packages/admin/src-admin/src/components/Adapters/AdapterGeneric.tsx +++ b/packages/admin/src-admin/src/components/Adapters/AdapterGeneric.tsx @@ -134,6 +134,12 @@ export const genericStyles: Record = { currentVersionText: (theme: IobTheme) => ({ color: theme.palette.mode === 'dark' ? '#a3ffa3' : '#009800', fontWeight: 'bold', + marginLeft: '4px', + }), + repoVersionText: (theme: IobTheme) => ({ + color: theme.palette.mode === 'dark' ? '#a3fcff' : '#005498', + fontWeight: 'bold', + marginLeft: '4px', }), rating: {}, containerVersion: {}, @@ -719,6 +725,8 @@ export default abstract class AdapterGeneric< return null; } + const repoVersion = this.props.context.repository[this.props.adapterName]?.version; + return ( {`(${this.props.context.t('current')})`} - ) : ( - '' - )} + ) : null} + {repoVersion === version ? ( + {`(${this.props.context.t('repository')})`} + ) : null} void; - clearAllFilters: () => void; + clearAllFilters: (onlyUpdate?: boolean) => void; update: boolean; descWidth: number; sortByName: boolean; sortPopularFirst: boolean; sortRecentlyUpdated: boolean; commandRunning: boolean; + updateListFilter: boolean; } interface AdaptersListState { @@ -281,16 +286,27 @@ class AdaptersList extends Component { return !this.props.update ? ( this.props.clearAllFilters()} + colSpan={8} + style={{ textAlign: 'center' }} > - {this.props.context.t('all items are filtered out')} + + {this.props.updateListFilter ?
: null} + {this.props.updateListFilter ? ( + + ) : null} ) : null; @@ -308,13 +324,34 @@ class AdaptersList extends Component { return !this.props.update ? (
this.props.clearAllFilters()} > - {this.props.context.t('all items are filtered out')} + + + + {this.props.updateListFilter ? ( + + ) : null}
) : null; } diff --git a/packages/admin/src-admin/src/components/Hosts/HostRow.tsx b/packages/admin/src-admin/src/components/Hosts/HostRow.tsx index 8c88a81cb..08aa7b9a2 100644 --- a/packages/admin/src-admin/src/components/Hosts/HostRow.tsx +++ b/packages/admin/src-admin/src/components/Hosts/HostRow.tsx @@ -40,7 +40,7 @@ const styles: Record = { alignItems: 'baseline', }, collapse: { - height: 200, + height: 215, backgroundColor: 'rgba(128, 128, 128, 0.1)', // position: 'absolute', width: '100%', diff --git a/packages/admin/src-admin/src/components/Object/ObjectBrowserEditObject.tsx b/packages/admin/src-admin/src/components/Object/ObjectBrowserEditObject.tsx index e137e07cc..76e17f206 100644 --- a/packages/admin/src-admin/src/components/Object/ObjectBrowserEditObject.tsx +++ b/packages/admin/src-admin/src/components/Object/ObjectBrowserEditObject.tsx @@ -1,4 +1,16 @@ import React, { Component, type JSX } from 'react'; +import moment from 'moment'; + +import 'moment/locale/de'; +import 'moment/locale/es'; +import 'moment/locale/fr'; +import 'moment/locale/it'; +import 'moment/locale/nl'; +import 'moment/locale/pl'; +import 'moment/locale/pt'; +import 'moment/locale/ru'; +import 'moment/locale/uk'; +import 'moment/locale/zh-cn'; import { Dialog, @@ -187,8 +199,47 @@ const styles: Record = { tooltip: { pointerEvents: 'none', }, + stateRow: { + width: '100%', + display: 'flex', + justifyContent: 'space-between', + '&:hover': { + backgroundColor: '#00000030', + }, + }, + stateTitle: { + minWidth: 150, + fontWeight: 'bold', + }, + stateUnit: { + opacity: 0.7, + marginLeft: 4, + }, + stateValue: { + animation: 'newStateEditorAnimation 2s ease-in-out', + }, + stateTime: { + fontStyle: 'italic', + }, + stateImage: { + maxWidth: 200, + maxHeight: 200, + }, }; +function valueBlink(theme: IobTheme, color: string): any { + return { + '@keyframes newStateEditorAnimation': { + '0%': { + color: theme.palette.mode === 'dark' ? '#27cf00' : '#174e00', + }, + '100%': { + color: color || (theme.palette.mode === 'dark' ? '#ffffff' : '#000000'), + }, + }, + }; +} + const DEFAULT_ROLES = [ 'button', 'button.close.blind', @@ -495,11 +546,14 @@ interface ObjectBrowserEditObjectState { newId: string; customEditTabs?: EditSchemaTabEditor[]; lang: ioBroker.Languages; + value: ioBroker.State | null | undefined; } class ObjectBrowserEditObject extends Component { /** Original object stringified */ private originalObj: string; + private subscribed = false; + private updateTimer: ReturnType | null = null; constructor(props: ObjectBrowserEditObjectProps) { super(props); @@ -540,8 +594,11 @@ class ObjectBrowserEditObject extends Component tab.key === this.state.tab) ) { this.setState({ tab: 'object' }); } + if (this.state.tab === 'state') { + this.subscribeOnState(true); + } + void this.props.socket.subscribeObject(this.props.obj._id, this.onObjectUpdated); } componentWillUnmount(): void { + if (this.updateTimer) { + clearInterval(this.updateTimer); + this.updateTimer = null; + } + this.subscribeOnState(false); + void this.props.socket.unsubscribeObject(this.props.obj._id, this.onObjectUpdated); } @@ -920,6 +993,237 @@ class ObjectBrowserEditObject extends Component + ); + } + + renderStatePanel(): JSX.Element { + if (this.state.value === undefined || this.state.value === null) { + return
{this.props.t('State does not exist')}
; + } + if (typeof this.state.value !== 'object') { + return ( +
+
{this.props.t('State is invalid')}
+
+
{JSON.stringify(this.state.value, null, 4)}
+
+
+ ); + } + + let strVal: string | React.JSX.Element | undefined; + const styleValue: React.CSSProperties = {}; + const v = this.state.value.val; + const type = typeof v; + + if (v === undefined) { + strVal = '[undef]'; + styleValue.color = '#bc6400'; + styleValue.fontStyle = 'italic'; + } else if (v === null) { + strVal = '(null)'; + styleValue.color = '#0047b1'; + styleValue.fontStyle = 'italic'; + } else if ( + typeof this.props.obj.common.role === 'string' && + this.props.obj.common.role.match(/^value\.time|^date/) + ) { + // if timestamp + if (v && type === 'string') { + if (Utils.isStringInteger(v as string)) { + // we assume a unix ts + strVal = new Date(parseInt(v as string, 10)).toString(); + } else { + // check if parsable by new date + try { + const parsedDate = new Date(v as string); + + if (Utils.isValidDate(parsedDate)) { + strVal = parsedDate.toString(); + } + } catch { + // ignore + } + } + } else if (v && type === 'number') { + if ((v as number) > 946681200 && (v as number) < 946681200000) { + // '2000-01-01T00:00:00' => 946681200000 + strVal = new Date((v as number) * 1_000).toString(); // maybe the time is in seconds (UNIX time) + } else if ((v as number) > 946681200000000) { + // "null" and undefined could not be here. See `let v = (isCommon && isCommon.type === 'file') ....` above + strVal = new Date(v as number).toString(); + } + } + } + + if (!strVal) { + if (type === 'number') { + if (!Number.isInteger(v)) { + strVal = (Math.round((v as number) * 1_000_000_000) / 1_000_000_000).toString(); // remove 4.00000000000000001 + if (this.props.isFloatComma) { + strVal = strVal.toString().replace('.', ','); + } + } + } else if (type === 'boolean') { + strVal = v ? I18n.t('true') : I18n.t('false'); + styleValue.color = v ? '#139800' : '#cd6b55'; + } else if (type === 'object') { + strVal = JSON.stringify(v); + } else if (type === 'string' && (v as string).startsWith('data:image/')) { + strVal = ( + img + ); + } else { + strVal = v.toString(); + } + } + + Object.assign(styleValue, valueBlink(this.props.theme, styleValue.color)); + + return ( +
+
+
{I18n.t('ra_tooltip_value')}:
+ + {strVal} + {(this.props.obj.common as ioBroker.StateCommon)?.unit ? ( + {(this.props.obj.common as ioBroker.StateCommon).unit} + ) : null} + +
+
+
{I18n.t('Type')}:
+
{type}
+
+
+
{I18n.t('ra_tooltip_ts')}:
+ +
+ {moment(this.state.value.ts).fromNow()} +
+
+
+
+
{I18n.t('ra_tooltip_ack')}:
+
+ {this.state.value.ack ? I18n.t('Acknowledged') : I18n.t('Command')} + {this.state.value.ack ? ' (true)' : ' (false)'} +
+
+
+
{I18n.t('ra_tooltip_lc')}:
+ +
+ {moment(this.state.value.lc).fromNow()} +
+
+
+
+
{I18n.t('ra_tooltip_quality')}:
+
{Utils.quality2text(this.state.value.q || 0).join(', ')}
+
+
+
{I18n.t('ra_tooltip_from')}:
+
{this.state.value.from}
+
+
+
{I18n.t('ra_tooltip_user')}:
+
{this.state.value.user || '--'}
+
+ {this.state.value.expire ? ( +
+
{I18n.t('ra_tooltip_expire')}:
+
+ {this.state.value.expire} {I18n.t('sc_seconds')} +
+
+ ) : null} + {this.state.value.c ? ( +
+
{I18n.t('ra_tooltip_comment')}:
+
{this.state.value.c}
+
+ ) : null} +
+ ); + } + + onStateChange = (id: string, state: ioBroker.State | null | undefined): void => { + if (JSON.stringify(state) !== JSON.stringify(this.state.value)) { + this.setState({ value: state }); + } + }; + + subscribeOnState(enable: boolean): void { + if (enable) { + if (!this.subscribed) { + if (!this.updateTimer) { + this.updateTimer = setInterval(() => { + // update times + this.forceUpdate(); + }, 5000); + } + this.subscribed = true; + void this.props.socket.subscribeState(this.props.obj._id, this.onStateChange); + } + } else { + if (this.subscribed) { + if (this.updateTimer) { + clearInterval(this.updateTimer); + this.updateTimer = null; + } + this.subscribed = false; + void this.props.socket.unsubscribeState(this.props.obj._id, this.onStateChange); + } + } + } + renderTabs(parsedObj: ioBroker.Object | null | undefined): JSX.Element { return ( + {this.renderStateTab()} {this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state' && ( diff --git a/packages/admin/src-admin/src/components/Object/ObjectBrowserValue.tsx b/packages/admin/src-admin/src/components/Object/ObjectBrowserValue.tsx index b0e6d4e26..9efb6bbc7 100644 --- a/packages/admin/src-admin/src/components/Object/ObjectBrowserValue.tsx +++ b/packages/admin/src-admin/src/components/Object/ObjectBrowserValue.tsx @@ -562,7 +562,9 @@ class ObjectBrowserValue extends Component - {this.props.t('Value type')} + + {this.props.t('Value type')} +