This commit is contained in:
MichaelDvP
2024-11-28 15:44:39 +01:00
34 changed files with 907 additions and 590 deletions

132
.github/CODE_OF_CONDUCT.md vendored Normal file
View File

@@ -0,0 +1,132 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

1
.github/SUPPORT.md vendored Normal file
View File

@@ -0,0 +1 @@
# Support

6
.markdownlint.json Normal file
View File

@@ -0,0 +1,6 @@
{
"MD033": false,
"MD013": false,
"MD045": false,
"MD041": false
}

View File

@@ -1,10 +1,27 @@
#
# GNUMakefile for EMS-ESP
# This is mainly used to generate the .o files for SonarQube analysis
#
NUMJOBS=${NUMJOBS:-" -j10 "}
MAKEFLAGS+="j "
_mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
I := $(patsubst %/,%,$(dir $(_mkfile_path)))
ifneq ($(words $(MAKECMDGOALS)),1)
.DEFAULT_GOAL = all
%:
@$(MAKE) $@ --no-print-directory -rRf $(firstword $(MAKEFILE_LIST))
else
ifndef ECHO
T := $(shell $(MAKE) $(MAKECMDGOALS) --no-print-directory \
-nrRf $(firstword $(MAKEFILE_LIST)) \
ECHO="COUNTTHIS" | grep -c "COUNTTHIS")
N := x
C = $(words $N)$(eval N := x $N)
ECHO = python $(I)/echo_progress.py --stepno=$C --nsteps=$T
endif
# number of parallel compiles
JOBS ?= $(shell nproc)
MAKEFLAGS += -j $(JOBS) -l $(JOBS)
#----------------------------------------------------------------------
# Project Structure
@@ -125,23 +142,27 @@ COMPILE.cpp = $(CXX) $(CXX_STANDARD) $(CXXFLAGS) $(DEPFLAGS) -c $< -o $@
.SILENT: $(OUTPUT)
all: $(OUTPUT)
@$(ECHO) All done
$(OUTPUT): $(OBJS)
@mkdir -p $(@D)
@$(ECHO) Linking $@
$(LINK.o)
$(SYMBOLS.out)
$(BUILD)/%.o: %.c
@mkdir -p $(@D)
$(COMPILE.c)
@$(ECHO) Compiling $@
@$(COMPILE.c)
$(BUILD)/%.o: %.cpp
@mkdir -p $(@D)
$(COMPILE.cpp)
@$(ECHO) Compiling $@
@$(COMPILE.cpp)
$(BUILD)/%.o: %.s
@mkdir -p $(@D)
$(COMPILE.s)
@$(COMPILE.s)
cppcheck: $(SOURCES)
$(CPPCHECK) $(CHECKFLAGS) $^
@@ -150,6 +171,7 @@ run: $(OUTPUT)
@$<
.PHONY: clean
clean:
@$(RM) -rf $(BUILD) $(OUTPUT)
@@ -158,3 +180,5 @@ help:
@echo $(OUTPUT)
-include $(DEPS)
endif

View File

@@ -1,4 +1,30 @@
# ![logo](media/EMS-ESP_logo_dark.png)
<div align="center">
<p align="center">
<a href="#">
<img src="https://raw.githubusercontent.com/emsesp/EMS-ESP32/dev/media/favicon/android-chrome-512x512.png" height="100px" />
</a>
</p>
</div>
<h1 align="center">EMS-ESP</h1>
<p align="center">
<a href="https://emsesp.org">
<img src="https://img.shields.io/badge/Website-0077b5?style=for-the-badge&logo=googlehome&logoColor=white" alt="Website" />
</a>
<a href="https://github.com/emsesp/EMS-ESP32/blob/dev/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/Contribute-ff4785?style=for-the-badge&logo=git&logoColor=white" alt="Contribute" />
</a>
<a href="https://docs.emsesp.org">
<img src="https://img.shields.io/badge/Documentation-0077b5?style=for-the-badge&logo=googledocs&logoColor=white" alt="Guides" />
</a>
<a href="https://discord.gg/3J3GgnzpyT">
<img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
</a>
<a href="https://github.com/emsesp/EMS-ESP32/blob/main/CHANGELOG.md">
<img src="https://img.shields.io/badge/Changelog-6c5ce7?style=for-the-badge&logo=git&logoColor=white" alt="Changelog" />
</a>
</p>
[![version](https://img.shields.io/github/release/emsesp/EMS-ESP32.svg?label=Latest%20Release)](https://github.com/emsesp/EMS-ESP32/blob/main/CHANGELOG.md)
[![release-date](https://img.shields.io/github/release-date/emsesp/EMS-ESP32.svg?label=Released)](https://github.com/emsesp/EMS-ESP32/commits/main)
@@ -16,7 +42,7 @@
It requires a small circuit to interface with the EMS bus which can be purchased from <https://bbqkees-electronics.nl> or custom built.
## **Key Features**
## 📦&nbsp; **Key Features**
- Compatible with EMS, EMS+, EMS2, EMS Plus, Logamatic EMS, Junkers 2-wire, Heatronic 3 and 4
- Supporting over 120 different EMS compatible devices such as thermostats, boilers, heat pumps, mixing units, solar modules, connect modules, ventilation units, switches and more
@@ -32,31 +58,31 @@ It requires a small circuit to interface with the EMS bus which can be purchased
- A powerful Scheduler to automate tasks and trigger events based data changes
- A Notification service to alert you of important events
## **Installing**
## 🚀&nbsp; **Installing**
Head over to [download.emsesp.org](https://download.emsesp.org) for instructions on how to install EMS-ESP. There is also further details on which boards are supported in [this section](https://docs.emsesp.org/Getting-Started/#first-time-install) of the documentation.
## **Documentation**
## 📋&nbsp; **Documentation**
Visit [emsesp.org](https://docs.emsesp.org) for more details on how to install and configure EMS-ESP. There is also a collection of Frequently Asked Questions and Troubleshooting tips with example customizations from the community.
## **Getting Support**
## 💬&nbsp; **Getting Support**
To chat with the community reach out on our [Discord Server](https://discord.gg/3J3GgnzpyT).
If you find an issue or have a request, see [here](https://docs.emsesp.org/Support/) on how to submit a bug report or feature request.
## **Live Demo**
## 🎥&nbsp; **Live Demo**
For a live demo go to [demo.emsesp.org](https://demo.emsesp.org). Pick a language from the sign on page and log in with any username or password. Note not all features are operational as it's based on static data.
## **Contributors**
## 💖&nbsp; **Contributors**
EMS-ESP is a project created by [proddy](https://github.com/proddy) and owned and maintained by both [proddy](https://github.com/proddy) and [MichaelDvP](https://github.com/MichaelDvP) with support from [BBQKees Electronics](https://bbqkees-electronics.nl).
If you like **EMS-ESP**, please give it a ✨ on GitHub, or even better fork it and contribute. You can also offer a small donation. This is an open-source project maintained by volunteers, and your support is greatly appreciated.
## **Libraries used**
## 📢&nbsp; **Libraries used**
- [esp8266-react](https://github.com/rjwats/esp8266-react) by @rjwats for the core framework that provides the Web UI, which has been heavily modified
- [uuid-\*](https://github.com/nomis/mcu-uuid-console) from @nomis. The console, syslog, telnet and logging are based off these awesome open source libraries
@@ -64,7 +90,7 @@ If you like **EMS-ESP**, please give it a ✨ on GitHub, or even better fork it
- [espMqttClient](https://github.com/bertmelis/espMqttClient) for the MQTT client
- ESPAsyncWebServer and AsyncTCP for the Web server and TCP backends, with custom modifications for performance
## **License**
## 📜&nbsp; **License**
This program is licensed under GPL-3.0

View File

@@ -9,5 +9,25 @@
}
],
"dictionaries": ["project-words"],
"ignorePaths": ["node_modules", "compile_commands.json", "WWWData.h", "**/venv/**", "lib/eModbus", "lib/ESPAsyncWebServer", "lib/espMqttClient", "analyse.html", "dist", "**/*.csv", "**/*.md", "**/*.py", "locale_translations.h", "TZ.tsx", "**/*.txt","build/**", "**/i18n/**", "/project-words.txt"]
"ignorePaths": [
"node_modules",
"compile_commands.json",
"WWWData.h", "**/venv/**",
"lib/eModbus",
"lib/ESPAsyncWebServer",
"lib/espMqttClient",
"analyse.html",
"dist",
"**/*.csv",
"**/*.md",
"**/*.py",
"locale_translations.h",
"TZ.tsx",
"**/*.txt",
"build/**",
"**/i18n/**",
"/project-words.txt",
"Makefile",
"src/modbus_entity_parameters.hpp"
]
}

28
echo_progress.py Normal file
View File

@@ -0,0 +1,28 @@
"""
Print makefile progress
From https://stackoverflow.com/questions/451413/make-makefile-progress-indication
"""
import argparse
import math
import sys
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--stepno", type=int, required=True)
parser.add_argument("--nsteps", type=int, required=True)
parser.add_argument("remainder", nargs=argparse.REMAINDER)
args = parser.parse_args()
nchars = int(math.log(args.nsteps, 10)) + 1
fmt_str = "[{:Xd}/{:Xd}]({:6.2f}%)".replace("X", str(nchars))
progress = 100 * args.stepno / args.nsteps
sys.stdout.write(fmt_str.format(args.stepno, args.nsteps, progress))
for item in args.remainder:
sys.stdout.write(" ")
sys.stdout.write(item)
sys.stdout.write("\n")
if __name__ == "__main__":
main()

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.5.2.cjs
yarnPath: .yarn/releases/yarn-4.5.3.cjs

View File

@@ -24,10 +24,10 @@
"@alova/adapter-xhr": "2.0.10",
"@emotion/react": "^11.13.5",
"@emotion/styled": "^11.13.5",
"@mui/icons-material": "^6.1.8",
"@mui/material": "^6.1.8",
"@mui/icons-material": "^6.1.9",
"@mui/material": "^6.1.9",
"@table-library/react-table-library": "4.1.7",
"alova": "3.2.4",
"alova": "3.2.5",
"async-validator": "^4.2.5",
"jwt-decode": "^4.0.0",
"mime-types": "^2.1.35",
@@ -44,23 +44,23 @@
"@babel/core": "^7.26.0",
"@eslint/js": "^9.15.0",
"@preact/compat": "^18.3.1",
"@preact/preset-vite": "^2.9.1",
"@preact/preset-vite": "^2.9.2",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/formidable": "^3",
"@types/node": "^22.9.3",
"@types/node": "^22.10.1",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"concurrently": "^9.1.0",
"eslint": "^9.15.0",
"eslint-config-prettier": "^9.1.0",
"formidable": "^3.5.2",
"prettier": "^3.3.3",
"prettier": "^3.4.1",
"rollup-plugin-visualizer": "^5.12.0",
"terser": "^5.36.0",
"typescript-eslint": "8.15.0",
"vite": "^5.4.11",
"typescript-eslint": "8.16.0",
"vite": "^6.0.1",
"vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^5.1.3"
},
"packageManager": "yarn@4.5.2"
"packageManager": "yarn@4.5.3"
}

View File

@@ -30,11 +30,20 @@ import { useI18nContext } from 'i18n/i18n-react';
const Version = () => {
const { LL } = useI18nContext();
const [restarting, setRestarting] = useState<boolean>(false);
const [openDialog, setOpenDialog] = useState<boolean>(false);
const [useDev, setUseDev] = useState<boolean>(false);
const [openInstallDialog, setOpenInstallDialog] = useState<boolean>(false);
const [usingDevVersion, setUsingDevVersion] = useState<boolean>(false);
const [upgradeAvailable, setUpgradeAvailable] = useState<boolean>(false);
const [internetLive, setInternetLive] = useState<boolean>(false);
const [downloadOnly, setDownloadOnly] = useState<boolean>(false);
const STABLE_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/';
const STABLE_RELNOTES_URL =
'https://github.com/emsesp/EMS-ESP32/blob/main/CHANGELOG.md';
const DEV_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/latest/';
const DEV_RELNOTES_URL =
'https://github.com/emsesp/EMS-ESP32/blob/dev/CHANGELOG_LATEST.md';
const { send: sendCheckUpgrade } = useRequest(
(versions: string) => callAction({ action: 'checkUpgrade', param: versions }),
@@ -46,7 +55,15 @@ const Version = () => {
setUpgradeAvailable(data.upgradeable);
});
const { data, send: loadData, error } = useRequest(SystemApi.readSystemStatus);
const {
data: data,
send: loadData,
error
} = useRequest(SystemApi.readSystemStatus).onSuccess((event) => {
// older version of EMS-ESP didn't have the psram set, so we can't do an OTA upgrade
setDownloadOnly(event.data.psram === undefined);
setUsingDevVersion(event.data.emsesp_version.includes('dev'));
});
const { send: sendUploadURL } = useRequest(
(url: string) => callAction({ action: 'uploadURL', param: url }),
@@ -61,34 +78,27 @@ const Version = () => {
useEffect(() => {
if (latestVersion && latestDevVersion) {
// console.log("Latest versions, stable: " + latestVersion + " dev: " + latestDevVersion);
sendCheckUpgrade(latestDevVersion + ',' + latestVersion).catch(
(error: Error) => {
toast.error('Failed to check upgrade: ' + error.message);
}
);
sendCheckUpgrade(latestDevVersion + ',' + latestVersion)
.catch((error: Error) => {
toast.error('Failed to check for upgrades: ' + error.message);
})
.finally(() => {
setInternetLive(true);
});
}
}, [latestVersion, latestDevVersion]);
const STABLE_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/';
const STABLE_RELNOTES_URL =
'https://github.com/emsesp/EMS-ESP32/blob/main/CHANGELOG.md';
const DEV_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/latest/';
const DEV_RELNOTES_URL =
'https://github.com/emsesp/EMS-ESP32/blob/dev/CHANGELOG_LATEST.md';
const getBinURL = (useDevVersion: boolean) => {
const getBinURL = () => {
if (!latestVersion || !latestDevVersion) {
return '';
}
const filename =
'EMS-ESP-' +
(useDevVersion ? latestDevVersion : latestVersion).replaceAll('.', '_') +
(usingDevVersion ? latestDevVersion : latestVersion).replaceAll('.', '_') +
'-' +
getPlatform() +
'.bin';
return useDevVersion
return usingDevVersion
? DEV_URL + filename
: STABLE_URL + 'v' + latestVersion + '/' + filename;
};
@@ -109,19 +119,28 @@ const Version = () => {
useLayoutTitle('EMS-ESP Firmware');
const renderUploadDialog = () => (
<Dialog sx={dialogStyle} open={openDialog} onClose={() => setOpenDialog(false)}>
<DialogTitle>{LL.INSTALL('') + ' ' + ' Firmware'}</DialogTitle>
const renderInstallDialog = () => (
<Dialog
sx={dialogStyle}
open={openInstallDialog}
onClose={() => closeInstallDialog()}
>
<DialogTitle>
{LL.INSTALL() +
' ' +
(usingDevVersion ? LL.DEVELOPMENT() : LL.STABLE()) +
' Firmware'}
</DialogTitle>
<DialogContent dividers>
<Typography mb={2}>
{LL.INSTALL_VERSION(useDev ? latestDevVersion : latestVersion)}
{LL.INSTALL_VERSION(usingDevVersion ? latestDevVersion : latestVersion)}
</Typography>
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={() => setOpenDialog(false)}
onClick={() => closeInstallDialog()}
color="secondary"
>
{LL.CANCEL()}
@@ -129,35 +148,73 @@ const Version = () => {
<Button
startIcon={<DownloadIcon />}
variant="outlined"
onClick={() => setOpenDialog(false)}
color="primary"
>
<Link
underline="none"
target="_blank"
href={getBinURL(useDev)}
onClick={() => closeInstallDialog()}
color="primary"
>
<Link underline="none" target="_blank" href={getBinURL()} color="primary">
{LL.DOWNLOAD(1)}
</Link>
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={() => installFirmwareURL(getBinURL(useDev))}
onClick={() => installFirmwareURL(getBinURL())}
color="primary"
>
{LL.INSTALL('')}
{LL.INSTALL()}
</Button>
</DialogActions>
</Dialog>
);
const showFirmwareDialog = (useDevVersion: boolean) => {
if (useDevVersion || data.emsesp_version.includes('dev')) {
setUseDev(true);
const showFirmwareDialog = (useDevVersion?: boolean) => {
setUsingDevVersion(useDevVersion || usingDevVersion);
setOpenInstallDialog(true);
};
const closeInstallDialog = () => {
setOpenInstallDialog(false);
setUsingDevVersion(data.emsesp_version.includes('dev'));
};
const switchToDev = () => {
setUsingDevVersion(true);
setUpgradeAvailable(true);
};
const showButtons = () => {
if (!upgradeAvailable) {
return;
}
setOpenDialog(true);
if (downloadOnly) {
return (
<Button
startIcon={<DownloadIcon />}
variant="outlined"
onClick={() => setOpenInstallDialog(false)}
color="warning"
size="small"
sx={{ ml: 2 }}
>
<Link underline="none" target="_blank" href={getBinURL()} color="warning">
{LL.DOWNLOAD(1)}
</Link>
</Button>
);
}
return (
<Button
sx={{ ml: 2 }}
variant="outlined"
color="warning"
size="small"
onClick={() => showFirmwareDialog()}
>
{LL.UPGRADE()}&hellip;
</Button>
);
};
const content = () => {
@@ -165,19 +222,6 @@ const Version = () => {
return <FormLoader onRetry={loadData} errorMessage={error?.message} />;
}
const isDev = data.emsesp_version.includes('dev');
// const isDev = false; // for testing
// const isDev = true; // for testing
// check for older versions where auto-upgrade is not supported. These are bbqkees boards with no psram.
const canUpload = upgradeAvailable && data && data.psram;
// const canUpload = true as boolean; // for testing
// const canUpload = false as boolean; // for testing
// see if we have internet access
const internet_live =
latestDevVersion !== undefined && latestVersion !== undefined;
return (
<>
<Box p={2} border="1px solid grey" borderRadius={2}>
@@ -208,20 +252,9 @@ const Version = () => {
</Typography>
<Typography mb={1}>{getPlatform()}</Typography>
<Typography mb={1}>
{isDev ? LL.DEVELOPMENT() : LL.STABLE()}
{!isDev && internet_live && (
<Typography variant="caption">
<Button
sx={{ ml: 2 }}
variant="outlined"
color="primary"
size="small"
onClick={() => showFirmwareDialog(true)}
>
{LL.SWITCH_DEV()}
</Button>
</Typography>
)}
{data.emsesp_version.includes('dev')
? LL.DEVELOPMENT()
: LL.STABLE()}
</Typography>
</Grid>
</Grid>
@@ -230,7 +263,7 @@ const Version = () => {
{LL.AVAILABLE_VERSION()}
</Typography>
{internet_live ? (
{internetLive ? (
<>
<Grid container spacing={4}>
<Grid mb={1}>
@@ -247,72 +280,14 @@ const Version = () => {
<Link target="_blank" href={STABLE_RELNOTES_URL} color="primary">
(changelog)
</Link>
{!isDev && canUpload && (
<Button
sx={{ ml: 2 }}
variant="outlined"
color="warning"
size="small"
onClick={() => showFirmwareDialog(false)}
>
{LL.UPGRADE()}&hellip;
</Button>
)}
{!isDev && !canUpload && (
<Button
startIcon={<DownloadIcon />}
variant="outlined"
onClick={() => setOpenDialog(false)}
color="warning"
size="small"
sx={{ ml: 2 }}
>
<Link
underline="none"
target="_blank"
href={getBinURL(useDev)}
color="warning"
>
{LL.DOWNLOAD(1)}
</Link>
</Button>
)}
{!usingDevVersion && showButtons()}
</Typography>
<Typography mb={1}>
{latestDevVersion}&nbsp;&nbsp;
<Link target="_blank" href={DEV_RELNOTES_URL} color="primary">
(changelog)
</Link>
{isDev && canUpload && (
<Button
sx={{ ml: 2 }}
variant="outlined"
color="warning"
size="small"
onClick={() => showFirmwareDialog(false)}
>
{LL.UPGRADE()}&hellip;
</Button>
)}
{isDev && !canUpload && (
<Button
startIcon={<DownloadIcon />}
variant="outlined"
onClick={() => setOpenDialog(false)}
color="warning"
size="small"
sx={{ ml: 2 }}
>
<Link
underline="none"
target="_blank"
href={getBinURL(useDev)}
color="warning"
>
{LL.DOWNLOAD(1)}
</Link>
</Button>
)}
{usingDevVersion && showButtons()}
</Typography>
</Grid>
</Grid>
@@ -333,14 +308,29 @@ const Version = () => {
{LL.LATEST_VERSION()}
</Typography>
)}
{!data.emsesp_version.includes('dev') && !usingDevVersion && (
<Typography variant="caption">
<Button
sx={{ mt: 2 }}
variant="outlined"
color="primary"
size="small"
onClick={() => switchToDev()}
>
{LL.SWITCH_DEV()}
</Button>
</Typography>
)}
</>
) : (
<Typography mb={1} color="warning">
not online
<WarningIcon color="warning" sx={{ verticalAlign: 'middle', mr: 2 }} />
device cannot access internet
</Typography>
)}
{renderUploadDialog()}
{renderInstallDialog()}
</Box>
</>
);

View File

@@ -161,7 +161,7 @@ const cz: Translation = {
HELP_INFORMATION_4: 'Stáhněte a připojte informace podpoře pro rychlejší odezvu při hlášení problému',
UPLOAD: 'Nahrát',
DOWNLOAD: '{{S|s|s}}táhnout',
INSTALL: 'Instalovat {0}',
INSTALL: 'Instalovat',
ABORTED: 'přerušeno',
FAILED: 'neúspěšné',
SUCCESSFUL: 'úspěšné',

View File

@@ -161,7 +161,7 @@ const de: Translation = {
HELP_INFORMATION_4: 'Bitte laden Sie die Systemdetails und hängen Sie sie an das Support-Issue an',
UPLOAD: 'Hochladen',
DOWNLOAD: '{{H|h|h}}erunterladen',
INSTALL: 'Installieren {0}',
INSTALL: 'Installieren',
ABORTED: 'abgebrochen',
FAILED: 'gescheitert',
SUCCESSFUL: 'erfolgreich',

View File

@@ -161,7 +161,7 @@ const en: Translation = {
HELP_INFORMATION_4: 'Download and attach your support information for a faster response when reporting an issue',
UPLOAD: 'Upload',
DOWNLOAD: '{{D|d|d}}ownload',
INSTALL: 'Install {0}',
INSTALL: 'Install',
ABORTED: 'aborted',
FAILED: 'failed',
SUCCESSFUL: 'successful',
@@ -186,7 +186,7 @@ const en: Translation = {
BUFFER_SIZE: 'Max Buffer Size',
COMPACT: 'Compact',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings',
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)',
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)',
UPLOAD_DROP_TEXT: 'Drop file or click here',
ERROR: 'Unexpected Error, please try again',
TIME_SET: 'Time set',

View File

@@ -161,7 +161,7 @@ const fr: Translation = {
HELP_INFORMATION_4: "N'oubliez pas de télécharger et de joindre les informations relatives à votre système pour obtenir une réponse plus rapide lorsque vous signalez un problème",
UPLOAD: 'Upload',
DOWNLOAD: '{{D|d|d}}ownload',
INSTALL: 'Installer {0}',
INSTALL: 'Installer',
ABORTED: 'annulé',
FAILED: 'échoué',
SUCCESSFUL: 'réussi',
@@ -186,7 +186,7 @@ const fr: Translation = {
BUFFER_SIZE: 'Max taille du buffer',
COMPACT: 'Compact',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Déposer le fichier ou cliquer ici',
ERROR: 'Erreur inattendue, veuillez réessayer',
TIME_SET: 'Time set',

View File

@@ -186,7 +186,7 @@ const it: Translation = {
BUFFER_SIZE: 'Max Buffer Size',
COMPACT: 'Compact',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Trascina il file o clicca qui',
ERROR: 'Errore Inaspettato, prego tenta ancora',
TIME_SET: 'Imposta Ora',

View File

@@ -161,7 +161,7 @@ const nl: Translation = {
HELP_INFORMATION_4: 'Zorg dat je ook je systeem details zijn toevoeged voor een sneller antwoord',
UPLOAD: 'Upload',
DOWNLOAD: '{{D|d|d}}ownload',
INSTALL: 'Installeren {0}',
INSTALL: 'Installeren',
ABORTED: 'afgebroken',
FAILED: 'mislukt',
SUCCESSFUL: 'successvol',
@@ -186,7 +186,7 @@ const nl: Translation = {
BUFFER_SIZE: 'Max Buffer Size',
COMPACT: 'Compact',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Sleep bestand hierheen of klik hier',
ERROR: 'Onverwachte fout, probeer opnieuw',
TIME_SET: 'Tijd ingesteld',

View File

@@ -161,7 +161,7 @@ const no: Translation = {
HELP_INFORMATION_4: 'Husk å laste ned og legg ved din systeminformasjon for en raskere respons når du rapporterer et problem',
UPLOAD: 'Opplasning',
DOWNLOAD: '{{N|n|n}}edlasting',
INSTALL: 'Installer {0}',
INSTALL: 'Installer',
ABORTED: 'avbrutt',
FAILED: 'feilet',
SUCCESSFUL: 'vellykket',
@@ -186,7 +186,7 @@ const no: Translation = {
BUFFER_SIZE: 'Max Buffer Størrelse',
COMPACT: 'Komprimere',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Slipp fil eller klikk her',
ERROR: 'Ukjent feil, prøv igjen',
TIME_SET: 'Still in tid',

View File

@@ -161,7 +161,7 @@ const pl: BaseTranslation = {
HELP_INFORMATION_4: 'Zgłaszając problem, nie zapomnij pobrać i dołączyć informacji o swoim systemie!',
UPLOAD: 'Wysyłanie',
DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}',
INSTALL: 'Zainstalować {0}',
INSTALL: 'Zainstalować',
ABORTED: 'zostało przerwane!',
FAILED: 'nie powiodł{{o|a|}} się!',
SUCCESSFUL: 'powiodło się.',
@@ -186,7 +186,7 @@ const pl: BaseTranslation = {
BUFFER_SIZE: 'Maksymalna pojemność bufora (ilość wpisów)',
COMPACT: 'Kompaktowy',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Przeciągnij tutaj plik lub kliknij',
ERROR: 'Nieoczekiwany błąd, spróbuj ponownie!',
TIME_SET: 'Zegar został ustawiony.',

View File

@@ -161,7 +161,7 @@ const sk: Translation = {
HELP_INFORMATION_4: 'nezabudnite si stiahnuť a pripojiť informácie o vašom systéme, aby ste mohli rýchlejšie reagovať pri nahlasovaní problému',
UPLOAD: 'Nahrať',
DOWNLOAD: '{{S|s|s}}tiahnuť',
INSTALL: 'Inštalovať {0}',
INSTALL: 'Inštalovať',
ABORTED: 'zrušené',
FAILED: 'chybné',
SUCCESSFUL: 'úspešné',

View File

@@ -161,7 +161,7 @@ const sv: Translation = {
HELP_INFORMATION_4: 'Bifoga din systeminformation för snabbare hantering när du rapporterar ett problem',
UPLOAD: 'Uppladdning',
DOWNLOAD: '{{N|n|n}}edladdning',
INSTALL: 'Installera {0}',
INSTALL: 'Installera',
ABORTED: 'Avbruten',
FAILED: 'Misslyckades',
SUCCESSFUL: 'Lyckades',
@@ -186,7 +186,7 @@ const sv: Translation = {
BUFFER_SIZE: 'Max Bufferstorlek',
COMPACT: 'Komprimera',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Släpp fil eller klicka här',
ERROR: 'Okänt Fel, var god försök igen',
TIME_SET: 'Ställ in tid',

View File

@@ -161,7 +161,7 @@ const tr: Translation = {
HELP_INFORMATION_4: 'Bir sorun bildirirken daha hızlı bir dönüş için sistem bilginizi indirip eklemeyi unutmayın',
UPLOAD: 'Yükleme',
DOWNLOAD: '{{İ|i|i}}İndirme',
INSTALL: 'Düzenlemek {0}',
INSTALL: 'Düzenlemek',
ABORTED: 'iptal edildi',
FAILED: 'başarısız',
SUCCESSFUL: 'başarılı',
@@ -186,7 +186,7 @@ const tr: Translation = {
BUFFER_SIZE: 'En fazla bellek boyutu',
COMPACT: 'Sıkışık',
DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware (.bin) file or a backup file (.json)', // TODO translate
UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', // TODO translate
UPLOAD_DROP_TEXT: 'Buraya tıklayın yada dosyayı sürükleyip bırakın',
ERROR: 'Beklenemedik hata, lütfen tekrar deneyin.',
TIME_SET: 'Zaman ayarı',

View File

@@ -358,7 +358,7 @@ __metadata:
languageName: node
linkType: hard
"@emotion/cache@npm:^11.13.1, @emotion/cache@npm:^11.13.5":
"@emotion/cache@npm:^11.13.5":
version: 11.13.5
resolution: "@emotion/cache@npm:11.13.5"
dependencies:
@@ -415,7 +415,7 @@ __metadata:
languageName: node
linkType: hard
"@emotion/serialize@npm:^1.3.2, @emotion/serialize@npm:^1.3.3":
"@emotion/serialize@npm:^1.3.3":
version: 1.3.3
resolution: "@emotion/serialize@npm:1.3.3"
dependencies:
@@ -485,79 +485,79 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/aix-ppc64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/aix-ppc64@npm:0.21.5"
"@esbuild/aix-ppc64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/aix-ppc64@npm:0.24.0"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/android-arm64@npm:0.21.5"
"@esbuild/android-arm64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/android-arm64@npm:0.24.0"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/android-arm@npm:0.21.5"
"@esbuild/android-arm@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/android-arm@npm:0.24.0"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/android-x64@npm:0.21.5"
"@esbuild/android-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/android-x64@npm:0.24.0"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/darwin-arm64@npm:0.21.5"
"@esbuild/darwin-arm64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/darwin-arm64@npm:0.24.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/darwin-x64@npm:0.21.5"
"@esbuild/darwin-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/darwin-x64@npm:0.24.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/freebsd-arm64@npm:0.21.5"
"@esbuild/freebsd-arm64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/freebsd-arm64@npm:0.24.0"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/freebsd-x64@npm:0.21.5"
"@esbuild/freebsd-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/freebsd-x64@npm:0.24.0"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-arm64@npm:0.21.5"
"@esbuild/linux-arm64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-arm64@npm:0.24.0"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-arm@npm:0.21.5"
"@esbuild/linux-arm@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-arm@npm:0.24.0"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-ia32@npm:0.21.5"
"@esbuild/linux-ia32@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-ia32@npm:0.24.0"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
@@ -569,86 +569,93 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-loong64@npm:0.21.5"
"@esbuild/linux-loong64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-loong64@npm:0.24.0"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-mips64el@npm:0.21.5"
"@esbuild/linux-mips64el@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-mips64el@npm:0.24.0"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-ppc64@npm:0.21.5"
"@esbuild/linux-ppc64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-ppc64@npm:0.24.0"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-riscv64@npm:0.21.5"
"@esbuild/linux-riscv64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-riscv64@npm:0.24.0"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-s390x@npm:0.21.5"
"@esbuild/linux-s390x@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-s390x@npm:0.24.0"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/linux-x64@npm:0.21.5"
"@esbuild/linux-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/linux-x64@npm:0.24.0"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/netbsd-x64@npm:0.21.5"
"@esbuild/netbsd-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/netbsd-x64@npm:0.24.0"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/openbsd-x64@npm:0.21.5"
"@esbuild/openbsd-arm64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/openbsd-arm64@npm:0.24.0"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/openbsd-x64@npm:0.24.0"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/sunos-x64@npm:0.21.5"
"@esbuild/sunos-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/sunos-x64@npm:0.24.0"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/win32-arm64@npm:0.21.5"
"@esbuild/win32-arm64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/win32-arm64@npm:0.24.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/win32-ia32@npm:0.21.5"
"@esbuild/win32-ia32@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/win32-ia32@npm:0.24.0"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.21.5":
version: 0.21.5
resolution: "@esbuild/win32-x64@npm:0.21.5"
"@esbuild/win32-x64@npm:0.24.0":
version: 0.24.0
resolution: "@esbuild/win32-x64@npm:0.24.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -833,38 +840,38 @@ __metadata:
languageName: node
linkType: hard
"@mui/core-downloads-tracker@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/core-downloads-tracker@npm:6.1.8"
checksum: 10c0/a77ac4849c8a0f3bb0eecfae758f277fbdef46ff269314f495719a87f34f54b860d45a4648e456abac33d98b8070649478dc5918d92379728e2ff90e2cc798e1
"@mui/core-downloads-tracker@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/core-downloads-tracker@npm:6.1.9"
checksum: 10c0/f84c48291e6c85bafb60015f0464f041ca3168dcfd7c563cb584bf925495872f0a180ed52e985b544c6cb87297a1686b1d3a90f451d12594765d0811fc7514b0
languageName: node
linkType: hard
"@mui/icons-material@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/icons-material@npm:6.1.8"
"@mui/icons-material@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/icons-material@npm:6.1.9"
dependencies:
"@babel/runtime": "npm:^7.26.0"
peerDependencies:
"@mui/material": ^6.1.8
"@mui/material": ^6.1.9
"@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
checksum: 10c0/730dd2581e3bdfabb4085ed4675fd3fd49d0f03c22291f79d0f51b1fd4f23b4edccb8b16c0b424b5f81dd6398742f6c9d52cb1fd075927826669732c4a8a0a8c
checksum: 10c0/7efc0c4a4c668118252ec0a0bf7ed8e4d9af68d03d92e76d382109aaf8b018bd3512b47c444947c12df25be02615483a5e4889ddf745b42ab0446583b34d59f8
languageName: node
linkType: hard
"@mui/material@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/material@npm:6.1.8"
"@mui/material@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/material@npm:6.1.9"
dependencies:
"@babel/runtime": "npm:^7.26.0"
"@mui/core-downloads-tracker": "npm:^6.1.8"
"@mui/system": "npm:^6.1.8"
"@mui/core-downloads-tracker": "npm:^6.1.9"
"@mui/system": "npm:^6.1.9"
"@mui/types": "npm:^7.2.19"
"@mui/utils": "npm:^6.1.8"
"@mui/utils": "npm:^6.1.9"
"@popperjs/core": "npm:^2.11.8"
"@types/react-transition-group": "npm:^4.4.11"
clsx: "npm:^2.1.1"
@@ -875,7 +882,7 @@ __metadata:
peerDependencies:
"@emotion/react": ^11.5.0
"@emotion/styled": ^11.3.0
"@mui/material-pigment-css": ^6.1.8
"@mui/material-pigment-css": ^6.1.9
"@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
@@ -888,16 +895,16 @@ __metadata:
optional: true
"@types/react":
optional: true
checksum: 10c0/c4515ae5df41538d0eada15d899d70e1c7be83f16ee3a5c582e099d750584351e4220fab47fbeb267cd90e87bb40de9931414f23d9e66577b8235d442794720b
checksum: 10c0/934be9f17e66ac9944ff970c2a2c67292aadd339f5124e2ec82fbfd25fe713e7716c61005b918dd31836674fb8e327bd87f200276f2ef8930e9ba4e77727bad6
languageName: node
linkType: hard
"@mui/private-theming@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/private-theming@npm:6.1.8"
"@mui/private-theming@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/private-theming@npm:6.1.9"
dependencies:
"@babel/runtime": "npm:^7.26.0"
"@mui/utils": "npm:^6.1.8"
"@mui/utils": "npm:^6.1.9"
prop-types: "npm:^15.8.1"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -905,17 +912,17 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10c0/16425a9001d3038531036dc47f031a4f1175d99b07b788983ce9a5e0c3c063132c6d508af31d3d13c3e44bedb4aa8b2f0111c5eb609ca8e0a652f87237ec1f38
checksum: 10c0/d2ed09a50a30496905ba57735c370efa85b00ed0b29b2bd9e7193416d4825659d48abaf2bcf649a80dfaa035262487b81a3396b042fd97646f775ca4d20dd05c
languageName: node
linkType: hard
"@mui/styled-engine@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/styled-engine@npm:6.1.8"
"@mui/styled-engine@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/styled-engine@npm:6.1.9"
dependencies:
"@babel/runtime": "npm:^7.26.0"
"@emotion/cache": "npm:^11.13.1"
"@emotion/serialize": "npm:^1.3.2"
"@emotion/cache": "npm:^11.13.5"
"@emotion/serialize": "npm:^1.3.3"
"@emotion/sheet": "npm:^1.4.0"
csstype: "npm:^3.1.3"
prop-types: "npm:^15.8.1"
@@ -928,19 +935,19 @@ __metadata:
optional: true
"@emotion/styled":
optional: true
checksum: 10c0/4da513a6bc72a2875fc0d4a097db5141849b69a2c62b867a1ac45d3fe112c2c18abb835f0bdfbe4ffbe626bff2f0490f014ccd3a7db72ada6e3b0cca87af63de
checksum: 10c0/74d239b2d306b0aa2271d9943cea83ea0a05c16c55cd2239605b0f1cb91fc4aa508891173d1b9bb69e92074d1d4db14d8b85618c639667967a1f608607047e66
languageName: node
linkType: hard
"@mui/system@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/system@npm:6.1.8"
"@mui/system@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/system@npm:6.1.9"
dependencies:
"@babel/runtime": "npm:^7.26.0"
"@mui/private-theming": "npm:^6.1.8"
"@mui/styled-engine": "npm:^6.1.8"
"@mui/private-theming": "npm:^6.1.9"
"@mui/styled-engine": "npm:^6.1.9"
"@mui/types": "npm:^7.2.19"
"@mui/utils": "npm:^6.1.8"
"@mui/utils": "npm:^6.1.9"
clsx: "npm:^2.1.1"
csstype: "npm:^3.1.3"
prop-types: "npm:^15.8.1"
@@ -956,7 +963,7 @@ __metadata:
optional: true
"@types/react":
optional: true
checksum: 10c0/af7902a1a6664055b4f764020746403749148f88c050edf509f557fd9f0b1d4d86ee9478d78e6c0356129f09b4101a93a345b05b5aa00125d3c164b148275faf
checksum: 10c0/0ae66dbbf183bf6ccefeaf3808699c6ef2dd72928134e3e902716e3f75d6b15ccc41c1478a23f20824b76ff3ca86b0923ebccb58ae11b9e04305988eae74d653
languageName: node
linkType: hard
@@ -972,9 +979,9 @@ __metadata:
languageName: node
linkType: hard
"@mui/utils@npm:^6.1.8":
version: 6.1.8
resolution: "@mui/utils@npm:6.1.8"
"@mui/utils@npm:^6.1.9":
version: 6.1.9
resolution: "@mui/utils@npm:6.1.9"
dependencies:
"@babel/runtime": "npm:^7.26.0"
"@mui/types": "npm:^7.2.19"
@@ -988,7 +995,7 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10c0/7d2bfa4863456a5223ddf6a93d56cc4c64e9de0ebc947953a4c23e83f8c9257d02a572da7d8c2dd93dcea5db0d321b7c8bb1e154b26fa5f22663eb6a262726ab
checksum: 10c0/2cd28cc44f9048b2c9b5511f074082da1f5b969c524f08f827aaa5e226392238bb91fbf6c5054290590b5d9a67d7f753a6ee9b7cc7613df7193635b8f63ca577
languageName: node
linkType: hard
@@ -1064,9 +1071,9 @@ __metadata:
languageName: node
linkType: hard
"@preact/preset-vite@npm:^2.9.1":
version: 2.9.1
resolution: "@preact/preset-vite@npm:2.9.1"
"@preact/preset-vite@npm:^2.9.2":
version: 2.9.2
resolution: "@preact/preset-vite@npm:2.9.2"
dependencies:
"@babel/code-frame": "npm:^7.22.13"
"@babel/plugin-transform-react-jsx": "npm:^7.22.15"
@@ -1082,8 +1089,8 @@ __metadata:
stack-trace: "npm:^1.0.0-pre2"
peerDependencies:
"@babel/core": 7.x
vite: 2.x || 3.x || 4.x || 5.x
checksum: 10c0/6c2f2a7f06b08b2bd817d493101c4654891d6b86f661d48e2fb0b1388289bc4cb40b11a9ab30f9a12f818a28a1b48d60d97b24b8d3376c317a9d8abe06a68b1e
vite: 2.x || 3.x || 4.x || 5.x || 6.x
checksum: 10c0/7065fa6d9d2c4ddd3f0b8b26f52513cf4e7712714d00e994184d73a0af625a00e8c1a3afd6e94cda0884c6e3188f75f55e4bf9aa477f2dac714bcb817bd734d9
languageName: node
linkType: hard
@@ -1440,7 +1447,7 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:*, @types/node@npm:^22.9.3":
"@types/node@npm:*":
version: 22.9.3
resolution: "@types/node@npm:22.9.3"
dependencies:
@@ -1449,6 +1456,15 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:^22.10.1":
version: 22.10.1
resolution: "@types/node@npm:22.10.1"
dependencies:
undici-types: "npm:~6.20.0"
checksum: 10c0/0fbb6d29fa35d807f0223a4db709c598ac08d66820240a2cd6a8a69b8f0bc921d65b339d850a666b43b4e779f967e6ed6cf6f0fca3575e08241e6b900364c234
languageName: node
linkType: hard
"@types/parse-json@npm:^4.0.0":
version: 4.0.2
resolution: "@types/parse-json@npm:4.0.2"
@@ -1509,15 +1525,15 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/eslint-plugin@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/eslint-plugin@npm:8.15.0"
"@typescript-eslint/eslint-plugin@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/eslint-plugin@npm:8.16.0"
dependencies:
"@eslint-community/regexpp": "npm:^4.10.0"
"@typescript-eslint/scope-manager": "npm:8.15.0"
"@typescript-eslint/type-utils": "npm:8.15.0"
"@typescript-eslint/utils": "npm:8.15.0"
"@typescript-eslint/visitor-keys": "npm:8.15.0"
"@typescript-eslint/scope-manager": "npm:8.16.0"
"@typescript-eslint/type-utils": "npm:8.16.0"
"@typescript-eslint/utils": "npm:8.16.0"
"@typescript-eslint/visitor-keys": "npm:8.16.0"
graphemer: "npm:^1.4.0"
ignore: "npm:^5.3.1"
natural-compare: "npm:^1.4.0"
@@ -1528,44 +1544,44 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/90ef10cc7d37a81abec4f4a3ffdfc3a0da8e99d949e03c75437e96e8ab2e896e34b85ab64718690180a7712581031b8611c5d8e7666d6ed4d60b9ace834d58e3
checksum: 10c0/b03612b726ee5aff631cd50e05ceeb06a522e64465e4efdc134e3a27a09406b959ef7a05ec4acef1956b3674dc4fedb6d3a62ce69382f9e30c227bd4093003e5
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/parser@npm:8.15.0"
"@typescript-eslint/parser@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/parser@npm:8.16.0"
dependencies:
"@typescript-eslint/scope-manager": "npm:8.15.0"
"@typescript-eslint/types": "npm:8.15.0"
"@typescript-eslint/typescript-estree": "npm:8.15.0"
"@typescript-eslint/visitor-keys": "npm:8.15.0"
"@typescript-eslint/scope-manager": "npm:8.16.0"
"@typescript-eslint/types": "npm:8.16.0"
"@typescript-eslint/typescript-estree": "npm:8.16.0"
"@typescript-eslint/visitor-keys": "npm:8.16.0"
debug: "npm:^4.3.4"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/19c25aea0dc51faa758701a5319a89950fd30494d9d645db8ced84fb60714c5e7d4b51fc4ee8ccb07ddefec88c51ee307ee7e49addd6330ee8f3e7ee9ba329fc
checksum: 10c0/e49c6640a7a863a16baecfbc5b99392a4731e9c7e9c9aaae4efbc354e305485fe0f39a28bf0acfae85bc01ce37fe0cc140fd315fdaca8b18f9b5e0addff8ceae
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/scope-manager@npm:8.15.0"
"@typescript-eslint/scope-manager@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/scope-manager@npm:8.16.0"
dependencies:
"@typescript-eslint/types": "npm:8.15.0"
"@typescript-eslint/visitor-keys": "npm:8.15.0"
checksum: 10c0/c27dfdcea4100cc2d6fa967f857067cbc93155b55e648f9f10887a1b9372bb76cf864f7c804f3fa48d7868d9461cdef10bcea3dab7637d5337e8aa8042dc08b9
"@typescript-eslint/types": "npm:8.16.0"
"@typescript-eslint/visitor-keys": "npm:8.16.0"
checksum: 10c0/23b7c738b83f381c6419a36e6ca951944187e3e00abb8e012bce8041880410fe498303e28bdeb0e619023a69b14cf32a5ec1f9427c5382807788cd8e52a46a6e
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/type-utils@npm:8.15.0"
"@typescript-eslint/type-utils@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/type-utils@npm:8.16.0"
dependencies:
"@typescript-eslint/typescript-estree": "npm:8.15.0"
"@typescript-eslint/utils": "npm:8.15.0"
"@typescript-eslint/typescript-estree": "npm:8.16.0"
"@typescript-eslint/utils": "npm:8.16.0"
debug: "npm:^4.3.4"
ts-api-utils: "npm:^1.3.0"
peerDependencies:
@@ -1573,23 +1589,23 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/20f09c79c83b38a962cf7eff10d47a2c01bcc0bab7bf6d762594221cd89023ef8c7aec26751c47b524f53f5c8d38bba55a282529b3df82d5f5ab4350496316f9
checksum: 10c0/24c0e815c8bdf99bf488c7528bd6a7c790e8b3b674cb7fb075663afc2ee26b48e6f4cf7c0d14bb21e2376ca62bd8525cbcb5688f36135b00b62b1d353d7235b9
languageName: node
linkType: hard
"@typescript-eslint/types@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/types@npm:8.15.0"
checksum: 10c0/84abc6fd954aff13822a76ac49efdcb90a55c0025c20eee5d8cebcfb68faff33b79bbc711ea524e0209cecd90c5ee3a5f92babc7083c081d3a383a0710264a41
"@typescript-eslint/types@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/types@npm:8.16.0"
checksum: 10c0/141e257ab4060a9c0e2e14334ca14ab6be713659bfa38acd13be70a699fb5f36932a2584376b063063ab3d723b24bc703dbfb1ce57d61d7cfd7ec5bd8a975129
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/typescript-estree@npm:8.15.0"
"@typescript-eslint/typescript-estree@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/typescript-estree@npm:8.16.0"
dependencies:
"@typescript-eslint/types": "npm:8.15.0"
"@typescript-eslint/visitor-keys": "npm:8.15.0"
"@typescript-eslint/types": "npm:8.16.0"
"@typescript-eslint/visitor-keys": "npm:8.16.0"
debug: "npm:^4.3.4"
fast-glob: "npm:^3.3.2"
is-glob: "npm:^4.0.3"
@@ -1599,34 +1615,34 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/3af5c129532db3575349571bbf64d32aeccc4f4df924ac447f5d8f6af8b387148df51965eb2c9b99991951d3dadef4f2509d7ce69bf34a2885d013c040762412
checksum: 10c0/f28fea5af4798a718b6735d1758b791a331af17386b83cb2856d89934a5d1693f7cb805e73c3b33f29140884ac8ead9931b1d7c3de10176fa18ca7a346fe10d0
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/utils@npm:8.15.0"
"@typescript-eslint/utils@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/utils@npm:8.16.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:8.15.0"
"@typescript-eslint/types": "npm:8.15.0"
"@typescript-eslint/typescript-estree": "npm:8.15.0"
"@typescript-eslint/scope-manager": "npm:8.16.0"
"@typescript-eslint/types": "npm:8.16.0"
"@typescript-eslint/typescript-estree": "npm:8.16.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/65743f51845a1f6fd2d21f66ca56182ba33e966716bdca73d30b7a67c294e47889c322de7d7b90ab0818296cd33c628e5eeeb03cec7ef2f76c47de7a453eeda2
checksum: 10c0/1e61187eef3da1ab1486d2a977d8f3b1cb8ef7fa26338500a17eb875ca42a8942ef3f2241f509eef74cf7b5620c109483afc7d83d5b0ab79b1e15920f5a49818
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:8.15.0":
version: 8.15.0
resolution: "@typescript-eslint/visitor-keys@npm:8.15.0"
"@typescript-eslint/visitor-keys@npm:8.16.0":
version: 8.16.0
resolution: "@typescript-eslint/visitor-keys@npm:8.16.0"
dependencies:
"@typescript-eslint/types": "npm:8.15.0"
"@typescript-eslint/types": "npm:8.16.0"
eslint-visitor-keys: "npm:^4.2.0"
checksum: 10c0/02a954c3752c4328482a884eb1da06ca8fb72ae78ef28f1d854b18f3779406ed47263af22321cf3f65a637ec7584e5f483e34a263b5c8cec60ec85aebc263574
checksum: 10c0/537df37801831aa8d91082b2adbffafd40305ed4518f0e7d3cbb17cc466d8b9ac95ac91fa232e7fe585d7c522d1564489ec80052ebb2a6ab9bbf89ef9dd9b7bc
languageName: node
linkType: hard
@@ -1639,17 +1655,17 @@ __metadata:
"@emotion/react": "npm:^11.13.5"
"@emotion/styled": "npm:^11.13.5"
"@eslint/js": "npm:^9.15.0"
"@mui/icons-material": "npm:^6.1.8"
"@mui/material": "npm:^6.1.8"
"@mui/icons-material": "npm:^6.1.9"
"@mui/material": "npm:^6.1.9"
"@preact/compat": "npm:^18.3.1"
"@preact/preset-vite": "npm:^2.9.1"
"@preact/preset-vite": "npm:^2.9.2"
"@table-library/react-table-library": "npm:4.1.7"
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
"@types/formidable": "npm:^3"
"@types/node": "npm:^22.9.3"
"@types/node": "npm:^22.10.1"
"@types/react": "npm:^18.3.12"
"@types/react-dom": "npm:^18.3.1"
alova: "npm:3.2.4"
alova: "npm:3.2.5"
async-validator: "npm:^4.2.5"
concurrently: "npm:^9.1.0"
eslint: "npm:^9.15.0"
@@ -1658,7 +1674,7 @@ __metadata:
jwt-decode: "npm:^4.0.0"
mime-types: "npm:^2.1.35"
preact: "npm:^10.25.0"
prettier: "npm:^3.3.3"
prettier: "npm:^3.4.1"
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
react-icons: "npm:^5.3.0"
@@ -1668,8 +1684,8 @@ __metadata:
terser: "npm:^5.36.0"
typesafe-i18n: "npm:^5.26.2"
typescript: "npm:^5.7.2"
typescript-eslint: "npm:8.15.0"
vite: "npm:^5.4.11"
typescript-eslint: "npm:8.16.0"
vite: "npm:^6.0.1"
vite-plugin-imagemin: "npm:^0.6.1"
vite-tsconfig-paths: "npm:^5.1.3"
languageName: unknown
@@ -1731,13 +1747,13 @@ __metadata:
languageName: node
linkType: hard
"alova@npm:3.2.4":
version: 3.2.4
resolution: "alova@npm:3.2.4"
"alova@npm:3.2.5":
version: 3.2.5
resolution: "alova@npm:3.2.5"
dependencies:
"@alova/shared": "npm:1.1.0"
rate-limiter-flexible: "npm:^5.0.3"
checksum: 10c0/e2330c5f4a36bffe7270b3e274c36a3bdd7f7906bc71de9f93bce892222dc09ce602d83d9f92825820c42fd2f123be30c8343c0cc0619dce6374542d67bc05e0
checksum: 10c0/9c928fca4187fac4b0cabc148355c003c6d706c2fd8294e2877ee500bccfeff7ef0abb4e8b22245f482b7cb4050e2c4219d5ef7e1b3ef9bf2c06c054b820ad58
languageName: node
linkType: hard
@@ -2974,33 +2990,34 @@ __metadata:
languageName: node
linkType: hard
"esbuild@npm:^0.21.3":
version: 0.21.5
resolution: "esbuild@npm:0.21.5"
"esbuild@npm:^0.24.0":
version: 0.24.0
resolution: "esbuild@npm:0.24.0"
dependencies:
"@esbuild/aix-ppc64": "npm:0.21.5"
"@esbuild/android-arm": "npm:0.21.5"
"@esbuild/android-arm64": "npm:0.21.5"
"@esbuild/android-x64": "npm:0.21.5"
"@esbuild/darwin-arm64": "npm:0.21.5"
"@esbuild/darwin-x64": "npm:0.21.5"
"@esbuild/freebsd-arm64": "npm:0.21.5"
"@esbuild/freebsd-x64": "npm:0.21.5"
"@esbuild/linux-arm": "npm:0.21.5"
"@esbuild/linux-arm64": "npm:0.21.5"
"@esbuild/linux-ia32": "npm:0.21.5"
"@esbuild/linux-loong64": "npm:0.21.5"
"@esbuild/linux-mips64el": "npm:0.21.5"
"@esbuild/linux-ppc64": "npm:0.21.5"
"@esbuild/linux-riscv64": "npm:0.21.5"
"@esbuild/linux-s390x": "npm:0.21.5"
"@esbuild/linux-x64": "npm:0.21.5"
"@esbuild/netbsd-x64": "npm:0.21.5"
"@esbuild/openbsd-x64": "npm:0.21.5"
"@esbuild/sunos-x64": "npm:0.21.5"
"@esbuild/win32-arm64": "npm:0.21.5"
"@esbuild/win32-ia32": "npm:0.21.5"
"@esbuild/win32-x64": "npm:0.21.5"
"@esbuild/aix-ppc64": "npm:0.24.0"
"@esbuild/android-arm": "npm:0.24.0"
"@esbuild/android-arm64": "npm:0.24.0"
"@esbuild/android-x64": "npm:0.24.0"
"@esbuild/darwin-arm64": "npm:0.24.0"
"@esbuild/darwin-x64": "npm:0.24.0"
"@esbuild/freebsd-arm64": "npm:0.24.0"
"@esbuild/freebsd-x64": "npm:0.24.0"
"@esbuild/linux-arm": "npm:0.24.0"
"@esbuild/linux-arm64": "npm:0.24.0"
"@esbuild/linux-ia32": "npm:0.24.0"
"@esbuild/linux-loong64": "npm:0.24.0"
"@esbuild/linux-mips64el": "npm:0.24.0"
"@esbuild/linux-ppc64": "npm:0.24.0"
"@esbuild/linux-riscv64": "npm:0.24.0"
"@esbuild/linux-s390x": "npm:0.24.0"
"@esbuild/linux-x64": "npm:0.24.0"
"@esbuild/netbsd-x64": "npm:0.24.0"
"@esbuild/openbsd-arm64": "npm:0.24.0"
"@esbuild/openbsd-x64": "npm:0.24.0"
"@esbuild/sunos-x64": "npm:0.24.0"
"@esbuild/win32-arm64": "npm:0.24.0"
"@esbuild/win32-ia32": "npm:0.24.0"
"@esbuild/win32-x64": "npm:0.24.0"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
@@ -3038,6 +3055,8 @@ __metadata:
optional: true
"@esbuild/netbsd-x64":
optional: true
"@esbuild/openbsd-arm64":
optional: true
"@esbuild/openbsd-x64":
optional: true
"@esbuild/sunos-x64":
@@ -3050,7 +3069,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de
checksum: 10c0/9f1aadd8d64f3bff422ae78387e66e51a5e09de6935a6f987b6e4e189ed00fdc2d1bc03d2e33633b094008529c8b6e06c7ad1a9782fb09fec223bf95998c0683
languageName: node
linkType: hard
@@ -5529,7 +5548,7 @@ __metadata:
languageName: node
linkType: hard
"postcss@npm:^8.4.43":
"postcss@npm:^8.4.49":
version: 8.4.49
resolution: "postcss@npm:8.4.49"
dependencies:
@@ -5568,12 +5587,12 @@ __metadata:
languageName: node
linkType: hard
"prettier@npm:^3.3.3":
version: 3.3.3
resolution: "prettier@npm:3.3.3"
"prettier@npm:^3.4.1":
version: 3.4.1
resolution: "prettier@npm:3.4.1"
bin:
prettier: bin/prettier.cjs
checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26
checksum: 10c0/2d6cc3101ad9de72b49c59339480b0983e6ff6742143da0c43f476bf3b5ef88ede42ebd9956d7a0a8fa59f7a5990e8ef03c9ad4c37f7e4c9e5db43ee0853156c
languageName: node
linkType: hard
@@ -5942,7 +5961,7 @@ __metadata:
languageName: node
linkType: hard
"rollup@npm:^4.20.0":
"rollup@npm:^4.23.0":
version: 4.27.4
resolution: "rollup@npm:4.27.4"
dependencies:
@@ -6731,19 +6750,19 @@ __metadata:
languageName: node
linkType: hard
"typescript-eslint@npm:8.15.0":
version: 8.15.0
resolution: "typescript-eslint@npm:8.15.0"
"typescript-eslint@npm:8.16.0":
version: 8.16.0
resolution: "typescript-eslint@npm:8.16.0"
dependencies:
"@typescript-eslint/eslint-plugin": "npm:8.15.0"
"@typescript-eslint/parser": "npm:8.15.0"
"@typescript-eslint/utils": "npm:8.15.0"
"@typescript-eslint/eslint-plugin": "npm:8.16.0"
"@typescript-eslint/parser": "npm:8.16.0"
"@typescript-eslint/utils": "npm:8.16.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/589aebf0d0b9b79db1cd0b7c2ea08c6b5727c1db095d39077d070c332066c7d549a0eb2ef60b0d41619720c317c1955236c5c8ee6320bc7c6ae475add7223b55
checksum: 10c0/3da9401d6c2416b9d95c96a41a9423a5379d233a120cd3304e2c03f191d350ce91cf0c7e60017f7b10c93b4cc1190592702735735b771c1ce1bf68f71a9f1647
languageName: node
linkType: hard
@@ -6784,6 +6803,13 @@ __metadata:
languageName: node
linkType: hard
"undici-types@npm:~6.20.0":
version: 6.20.0
resolution: "undici-types@npm:6.20.0"
checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf
languageName: node
linkType: hard
"unique-filename@npm:^3.0.0":
version: 3.0.0
resolution: "unique-filename@npm:3.0.0"
@@ -6932,29 +6958,34 @@ __metadata:
languageName: node
linkType: hard
"vite@npm:^5.4.11":
version: 5.4.11
resolution: "vite@npm:5.4.11"
"vite@npm:^6.0.1":
version: 6.0.1
resolution: "vite@npm:6.0.1"
dependencies:
esbuild: "npm:^0.21.3"
esbuild: "npm:^0.24.0"
fsevents: "npm:~2.3.3"
postcss: "npm:^8.4.43"
rollup: "npm:^4.20.0"
postcss: "npm:^8.4.49"
rollup: "npm:^4.23.0"
peerDependencies:
"@types/node": ^18.0.0 || >=20.0.0
"@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0
jiti: ">=1.21.0"
less: "*"
lightningcss: ^1.21.0
sass: "*"
sass-embedded: "*"
stylus: "*"
sugarss: "*"
terser: ^5.4.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
dependenciesMeta:
fsevents:
optional: true
peerDependenciesMeta:
"@types/node":
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
@@ -6969,9 +7000,13 @@ __metadata:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
bin:
vite: bin/vite.js
checksum: 10c0/d536bb7af57dd0eca2a808f95f5ff1d7b7ffb8d86e17c6893087680a0448bd0d15e07475270c8a6de65cb5115592d037130a1dd979dc76bcef8c1dda202a1874
checksum: 10c0/e4d853eb9042ff29fa4d7cee1484738faaee4b1d9dcf786a94783bebb736b39af0afa7ac1a209000530638098d0a1b240b51f509d32addb028b222453f862916
languageName: node
linkType: hard

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 87 KiB

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.5.2.cjs
yarnPath: .yarn/releases/yarn-4.5.3.cjs

View File

@@ -13,7 +13,7 @@
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"formidable": "^3.5.2",
"itty-router": "^5.0.18",
"prettier": "^3.3.3"
"prettier": "^3.4.1"
},
"packageManager": "yarn@4.5.2"
"packageManager": "yarn@4.5.3"
}

View File

@@ -29,19 +29,45 @@ const headers = {
'Content-type': 'application/msgpack'
};
// Versions - all without the 'v'
let VERSION_IS_UPGRADEABLE;
// Versions
// default - on latest stable, no upgrades
let THIS_VERSION = '3.7.0';
let LATEST_STABLE_VERSION = '3.7.0';
let LATEST_DEV_VERSION = '3.7.1-dev.1';
let VERSION_IS_UPGRADEABLE = false;
// for testing - scenario 1
THIS_VERSION = '3.7.1-dev.1';
// scenarios for testing, overriding the default
const version_test = 0;
switch (version_test as number) {
case 0:
default:
// use default - on latest stable, no upgrades, but can switch
VERSION_IS_UPGRADEABLE = false;
break;
case 1:
// on latest dev, no update
THIS_VERSION = '3.7.1-dev.12';
LATEST_STABLE_VERSION = '3.7.0';
LATEST_DEV_VERSION = '3.7.1-dev.12';
VERSION_IS_UPGRADEABLE = false;
break;
case 2:
// upgrade stable to latest stable
THIS_VERSION = '3.6.5';
LATEST_STABLE_VERSION = '3.7.0';
LATEST_DEV_VERSION = '3.7.1-dev.12';
VERSION_IS_UPGRADEABLE = true;
// for testing - scenario 2
// THIS_VERSION = '3.6.5';
// VERSION_IS_UPGRADEABLE = true;
break;
case 3:
// upgrade dev to latest dev
THIS_VERSION = '3.7.0-dev-1';
LATEST_STABLE_VERSION = '3.7.0';
LATEST_DEV_VERSION = '3.7.1-dev.12';
VERSION_IS_UPGRADEABLE = true;
break;
}
// GLOBAL VARIABLES
let countWifiScanPoll = 0; // wifi network scan

View File

@@ -328,7 +328,7 @@ __metadata:
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
formidable: "npm:^3.5.2"
itty-router: "npm:^5.0.18"
prettier: "npm:^3.3.3"
prettier: "npm:^3.4.1"
languageName: unknown
linkType: soft
@@ -355,12 +355,12 @@ __metadata:
languageName: node
linkType: hard
"prettier@npm:^3.3.3":
version: 3.3.3
resolution: "prettier@npm:3.3.3"
"prettier@npm:^3.4.1":
version: 3.4.1
resolution: "prettier@npm:3.4.1"
bin:
prettier: bin/prettier.cjs
checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26
checksum: 10c0/2d6cc3101ad9de72b49c59339480b0983e6ff6742143da0c43f476bf3b5ef88ede42ebd9956d7a0a8fa59f7a5990e8ef03c9ad4c37f7e4c9e5db43ee0853156c
languageName: node
linkType: hard

View File

@@ -11,16 +11,17 @@
; -DEMSESP_DE_ONLY ; only DE translated entity names
; -DEMSESP_EN_ONLY ; only EN translated entity names
; -DEMSESP_PINGTEST ; send log message every 1/2 second
; my_build_flags = -DEMSESP_TEST
; my_build_flags = -DEMSESP_DEBUG -DEMSESP_TEST
; my_build_flags = -DEMSESP_TEST -DEMSESP_DEBUG
; my_build_flags = -DEMSESP_DEBUG
; my_build_flags = -DEMSESP_DEBUG -DEMSESP_TEST -DEMSESP_PINGTEST
[platformio]
; default_envs = s_16M_P ; BBQKees E32V2
default_envs = s3_16M_P ; BBQKees S3
default_envs = s_16M_P ; BBQKees E32V2
; default_envs = s3_16M_P ; BBQKees S3
; default_envs = s_4M ; BBQKees S32
; default_envs = native
; default_envs = debug
; default_envs = s2_4M
[env]
; set the username and password for the admin account (default both admin)
@@ -40,8 +41,12 @@ custom_password = admin
; upload_protocol = esptool
; upload_port = /dev/ttyUSB*
; upload_protocol = custom
; custom_emsesp_ip = 10.10.10.175
upload_protocol = custom
; custom_emsesp_ip = 10.10.10.175 ; S3
custom_emsesp_ip = 192.168.1.225 ; E32V2
; build_type = debug
; monitor_filters = esp32_exception_decoder
; ** modules **
; example below is using a locally built version of EMS-ESP-Modules. You can also test with:
@@ -52,13 +57,14 @@ custom_password = admin
[env:native]
extra_scripts =
; pre:scripts/refresh_module_library_native.py
post:scripts/run_native.py
; post:scripts/run_native.py
[env:s_16M_P]
extra_scripts =
pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
scripts/rename_fw.py
scripts/upload.py
; platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.10-rc2/platform-espressif32.zip
[env:s3_16M_P]
extra_scripts =
@@ -70,7 +76,7 @@ extra_scripts =
extra_scripts =
; pre:scripts/build_interface.py ; comment out if you don't want to re-build the WebUI each time
scripts/rename_fw.py
scripts/upload.py
; scripts/upload.py
; pio run -e debug
; or from Visual Studio Code do PIO -> Project Tasks -> debug -> General -> Upload and Monitor

View File

@@ -33,7 +33,7 @@ EOL
# build emsesp for standalone
make clean
make ARGS=-DEMSESP_STANDALONE
make -s ARGS=-DEMSESP_STANDALONE
# Generate Modbus entity parameters
# One to build the modbus_entity_parameters.hpp header file
@@ -43,7 +43,7 @@ echo "test entity_dump" | ./emsesp | python3 ./scripts/strip_csv.py | python3 ./
ls -al ./src/modbus_entity_parameters.hpp
# dump_entities.csv
make ARGS=-DEMSESP_STANDALONE
make -s ARGS=-DEMSESP_STANDALONE
rm -f ./docs/dump_entities.csv
echo "test entity_dump" | ./emsesp | python3 ./scripts/strip_csv.py >./docs/dump_entities.csv
ls -al ./docs/dump_entities.csv

23
scripts/update_all.sh Normal file
View File

@@ -0,0 +1,23 @@
#!/bin/sh
# run from root
# make sure ncu is installed globally (https://github.com/raineorshine/npm-check-updates)
# as well as GNUMake (make) and python3
cd interface
ncu -u
yarn set version stable
yarn
yarn format
yarn lint
cd ../mock-api
ncu -u
yarn set version stable
yarn
yarn format
cd ..
npx cspell "**"
sh ./scripts/generate_csv_and_headers.sh

View File

@@ -38,7 +38,7 @@ void Modbus::start(uint8_t systemServerId, uint16_t port, uint8_t max_clients, u
}
}
modbusServer_->start(port, max_clients, timeout);
LOG_INFO("Modbus server with ID %d started on port %d", systemServerId, port);
LOG_INFO("Starting Modbus service (ID %d, port %d)", systemServerId, port);
#else
if (!check_parameter_order()) {
LOG_ERROR("Unable to enable Modbus - the parameter list order is corrupt. This is a firmware bug.");

View File

@@ -1 +1 @@
#define EMSESP_APP_VERSION "3.7.1-dev.12"
#define EMSESP_APP_VERSION "3.7.1-dev.13"