diff --git a/.env.example b/.env.example index 1dac358..6e50e43 100644 --- a/.env.example +++ b/.env.example @@ -1,17 +1,25 @@ -# DB Type: sqlite, mysql, postgresql, cockroachdb +# DB Type: sqlite, mysql, postgres, cockroachdb # Default if not set: sqlite #SPOOLMAN_DB_TYPE=sqlite # DB Setup, if not using sqlite +# Database hostname #SPOOLMAN_DB_HOST= +# Database port #SPOOLMAN_DB_PORT= +# Database name #SPOOLMAN_DB_NAME= +# Database login username #SPOOLMAN_DB_USERNAME= +# Path of file which contains the database password. Can be used instead of SPOOLMAN_DB_PASSWORD if desired. #SPOOLMAN_DB_PASSWORD_FILE= +# Database login password #SPOOLMAN_DB_PASSWORD= +# Query parameters for the database connection, e.g. set to `unix_socket=/path/to/mysql.sock` to connect using a MySQL socket. #SPOOLMAN_DB_QUERY= # Logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL +# Logs will only be reported if the level is higher than the level set here # Default if not set: INFO #SPOOLMAN_LOGGING_LEVEL=INFO @@ -34,3 +42,33 @@ # Host and port to listen on SPOOLMAN_HOST=0.0.0.0 SPOOLMAN_PORT=7912 + +# Change base path +# Set this if you want to host Spoolman at a sub-path +# If you want the root to be e.g. myhost.com/spoolman +# Then set this to /spoolman +#SPOOLMAN_BASE_PATH= + +# Enable Collect Prometheus metrics at database +# Default: FALSE +#SPOOLMAN_METRICS_ENABLED=TRUE + +# Collect items (filaments, materials, etc.) from an external database +# Set this to a URL of an external database. Set to an empty string to disable +# Default: https://donkie.github.io/SpoolmanDB/ +#EXTERNAL_DB_URL=https://myhost.com/spoolmandb/ +# Sync interval in seconds, set to 0 to disable automatic sync. It will only sync on start-up then. +# Default: 3600 +#EXTERNAL_DB_SYNC_INTERVAL=3600 + +# Enable debug mode +# If enabled, the client will accept requests from any host +# This can be useful when developing, but is also a security risk +# Default: FALSE +#SPOOLMAN_DEBUG_MODE=TRUE + +# UID and GID of the user in the docker container +# These only make sense if you are running Spoolman in a docker container +# Default if not set: 1000 +#PUID=1000 +#PGID=1000 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 85f1302..0d04a35 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -23,16 +23,15 @@ A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] +**Spoolman Host (please complete the following information):** + - Installation type: [Docker or Standalone] + - Installed version: [e.g. 0.17.0, can be found at the bottom of your spoolman website if you don't know] + - OS and Distro: [e.g. Ubuntu, Raspbian] + - Database type: [SQLite, PostgreSQL, etc] -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] +**Desktop (please complete the following information):** + - OS: [e.g. Windows, Mac, iOS, Android, ...] + - Browser [e.g. Chrome, Firefox, Safari, ...] **Additional context** Add any other context about the problem here. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0ced84a..7b24c18 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: - name: Export requirements run: | pip install pdm - pdm export -o requirements.txt --without-hashes > requirements.txt + pdm export -o requirements.txt --without-hashes - name: Install client dependencies run: | @@ -219,7 +219,7 @@ jobs: docker load --input /tmp/spoolman-tester-image/spoolman-tester.tar - name: Perform integration tests - uses: isbang/compose-action@v1.4.1 + uses: hoverkraft-tech/compose-action@v2.0.1 with: compose-file: "./tests_integration/docker-compose-${{ matrix.dbtype }}.yml" up-flags: "--abort-on-container-exit" diff --git a/.gitignore b/.gitignore index 0208488..6c924ba 100644 --- a/.gitignore +++ b/.gitignore @@ -203,3 +203,4 @@ $RECYCLE.BIN/ data/ .pdm-python +.history \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 628d25f..232219e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,16 +9,16 @@ repos: - id: check-case-conflict - id: check-merge-conflict - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 24.4.2 hooks: - id: black args: ["--check"] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.0.286 + rev: v0.4.4 hooks: - id: ruff args: ["--target-version", "py39"] - repo: https://github.com/pdm-project/pdm - rev: 2.7.4 + rev: 2.17.3 hooks: - id: pdm-lock-check diff --git a/Dockerfile b/Dockerfile index 77fb47d..2ed19d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,17 @@ -FROM python:3.11-alpine as python-builder +FROM python:3.12-bookworm as python-builder -RUN apk add --no-cache g++ python3-dev libpq-dev libstdc++ shadow +# Install dependencies +RUN apt-get update && apt-get install -y \ + g++ \ + python3-dev \ + libpq-dev \ + libffi-dev \ + python3-pip \ + python3-setuptools \ + python3-wheel \ + python3-pdm \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* # Add local user so we don't run as root RUN groupmod -g 1000 users \ @@ -9,10 +20,6 @@ RUN groupmod -g 1000 users \ ENV PATH="/home/app/.local/bin:${PATH}" -# Install PDM -RUN pip install pip setuptools wheel\ - && pip install pdm - # Copy and install dependencies COPY --chown=app:app pyproject.toml /home/app/spoolman/ COPY --chown=app:app pdm.lock /home/app/spoolman/ @@ -25,13 +32,28 @@ COPY --chown=app:app spoolman /home/app/spoolman/spoolman COPY --chown=app:app alembic.ini /home/app/spoolman/ COPY --chown=app:app README.md /home/app/spoolman/ -FROM python:3.11-alpine as python-runner +FROM python:3.12-bookworm as python-runner LABEL org.opencontainers.image.source=https://github.com/Donkie/Spoolman LABEL org.opencontainers.image.description="Keep track of your inventory of 3D-printer filament spools." LABEL org.opencontainers.image.licenses=MIT -RUN apk add --no-cache libstdc++ su-exec shadow +# Install latest su-exec +RUN set -ex; \ + \ + curl -o /usr/local/bin/su-exec.c https://raw.githubusercontent.com/ncopa/su-exec/master/su-exec.c; \ + \ + fetch_deps='gcc libc-dev'; \ + apt-get update; \ + apt-get install -y --no-install-recommends $fetch_deps; \ + rm -rf /var/lib/apt/lists/*; \ + gcc -Wall \ + /usr/local/bin/su-exec.c -o/usr/local/bin/su-exec; \ + chown root:root /usr/local/bin/su-exec; \ + chmod 0755 /usr/local/bin/su-exec; \ + rm /usr/local/bin/su-exec.c; \ + \ + apt-get purge -y --auto-remove $fetch_deps # Add local user so we don't run as root RUN groupmod -g 1000 users \ diff --git a/README.md b/README.md index 22d9c52..ca71f6d 100644 --- a/README.md +++ b/README.md @@ -4,51 +4,82 @@ Icon of a filament spool -

+
_Keep track of your inventory of 3D-printer filament spools._ -Spoolman is a web service that helps you keep track of your filament spools and how they are being used. +Spoolman is a self-hosted web service designed to help you efficiently manage your 3D printer filament spools and monitor their usage. It acts as a centralized database that seamlessly integrates with popular 3D printing software like [OctoPrint](https://octoprint.org/) and [Klipper](https://www.klipper3d.org/)/[Moonraker](https://moonraker.readthedocs.io/en/latest/). When connected, it automatically updates spool weights as printing progresses, giving you real-time insights into filament usage. -It acts as a database, where other printer software such as Octoprint and Moonraker can interact with to have a centralized place for spool information. -For example, if used together with Moonraker, your spool weight will automatically be reduced as your print is progressing. +### Features +* **Filament Management**: Keep comprehensive records of filament types, manufacturers, and individual spools. +* **API Integration**: The [REST API](https://donkie.github.io/Spoolman/) allows easy integration with other software, facilitating automated workflows and data exchange. +* **Real-Time Updates**: Stay informed with live spool updates through Websockets, providing immediate feedback during printing operations. +* **Web-Based Client**: Spoolman includes a built-in web client that lets you manage data effortlessly: + * View, create, edit, and delete filament data. + * Add custom fields to tailor information to your specific needs. + * Print labels with QR codes for easy spool identification and tracking. + * Contribute to its translation into 18 languages via [Weblate](https://hosted.weblate.org/projects/spoolman/). +* **Database Support**: SQLite, PostgreSQL, MySQL, and CockroachDB. +* **Multi-Printer Management**: Handles spool updates from several printers simultaneously. +* **Advanced Monitoring**: Integrate with [Prometheus](https://prometheus.io/) for detailed historical analysis of filament usage, helping you track and optimize your printing processes. -It exposes a HTTP API which services can interact with. See the [OpenAPI description](https://donkie.github.io/Spoolman/) for more information. - -## Client -Spoolman includes a web-client that lets you directly manipulate all the data. It also has a few additional nice features such as label printing. +**Integrations:** + * [Moonraker](https://moonraker.readthedocs.io/en/latest/configuration/#spoolman) and most front-ends (Fluidd, KlipperScreen, Mainsail, ...) + * [OctoPrint](https://github.com/mdziekon/octoprint-spoolman) + * [OctoEverywhere](https://octoeverywhere.com/spoolman?source=github_spoolman) + * [Homeassistant](https://github.com/Disane87/spoolman-homeassistant) +**Web client preview:** ![image](https://github.com/Donkie/Spoolman/assets/2332094/33928d5e-440f-4445-aca9-456c4370ad0d) - - - - Icon of a filament spool - - -_The web client is translated by the community using [Weblate](https://hosted.weblate.org/projects/spoolman/)._ - -## Integration status -Spoolman doesn't depend on any specific printer software, but to make the most out of it, you should use it together with a frontend that supports it. -It is currently only supported in the Klipper ecosystem, with official support for the major frontends. Support for other ecosystems like Octoprint is ongoing. - -* ✔️ Moonraker - See the [Moonraker Documentation](https://moonraker.readthedocs.io/en/latest/configuration/#spoolman) - * ✔️ Fluidd - * ✔️ KlipperScreen - * ✔️ Mainsail -* ✖️ Octoprint - A plugin is in progress: [OctoPrint-Spoolman](https://github.com/mkevenaar/OctoPrint-Spoolman) -* ✔️ Home Assistant integration (https://github.com/Disane87/spoolman-homeassistant) - ## Installation -Spoolman can interact with any of the following databases: SQLite, PostgreSQL, MySQL, MariaDB, CockroachDB. -By default, SQLite is used which is a simple no-install database solution that saves to a single .db file located in the server's user directory. +Spoolman can be installed in two ways, either using **Docker** or **standalone** on your machine. +* The Docker method can be used on any OS which supports Docker. +* The standalone method requires a Debian (e.g. Ubuntu, Raspberry Pi OS) or Arch-based Linux distribution. + * If you know what you're doing you can also install it standalone for any OS such as Windows, but there are no provided scripts for automated installation, follow the "Install from Source" instructions below. -Spoolman can be installed in two ways, either standalone on your machine or using Docker. If you already have Docker installed, it's recommended to use that. +Docker is the recommended installation method since it is more reliable and portable. -### Standalone -This installation guide assumes you are using a Debian-based Linux distribution such as Ubuntu or Raspberry Pi OS. If you are using another distribution, please look inside the bash scripts to see what commands are being run and adapt them to your distribution. +Spoolman comes with a built-in SQLite database that is used by default and will suit most users needs. The data is stored in a single .db file in the server's user directory. You can optionally instead use a PostgreSQL, MySQL or CockroachDB database. -Copy-paste the entire below command and run it on your machine to install Spoolman. +### Docker Install +#### First install +Docker is a platform for developing, shipping, and running applications in "containers". Containers are lightweight, portable, and self-contained environments that can run on any machine with Docker installed. The Spoolman docker image contains everything it needs to run, so you don't need to worry about for example what Python version you have installed on your local machine. + +To install Docker on your machine, follow the instructions for your operating system on the [Docker website](https://docs.docker.com/engine/install/). Docker also includes the docker-compose tool which lets you configure the container deployment in a simple yaml file, without having to remember all the command line options. Note: older versions of docker-compose require you to have a dash (`-`) in the following commands, like `docker-compose` instead of `docker compose`. + +Here is a sample docker-compose config to get you started. Create a folder called `spoolman` in your home directory, CD in to it, copy-paste the below sample into a file called `docker-compose.yml` in the new directory and run `docker compose up -d` to start it. If you want to use the SQLite database as in this sample, you must first create a folder called `data` in the same directory as the `docker-compose.yml`, then you should run `chown 1000:1000 data` on it in order to give it the correct permissions for the user inside the docker container. +```yaml +version: '3.8' +services: + spoolman: + image: ghcr.io/donkie/spoolman:latest + restart: unless-stopped + volumes: + # Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory + - type: bind + source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`. + target: /home/app/.local/share/spoolman # Do NOT modify this line + ports: + # Map the host machine's port 7912 to the container's port 8000 + - "7912:8000" + environment: + - TZ=Europe/Stockholm # Optional, defaults to UTC +``` +Once you have it up and running, you can access the web UI by browsing to `http://server.ip:7912`. *Make sure that the data folder you created now contains a `spoolman.db` file*. If you cannot find this file in your machine, then **your data will be lost** every time you update Spoolman. + +Type `docker compose logs` in the terminal to see the server logs. + +If you want to modify things like database connection, add environment variables to the `environment:` section of the `docker-compose.yml` like shown in the sample above and then restart the service: `docker compose restart`. See the `.env.example` file for a list of all environment variables you can use. + +#### Updating +If a new version of Spoolman has been released, you can update to it by first browsing to the directory where you have the `docker-compose.yml` file and then running `docker compose pull && docker compose up -d`. + +### Standalone Install +#### First install +This installation method assumes you are using a Debian-based Linux distribution such as Ubuntu or Raspberry Pi OS. If you are using Arch, or any other distribution, please modify as appropriate. + +Make sure your current directory is in your logged in user's home directory. Copy-paste the entire below command and run it on your machine to install the latest release of Spoolman. ```bash sudo apt-get update && \ sudo apt-get install -y curl jq && \ @@ -56,9 +87,11 @@ mkdir -p ./Spoolman && \ source_url=$(curl -s https://api.github.com/repos/Donkie/Spoolman/releases/latest | jq -r '.assets[] | select(.name == "spoolman.zip").browser_download_url') && \ curl -sSL $source_url -o temp.zip && unzip temp.zip -d ./Spoolman && rm temp.zip && \ cd ./Spoolman && \ -bash ./scripts/install_debian.sh +bash ./scripts/install.sh ``` +If you want to modify things like database connection, edit the `.env` file in the `Spoolman` folder and restart the service. + #### Updating Updating Spoolman is quite simple. If you use the default database type, SQLite, it is stored outside of the installation folder (in `~/.local/share/spoolman`), so you will not lose any data by moving to a new installation folder. @@ -77,72 +110,41 @@ source_url=$(curl -s https://api.github.com/repos/Donkie/Spoolman/releases/lates curl -sSL $source_url -o temp.zip && unzip temp.zip -d ./Spoolman && rm temp.zip && \ cp Spoolman_old/.env Spoolman/.env && \ cd ./Spoolman && \ -bash ./scripts/install_debian.sh && \ +bash ./scripts/install.sh && \ rm -rf ../Spoolman_old ``` -### Using Docker -You can also run Spoolman using Docker. Docker is a platform for developing, shipping, and running applications in containers. Containers are lightweight, portable, and self-contained environments that can run on any machine with Docker installed. - -To install Docker on your machine, follow the instructions for your operating system on the [Docker website](https://docs.docker.com/engine/install/). Docker also includes the docker-compose tool which lets you configure the container deployment in a simple yaml file, without having to remember all the command line options. Note: older versions of docker-compose require you to have a dash (`-`) in the following commands, like `docker-compose` instead of `docker compose`. - -Here is a sample docker-compose config to get you started. Copy-paste it into a file called `docker-compose.yml` and run `docker compose up -d` to start it. If you want to use the SQLite database as in this sample, you must first create a folder called `data` in the same directory as the `docker-compose.yml`, then you should run `chown 1000:1000 data` on it in order to give it the correct permissions for the user inside the docker container. -```yaml -version: '3.8' -services: - spoolman: - image: ghcr.io/donkie/spoolman:latest - restart: unless-stopped - volumes: - # Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory - - type: bind - source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`. - target: /home/app/.local/share/spoolman # Do NOT change this line - ports: - # Map the host machine's port 7912 to the container's port 8000 - - "7912:8000" - environment: - - TZ=Europe/Stockholm # Optional, defaults to UTC -``` -Once you have it up and running, you can access the web UI by browsing to `http://your.ip:7912`. Make sure that the data folder you created now contains a `spoolman.db` file. If you cannot find this file in your machine, then **your data will be lost** every time you update Spoolman. - -#### Updating -If a new version of Spoolman has been released, you can update to it by first browsing to the directory where you have the `docker-compose.yml` file and then running `docker compose pull && docker compose up -d`. - -### Environment variables -These are either set in the .env file if you use the standalone installation, or in the docker-compose.yml if you use Docker. - -If you want to connect with an external database instead, specify the `SPOOLMAN_DB_*` environment variables from the table below. - -| Variable | Description | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| SPOOLMAN_DB_TYPE | Type of database, any of: `postgres`, `mysql`, `sqlite`, `cockroachdb` | -| SPOOLMAN_DB_HOST | Database hostname | -| SPOOLMAN_DB_PORT | Database port | -| SPOOLMAN_DB_NAME | Database name | -| SPOOLMAN_DB_USERNAME | Database username | -| SPOOLMAN_DB_PASSWORD_FILE | Path of file which contains the database password. Can be used instead of SPOOLMAN_DB_PASSWORD if desired. | -| SPOOLMAN_DB_PASSWORD | Database password | -| SPOOLMAN_DB_QUERY | Query parameters for the database connection, e.g. set to `unix_socket=/path/to/mysql.sock` to connect using a MySQL socket. | -| SPOOLMAN_LOGGING_LEVEL | Logging level, any of: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, `DEBUG`, defaults to `INFO`. | -| SPOOLMAN_AUTOMATIC_BACKUP | Automatic nightly DB backups for SQLite databases. Enabled by default, set to `FALSE` to disable. | -| PUID | (*docker only*) Set the UID of the user in the docker container. Default is 1000. | -| PGID | (*docker only*) Set the GID of the user in the docker container. Default is 1000. | -| SPOOLMAN_PORT | The port Spoolman should run on (default: 8000) | -| SPOOLMAN_HOST | The hostname/ip Spoolman should bind to (default: 0.0.0.0) | - ## Frequently Asked Questions (FAQs) ### QR Code Does not work on HTTP / The page is not served over HTTPS This is a limitation of the browsers. Browsers require a secure connection to the server to enable HTTPS. This is not a limitation of Spoolman. For more information read this [blog](https://blog.mozilla.org/webrtc/camera-microphone-require-https-in-firefox-68/) from Mozilla. -You can put Spoolman behind a reverse proxy like Caddy or Nginx to enable HTTPS. See for example [this guide](https://caddyserver.com/docs/quick-starts/reverse-proxy) for Caddy. +[OctoEverywhere.com](https://octoeverywhere.com/spoolman?source=github_spoolman_qr) is An easy way to get secure HTTPS access to Spoolman. Remote access with OctoEverywhere is always secure and easier than setting up a reverse proxy + SSL self-signed certificate. + +Another option is to put Spoolman behind a reverse proxy like Caddy or Nginx to enable HTTPS. See for example [this guide](https://caddyserver.com/docs/quick-starts/reverse-proxy) for Caddy. ### Can Spoolman be translated into my language? -Yes, head over to [Weblate](https://hosted.weblate.org/projects/spoolman/) to start the Translation +Yes, head over to [Weblate](https://hosted.weblate.org/projects/spoolman/) to start the translation! + +## Install from source +**Advanced users only.** + +If you want to run the absolute latest version of Spoolman, you can either use the `edge` tagged Docker image, or follow +these steps to install from source. Keep in mind that this is straight from the master branch which may contain unfinished and untested features. You may also not be able to go back to a previous version since the database schema may change. + +1. Make sure you have at least NodeJS 20 or higher installed, and Python 3.9 or higher installed. +1. Clone this repo or download the zip source. +2. Inside the `client/` folder: + 1. Create a .env file with `VITE_APIURL=/api/v1` in it + 2. Run `npm ci` + 3. Run `npm run build` +4. Install PDM using `pip install --user pdm` +5. Build the requirements.txt file: `pdm export -o requirements.txt --without-hashes > requirements.txt` +3. Give scripts permissions: `chmod +x ./scripts/*.sh` +6. Run the installer script like the normal install: `./scripts/install.sh` ## Development ### Server/Backend (Python) -The Python backend runs on Python 3.9. It's built on FastAPI for the REST API, and SQLAlchemy to handle the databases. +The Python backend is built using Python 3.9 standards. It's built on FastAPI for the REST API, and SQLAlchemy to handle the databases. To setup yourself for Python development, do the following: 1. Clone this repo @@ -162,7 +164,7 @@ pre-commit install ``` #### Integration Testing -The entire REST API is integration tested using an isolated docker container, with all 4 database types that we support (Postgres, MySQL, SQLite and CockroachDB). These integration tests live in `tests_integration/`. They are designed to "use" the REST API in the same way that a client would, and ensures that everything remains consistent between updates. The databases are created as part of the integration testing, so no external database is needed to run them. +The entire backend is integration tested using an isolated docker container, with all 4 database types that we support (Postgres, MySQL, SQLite and CockroachDB). These integration tests live in `tests_integration/`. They are designed to "use" the REST API in the same way that a client would, and ensures that everything remains consistent between updates. The databases are created as part of the integration testing, so no external database is needed to run them. If you have docker installed, you can run the integration tests using `pdm run itest` for all databases, or e.g. `pdm run itest postgres` for a single database. diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs index 595490e..73d4b08 100644 --- a/client/.eslintrc.cjs +++ b/client/.eslintrc.cjs @@ -2,11 +2,7 @@ module.exports = { env: { browser: true, es2020: true }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:react-hooks/recommended", - ], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended"], parser: "@typescript-eslint/parser", parserOptions: { ecmaVersion: "latest", sourceType: "module" }, plugins: ["react-refresh"], diff --git a/client/icons/spool.svg b/client/icons/spool.svg index 6d53b3b..6cd32ef 100644 --- a/client/icons/spool.svg +++ b/client/icons/spool.svg @@ -1,93 +1 @@ - - Created with Fabric.js 5.3.0 +Created with Fabric.js 5.3.0 \ No newline at end of file diff --git a/client/icons/spoolman.svg b/client/icons/spoolman.svg index 56c2755..1b87d8a 100644 --- a/client/icons/spoolman.svg +++ b/client/icons/spoolman.svg @@ -1,89 +1 @@ - - Created with Fabric.js 5.3.0 +Created with Fabric.js 5.3.0 \ No newline at end of file diff --git a/client/icons/spoolman_monochrome.svg b/client/icons/spoolman_monochrome.svg index a480ab2..6478063 100644 --- a/client/icons/spoolman_monochrome.svg +++ b/client/icons/spoolman_monochrome.svg @@ -1,61 +1 @@ - - Created with Fabric.js 5.3.0 +Created with Fabric.js 5.3.0 \ No newline at end of file diff --git a/client/index.html b/client/index.html index 14fb6df..54cf622 100644 --- a/client/index.html +++ b/client/index.html @@ -2,12 +2,12 @@ - + Spoolman diff --git a/client/package-lock.json b/client/package-lock.json index b078be7..6812774 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,51 +1,56 @@ { "name": "spoolman-ui", - "version": "0.16.1", + "version": "0.19.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "spoolman-ui", - "version": "0.16.1", + "version": "0.19.3", "dependencies": { - "@ant-design/icons": "^5.2.6", - "@loadable/component": "^5.16.2", - "@refinedev/antd": "^5.37.0", - "@refinedev/core": "^4.46.0", - "@refinedev/kbar": "^1.3.4", - "@refinedev/react-router-v6": "^4.5.4", - "@refinedev/simple-rest": "^5.0.0", + "@ant-design/icons": "^5.4.0", + "@loadable/component": "^5.16.4", + "@refinedev/antd": "^5.42.0", + "@refinedev/core": "^4.53.0", + "@refinedev/kbar": "^1.3.12", + "@refinedev/react-router-v6": "^4.5.11", + "@refinedev/simple-rest": "^5.0.8", "@tanstack/react-query": "^4.36.1", "@tanstack/react-query-devtools": "^4.36.1", - "@types/loadable__component": "^5.13.8", - "@yudiel/react-qr-scanner": "^1.2.4", - "antd": "^5.12.2", - "axios": "^1.6.2", - "flag-icons": "^7.1.0", - "i18next": "^23.7.11", - "i18next-browser-languagedetector": "^7.2.0", - "i18next-xhr-backend": "^3.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-i18next": "^13.5.0", - "react-router-dom": "^6.21.0", - "react-to-print": "^2.14.15", + "@types/loadable__component": "^5.13.9", + "@types/lodash": "^4.17.7", + "@types/uuid": "^10.0.0", + "@yudiel/react-qr-scanner": "^1.2.10", + "antd": "^5.20.0", + "axios": "^1.7.3", + "flag-icons": "^7.2.3", + "html-to-image": "^1.11.11", + "i18next": "^23.12.2", + "i18next-browser-languagedetector": "^8.0.0", + "i18next-http-backend": "^2.5.2", + "lodash": "^4.17.21", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-i18next": "^15.0.0", + "react-router-dom": "^6.26.0", + "react-to-print": "^2.15.1", + "uuid": "^10.0.0", "vite-plugin-svgr": "^4.2.0" }, "devDependencies": { - "@refinedev/cli": "^2.16.20", - "@types/node": "^20.10.4", - "@types/react": "^18.2.45", - "@types/react-dom": "^18.2.18", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "@vitejs/plugin-react": "^4.2.1", - "eslint": "^8.56.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.5", - "typescript": "^5.3.3", - "vite": "^5.0.12", - "vite-plugin-mkcert": "^1.17.1" + "@refinedev/cli": "^2.16.36", + "@types/node": "^20.14.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.8.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.9", + "typescript": "^5.5.4", + "vite": "^5.3.5", + "vite-plugin-mkcert": "^1.17.5" }, "engines": { "node": "20.x" @@ -73,23 +78,23 @@ } }, "node_modules/@ant-design/colors": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz", - "integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.1.0.tgz", + "integrity": "sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==", "dependencies": { - "@ctrl/tinycolor": "^3.4.0" + "@ctrl/tinycolor": "^3.6.1" } }, "node_modules/@ant-design/cssinjs": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.18.1.tgz", - "integrity": "sha512-1JURAPrsjK1GwpqByTq3bJ7nF7lbMKDZpehqeR2n8/IR5O58/W1U4VcOeaw5ZyTHri3tEMcom7dyP2tvxpW54g==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.21.0.tgz", + "integrity": "sha512-gIilraPl+9EoKdYxnupxjHB/Q6IHNRjEXszKbDxZdsgv4sAZ9pjkCq8yanDWNvyfjp4leir2OVAJm0vxwKK8YA==", "dependencies": { "@babel/runtime": "^7.11.1", "@emotion/hash": "^0.8.0", "@emotion/unitless": "^0.7.5", "classnames": "^2.3.1", - "csstype": "3.1.2", + "csstype": "^3.1.3", "rc-util": "^5.35.0", "stylis": "^4.0.13" }, @@ -98,14 +103,39 @@ "react-dom": ">=16.0.0" } }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-1.0.3.tgz", + "integrity": "sha512-BrztZZKuoYcJK8uEH40ylBemf/Mu/QPiDos56g2bv6eUoniQkgQHOCOvA3+pncoFO1TaS8xcUCIqGzDA0I+ZVQ==", + "dependencies": { + "@ant-design/cssinjs": "^1.21.0", + "@babel/runtime": "^7.23.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-2.0.5.tgz", + "integrity": "sha512-kzUEdptM2vbHFn+fGkgKgbfsko5TR9GlGvAj+Xa7pKSXipbsvbqPtxcUGv7vdoPHFCr6JUBZa8Rfs+QJtFZEAw==", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, "node_modules/@ant-design/icons": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz", - "integrity": "sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.4.0.tgz", + "integrity": "sha512-QZbWC5xQYexCI5q4/fehSEkchJr5UGtvAJweT743qKUQQGs9IH2DehNLP49DJ3Ii9m9CijD2HN6fNy3WKhIFdA==", "dependencies": { "@ant-design/colors": "^7.0.0", - "@ant-design/icons-svg": "^4.3.0", - "@babel/runtime": "^7.11.2", + "@ant-design/icons-svg": "^4.4.0", + "@babel/runtime": "^7.24.8", "classnames": "^2.2.6", "rc-util": "^5.31.1" }, @@ -118,9 +148,9 @@ } }, "node_modules/@ant-design/icons-svg": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", - "integrity": "sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==" + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" }, "node_modules/@ant-design/pro-layout": { "version": "7.17.12", @@ -187,9 +217,9 @@ } }, "node_modules/@ant-design/react-slick": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz", - "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.1.2.tgz", + "integrity": "sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==", "dependencies": { "@babel/runtime": "^7.10.4", "classnames": "^2.2.5", @@ -202,104 +232,40 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", - "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.6", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -323,13 +289,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -337,24 +303,24 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -372,19 +338,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", - "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -403,70 +367,40 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -476,35 +410,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -514,84 +448,75 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -662,9 +587,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -672,65 +600,13 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", - "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", + "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -740,12 +616,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -779,12 +655,28 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -794,13 +686,13 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", - "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", + "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-flow": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -810,14 +702,63 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -827,12 +768,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", - "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -842,12 +783,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", - "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -857,15 +798,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -875,14 +817,14 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", - "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", + "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-flow-strip-types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -892,16 +834,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -911,15 +853,15 @@ } }, "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", + "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", - "pirates": "^4.0.5", + "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "engines": { @@ -930,9 +872,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -941,31 +883,28 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -974,12 +913,12 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1014,10 +953,26 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", - "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -1031,9 +986,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", - "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -1047,9 +1002,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", - "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -1063,9 +1018,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", - "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -1079,9 +1034,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", - "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -1095,9 +1050,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", - "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -1111,9 +1066,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", - "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -1127,9 +1082,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", - "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -1143,9 +1098,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", - "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -1159,9 +1114,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", - "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -1175,9 +1130,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", - "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -1191,9 +1146,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", - "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -1207,9 +1162,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", - "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -1223,9 +1178,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", - "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -1239,9 +1194,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", - "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -1255,9 +1210,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", - "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -1271,9 +1226,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", - "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -1287,9 +1242,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", - "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -1303,9 +1258,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", - "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -1319,9 +1274,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", - "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -1335,9 +1290,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", - "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -1351,9 +1306,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", - "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -1382,24 +1337,38 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1407,7 +1376,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1430,15 +1399,12 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1451,55 +1417,21 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", + "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@fireworks-js/react": { - "version": "2.10.7", - "resolved": "https://registry.npmjs.org/@fireworks-js/react/-/react-2.10.7.tgz", - "integrity": "sha512-hxfEB0vRUX7nNznhc5SEw0W8jamgF32oUiMvd5c8dOAFZgkidF8qylRw/V1Xp6In1QsjUQXnv/gvOKCe2o8JOg==", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, - "dependencies": { - "fireworks-js": "2.10.7" - }, - "peerDependencies": { - "@types/react": ">=16.8.0", - "react": ">=16.8.0" - } - }, - "node_modules/@headlessui/react": { - "version": "1.7.17", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.17.tgz", - "integrity": "sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==", - "dev": true, - "dependencies": { - "client-only": "^0.0.1" - }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16 || ^17 || ^18", - "react-dom": "^16 || ^17 || ^18" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1515,20 +1447,27 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1543,9 +1482,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -1556,20 +1495,20 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@loadable/component": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.2.tgz", - "integrity": "sha512-WCtVYg7rWuxZLakHBiArMGkMIxu2O0JvXfNZOaB6pAx5pDyozvnxt5nrhg9DBZ9tEnQXaidnJCelauAWq/H61w==", + "version": "5.16.4", + "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.4.tgz", + "integrity": "sha512-fJWxx9b5WHX90QKmizo9B+es2so8DnBthI1mbflwCoOyvzEwxiZ/SVDCTtXEnHG72/kGBdzr297SSIekYtzSOQ==", "dependencies": { - "@babel/runtime": "^7.7.7", + "@babel/runtime": "^7.12.18", "hoist-non-react-statics": "^3.3.1", "react-is": "^16.12.0" }, @@ -1774,25 +1713,6 @@ "@octokit/openapi-types": "^19.1.0" } }, - "node_modules/@ory/client": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@ory/client/-/client-1.4.6.tgz", - "integrity": "sha512-HI9q5ayz6W4UmAXUu4jBDA7IQVUQm06KuVMFeowAISFmOArXBM+AyUYqqZmRrPuY7V2HG8xwiUVgaj3TU6iK+Q==", - "dev": true, - "dependencies": { - "axios": "^0.27.2" - } - }, - "node_modules/@ory/client/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", @@ -1874,15 +1794,26 @@ } } }, - "node_modules/@rc-component/color-picker": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.4.1.tgz", - "integrity": "sha512-vh5EWqnsayZa/JwUznqDaPJz39jznx/YDbyBuVJntv735tKXKwEUZZb2jYEldOg+NKWZwtALjGMrNeGBmqFoEw==", + "node_modules/@rc-component/async-validator": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", + "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==", "dependencies": { - "@babel/runtime": "^7.10.1", - "@ctrl/tinycolor": "^3.6.0", + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-2.0.0.tgz", + "integrity": "sha512-52z3XqUwUr0+Br3B8RjN2GfuR1Pk3MZPAVd34WptWFEOyTz7OQmmn8nqgXUBOYwZem8jXp6G3iv+6Dm1+1epJA==", + "dependencies": { + "@ant-design/fast-color": "^2.0.1", + "@babel/runtime": "^7.23.6", "classnames": "^2.2.6", - "rc-util": "^5.30.0" + "rc-util": "^5.38.1" }, "peerDependencies": { "react": ">=16.9.0", @@ -1947,14 +1878,31 @@ "react-dom": ">=16.9.0" } }, + "node_modules/@rc-component/qrcode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.0.0.tgz", + "integrity": "sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/@rc-component/tour": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.11.1.tgz", - "integrity": "sha512-c9Lw3/oVinj5D64Rsp8aDLOXcgdViE+hq7bj0Qoo8fTuQEh9sSpUw5OZcum943JkjeIE4hLcc5FD4a5ANtMJ4w==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.0.tgz", + "integrity": "sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g==", "dependencies": { "@babel/runtime": "^7.18.0", "@rc-component/portal": "^1.0.0-9", - "@rc-component/trigger": "^1.3.6", + "@rc-component/trigger": "^2.0.0", "classnames": "^2.3.2", "rc-util": "^5.24.4" }, @@ -1967,9 +1915,9 @@ } }, "node_modules/@rc-component/trigger": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-1.18.2.tgz", - "integrity": "sha512-jRLYgFgjLEPq3MvS87fIhcfuywFSRDaDrYw1FLku7Cm4esszvzTbA0JBsyacAyLrK9rF3TiHFcvoEDMzoD3CTA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.0.tgz", + "integrity": "sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA==", "dependencies": { "@babel/runtime": "^7.23.2", "@rc-component/portal": "^1.1.0", @@ -1992,26 +1940,26 @@ "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" }, "node_modules/@refinedev/antd": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/@refinedev/antd/-/antd-5.37.0.tgz", - "integrity": "sha512-rlKjZMHnOy7w6WUxbmAen6uvxnwR5wZSvQBCdce/oN5g2xVToICH71pggKj7akdcPMal3Ktjdr+6N996WRHNhw==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/@refinedev/antd/-/antd-5.42.0.tgz", + "integrity": "sha512-aKHg5V4widJgW740+4MHp+ngOHfB7KHooAkzOcNN6ngB87qH1Nk2LjyGd5Iza+ooGIKEDlD1rijWFGO/s+Xz2A==", "dependencies": { "@ant-design/icons": "5.0.1", "@ant-design/pro-layout": "7.17.12", - "@refinedev/ui-types": "^1.22.0", + "@refinedev/ui-types": "^1.22.9", "@tanstack/react-query": "^4.10.1", - "antd": "^5.0.5", + "antd": "^5.17.0", "dayjs": "^1.10.7", "react-markdown": "^6.0.1", "remark-gfm": "^1.0.0", "sunflower-antd": "1.0.0-beta.3", - "tslib": "^2.3.1" + "tslib": "^2.6.2" }, "peerDependencies": { - "@refinedev/core": "^4.40.0", + "@refinedev/core": "^4.46.1", "@types/react": "^17.0.0 || ^18.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0", - "antd": "^5.0.5", + "antd": "^5.17.0", "dayjs": "^1.10.7", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" @@ -2037,12 +1985,12 @@ } }, "node_modules/@refinedev/cli": { - "version": "2.16.20", - "resolved": "https://registry.npmjs.org/@refinedev/cli/-/cli-2.16.20.tgz", - "integrity": "sha512-WNT1dpP6O3EhTdXGgbMLmi6N3Ybd5EIi9aZGL2Nw4JPjcQvOIdOsBVRV06UpGPBpwNpBSOcmjCczPK3JKTr7bQ==", + "version": "2.16.36", + "resolved": "https://registry.npmjs.org/@refinedev/cli/-/cli-2.16.36.tgz", + "integrity": "sha512-iky2zLHnXYErN4DbFe5QwyuGla1Dt1jxi/FZg0bAipMOw1WVixUIVl/KphpgbayLRTVQERE1Jz6xmCEvARzRkQ==", "dev": true, "dependencies": { - "@refinedev/devtools-server": "1.1.22", + "@refinedev/devtools-server": "1.1.34", "boxen": "^5.1.2", "cardinal": "^2.1.1", "center-align": "1.0.1", @@ -2050,6 +1998,7 @@ "cli-table3": "^0.6.3", "commander": "9.4.1", "conf": "^10.2.0", + "decamelize": "^5.0.0", "dedent": "^0.7.0", "dotenv": "^16.0.3", "envinfo": "^7.8.1", @@ -2060,10 +2009,9 @@ "globby": "^11.1.0", "gray-matter": "^4.0.3", "handlebars": "^4.7.7", - "http-proxy-middleware": "^2.0.6", "inquirer": "^8.2.5", "inquirer-autocomplete-prompt": "^2.0.0", - "jscodeshift": "0.13.1", + "jscodeshift": "0.15.2", "marked": "^4.3.0", "marked-terminal": "^6.0.0", "node-emoji": "^2.1.3", @@ -2071,31 +2019,63 @@ "node-fetch": "^2.6.7", "ora": "^5.4.1", "pluralize": "^8.0.0", - "preferred-pm": "^3.0.3", + "preferred-pm": "^3.1.3", "prettier": "^2.7.1", - "semver": "7.3.8", + "semver": "7.5.2", "semver-diff": "^3.1.1", "temp": "^0.9.4", - "tslib": "^2.3.1" + "tslib": "^2.6.2" }, "bin": { - "refine": "dist/cli.js" + "refine": "dist/cli.cjs" } }, - "node_modules/@refinedev/core": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/@refinedev/core/-/core-4.46.0.tgz", - "integrity": "sha512-hLzhdsyI4sCxuCVdRAMAsj1N0tmyyDchsVu36bMPnU83ZnUsk8fNsb1LDXOIxFl6zr88LWzS3vTYpfIC4PprOQ==", + "node_modules/@refinedev/cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "@refinedev/devtools-internal": "1.1.4", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@refinedev/cli/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@refinedev/cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@refinedev/core": { + "version": "4.53.0", + "resolved": "https://registry.npmjs.org/@refinedev/core/-/core-4.53.0.tgz", + "integrity": "sha512-Q6qtXWIxNmDCtmbBmyKGEI5S4srR7zlCsR0grYikwnjzUOa/1u9d7kJdmxqCuukmKkDeYkOmVEsanMoGVNPoZA==", + "dependencies": { + "@refinedev/devtools-internal": "1.1.13", "@tanstack/react-query": "^4.10.1", - "export-to-csv-fix-source-map": "^0.2.1", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "papaparse": "^5.3.0", "pluralize": "^8.0.0", "qs": "^6.10.1", - "tslib": "^2.3.1", + "tslib": "^2.6.2", "warn-once": "^0.1.0" }, "peerDependencies": { @@ -2107,11 +2087,11 @@ } }, "node_modules/@refinedev/devtools-internal": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@refinedev/devtools-internal/-/devtools-internal-1.1.4.tgz", - "integrity": "sha512-AuXlKRdDZ8POC1B2DMa3AzSICN3LmKebmsMUry3+T9xc7TkL2lGy3anqJnBOQw8asWd5fr+vz1UYjdVcvqUqJA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@refinedev/devtools-internal/-/devtools-internal-1.1.13.tgz", + "integrity": "sha512-abTS5Qfndvy57DGmf25Igog1yeLhkNlQiDTRiMw70H2iMZaZqTk+x7BaBNO1659Q+cpHrKRbsjRP/yc9mSA6RQ==", "dependencies": { - "@refinedev/devtools-shared": "1.1.2", + "@refinedev/devtools-shared": "1.1.11", "@tanstack/react-query": "^4.10.1", "error-stack-parser": "^2.1.4" }, @@ -2126,14 +2106,12 @@ } }, "node_modules/@refinedev/devtools-server": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/@refinedev/devtools-server/-/devtools-server-1.1.22.tgz", - "integrity": "sha512-iLh+tsqBGN2ypfU+d0MMicYrNzZdTlb2ufgo06lBMzeeGwx9vbQqJ7eX32Mh2T4jrL1yc/XAcUxuIdTLpwor5w==", + "version": "1.1.34", + "resolved": "https://registry.npmjs.org/@refinedev/devtools-server/-/devtools-server-1.1.34.tgz", + "integrity": "sha512-2T0gU1JEGqNmg1S2l5UgSLT316iMGUl7LFj9nJmgHHd20czU5RrG1vLjPDmITPVYwl+p8QEzTBqR9IVxHxEtmg==", "dev": true, "dependencies": { - "@ory/client": "^1.1.25", - "@refinedev/devtools-shared": "1.1.2", - "@refinedev/devtools-ui": "1.1.15", + "@refinedev/devtools-shared": "1.1.11", "body-parser": "^1.20.2", "boxen": "^5.1.2", "chalk": "^4.1.2", @@ -2144,19 +2122,20 @@ "fs-extra": "^10.1.0", "globby": "^11.1.0", "gray-matter": "^4.0.3", - "http-proxy-middleware": "^2.0.6", - "jscodeshift": "0.13.1", + "http-proxy-middleware": "^3.0.0", + "jscodeshift": "0.15.2", "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "marked": "^4.3.0", "node-fetch": "^2.6.7", - "preferred-pm": "^3.0.3", + "preferred-pm": "^3.1.3", "react": "^18.0.0", "react-dom": "^18.0.0", "sanitize-html": "^2.11.0", "ws": "^8.13.0" }, "bin": { - "refine-devtools": "dist/cli.js" + "refine-devtools": "dist/cli.cjs" }, "engines": { "node": ">=10" @@ -2169,9 +2148,9 @@ } }, "node_modules/@refinedev/devtools-shared": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@refinedev/devtools-shared/-/devtools-shared-1.1.2.tgz", - "integrity": "sha512-ze+akDLtCblBBEZuFTYoiAu1CfEdzBRBdttVaLJEAgSNdMva9vpbV/7gG5yTQRIIi4kIdfghphwrGHBxOOKjXQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@refinedev/devtools-shared/-/devtools-shared-1.1.11.tgz", + "integrity": "sha512-C3v3hnJT5J0d4Uex8DapdpWaVYdUuOovEL/oeQLd4kW2N6ImQCFBYGMfwvi4mDCdorQzGyWSJHmFcfV8EEF+Hg==", "dependencies": { "@tanstack/react-query": "^4.10.1", "error-stack-parser": "^2.1.4" @@ -2186,40 +2165,10 @@ "react-dom": "^17.0.0 || ^18.0.0" } }, - "node_modules/@refinedev/devtools-ui": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@refinedev/devtools-ui/-/devtools-ui-1.1.15.tgz", - "integrity": "sha512-bxAbeJSXhOOBFPP4dtn6WyTZHmaOPZGzhCWJUWqv88HDIA18S7FkbvcTj5AByex49dT8FX14q3xn9NYAJiAsJg==", - "dev": true, - "dependencies": { - "@fireworks-js/react": "^2.10.7", - "@headlessui/react": "^1.7.17", - "@ory/client": "^1.1.25", - "@refinedev/devtools-shared": "1.1.2", - "@tanstack/react-table": "^8.2.6", - "clsx": "^1.1.1", - "dayjs": "^1.10.7", - "lodash": "^4.17.21", - "prism-react-renderer": "^1.3.5", - "react-gravatar": "^2.6.3", - "react-json-view": "^1.21.3", - "react-router-dom": "^6.8.1", - "semver-diff": "^3.1.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "@types/react-dom": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - } - }, "node_modules/@refinedev/kbar": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@refinedev/kbar/-/kbar-1.3.4.tgz", - "integrity": "sha512-1DN9E+ESQCon0fGBqar28cR0fr8T7OGj2NRPnNh0fKRjvdrMw/OLXz2XGxAsEjNj5iACImE7i9/hzgrzitQKeQ==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@refinedev/kbar/-/kbar-1.3.12.tgz", + "integrity": "sha512-SCGNfqYeyXzxvF+9yYYMVDAY6h30RdMyY8it2Y5zA5+gqmSX6DVJPSr7NW0BDvqRSnF4vWCTC1dDPPC/1Fp9KQ==", "dependencies": { "kbar": "^0.1.0-beta.40" }, @@ -2227,15 +2176,15 @@ "node": ">=10" }, "peerDependencies": { - "@refinedev/core": "^4.0.0", + "@refinedev/core": "^4.46.1", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" } }, "node_modules/@refinedev/react-router-v6": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/@refinedev/react-router-v6/-/react-router-v6-4.5.4.tgz", - "integrity": "sha512-brzMtlh57dM3eD6Vgp3a8lav9tcwH7JuIedYJOba7dPNl4G4CWfnCKjtLIpQBPA/Akd08l1fC0/dfs7kUzfcTA==", + "version": "4.5.11", + "resolved": "https://registry.npmjs.org/@refinedev/react-router-v6/-/react-router-v6-4.5.11.tgz", + "integrity": "sha512-VxvRqqwAlrXPTTDWb3KBkriGsG03IUxuZy2bGct9N1P+RmQRvpW8Fk6xn6iaEORE1glY/xa8D4cE05tlkevzvw==", "dependencies": { "qs": "^6.10.1", "react-router-dom": "^6.8.1" @@ -2244,7 +2193,7 @@ "node": ">=10" }, "peerDependencies": { - "@refinedev/core": "^4.0.0", + "@refinedev/core": "^4.46.1", "@types/react": "^17.0.0 || ^18.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", @@ -2253,9 +2202,9 @@ } }, "node_modules/@refinedev/simple-rest": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@refinedev/simple-rest/-/simple-rest-5.0.0.tgz", - "integrity": "sha512-wHTpxIKEuCQWRuK6buqR/qPJuYWy+YOMG8PFYBg7XUC9wLSiSDwvVNiE3nVXN6oaB4gQWQxh44yyapuhQEjfKg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@refinedev/simple-rest/-/simple-rest-5.0.8.tgz", + "integrity": "sha512-lU4fGLab7qtPnkNldeY3gG7yoxLVJcjH+JmP6BgQoakHT4feAnZ5uMGCMBMJDphdh2/mdhdXAuz+txJ+gseglw==", "dependencies": { "axios": "^1.6.2", "query-string": "^7.1.1" @@ -2264,28 +2213,28 @@ "node": ">=10" }, "peerDependencies": { - "@refinedev/core": "^4.0.0" + "@refinedev/core": "^4.46.1" } }, "node_modules/@refinedev/ui-types": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/@refinedev/ui-types/-/ui-types-1.22.3.tgz", - "integrity": "sha512-YSYXdyKL6+BboS6k8MEFy/mbB1dmb2J9dKJ8h+aIlnGq5OkuJQ7D8P4KjDyY9Wd0DDbSQ77Yh7MP1GYV+WrrlQ==", + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/@refinedev/ui-types/-/ui-types-1.22.9.tgz", + "integrity": "sha512-q4S+OiyPiB6e4R8FUSpQqHgFNHL3iB1WrS19zaDZD96y3Pd8LkolmX9rxTdbKRB/VZr4hsBENAvbeKzUx9ykog==", "dependencies": { - "@refinedev/core": "^4.44.12", + "@refinedev/core": "^4.51.0", "dayjs": "^1.10.7", - "tslib": "^2.3.1" + "tslib": "^2.6.2" }, "peerDependencies": { - "@refinedev/core": "^4.0.0", + "@refinedev/core": "^4.46.1", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" } }, "node_modules/@remix-run/router": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.0.tgz", - "integrity": "sha512-WOHih+ClN7N8oHk9N4JUiMxQJmRVaOxcg8w7F/oHUXzJt920ekASLI/7cYX8XkntDWRhLZtsk6LbGrkgOAvi5A==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz", + "integrity": "sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==", "engines": { "node": ">=14.0.0" } @@ -2312,9 +2261,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", - "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", "cpu": [ "arm" ], @@ -2325,9 +2274,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", - "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", "cpu": [ "arm64" ], @@ -2338,9 +2287,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", - "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", "cpu": [ "arm64" ], @@ -2351,9 +2300,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", - "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", "cpu": [ "x64" ], @@ -2364,9 +2313,22 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", - "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", "cpu": [ "arm" ], @@ -2377,9 +2339,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", - "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", "cpu": [ "arm64" ], @@ -2390,9 +2352,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", - "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", "cpu": [ "arm64" ], @@ -2402,10 +2364,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", - "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", "cpu": [ "riscv64" ], @@ -2415,10 +2390,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", - "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", "cpu": [ "x64" ], @@ -2429,9 +2417,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", - "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", "cpu": [ "x64" ], @@ -2442,9 +2430,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", - "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", "cpu": [ "arm64" ], @@ -2455,9 +2443,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", - "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", "cpu": [ "ia32" ], @@ -2468,9 +2456,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", - "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", "cpu": [ "x64" ], @@ -2762,39 +2750,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@tanstack/react-table": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.0.tgz", - "integrity": "sha512-47wdYFlsbJlR6qt4F38nTGo93E6wNkXlN8t1TUI5SpSGiewx+KzBayMjfud3LgqbPLYYcpHby/tGkIF3tR8Upg==", - "dev": true, - "dependencies": { - "@tanstack/table-core": "8.11.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": ">=16", - "react-dom": ">=16" - } - }, - "node_modules/@tanstack/table-core": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.0.tgz", - "integrity": "sha512-7SC8/v6cXbUriOs2UISN8Jho3ttnA8cRZgusLn15b8meb28prHnWg4t4oNSHIR3rYn0g7iiIg+pax2CtBnyffg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2858,20 +2813,19 @@ "@types/node": "*" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, "node_modules/@types/loadable__component": { - "version": "5.13.8", - "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.8.tgz", - "integrity": "sha512-0FF/WihuPkR5IFOHiBzC95bSACvgQNUQCuNy1WF8F/lCBBHgS2SxarIk4CTjWM10A72ovpmXZDRcuAXZNS+/kQ==", + "version": "5.13.9", + "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.9.tgz", + "integrity": "sha512-QWOtIkwZqHNdQj3nixQ8oyihQiTMKZLk/DNuvNxMSbTfxf47w+kqcbnxlUeBgAxdOtW0Dh48dTAIp83iJKtnrQ==", "dependencies": { "@types/react": "*" } }, + "node_modules/@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==" + }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", @@ -2881,9 +2835,9 @@ } }, "node_modules/@types/node": { - "version": "20.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", - "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "version": "20.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz", + "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2895,68 +2849,59 @@ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { - "version": "18.2.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", - "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", - "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "dev": true, "dependencies": { "@types/react": "*" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" - }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", - "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0.tgz", + "integrity": "sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/type-utils": "6.14.0", - "@typescript-eslint/utils": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/type-utils": "8.0.0", + "@typescript-eslint/utils": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2964,60 +2909,27 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", - "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0.tgz", + "integrity": "sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/typescript-estree": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3026,16 +2938,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", - "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz", + "integrity": "sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0" + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3043,26 +2955,23 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", - "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0.tgz", + "integrity": "sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.14.0", - "@typescript-eslint/utils": "6.14.0", + "@typescript-eslint/typescript-estree": "8.0.0", + "@typescript-eslint/utils": "8.0.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -3070,12 +2979,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", - "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz", + "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3083,21 +2992,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", - "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz", + "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/visitor-keys": "6.14.0", + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3109,108 +3019,63 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", - "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz", + "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.14.0", - "@typescript-eslint/types": "6.14.0", - "@typescript-eslint/typescript-estree": "6.14.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/typescript-estree": "8.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", - "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz", + "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.14.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.0.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3230,23 +3095,17 @@ "react": "*" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", "dev": true, "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" + "react-refresh": "^0.14.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3256,9 +3115,9 @@ } }, "node_modules/@yudiel/react-qr-scanner": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@yudiel/react-qr-scanner/-/react-qr-scanner-1.2.4.tgz", - "integrity": "sha512-ySQwXPoxojChN1BusYMk4B9XOAJAvZzKrEEJcAad67VLIq9mjKsDGcKDFGT9XQ7WZbNYg7dvVUwKFPfce8gN2g==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@yudiel/react-qr-scanner/-/react-qr-scanner-1.2.10.tgz", + "integrity": "sha512-I94AyrEu/2oZxXT6TEOK9+K2IfjqfPmic/GUah7alMIxfgXP9rs9+IZE56JhQr4pZ7Iz2RUC4JFfeaysFYNEIA==", "dependencies": { "@zxing/library": "^0.20.0" }, @@ -3301,9 +3160,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3435,58 +3294,59 @@ "dev": true }, "node_modules/antd": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/antd/-/antd-5.12.2.tgz", - "integrity": "sha512-lJ4pdBRboN2Tl5hXTqgxUjGIercB2YIK7Z8fVDushgrJ55RhywJjvcQVnBmuxcSPuWEF2Yu8SNBVAnaV4EqzWA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.20.0.tgz", + "integrity": "sha512-wWCFzbry3hov7k8gqhPR+FzD6EkWlhBbGD9mYOSIDoYRGMRqueTh2+2jfU1voHucmwcxDwzU7iwZDU2+PCXZdA==", "dependencies": { - "@ant-design/colors": "^7.0.0", - "@ant-design/cssinjs": "^1.18.1", - "@ant-design/icons": "^5.2.6", - "@ant-design/react-slick": "~1.0.2", - "@babel/runtime": "^7.23.4", + "@ant-design/colors": "^7.1.0", + "@ant-design/cssinjs": "^1.21.0", + "@ant-design/cssinjs-utils": "^1.0.3", + "@ant-design/icons": "^5.4.0", + "@ant-design/react-slick": "~1.1.2", + "@babel/runtime": "^7.24.8", "@ctrl/tinycolor": "^3.6.1", - "@rc-component/color-picker": "~1.4.1", + "@rc-component/color-picker": "~2.0.0", "@rc-component/mutate-observer": "^1.1.0", - "@rc-component/tour": "~1.11.1", - "@rc-component/trigger": "^1.18.2", - "classnames": "^2.3.2", + "@rc-component/qrcode": "~1.0.0", + "@rc-component/tour": "~1.15.0", + "@rc-component/trigger": "^2.2.0", + "classnames": "^2.5.1", "copy-to-clipboard": "^3.3.3", - "dayjs": "^1.11.1", - "qrcode.react": "^3.1.0", - "rc-cascader": "~3.20.0", - "rc-checkbox": "~3.1.0", - "rc-collapse": "~3.7.2", - "rc-dialog": "~9.3.4", - "rc-drawer": "~6.5.2", - "rc-dropdown": "~4.1.0", - "rc-field-form": "~1.41.0", - "rc-image": "~7.5.1", - "rc-input": "~1.3.6", - "rc-input-number": "~8.4.0", - "rc-mentions": "~2.9.1", - "rc-menu": "~9.12.4", - "rc-motion": "^2.9.0", - "rc-notification": "~5.3.0", - "rc-pagination": "~4.0.3", - "rc-picker": "~3.14.6", - "rc-progress": "~3.5.1", - "rc-rate": "~2.12.0", + "dayjs": "^1.11.11", + "rc-cascader": "~3.27.0", + "rc-checkbox": "~3.3.0", + "rc-collapse": "~3.7.3", + "rc-dialog": "~9.5.2", + "rc-drawer": "~7.2.0", + "rc-dropdown": "~4.2.0", + "rc-field-form": "~2.2.1", + "rc-image": "~7.9.0", + "rc-input": "~1.6.2", + "rc-input-number": "~9.2.0", + "rc-mentions": "~2.15.0", + "rc-menu": "~9.14.1", + "rc-motion": "^2.9.2", + "rc-notification": "~5.6.0", + "rc-pagination": "~4.2.0", + "rc-picker": "~4.6.11", + "rc-progress": "~4.0.0", + "rc-rate": "~2.13.0", "rc-resize-observer": "^1.4.0", - "rc-segmented": "~2.2.2", - "rc-select": "~14.10.0", - "rc-slider": "~10.5.0", + "rc-segmented": "~2.3.0", + "rc-select": "~14.15.1", + "rc-slider": "~11.1.3", "rc-steps": "~6.0.1", "rc-switch": "~4.1.0", - "rc-table": "~7.36.0", - "rc-tabs": "~12.14.1", - "rc-textarea": "~1.5.3", - "rc-tooltip": "~6.1.2", - "rc-tree": "~5.8.2", - "rc-tree-select": "~5.15.0", - "rc-upload": "~4.3.5", - "rc-util": "^5.38.1", + "rc-table": "~7.45.7", + "rc-tabs": "~15.1.1", + "rc-textarea": "~1.8.1", + "rc-tooltip": "~6.2.0", + "rc-tree": "~5.8.8", + "rc-tree-select": "~5.22.1", + "rc-upload": "~4.6.0", + "rc-util": "^5.43.0", "scroll-into-view-if-needed": "^3.1.0", - "throttle-debounce": "^5.0.0" + "throttle-debounce": "^5.0.2" }, "funding": { "type": "opencollective", @@ -3502,33 +3362,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -3549,34 +3382,10 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, "dependencies": { "tslib": "^2.0.1" @@ -3585,28 +3394,11 @@ "node": ">=4" } }, - "node_modules/async-validator": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", - "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/atomically": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", @@ -3617,11 +3409,11 @@ } }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -3650,42 +3442,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==", - "dev": true - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3810,21 +3566,21 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "funding": [ { "type": "opencollective", @@ -3840,10 +3596,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -3891,26 +3647,6 @@ "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -3944,9 +3680,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", "funding": [ { "type": "opencollective", @@ -4055,59 +3791,10 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/cli-boxes": { "version": "2.2.1", @@ -4206,28 +3893,6 @@ "node": ">=0.10.0" } }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4281,15 +3946,6 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/compute-scroll-into-view": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz", @@ -4352,9 +4008,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -4380,15 +4036,6 @@ "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -4423,10 +4070,9 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { "node-fetch": "^2.6.12" } @@ -4445,24 +4091,15 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/debounce-fn": { "version": "4.0.0", @@ -4495,6 +4132,18 @@ } } }, + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -4549,19 +4198,6 @@ "node": ">= 0.4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4607,18 +4243,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -4717,9 +4341,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.614", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz", - "integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==" + "version": "1.4.806", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.806.tgz", + "integrity": "sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -4791,9 +4415,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", - "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "bin": { @@ -4803,34 +4427,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.9", - "@esbuild/android-arm64": "0.19.9", - "@esbuild/android-x64": "0.19.9", - "@esbuild/darwin-arm64": "0.19.9", - "@esbuild/darwin-x64": "0.19.9", - "@esbuild/freebsd-arm64": "0.19.9", - "@esbuild/freebsd-x64": "0.19.9", - "@esbuild/linux-arm": "0.19.9", - "@esbuild/linux-arm64": "0.19.9", - "@esbuild/linux-ia32": "0.19.9", - "@esbuild/linux-loong64": "0.19.9", - "@esbuild/linux-mips64el": "0.19.9", - "@esbuild/linux-ppc64": "0.19.9", - "@esbuild/linux-riscv64": "0.19.9", - "@esbuild/linux-s390x": "0.19.9", - "@esbuild/linux-x64": "0.19.9", - "@esbuild/netbsd-x64": "0.19.9", - "@esbuild/openbsd-x64": "0.19.9", - "@esbuild/sunos-x64": "0.19.9", - "@esbuild/win32-arm64": "0.19.9", - "@esbuild/win32-ia32": "0.19.9", - "@esbuild/win32-x64": "0.19.9" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -4853,41 +4478,37 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", + "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.8.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -4901,16 +4522,16 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -4920,25 +4541,25 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.5.tgz", - "integrity": "sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz", + "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==", "dev": true, "peerDependencies": { "eslint": ">=7" } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4972,19 +4593,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/json-schema-traverse": { @@ -4994,17 +4612,29 @@ "dev": true }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5108,81 +4738,18 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/export-to-csv-fix-source-map": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/export-to-csv-fix-source-map/-/export-to-csv-fix-source-map-0.2.1.tgz", - "integrity": "sha512-02CGZG9Kduc0l9ErJ5b+99+PjeQIyoeVGz+f7/Yc04V4YKNPbdT63sQqBC5RW05va4w0MZen7pQpf92H3funYw==" - }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -5213,30 +4780,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -5273,21 +4816,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5319,37 +4847,6 @@ "node": ">=4" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5410,36 +4907,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dev": true, - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true - }, "node_modules/figlet": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", @@ -5477,21 +4944,21 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -5645,63 +5112,43 @@ "node": ">=8" } }, - "node_modules/fireworks-js": { - "version": "2.10.7", - "resolved": "https://registry.npmjs.org/fireworks-js/-/fireworks-js-2.10.7.tgz", - "integrity": "sha512-FyRNiqlgu9ZeFCjfN0UiGUlj5dUWNYLyFaWN/Q8sOMf0E+KGA4dMROaBZpCtym85fChgCspoa3jHoLTRZiy74A==", - "dev": true - }, "node_modules/flag-icons": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-7.1.0.tgz", - "integrity": "sha512-AH4v++19bpC5P3Wh767top4wylJYJCWkFnvNiDqGHDxqSqdMZ49jpLXp8PWBHTTXaNQ+/A+QPrOwyiIGaiIhmw==" + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-7.2.3.tgz", + "integrity": "sha512-X2gUdteNuqdNqob2KKTJTS+ZCvyWeLCtDz9Ty8uJP17Y4o82Y+U/Vd4JNrdwTAjagYsRznOn9DZ+E/Q52qbmqg==" }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/flow-parser": { - "version": "0.224.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.224.0.tgz", - "integrity": "sha512-S1P78o0VLB1FZvkoGSIpaRiiTUQ3xDhm9I4Z1qc3lglmkjehfR2sjM0vhwKS7UC1G12VT4Leb/GGV/KlactqjA==", + "version": "0.242.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.242.1.tgz", + "integrity": "sha512-E3ml21Q1S5cMAyPbtYslkvI6yZO5oCS/S2EoteeFH8Kx9iKOv/YOJ+dGd/yMf+H3YKfhMKjnOpyNwrO7NdddWA==", "dev": true, "engines": { "node": ">=0.4.0" } }, - "node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dev": true, - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -5717,15 +5164,6 @@ } } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -5748,18 +5186,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -5853,15 +5279,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6054,69 +5471,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -6144,6 +5498,11 @@ "void-elements": "3.1.0" } }, + "node_modules/html-to-image": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz", + "integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==" + }, "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -6194,27 +5553,20 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", "dev": true, "dependencies": { - "@types/http-proxy": "^1.17.8", + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "micromatch": "^4.0.5" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/human-signals": { @@ -6227,9 +5579,9 @@ } }, "node_modules/i18next": { - "version": "23.7.11", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.7.11.tgz", - "integrity": "sha512-A/vOkw8vY99YHU9A1Td3I1dcTiYaPnwBWzrpVzfXUXSYgogK3cmBcmop/0cnXPc6QpUWIyqaugKNxRUEZVk9Nw==", + "version": "23.12.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.2.tgz", + "integrity": "sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==", "funding": [ { "type": "individual", @@ -6249,20 +5601,19 @@ } }, "node_modules/i18next-browser-languagedetector": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.0.tgz", - "integrity": "sha512-U00DbDtFIYD3wkWsr2aVGfXGAj2TgnELzOX9qv8bT0aJtvPV9CRO77h+vgmHFBMe7LAxdwvT/7VkCWGya6L3tA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz", + "integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==", "dependencies": { "@babel/runtime": "^7.23.2" } }, - "node_modules/i18next-xhr-backend": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/i18next-xhr-backend/-/i18next-xhr-backend-3.2.2.tgz", - "integrity": "sha512-OtRf2Vo3IqAxsttQbpjYnmMML12IMB5e0fc5B7qKJFLScitYaXa1OhMX0n0X/3vrfFlpHL9Ro/H+ps4Ej2j7QQ==", - "deprecated": "replaced by i18next-http-backend", + "node_modules/i18next-http-backend": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz", + "integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==", "dependencies": { - "@babel/runtime": "^7.5.5" + "cross-fetch": "4.0.0" } }, "node_modules/iconv-lite": { @@ -6298,9 +5649,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -6419,18 +5770,6 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -6458,24 +5797,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", @@ -6485,19 +5806,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -6606,12 +5914,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-retina": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz", - "integrity": "sha512-/tCmbIETZwCd8uHWO+GvbRa7jxwHFHdfetHfiwoP0aN9UDf3prUJMtKn7iBFYipYhqY1bSTjur8hC/Dakt8eyw==", - "dev": true - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6647,21 +5949,6 @@ "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6694,28 +5981,29 @@ } }, "node_modules/jscodeshift": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", - "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", + "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==", "dev": true, "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", + "@babel/core": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/preset-flow": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@babel/register": "^7.22.15", "babel-core": "^7.0.0-bridge.0", "chalk": "^4.1.2", "flow-parser": "0.*", "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", + "micromatch": "^4.0.4", "neo-async": "^2.5.0", "node-dir": "^0.1.17", - "recast": "^0.20.4", + "recast": "^0.23.3", "temp": "^0.8.4", "write-file-atomic": "^2.3.0" }, @@ -6724,136 +6012,11 @@ }, "peerDependencies": { "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } } }, "node_modules/jscodeshift/node_modules/temp": { @@ -6868,19 +6031,6 @@ "node": ">=6.0.0" } }, - "node_modules/jscodeshift/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -7066,18 +6216,6 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", - "dev": true - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -7166,27 +6304,6 @@ "semver": "bin/semver" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", @@ -7270,17 +6387,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", @@ -7646,31 +6752,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -7712,62 +6793,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7838,7 +6863,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7879,57 +6903,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -7938,30 +6911,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/omit.js": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", @@ -8165,15 +7114,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8215,9 +7155,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -8402,19 +7342,10 @@ "node": ">=4" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "dev": true, "funding": [ { @@ -8432,23 +7363,23 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/preferred-pm": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.2.tgz", - "integrity": "sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.4.tgz", + "integrity": "sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==", "dev": true, "dependencies": { "find-up": "^5.0.0", "find-yarn-workspace-root2": "1.2.16", "path-exists": "^4.0.0", - "which-pm": "2.0.0" + "which-pm": "^2.2.0" }, "engines": { "node": ">=10" @@ -8478,24 +7409,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "dev": true, - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "dependencies": { - "asap": "~2.0.3" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -8545,20 +7458,6 @@ "node": ">=6" } }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", - "dev": true - }, - "node_modules/qrcode.react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-3.1.0.tgz", - "integrity": "sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", @@ -8635,14 +7534,14 @@ } }, "node_modules/rc-cascader": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.20.0.tgz", - "integrity": "sha512-lkT9EEwOcYdjZ/jvhLoXGzprK1sijT3/Tp4BLxQQcHDZkkOzzwYQC9HgmKoJz0K7CukMfgvO9KqHeBdgE+pELw==", + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.27.0.tgz", + "integrity": "sha512-z5uq8VvQadFUBiuZJ7YF5UAUGNkZtdEtcEYiIA94N/Kc2MIKr6lEbN5HyVddvYSgwWlKqnL6pH5bFXFuIK3MNg==", "dependencies": { "@babel/runtime": "^7.12.5", "array-tree-filter": "^2.1.0", "classnames": "^2.3.1", - "rc-select": "~14.10.0", + "rc-select": "~14.15.0", "rc-tree": "~5.8.1", "rc-util": "^5.37.0" }, @@ -8652,9 +7551,9 @@ } }, "node_modules/rc-checkbox": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.1.0.tgz", - "integrity": "sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.3.0.tgz", + "integrity": "sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.3.2", @@ -8666,9 +7565,9 @@ } }, "node_modules/rc-collapse": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.7.2.tgz", - "integrity": "sha512-ZRw6ipDyOnfLFySxAiCMdbHtb5ePAsB9mT17PA6y1mRD/W6KHRaZeb5qK/X9xDV1CqgyxMpzw0VdS74PCcUk4A==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.7.3.tgz", + "integrity": "sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -8681,9 +7580,9 @@ } }, "node_modules/rc-dialog": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.3.4.tgz", - "integrity": "sha512-975X3018GhR+EjZFbxA2Z57SX5rnu0G0/OxFgMMvZK4/hQWEm3MHaNvP4wXpxYDoJsp+xUvVW+GB9CMMCm81jA==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.5.2.tgz", + "integrity": "sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/portal": "^1.0.0-8", @@ -8697,15 +7596,15 @@ } }, "node_modules/rc-drawer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.5.2.tgz", - "integrity": "sha512-QckxAnQNdhh4vtmKN0ZwDf3iakO83W9eZcSKWYYTDv4qcD2fHhRAZJJ/OE6v2ZlQ2kSqCJX5gYssF4HJFvsEPQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.2.0.tgz", + "integrity": "sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==", "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.23.9", "@rc-component/portal": "^1.1.1", "classnames": "^2.2.6", "rc-motion": "^2.6.1", - "rc-util": "^5.36.0" + "rc-util": "^5.38.1" }, "peerDependencies": { "react": ">=16.9.0", @@ -8713,12 +7612,12 @@ } }, "node_modules/rc-dropdown": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.1.0.tgz", - "integrity": "sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.2.0.tgz", + "integrity": "sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==", "dependencies": { "@babel/runtime": "^7.18.3", - "@rc-component/trigger": "^1.7.0", + "@rc-component/trigger": "^2.0.0", "classnames": "^2.2.6", "rc-util": "^5.17.0" }, @@ -8728,12 +7627,12 @@ } }, "node_modules/rc-field-form": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.41.0.tgz", - "integrity": "sha512-k9AS0wmxfJfusWDP/YXWTpteDNaQ4isJx9UKxx4/e8Dub4spFeZ54/EuN2sYrMRID/+hUznPgVZeg+Gf7XSYCw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.2.1.tgz", + "integrity": "sha512-uoNqDoR7A4tn4QTSqoWPAzrR7ZwOK5I+vuZ/qdcHtbKx+ZjEsTg7QXm2wk/jalDiSksAQmATxL0T5LJkRREdIA==", "dependencies": { "@babel/runtime": "^7.18.0", - "async-validator": "^4.1.0", + "@rc-component/async-validator": "^5.0.3", "rc-util": "^5.32.2" }, "engines": { @@ -8745,14 +7644,14 @@ } }, "node_modules/rc-image": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.5.1.tgz", - "integrity": "sha512-Z9loECh92SQp0nSipc0MBuf5+yVC05H/pzC+Nf8xw1BKDFUJzUeehYBjaWlxly8VGBZJcTHYri61Fz9ng1G3Ag==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.9.0.tgz", + "integrity": "sha512-l4zqO5E0quuLMCtdKfBgj4Suv8tIS011F5k1zBBlK25iMjjiNHxA0VeTzGFtUZERSA45gvpXDg8/P6qNLjR25g==", "dependencies": { "@babel/runtime": "^7.11.2", "@rc-component/portal": "^1.0.2", "classnames": "^2.2.6", - "rc-dialog": "~9.3.4", + "rc-dialog": "~9.5.2", "rc-motion": "^2.6.2", "rc-util": "^5.34.1" }, @@ -8762,9 +7661,9 @@ } }, "node_modules/rc-input": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.3.11.tgz", - "integrity": "sha512-jhH7QP5rILanSHCGSUkdoFE5DEtpv8FIseYhuYkOZzUBeiVAiwM3q26YqZ6xBB0QFEZ/yUAgms4xW4iuub3xFQ==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.6.2.tgz", + "integrity": "sha512-nJqsiIv8K88w8pvbUR5savKqBokdSR0zVGPntLApeOKFp8dp6s92l1CzD60yVActpCZAJwlCfRX5rno+QVYV7g==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -8776,15 +7675,15 @@ } }, "node_modules/rc-input-number": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-8.4.0.tgz", - "integrity": "sha512-B6rziPOLRmeP7kcS5qbdC5hXvvDHYKV4vUxmahevYx2E6crS2bRi0xLDjhJ0E1HtOWo8rTmaE2EBJAkTCZOLdA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.2.0.tgz", + "integrity": "sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/mini-decimal": "^1.0.1", "classnames": "^2.2.5", - "rc-input": "~1.3.5", - "rc-util": "^5.28.0" + "rc-input": "~1.6.0", + "rc-util": "^5.40.1" }, "peerDependencies": { "react": ">=16.9.0", @@ -8792,16 +7691,16 @@ } }, "node_modules/rc-mentions": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.9.1.tgz", - "integrity": "sha512-cZuElWr/5Ws0PXx1uxobxfYh4mqUw2FitfabR62YnWgm+WAfDyXZXqZg5DxXW+M1cgVvntrQgDDd9LrihrXzew==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.15.0.tgz", + "integrity": "sha512-f5v5i7VdqvBDXbphoqcQWmXDif2Msd2arritVoWybrVDuHE6nQ7XCYsybHbV//WylooK52BFDouFvyaRDtXZEw==", "dependencies": { "@babel/runtime": "^7.22.5", - "@rc-component/trigger": "^1.5.0", + "@rc-component/trigger": "^2.0.0", "classnames": "^2.2.6", - "rc-input": "~1.3.5", - "rc-menu": "~9.12.0", - "rc-textarea": "~1.5.0", + "rc-input": "~1.6.0", + "rc-menu": "~9.14.0", + "rc-textarea": "~1.8.0", "rc-util": "^5.34.1" }, "peerDependencies": { @@ -8810,12 +7709,12 @@ } }, "node_modules/rc-menu": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.12.4.tgz", - "integrity": "sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==", + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.14.1.tgz", + "integrity": "sha512-5wlRb3M8S4yGlWhSoEYJ7ZVRElyScdcpUHxgiLxkeig1tEdyKrnED3B2fhpN0Rrpdp9jyhnmZR/Lwq2fH5VvDQ==", "dependencies": { "@babel/runtime": "^7.10.1", - "@rc-component/trigger": "^1.17.0", + "@rc-component/trigger": "^2.0.0", "classnames": "2.x", "rc-motion": "^2.4.3", "rc-overflow": "^1.3.1", @@ -8827,13 +7726,13 @@ } }, "node_modules/rc-motion": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.0.tgz", - "integrity": "sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.2.tgz", + "integrity": "sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", - "rc-util": "^5.21.0" + "rc-util": "^5.43.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -8841,9 +7740,9 @@ } }, "node_modules/rc-notification": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.3.0.tgz", - "integrity": "sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.0.tgz", + "integrity": "sha512-TGQW5T7waOxLwgJG7fXcw8l7AQiFOjaZ7ISF5PrU526nunHRNcTMuzKihQHaF4E/h/KfOCDk3Mv8eqzbu2e28w==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -8874,9 +7773,9 @@ } }, "node_modules/rc-pagination": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.0.3.tgz", - "integrity": "sha512-s1MNwyU83AgycikYckRdpmkN+4ZZuul0E0YdDp7dMgcjg/d2fak767ZIbLP4Q5YPPla7NDorfVFTvGQAPj6jXA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.2.0.tgz", + "integrity": "sha512-V6qeANJsT6tmOcZ4XiUmj8JXjRLbkusuufpuoBw2GiAn94fIixYjFLmbruD1Sbhn8fPLDnWawPp4CN37zQorvw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.3.2", @@ -8888,14 +7787,16 @@ } }, "node_modules/rc-picker": { - "version": "3.14.6", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-3.14.6.tgz", - "integrity": "sha512-AdKKW0AqMwZsKvIpwUWDUnpuGKZVrbxVTZTNjcO+pViGkjC1EBcjMgxVe8tomOEaIHJL5Gd13vS8Rr3zzxWmag==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.6.11.tgz", + "integrity": "sha512-PEVH5MMTUrdvTTxCmPndsXiJL7TFLSu8q0cDdZrhdcjn8en3NbuhOFacWqKTvdnfG53RPPhiBssXCUHYyc3R/Q==", "dependencies": { - "@babel/runtime": "^7.10.1", - "@rc-component/trigger": "^1.5.0", + "@babel/runtime": "^7.24.7", + "@rc-component/trigger": "^2.0.0", "classnames": "^2.2.1", - "rc-util": "^5.30.0" + "rc-overflow": "^1.3.2", + "rc-resize-observer": "^1.4.0", + "rc-util": "^5.43.0" }, "engines": { "node": ">=8.x" @@ -8924,9 +7825,9 @@ } }, "node_modules/rc-progress": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.5.1.tgz", - "integrity": "sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-4.0.0.tgz", + "integrity": "sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", @@ -8938,9 +7839,9 @@ } }, "node_modules/rc-rate": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.12.0.tgz", - "integrity": "sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.0.tgz", + "integrity": "sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", @@ -8970,9 +7871,9 @@ } }, "node_modules/rc-segmented": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.2.2.tgz", - "integrity": "sha512-Mq52M96QdHMsNdE/042ibT5vkcGcD5jxKp7HgPC2SRofpia99P5fkfHy1pEaajLMF/kj0+2Lkq1UZRvqzo9mSA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.3.0.tgz", + "integrity": "sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", @@ -8985,12 +7886,12 @@ } }, "node_modules/rc-select": { - "version": "14.10.0", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.10.0.tgz", - "integrity": "sha512-TsIJTYafTTapCA32LLNpx/AD6ntepR1TG8jEVx35NiAAWCPymhUfuca8kRcUNd3WIGVMDcMKn9kkphoxEz+6Ag==", + "version": "14.15.1", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.15.1.tgz", + "integrity": "sha512-mGvuwW1RMm1NCSI8ZUoRoLRK51R2Nb+QJnmiAvbDRcjh2//ulCkxeV6ZRFTECPpE1t2DPfyqZMPw90SVJzQ7wQ==", "dependencies": { "@babel/runtime": "^7.10.1", - "@rc-component/trigger": "^1.5.0", + "@rc-component/trigger": "^2.1.1", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-overflow": "^1.3.1", @@ -9006,13 +7907,13 @@ } }, "node_modules/rc-slider": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.5.0.tgz", - "integrity": "sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-11.1.5.tgz", + "integrity": "sha512-b77H5PbjMKsvkYXAYIkn50QuFX6ICQmCTibDinI9q+BHx65/TV4TeU25+oadhSRzykxs0/vBWeKBwRyySOeWlg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "rc-util": "^5.27.0" + "rc-util": "^5.36.0" }, "engines": { "node": ">=8.x" @@ -9054,16 +7955,16 @@ } }, "node_modules/rc-table": { - "version": "7.36.0", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.36.0.tgz", - "integrity": "sha512-3xVcdCC5OLeOOhaCg+5Lps2oPreM/GWXmUXWTSX4p6vF7F76ABM4dfPpMJ9Dnf5yGRyh+8pe7FRyhRVnWw2H/w==", + "version": "7.45.7", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.45.7.tgz", + "integrity": "sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/context": "^1.4.0", "classnames": "^2.2.5", "rc-resize-observer": "^1.1.0", "rc-util": "^5.37.0", - "rc-virtual-list": "^3.11.1" + "rc-virtual-list": "^3.14.2" }, "engines": { "node": ">=8.x" @@ -9074,14 +7975,14 @@ } }, "node_modules/rc-tabs": { - "version": "12.14.1", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.14.1.tgz", - "integrity": "sha512-1xlE7JQNYxD5RwBsM7jf2xSdUrkmTSDFLFEm2gqAgnsRlOGydEzXXNAVTOT6QcgM1G/gCm+AgG+FYPUGb4Hs4g==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.1.1.tgz", + "integrity": "sha512-Tc7bJvpEdkWIVCUL7yQrMNBJY3j44NcyWS48jF/UKMXuUlzaXK+Z/pEL5LjGcTadtPvVmNqA40yv7hmr+tCOAw==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", - "rc-dropdown": "~4.1.0", - "rc-menu": "~9.12.0", + "rc-dropdown": "~4.2.0", + "rc-menu": "~9.14.0", "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", "rc-util": "^5.34.1" @@ -9095,13 +7996,13 @@ } }, "node_modules/rc-textarea": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.5.3.tgz", - "integrity": "sha512-oH682ghHx++stFNYrosPRBfwsypywrTXpaD0/5Z8MPkUOnyOQUaY9ueL9tMu6BP1LfsuYQ1VLpg5OtshViLNgA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.8.1.tgz", + "integrity": "sha512-bm36N2ZqwZAP60ZQg2OY9mPdqWC+m6UTjHc+CqEZOxb3Ia29BGHazY/s5bI8M4113CkqTzhtFUDNA078ZiOx3Q==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", - "rc-input": "~1.3.5", + "rc-input": "~1.6.0", "rc-resize-observer": "^1.0.0", "rc-util": "^5.27.0" }, @@ -9111,12 +8012,12 @@ } }, "node_modules/rc-tooltip": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.1.2.tgz", - "integrity": "sha512-89zwvybvCxGJu3+gGF8w5AXd4HHk6hIN7K0vZbkzjilVaEAIWPqc1fcyeUeP71n3VCcw7pTL9LyFupFbrx8gHw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.2.0.tgz", + "integrity": "sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==", "dependencies": { "@babel/runtime": "^7.11.2", - "@rc-component/trigger": "^1.18.0", + "@rc-component/trigger": "^2.0.0", "classnames": "^2.3.1" }, "peerDependencies": { @@ -9125,9 +8026,9 @@ } }, "node_modules/rc-tree": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.8.2.tgz", - "integrity": "sha512-xH/fcgLHWTLmrSuNphU8XAqV7CdaOQgm4KywlLGNoTMhDAcNR3GVNP6cZzb0GrKmIZ9yae+QLot/cAgUdPRMzg==", + "version": "5.8.8", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.8.8.tgz", + "integrity": "sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -9144,13 +8045,13 @@ } }, "node_modules/rc-tree-select": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.15.0.tgz", - "integrity": "sha512-YJHfdO6azFnR0/JuNBZLDptGE4/RGfVeHAafUIYcm2T3RBkL1O8aVqiHvwIyLzdK59ry0NLrByd+3TkfpRM+9Q==", + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.22.1.tgz", + "integrity": "sha512-b8mAK52xEpRgS+b2PTapCt29GoIrO5cO8jB7AfHttFsIJfcnynY9FCtnYzURsKXJkGHbFY6UzSEB2I3TETtdWg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", - "rc-select": "~14.10.0", + "rc-select": "~14.15.0", "rc-tree": "~5.8.1", "rc-util": "^5.16.1" }, @@ -9160,9 +8061,9 @@ } }, "node_modules/rc-upload": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.5.tgz", - "integrity": "sha512-EHlKJbhkgFSQHliTj9v/2K5aEuFwfUQgZARzD7AmAPOneZEPiCNF3n6PEWIuqz9h7oq6FuXgdR67sC5BWFxJbA==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.6.0.tgz", + "integrity": "sha512-Zr0DT1NHw/ApxrP7UAoxOtGaVYuzarrrCVr0ld7RiEFsKX07uFhE1EpCBxwL11ruFn89GMcshOKWp+s6FLyAlA==", "dependencies": { "@babel/runtime": "^7.18.3", "classnames": "^2.2.5", @@ -9174,9 +8075,9 @@ } }, "node_modules/rc-util": { - "version": "5.38.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.38.1.tgz", - "integrity": "sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", + "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", "dependencies": { "@babel/runtime": "^7.18.3", "react-is": "^18.2.0" @@ -9192,9 +8093,9 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/rc-virtual-list": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.11.3.tgz", - "integrity": "sha512-tu5UtrMk/AXonHwHxUogdXAWynaXsrx1i6dsgg+lOo/KJSF8oBAcprh1z5J3xgnPJD5hXxTL58F8s8onokdt0Q==", + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.3.tgz", + "integrity": "sha512-6+6wiEhdqakNBnbRJymgMlh+90qpkgqherTRo1l1cX7mK6F9hWsazPczmP0lA+64yhC9/t+M9Dh5pjvDWimn8A==", "dependencies": { "@babel/runtime": "^7.20.0", "classnames": "^2.2.6", @@ -9205,14 +8106,14 @@ "node": ">=8.x" }, "peerDependencies": { - "react": "*", - "react-dom": "*" + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -9220,72 +8121,24 @@ "node": ">=0.10.0" } }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dev": true, - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-gravatar": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/react-gravatar/-/react-gravatar-2.6.3.tgz", - "integrity": "sha512-yITonigS2LmG7Fw0gWfZfcVwy1mpiBHNVmoFyetitQjXu7JCYoE6jtub0GIfq+ydpnQSYyJT3kwpX6zj1wXR4w==", - "dev": true, - "dependencies": { - "is-retina": "^1.0.3", - "md5": "^2.1.0", - "query-string": "^4.2.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-gravatar/node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-gravatar/node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "react": "^18.3.1" } }, "node_modules/react-i18next": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.5.0.tgz", - "integrity": "sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.0.tgz", + "integrity": "sha512-2O3IgF4zivg57Q6p6i+ChDgJ371IDcEWbuWC6gvoh5NbkDMs0Q+O7RPr4v61+Se32E0V+LmtwePAeqWZW0bi6g==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.24.8", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { @@ -9306,28 +8159,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dev": true, - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, "node_modules/react-markdown": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz", @@ -9362,20 +8193,20 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.0.tgz", - "integrity": "sha512-hGZ0HXbwz3zw52pLZV3j3+ec+m/PQ9cTpBvqjFQmy2XVUWGn5MD+31oXHb6dVTxYzmAeaiUBYjkoNz66n3RGCg==", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz", + "integrity": "sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==", "dependencies": { - "@remix-run/router": "1.14.0" + "@remix-run/router": "1.19.0" }, "engines": { "node": ">=14.0.0" @@ -9385,12 +8216,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.0.tgz", - "integrity": "sha512-1dUdVj3cwc1npzJaf23gulB562ESNvxf7E4x8upNJycqyUm5BRRZ6dd3LrlzhtLaMrwOCO8R0zoiYxdaJx4LlQ==", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz", + "integrity": "sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==", "dependencies": { - "@remix-run/router": "1.14.0", - "react-router": "6.21.0" + "@remix-run/router": "1.19.0", + "react-router": "6.26.0" }, "engines": { "node": ">=14.0.0" @@ -9400,27 +8231,10 @@ "react-dom": ">=16.8" } }, - "node_modules/react-textarea-autosize": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", - "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-to-print": { - "version": "2.14.15", - "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.14.15.tgz", - "integrity": "sha512-SKnwOzU2cJ8eaAkoJO7+gNhvfEDmm+Y34IdcHsjtHioUevUPhprqbVtvNJlZ2JkGJ8ExK2QNWM9pXECTDR5D8w==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.15.1.tgz", + "integrity": "sha512-1foogIFbCpzAVxydkhBiDfMiFYhIMphiagDOfcG4X/EcQ+fBPqJ0rby9Wv/emzY1YLkIQy/rEgOrWQT+rBKhjw==", "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" @@ -9455,14 +8269,15 @@ } }, "node_modules/recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", "dev": true, "dependencies": { - "ast-types": "0.14.2", + "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, "engines": { @@ -9483,44 +8298,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/remark-gfm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", @@ -9563,15 +8340,6 @@ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -9608,13 +8376,6 @@ "node": ">=4" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -9628,15 +8389,6 @@ "node": ">=8" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9648,25 +8400,25 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", - "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, @@ -9675,19 +8427,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.1", - "@rollup/rollup-android-arm64": "4.9.1", - "@rollup/rollup-darwin-arm64": "4.9.1", - "@rollup/rollup-darwin-x64": "4.9.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", - "@rollup/rollup-linux-arm64-gnu": "4.9.1", - "@rollup/rollup-linux-arm64-musl": "4.9.1", - "@rollup/rollup-linux-riscv64-gnu": "4.9.1", - "@rollup/rollup-linux-x64-gnu": "4.9.1", - "@rollup/rollup-linux-x64-musl": "4.9.1", - "@rollup/rollup-win32-arm64-msvc": "4.9.1", - "@rollup/rollup-win32-ia32-msvc": "4.9.1", - "@rollup/rollup-win32-x64-msvc": "4.9.1", + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", "fsevents": "~2.3.2" } }, @@ -9752,15 +8507,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", @@ -9776,9 +8522,9 @@ "dev": true }, "node_modules/sanitize-html": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.11.0.tgz", - "integrity": "sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.13.0.tgz", + "integrity": "sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==", "dev": true, "dependencies": { "deepmerge": "^4.2.2", @@ -9799,9 +8545,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -9837,13 +8583,10 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9872,24 +8615,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -9964,27 +8689,6 @@ "node": ">= 0.4" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "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 - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -10082,124 +8786,6 @@ "tslib": "^2.0.3" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10210,28 +8796,14 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -10242,13 +8814,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, "node_modules/space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", @@ -10266,43 +8831,6 @@ "node": ">=6" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -10314,44 +8842,6 @@ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -10536,18 +9026,6 @@ "node": ">=6.0.0" } }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10555,9 +9033,9 @@ "dev": true }, "node_modules/throttle-debounce": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", - "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", "engines": { "node": ">=12.22" } @@ -10569,9 +9047,9 @@ "dev": true }, "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, "node_modules/tmp": { "version": "0.0.33", @@ -10593,45 +9071,6 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10644,31 +9083,6 @@ "node": ">=8.0" } }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", @@ -10686,8 +9100,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/trough": { "version": "1.0.5", @@ -10699,12 +9112,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -10761,9 +9174,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10773,29 +9186,6 @@ "node": ">=14.17" } }, - "node_modules/ua-parser-js": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", - "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "engines": { - "node": "*" - } - }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -10871,21 +9261,6 @@ "node": ">=8" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unist-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", @@ -10985,58 +9360,10 @@ "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "funding": [ { "type": "opencollective", @@ -11052,8 +9379,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -11071,62 +9398,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "dev": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "dev": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dev": true, - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -11150,6 +9421,18 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -11210,14 +9493,14 @@ } }, "node_modules/vite": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", - "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", + "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", "dev": true, "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.39", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" @@ -11265,13 +9548,13 @@ } }, "node_modules/vite-plugin-mkcert": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.1.tgz", - "integrity": "sha512-/OxFqPXF3yTuikjn5Lbgt0WWm6Yq0KBWkFj68MZTV/icv3tO+7Y/HS+8+4v9vyx0TDzkSTVyaC/4J7Qtnh/PIw==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.5.tgz", + "integrity": "sha512-KKGY3iHx/9zb7ow8JJ+nLN2HiNIBuPBwj34fJ+jAJT89/8qfk7msO7G7qipR8VDEm9xMCys0xT11QOJbZcg3/Q==", "dev": true, "dependencies": { "@octokit/rest": "^20.0.2", - "axios": "^1.6.2", + "axios": "^1.6.8", "debug": "^4.3.4", "picocolors": "^1.0.0" }, @@ -11328,14 +9611,12 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -11357,9 +9638,9 @@ } }, "node_modules/which-pm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", - "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.2.0.tgz", + "integrity": "sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==", "dev": true, "dependencies": { "load-yaml-file": "^0.2.0", @@ -11422,9 +9703,9 @@ } }, "node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/client/package.json b/client/package.json index 2ceb41a..43a8d9a 100644 --- a/client/package.json +++ b/client/package.json @@ -1,50 +1,55 @@ { "name": "spoolman-ui", - "version": "0.16.1", + "version": "0.19.3", "engines": { "node": "20.x" }, "private": true, "type": "module", "dependencies": { - "axios": "^1.6.2", - "@ant-design/icons": "^5.2.6", - "@loadable/component": "^5.16.2", - "@refinedev/antd": "^5.37.0", - "@refinedev/core": "^4.46.0", - "@refinedev/kbar": "^1.3.4", - "@refinedev/react-router-v6": "^4.5.4", - "@refinedev/simple-rest": "^5.0.0", + "@ant-design/icons": "^5.4.0", + "@loadable/component": "^5.16.4", + "@refinedev/antd": "^5.42.0", + "@refinedev/core": "^4.53.0", + "@refinedev/kbar": "^1.3.12", + "@refinedev/react-router-v6": "^4.5.11", + "@refinedev/simple-rest": "^5.0.8", "@tanstack/react-query": "^4.36.1", "@tanstack/react-query-devtools": "^4.36.1", - "@types/loadable__component": "^5.13.8", - "@yudiel/react-qr-scanner": "^1.2.4", - "antd": "^5.12.2", - "flag-icons": "^7.1.0", - "i18next": "^23.7.11", - "i18next-browser-languagedetector": "^7.2.0", - "i18next-xhr-backend": "^3.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-i18next": "^13.5.0", - "react-router-dom": "^6.21.0", - "react-to-print": "^2.14.15", + "@types/loadable__component": "^5.13.9", + "@types/lodash": "^4.17.7", + "@types/uuid": "^10.0.0", + "@yudiel/react-qr-scanner": "^1.2.10", + "antd": "^5.20.0", + "axios": "^1.7.3", + "flag-icons": "^7.2.3", + "html-to-image": "^1.11.11", + "i18next": "^23.12.2", + "i18next-browser-languagedetector": "^8.0.0", + "i18next-http-backend": "^2.5.2", + "lodash": "^4.17.21", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-i18next": "^15.0.0", + "react-router-dom": "^6.26.0", + "react-to-print": "^2.15.1", + "uuid": "^10.0.0", "vite-plugin-svgr": "^4.2.0" }, "devDependencies": { - "@refinedev/cli": "^2.16.20", - "@types/node": "^20.10.4", - "@types/react": "^18.2.45", - "@types/react-dom": "^18.2.18", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "@vitejs/plugin-react": "^4.2.1", - "eslint": "^8.56.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.5", - "typescript": "^5.3.3", - "vite": "^5.0.12", - "vite-plugin-mkcert": "^1.17.1" + "@refinedev/cli": "^2.16.36", + "@types/node": "^20.14.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.8.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.9", + "typescript": "^5.5.4", + "vite": "^5.3.5", + "vite-plugin-mkcert": "^1.17.5" }, "scripts": { "dev": "refine dev", diff --git a/client/public/apple-touch-icon.png b/client/public/apple-touch-icon.png index 7e9d051..1833783 100644 Binary files a/client/public/apple-touch-icon.png and b/client/public/apple-touch-icon.png differ diff --git a/client/public/favicon.svg b/client/public/favicon.svg index 99415c5..601770b 100644 --- a/client/public/favicon.svg +++ b/client/public/favicon.svg @@ -1,32 +1 @@ - - - -Created with Fabric.js 5.3.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - +Created with Fabric.js 5.3.0 \ No newline at end of file diff --git a/client/public/icon512_maskable.png b/client/public/icon512_maskable.png index 7e9d051..1833783 100644 Binary files a/client/public/icon512_maskable.png and b/client/public/icon512_maskable.png differ diff --git a/client/public/icon512_rounded.png b/client/public/icon512_rounded.png index 0ee322b..4b3a1a1 100644 Binary files a/client/public/icon512_rounded.png and b/client/public/icon512_rounded.png differ diff --git a/client/public/kofi_s_logo_nolabel.png b/client/public/kofi_s_logo_nolabel.png index 552f0a2..1ec535d 100644 Binary files a/client/public/kofi_s_logo_nolabel.png and b/client/public/kofi_s_logo_nolabel.png differ diff --git a/client/public/locales/cs/common.json b/client/public/locales/cs/common.json index dcdaa3d..00de426 100644 --- a/client/public/locales/cs/common.json +++ b/client/public/locales/cs/common.json @@ -28,7 +28,8 @@ "notAccessTitle": "Nemáte oprávnění k přístupu", "hideColumns": "Skrýt sloupce", "clearFilters": "Zrušit filtry", - "saveAndAdd": "Uložit a přidat" + "saveAndAdd": "Uložit a přidat", + "continue": "Pokračovat" }, "warnWhenUnsavedChanges": "Jste si jisti, že chcete odejít? Máte neuložené změny.", "notifications": { @@ -87,16 +88,27 @@ "none": "Žádný", "border": "Ohraničení", "grid": "Mřížka" - } + }, + "itemCopies": "Kopie položky", + "defaultSettings": "Výchozí", + "addSettings": "Přidat novou předvolbu", + "newSetting": "Nový", + "deleteSettings": "Smazat aktuální předvolbu", + "settingsName": "Název předvolby", + "settings": "Předvolby", + "deleteSettingsConfirm": "Opravdu chcete tuto předvolbu smazat?", + "duplicateSettings": "Duplikát", + "saveSetting": "Uložit předvolby", + "saveAsImage": "Uložit jako obrázek" }, "qrcode": { - "button": "Tisk QR kódů", - "title": "Tisk QR kódů", + "button": "Tisk štítků", + "title": "Tisk štítku", "spoolWeight": "Hmotnost cívky: {{weight}}", "lotNr": "Číslo šarže: {{lot}}", "bedTemp": "BT: {{temp}}", "extruderTemp": "ET: {{temp}}", - "textSize": "Velikost textu obsahu", + "textSize": "Velikost textu štítku", "showSpoolmanIcon": "Zobrazit ikonu Spoolman", "showVendor": "Výrobce", "showContent": "Tisk štítku", @@ -109,11 +121,19 @@ "useHTTPUrl": { "label": "Použít HTTP(S) URL", "tooltip": "Použít HTTP(S) odkaz v QR kódu. Pokud je vypnuto, použije se speciální kód, který půjde načíst pouze skrz skener v aplikaci Spoolman." + }, + "template": "Šablona štítku", + "templateHelp": "Pomocí {} vložíte hodnoty objektu cívky jako text. Například {id} bude nahrazeno ID cívky nebo {filament.material} bude nahrazeno materiálem cívky. Text uzavřete dvojitou hvězdičkou **, aby byl tučný. Kliknutím na tlačítko zobrazíte seznam všech dostupných značek.", + "showQRCode": "Tisk QR kódu", + "showQRCodeMode": { + "no": "Ne", + "simple": "Jednoduchý", + "withIcon": "S ikonou" } }, "spoolSelect": { "title": "Vybrat cívky", - "description": "Vyberte cívky pro tisk QR kódů.", + "description": "Vyberte cívky, pro které chcete tisknout štítky.", "showArchived": "Zobrazit archivované", "noSpoolsSelected": "Nevybrali jste žádné cívky.", "selectAll": "Vybrat/odebrat vše", @@ -148,13 +168,17 @@ "used_length": "Použitá délka", "remaining_length": "Zbývající délka", "location": "Umístění", - "lot_nr": "Číslo umístění", + "lot_nr": "Číslo šarže", "first_used": "První použití", "last_used": "Naposledy použitá", "registered": "Registrováno", "comment": "Komentář", "archived": "Archivováno", - "price": "Cena" + "price": "Cena", + "spool_weight": "Prázdná hmotnost", + "initial_weight": "Výchozí hmotnost", + "filament_internal": "Interní", + "filament_external": "Externí" }, "fields_help": { "weight_to_use": "Vyberte, jakou hodnotu hmotnosti chcete zadat. Naměřená hmotnost je k dispozici pouze v případě, že je pro vybraný filament nastavena hmotnost cívky.", @@ -163,7 +187,10 @@ "measured_weight": "Jaká je hmotnost filamentu a cívky.", "location": "Kde se cívka nachází, pokud máte více míst, kde cívky skladujete.", "lot_nr": "Číslo šarže výrobce. Lze použít k zajištění jednotné barvy tisku v případě použití více cívek.", - "price": "Cena celé cívky v měně nastavené v systému. Pokud není nastavena, předpokládá se cena filamentu." + "price": "Cena celé cívky. Pokud není nastavena, předpokládá se cena filamentu.", + "spool_weight": "Hmotnost prázdné cívky. Nechte prázdné, chcete-li použít hodnotu z filamentu nebo od výrobce.", + "initial_weight": "Počáteční hmotnost vlákna na cívce (čistá hmotnost). Pokud není nastavena, použije se hmotnost z objektu filament.", + "external_filament": "Vybrali jste filament z externí databáze. Objekt filamentu (a případně i objekt výrobce) se vytvoří automaticky při vytvoření této cívky. Tím se mohou vytvořit duplicitní objekty filamentů, pokud jste již objekt filamentu pro toto vlákno vytvořili." }, "titles": { "create": "Vytvořit cívku", @@ -172,14 +199,22 @@ "list": "Cívky", "show": "Zobrazit cívku", "archive": "Archivní cívka", - "show_title": "[Cívka #{{id}}] {{name}}" + "show_title": "[Cívka #{{id}}] {{name}}", + "adjust": "Nastavení cívky filamentu" }, "messages": { "archive": "Opravdu chcete tuto cívku archivovat?" }, "form": { "new_location_prompt": "Zadejte nové umístění", - "spool_updated": "Od otevření této stránky byla tato cívka někým/něčím aktualizována. Uložením se tyto změny přepíší!" + "spool_updated": "Od otevření této stránky byla tato cívka někým/něčím aktualizována. Uložením se tyto změny přepíší!", + "measurement_type": { + "length": "Délka", + "weight": "Hmotnost" + }, + "measurement_type_label": "Typ měření", + "adjust_filament_help": "Zde můžete přímo přidávat nebo odebírat filament z cívky. Kladná hodnota filament odebere, záporná hodnota ho přidá.", + "adjust_filament_value": "Spotřebované množství" } }, "filament": { @@ -201,15 +236,21 @@ "settings_extruder_temp": "Teplota extruderu", "settings_bed_temp": "Teplota podložky", "color_hex": "Barva", - "spools": "Zobrazit cívky" + "spools": "Zobrazit cívky", + "external_id": "Externí ID", + "single_color": "Jediný", + "coaxial": "Koextrudovaný", + "longitudinal": "Podélná", + "multi_color": "Více" }, "fields_help": { - "name": "Název filamentu, aby se tento typ filamentu odlišil od ostatních filamentů od stejného dodavatele. Měl by obsahovat například barvu.", + "name": "Název filamentu, aby se tento typ vlákna odlišil od ostatních filamentů od stejného výrobce. Měl by obsahovat například barvu.", "material": "Např. PLA, ABS, ASA, PETG, atd.", - "price": "Cena celé cívky v měně nastavené v systému.", + "price": "Cena celé cívky.", "weight": "Hmotnost plného cívky filamentu (čistá hmotnost). Tato hmotnost by neměla zahrnovat hmotnost samotné cívky, ale pouze filamentu. Obvykle se uvádí na obalu.", "spool_weight": "Hmotnost prázdné cívky. Slouží k určení naměřené hmotnosti cívky.", - "article_number": "Např. EAN, UPC, atd." + "article_number": "Např. EAN, UPC, atd.", + "multi_color_direction": "Filamenty mohou mít více barev dvěma způsoby: buď koextruzí jako dvoubarevná vlákna s konzistentními více barvami, nebo podélnými změnami barev jako gradientní vlákna, která mění barvy podél cívky." }, "titles": { "create": "Vytvořit filament", @@ -220,7 +261,9 @@ "show_title": "[Filament #{{id}}] {{name}}" }, "form": { - "filament_updated": "Toto vlákno bylo od doby, kdy jste otevřeli tuto stránku, někým/něčím aktualizováno. Uložením se tyto změny přepíší!" + "filament_updated": "Toto vlákno bylo od doby, kdy jste otevřeli tuto stránku, někým/něčím aktualizováno. Uložením se tyto změny přepíší!", + "import_external": "Import z externího zdroje", + "import_external_description": "Výběrem filamentu v seznamu se automaticky vyplní jeho údaje ve formuláři pro vytvoření filamentu. Tím se přepíší všechny údaje, které jste do formuláře zadali.

Po kliknutí na tlačítko OK se v případě potřeby automaticky vytvoří objekt Výrobce." }, "buttons": { "add_spool": "Přidat cívku" @@ -232,7 +275,9 @@ "id": "Id", "name": "Název", "registered": "Registrováno", - "comment": "Komentář" + "comment": "Komentář", + "empty_spool_weight": "Hmotnost prázdné cívky", + "external_id": "Externí ID" }, "titles": { "create": "Vytvořit výrobce", @@ -244,6 +289,9 @@ }, "form": { "vendor_updated": "Od otevření této stránky byl tento prodejce někým/něčím aktualizován. Uložením se tyto změny přepíší!" + }, + "fields_help": { + "empty_spool_weight": "Hmotnost prázdné cívky od tohoto výrobce." } }, "table": { @@ -286,7 +334,7 @@ "filament": "Značky vláken. Mají vlastnosti, jako je název, materiál, barva, průměr a další.", "spool": "Jednotlivé fyzické cívky určitého vlákna." }, - "description": "Nápověda

Zde je několik tipů, které vám pomohou začít.

Spoolman uchovává 3 různé typy dat:

Chcete-li do databáze přidat novou cívku, začněte vytvořením položky Filament objekt. Jakmile to uděláte, vytvořte položku Cívka popis pro danou cívku. Pokud později získáte další cívky stejného filamentu, jednoduše vygenerujte další objekty Cívky a znovu použijte stejný objekt Filament.

Volitelně můžete také vygenerovat Výrobce název společnosti vyrábějící vlákno, pokud si přejete tyto informace sledovat.

Máte možnost propojit se Spoolmanem další služby 3D tiskárny, například Moonraker, který může automaticky sledovat využití filamentu a aktualizovat objekty Cívek za vás. Pokyny k nastavení najdete v Spoolman README.

", + "description": "Nápověda

Zde je několik tipů, které vám pomohou začít.

Spoolman ukládá 3 různé typy dat:

Chcete-li do databáze přidat novou cívku, začněte vytvořením položky Filament . Jakmile to uděláte, vytvořte položku Cívka s popisem pro danou cívku. Pokud později získáte další cívky stejného filamentu, jednoduše vygenerujte další Cívku a použijte opět stejný Filament.

Volitelně můžete také vygenerovat Výrobce název společnosti vyrábějící filamenty, pokud si přejete tyto informace sledovat.

Máte možnost propojit se Spoolmanem další služby 3D tiskárny, například Moonraker, který může automaticky sledovat využití filamentu a aktualizovat dané Cívky za vás. Pokyny k nastavení najdete v Spoolman README.

", "help": "Nápověda" }, "kofi": "Příspěvek autorovi na Ko-fi", @@ -335,6 +383,7 @@ "label": "URL pro QR kódy", "tooltip": "Základ URL pro generování QR kódů. Pokud můžete přistupovat ke svému Spoolmanovi přes více URL, nastavte zde vaší 'kanonickou' URL instance Spoolmana." } - } + }, + "settings": "Nastavení" } } diff --git a/client/public/locales/da/common.json b/client/public/locales/da/common.json index fe0ed14..4291941 100644 --- a/client/public/locales/da/common.json +++ b/client/public/locales/da/common.json @@ -16,7 +16,9 @@ "bedTemp": "BT: {{temp}}", "lotNr": "Gruppe nr: {{lot}}", "showFilamentComment": "Filament kommentarer", - "button": "Print QR koder" + "button": "Print QR koder", + "template": "Skabelon", + "templateHelp": "Brug {} til at indsætte værdier for spolen som tekst. For eksempen vil {id} blive erstattet med spolens id, eller {filament.material} vil blive erstattet med materialet på spolen. Omgiv teksten med dobbelte asterisk ** for at gøre teksten fed. Klik på knappen for at vise en liste med mulige tags." }, "generic": { "printerMarginBottom": "Safe-Zone bund", @@ -48,7 +50,15 @@ "showBorder": "Vis ramme", "printerMarginLeft": "Safe-Zone venstre", "dimensions": "Dimensioner", - "print": "Udskriv" + "print": "Udskriv", + "settings": "Indstillinger", + "defaultSettings": "Standard", + "addSettings": "Tilføj ny indstilling", + "newSetting": "Ny", + "deleteSettings": "Slet nuværende indstilling", + "deleteSettingsConfirm": "Er du sikker på du vil slette denne indstilling?", + "settingsName": "Indstillingsnavn", + "itemCopies": "Kopier" }, "spoolSelect": { "selectedTotal_one": "{{count}} spole valgt", @@ -62,11 +72,11 @@ }, "documentTitle": { "vendor": { - "create": "Opret sælger | Spoolman", - "clone": "#{{id}} Klon sælger | Spoolman", - "edit": "#{{id}} Redigér sælger | Spoolman", - "list": "Sælgere | Spoolman", - "show": "#{{id}} Vis sælger | Spoolman" + "create": "Opret producent | Spoolman", + "clone": "#{{id}} Klon producent | Spoolman", + "edit": "#{{id}} Redigér producent | Spoolman", + "list": "Producenter | Spoolman", + "show": "#{{id}} Vis producent | Spoolman" }, "default": "Spoolman", "spool": { @@ -110,7 +120,11 @@ "used_weight": "Brugt vægt", "id": "ID", "remaining_weight": "Resterende vægt", - "price": "Pris" + "price": "Pris", + "initial_weight": "Startvægt", + "spool_weight": "Tom vægt", + "filament_internal": "Intern", + "filament_external": "Ekstern" }, "titles": { "archive": "Arkivér spole", @@ -132,7 +146,10 @@ "lot_nr": "Producentens \"batchnummer\". Kan bruges til at sikre ensartede farver ved brug af flere ruller.", "remaining_weight": "Hvor meget filament er der tilbage på spolen. For en ny spole bør dette matches spolens vægt.", "location": "Placering af spolen. Hvis du har flere lokationer.", - "price": "Pris for en fuld spole, i den i systemet konfigurerede valuta. Hvis ikke indstillet, vil prisen bliver estimeret." + "price": "Pris for en fuld spole. Hvis ikke indstillet, vil prisen bliver estimeret.", + "external_filament": "Du har valgt et Filament fra den eksterne database, Et Filament (og muligvis en Producent) vil blive oprettet automatisk når du gemmer denne spole. Dette kan oprette duplikerede objekter, hvis du allerede har dette filament oprettet.", + "initial_weight": "Startvægten af filament på spolen (nettovægt). Bruger filamentets standardvægt hvis ikke angivet.", + "spool_weight": "Vægten af spolen når den er tom. Et tomt felt vil bruge værdien fra Filament eller Producent." }, "spool": "Spoler", "messages": { @@ -168,13 +185,14 @@ "name": "Filament navn, for at adskille dette filament fra andre fra samme producent. Kan for eksempel indeholde farven.", "article_number": "f.eks. EAN, UPC osv.", "spool_weight": "Vægten af en tom spole. Bruges til at angive den målte vægt af en spole.", - "price": "Pris for en ny spole i systemets valutaenhed.", + "price": "Pris for en ny spole.", "weight": "Filamentets vægt på en ny spole (Netto vægt). Dette bør ikke inkludere vægten af selve spolen, kun filamentet. Det er som regel den angivne vægt på pakken.", - "material": "f.eks. PLA, ABS, PETG osv." + "material": "f.eks. PLA, ABS, PETG osv.", + "multi_color_direction": "Filamenter kan have flere farver på to måder: Enten koaksialt, som 2- & 3-farvede filamenter med vedvarende flerfarvethed, eller gennem længdeværts ændringer, som regnbuefilamenter, hvor farven skifter undervejs på spolen." }, "fields": { "material": "Materiale", - "vendor_name": "Sælger", + "vendor_name": "Producent", "settings_extruder_temp": "Extruder temperatur", "comment": "Kommentar", "diameter": "Diameter", @@ -184,12 +202,17 @@ "name": "Navn", "price": "Pris", "settings_bed_temp": "Bed temperatur", - "vendor": "Sælger", + "vendor": "Producent", "density": "Massefylde", "id": "ID", "color_hex": "Farve", "article_number": "Produkt nummer", - "spools": "Vis spoler" + "spools": "Vis spoler", + "external_id": "Eksternt ID", + "longitudinal": "Længdeværts", + "multi_color": "Flerfarvet", + "coaxial": "Koaksialt", + "single_color": "Enkeltfarvet" }, "titles": { "clone": "Klon filament", @@ -200,9 +223,14 @@ "list": "Filamenter" }, "form": { - "filament_updated": "Dette filament er blevet redigeret af nogen/noget andet siden du åbnede denne side. Hvis du gemmer overskrives disse ændringer!" + "filament_updated": "Dette filament er blevet redigeret af nogen/noget andet siden du åbnede denne side. Hvis du gemmer overskrives disse ændringer!", + "import_external": "Importér fra Eksternt", + "import_external_description": "Vælg et filament på listen for automatisk at udfylde formularen. Dette vil overskrive alle data du allerede har indtastet i formularen.

En Producent vil blive oprettet automatisk hvis nødvendigt, når du klikker OK." }, - "filament": "Filamenter" + "filament": "Filamenter", + "buttons": { + "add_spool": "Tilføj spole" + } }, "actions": { "create": "Opret", @@ -213,23 +241,28 @@ }, "vendor": { "titles": { - "show_title": "[Sælger #{{id}}] {{name}}", - "show": "Vis sælger", - "edit": "Redigér sælger", - "clone": "Klon sælger", - "create": "Opret sælger", - "list": "Sælgere" + "show_title": "[Producent #{{id}}] {{name}}", + "show": "Vis producent", + "edit": "Redigér producent", + "clone": "Klon producent", + "create": "Opret producent", + "list": "Producenter" }, "form": { - "vendor_updated": "Denne sælger er blevet redigeret af nogen/noget andet siden du åbnede denne side. Hvis du gemmer overskrives disse ændringer!" + "vendor_updated": "Denne producent er blevet redigeret af nogen/noget andet siden du åbnede denne side. Hvis du gemmer overskrives disse ændringer!" }, "fields": { "registered": "Registreret", "comment": "Kommentar", "name": "Navn", - "id": "ID" + "id": "ID", + "external_id": "Eksternt ID", + "empty_spool_weight": "Tom Spolevægt" }, - "vendor": "Sælgere" + "vendor": "Producenter", + "fields_help": { + "empty_spool_weight": "Vægten af en tom spole fra denne producent." + } }, "scanner": { "title": "QR kode skanner", @@ -253,7 +286,9 @@ "success": "Succes", "editSuccess": "Redigering af {{resource}} lykkedes", "deleteError": "Fejl ved sletning af {{resource}} (status kode: {{statusCode}})", - "createSuccess": "Oprettelse af {{resource}} lykkedes" + "createSuccess": "Oprettelse af {{resource}} lykkedes", + "saveSuccessful": "Gemt!", + "validationError": "Kunne ikke gennemføres: {{error}}" }, "no": "Nej", "unknown": "Ukendt", @@ -276,11 +311,52 @@ "filament": "Filament mærker. De har værdier såsom Navn, Materiale, Farve, Diameter m.fl.", "spool": "Individuelle fysiske spoler af et specifikt filament." }, - "description": "Hjælp

Her er nogle tips til at komme i gang.

Spoolman indeholder 3 forskellige typer data:

For at tilføje en ny spole til databasen, skal du starte med at oprette et Filament objekt. Når dette er gjort, fortsættes der ved at oprette et Spole objekt for den specifikke spole. Hvis du har flere spoler af samme filament, opretter du blot et nyt spole objekt og genbruger samme filament.

Du har også mulighed for at oprette et Forhandler objekt for firmaet der producerer filamentet, hvis du ønsker.

Du har mulighed for at linke andre 3D printer services til Spoolman, Som f.eks. Moonraker. Dette giver mulighed for automatisk at opdatere og overvåge forbruget af filament for hvert print. Læs Spoolman README for information om opsætning af dette.

", + "description": "Hjælp

Her er nogle tips til at komme i gang.

Spoolman indeholder 3 forskellige typer data:

For at tilføje en ny spole til databasen, skal du starte med at oprette et Filament objekt. Når dette er gjort, fortsættes der ved at oprette et Spole objekt for den specifikke spole. Hvis du har flere spoler af samme filament, opretter du blot et nyt spole objekt og genbruger samme filament.

Du har også mulighed for at oprette et Producent objekt for firmaet der producerer filamentet, hvis du ønsker.

Du har mulighed for at linke andre 3D printer services til Spoolman, Som f.eks. Moonraker. Dette giver mulighed for automatisk at opdatere og overvåge forbruget af filament for hvert print. Læs Spoolman README for information om opsætning af dette.

", "help": "Hjælp" }, "kofi": "Donér på Ko-fi", "home": { "home": "Hjem" + }, + "settings": { + "header": "Indstillinger", + "general": { + "tab": "Generelt", + "currency": { + "label": "Valuta" + } + }, + "extra_fields": { + "params": { + "key": "Nøgle", + "name": "Navn", + "field_type": "Type", + "unit": "Enhed", + "order": "Sortering", + "default_value": "Standard-værdi", + "multi_choice": "Multi-valg", + "choices": "Valgmuligheder" + }, + "field_type": { + "integer_range": "Heltals spænd", + "float": "Decimaltal", + "float_range": "Decimaltal spænd", + "datetime": "Dato-tid", + "boolean": "Boolean (Ja/Nej)", + "choice": "Valg", + "text": "Tekst", + "integer": "Heltal" + }, + "choices_missing_error": "Du kan ikke fjerne valg. De følgende valg mangler: {{choices}}", + "tab": "Ekstra felter", + "description": "

Her kan du tilføje ekstra felter til dine poster.

Når et felt er tilføjet kan du ikke redigere Nøgle og Type, og for visse felttyper kan du ikke fjerne valg, eller ændre multi-valgs status. Hvis du fjerner et felt, vil associerede data i alle poster blive slettet.

Nøglen er hvad andre programmer læser/skriver data som, så hvis dit felt skal integreres med en tredje parts program, skal du sørge for at indstille det korrekt. Standard-værdi bliver kun tilføjet til nye felter.

Ekstra felter kan ikke bruges til sortering eller filtrering i oversigterne.

", + "boolean_true": "Ja", + "boolean_false": "Nej", + "non_unique_key_error": "Nøglen skal være Unik.", + "key_not_changed": "Ændr venligst nøglen til noget andet.", + "delete_confirm": "Slet felt: {{name}}?", + "delete_confirm_description": "Dette vil slette feltet samt alle associerede data for alle poster." + }, + "settings": "Indstillinger" } } diff --git a/client/public/locales/de/common.json b/client/public/locales/de/common.json index f334b2b..42490aa 100644 --- a/client/public/locales/de/common.json +++ b/client/public/locales/de/common.json @@ -13,38 +13,40 @@ "delete": "Löschen", "edit": "Bearbeiten", "cancel": "Abbrechen", - "confirm": "Sicher?", + "confirm": "bist du sicher?", "filter": "Filter", - "clear": "Löschen", + "clear": "Bereinigen", "refresh": "Aktualisieren", "show": "Anzeigen", "undo": "Rückgängig", "import": "Importieren", "clone": "Duplizieren", - "notAccessTitle": "Keine Berechtigung, um hierauf zuzugreifen", - "hideColumns": "Spalten anpassen", - "clearFilters": "Filter leeren", + "notAccessTitle": "Du hast keine Zugriffsberechtigung", + "hideColumns": "Spalten ausblenden", + "clearFilters": "Filter bereinigen", "showArchived": "Archivierte anzeigen", - "archive": "Archivieren", + "archive": "Archiv", "hideArchived": "Archivierte verstecken", - "unArchive": "Archivieren rückgängig", - "saveAndAdd": "Speichern und hinzufügen" + "unArchive": "Archivieren rückgängig machen", + "saveAndAdd": "Speichern und hinzufügen", + "continue": "Weiter" }, - "warnWhenUnsavedChanges": "Sicher? Nicht gespeicherte Änderungen gehen verloren.", + "warnWhenUnsavedChanges": "Bist du sicher, dass du die Seite verlassen willst? Du hast ungespeicherte Änderungen.", "notifications": { - "success": "Erfolg", + "success": "Erfolgreich", "error": "Fehler (status code: {{statusCode}})", "undoable": "Noch {{seconds}} Sekunden um die Aktion rückgängig zu machen.", "createSuccess": "{{resource}} erfolgreich erstellt", - "createError": "Fehler beim Erstellen {{resource}} (status code: {{statusCode}})", + "createError": "Fehler beim erstellen von {{resource}} (status code: {{statusCode}})", "deleteSuccess": "{{resource}} erfolgreich gelöscht", - "deleteError": "Fehler beim Löschen {{resource}} (status code: {{statusCode}})", + "deleteError": "Fehler beim löschen von {{resource}} (status code: {{statusCode}})", "editSuccess": "{{resource}} erfolgreich bearbeitet", - "editError": "Fehler beim Bearbeiten {{resource}} (status code: {{statusCode}})", + "editError": "Fehler beim bearbeiten von {{resource}} (status code: {{statusCode}})", "importProgress": "{{processed}}/{{total}} importiert", - "saveSuccessful": "Erfolgreich gesichert!" + "saveSuccessful": "Erfolgreich gespeichert!", + "validationError": "Validierungsfehler: {{error}}" }, - "loading": "Laden", + "loading": "Läd", "version": "Version", "unknown": "Unbekannt", "yes": "Ja", @@ -57,19 +59,19 @@ }, "printing": { "generic": { - "title": "Drucken", - "description": "Einstellungen unten anpassen, um das gewünschte Drucklayout zu erstellen. Der Drucker oder das Betriebssystem fügen möglichweise eigene Abstände und Skalierungen hinzu. Eventuell muss ein wenig experimentiert werden, bevor alles korrekt funktioniert. Auf normalem Papier testen, bevor auf Label-Papier gedruckt wird.", - "helpMargin": "Abstände sollten so konfiguriert werden, dass sie zum Papier und Drucker passen. Änderungen beeinflussen die Größe des gesamten Gitters.", - "helpPrinterMargin": "Der Sicherheitsabstand sollte so eingestellt werden, wie dicht der Drucker am Rand des Papiers drucken kann. Änderungen beeinflussen nicht die Größe des Gitters.", + "title": "druckt", + "description": "Passe die Einstellungen unten an, um das gewünschte Drucklayout zu bekommen. Denk daran, dass Drucker und dein OS eigene Abstände und Skalierungen anwenden könnte, also musst du vielleicht ein bisschen ausprobieren, bis alles passt. Teste es auf einem normalen Blatt Papier, bevor du auf die richtigen Labels druckst.", + "helpMargin": "Abstände sollten so konfiguriert werden, dass sie zum Papier und Drucker passen. Änderungen beeinflussen die Abmessungen des gesamten Gitters.", + "helpPrinterMargin": "Der Sicherheitsabstand sollte so eingestellt werden, wie dicht der Drucker am Rand des Papiers drucken kann. Änderungen beeinflussen nicht die Abmessungen des Gitters.", "print": "Drucken", "columns": "Spalten", - "rows": "Reihen", + "rows": "Zeilen", "paperSize": "Papiergröße", "customSize": "Benutzerdefiniert", "dimensions": "Dimensionen", - "showBorder": "Rahmen anzeigen", + "showBorder": "Ränder anzeigen", "previewScale": "Vorschau-Skalierung", - "skipItems": "Elemente überspringen", + "skipItems": "Objekt überspringen", "contentSettings": "Einstellungen: Inhalt", "layoutSettings": "Einstellungen: Layout", "horizontalSpacing": "Horizontaler Abstand", @@ -84,17 +86,28 @@ "printerMarginBottom": "Sicherheitsabstand Unten", "borders": { "none": "Keine", - "border": "Rahmen", + "border": "Ränder", "grid": "Gitter" - } + }, + "saveAsImage": "Als Bild speichern", + "settings": "Vorlage", + "defaultSettings": "Standard", + "addSettings": "Neue Vorlage hinzufügen", + "newSetting": "Neu", + "deleteSettings": "Aktuelle Vorlage löschen", + "deleteSettingsConfirm": "Bist du dir sicher, dass du diese Vorlage löschen willst?", + "settingsName": "Vorlagenname", + "itemCopies": "Anzahl der Kopien", + "duplicateSettings": "Kopie erstellen", + "saveSetting": "Vorlage speichern" }, "qrcode": { - "button": "QR-Codes drucken", - "title": "QR Codes Drucken", + "button": "Beschriftung drucken", + "title": "Beschriftung drucken", "spoolWeight": "Gewicht Spule: {{weight}}", - "lotNr": "Ch. Nr: {{lot}}", + "lotNr": "Lot. Nr: {{lot}}", "bedTemp": "BT: {{temp}}", - "extruderTemp": "DT: {{temp}}", + "extruderTemp": "ET: {{temp}}", "textSize": "Textgröße Label", "showSpoolmanIcon": "Spoolman Icon anzeigen", "showVendor": "Hersteller", @@ -104,13 +117,21 @@ "showTemperatures": "Temperaturen", "showSpoolComment": "Kommentar: Spule", "showFilamentComment": "Kommentar: Filament", - "showVendorComment": "Kommentar: Hersteller" + "showVendorComment": "Kommentar: Hersteller", + "showQRCodeMode": { + "no": "Nein", + "simple": "Einfach", + "withIcon": "Mit Icon" + }, + "template": "Beschriftung Vorlagen", + "templateHelp": "Benutze {} um Texte der Spule dynamisch zu übernehmen. Zum Beispiel wird {id} durch die ID der Spule ersetzt, {filament.material} wird durch das Material der Spule ersetzt. Texte zwischen zwei Sternen ** werden fett dargestellt. Drücke auf den Knopf um alle verfügbaren Variablen zu sehen.", + "showQRCode": "Drucke QR Code" }, "spoolSelect": { "title": "Spulenauswahl", "description": "Spulen auswählen, für die ein QR-Code gedruckt werden soll.", "showArchived": "Archivierte anzeigen", - "noSpoolsSelected": "Keine Spulen ausgewählt.", + "noSpoolsSelected": "Du hast keine Spulen ausgewählt.", "selectAll": "Alle aus-/abwählen", "selectedTotal_one": "{{count}} Spule ausgewählt", "selectedTotal_other": "{{count}} Spulen ausgewählt" @@ -118,7 +139,7 @@ }, "scanner": { "title": "QR-Code Scanner", - "description": "Spoolman QR-Code scannen, um Details zur Spule anzuzeigen.", + "description": "Spoolman QR-Code scannen, um Details der Spule anzuzeigen.", "error": { "notAllowed": "Zugriff auf Kamera wurde nicht erlaubt.", "insecureContext": "Die Seite wird nicht über HTTPS bereitgestellt.", @@ -148,16 +169,23 @@ "registered": "Registriert", "comment": "Kommentar", "archived": "Archiviert", - "price": "Preis" + "price": "Preis", + "initial_weight": "Anfangsgewicht", + "spool_weight": "Leergewicht", + "filament_internal": "Intern", + "filament_external": "Extern" }, "fields_help": { - "weight_to_use": "Auswählen welches Gewicht verwendet werden soll. \"Gemessenes Gewicht\" ist nur verfügbar, wenn das Gewicht der Spule für das Filament hinterlegt ist.", + "weight_to_use": "Auswählen, welches Gewicht verwendet werden soll. Das gemessenes Gewicht ist nur verfügbar, wenn das Gewicht der Spule für das Filament hinterlegt ist.", "used_weight": "Wie viel Gewicht bereits verbraucht wurde z.B. 0g für eine neue Spule.", "remaining_weight": "Wie viel Filament noch auf der Spule ist. Entspricht dem auf der Spule angegeben Nettogewicht, wenn die Spule neu ist.", "measured_weight": "Gesamtgewicht von Spule und Filament.", "location": "Ort, an dem die Spule gelagert wird.", "lot_nr": "Chargennummer des Herstellers. Kann verwendet werden um gleichmäßige Farben zu garantieren, wenn mehrere Spulen verwendet werden.", - "price": "Preis einer vollen Spule in der im System konfigurierten Währung. Falls nicht ausgewählt, wird der Preis des Filaments geschätzt." + "price": "Preis einer vollen Spule. Falls nicht ausgewählt, wird der Preis des Filaments geschätzt.", + "initial_weight": "Das Anfangsgewicht des Filaments (Nettogewicht) auf der Spule. Wenn nicht gesetzt, dann wird der Wert aus dem Filament Objekt genutzt.", + "spool_weight": "Das Gewicht der leeren Spule. Leer lassen um das Gewicht vom Hersteller zu nutzen.", + "external_filament": "Sie haben ein Filament aus der externen Datenbank ausgewählt. Ein Filamentobjekt (und möglicherweise ein Herstellerobjekt) wird automatisch erstellt, wenn Sie diese Spule erstellen. Dadurch können doppelte Filamentobjekte entstehen, wenn Sie bereits ein Filamentobjekt für dieses Filament erstellt haben." }, "titles": { "create": "Spule erstellen", @@ -166,14 +194,21 @@ "list": "Spulen", "show": "Spule anzeigen", "archive": "Spule archivieren", - "show_title": "[Spule #{{id}}] {{name}}" + "show_title": "[Spule #{{id}}] {{name}}", + "adjust": "Filamentspulen Anpassung" }, "messages": { "archive": "Sicher das die Spule archiviert werden soll?" }, "form": { "spool_updated": "Diese Spule wurde, seit dem die Seite geöffnet wurde, von jemand anderem/etwas anderem bearbeitet. Speichern wird diese Änderungen überschreiben!", - "new_location_prompt": "Neue Position eingeben" + "new_location_prompt": "Neue Position eingeben", + "adjust_filament_help": "Hier kannst du direkt Filament von der Spule hinzufügen oder entfernen. Eine positive Eingabe wird Filament als verbraucht markieren, eine negative wird es der Spule hinzufügen.", + "measurement_type": { + "length": "Länge", + "weight": "Gewicht" + }, + "adjust_filament_value": "Verbrauchte Menge" } }, "filament": { @@ -195,7 +230,10 @@ "settings_extruder_temp": "Düsentemperatur", "settings_bed_temp": "Betttemperatur", "color_hex": "Farbe", - "spools": "Zeige Spulen" + "spools": "Zeige Spulen", + "external_id": "Externe ID", + "single_color": "Einfarbig", + "multi_color": "Mehrfarbig" }, "fields_help": { "name": "Name des Filaments um es von anderen Typen des gleichen Herstellers zu unterscheiden. Sollte z.B. die Farbe enthalten.", @@ -214,7 +252,12 @@ "show_title": "[Filament #{{id}}] {{name}}" }, "form": { - "filament_updated": "Dieses Filament wurde, seit dem die Seite geöffnet wurde, von jemand anderem/etwas anderem bearbeitet. Speichern wird diese Änderungen überschreiben!" + "filament_updated": "Dieses Filament wurde, seit dem die Seite geöffnet wurde, von jemand anderem/etwas anderem bearbeitet. Speichern wird diese Änderungen überschreiben!", + "import_external": "Importieren von extern", + "import_external_description": "Wählen Sie ein Filament in der Liste aus, um dessen Details automatisch in das Formular zur Filamenterstellung einzutragen. Dadurch werden alle Daten, die Sie in das Formular eingegeben haben, überschrieben.

Wenn Sie auf Ok klicken, wird automatisch ein Herstellerobjekt erstellt, falls erforderlich." + }, + "buttons": { + "add_spool": "Spule hinzufügen" } }, "vendor": { @@ -223,18 +266,23 @@ "id": "ID", "name": "Name", "registered": "Registriert", - "comment": "Kommentar" + "comment": "Kommentar", + "empty_spool_weight": "Gewicht der leeren Spule", + "external_id": "Externe ID" }, "titles": { "create": "Hersteller erstellen", "clone": "Hersteller duplizieren", "edit": "Hersteller bearbeiten", - "list": "Hersteller", + "list": "Herstellerliste", "show": "Hersteller anzeigen", - "show_title": "[Marke #{{id}}] {{name}}" + "show_title": "[Hersteller #{{id}}] {{name}}" }, "form": { - "vendor_updated": "Diese Marke wurde, seit dem die Seite geöffnet wurde, von jemand anderem/etwas anderem bearbeitet. Speichern wird diese Änderungen überschreiben!" + "vendor_updated": "Dieser Hersteller wurde, seit dem die Seite geöffnet wurde, von jemand anderem/etwas anderem bearbeitet. Speichern wird diese Änderungen überschreiben!" + }, + "fields_help": { + "empty_spool_weight": "Das Gewicht einer leeren Spule von diesem Hersteller." } }, "table": { @@ -258,7 +306,7 @@ "clone": "#{{id}} Spule duplizieren | Spoolman" }, "vendor": { - "list": "Hersteler | Spoolman", + "list": "Hersteller | Spoolman", "show": "#{{id}} Hersteller anzeigen | Spoolman", "edit": "#{{id}} Hersteller bearbeiten | Spoolman", "create": "Herstellen erstellen | Spoolman", @@ -298,15 +346,31 @@ "name": "Name", "field_type": "Typ", "unit": "Einheit", - "default_value": "Standardwert" + "default_value": "Standardwert", + "order": "Reihenfolge", + "multi_choice": "mehrfach Auswahl", + "key": "Schlüssel", + "choices": "Auswahlmöglichkeiten" }, "field_type": { "text": "Text", - "float": "Dezimalzahl" + "float": "Dezimalzahl", + "integer": "Ganze Zahl", + "choice": "Auswahl", + "integer_range": "Ganzzahlbereich", + "boolean": "Wahr/Falsch", + "float_range": "Float-Bereich", + "datetime": "Datum und Uhrzeit" }, "boolean_true": "Ja", "boolean_false": "Nein", - "delete_confirm": "Feld {{name}} entfernen?" - } + "delete_confirm": "Feld {{name}} entfernen?", + "description": "

Hier können Sie zusätzliche benutzerdefinierte Felder zu Ihren Elementen hinzufügen.

Nach dem Hinzufügen eines Feldes können Sie dessen Schlüssel oder Typ nicht mehr ändern, und bei Auswahlfeldern können Sie keine Auswahlmöglichkeiten entfernen oder den Mehrfachauswahlstatus ändern. Wenn Sie ein Feld entfernen, werden die zugehörigen Daten für alle Elemente gelöscht.

Der Schlüssel ist derjenige, unter dem andere Programme die Daten lesen/schreiben, wenn Ihr benutzerdefiniertes Feld also mit einem Programm eines Drittanbieters integriert werden soll, stellen Sie sicher, dass Sie ihn richtig einstellen. Der Standardwert wird nur auf neue Elemente angewendet.

Zusätzliche Felder können in den Tabellenansichten nicht sortiert oder gefiltert werden.

", + "choices_missing_error": "Du kannst die Auswahl nicht entfernen. Folgende Auswahlmöglichkeiten fehlen: {{choices}}", + "key_not_changed": "Bitte ändere den Schlüssel auf einen anderen Wert.", + "delete_confirm_description": "Dieses Feld und alle damit verbundenen Einträge werden gelöscht.", + "non_unique_key_error": "Der Schlüssel muss einzigartig sein." + }, + "settings": "Einstellungen" } } diff --git a/client/public/locales/el/common.json b/client/public/locales/el/common.json index cb1a54e..490b9a3 100644 --- a/client/public/locales/el/common.json +++ b/client/public/locales/el/common.json @@ -110,7 +110,9 @@ "used_weight": "Χρησιμοποιημένο Βάρος", "id": "Α/Α", "remaining_weight": "Υπολειπόμενο Βάρος", - "price": "" + "price": "Τιμή", + "spool_weight": "Βάρος Κενού Καρουλιού", + "initial_weight": "Αρχικό Βάρος" }, "titles": { "archive": "Αρχειοθέτηση Καρουλιού", @@ -132,7 +134,7 @@ "lot_nr": "Αριθμός παρτίδας κατασκευαστή. Μπορεί να χρησιμοποιηθεί για να διασφαλιστεί ότι μια εκτύπωση έχει σταθερό χρώμα εάν χρησιμοποιούνται πολλαπλά καρούλια.", "remaining_weight": "Πόσο νήμα έχει απομείνει στο καρούλι. Για ένα καινούργιο καρούλι αυτό πρέπει να συμπίπτει με το βάρος του καρουλιού.", "location": "Που βρίσκεται το καρούλι, εάν υπάρχουν πολλαπλά σημεία αποθήκευσης για τα καρούλια.", - "price": "" + "price": "Τιμή πλήρους καρουλιού. Εάν δεν οριστεί, η τιμή του νήματος θα θεωρηθεί αντ' αυτού." }, "spool": "Καρούλια", "messages": { @@ -168,7 +170,7 @@ "name": "Όνομα νήματος, για να διακρίνει αυτόν τον τύπο νήματος μεταξύ άλλων από τον ίδιο προμηθευτή. Θα πρέπει να περιέχει το χρώμα για παράδειγμα.", "article_number": "Π.χ. EAN, UPC, κλπ.", "spool_weight": "Το βάρος ενός άδειου καρουλιού. Χρησιμοποιείται για τον προσδιορισμό του μετρημένου βάρους ενός καρουλιού.", - "price": "Τιμή ενός πλήρους καρουλιού στο νόμισμα που έχει διαμορφωθεί από το σύστημα.", + "price": "Τιμή ενός πλήρους καρουλιού.", "weight": "Το βάρος του νήματος ενός πλήρους καρουλιού (καθαρό βάρος). Αυτό δεν πρέπει να περιλαμβάνει το βάρος του ίδιου του καρουλιού, μόνο το βάρος του νήματος. Είναι αυτό που συνήθως αναγράφεται στη συσκευασία.", "material": "Π.χ. PLA, ABS, PETG, κλπ." }, @@ -202,7 +204,10 @@ "form": { "filament_updated": "Αυτό το νήμα έχει ενημερωθεί από κάποιον/κάτι άλλο από τότε που ανοίξατε αυτήν τη σελίδα. Η αποθήκευση θα αντικαταστήσει αυτές τις αλλαγές!" }, - "filament": "Νήματα" + "filament": "Νήματα", + "buttons": { + "add_spool": "Προσθήκη Καρουλιού" + } }, "actions": { "create": "Δημιουργία", @@ -253,7 +258,9 @@ "success": "Επιτυχής", "editSuccess": "Επιτυχής τροποποίηση του {{resource}}", "deleteError": "Σφάλμα κατά τη διαγραφή του {{resource}} (status code: {{statusCode}})", - "createSuccess": "Δημιουργήθηκε επιτυχώς {{resource}}" + "createSuccess": "Δημιουργήθηκε επιτυχώς {{resource}}", + "saveSuccessful": "Επιτυχής Αποθήκευση!", + "validationError": "Κείμενο σφάλματος που εμφανίζεται εάν η φόρμα είχε προβλήματα κατά την υποβολή {{error}}" }, "no": "Όχι", "unknown": "Άγνωστος", @@ -282,5 +289,46 @@ "kofi": "Φιλοδώρημα στο Ko-fi", "home": { "home": "Αρχική" + }, + "settings": { + "extra_fields": { + "params": { + "default_value": "Προεπιλεγμένη τιμή", + "name": "Όνομα", + "field_type": "Τύπος", + "choices": "Επιλογές", + "multi_choice": "Πολλαπλή επιλογή", + "unit": "Μονάδα", + "order": "Σειρά", + "key": "Κλειδί" + }, + "field_type": { + "float_range": "\"Float Range\" πληκτρολογήστε επιπλέον πεδίο, ένα εύρος δύο αριθμών με δεκαδικούς αριθμούς", + "choice": "\"Choice\" πληκτρολογήστε επιπλέον πεδίο, οι χρήστες μπορούν να επιλέξουν από μια λίστα τιμών", + "text": "Πληκτρολογήστε επιπλέον πεδίο \"Text\".", + "datetime": "Πληκτρολογήστε επιπλέον πεδίο \"Date+Time\"", + "boolean": "Πρόσθετο πεδίο τύπου \"Boolean\", Ναι/Όχι", + "integer": "\"Integer\" πληκτρολογήστε επιπλέον πεδίο, ακέραιο αριθμό χωρίς δεκαδικούς αριθμούς", + "float": "\"Float\" πληκτρολογήστε επιπλέον πεδίο, έναν αριθμό με δεκαδικούς αριθμούς", + "integer_range": "\"Integer Range\" πληκτρολογήστε επιπλέον πεδίο, ένα εύρος δύο ακέραιων αριθμών χωρίς δεκαδικoύς αριθμούς" + }, + "non_unique_key_error": "Το κλειδί πρέπει να είναι μοναδικό.", + "key_not_changed": "Παρακαλώ αλλάξτε το κλειδί σε κάποιο άλλο.", + "delete_confirm": "Διαγραφή πεδίου {{name}};", + "tab": "Επιπλέον Πεδία", + "boolean_true": "Τιμή για ένα πρόσθετο πεδίο boolean Αληθές", + "boolean_false": "Τιμή για ένα πρόσθετο πεδίο boolean Λανθασμένο", + "choices_missing_error": "Δεν μπορείτε να αφαιρέσετε επιλογές. Λείπουν οι ακόλουθες επιλογές: {{choices}}", + "description": "

Εδώ μπορείτε να προσθέσετε επιπλέον προσαρμοσμένα πεδία στις οντότητες σας.

Μόλις προστεθεί ένα πεδίο, δεν μπορείτε να αλλάξετε το κλειδί ή τον τύπο του και για στα πεδία τύπου επιλογής δεν μπορείτε να αφαιρέσετε επιλογές ή να αλλάξετε την κατάσταση πολλαπλών επιλογών. Εάν καταργήσετε ένα πεδίο, τα συσχετισμένα δεδομένα για όλες τις οντότητες θα διαγραφούν.

Το κλειδί είναι πώς τα άλλα προγράμματα διαβάζουν/εγγράφουν τα δεδομένα, οπότε αν το προσαρμοσμένο πεδίο σας υποτίθεται ότι ενσωματώνεται με ένα πρόγραμμα τρίτου κατασκευαστή, φροντίστε να το ρυθμίσετε σωστά. Η προεπιλεγμένη τιμή εφαρμόζεται μόνο σε νέα στοιχεία.

Τα πρόσθετα πεδία δεν μπορούν να ταξινομηθούν ή να φιλτραριστούν στις προβολές πίνακα.

", + "delete_confirm_description": "Με αυτόν τον τρόπο θα διαγραφεί το πεδίο και όλα τα σχετικά δεδομένα για όλες τις οντότητες." + }, + "general": { + "tab": "Γενικές", + "currency": { + "label": "Ετικέτα για τη ρύθμιση του νομίσματος" + } + }, + "header": "Ρυθμίσεις", + "settings": "Ρυθμίσεις" } } diff --git a/client/public/locales/en/common.json b/client/public/locales/en/common.json index 8c65c8b..b3fb9b3 100644 --- a/client/public/locales/en/common.json +++ b/client/public/locales/en/common.json @@ -15,6 +15,7 @@ "edit": "Edit", "cancel": "Cancel", "confirm": "Are you sure?", + "continue": "Continue", "filter": "Filter", "clear": "Clear", "refresh": "Refresh", @@ -72,6 +73,7 @@ "showBorder": "Show Border", "previewScale": "Preview Scale", "skipItems": "Skip Items", + "itemCopies": "Item Copies", "contentSettings": "Content Settings", "layoutSettings": "Layout Settings", "horizontalSpacing": "Horizontal Spacing", @@ -88,18 +90,24 @@ "none": "None", "border": "Border", "grid": "Grid" - } + }, + "settings": "Presets", + "defaultSettings": "Default", + "addSettings": "Add New Preset", + "newSetting": "New", + "duplicateSettings": "Duplicate", + "deleteSettings": "Delete Current Preset", + "deleteSettingsConfirm": "Are you sure you want to delete this preset?", + "settingsName": "Preset Name", + "saveSetting": "Save Presets", + "saveAsImage": "Save as Image" }, "qrcode": { - "button": "Print QR Codes", - "title": "QR Code Printing", - "spoolWeight": "Spool Weight: {{weight}}", - "lotNr": "Lot Nr: {{lot}}", - "bedTemp": "BT: {{temp}}", - "extruderTemp": "ET: {{temp}}", - "textSize": "Content Text Size", - "showSpoolmanIcon": "Show Spoolman Icon", - "showVendor": "Vendor", + "button": "Print Labels", + "title": "Label Printing", + "template": "Label Template", + "templateHelp": "Use {} to insert values of the spool object as text. For example {id} will be replaced with the spool id, or {filament.material} will be replaced with the material of the spool. Enclose text with double asterix ** to make it bold. Click the button to view a list of all available tags.", + "textSize": "Label Text Size", "showContent": "Print Label", "showLotNr": "Lot Nr", "showSpoolWeight": "Spool Weight", @@ -110,11 +118,17 @@ "useHTTPUrl": { "label": "Use HTTP(S) link in QR code", "tooltip": "Uses either the base URL specified in settings, or the current page URL if not set. If disabled will use proprietary link that will work only if scanned from Spoolman's scanning feature." + }, + "showQRCode": "Print QR Code", + "showQRCodeMode": { + "no": "No", + "simple": "Simple", + "withIcon": "With Icon" } }, "spoolSelect": { "title": "Select Spools", - "description": "Select spools to print QR codes for.", + "description": "Select spools to print labels for.", "showArchived": "Show Archived", "noSpoolsSelected": "You have not selected any spools.", "selectAll": "Select/Unselect All", @@ -140,6 +154,8 @@ "id": "ID", "filament_name": "Filament", "filament": "Filament", + "filament_internal": "Internal", + "filament_external": "External", "price": "Price", "material": "Material", "weight_to_use": "Weight", @@ -148,6 +164,8 @@ "measured_weight": "Measured Weight", "used_length": "Used Length", "remaining_length": "Remaining Length", + "initial_weight": "Initial Weight", + "spool_weight": "Empty Weight", "location": "Location", "lot_nr": "Lot Nr", "first_used": "First Used", @@ -162,8 +180,11 @@ "used_weight": "How much filament has been used from the spool. A new spool should have 0g used.", "remaining_weight": "How much filament is left on the spool. For a new spool this should match the spool weight.", "measured_weight": "How much the filament and spool weigh.", + "initial_weight": "The initial weight of filament on the spool (net weight). Will use the weight from the filament object if not set.", + "spool_weight": "The weight of the spool when it is empty. Leave empty to use the value from the filament or the manufacturer.", "location": "Where the spool is located if you have multiple locations where you store your spools.", - "lot_nr": "Manufacturer's lot number. Can be used to ensure a print has consistent color if multiple spools are used." + "lot_nr": "Manufacturer's lot number. Can be used to ensure a print has consistent color if multiple spools are used.", + "external_filament": "You have selected a filament from the external database. A filament object (and possibly a manufacturer object) will be created automatically when you create this spool. This can create duplicate filament objects if you have already created a filament object for this filament." }, "titles": { "create": "Create Spool", @@ -172,9 +193,17 @@ "list": "Spools", "show": "Show Spool", "show_title": "[Spool #{{id}}] {{name}}", - "archive": "Archive Spool" + "archive": "Archive Spool", + "adjust": "Adjust Spool Filament" }, "form": { + "measurement_type": { + "length": "Length", + "weight": "Weight" + }, + "measurement_type_label": "Measurement Type", + "adjust_filament_help": "Here you can directly add or subtract filament from the spool. A positive value will consume filament, a negative value will add it.", + "adjust_filament_value": "Consume Amount", "new_location_prompt": "Enter a new location", "spool_updated": "This spool has been updated by someone/something else since you opened this page. Saving will overwrite those changes!" }, @@ -186,8 +215,8 @@ "filament": "Filaments", "fields": { "id": "ID", - "vendor_name": "Vendor", - "vendor": "Vendor", + "vendor_name": "Manufacturer", + "vendor": "Manufacturer", "name": "Name", "material": "Material", "price": "Price", @@ -201,15 +230,21 @@ "settings_extruder_temp": "Extruder Temp", "settings_bed_temp": "Bed Temp", "color_hex": "Color", + "single_color": "Single", + "multi_color": "Multi", + "coaxial": "Coextruded", + "longitudinal": "Longitudinal", + "external_id": "External ID", "spools": "Show Spools" }, "fields_help": { - "name": "Filament name, to distinguish this filament type among others from the same vendor. Should contain the color for example.", + "name": "Filament name, to distinguish this filament type among others from the same manufacturer. Should contain the color for example.", "material": "E.g. PLA, ABS, PETG, etc.", "price": "Price of a full spool.", "weight": "The filament weight of a full spool (net weight). This should not include the weight of the spool itself, only the filament. It is what is usually written on the packaging.", "spool_weight": "The weight of an empty spool. Used to determine measured weight of a spool.", - "article_number": "E.g. EAN, UPC, etc." + "article_number": "E.g. EAN, UPC, etc.", + "multi_color_direction": "Filaments can have multiple colors in two ways: either through coextrusion, like dual-color filaments with consistent multi-colors, or through longitudinal color changes, like gradient filaments that shift colors along the spool." }, "titles": { "create": "Create Filament", @@ -220,30 +255,37 @@ "show_title": "[Filament #{{id}}] {{name}}" }, "form": { - "filament_updated": "This filament has been updated by someone/something else since you opened this page. Saving will overwrite those changes!" + "filament_updated": "This filament has been updated by someone/something else since you opened this page. Saving will overwrite those changes!", + "import_external": "Import from External", + "import_external_description": "Select a filament in the list to automatically populate its details in the filament creation form. This will overwrite any data you have entered in the form.

A Manufacturer object will be created automatically when you click Ok, if necessary." }, "buttons": { "add_spool": "Add Spool" } }, "vendor": { - "vendor": "Vendors", + "vendor": "Manufacturers", "fields": { "id": "ID", "name": "Name", + "empty_spool_weight": "Empty Spool Weight", + "external_id": "External ID", "registered": "Registered", "comment": "Comment" }, + "fields_help": { + "empty_spool_weight": "The weight of an empty spool from this manufacturer." + }, "titles": { - "create": "Create Vendor", - "clone": "Clone Vendor", - "edit": "Edit Vendor", - "list": "Vendors", - "show": "Show Vendor", - "show_title": "[Vendor #{{id}}] {{name}}" + "create": "Create Manufacturer", + "clone": "Clone Manufacturer", + "edit": "Edit Manufacturer", + "list": "Manufacturers", + "show": "Show Manufacturer", + "show_title": "[Manufacturer #{{id}}] {{name}}" }, "form": { - "vendor_updated": "This vendor has been updated by someone/something else since you opened this page. Saving will overwrite those changes!" + "vendor_updated": "This manufacturer has been updated by someone/something else since you opened this page. Saving will overwrite those changes!" } }, "home": { @@ -256,7 +298,7 @@ "spool": "Individual physical spools of a specific filament.", "vendor": "The companies that make the filament." }, - "description": "Help

Here are some tips to get you started.

Spoolman holds 3 different types of data:

To add a new spool to the database, start by creating a Filament object. Once that's done, proceed to create a Spool object for that specific spool. If you acquire additional spools of the same filament later on, simply generate additional Spool objects and reuse the same Filament object.

Optionally, you can also generate a Vendor object for the company manufacturing the filament if you wish to track that information.

You have the option to link other 3D printer services to Spoolman, like Moonraker, which can automatically monitor filament usage and update the Spool objects for you. Refer to the Spoolman README for guidance on how to set that up.

" + "description": "Help

Here are some tips to get you started.

Spoolman holds 3 different types of data:

To add a new spool to the database, start by creating a Filament object. Once that's done, proceed to create a Spool object for that specific spool. If you acquire additional spools of the same filament later on, simply generate additional Spool objects and reuse the same Filament object.

Optionally, you can also generate a Manufacturer object for the company manufacturing the filament if you wish to track that information.

You have the option to link other 3D printer services to Spoolman, like Moonraker, which can automatically monitor filament usage and update the Spool objects for you. Refer to the Spoolman README for guidance on how to set that up.

" }, "table": { "actions": "Actions" @@ -330,11 +372,11 @@ "clone": "#{{id}} Clone Spool | Spoolman" }, "vendor": { - "list": "Vendors | Spoolman", - "show": "#{{id}} Show Vendor | Spoolman", - "edit": "#{{id}} Edit Vendor | Spoolman", - "create": "Create Vendor | Spoolman", - "clone": "#{{id}} Clone Vendor | Spoolman" + "list": "Manufacturers | Spoolman", + "show": "#{{id}} Show Manufacturer | Spoolman", + "edit": "#{{id}} Edit Manufacturer | Spoolman", + "create": "Create Manufacturer | Spoolman", + "clone": "#{{id}} Clone Manufacturer | Spoolman" } } } diff --git a/client/public/locales/es/common.json b/client/public/locales/es/common.json index c42c5c0..e632b75 100644 --- a/client/public/locales/es/common.json +++ b/client/public/locales/es/common.json @@ -4,7 +4,7 @@ "create": "Crear", "edit": "Editar", "show": "Mostrar", - "clone": "Duplicar" + "clone": "Clonar" }, "buttons": { "create": "Crear", @@ -13,10 +13,10 @@ "delete": "Borrar", "edit": "Editar", "cancel": "Cancelar", - "confirm": "Seguro?", + "confirm": "¿Estás seguro?", "filter": "Filtrar", "clear": "Limpiar", - "refresh": "Renovar", + "refresh": "Actualizar", "show": "Mostrar", "undo": "Deshacer", "import": "Importar", @@ -28,9 +28,10 @@ "notAccessTitle": "No tienes permiso de acceso", "hideColumns": "Ocultar Columnas", "clearFilters": "Borrar filtros", - "saveAndAdd": "Guardar y añadir" + "saveAndAdd": "Guardar y añadir", + "continue": "Continuar" }, - "warnWhenUnsavedChanges": "Seguro que quieres salir?. Hay cambios sin guardar.", + "warnWhenUnsavedChanges": "¿Estás seguro que quieres salir? Hay cambios sin guardar.", "notifications": { "success": "Éxito", "error": "Error (status code: {{statusCode}})", @@ -54,10 +55,10 @@ "clone": "Duplicar" }, "dashboard": { - "title": "Panel" + "title": "Dashboard" }, "spool": { - "spool": "Carretes", + "spool": "Bobinas", "fields": { "id": "ID", "filament_name": "Filamento", @@ -65,9 +66,9 @@ "material": "Material", "used_weight": "Peso Usado", "remaining_weight": "Peso Restante", - "used_length": "Largo Usado", - "remaining_length": "Largo Restante", - "location": "Locación", + "used_length": "Longitud usada", + "remaining_length": "Longitud restante", + "location": "Ubicación", "lot_nr": "No. Lote", "first_used": "Fecha de Primer Uso", "last_used": "Ultimo Uso", @@ -76,62 +77,83 @@ "archived": "Archivado", "measured_weight": "Peso Medido", "weight_to_use": "Peso", - "price": "Precio" + "price": "Precio", + "initial_weight": "Peso inicial", + "spool_weight": "Peso vacio", + "filament_internal": "Interno", + "filament_external": "Externo" }, "fields_help": { - "used_weight": "Cuanto filamento ha sido usado en el carrete. Un carrete nuevo debería tener 0g usados.", - "location": "Donde esta el carrete si se guardan los carretes en lugares distintos.", - "lot_nr": "Numero de lote de manufactura. Puede ser usado si el modelo a imprimir necesita color homogéneo y varios carretes son necesarios.", - "weight_to_use": "Elegir el peso a usar. El peso medido solo esta disponible si existe el valor de peso del carrete seleccionado.", - "measured_weight": "Cuanto pesa el filamento y el carrete.", - "remaining_weight": "Cuanto filamento resta en el carrete. Para un carrete nuevo el peso debe ser igual al peso indicado de fabrica.", - "price": "Precio de una bobina completa en la moneda configurada en el sistema. Si no se establece, se asumirá en su lugar el precio del filamento." + "used_weight": "Cuanto filamento ha sido usado de la bobina. Una bobina nueva debería tener 0g usados.", + "location": "Donde se encuentra la bobina si tiene varias ubicaciones donde almacenar sus bobinas.", + "lot_nr": "Número de lote del fabricante. Puede ser usado si el modelo a imprimir necesita color homogéneo y varias bobinas son necesarias.", + "weight_to_use": "Elegir el peso a usar. El peso medido solo está disponible si existe el valor de peso del carrete seleccionado.", + "measured_weight": "Cuanto pesa el filamento y la bobina.", + "remaining_weight": "Cuanto filamento resta en la bobina. Para una bobina nueva el peso debe ser igual al peso indicado de fábrica.", + "price": "Precio de una bobina completa. Si no se establece, se asumirá en su lugar el precio del filamento.", + "initial_weight": "El peso inicial del filamento en el carrete (peso neto). Utilizará el peso del objeto de filamento si no está configurado.", + "spool_weight": "El peso de la bobina cuando está vacía. Dejar vacío para usar el valor del filamento o del fabricante.", + "external_filament": "Has elegido un filamento desde la base de datos externa. Un objeto filamento (y posiblemente un objeto fabricante) será creado automáticamente cuando crees este carrete. Esto puede crear objetos filamento duplicados si ya has creado un objeto filamento para este filamento." }, "titles": { - "create": "Crear Carrete", - "clone": "Duplicar Carrete", - "edit": "Editar Carrete", - "list": "Carretes", - "show": "Mostrar Carrete", - "archive": "Archivar Carrete", - "show_title": "[Carrete #{{id}}] {{name}}" + "create": "Crear Bobina", + "clone": "Duplicar Bobina", + "edit": "Editar Bobina", + "list": "Bobinas", + "show": "Mostrar Bobina", + "archive": "Archivar Bobina", + "show_title": "[Bobina #{{id}}] {{name}}", + "adjust": "Ajustar la bobina del filamento" }, "messages": { - "archive": "Esta seguro que quiere archivar este carrete?" + "archive": "¿Esta seguro que quiere archivar esta bobina?" }, "form": { "new_location_prompt": "Introduce una nueva ubicación", - "spool_updated": "Este spool ha sido actualizado por alguien/algo más desde que abriste esta página. ¡Al guardar, se sobrescribirán los cambios!" + "spool_updated": "Esta bobina ha sido actualizada por alguien/algo desde que abriste esta página. ¡Al guardar, se sobrescribirán los cambios!", + "measurement_type": { + "length": "Longitud", + "weight": "Peso" + }, + "measurement_type_label": "Tipo de medición", + "adjust_filament_value": "Cantidad consumida", + "adjust_filament_help": "Aquí puedes añadir o restar directamente filamento de la bobina. Un valor positivo consumirá filamento, un valor negativo lo añadirá." } }, "filament": { "filament": "Filamentos", "fields": { "id": "ID", - "vendor_name": "Marca", - "vendor": "Marca", + "vendor_name": "Fabricante", + "vendor": "Fabricante", "name": "Nombre", "material": "Material", "price": "Precio", "density": "Densidad", "diameter": "Diámetro", "weight": "Peso", - "spool_weight": "Peso del Carrete", + "spool_weight": "Peso de la Bobina", "article_number": "Numero de Articulo", "registered": "Registrado", "comment": "Comentarios", - "settings_extruder_temp": "Temp. de Extrusor", + "settings_extruder_temp": "Temp. del Extrusor", "settings_bed_temp": "Temp. de Cama", "color_hex": "Color", - "spools": "Mostrar los carretes" + "spools": "Mostrar las Bobinas", + "external_id": "ID Externo", + "coaxial": "coextruido", + "single_color": "Único", + "longitudinal": "Longitudinal", + "multi_color": "Multiple" }, "fields_help": { - "name": "Nombre del filamento, para distinguirlo de otros de la misma marca. Por ejemplo, debería contener el nombre del color.", + "name": "Nombre del filamento, para distinguir este tipo de filamento entre otros del mismo fabricante. Debe contener por ejemplo: el color.", "material": "ej. PLA, ABS, PETG, etc.", - "price": "Precio del carrete completo en la divisa configurada en el sistema.", - "weight": "El peso de un carrete entero (peso neto). Esta cifra no debe incluir el peso del carrete vacío, solo el filamento. Es, usualmente, el peso escrito en la etiqueta del carrete.", - "spool_weight": "El peso de un carrete vacío. Se utiliza para determinar el peso medido de un carrete.", - "article_number": "ej. EAN, UPC, etc." + "price": "Precio de una bobina completa.", + "weight": "El peso de una bobina entera (peso neto). Esta cifra no debe incluir el peso de la bobina vacía, solo el filamento. Es, normalmente, el peso escrito en la etiqueta de la bobina.", + "spool_weight": "El peso de una bobina vacía. Se utiliza para determinar el peso medido de una bobina.", + "article_number": "ej. EAN, UPC, etc.", + "multi_color_direction": "Los filamentos pueden tener varios colores de dos formas: mediante coextrusión, como los filamentos bicolor con multicolores consistentes, o mediante cambios de color longitudinales, como los filamentos degradados que cambian de color a lo largo de la bobina." }, "titles": { "create": "Crear Filamento", @@ -142,27 +164,37 @@ "show_title": "[Filamento #{{id}}] {{name}}" }, "form": { - "filament_updated": "Este filamento ha sido actualizado por alguien/algo más desde que abrió esta página. ¡Al guardar, se sobrescribirán los cambios!" + "filament_updated": "Este filamento ha sido actualizado por alguien/algo más desde que abrió esta página. ¡Al guardar, se sobrescribirán los cambios!", + "import_external": "Importado desde un externo", + "import_external_description": "Seleccione un filamento en la lista para rellenar sus detalles de manera automática en el formulario de creación del filamento. Esto sobrescribirá cualquier información que hayas escrito en el formulario.

Un objeto fabricante será creado automáticamente cuando presiones Ok, si es necesario." + }, + "buttons": { + "add_spool": "Añadir bobina" } }, "vendor": { - "vendor": "Marcas", + "vendor": "Fabricantes", "fields": { "id": "ID", "name": "Nombre", "registered": "Registrado", - "comment": "Comentarios" + "comment": "Comentarios", + "empty_spool_weight": "Peso de bobina vacía", + "external_id": "ID Externa" }, "titles": { - "create": "Crear Marca", - "clone": "Duplicar Marca", - "edit": "Editar Marca", - "list": "Marcas", - "show": "Mostrar Marcas", - "show_title": "[Proveedor #{{id}}] {{name}}" + "create": "Crear un fabricante", + "clone": "Duplicar un fabricante", + "edit": "Editar un fabricante", + "list": "Fabricantes", + "show": "Mostrar Fabricante", + "show_title": "[Fabricante #{{id}}] {{name}}" }, "form": { - "vendor_updated": "Este vendedor ha sido actualizado por alguien/algo más desde que abrió esta página. ¡Al guardar, se sobrescribirán los cambios!" + "vendor_updated": "Este fabricante ha sido actualizado por alguien/algo desde que abrió esta página. ¡Al guardar, se sobrescribirán los cambios!" + }, + "fields_help": { + "empty_spool_weight": "El peso de una bobina vacía de este fabricante." } }, "table": { @@ -179,18 +211,18 @@ "clone": "#{{id}} Duplicar Filamento | Spoolman" }, "spool": { - "list": "Carretes | Spoolman", - "show": "#{{id}} Mostrar Carrete | Spoolman", - "edit": "#{{id}} Editar Carrete | Spoolman", - "create": "Crear Carrete | Spoolman", - "clone": "#{{id}} Duplicar Carrete | Spoolman" + "list": "Bobinas | Spoolman", + "show": "#{{id}} Mostrar Bobina | Spoolman", + "edit": "#{{id}} Editar Bobina | Spoolman", + "create": "Crear Bobina | Spoolman", + "clone": "#{{id}} Duplicar Bobina | Spoolman" }, "vendor": { - "list": "Marcas | Spoolman", - "show": "#{{id}} Mostrar Marca | Spoolman", - "edit": "#{{id}} Editar Marca | Spoolman", - "create": "Crear Marca | Spoolman", - "clone": "#{{id}} Duplicar Marca | Spoolman" + "list": "Fabricantes | Spoolman", + "show": "#{{id}} Mostrar el fabricante | Spoolman", + "edit": "#{{id}} Editar el fabricante | Spoolman", + "create": "Crear un fabricante | Spoolman", + "clone": "#{{id}} Duplicar un fabricante | Spoolman" }, "home": { "list": "Inicio | Spoolman" @@ -202,21 +234,29 @@ "printing": { "qrcode": { "extruderTemp": "TE:{{temp}}", - "showSpoolWeight": "Peso Carrete", + "showSpoolWeight": "Peso de la Bobina", "showContent": "Imprimir Etiqueta", - "showVendorComment": "Comentarios de Marca", - "spoolWeight": "Peso de Carrete: {{weight}}", + "showVendorComment": "Comentarios del Fabricante", + "spoolWeight": "Peso de la Bobina: {{weight}}", "showTemperatures": "Temperaturas", - "showVendor": "Marca", - "showSpoolComment": "Comentario de Carrete", - "textSize": "Tamaño Letras de Contenido", - "title": "Impresión de Códigos QR", + "showVendor": "Fabricante", + "showSpoolComment": "Comentario de la Bobina", + "textSize": "Tamaño del texto para la etiqueta", + "title": "Imprimiendo las etiquetas", "showSpoolmanIcon": "Mostrar Icono de Spoolman", "showLotNr": "No. Lote", "bedTemp": "TC:{{temp}}", "lotNr": "No. Lote:{{lot}}", "showFilamentComment": "Comentario de Filamento", - "button": "Imprimir Códigos QR" + "button": "Imprimir las etiquetas", + "template": "Plantilla para la etiqueta", + "templateHelp": "Utiliza {} para insertar valores del objeto spool como texto. Por ejemplo {id} será reemplazado por el id del spool, o {filament.material} será reemplazado por el material del spool. Encierra el texto con un doble asterisco ** para ponerlo en negrita. Haz clic en el botón para ver una lista de todas las etiquetas disponibles.", + "showQRCode": "Imprimir un código qr", + "showQRCodeMode": { + "no": "No", + "simple": "Sencilla", + "withIcon": "Con un icono" + } }, "generic": { "printerMarginBottom": "Zona Segura Inferior", @@ -228,50 +268,61 @@ "border": "Borde" }, "printerMarginTop": "Zona Segura Superior", - "customSize": "Tamaño Personal", + "customSize": "Personalizar", "title": "Imprimiendo", "contentSettings": "Ajustes de Contenido", "marginRight": "Margen Derecho", "printerMarginRight": "Zona Segura Derecha", - "helpPrinterMargin": "La Zona de Seguridad debe ajustarse lo mas cercano posible al borde que tu impresora es capaz de imprimir. Cambiar estos valores no afectaran todas las etiquetas.", + "helpPrinterMargin": "La Zona de Seguridad debe ajustarse lo más cercano posible al borde que tu impresora es capaz de imprimir. Cambiar estos valores no afectaran todas las etiquetas.", "previewScale": "Previsualizar Escala", - "helpMargin": "Márgenes deben ser configurados a ser los mismos que tu papel e impresora. Cambiar los mismos afectaran todas las etiquetas.", + "helpMargin": "Los márgenes deben ser configurados a ser los mismos que tu papel e impresora. Cambiar los mismos afectaran todas las etiquetas.", "marginTop": "Margen Superior", "skipItems": "Saltar Elementos", "layoutSettings": "Ajustes de Diseño", "paperSize": "Tamaño de Papel", "columns": "Columnas", - "description": "Ajustar los parámetros debajo para adquirir el diseño deseado. Recuerda que impresoras y el sistema operativo aplican sus propios márgenes y escala. Es probable que tengas que probar con valores varias veces hasta que el diseño te parezca correcto. Prueba en papel normal antes de usar etiquetas.", + "description": "Ajuste los parámetros siguientes para obtener el diseño de impresión deseado. Recuerda que impresoras y el sistema operativo aplican sus propios márgenes y escala. Es probable que tengas que probar con valores varias veces hasta que el diseño te parezca correcto. Prueba en papel normal antes de usar etiquetas.", "marginBottom": "Margen Inferior", "horizontalSpacing": "Espacio Horizontal", "marginLeft": "Margen Izquierdo", "showBorder": "Mostrar Borde", "printerMarginLeft": "Zona Segura Izquierda", "dimensions": "Dimensiones", - "print": "Imprimir" + "print": "Imprimir", + "itemCopies": "Copias del artículo", + "settings": "Ajustes preestablecidos", + "defaultSettings": "Por defecto", + "addSettings": "Añadir un nuevo ajustes preestablecidos", + "newSetting": "Nuevo", + "deleteSettings": "Eliminar ajustes preestablecidos", + "deleteSettingsConfirm": "¿Estás seguro de que deseas eliminar este ajuste preestablecido?", + "settingsName": "Nombre preestablecido", + "duplicateSettings": "Duplicar", + "saveSetting": "Guardar ajustes preestablecidos", + "saveAsImage": "Guardar como una imagen" }, "spoolSelect": { - "selectedTotal_one": "{{count}} carrete seleccionado", - "selectedTotal_many": "{{count}} carretes seleccionados", - "selectedTotal_other": "{{count}} carretes seleccionados", - "description": "Seleccionar Carretes para imprimir códigos de QR.", - "showArchived": "Mostrar Archivados", - "title": "Selección de Carretes", + "selectedTotal_one": "{{count}} bobina seleccionada", + "selectedTotal_many": "{{count}} bobinas seleccionadas", + "selectedTotal_other": "{{count}} bobinas seleccionadas", + "description": "Selecciona los carretes para los que deseas imprimir las etiquetas.", + "showArchived": "Mostrar archivados", + "title": "Selección de Bobinas", "selectAll": "Seleccionar/Deseleccionar Todos", - "noSpoolsSelected": "No has seleccionado ningún carrete." + "noSpoolsSelected": "No has seleccionado ninguna bobina." } }, "scanner": { - "title": "Escaner de Código QR", + "title": "Escáner de Código QR", "error": { - "insecureContext": "La página no se sirve a través de HTTPS.", - "notReadable": "La camara no ha sido leída.", + "insecureContext": "La página no se muestra a través de HTTPS.", + "notReadable": "La cámara no es legible.", "notAllowed": "No has dado permiso de acceso a la cámara.", "unknown": "Un error desconocido ocurrió. ({{error}})", "notFound": "La cámara no ha sido detectada.", "streamApiNotSupported": "El navegador no es compatible con la API MediaStream." }, - "description": "Escanear códigos QR a Spoolman para ver detalles del carrete." + "description": "Escanea un código QR de Spoolman para ver detalles de la bobina." }, "help": { "resources": { @@ -279,7 +330,7 @@ "filament": "Marcas de filamentos. Tienen propiedades como nombre, material, color, diámetro y más.", "spool": "Bobinas físicas individuales de un filamento específico." }, - "description": " Ayuda

A continuación se ofrecen algunos consejos para empezar.

Spoolman contiene 3 tipos diferentes de datos:

Para agregar un nuevo carrete a la base de datos, comience creando un objeto Filament . Una vez hecho esto, proceda a crear un objeto Spool para ese spool específico. Si adquiere carretes adicionales del mismo filamento más adelante, simplemente genere objetos Carrete adicionales y reutilice el mismo objeto Filamento.

Opcionalmente, también puede generar un objeto Vendor para la empresa que fabrica el filamento si desea realizar un seguimiento de esa información.

Tiene la opción de vincular otros servicios de impresora 3D a Spoolman, como Moonraker, que puede monitorear automáticamente el uso del filamento y actualizar los objetos de Spool por usted. Consulte el Spoolman README para obtener orientación sobre cómo configurarlo.

", + "description": " Ayuda

A continuación se ofrecen algunos consejos para empezar.

Spoolman contiene 3 tipos diferentes de datos:

Para agregar una nueva bobina a la base de datos, comience creando un objeto Filamento . Una vez hecho esto, proceda a crear un objeto Bobina para esa bobina específica. Si adquiere bobinas adicionales del mismo filamento más adelante, simplemente genere objetos Bonina adicionales y reutilice el mismo objeto Filamento.

Opcionalmente, también puede generar un objeto Fabricante para la empresa que fabrica el filamento si desea realizar un seguimiento de esa información.

Tiene la opción de vincular otros servicios de impresora 3D a Spoolman, como Moonraker, que puede monitorear automáticamente el uso del filamento y actualizar los objetos de Bobina por usted. Consulte el Spoolman README para obtener orientación sobre cómo configurarlo.

", "help": "Ayuda" }, "kofi": "Donar en Ko-fi", @@ -291,30 +342,30 @@ "general": { "tab": "General", "currency": { - "label": "Divisa" + "label": "Moneda" } }, "extra_fields": { "tab": "Campos adicionales", "params": { - "key": "Llave", + "key": "Clave", "name": "Nombre", "field_type": "Tipo", "unit": "Unidad", "order": "Orden", "default_value": "Valor predeterminado", - "choices": "Elecciones", + "choices": "Opciones", "multi_choice": "Múltiples opciones" }, "field_type": { "text": "Texto", "integer": "Entero", "integer_range": "Rango de enteros", - "float": "Flotante", - "float_range": "Rango flotante", + "float": "Decimal", + "float_range": "Rango Decimal", "datetime": "Fecha y hora", "boolean": "Booleano", - "choice": "Elección" + "choice": "Opción" }, "boolean_true": "Sí", "boolean_false": "No", @@ -324,6 +375,7 @@ "delete_confirm": "¿Borrar campo {{name}}?", "delete_confirm_description": "Esto eliminará el campo y todos los datos asociados para todas las entidades.", "description": "

Aquí puede agregar más campos personalizados a los asuntos.

Una vez que se agrega un campo, no puede cambiar su clave o tipo, y no puede eliminar opciones ni cambiar el estado de múltiples opciones para campos seleccionados. Si elimina un campo, se eliminarán los datos asociados a todos los sujetos.

La forma en que otros programas leen/escriben los datos es clave, por lo que si su campo personalizado se va a integrar con un programa de terceros, asegúrese de que esté configurado correctamente. El valor predeterminado solo se utilizará para elementos nuevos.

Los campos de salida no se pueden ordenar ni filtrar en las vistas de tabla.

" - } + }, + "settings": "Ajustes" } } diff --git a/client/public/locales/et/common.json b/client/public/locales/et/common.json new file mode 100644 index 0000000..1b796d6 --- /dev/null +++ b/client/public/locales/et/common.json @@ -0,0 +1,40 @@ +{ + "actions": { + "list": "Kuva", + "create": "Loo", + "edit": "Muuda", + "show": "Näita", + "clone": "Klooni" + }, + "buttons": { + "create": "Loo", + "save": "Salvesta", + "confirm": "Oled kindel?", + "clear": "Tühjenda", + "refresh": "Uuenda", + "show": "Näita", + "hideColumns": "Peida tulbad", + "clearFilters": "Tühjenda filtrid", + "edit": "Muuda", + "undo": "Võta tagasi", + "clone": "Klooni", + "archive": "Arhiveeri", + "notAccessTitle": "Sul pole õigusi sisenemiseks", + "saveAndAdd": "Salvesta ja Lisa", + "logout": "Logi välja", + "delete": "Kustuta", + "cancel": "Tühista", + "import": "Impordi", + "filter": "Filtreeri", + "unArchive": "Võta arhiivist tagasi", + "hideArchived": "Peida arhiveeritud", + "showArchived": "Näita arhiveeritud" + }, + "notifications": { + "error": "Viga (kood: {{statusCode}})", + "undoable": "Sul on {{seconds}} sekundit, et muudatus tagasi võtta.", + "success": "Õnnestunud", + "createSuccess": "Loodi {{resource}}" + }, + "warnWhenUnsavedChanges": "Oled sa kindel, et soovid lahkuda? Sul on salvestamata muudatusi." +} diff --git a/client/public/locales/fr/common.json b/client/public/locales/fr/common.json index 2299729..0aee44e 100644 --- a/client/public/locales/fr/common.json +++ b/client/public/locales/fr/common.json @@ -4,19 +4,27 @@ "extruderTemp": "ET : {{temp}}", "showSpoolWeight": "Poids de la bobine", "showContent": "Imprimer l'étiquette", - "showVendorComment": "Commentaire sur le vendeur", + "showVendorComment": "Commentaire sur le fabricant", "spoolWeight": "Poids de la bobine : {{weight}}", "showTemperatures": "Températures", - "showVendor": "Vendeur", + "showVendor": "Fabricant", "showSpoolComment": "Commentaire sur la bobine", - "textSize": "Contenu Taille du texte", - "title": "Impression de codes QR", + "textSize": "Taille du texte de l'étiquette", + "title": "Impression d'étiquettes", "showSpoolmanIcon": "Montrer l'icône Spoolman", "showLotNr": "N° de Lot", "bedTemp": "BT : {{temp}}", "lotNr": "N° de Lot : {{lot}}", "showFilamentComment": "Commentaire sur le filament", - "button": "Imprimer des codes QR" + "button": "Imprimer des étiquettes", + "showQRCode": "Imprimer le QR Code", + "templateHelp": "Utilisez {} pour insérer les valeurs de l'objet bobine sous forme de texte. Par exemple, {id} sera remplacé par l'identifiant de la bobine ou {filament.material} sera remplacé par le matériau de la bobine. Entourez le texte d'un double astérisque ** pour le mettre en gras. Cliquez sur le bouton pour afficher une liste de toutes les balises disponibles.", + "template": "Modèle d'étiquette", + "showQRCodeMode": { + "no": "Non", + "simple": "Simple", + "withIcon": "Avec icône" + } }, "generic": { "printerMarginBottom": "Zone de sécurité en bas", @@ -37,7 +45,7 @@ "previewScale": "Échelle de prévisualisation", "helpMargin": "Les marges doivent être configurées en fonction de votre papier à étiquettes et de votre imprimante, car leur modification aura une incidence sur la taille de l'ensemble de la grille.", "marginTop": "Marge supérieure", - "skipItems": "Passer les articles", + "skipItems": "Articles ignorés", "layoutSettings": "Paramètres de mise en page", "paperSize": "Format du papier", "columns": "Colonnes", @@ -48,13 +56,24 @@ "showBorder": "Afficher les bords", "printerMarginLeft": "Zone de sécurité à gauche", "dimensions": "Dimensions", - "print": "Imprimer" + "print": "Imprimer", + "settings": "Préréglages", + "defaultSettings": "Défaut", + "addSettings": "Ajouter un nouveau préréglage", + "newSetting": "Nouveau", + "deleteSettings": "Supprimer le préréglage actuel", + "deleteSettingsConfirm": "Êtes-vous sûr de vouloir supprimer ce préréglage ?", + "settingsName": "Nom du préréglage", + "saveAsImage": "Enregistrer comme image", + "itemCopies": "Nombre d'article", + "duplicateSettings": "Dupliquer", + "saveSetting": "Enregistrer les préréglages" }, "spoolSelect": { "selectedTotal_one": "{{count}} bobine sélectionnée", "selectedTotal_many": "{{count}} bobines sélectionnées", "selectedTotal_other": "{{count}} bobines sélectionnées", - "description": "Sélectionnez les bobines pour lesquelles vous souhaitez imprimer des codes QR.", + "description": "Sélectionnez les bobines pour lesquelles imprimer des étiquettes.", "showArchived": "Afficher les archives", "title": "Sélectionner les bobines", "selectAll": "Sélectionner/Désélectionner tout", @@ -63,11 +82,11 @@ }, "documentTitle": { "vendor": { - "create": "Créer le Vendeur | Spoolman", - "clone": "#{{id}} Cloner le Vendeur | Spoolman", - "edit": "#{{id}} Editer le Vendeur | Spoolman", - "list": "Vendeurs | Spoolman", - "show": "#{{id}} Afficher le vendeur | Spoolman" + "create": "Créer le fabricant | Spoolman", + "clone": "#{{id}} Cloner le fabricant | Spoolman", + "edit": "#{{id}} Éditer le fabricant| Spoolman", + "list": "Fabricants | Spoolman", + "show": "#{{id}} Afficher le fabricant | Spoolman" }, "default": "Spoolman", "spool": { @@ -111,7 +130,11 @@ "used_weight": "Poids utilisé", "id": "ID", "remaining_weight": "Poids restant", - "price": "Prix" + "price": "Prix", + "initial_weight": "Poids initial", + "spool_weight": "Poids à vide", + "filament_internal": "Interne", + "filament_external": "Externe" }, "titles": { "archive": "Archiver la bobine", @@ -120,7 +143,8 @@ "create": "Créer une bobine", "clone": "Cloner une bobine", "list": "Bobines", - "show_title": "[Bobine #{{id}}] {{name}}" + "show_title": "[Bobine #{{id}}] {{name}}", + "adjust": "Ajuster la bobine de filament" }, "fields_help": { "used_weight": "Combien de filament a été utilisé à partir de la bobine. Une bobine neuve devrait avoir 0g utilisé.", @@ -129,7 +153,10 @@ "lot_nr": "Numéro de lot du fabricant. Peut être utilisé pour s'assurer que la couleur d'une impression est homogène si plusieurs bobines sont utilisées.", "remaining_weight": "La quantité de filament restant sur la bobine. Pour une nouvelle bobine, cela devrait correspondre au poids de la bobine.", "location": "L'emplacement de la bobine si vous stockez vos bobines à plusieurs endroits.", - "price": "Prix d'une bobine complète dans la devise configurée par le système. S'il n'est pas défini, le prix du filament sera pris en compte." + "price": "Prix d'une bobine complète. S'il n'est pas défini, le prix du filament sera pris en compte.", + "initial_weight": "Le poids initial du filament sur la bobine (poids net). Utilisera le poids de l'objet filament s'il n'est pas défini.", + "spool_weight": "Le poids de la bobine lorsqu'elle est vide. Laissez vide pour utiliser la valeur du filament ou du fabricant.", + "external_filament": "Vous avez sélectionné un filament dans la base de données externe. Un objet filament (et éventuellement un objet fabricant) sera créé automatiquement lorsque vous créerez cette bobine. Cela peut créer des objets filament en double si vous avez déjà créé un objet filament pour ce filament." }, "spool": "Bobines", "messages": { @@ -137,7 +164,14 @@ }, "form": { "spool_updated": "Cette bobine a été mise à jour par quelqu'un/quelque chose depuis la dernière ouverture de la page. Enregistrer écrasera ces changements !", - "new_location_prompt": "Entrer une nouvelle localisation" + "new_location_prompt": "Entrer une nouvelle localisation", + "measurement_type": { + "length": "Longueur", + "weight": "Poids" + }, + "measurement_type_label": "Type de mesure", + "adjust_filament_help": "Ici, vous pouvez directement ajouter ou soustraire du filament à la bobine. Une valeur positive consommera du filament, une valeur négative en ajoutera.", + "adjust_filament_value": "Quantité consommée" } }, "buttons": { @@ -162,20 +196,22 @@ "unArchive": "Désarchiver", "clone": "Cloner", "clear": "Effacer", - "saveAndAdd": "Sauvegarder et ajouter" + "saveAndAdd": "Sauvegarder et ajouter", + "continue": "Continuer" }, "filament": { "fields_help": { - "name": "Nom du filament, pour distinguer ce type de filament parmi d'autres du même fournisseur. Il doit contenir la couleur, par exemple.", + "name": "Nom du filament, pour distinguer ce type de filament parmi d'autres du même fabricant. Doit contenir la couleur par exemple.", "article_number": "Exemple EAN, UPC, etc.", "spool_weight": "Le poids d'une bobine vide. Utilisé pour déterminer le poids d'une bobine.", - "price": "Prix d'une bobine complète dans la devise configurée par le système.", + "price": "Prix d'une bobine complète.", "weight": "Le poids du filament d'une bobine complète (poids net). Ce poids ne doit pas inclure le poids de la bobine elle-même, mais uniquement celui du filament. C'est ce qui est généralement indiqué sur l'emballage.", - "material": "Exemple PLA, ABS, PETG, etc." + "material": "Exemple PLA, ABS, PETG, etc.", + "multi_color_direction": "Les filaments peuvent avoir plusieurs couleurs de deux manières : soit par coextrusion, comme les filaments bicolores avec plusieurs couleurs uniformes, soit par des changements de couleur longitudinaux, comme les filaments dégradés qui changent de couleurs le long de la bobine." }, "fields": { "material": "Matériau", - "vendor_name": "Vendeur", + "vendor_name": "Fabricant", "settings_extruder_temp": "Température de l'extrudeuse", "comment": "Commentaire", "diameter": "Diamètre", @@ -185,12 +221,17 @@ "name": "Nom", "price": "Prix", "settings_bed_temp": "Température du lit", - "vendor": "Vendeur", + "vendor": "Fabricant", "density": "Densité", "id": "ID", "color_hex": "Couleur", "article_number": "Numéro d'article", - "spools": "Afficher les bobines" + "spools": "Afficher les bobines", + "external_id": "ID externe", + "single_color": "Unique", + "multi_color": "Multi", + "longitudinal": "Longitudinale", + "coaxial": "Coextrudée" }, "titles": { "clone": "Cloner un filament", @@ -202,7 +243,12 @@ }, "filament": "Filaments", "form": { - "filament_updated": "Ce filament a été mis à jour par quelqu'un/quelque chose depuis que vous avez ouvert cette page. Enregistrer écrasera ces changements !" + "filament_updated": "Ce filament a été mis à jour par quelqu'un/quelque chose depuis que vous avez ouvert cette page. Enregistrer écrasera ces changements !", + "import_external": "Importer depuis externe", + "import_external_description": "Sélectionnez un filament dans la liste pour renseigner automatiquement ses détails dans le formulaire de création de filament. Cela écrasera toutes les données que vous avez saisies dans le formulaire.

Un objet fabricant sera créé automatiquement lorsque vous cliquerez sur OK, si nécessaire." + }, + "buttons": { + "add_spool": "Ajouter une bobine" } }, "actions": { @@ -234,28 +280,35 @@ "success": "Réussite", "editSuccess": "Édité avec succès {{resource}}", "deleteError": "Erreur lors de la suppression de {{resource}} (status code : {{statusCode}})", - "createSuccess": "Création réussie de {{resource}}" + "createSuccess": "Création réussie de {{resource}}", + "saveSuccessful": "Sauvegarde réussie !", + "validationError": "Erreur de validation : {{error}}" }, "no": "Non", "unknown": "Inconnu", "vendor": { "titles": { - "show": "Afficher le vendeur", - "edit": "Editer un Vendeur", - "clone": "Cloner un Vendeur", - "create": "Créer un Vendeur", - "list": "Vendeurs", - "show_title": "[Vendeur #{{id}}] {{name}}" + "show": "Afficher le fabricant", + "edit": "Éditer un fabricant", + "clone": "Cloner un fabricant", + "create": "Créer un fabricant", + "list": "Fabricants", + "show_title": "[#{{id}} fabricant] {{name}}" }, "fields": { "registered": "Enregistré", "comment": "Commentaire", "name": "Nom", - "id": "ID" + "id": "ID", + "empty_spool_weight": "Poids de la bobine vide", + "external_id": "ID externe" }, - "vendor": "Vendeurs", + "vendor": "Fabricants", "form": { - "vendor_updated": "Ce vendeur a été mis à jours par quelqu'un/quelque chose depuis que vous avez ouvert cette page. Enregistrer écrasera ces changements !" + "vendor_updated": "Ce fabricant a été mis à jours par quelqu'un/quelque chose depuis que vous avez ouvert cette page. Enregistrer écrasera ces changements !" + }, + "fields_help": { + "empty_spool_weight": "Le poids d'une bobine vide de ce fabricant." } }, "yes": "Oui", @@ -277,11 +330,52 @@ "filament": "Marques de filament. Contient les propriétés comme le nom, le matériau, la couleur, le diamètre, etc.", "spool": "Les bobines physiques pour un filament spécifique." }, - "description": "Aide

Voici quelques informations pour commencer.

Spoolman garde 3 types d'informations différentes :

Pour ajouter une nouvelle bobine dans la base de données, commencez par créer un objet Filament. Une fois cela fait, créez un objet bobine pour cette bobine spécifique. Si vous achetez plus tard des bobines supplémentaires du même filament, créez simplement un objet bobine supplémentaire et réutilisez le même objet Filament.

En option, vous pouvez créer un Vendeur pour la société qui fabrique le filament si vous voulez garder une trace de cette information.

Vous avez l'option de connecter d'autres service d'impression 3D à Spoolman, comme Moonraker, pour qu'ils puissent suivre automatiquement votre utilisation de filament et mettre automatiquement à jour l'objet Bobine pour vous. Voir le README Spoolman pour avoir la marche à suivre pour le mettre en place.

", + "description": "Aide

Voici quelques informations pour commencer.

Spoolman garde 3 types d'informations différentes :

Pour ajouter une nouvelle bobine dans la base de données, commencez par créer un objet Filament. Une fois cela fait, créez un objet bobine pour cette bobine spécifique. Si vous achetez plus tard des bobines supplémentaires du même filament, créez simplement un objet bobine supplémentaire et réutilisez le même objet Filament.

En option, vous pouvez créer un Fabricant pour la société qui fabrique le filament si vous voulez garder une trace de cette information.

Vous avez l'option de connecter d'autres service d'impression 3D à Spoolman, comme Moonraker, pour qu'ils puissent suivre automatiquement votre utilisation de filament et mettre automatiquement à jour l'objet Bobine pour vous. Voir le README Spoolman pour avoir la marche à suivre pour le mettre en place.

", "help": "Aide" }, "kofi": "Me donner un pourboire sur Ko-fi", "home": { "home": "Accueil" + }, + "settings": { + "settings": "Paramètres", + "extra_fields": { + "params": { + "choices": "Choix", + "multi_choice": "Choix multiple", + "default_value": "Valeur par défaut", + "key": "Clé", + "name": "Nom", + "field_type": "Type", + "unit": "Unité", + "order": "Ordre" + }, + "field_type": { + "text": "Texte", + "choice": "Choix", + "integer": "Entier", + "float_range": "Plage décimal", + "datetime": "Date et heure", + "boolean": "Booléen", + "integer_range": "Plage d'entier", + "float": "Décimal" + }, + "tab": "Champs additionnel", + "boolean_true": "Oui", + "boolean_false": "Non", + "non_unique_key_error": "La clé doit être unique.", + "delete_confirm_description": "Ceci supprimera le champ ainsi que toutes les données associées pour toutes les entités.", + "choices_missing_error": "Vous ne pouvez pas retirer les choix. Les choix suivants sont manquants : {{choices}}", + "key_not_changed": "Changer la clé pour quelque chose d'autre.", + "delete_confirm": "Supprimer le champ {{name}} ?", + "description": "

Ici vous pouvez ajouter des champs personnalisés supplémentaires à vos entités.

Une fois qu'un champ est ajouté, vous ne pouvez plus changer sa clé ou son type, et pour les champs de types \"Choix\", vous ne pouvez plus retirer un choix ou changer l'état des choix multiples. Si vous supprimez un champ, les données associées aux entités seront supprimées.

La clé correspond à ce que les autres programmes lisent/écrivent, donc si votre champs doit s'intégrer avec un programme tiers, assurez-vous de le configurer correctement. La valeur par défaut n'est appliquées qu'aux nouveaux éléments.

Les champs supplementaires ne peuvent pas être triés ou filtrés dans les vues de table.

" + }, + "header": "Paramètres", + "general": { + "currency": { + "label": "Devise" + }, + "tab": "Général" + } } } diff --git a/client/public/locales/hu/common.json b/client/public/locales/hu/common.json index e775af5..7e0e7e2 100644 --- a/client/public/locales/hu/common.json +++ b/client/public/locales/hu/common.json @@ -85,10 +85,10 @@ }, "suffix": " | Spoolman", "home": { - "list": "" + "list": "Kezdőlap | Spoolman" }, "help": { - "list": "" + "list": "Segítség | Spoolman" } }, "spool": { @@ -110,7 +110,7 @@ "used_weight": "Felhasznált súly", "id": "ID", "remaining_weight": "Hátralévő súly", - "price": "" + "price": "Ár" }, "titles": { "archive": "Arhivált tekercs", @@ -128,7 +128,7 @@ "lot_nr": "Gyártói tételszám. A szín egységesség ellenőrzésére használható, ha több tekercset használsz egy nyomtatáshoz.", "remaining_weight": "Mennyi filament van még a tekercsen. Egy új tekercsnél ez a tekercs súlyával kell megegyeznie.", "location": "Hol található a tekercs, ha több helyen tárolod a tekercseidet.", - "price": "" + "price": "Egy teljes tekercs ára. Ha nincs beállítva, a rendszer az filament árát veszi fel helyette." }, "form": { "new_location_prompt": "Add meg az új helyet", @@ -168,7 +168,7 @@ "name": "Filament neve, hogy megkülönböztesd ezt a filament típust másoktól ugyanattól a gyártótól. Tartalmazhatja például a színét.", "article_number": "Például. EAN, UPC stb.", "spool_weight": "Az üres tekercs súlya. Ezt használják a tekercs mért súlyának meghatározásához.", - "price": "A teljes tekercs ára a konfigurált pénznemben a rendszerben.", + "price": "A teljes tekercs ára.", "weight": "A teljes tekercs súlya (nettó súly), amely nem tartalmazza a tekercs saját súlyát, csak a filament súlyát. Általában ez szerepel a csomagoláson.", "material": "Például. PLA, ABS, PETG stb." }, @@ -202,6 +202,9 @@ "filament": "Filamentek", "form": { "filament_updated": "Ez a szál anyag azóta frissült valaki/valami más által, mióta megnyitottad ezt az oldalt. A mentés felül fogja írni ezeket a változásokat!" + }, + "buttons": { + "add_spool": "Tekercs hozzáadása" } }, "actions": { @@ -253,7 +256,9 @@ "success": "Sikeres", "editSuccess": "Sikeresen módosítva {{resource}}", "deleteError": "Hiba a(z) {{resource}} törlésekor (hibakód: {{statusCode}})", - "createSuccess": "Sikeresen létrehozva {{resource}}" + "createSuccess": "Sikeresen létrehozva {{resource}}", + "saveSuccessful": "Sikeres mentés!", + "validationError": "Validációs hiba:{{error}}" }, "no": "Nem", "unknown": "Ismeretlen", @@ -270,17 +275,58 @@ "tags": { "clone": "Másolás" }, - "kofi": "", + "kofi": "Tipp a Ko-fi-ra", "home": { - "home": "" + "home": "Kezdő lap" }, "help": { "resources": { - "spool": "", - "vendor": "", - "filament": "" + "spool": "Egyedi fizikai tekercs egy adott filamentből.", + "vendor": "Azok a cégek, amelyek gyártják a filamentet.", + "filament": "Filament márkája. Olyan tulajdonságokkal rendelkeznek, mint a név, az anyag, a szín, az átmérő stb." }, - "help": "", - "description": "" + "help": "Segítség", + "description": "Segítség

Íme néhány tipp a kezdéshez.

A Spoolman 3 különböző adattípust tartalmaz:

Ha új tekercs szeretne hozzáadni az adatbázishoz, kezdje azzal, hogy létrehoz egy Filament objektumot. Amikor ezzel megvan, folytassa azzal, hogy létrehoz egy Tekercs objektumot az adott tekercs. Ha később további tekercsket szerez ugyanabból a filamentből, egyszerűen generáljon további Tekercs objektumokat, és újra használja ugyanazt a Filament objektumot.

Opcionálisan létrehozhat egy Gyártó objektumot is a filamentet gyártó vállalathoz, ha szeretné követni ezt az információt.

A Spoolmanhez más 3D-nyomtató szolgáltatásokat is csatlakoztathat, például a Moonrakert, amely automatikusan figyelemmel kíséri a filamenthasználatot, és frissíti az Tekercs objektumokat. Olvassa el a Spoolman README fájlt a beállításokkal kapcsolatos útmutatásért.

" + }, + "settings": { + "settings": "Beállítások", + "extra_fields": { + "params": { + "choices": "Választás", + "multi_choice": "Több kiválasztása", + "key": "Kulcs", + "name": "Név", + "field_type": "Típus", + "unit": "Egység", + "order": "Rendezés", + "default_value": "Alapértelmezet érték" + }, + "field_type": { + "text": "Szöveg", + "integer": "Egész szám", + "datetime": "Dátum és idő", + "float": "Lebegőpontos szám", + "integer_range": "Egész szám tartománya", + "float_range": "Lebegőpontos szám tartomány", + "choice": "Választás", + "boolean": "Logikai" + }, + "key_not_changed": "Kérlek változtasd meg a kulcsot valami másra.", + "boolean_false": "Nem", + "tab": "Extra mezők", + "boolean_true": "Igen", + "choices_missing_error": "Nem tudod eltávolítani a választásokat. A következő választások hiányoznak: {{choices}}", + "non_unique_key_error": "A kulcsnak egyedinek kell lennie.", + "delete_confirm": "Töröli a következő mezőt: {{name}}?", + "delete_confirm_description": "Ez a mező törlése és az összes entitáshoz tartozó adat törlése.", + "description": "

Itt hozzáadhatsz további egyedi mezőket az entitásokhoz.

Ha egy mezőt hozzáadtál, nem lehet megváltoztatni annak kulcsát vagy típusát, és a választási típusú mezők esetében nem lehet eltávolítani a választásokat vagy megváltoztatni a többválasztásos állapotot. Ha eltávolítasz egy mezőt, az összes entitásra vonatkozó adat törlődik.

A kulcs az, amit más programok olvasnak/írnak az adatokként, tehát ha az egyedi meződ egy harmadik féllel integrálódik, győződj meg róla, hogy helyesen van beállítva. Az alapértelmezett érték csak az új elemekre vonatkozik.

Az extra mezőket nem lehet rendezni vagy szűrni a táblázatnézetekben.

" + }, + "header": "Beállítások", + "general": { + "currency": { + "label": "Pénznem" + }, + "tab": "Általános" + } } } diff --git a/client/public/locales/it/common.json b/client/public/locales/it/common.json index 43733a3..1b56bb2 100644 --- a/client/public/locales/it/common.json +++ b/client/public/locales/it/common.json @@ -16,7 +16,9 @@ "bedTemp": "BT: {{temp}}", "lotNr": "Lotto Nr: {{lot}}", "showFilamentComment": "Note Aggiuntive Filamento", - "button": "Stampa QR-Codes" + "button": "Stampa QR-Codes", + "template": "Modello", + "templateHelp": "Utilizza {} per inserire i valori della bobina nel testo. Ad esempio, {id} verrà sostituito con l'id della bobina, oppure {filament.material} verrà sostituito con il materiale della bobina. Racchiudi il testo con un doppio asterisco ** per renderlo in grassetto. Fai clic sul pulsante per visualizzare un elenco di tutte le etichette disponibili." }, "generic": { "printerMarginBottom": "Safe-Zone Inferiore", @@ -48,7 +50,15 @@ "showBorder": "Mostra Bordi", "printerMarginLeft": "Safe-Zone Sinistra", "dimensions": "Dimensioni", - "print": "Stampa" + "print": "Stampa", + "settings": "Impostazioni", + "defaultSettings": "Predefinito", + "addSettings": "Aggiungi nuova impostazione", + "newSetting": "Nuovo", + "deleteSettings": "Elimina impostazione corrente", + "deleteSettingsConfirm": "Sei sicuro di voler eliminare questa impostazione?", + "settingsName": "Nome impostazione", + "itemCopies": "Copie dell'elemento" }, "spoolSelect": { "selectedTotal_one": "{{count}} bobina selezionata", @@ -64,9 +74,9 @@ "documentTitle": { "vendor": { "create": "Crea Produttore | Spoolman", - "clone": "#{{id}} Clona Produttore | Spoolman", + "clone": "#{{id}} Duplica Produttore | Spoolman", "edit": "#{{id}} Modifica Produttore | Spoolman", - "list": "Produttore | Spoolman", + "list": "Produttori | Spoolman", "show": "#{{id}} Mostra Produttore | Spoolman" }, "default": "Spoolman", @@ -86,10 +96,10 @@ }, "suffix": " | Spoolman", "home": { - "list": "" + "list": "Home | Spoolman" }, "help": { - "list": "" + "list": "Aiuto | Spoolman" } }, "spool": { @@ -111,7 +121,11 @@ "used_weight": "Peso Utilizzato", "id": "ID", "remaining_weight": "Peso Rimanente", - "price": "" + "price": "Prezzo", + "filament_external": "Esterno", + "filament_internal": "Interno", + "spool_weight": "Peso a vuoto/tara", + "initial_weight": "Peso iniziale" }, "titles": { "archive": "Archivia Bobina", @@ -129,7 +143,10 @@ "lot_nr": "Numero di lotto del produttore. Può essere utilizzato per garantire che la stampa abbia colori uniformi se vengono utilizzate più bobine.", "remaining_weight": "Quanto filamento è rimasto sulla bobina. Per una nuova bobina questo dovrebbe corrispondere al peso della bobina.", "location": "Dove si trova la bobina se disponi di più posizioni in cui conservare le bobine.", - "price": "" + "price": "Prezzo di una bobina completa. Se non viene impostato, verrà utilizzato il prezzo del filamento.", + "spool_weight": "Il peso della bobina vuota (tara). Lasciare vuoto per usare il valore dal profilo filamento o dal profilo produttore.", + "external_filament": "Hai selezionato un filamento da un database esterno. Un profilo filamento (e possibilmente anche un profilo produttore) verrà creato automaticamente quando crei questa bobina. Ciò potrebbe creare un profilo filamento duplicato se hai già creato un profilo per questo filamento.", + "initial_weight": "Peso iniziale del filamento sulla bobina (peso netto). Se non impostato, viene utilizzato il peso dal profilo del filamento." }, "form": { "new_location_prompt": "Inserisci nuova posizione", @@ -169,9 +186,10 @@ "name": "Nome del filamento, per distinguere questo tipo di filamento dagli altri dello stesso produttore. Dovrebbe contenere il colore, ad esempio.", "article_number": "Es.: EAN, UPC, etc.", "spool_weight": "Il peso di una bobina vuota. Utilizzato per determinare il peso misurato di una bobina.", - "price": "Prezzo di una bobina intera nella valuta configurata dal sistema.", + "price": "Prezzo di una bobina piena.", "weight": "Il peso del filamento di una bobina piena (peso netto). Questo non dovrebbe includere il peso della bobina stessa, ma solo del filamento. È quello che solitamente c'è scritto sulla confezione.", - "material": "Es.: PLA, ABS, PETG, etc." + "material": "Es.: PLA, ABS, PETG, etc.", + "multi_color_direction": "I filamenti possono avere più colori in due modi: attraverso la coestrusione, come i filamenti a due colori con più colori omogenei, o attraverso cambiamenti di colore longitudinali, come i filamenti a gradiente che cambiano colore lungo la bobina." }, "fields": { "material": "Materiale", @@ -184,13 +202,18 @@ "registered": "Registrato", "name": "Nome", "price": "Prezzo", - "settings_bed_temp": "Temperatura Bed", + "settings_bed_temp": "Temperatura Piatto", "vendor": "Produttore", "density": "Densità", "id": "ID", "color_hex": "Colore", "article_number": "Numero Articolo", - "spools": "Mostra bobine" + "spools": "Mostra bobine", + "external_id": "ID esterno", + "single_color": "Unico", + "multi_color": "Multiplo", + "coaxial": "Coestruso", + "longitudinal": "Longitudinale" }, "titles": { "clone": "Clona Filamento", @@ -202,7 +225,12 @@ }, "filament": "Filamenti", "form": { - "filament_updated": "Ci sono stati degli aggiornamenti per questo filamento da quando è stata aperta questa pagina. Il salvataggio sovrascriverà le modifiche!" + "filament_updated": "Ci sono stati degli aggiornamenti per questo filamento da quando è stata aperta questa pagina. Il salvataggio sovrascriverà le modifiche!", + "import_external": "Importa da Esterno", + "import_external_description": "Seleziona un filamento dalla lista per compilare automaticamente i dettagli del modulo creazione filamento. Ciò sovrascriverà qualsiasi informazione hai precedentemente inserito nel modulo.
Se necessario, verrà creato automaticamente un profilo Produttore quando clicchi Ok." + }, + "buttons": { + "add_spool": "Aggiungi Bobina" } }, "actions": { @@ -217,7 +245,7 @@ "show_title": "[Produttore #{{id}}] {{name}}", "show": "Mostra Produttori", "edit": "Modifica Produttore", - "clone": "Clona Produttore", + "clone": "Duplica Produttore", "create": "Crea Produttore", "list": "Produttori" }, @@ -225,11 +253,16 @@ "registered": "Registrato", "comment": "Note", "name": "Nome", - "id": "ID" + "id": "ID", + "external_id": "ID Esterno", + "empty_spool_weight": "Peso a vuoto della bobina/tara" }, "vendor": "Produttori", "form": { - "vendor_updated": "Ci sono stati degli aggiornamenti per questo produttore da quando è stata aperta questa pagina. Il salvataggio sovrascriverà le modifiche!" + "vendor_updated": "Ci sono stati degli aggiornamenti per questo produttore da quando hai aperto questa pagina. Il salvataggio sovrascriverà le modifiche!" + }, + "fields_help": { + "empty_spool_weight": "Il peso di una bobina vuota di questo produttore." } }, "scanner": { @@ -254,7 +287,9 @@ "success": "Riuscito", "editSuccess": "{{resource}} modificata con successo", "deleteError": "Error nella cancellazione di {{resource}} (status code: {{statusCode}})", - "createSuccess": "{{resource}} creata correttamente" + "createSuccess": "{{resource}} creata correttamente", + "saveSuccessful": "Salvataggio completato!", + "validationError": "Errore di convalida: {{error}}" }, "no": "No", "unknown": "Sconosciuto", @@ -272,7 +307,7 @@ "clone": "Clona" }, "help": { - "description": "Aiuto

Ecco alcuni suggerimenti per iniziare.

Spoolman può contenere 3 diversi tipi di dati:

Per aggiungere una nuova bobina al database, inizia creando una sezioneFilamento. Fatto ciò, procedi con la creazione di una sezione Bobina per la questa specifica bobina. Se in seguito si acquisiscono altre bobine dello stesso filamento, sarà sufficiente generare altre sezioni bobina e riutilizzare la stessa sezione filamento.

Opzionalmente, si può anche creare una sezione Produttore per l'azienda produttrice del filamento, se si desidera tenere traccia di tali informazioni.

È possibile collegare a Spoolman altri servizi per stampanti 3D, come Moonraker, che può monitorare l'utilizzo del filamento e aggiornare le sezioni Spool automaticamente. Fare riferimento al README di Spoolman per maggiori informazioni sulla configurazione.

", + "description": "Aiuto

Ecco alcuni suggerimenti per iniziare.

Spoolman può contenere 3 diversi tipi di dati:

Per aggiungere una nuova bobina al database, inizia creando una sezione filamento. Fatto ciò, procedi con la creazione di una sezione bobina per la questa specifica bobina. Se in seguito si acquisiscono altre bobine dello stesso filamento, sarà sufficiente generare altre sezioni bobina e riutilizzare la stessa sezione filamento.

Opzionalmente, si può anche creare una sezione produttore per l'azienda produttrice del filamento, se si desidera tenere traccia di tali informazioni.

È possibile collegare a Spoolman altri servizi per stampanti 3D, come Moonraker, che può monitorare l'utilizzo del filamento e aggiornare le sezioni Spool automaticamente. Fare riferimento al README di Spoolman per maggiori informazioni sulla configurazione.

", "resources": { "spool": "Bobine fisiche individuali di uno specifico filamento.", "filament": "Marche di filamento. Hanno proprietà come nome, materiale, colore, diametro e altro.", @@ -280,8 +315,49 @@ }, "help": "Aiuto" }, - "kofi": "", + "kofi": "Donazione su Ko-fi", "home": { - "home": "" + "home": "Home" + }, + "settings": { + "settings": "Impostazioni", + "extra_fields": { + "params": { + "order": "Ordine", + "default_value": "Valore di Default", + "key": "Chiave", + "name": "Nome", + "field_type": "Tipo", + "choices": "Scelte", + "multi_choice": "Scelta multipla", + "unit": "Unità" + }, + "field_type": { + "text": "\"Testo\" per tipo campo extra", + "datetime": "Data e ora", + "choice": "Scelta", + "float": "Decimali", + "integer_range": "Intervallo di numeri interi", + "float_range": "Intervallo decimali", + "boolean": "Booleano", + "integer": "\"Intero\" per tipo campo extra, numero intero senza decimali" + }, + "choices_missing_error": "Non è possibile rimuovere le scelte. Mancano i seguenti elementi: {{choices}}", + "non_unique_key_error": "La chiave deve essere univoca.", + "key_not_changed": "Si prega di utilizzare una chiave diversa.", + "boolean_true": "Si", + "boolean_false": "No", + "delete_confirm": "Cancellare il campo {{name}}?", + "delete_confirm_description": "Questo eliminerà il campo e tutti i dati associati di tutte le selezioni.", + "tab": "Campi extra", + "description": "

Qui è possibile aggiungere campi personalizzati.

Una volta aggiunto un campo, non è possibile modificarne la chiave o il tipo, e per i campi di tipo scelta non è possibile rimuovere le scelte o modificare lo stato di scelta multipla. Se si rimuove un campo, tutti i dati associati saranno cancellati.

La chiave è il modo in cui gli altri programmi leggono/scrivono i dati, quindi se il campo personalizzato deve integrarsi con un programma di terze parti, assicurarsi di impostarla correttamente. Il valore predefinito viene applicato solo ai nuovi elementi.

I campi extra non possono essere ordinati o filtrati nelle viste tabella.

" + }, + "header": "Impostazioni", + "general": { + "tab": "Generale", + "currency": { + "label": "Valuta" + } + } } } diff --git a/client/public/locales/lt/common.json b/client/public/locales/lt/common.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/client/public/locales/lt/common.json @@ -0,0 +1 @@ +{} diff --git a/client/public/locales/nb-NO/common.json b/client/public/locales/nb-NO/common.json index a469d37..3886563 100644 --- a/client/public/locales/nb-NO/common.json +++ b/client/public/locales/nb-NO/common.json @@ -21,7 +21,8 @@ "filter": "Filtrer", "refresh": "Gjenoppfrisk", "notAccessTitle": "Du har ikke rettighet til å få tilgang", - "saveAndAdd": "Lagre og legg til" + "saveAndAdd": "Lagre og legg til", + "continue": "Fortsett" }, "filament": { "fields": { @@ -95,25 +96,42 @@ "description": "Still inn innstillingene nedenfor for å få ønsket utskriftsoppsett. Husk at skrivere og operativsystemet ditt kan bruke sine egne marger og skalering, så det kan hende du må prøve og feile før alt er riktig. Test det på et stykke vanlig papir før du skriver ut på selve etikettene.", "horizontalSpacing": "Horisontal avstand", "marginLeft": "Venstre marg", - "showBorder": "Vis side" + "showBorder": "Vis side", + "defaultSettings": "Standard", + "newSetting": "Ny", + "addSettings": "Legg til ny mal", + "duplicateSettings": "Dupliser", + "deleteSettings": "Slett gjeldende mal", + "deleteSettingsConfirm": "Er du sikker på at du vil slette denne malen?", + "settingsName": "Navn på mal", + "saveSetting": "Lagre mal", + "settings": "Maler", + "saveAsImage": "Lagre som bilde" }, "qrcode": { "showTemperatures": "Temperaturer", - "button": "Skriv ut QR-koder", + "button": "Skriv ut etiketter", "showVendorComment": "Leverandørkommentar", "spoolWeight": "Spolevekt: {{weight}}", "showVendor": "Leverandør", "showSpoolComment": "Spolekommentar", - "title": "QR-kodeutskrift", + "title": "Etikettprinting", "extruderTemp": "ET: {{temp}}", "showSpoolWeight": "Spolevekt", "showContent": "Skriv ut etikett", - "textSize": "Tekststørrelse på innhold", + "textSize": "Tekststørrelse på etikett", "showSpoolmanIcon": "Vis Spoolman ikon", "showLotNr": "Batch Nr", "bedTemp": "BT: {{temp}}", "lotNr": "Batch Nr: {{lot}}", - "showFilamentComment": "Filament kommentar" + "showFilamentComment": "Filament kommentar", + "template": "Etikett mal", + "showQRCodeMode": { + "simple": "Simpel", + "no": "Nei", + "withIcon": "Med ikon" + }, + "showQRCode": "Print QR-kode" }, "spoolSelect": { "showArchived": "Vis arkiverte", @@ -121,7 +139,7 @@ "noSpoolsSelected": "Du har ikke valgt noen spoler.", "selectedTotal_one": "{{count}} spole valgt", "selectedTotal_other": "{{count}} spoler valgt", - "description": "Velg spoler å printe ut QR-koder for.", + "description": "Velg spoler å printe ut etiketter for.", "selectAll": "Velg/fjern merking av alle" } }, @@ -146,7 +164,11 @@ "filament_name": "Filament", "filament": "Filament", "location": "Lokasjon", - "price": "" + "price": "Pris", + "filament_internal": "Internt", + "filament_external": "Eksternt", + "initial_weight": "Startvekt", + "spool_weight": "Tom vekt" }, "titles": { "archive": "Arkiver spole", @@ -168,7 +190,10 @@ "lot_nr": "Produsentens batch nummer. Kan bli benyttet or å verifiserer at print har en konsistent farge dersom flere spoler benyttes.", "remaining_weight": "Hvor mye filament gjenstår på spolen. Ved en ny spole burde dette stemme med spolevekt.", "location": "Hvor spolen er plassert hvis du har flere lokasjoner hvor du oppbevarer spoler.", - "price": "" + "price": "Pris på en full spole. Hvis ikke satt, vil prisen på filamentet bli antatt i stedet.", + "spool_weight": "Vekten av spolen når den er tom. La stå tomt for å bruke verdien fra filamentet eller produsenten.", + "initial_weight": "Startvekten av filament på spolen (nettovekt). Vil bruke vekten fra filament hvis ikke satt.", + "external_filament": "Du har valgt et filament fra den eksterne databasen. Et filamentobjekt (og muligens et produsentobjekt) opprettes automatisk når du oppretter denne spolen. Dette kan lage dupliserte filamentobjekter hvis du allerede har opprettet et filamentobjekt for denne filamentet." }, "form": { "new_location_prompt": "Skriv inn en ny lokasjon", @@ -229,7 +254,9 @@ "createError": "Kunne ikke opprette {{resource}} (statuskode: {{statusCode}})", "editSuccess": "{{resource}} redigert", "deleteError": "Kunne ikke slette {{resource}} (statuskode: {{statusCode}})", - "createSuccess": "Opprettet {{resource}}" + "createSuccess": "Opprettet {{resource}}", + "saveSuccessful": "Lagring vellykket!", + "validationError": "Valideringsfeil: {{error}}" }, "loading": "Laster", "documentTitle": { @@ -270,7 +297,7 @@ "dashboard": { "title": "Oversikt" }, - "kofi": "", + "kofi": "Gi meg tips på Ko-fi", "home": { "home": "" }, diff --git a/client/public/locales/nl/common.json b/client/public/locales/nl/common.json index 7cf1015..5ad71ed 100644 --- a/client/public/locales/nl/common.json +++ b/client/public/locales/nl/common.json @@ -9,19 +9,20 @@ "showArchived": "Gearchiveerd tonen", "archive": "Archiveren", "hideColumns": "Kolommen verbergen", - "confirm": "Weet je het zeker?", + "confirm": "Weet u het zeker?", "delete": "Verwijderen", "undo": "Ongedaan maken", "import": "Importeren", "logout": "Uitloggen", "refresh": "Vernieuwen", - "notAccessTitle": "Je hebt geen toegang tot", + "notAccessTitle": "U heeft geen toegang tot", "hideArchived": "Gearchiveerd verbergen", "clearFilters": "Filters leegmaken", - "unArchive": "Dearchiveren", + "unArchive": "Terugzetten", "clone": "Klonen", "clear": "Wissen", - "saveAndAdd": "Opslaan en Toevoegen" + "saveAndAdd": "Opslaan en Toevoegen", + "continue": "Doorgaan" }, "actions": { "create": "Aanmaken", @@ -39,10 +40,10 @@ "helpPrinterMargin": "Safe-Zone moet worden ingesteld op hoe dicht bij de papierrand uw printer kan afdrukken. Als u deze wijzigt, heeft dit geen invloed op het hele raster.", "previewScale": "Voorbeeldschaal", "helpMargin": "Marges moeten worden geconfigureerd zodat ze overeenkomen met je labelpapier en printer. Als u deze wijzigt, heeft dit invloed op de grootte van het hele raster.", - "skipItems": "Items overlaan", + "skipItems": "Items overslaan", "paperSize": "Papierformaat", "columns": "Kolommen", - "description": "Stem de onderstaande instellingen af om de gewenste printlay-out te krijgen. Houd er rekening mee dat printers en je besturingssysteem hun eigen marges en schaling kunnen toepassen, dus het kan zijn dat je met wat instellingen moet spelen voordat alles correct is. Test het op een stuk gewoon papier voordat u op de daadwerkelijke etiketten afdrukt.", + "description": "Stem de onderstaande instellingen af om de gewenste print lay-out te krijgen. Houd er rekening mee dat printers en je besturingssysteem hun eigen marges en schaling kunnen toepassen, dus het kan zijn dat je met wat instellingen moet spelen voordat alles correct is. Test het op een stuk gewoon papier voordat u op de daadwerkelijke etiketten afdrukt.", "showBorder": "Rand tonen", "dimensions": "Afmetingen", "print": "Printen", @@ -61,7 +62,18 @@ "marginBottom": "Onderste marge", "horizontalSpacing": "Horizontale afstand", "marginLeft": "Linker marge", - "printerMarginLeft": "Linker Safe-Zone" + "printerMarginLeft": "Linker Safe-Zone", + "settings": "Voorinstellingen", + "defaultSettings": "Standaard", + "addSettings": "Nieuwe voorinstelling toevoegen", + "newSetting": "Nieuw", + "deleteSettings": "Huidige voorinstelling wissen", + "deleteSettingsConfirm": "Weet je zeker dat je deze voorinstelling wilt verwijderen?", + "settingsName": "Voorinstellingsnaam", + "itemCopies": "Itemkopieën", + "duplicateSettings": "Dupliceren", + "saveSetting": "Voorinstelling opslaan", + "saveAsImage": "Opslaan als afbeelding" }, "qrcode": { "extruderTemp": "ET: {{temp}}", @@ -72,30 +84,38 @@ "showTemperatures": "Temperaturen", "showVendor": "Fabrikant", "showSpoolComment": "Opmerking spoel", - "textSize": "Inhoud tekstgrootte", - "title": "QR-Code afdrukken", + "textSize": "Label tekstgrootte", + "title": "Label afdrukken", "showSpoolmanIcon": "Spoolman icoon tonen", - "showLotNr": "Lotnr", + "showLotNr": "Lotnummer", "bedTemp": "BT: {{temp}}", - "lotNr": "Lotnr: {{lot}}", + "lotNr": "Lotnummer: {{lot}}", "showFilamentComment": "Opmerking filament", - "button": "QR-Codes afdrukken" + "button": "Labels afdrukken", + "template": "Label Sjabloon", + "templateHelp": "Gebruik {} om waarden van het spoelobject als tekst in te voegen. Bijvoorbeeld {id} wordt vervangen door het id van de spoel, of {filament.material} wordt vervangen door het materiaal van de spoel. Voeg een dubbel sterretje (**) toe voor en achter de tekst om het vet te maken. Klik op de knop om een lijst met alle beschikbare tags te bekijken.", + "showQRCodeMode": { + "no": "Nee", + "simple": "Simpel", + "withIcon": "Met Icoon" + }, + "showQRCode": "Print QR-Code" }, "spoolSelect": { "selectedTotal_one": "{{count}} spoel geselecteerd", "selectedTotal_other": "{{count}} spoelen geselecteerd", - "description": "Selecteer spoelen waarvoor je QR-codes wilt afdrukken.", + "description": "Selecteer spoelen waarvoor je labels wilt afdrukken.", "showArchived": "Gearchiveerde tonen", "title": "Spoelen selecteren", - "selectAll": "Alles selecteren/deselecteren", - "noSpoolsSelected": "Je hebt geen spoelen geselecteerd." + "selectAll": "Alles (de)selecteren", + "noSpoolsSelected": "U heeft geen spoelen geselecteerd." } }, "notifications": { "deleteSuccess": "{{resource}} succesvol verwijderd", "error": "Fout (fout code {{statusCode}})", "editError": "Fout opgetreden bij het bewerken van {{resource}} (status code {{statusCode}})", - "undoable": "Je hebt {{seconds}} seconden om ongedaan te maken.", + "undoable": "U heeft {{seconds}} seconden om ongedaan te maken.", "importProgress": "Importeren: {{processed}}/{{total}}", "createError": "Er is een fout opgetreden bij het aanmaken van {{resource}} (status code {{statusCode}})", "success": "Succesvol", @@ -109,7 +129,7 @@ "unknown": "Onbekend", "yes": "Ja", "version": "Versie", - "warnWhenUnsavedChanges": "Weet je zeker dat je wil vertrekken? Er zijn niet-opgeslagen wijzigingen.", + "warnWhenUnsavedChanges": "Weet u zeker dat u deze pagina wilt verlaten? Er zijn niet-opgeslagen wijzigingen.", "loading": "Laden", "dashboard": { "title": "Dashboard" @@ -120,7 +140,7 @@ "documentTitle": { "vendor": { "create": "Fabrikant maken | Spoolman", - "clone": "#{{id}} Leverancier klonen | Spoolman", + "clone": "#{{id}} Fabrikant klonen | Spoolman", "edit": "#{{id}} Fabrikant bewerken | Spoolman", "list": "Fabrikanten | Spoolman", "show": "#{{id}} Fabrikant tonen | Spoolman" @@ -154,7 +174,7 @@ "last_used": "Laatst gebruikt", "material": "Materiaal", "weight_to_use": "Gewicht", - "lot_nr": "Lotnr", + "lot_nr": "Lotnummer", "filament_name": "Filament", "comment": "Opmerking", "filament": "Filament", @@ -167,7 +187,11 @@ "used_weight": "Gebruikt gewicht", "id": "ID", "remaining_weight": "Overgebleven gewicht", - "price": "Prijs" + "price": "Prijs", + "initial_weight": "Initieel gewicht", + "spool_weight": "Leeg gewicht", + "filament_internal": "Intern", + "filament_external": "Extern" }, "titles": { "archive": "Spoel archiveren", @@ -176,34 +200,46 @@ "create": "Spoel maken", "clone": "Spoel klonen", "list": "Spoelen", - "show_title": "[Spoel #{{id}}] {{name}}" + "show_title": "[Spoel #{{id}}] {{name}}", + "adjust": "Spoel Filament aanpassen" }, "fields_help": { "used_weight": "Hoeveel filament er van de spoel is gebruikt. Op een nieuwe spoel zal 0g gebruikt zijn.", - "weight_to_use": "Selecteer welke gewichtswaarde je wilt invoeren. Het gemeten gewicht is alleen beschikbaar als het spoelgewicht is ingesteld voor het geselecteerde filament.", + "weight_to_use": "Selecteer welke gewichtswaarde u wilt invoeren. Het gemeten gewicht is alleen beschikbaar als het spoelgewicht is ingesteld voor het geselecteerde filament.", "measured_weight": "Hoeveel het filament en de spoel wegen.", "lot_nr": "Lotnummer van de fabrikant. Kan worden gebruikt om ervoor te zorgen dat een afdruk een consistente kleur heeft als er meerdere spoelen worden gebruikt.", "remaining_weight": "Hoeveel filament zit er nog op de spoel. Bij een nieuwe spoel zal dit overeenkomen met het spoelgewicht.", - "location": "Waar de spoel zich bevindt als je meerdere locaties hebt waar je jouw spoelen opslaat.", - "price": "Prijs van een volledige spoel in de door het systeem geconfigureerde valuta. Als dit niet wordt ingevuld, wordt in plaats daarvan uitgegaan van de prijs van het filament." + "location": "Waar de spoel zich bevindt, wanneer er meerdere opslag locaties zijn.", + "price": "Prijs van een volledige spoel. Als dit niet wordt ingevuld, wordt in plaats daarvan uitgegaan van de prijs van het filament.", + "initial_weight": "Het initiële gewicht van het filament op de spoel (nettogewicht). Als dit niet is opgegeven, wordt het gewicht van het filament-object gebruikt.", + "spool_weight": "Het gewicht van de spoel als deze leeg is. Laat dit leeg om de waarde van het filament of de fabrikant te gebruiken.", + "external_filament": "U heeft een filament uit de externe database geselecteerd. Er wordt automatisch een filament-object (en mogelijk een fabrikant-object) gemaakt wanneer u deze spoel maakt. Hierdoor kunnen dubbele filament-objecten ontstaan als u al een filament-object voor dit filament hebt gemaakt." }, "spool": "Spoelen", "messages": { - "archive": "Weet je zeker dat je deze spoel wil archiveren?" + "archive": "Weet u zeker dat u deze spoel wil archiveren?" }, "form": { "new_location_prompt": "Voer een nieuwe locatie in", - "spool_updated": "Deze spoel is bijgewerkt door iemand/iets anders sinds je deze pagina hebt geopend. Opslaan zal die wijzigingen overschrijven!" + "spool_updated": "Deze spoel is bijgewerkt door iemand/iets anders sinds je deze pagina hebt geopend. Opslaan zal die wijzigingen overschrijven!", + "adjust_filament_help": "Hier kunt u direct filament toevoegen of verwijderen van de spoel. Een positieve waarde zal filament verbruiken, een negatieve waarde zal het toevoegen.", + "measurement_type": { + "length": "Lengte", + "weight": "Gewicht" + }, + "measurement_type_label": "Meettype", + "adjust_filament_value": "Verbruikte hoeveelheid" } }, "filament": { "fields_help": { - "name": "Filamentnaam, om dit filamenttype onder andere van dezelfde fabrikant te onderscheiden. Kan bijvoorbeeld de kleur bevatten.", + "name": "Filamentnaam, om dit filamenttype onder andere van dezelfde fabrikant te onderscheiden. Moet bijvoorbeeld de kleur bevatten.", "article_number": "Bv. EAN. UPC, enz.", "spool_weight": "Het gewicht van een lege spoel. Wordt gebruikt om het gemeten gewicht van een spoel te bepalen.", - "price": "Prijs van een volledige spoel in de door het systeem geconfigureerde valuta.", + "price": "Prijs van een volledige spoel.", "weight": "Het filamentgewicht van een volle spoel (nettogewicht). Dit mag niet het gewicht van de spoel zelf omvatten, alleen het filament. Dit staat meestal op de verpakking.", - "material": "Bv. PLA, ABS, PETG, enz." + "material": "Bv. PLA, ABS, PETG, enz.", + "multi_color_direction": "Filamenten kunnen op twee manieren meerdere kleuren hebben: door coëxtrusie, zoals tweekleurige filamenten met consistente meerkleuren, of door kleurveranderingen in de lengterichting, zoals verloopfilamenten die van kleur veranderen langs de spoel." }, "fields": { "material": "Materiaal", @@ -221,20 +257,27 @@ "density": "Dichtheid", "id": "ID", "color_hex": "Kleur", - "article_number": "Artiekelnummer", - "spools": "Spoelen tonen" + "article_number": "Artikel nummer", + "spools": "Spoelen tonen", + "external_id": "Extern ID", + "single_color": "Enkel", + "multi_color": "Meervoudig", + "coaxial": "Gecoëxtrudeerde", + "longitudinal": "Longitudinaal" }, "titles": { - "clone": "Flimanent klonen", + "clone": "Filament klonen", "show": "Filament tonen", - "create": "Flimament maken", + "create": "Filament maken", "edit": "Filament bewerken", "list": "Filamenten", "show_title": "[Filament #{{id}}] {{name}}" }, "filament": "Filamenten", "form": { - "filament_updated": "Dit filament is bijgewerkt door iemand/iets anders sinds je deze pagina geopend hebt. Deze veranderingen worden overschreven als je op slaat!" + "filament_updated": "Dit filament is bijgewerkt door iemand/iets anders sinds je deze pagina geopend hebt. Deze veranderingen worden overschreven als je op slaat!", + "import_external_description": "Selecteer een filament in de lijst om de details ervan automatisch in te vullen in het formulier voor het maken van filamenten. Hierdoor worden alle gegevens die u in het formulier hebt ingevoerd, overschreven.

Er wordt indien nodig automatisch een Fabrikant-object gemaakt als u op OK klikt.", + "import_external": "Importeren van extern" }, "buttons": { "add_spool": "Spoel toevoegen" @@ -265,15 +308,20 @@ "registered": "Geregistreerd", "comment": "Opmerking", "name": "Naam", - "id": "ID" + "id": "ID", + "empty_spool_weight": "Gewicht lege spoel", + "external_id": "Extern ID" }, "vendor": "Fabrikanten", "form": { - "vendor_updated": "Deze leverancier is bijgewerkt dor iemand/iets anders sinds je deze pagina geopend hebt. De veranderingen worden overschreven als je opslaat!" + "vendor_updated": "Deze fabrikant is bijgewerkt door iemand/iets anders sinds je deze pagina geopend hebt. De veranderingen worden overschreven als je opslaat!" + }, + "fields_help": { + "empty_spool_weight": "Het gewicht van een lege spoel van deze fabrikant." } }, "table": { - "actions": "Akties" + "actions": "Acties" }, "help": { "resources": { @@ -281,7 +329,7 @@ "filament": "Merken filament. Ze hebben eigenschappen zoals naam, materiaal, kleur, diameter en meer.", "spool": "Individuele fysieke spoelen van een specifiek filament." }, - "description": "Help

Hier zijn enkele tips om u op weg te helpen.

Spoolman bewaart 3 verschillende soorten gegevens:

Om een nieuwe toe spoel toe te voegen in de database, begin dan met het maken van een Filament object. Zodra dat is gebeurd, gaat u verder met het maken van een Spoel-object voor die specifieke spoel. Als u later extra spoelen van hetzelfde filament aanschaft, genereert u eenvoudigweg extra Spoel-objecten en hergebruikt u hetzelfde Filament-object.

Optioneel kunt u ook een Vendor-object voor het bedrijf genereren als u die informatie wilt bijhouden.

U heeft de mogelijkheid om andere 3D-printerservices aan Spoolman te koppelen, zoals Moonraker, die automatisch het filament gebruik kan monitoren en de Spoel-objecten voor u kan bijwerken. Raadpleeg de Spoolman README voor richtlijnen over hoe u dat kunt instellen.

", + "description": "Help

Hier zijn enkele tips om u op weg te helpen.

Spoolman bewaart 3 verschillende soorten gegevens:

Om een nieuwe toe spoel toe te voegen in de database, begin dan met het maken van een Filament object. Zodra dat is gebeurd, gaat u verder met het maken van een Spoel-object voor die specifieke spoel. Als u later extra spoelen van hetzelfde filament aanschaft, genereert u eenvoudigweg extra Spoel-objecten en hergebruikt u hetzelfde Filament-object.

Optioneel kunt u ook een Fabrikant-object voor het bedrijf genereren als u die informatie wilt bijhouden.

U heeft de mogelijkheid om andere 3D-printerservices aan Spoolman te koppelen, zoals Moonraker, die automatisch het filament gebruik kan monitoren en de Spoel-objecten voor u kan bijwerken. Raadpleeg de Spoolman README voor richtlijnen over hoe u dat kunt instellen.

", "help": "Help" }, "kofi": "Tip mij op Ko-fi", @@ -322,10 +370,11 @@ "boolean_false": "Nee", "choices_missing_error": "U kunt geen keuzes verwijderen. De volgende keuzes ontbreken: {{choices}}", "non_unique_key_error": "De key moet uniek zijn.", - "key_not_changed": "Verander de key in iets anders.", + "key_not_changed": "Key niet gewijzigd.", "delete_confirm": "Veld {{name}} verwijderen?", "delete_confirm_description": "Hierdoor worden het veld en alle bijbehorende gegevens voor alle entiteiten verwijderd.", "description": "

Hier kunt u extra aangepaste velden toevoegen aan uw entiteiten.

Zodra een veld is toegevoegd, kunt u de key of het type ervan niet wijzigen, en voor velden met keuzetypes kunt u geen keuzes verwijderen of de meervoudige velden wijzigen. Als u een veld verwijdert, worden de bijbehorende gegevens voor alle entiteiten verwijderd.

De key is hoe andere programma's de gegevens lezen/schrijven, dus of uw aangepaste veld moet worden geïntegreerd met een derde partij programma, zorg ervoor dat u het correct instelt. De standaardwaarde wordt alleen toegepast op nieuwe items.

Extra velden kunnen niet worden gesorteerd of gefilterd in de tabelweergaven.

" - } + }, + "settings": "Instellingen" } } diff --git a/client/public/locales/pl/common.json b/client/public/locales/pl/common.json index d5ed960..29cfc6a 100644 --- a/client/public/locales/pl/common.json +++ b/client/public/locales/pl/common.json @@ -47,7 +47,7 @@ "filament": "Filament", "material": "Materiał", "remaining_weight": "Pozostała waga", - "used_length": "Użyta długość", + "used_length": "Zużyta długość", "remaining_length": "Pozostała długość", "location": "Lokalizacja", "lot_nr": "Numer partii (LOT)", @@ -55,11 +55,13 @@ "last_used": "Ostatnie użycie", "comment": "Komentarz", "archived": "Zarchiwizowano", - "used_weight": "Użyta waga", + "used_weight": "Zużyta waga", "registered": "Zarejestrowano", "measured_weight": "Zmierzona waga", "weight_to_use": "Waga", - "price": "" + "price": "Cena", + "initial_weight": "Waga początkowa", + "spool_weight": "Waga pusta" }, "fields_help": { "location": "Wpisz gdzie znajduje się szpula, jeśli masz wiele lokalizacji, w których przechowujesz szpule.", @@ -68,7 +70,9 @@ "remaining_weight": "Ile filamentu pozostało na szpuli. W przypadku nowej szpuli powinno to odpowiadać wadze szpuli.", "measured_weight": "Waga filamentu i szpuli.", "weight_to_use": "Wybierz jaką wagę wprowadzić. Zmierzona waga jest dostępna tylko wtedy, gdy waga szpuli jest ustawiona dla wybranego filamentu.", - "price": "" + "price": "Cena pełnej szpuli. Jeśli nie ustawiona, cena filamentu będzie domyślna.", + "initial_weight": "Masa początkowa filamentu(netto). Może być podana przez producenta, ale możesz ustawić dla każdej szpuli, aby uwzględnić ewentualne niedokładności.", + "spool_weight": "Waga pustej szpuli. Może być podana przez producenta, ale możesz ją ustawić osobno dla każdej szpuli, aby uwzględnić niedokładności." }, "messages": { "archive": "Czy na pewno chcesz zarchiwizować tę szpulę?" @@ -91,7 +95,9 @@ "editError": "Błąd podczas edycji {{resource}} (kod statusu: {{statusCode}})", "importProgress": "Importowanie: {{processed}}/{{total}}", "error": "Błąd (kod statusu: {{statusCode}})", - "createError": "Wystąpił błąd podczas tworzenia {{resource}} (kod statusu: {{statusCode}})" + "createError": "Wystąpił błąd podczas tworzenia {{resource}} (kod statusu: {{statusCode}})", + "saveSuccessful": "Zapisano pomyślnie!", + "validationError": "Błąd walidacji: {{error}}" }, "loading": "Wczytywanie", "version": "Wersja", @@ -124,7 +130,7 @@ "marginBottom": "Dolny margines", "printerMarginLeft": "Bezpieczna strefa po lewej", "printerMarginRight": "Bezpieczna strefa po prawej", - "printerMarginTop": "Bezpieczna strefa u góry", + "printerMarginTop": "Bezpieczna strefa od góry", "borders": { "none": "Brak", "border": "Obwódka", @@ -132,7 +138,7 @@ }, "description": "Dostosuj poniższe ustawienia, aby uzyskać pożądany układ wydruku. Należy pamiętać, że drukarki i system operacyjny mogą stosować własne marginesy i skalowanie, więc może być konieczne wykonanie kilku prób i błędów, zanim wszystko będzie prawidłowe. Przed wydrukowaniem etykiet przetestuj je na zwykłym papierze.", "horizontalSpacing": "Poziomy odstęp", - "printerMarginBottom": "Bezpieczna strefa u dołu" + "printerMarginBottom": "Bezpieczna strefa od dołu" }, "qrcode": { "button": "Drukuj kody QR", @@ -198,7 +204,7 @@ }, "fields_help": { "material": "Np. PLA, ABS, PETG itp.", - "price": "Cena pełnej szpuli w walucie skonfigurowanej przez system.", + "price": "Cena pełnej szpuli.", "spool_weight": "Waga pustej szpuli. Używana do określenia ciężaru szpuli.", "article_number": "Np. EAN, UPC itp.", "name": "Nazwa filamentu, aby odróżnić ten typ filamentu od innych pochodzących od tego samego producenta. Powinna zawierać np. kolor.", @@ -214,6 +220,9 @@ }, "form": { "filament_updated": "Ten filament został zaktualizowany przez kogoś/coś innego od czasu otwarcia tej strony. Zapisanie nadpisze te zmiany!" + }, + "buttons": { + "add_spool": "Dodaj Szpulę" } }, "vendor": { @@ -222,7 +231,8 @@ "id": "ID", "name": "Nazwa", "registered": "Zarejestrowano", - "comment": "Komentarz" + "comment": "Komentarz", + "empty_spool_weight": "Waga pustej szpuli" }, "titles": { "create": "Tworzenie producenta", @@ -234,6 +244,9 @@ }, "form": { "vendor_updated": "Ten producent został zaktualizowany przez kogoś/coś innego od czasu otwarcia tej strony. Zapisanie spowoduje nadpisanie tych zmian!" + }, + "fields_help": { + "empty_spool_weight": "Waga pustej szpuli od tego producenta." } }, "table": { @@ -277,10 +290,52 @@ "filament": "Producenci filamentów. Mają takie właściwości, jak nazwa, materiał, kolor, średnica i inne.", "spool": "Indywidualne fizyczne szpule określonego filamentu." }, - "help": "Pomoc" + "help": "Pomoc", + "description": "Pomoc

Oto kilka wskazówek na początek.

Spoolman przechowuje 3 różne typy danych:

Aby dodać nową szpulę do bazy danych, zacznij od utworzenia obiektu Filament. Gdy już to zrobisz, przejdź do utworzenia obiektu Szpula dla tej konkretnej szpuli. Jeśli później zdobędziesz dodatkowe szpule tego samego filamentu, po prostu wygeneruj dodatkowe obiekty Szpula i ponownie użyj tego samego obiektu Filament.

Opcjonalnie możesz także wygenerować obiekt Producent dla firmy produkującej filament, jeśli chcesz śledzić te informacje.

Masz możliwość połączenia innych usług drukarek 3D ze Spoolmanem, takich jak Moonraker, który może automatycznie monitorować zużycie filamentu i aktualizować obiekty Szpula. Wskazówki dotyczące konfiguracji można znaleźć w Spoolman README.

" }, "kofi": "Daj napiwek na Ko-fi", "home": { "home": "Strona główna" + }, + "settings": { + "settings": "Ustawienia", + "general": { + "currency": { + "label": "Waluta" + }, + "tab": "Ogólne" + }, + "extra_fields": { + "tab": "Dodatkowe Parametry", + "boolean_true": "Tak", + "boolean_false": "Nie", + "params": { + "name": "Nazwa", + "field_type": "Typ", + "unit": "Jednostka", + "order": "Kolejność", + "default_value": "Domyślna Wartość", + "key": "Klucz", + "choices": "Wybory", + "multi_choice": "Wielokrotny wybór" + }, + "field_type": { + "integer": "Liczba całkowita", + "integer_range": "Zakres liczb", + "float": "Liczba (ułamek)", + "choice": "Wybór", + "text": "Tekst", + "float_range": "Zakres", + "datetime": "Data i Czas", + "boolean": "Wartość logiczna" + }, + "non_unique_key_error": "Klucz musi być unikalny.", + "description": "

Tutaj możesz dodać dodatkowe komórki do zapisu danych.

Kiedy dodasz komórkę, nie można już zmienić typu danych ani klucza, a dla komurek wyboru, nie możesz zmienić możliwych wyborów ani multi-wybierania. Jeśli usuniesz komórkę, wszystkie informacje ze wszystkich obiektów z tej komórki zostaną usunięte.

Klucz jest po to, aby umożliwić innym programom odczytywać/zapisywac swoje dane,więc jeśli twoje nowa customowa komórka ma służyć do integracji z third-party programami, upewnij się że jest dobrze skonfigurowane. Domyślna wartość jest dodawana tylko do nowych komórek.

Dodatkowe komórki nie moga być sortowane ani filtrowane.

", + "choices_missing_error": "Nie możesz usunąc możliwośći wyboru. Ten wybór nie istnieje: {{choices}}", + "key_not_changed": "Zmień klucz na inny.", + "delete_confirm": "Usunąć pole {{name}}?", + "delete_confirm_description": "Ta akcja usunie wszystkie pola i powiązane z nimi dane dla wszystkich obiektów." + }, + "header": "Ustawienia" } } diff --git a/client/public/locales/pt/common.json b/client/public/locales/pt/common.json index f350bdb..8e68114 100644 --- a/client/public/locales/pt/common.json +++ b/client/public/locales/pt/common.json @@ -7,12 +7,12 @@ "edit": "Editar" }, "buttons": { - "save": "Salvar", + "save": "Guardar", "logout": "Sair", "delete": "Excluir", "edit": "Editar", "cancel": "Cancelar", - "confirm": "Tem certeza?", + "confirm": "Tem a certeza?", "filter": "Filtrar", "clear": "Limpar", "refresh": "Atualizar", @@ -22,13 +22,14 @@ "clone": "Clonar", "archive": "Arquivar", "unArchive": "Desarquivar", - "hideArchived": "Ocultar arquivados", - "showArchived": "Mostrar arquivado", + "hideArchived": "Ocultar Arquivados", + "showArchived": "Mostrar Arquivado", "notAccessTitle": "Você não tem permissão para acessar", - "hideColumns": "Ocultar colunas", - "clearFilters": "Limpar filtros", + "hideColumns": "Ocultar Colunas", + "clearFilters": "Limpar Filtros", "create": "Criar", - "saveAndAdd": "Salvar e adicionar" + "saveAndAdd": "Guardar e Adicionar", + "continue": "Continuar" }, "warnWhenUnsavedChanges": "Você tem certeza de que quer sair? Você tem alterações não salvas.", "notifications": { @@ -41,7 +42,9 @@ "deleteError": "Erro ao excluir {{resource}} (código de status: {{statusCode}})", "editSuccess": "{{resource}} editado com sucesso", "editError": "Erro ao editar {{resource}} (código de status: {{statusCode}})", - "importProgress": "Importando: {{processed}}/{{total}}" + "importProgress": "Importando: {{processed}}/{{total}}", + "saveSuccessful": "Salvo com sucesso!", + "validationError": "Erro de validação: {{error}}" }, "kofi": "Doe no Ko-fi", "loading": "Carregando", @@ -52,112 +55,146 @@ "clone": "Clonar" }, "dashboard": { - "title": "Dashboard" + "title": "Painel" }, "printing": { "generic": { "title": "Imprimindo", - "helpMargin": "As margens devem ser configuradas para corresponder ao papel de etiqueta e à impressora. Alterá-las afetará o tamanho de toda a grade.", + "helpMargin": "As margens devem ser configuradas para corresponder à sua etiqueta de papel e à impressora. Alterá-las afetará o tamanho de toda a grade.", "helpPrinterMargin": "A zona segura deve ser definida para o quão próximo da borda do papel sua impressora pode imprimir, alterá-la não afetará toda a grade.", - "previewScale": "Visualizar escala", - "skipItems": "Pular itens", - "horizontalSpacing": "Espaçamento horizontal", - "marginRight": "Margem direita", - "marginTop": "Margem superior", - "description": "Ajuste as configurações abaixo para o layout de impressão desejado. Tenha em mente que as impressoras e o seu SO podem aplicar suas próprias margens e dimensionamento, portanto, pode ser necessário realizar algumas tentativas e erros antes que tudo esteja correto. Teste em um pedaço de papel comum antes de imprimir nas etiquetas reais.", + "previewScale": "Visualizar Escala", + "skipItems": "Pular Itens", + "horizontalSpacing": "Espaçamento Horizontal", + "marginRight": "Margem Direita", + "marginTop": "Margem Superior", + "description": "Ajuste as configurações abaixo para obter o layout de impressão desejado. Tenha em mente que impressoras e sistemas operacionais podem aplicar suas próprias margens e escalonamento, portanto, pode ser necessário fazer algumas tentativas antes que tudo estaja correto. Teste em uma folha de papel comum antes de imprimir nas etiquetas reais.", "print": "Imprimir", "columns": "Colunas", "dimensions": "Dimensões", - "contentSettings": "Configurações de conteúdo", - "layoutSettings": "Configurações de layout", + "contentSettings": "Configurações de Conteúdo", + "layoutSettings": "Configurações de Layout", "rows": "Linhas", - "paperSize": "Tamanho do papel", + "paperSize": "Tamanho do Papel", "customSize": "Personalizado", - "showBorder": "Mostrar borda", - "verticalSpacing": "Espaçamento vertical", - "marginLeft": "Margem esquerda", - "marginBottom": "Margem inferior", - "printerMarginBottom": "Zona segura inferior", - "printerMarginLeft": "Zona segura esquerda", - "printerMarginRight": "Zona segura direita", + "showBorder": "Mostrar Borda", + "verticalSpacing": "Espaçamento Vertical", + "marginLeft": "Margem Esquerda", + "marginBottom": "Margem Inferior", + "printerMarginBottom": "Área Segura Inferior", + "printerMarginLeft": "Área Segura Esquerda", + "printerMarginRight": "Área Segura Direita", "borders": { "none": "Nenhuma", "border": "Borda", "grid": "Grade" }, - "printerMarginTop": "Zona segura superior" + "printerMarginTop": "Área Segura Superior", + "settings": "Pré-definições", + "defaultSettings": "Por omissão", + "addSettings": "Adicionar Pré-Definição", + "newSetting": "Novo", + "deleteSettings": "Remover Pré-definição Actual", + "deleteSettingsConfirm": "Tem a certeza que pretender remover esta pré-definição?", + "settingsName": "Nome da Pré-definição", + "itemCopies": "Cópias do Artigo", + "duplicateSettings": "Duplicar", + "saveSetting": "Guardar Pré-definições", + "saveAsImage": "Guardar como Imagem" }, "spoolSelect": { "selectedTotal_one": "{{count}} carretel selecionado", "selectedTotal_many": "{{count}} carretéis selecionados", "selectedTotal_other": "{{count}} carretéis selecionados", "noSpoolsSelected": "Você não selecionou nenhum carretel.", - "title": "Selecionar carretéis", - "description": "Selecione carretéis para imprimir códigos QR.", - "showArchived": "Mostrar arquivado", - "selectAll": "Selecionar/desmarcar tudo" + "title": "Selecionar Carretéis", + "description": "Selecione os carretéis para imprimir as etiquetas.", + "showArchived": "Mostrar Arquivado", + "selectAll": "Selecionar/Desmarcar Tudo" }, "qrcode": { - "title": "Imprimindo códigos QR", - "button": "Imprimir códigos QR", - "spoolWeight": "Peso do carretel: {{weight}}", - "lotNr": "Número do lote: {{lot}}", - "bedTemp": "Temperatura da mesa: {{temp}}", - "extruderTemp": "Temperatura do bico: {{temp}}", - "textSize": "Tamanho do texto do conteúdo", + "title": "Impressão de Etiqueta", + "button": "Imprimir Etiquetas", + "spoolWeight": "Peso do Carretel: {{weight}}", + "lotNr": "Número do Lote: {{lot}}", + "bedTemp": "Temperatura da Mesa: {{temp}}", + "extruderTemp": "Temperatura do Bico: {{temp}}", + "textSize": "Tamanho do Texto da Etiqueta", "showSpoolmanIcon": "Mostrar ícone do Spoolman", - "showVendor": "Fornecedor", - "showContent": "Etiqueta de impressão", - "showLotNr": "Número do lote", - "showSpoolWeight": "Peso do carretel", + "showVendor": "Fabricante", + "showContent": "Imprimir Etiqueta", + "showLotNr": "Número do Lote", + "showSpoolWeight": "Peso do Carretel", "showTemperatures": "Temperaturas", - "showSpoolComment": "Comentário do carretel", - "showFilamentComment": "Comentário de filamento", - "showVendorComment": "Comentário do fornecedor" + "showSpoolComment": "Comentário sobre o Carretel", + "showFilamentComment": "Comentário sobre o Filamento", + "showVendorComment": "Comentário sobre o Fabricante", + "template": "Modelo de Etiqueta", + "templateHelp": "Use {} para incluir valores da bobine como texto. Por exemplo {id} será substituído pelo ID da bobine, ou {filament.material} será substituído pelo material da bobine. Coloque texto entre duplos asteriscos ** para colocar a negrito. Pressione o botão para ver a lista de etiquetas disponíveis.", + "showQRCode": "Imprimir Código QR", + "showQRCodeMode": { + "no": "Não", + "simple": "Simples", + "withIcon": "Com Ícone" + } } }, "spool": { "fields": { "material": "Material", "weight_to_use": "Peso", - "used_weight": "Peso usado", - "remaining_weight": "Peso restante", - "measured_weight": "Peso medido", - "used_length": "Comprimento usado", - "remaining_length": "Comprimento restante", + "used_weight": "Peso Utilizado", + "remaining_weight": "Peso Restante", + "measured_weight": "Peso Medido", + "used_length": "Comprimento Usado", + "remaining_length": "Comprimento Restante", "location": "Localização", - "lot_nr": "Número do lote", - "first_used": "Usado pela primeira vez", - "last_used": "Usado por último", + "lot_nr": "Número do Lote", + "first_used": "Primeiro Uso", + "last_used": "Último Uso", "registered": "Registrado", "comment": "Comentário", "archived": "Arquivado", "id": "ID", "filament_name": "Filamento", "filament": "Filamento", - "price": "" + "price": "Preço", + "initial_weight": "Peso Inicial", + "spool_weight": "Peso sem Filamento", + "filament_internal": "Interno", + "filament_external": "Externo" }, "fields_help": { "weight_to_use": "Selecione qual valor de peso inserir. O peso medido só estará disponível se o peso do carretel estiver definido para o filamento selecionado.", "lot_nr": "Número de lote do fabricante. Pode ser usado para garantir que uma impressão tenha cores consistentes se vários carretéis forem usados.", - "used_weight": "Quanto filamento foi usado no carretel. Um novo carretel deve ter 0g usado.", + "used_weight": "Quanto filamento foi usado do carretel. Um novo carretel deve ter 0gr usado.", "remaining_weight": "Quanto filamento resta no carretel. Para um carretel novo, isso deve corresponder ao peso do carretel.", "measured_weight": "Quanto pesa o filamento e o carretel.", "location": "Onde o carretel está localizado se você tiver vários locais onde armazena seus carretéis.", - "price": "" + "price": "Preço de um carretel completo na moeda definida no sistema. Se não for definido, o preço do filamento será presumido.", + "initial_weight": "O peso inicial do filamento sem o peso do carretel (peso liquido). Se nada for indicado, será usado o peso da definição do filamento.", + "spool_weight": "O peso do carretel quando vazio. Deixe em branco para usar o valor do filamento ou do fabricante.", + "external_filament": "Escolheu um filamento de uma base de dados externa. O filamento (e possivelmente o fabricante) será criado automaticamente quando for criado o carretel. Isto poderá criar filamentos duplicados caso já tenha criado um filamento para este filamento específico." }, "titles": { - "create": "Criar carretel", - "clone": "Clonar carretel", - "edit": "Editar carretel", + "create": "Criar Carretel", + "clone": "Clonar Carretel", + "edit": "Editar Carretel", "list": "Carretéis", - "show": "Mostrar carretel", + "show": "Mostrar Carretel", "show_title": "[Carretel #{{id}}] {{name}}", - "archive": "Arquivar carretel" + "archive": "Arquivar Carretel", + "adjust": "Ajustar Filamento" }, "form": { "new_location_prompt": "Insira um novo local", - "spool_updated": "Este spool foi atualizado por alguém/alguma coisa desde que você abriu esta página. Salvar substituirá essas alterações!" + "spool_updated": "Este carretel foi atualizado por alguém desde que abriu esta página. Guardar substituirá essas alterações!", + "measurement_type": { + "length": "Comprimento", + "weight": "Peso" + }, + "measurement_type_label": "Tipo de Medida", + "adjust_filament_help": "Aqui pode adicionar ou subtrair filamento do carretel. Um valor positivo consome filamento, um valor negativo adiciona filamento.", + "adjust_filament_value": "Consumir Montante" }, "messages": { "archive": "Tem certeza de que deseja arquivar este carretel?" @@ -168,65 +205,81 @@ "filament": "Filamentos", "fields": { "id": "ID", - "vendor_name": "Fornecedor", + "vendor_name": "Fabricante", "name": "Nome", "price": "Preço", "diameter": "Diâmetro", "weight": "Peso", - "spool_weight": "Peso do carretel", - "article_number": "Número do artigo", + "spool_weight": "Peso do Carretel", + "article_number": "Número do Artigo", "registered": "Registrado", - "vendor": "Fornecedor", + "vendor": "Fabricante", "material": "Material", "density": "Densidade", "comment": "Comentário", - "settings_extruder_temp": "Temperatura do bico", - "settings_bed_temp": "Temperatura da mesa", + "settings_extruder_temp": "Temperatura do Bico", + "settings_bed_temp": "Temperatura da Mesa", "color_hex": "Cor", - "spools": "Mostrar carretéis" + "spools": "Mostrar Carretéis", + "external_id": "ID Externo", + "single_color": "Único", + "multi_color": "Múltiplo", + "coaxial": "Coextrusado", + "longitudinal": "Longitudinal" }, "fields_help": { "article_number": "Por exemplo EAN, UPC, etc.", - "price": "Preço de um spool completo na moeda configurada pelo sistema.", - "name": "Nome do filamento, para distinguir este tipo de filamento entre outros do mesmo fornecedor. Deve conter a cor, por exemplo.", + "price": "Preço de um carretel completo.", + "name": "Nome do filamento, para distinguir este tipo de filamento entre outros do mesmo fabricante. Deve conter a cor, por exemplo.", "material": "Por exemplo PLA, ABS, PETG, etc.", - "weight": "O peso do filamento de uma carretel cheio (peso líquido). Isso não deve incluir o peso do carretel em si, apenas o filamento. É o que normalmente está escrito na embalagem.", - "spool_weight": "O peso de um carretel vazio. Usado para determinar o peso medido de um carretel." + "weight": "O peso do filamento de um carretel cheio (peso líquido). Isso não deve incluir o peso do carretel em si, apenas o filamento. É o que normalmente está escrito na embalagem.", + "spool_weight": "O peso de um carretel vazio. Usado para determinar o peso medido de um carretel.", + "multi_color_direction": "Os filamentos podem ter múltiplas cores de duas formas: por coextrusão, como os filamentos de duas cores com estas consistentes ao longo do filamento, or através de mudança de cor longitudinal, como os filamentos que contêm gradientes de cores que vão mudando ao longo da bobine." }, "titles": { - "create": "Criar filamento", - "clone": "Clonar filamento", - "edit": "Editar filamento", + "create": "Criar Filamento", + "clone": "Clonar Filamento", + "edit": "Editar Filamento", "list": "Filamentos", - "show": "Mostrar filamento", + "show": "Mostrar Filamento", "show_title": "[Filamento #{{id}}] {{name}}" }, "form": { - "filament_updated": "Este filamento foi atualizado por alguém/alguma coisa desde que você abriu esta página. Salvar substituirá essas alterações!" + "filament_updated": "Este filamento foi atualizado por alguém desde que abriu esta página. Guardar substituirá essas alterações!", + "import_external": "Importar do Exterior", + "import_external_description": "Escolha um filamento da lista para preencher automaticamente os detalhes do filamento no formulário de criação. Isto irá substituir quaisquer dados que já tenha introduzido no formulário.

Será criado o fabricante automaticamente caso seja necessário." + }, + "buttons": { + "add_spool": "Adicionar Carretel" } }, "vendor": { - "vendor": "Fornecedores", + "vendor": "Fabricantes", "fields": { "id": "ID", "name": "Nome", "registered": "Registrado", - "comment": "Comentário" + "comment": "Comentário", + "empty_spool_weight": "Peso do Carretel Vazio", + "external_id": "ID Externo" }, "titles": { - "create": "Criar fornecedor", - "clone": "Clonar fornecedor", - "edit": "Editar fornecedor", - "list": "Fornecedores", - "show": "Mostrar fornecedor", - "show_title": "[Fornecedor nº{{id}}] {{name}}" + "create": "Criar Fabricante", + "clone": "Clonar Fabricante", + "edit": "Editar Fabricante", + "list": "Fabricantes", + "show": "Mostrar Fabricante", + "show_title": "[Fabricante #{{id}}] {{name}}" }, "form": { - "vendor_updated": "Este fornecedor foi atualizado por alguém/alguma coisa desde que você abriu esta página. Salvar substituirá essas alterações!" + "vendor_updated": "Este fabricante foi atualizado por alguém desde que abriu esta página. Guardar substituirá essas alterações!" + }, + "fields_help": { + "empty_spool_weight": "O peso do carretel vazio do fabricante." } }, "home": { - "home": "Home" + "home": "Início" }, "help": { "help": "Ajuda", @@ -235,12 +288,12 @@ "spool": "Carretéis físicos individuais de um filamento específico.", "vendor": "As empresas que fabricam o filamento." }, - "description": "Ajuda

Aqui estão algumas dicas para você começar.

O Spoolman contém três tipos diferentes de dados:

Para adicionar um novo carretel para o banco de dados, comece criando um objeto Filamento. Feito isso, prossiga para criar um objeto Carretel para esse carretel específico. Se você adquirir carretéis adicionais do mesmo filamento posteriormente, simplesmente gere objetos Spool adicionais e reutilize o mesmo objeto filamento.

Opcionalmente, você também pode gerar um objeto Fornecedor para a empresa fabricar o filamento se desejar rastrear essas informações.

Você tem a opção de vincular outros serviços de impressora 3D ao Spoolman, como o Moonraker, que pode monitorar automaticamente o uso do filamento e atualizar os objetos carretel para você. Consulte o README do Spoolman para obter orientação sobre como configurar isso.

" + "description": "Ajuda

Aqui estão algumas dicas para começar.

O Spoolman contém três tipos diferentes de dados:

Para adicionar um novo carretel para o banco de dados, comece criando um Filamento. Feito isso, prossiga para criar um Carretel para esse carretel específico. Se você adquirir carretéis adicionais do mesmo filamento posteriormente, simplesmente gere Carretéis adicionais e reutilize o mesmo objeto Filamento.

Opcionalmente, você também pode criar um Fabricante para a empresa que fabrica o filamento, se desejar rastrear essas informações.

Você tem a opção de vincular outros serviços de impressora 3D ao Spoolman, como o Moonraker, que pode monitorar automaticamente o uso do filamento e atualizar os carretéis para você. Consulte o README do Spoolman para obter orientação sobre como configurar isso.

" }, "documentTitle": { "suffix": " | Spoolman", "home": { - "list": "Home | Spoolman" + "list": "Início | Spoolman" }, "help": { "list": "Ajuda | Spoolman" @@ -248,40 +301,81 @@ "filament": { "list": "Filamentos | Spoolman", "show": "#{{id}} Mostrar filamento | Spoolman", - "edit": "#{{id}} Editar filamento | Spoolman", + "edit": "#{{id}} Editar Filamento | Spoolman", "create": "Criar filamento | Spoolman", "clone": "#{{id}} Clonar filamento | Spoolman" }, "spool": { "list": "Carretéis | Spoolman", - "show": "#{{id}} Mostrar carretel | Spoolman", - "edit": "#{{id}} Editar carretel | Spoolman", - "create": "Criar carretel | Spoolman", - "clone": "#{{id}} Clonar carretel | Spoolman" + "show": "#{{id}} Mostrar Carretel | Spoolman", + "edit": "#{{id}} Editar Carretel | Spoolman", + "create": "Criar Carretel | Spoolman", + "clone": "#{{id}} Clonar Carretel | Spoolman" }, "vendor": { - "show": "#{{id}} Mostrar fornecedor | Spoolman", - "list": "Fornecedores | Spoolman", - "create": "Criar fornecedor | Spoolman", - "edit": "#{{id}} Editar fornecedor | Spoolman", - "clone": "#{{id}} Clonar fornecedor | Spoolman" + "show": "#{{id}} Mostrar Fabricante | Spoolman", + "list": "Fabricantes | Spoolman", + "create": "Criar Fabricante | Spoolman", + "edit": "#{{id}} Editar Fabricante | Spoolman", + "clone": "#{{id}} Clonar Fabricante | Spoolman" }, "default": "Spoolman" }, "no": "Não", "scanner": { - "title": "Leitor de código QR", + "title": "Leitor de Código QR", "description": "Digitalize um código QR do Spoolman para ver detalhes sobre o carretel.", "error": { - "notAllowed": "Você não permitiu acesso à câmera.", - "insecureContext": "A página não é veiculada por HTTPS.", + "notAllowed": "Você não deu permissão de acesso à câmera.", + "insecureContext": "A página não é protegida por HTTPS.", "streamApiNotSupported": "O navegador não oferece suporte à API MediaStream.", "unknown": "Ocorreu um erro desconhecido. ({{error}})", - "notReadable": "A câmera não é legível.", + "notReadable": "A câmera não está acessível.", "notFound": "Nenhuma câmera foi encontrada." } }, "table": { "actions": "Ações" + }, + "settings": { + "extra_fields": { + "params": { + "multi_choice": "Múltiplas Opções", + "key": "Chave", + "name": "Nome", + "field_type": "Tipo", + "unit": "Unidade", + "order": "Ordem", + "default_value": "Valor Padrão", + "choices": "Opções" + }, + "field_type": { + "datetime": "Date e Hora", + "text": "Texto", + "integer": "Inteiro", + "float": "Decimal", + "float_range": "Intervalo Decimal", + "integer_range": "Intervalo Inteiro", + "boolean": "Booleano", + "choice": "Opção" + }, + "key_not_changed": "Por favor, mude a chave por outra.", + "delete_confirm": "Apagar o campo {{name}}?", + "delete_confirm_description": "Isto irá apagar o campo e todos os dados associados em todas as entidades.", + "description": "

Aqui você pode adicionar campos personalizados extras às suas entidades.

Uma vez que um campo é adicionado, você não pode alterar sua chave ou tipo, e para campos do tipo \"opção\" você não pode remover as opções ou alterar o estado de múltipla opção. Se você remover um campo, os dados associados para todas as entidades serão excluídos.

A chave é como outros programas leem/gravam os dados, portanto, se seu campo personalizado se destina a se integrar com um programa de terceiros, certifique-se de defini-lo corretamente. O valor padrão só é aplicado a novos itens.

Campos extras não podem ser ordenados ou filtrados nas visualizações de tabela.

", + "choices_missing_error": "Você não pode remover as opções. As seguintes opções serão perdidas: {{choices}}", + "tab": "Campos Extras", + "boolean_true": "Sim", + "boolean_false": "Não", + "non_unique_key_error": "A chave deve ser única." + }, + "settings": "Configurações", + "header": "Configurações", + "general": { + "tab": "Geral", + "currency": { + "label": "Moeda" + } + } } } diff --git a/client/public/locales/ro/common.json b/client/public/locales/ro/common.json index a9063a6..7582289 100644 --- a/client/public/locales/ro/common.json +++ b/client/public/locales/ro/common.json @@ -30,18 +30,20 @@ "show": "arata", "edit": "editeaza" }, - "warnWhenUnsavedChanges": "Esti sigur? Modificarile ne-salvate vor fi pierdurte", + "warnWhenUnsavedChanges": "Esti sigur? Modificarile ne-salvate vor fi pierdute.", "notifications": { "success": "succes", - "error": "eroare", - "undoable": "Ai inca {{seconds}} secunde sa corectezi", + "error": "Eroare (Cod: {{statusCode}})", + "undoable": "Ai inca {{seconds}} secunde sa corectezi.", "createSuccess": "{{resource}} creata cu succes", - "createError": "Eroare la crearea {{resource}} (status code: {{statusCode}})", + "createError": "Eroare la crearea {{resource}} (status code: {{statusCode}})", "deleteSuccess": "{{resource}} stearsa cu succes", - "deleteError": "Eroare la stergerea {{resource}} (status code: {{statusCode}})", + "deleteError": "Eroare la stergerea {{resource}} (status code: {{statusCode}})", "editSuccess": "{{resource}} editata cu succes", - "editError": "eroare la editarea {{resource}} (status code: {{statusCode}})", - "importProgress": "Importare: {{processed}}/{{total}}" + "editError": "eroare la editarea {{resource}} (status code: {{statusCode}})", + "importProgress": "Importare: {{processed}}/{{total}}", + "saveSuccessful": "Salvare reusita!", + "validationError": "Eroare de validare: {{error}}" }, "kofi": "Doneaza pe Ko-fi", "loading": "Incarca", @@ -62,56 +64,56 @@ }, "previewScale": "Scala de previzualizare", "contentSettings": "Setări de conținut", - "helpMargin": "", - "description": "", + "helpMargin": "Marginile trebuie configurate pentru a se potrivi cu hârtia de etichetă și imprimanta dvs., modificarea acestora va afecta dimensiunea întregii grile.", + "description": "Modificati setările de mai jos pentru a obține aspectul dorit al etichetelor. Rețineți că imprimantele și sistemul dvs. de operare pot aplica propriile setări, așa că poate fi necesar să incercati mai multe opțiuni înainte ca totul să fie corect. Testați-l pe o bucată de hârtie obișnuită înainte de a imprima pe etichetele reale.", "marginRight": "Marja dreaptă", "rows": "Rânduri", "marginBottom": "Marja de jos", "marginTop": "Marja superioară", "print": "Imprimare", - "printerMarginRight": "", + "printerMarginRight": "Safe-Zone dreapta", "columns": "Coloane", - "helpPrinterMargin": "", + "helpPrinterMargin": "Safe-Zone ar trebui să fie setată la cât de aproape de marginea hârtiei poate imprima imprimanta dvs., modificarea acestora nu va afecta întreaga grilă.", "layoutSettings": "Setări Layout", "dimensions": "Dimensiuni", "skipItems": "Treci peste articole", "paperSize": "Dimensiunea hârtiei", - "printerMarginTop": "", + "printerMarginTop": "Safe-Zone sus", "horizontalSpacing": "Spațiere orizontală", "customSize": "Personalizat", "marginLeft": "Margine stângă", - "printerMarginLeft": "", + "printerMarginLeft": "Safe-Zone stanga", "showBorder": "Arată marginea", - "printerMarginBottom": "", + "printerMarginBottom": "Safe-Zone jos", "title": "Imprimare" }, "spoolSelect": { - "showArchived": "", + "showArchived": "Arata arhivate", "title": "Selectați bobine", - "description": "", - "selectedTotal_one": "", - "selectedTotal_few": "", - "selectedTotal_other": "", - "selectAll": "", - "noSpoolsSelected": "" + "description": "Selectati bobinele pentru care trebuie printate etichete.", + "selectedTotal_one": "{{count}} bobina selectata", + "selectedTotal_few": "{{count}} bobine selectate", + "selectedTotal_other": "{{count}} bobine selectate", + "selectAll": "Selecteaza/deselecteaza tot", + "noSpoolsSelected": "Nu ati selectat nicio bobina." }, "qrcode": { - "bedTemp": "", - "title": "", - "button": "", + "bedTemp": "BT: {{temp}}", + "title": "Printati codurile QR", + "button": "Imprimati codurile QR", "showTemperatures": "Temperaturi", - "spoolWeight": "", + "spoolWeight": "Greutatea rolei de filament: {{weight}}", "showFilamentComment": "Filament Comentariu", - "showLotNr": "", + "showLotNr": "Lot Nr", "showContent": "Imprimă eticheta", "showSpoolWeight": "Greutate bobină", - "textSize": "", + "textSize": "Marimea textului", "showVendorComment": "Comentariul furnizorului", - "showSpoolmanIcon": "", + "showSpoolmanIcon": "Arata iconul Spoolman", "showSpoolComment": "Bobină Comentariu", - "extruderTemp": "", + "extruderTemp": "ET: {{temp}}", "showVendor": "Furnizor", - "lotNr": "" + "lotNr": "Lot Nr: {{lot}}" } }, "documentTitle": { @@ -158,54 +160,54 @@ "fields": { "weight_to_use": "Greutate", "registered": "Înregistrat", - "used_weight": "", - "first_used": "", + "used_weight": "Greutate folosita", + "first_used": "Prima utilizare", "location": "Locație", "material": "Material", - "last_used": "", + "last_used": "Ultima utilizare", "archived": "Arhivat", "price": "Preț", - "used_length": "", - "measured_weight": "", - "lot_nr": "", + "used_length": "Lungime folosita", + "measured_weight": "Greutate masurata", + "lot_nr": "Lot Nr", "comment": "Comentariu", "id": "ID", "filament": "Filament", "filament_name": "Filament", - "remaining_length": "", - "remaining_weight": "" + "remaining_length": "Lungime ramasa", + "remaining_weight": "Greutate ramasa" }, "fields_help": { - "location": "", - "weight_to_use": "", - "used_weight": "", - "price": "", - "lot_nr": "", - "remaining_weight": "", - "measured_weight": "" + "location": "Locatia in care bobina este stocata.", + "weight_to_use": "Selectati greutatea care trebuie folosita. Greutatea masurata e disponibila numai daca greutatea bobinei goale este setata pentru filamentul respectiv.", + "used_weight": "Cat filament a fost folosit de pe bobina respectiva. O bobina noua ar trebui sa aiba 0 grame folosite.", + "price": "Pretul unei bobine. Daca nu e definit, pretul filamentului va fi folosit.", + "lot_nr": "Numarul de productie al lotului. Poate fi folosit pentru a garanta consistenta culorii, in caz ca mai multe bobine sunt folosite la acelasi print.", + "remaining_weight": "Cat filament a ramas pe bobina. Aceasta valoare reprezinta greutatea filamentului de pe bobina respectiva.", + "measured_weight": "Greutatea totala a bobinei si filamentului." }, "titles": { "list": "Bobine", - "archive": "", - "show_title": "", + "archive": "Archiveaza bobina", + "show_title": "[Bobina #{{id}}] {{name}}", "create": "Creați bobină", - "show": "", - "edit": "", - "clone": "" + "show": "Arata bobina", + "edit": "Editeaza bobina", + "clone": "Cloneaza bobina" }, "messages": { - "archive": "" + "archive": "Esti sigur ca vrei sa arhivezi aceasta bobina?" }, "form": { - "spool_updated": "", - "new_location_prompt": "" + "spool_updated": "Aceasta bobina a fost modificata de altcineva in timpul scurs de la deschiderea acestei pagini, Salvarea va suprascrie aceste schimbari!", + "new_location_prompt": "Introduceti o locatie noua" }, "spool": "Bobine" }, "filament": { "fields": { "registered": "Înregistrat", - "article_number": "", + "article_number": "Numarul articolului", "id": "ID", "vendor": "Furnizor", "settings_bed_temp": "Temperatura patului", @@ -213,22 +215,22 @@ "price": "Preț", "name": "Nume", "color_hex": "Culoare", - "settings_extruder_temp": "", + "settings_extruder_temp": "Temperatura extruderului", "vendor_name": "Furnizor", "diameter": "Diametru", "density": "Densitate", "weight": "Greutate", - "spools": "", + "spools": "Arata bobinele", "comment": "Comentariu", - "spool_weight": "" + "spool_weight": "Greutatea bobinei" }, "fields_help": { - "price": "", - "material": "", - "name": "", - "spool_weight": "", + "price": "Pretului unei bobine noi.", + "material": "Ex. PLA, ABS, PETG, etc.", + "name": "Numele filamentului, pentru a-l putea distinge de altele ale aceluiasi producator. Recomandabil sa contina culoarea de exemplu.", + "spool_weight": "Greutatea unei bobine goale (fara filament). Este folosita pentru a calcula greutatea unei bobine cu filament.", "article_number": "", - "weight": "" + "weight": "Greutatea neta a filamentului de pe o bobina. Nu trebuie sa includa greutatea bobinei, ci doar cea a filamentului. De obicei greutatea filementului este cea inscrisa pe ambalaj." }, "titles": { "edit": "Modifica del filamento", @@ -271,15 +273,15 @@ }, "scanner": { "error": { - "notFound": "", - "unknown": "", - "notAllowed": "", - "streamApiNotSupported": "", - "insecureContext": "", - "notReadable": "" + "notFound": "Nicio camera nu a fost gasita.", + "unknown": "Eroare necunoscuta. ({{error}})", + "notAllowed": "Accesul la camera nu a fost permis.", + "streamApiNotSupported": "Browserul nu suporta MediaStream API.", + "insecureContext": "Aceasta pagina nu este servita peste HTTPS.", + "notReadable": "Accesul la camera nu este posibil." }, - "title": "", - "description": "" + "title": "Scanner QR code", + "description": "Scanati QR code-ul Spoolman pentru detalii." }, "table": { "actions": "Acțiuni" diff --git a/client/public/locales/ru/common.json b/client/public/locales/ru/common.json index cbaa1d9..07f0d74 100644 --- a/client/public/locales/ru/common.json +++ b/client/public/locales/ru/common.json @@ -87,7 +87,15 @@ "none": "Без рамки", "border": "Общая", "grid": "Сетка" - } + }, + "addSettings": "Добавить новую настройку", + "newSetting": "Новый", + "deleteSettings": "Удалить текущую настройку", + "deleteSettingsConfirm": "Вы уверены, что хотите удалить этот параметр?", + "settings": "Настройки", + "defaultSettings": "По умолчанию", + "settingsName": "Имя настройки", + "itemCopies": "Копии элементов" }, "qrcode": { "button": "Распечатать QR-коды", @@ -105,7 +113,9 @@ "showTemperatures": "Температура", "showSpoolComment": "Комментарий к катушке", "showFilamentComment": "Комментарий к филаменту", - "showVendorComment": "Комментарий к продавцу" + "showVendorComment": "Комментарий к продавцу", + "template": "Шаблон", + "templateHelp": "Используйте {}, чтобы вставить значения объекта катушки в виде текста. Например, {id} будет заменен на идентификатор катушки, или {filament.material} будет заменен на материал катушки. Выделите текст двойной звездочкой **, чтобы он был выделен жирным шрифтом. Нажмите на кнопку, чтобы просмотреть список всех доступных тегов." }, "spoolSelect": { "title": "Выберите катушки", @@ -150,7 +160,11 @@ "archived": "В архиве", "measured_weight": "Измеренный вес", "weight_to_use": "Масса", - "price": "Цена" + "price": "Цена", + "initial_weight": "Начальный вес", + "spool_weight": "Пустой вес", + "filament_internal": "Внутренний", + "filament_external": "Внешний" }, "fields_help": { "used_weight": "Сколько филамента было использовано с катушки. На новой катушке должно быть использовано 0 г.", @@ -159,7 +173,10 @@ "weight_to_use": "Выберите, какое значение веса ввести. Измеренный вес доступен только в том случае, если вес катушки установлен для выбранной филамента.", "measured_weight": "Сколько весит филамент и катушка.", "remaining_weight": "Сколько филамента осталось на катушке. Для новой катушки этот вес должен соответствовать весу катушки.", - "price": "Цена полной катушки в валюте, настроенной системой. Если не задано, вместо этого будет принята цена филомента." + "price": "Цена полной катушки. Если не указано, будет использоваться цена филамента.", + "initial_weight": "Исходный вес филамента на катушке (вес нетто). Если не задан, будет использоваться вес объекта, на котором находится филамент.", + "spool_weight": "Вес пустой катушки. Оставьте значение \"пусто\", чтобы использовать значение, указанное в описании филамента или у производителя.", + "external_filament": "Вы выбрали филамент из внешней базы данных. Объект филамент (и, возможно, объект производителя) будет создан автоматически при создании этой катушки. При этом могут возникнуть повторяющиеся объекты филамента, если вы уже создали объект филамент для этой нити накала." }, "titles": { "create": "Создать Катушку", @@ -197,15 +214,21 @@ "settings_extruder_temp": "Температура экструдера", "settings_bed_temp": "Температура стола", "color_hex": "Цвет", - "spools": "Показать катушки" + "spools": "Показать катушки", + "coaxial": "Коэкструдированный", + "longitudinal": "Продольный", + "single_color": "Одноцветный", + "multi_color": "Многоцветный", + "external_id": "Внешний ID" }, "fields_help": { - "name": "Название филамента, чтобы отличить этот тип филамента от друго филамента того же производителя. Например, должен содержать цвет.", + "name": "Название филамента, чтобы отличить этот тип филамента от других того же производителя. Например, должно содержать цвет.", "material": "Например: PLA, ABS, PETG и т.д.", - "price": "Цена полной катушки в валюте, настроенной системой.", + "price": "Цена полной катушки.", "weight": "Вес филамента на полной катушке (вес нетто). Сюда не следует включать вес самой катушки, а только филамента. Это то, что обычно пишут на упаковке.", "spool_weight": "Вес пустой катушки. Используется для определения измеренного веса катушки.", - "article_number": "Например: EAN, UPC, и т.д." + "article_number": "Например: EAN, UPC, и т.д.", + "multi_color_direction": "Филаменты могут иметь несколько цветов двумя способами: либо через коэкструзию, как двойные цветные филаменты с постоянными разноцветными участками, либо через продольные изменения цвета, как градиентные филаменты, которые меняют цвет по всей длине катушки." }, "titles": { "create": "Создать филамент", @@ -216,7 +239,9 @@ "show_title": "[Филамент #{{id}}] {{name}}" }, "form": { - "filament_updated": "Этот филамент был обновлен кем-то/чем-то другим с тех пор, как вы открыли эту страницу. При сохранении эти изменения перезапишутся!" + "filament_updated": "Этот филамент был обновлен кем-то/чем-то другим с тех пор, как вы открыли эту страницу. При сохранении эти изменения перезапишутся!", + "import_external": "Импорт из внешнего источника", + "import_external_description": "Выберите филамент из списка, чтобы автоматически заполнить его данные в форме создания филамента. Это перезапишет все данные, которые вы ввели в форму.

Объект \"Производитель\" будет создан автоматически, если это необходимо, когда вы нажмете \"Ок\"." }, "buttons": { "add_spool": "Добавить катушку" @@ -228,7 +253,9 @@ "id": "ID", "name": "Имя", "registered": "Зарегистрирован", - "comment": "Комментарий" + "comment": "Комментарий", + "empty_spool_weight": "Вес пустой катушки", + "external_id": "Внешний ID" }, "titles": { "create": "Создать производителя", @@ -240,6 +267,9 @@ }, "form": { "vendor_updated": "Этот производитель был обновлен кем-то/чем-то другим с тех пор, как вы открыли эту страницу. При сохранении эти изменения перезапишутся!" + }, + "fields_help": { + "empty_spool_weight": "Вес пустой катушки от этого производителя." } }, "table": { @@ -282,7 +312,7 @@ "filament": "Марка филамента. У них есть такие свойства, как имя, материал, цвет, диаметр и многое другое.", "vendor": "Компании, производящие филаменты." }, - "description": "Помощь

Вот несколько советов, которые помогут вам начать

Spoolman хранит 3 различных типа данных:

Чтобы добавить новую катушку в базу данных, начните с создания объекта Филамент. Как только это будет сделано, приступайте к созданию объекта Катушка для этой конкретной катушки. Если позже вы приобретете дополнительные катушки того же филамента, просто создайте дополнительные объекты катушек и повторно используйте тот же объект Филамент.

При желании вы также можете создать объект Поставщика для компании, производящий филамент, если хотите отслеживать эту информацию.

У вас есть возможность связать Spoolman с другими службами 3D-принтеров, например Moonraker, который может автоматически отслеживать использование филамента и обновлять объекты Катушек для вас. Обратитесь к Spoolman README для получения инструкций по настройке.

", + "description": "Помощь

Вот несколько советов, которые помогут вам начать

Spoolman хранит 3 различных типа данных:

Чтобы добавить новую катушку в базу данных, начните с создания объекта Филамент. Как только это будет сделано, приступайте к созданию объекта Катушка для этой конкретной катушки. Если позже вы приобретете дополнительные катушки того же филамента, просто создайте дополнительные объекты катушек и повторно используйте тот же объект Филамент.

При желании вы также можете создать объект Производитель для компании, производящий филамент, если хотите отслеживать эту информацию.

У вас есть возможность связать Spoolman с другими службами 3D-принтеров, например Moonraker, который может автоматически отслеживать использование филамента и обновлять объекты Катушек для вас. Обратитесь к Spoolman README для получения инструкций по настройке.

", "help": "Помощь" }, "kofi": "Поддержите меня на Ko-fi", @@ -327,6 +357,7 @@ "currency": { "label": "Валюта" } - } + }, + "settings": "Настройки" } } diff --git a/client/public/locales/sv/common.json b/client/public/locales/sv/common.json index afe291a..e36c408 100644 --- a/client/public/locales/sv/common.json +++ b/client/public/locales/sv/common.json @@ -28,7 +28,8 @@ "notAccessTitle": "Du har inte tillgång till denna sida", "hideColumns": "Dölj kolumner", "clearFilters": "Rensa filter", - "saveAndAdd": "Spara och Lägg till" + "saveAndAdd": "Spara och Lägg till", + "continue": "Fortsätt" }, "warnWhenUnsavedChanges": "Är du säker på att du vill lämna sidan? Du har osparade ändringar.", "notifications": { @@ -87,29 +88,48 @@ "none": "Ingen", "border": "Ram", "grid": "Rutnät" - } + }, + "defaultSettings": "Standard", + "newSetting": "Ny", + "settingsName": "Inställningsnamn", + "deleteSettingsConfirm": "Är du säker på att du vill radera den nuvarande inställningen?", + "itemCopies": "Kopior", + "settings": "Inställningar", + "addSettings": "Skapa inställning", + "saveSetting": "Spara inställningar", + "duplicateSettings": "Duplicera", + "deleteSettings": "Radera nuvarande inställning", + "saveAsImage": "Spara som bild" }, "qrcode": { - "button": "Skriv ut QR-koder", - "title": "QR-kod utskrift", + "button": "Skriv ut etiketter", + "title": "Etikettutskrift", "spoolWeight": "Spolvikt: {{weight}}", "lotNr": "Batch: {{lot}}", "bedTemp": "BT: {{temp}}", "extruderTemp": "ET: {{temp}}", "textSize": "Textstorlek", "showSpoolmanIcon": "Visa Spoolman-ikon", - "showContent": "Etikett", - "showVendor": "Leverantör", + "showContent": "Visa text", + "showVendor": "Tillverkare", "showLotNr": "Batchnummer", "showSpoolWeight": "Spolvikt", "showTemperatures": "Temperaturer", "showSpoolComment": "Spolkommentar", "showFilamentComment": "Filamentkommentar", - "showVendorComment": "Leverantörskommentar" + "showVendorComment": "Tillverkarkommentar", + "template": "Textmall", + "templateHelp": "Använd {} för att infoga värden från spolobjektet som text. Till exempel kommer {id} att ersättas med spolens id, eller {filament.material} att ersättas med filamentets material. Omslut text med dubbla asterisker ** för att göra den fetstilad. Klicka på knappen för att visa en lista över alla tillgängliga taggar.", + "showQRCode": "Visa QR-kod", + "showQRCodeMode": { + "no": "Nej", + "simple": "Enkel", + "withIcon": "Med logga" + } }, "spoolSelect": { "title": "Välj spolar", - "description": "Välj spolar att skriva ut QR-koder för.", + "description": "Välj spolar att skriva ut etiketter för.", "showArchived": "Tillåt arkiverade", "noSpoolsSelected": "Du har inte valt några spolar.", "selectAll": "Markera/avmarkera alla", @@ -149,7 +169,11 @@ "archived": "Arkiverad", "measured_weight": "Uppmätt vikt", "weight_to_use": "Vikt", - "price": "Pris" + "price": "Pris", + "initial_weight": "Initial Vikt", + "spool_weight": "Tom Vikt", + "filament_internal": "Interna", + "filament_external": "Externa" }, "fields_help": { "used_weight": "Hur mycket filament som använts på spolen. En ny spole har värdet 0g.", @@ -158,7 +182,10 @@ "weight_to_use": "Välj vilken typ av vikt du vill fylla i. Uppmätt vikt är endast tillgänglig om det valda filamentet har en spolvikt satt.", "measured_weight": "Hur mycket filamentet och spolen väger tillsammans.", "remaining_weight": "Hur mycket filament som finns kvar på spolen. För en ny spole så är detta det värdet som står på etiketten.", - "price": "Pris för en hel rulle i det konfigurerade valutasystemet. Om det inte är inställt kommer priset för filamentet istället att antas." + "price": "Pris för en hel rulle. Om det inte är inställt kommer priset för filamentet istället att antas.", + "initial_weight": "Ursprungsvikt av filament på spolen (nettovikt). Om du inte sätter detta så tas vikten från filamentobjektet.", + "spool_weight": "Vikten på en tom spole. Lämna tom för att ta värdet från filament- eller tillverkarobjektet.", + "external_filament": "Du har valt ett filament från den externa databasen. Ett filamentobjekt (och eventuellt ett tillverkarobjekt) kommer att skapas automatiskt när du skapar denna spole. Detta kan skapa duplicerade filamentobjekt om du redan har skapat ett filamentobjekt för denna filament." }, "titles": { "create": "Skapa spole", @@ -167,22 +194,30 @@ "list": "Spolar", "show": "Visa spole", "archive": "Arkivera spole", - "show_title": "[Spole #{{id}}] {{name}}" + "show_title": "[Spole #{{id}}] {{name}}", + "adjust": "Justera Spolmängd" }, "messages": { "archive": "Är du säker på att du vill arkivera denna spole?" }, "form": { "new_location_prompt": "Fyll i en ny plats", - "spool_updated": "Den här spolen har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!" + "spool_updated": "Den här spolen har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!", + "measurement_type": { + "length": "Längd", + "weight": "Vikt" + }, + "measurement_type_label": "Mättyp", + "adjust_filament_value": "Mängd att konsumera", + "adjust_filament_help": "Här kan du direkt lägga till eller subtrahera filament från spolen. Ett positivt värde kommer att konsumera filament, ett negativt värde kommer att lägga till det." } }, "filament": { "filament": "Filament", "fields": { "id": "ID", - "vendor_name": "Leverantör", - "vendor": "Leverantör", + "vendor_name": "Tillverkare", + "vendor": "Tillverkare", "name": "Namn", "material": "Material", "price": "Pris", @@ -196,15 +231,21 @@ "settings_extruder_temp": "Extrudertemp", "settings_bed_temp": "Bäddtemp", "color_hex": "Färg", - "spools": "Visa spolar" + "spools": "Visa spolar", + "single_color": "Enkel", + "multi_color": "Flerfärgad", + "coaxial": "Coextruderad", + "longitudinal": "Longitudinell", + "external_id": "Externt ID" }, "fields_help": { - "name": "Filamentets namn, för att skilja detta filament från andra från samma leverantör. Bör innehålla färgen till exempel.", + "name": "Filamentets namn, för att skilja detta filament från andra från samma tillverkare. Bör innehålla färgen till exempel.", "material": "T.ex. PLA, ABS, PETG, etc.", - "price": "Pris för en full spole i systemets valuta.", + "price": "Pris för en full spole.", "weight": "Vikten på en full spole (nettovikt). Detta ska inte inkludera vikten på spolen själv, bara filamentet. Det är vad som vanligtvis står på förpackningen.", "spool_weight": "Vikten på en tom spole. Används för att beräkna filamentvikten från en vägning.", - "article_number": "T.ex. EAN, UPC, etc." + "article_number": "T.ex. EAN, UPC, etc.", + "multi_color_direction": "Filament kan ha flera färger på två sätt: antingen genom coextrudering, så som två-färgs filament med konsekventa multifärger, eller genom longitudinella färgförändringar, så som gradientfilament som skiftar färger längs spolen." }, "titles": { "create": "Skapa filament", @@ -215,30 +256,37 @@ "show_title": "[Filament #{{id}}] {{name}}" }, "form": { - "filament_updated": "Det här filamentet har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!" + "filament_updated": "Det här filamentet har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!", + "import_external": "Importera från externt", + "import_external_description": "Välj ett filament i listan för att automatiskt fylla dess detaljer i formuläret. Detta kommer att skriva över alla data som du har angett i formuläret.

Ett tillverkarobjekt skapas automatiskt när du klickar på Ok, om det behövs." }, "buttons": { "add_spool": "Skapa Spole" } }, "vendor": { - "vendor": "Leverantörer", + "vendor": "Tillverkare", "fields": { "id": "ID", "name": "Namn", "registered": "Registrerad", - "comment": "Kommentar" + "comment": "Kommentar", + "empty_spool_weight": "Tom spolvikt", + "external_id": "Externt ID" }, "titles": { - "create": "Skapa leverantör", - "clone": "Klona leverantör", - "edit": "Ändra leverantör", - "list": "Leverantörer", - "show": "Visa leverantör", - "show_title": "[Leverantör #{{id}}] {{name}}" + "create": "Skapa tillverkare", + "clone": "Klona tillverkare", + "edit": "Ändra tillverkare", + "list": "Tillverkare", + "show": "Visa tillverkare", + "show_title": "[Tillverkare #{{id}}] {{name}}" }, "form": { - "vendor_updated": "Den här leverantören har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!" + "vendor_updated": "Den här tillverkaren har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!" + }, + "fields_help": { + "empty_spool_weight": "Vikten av en tom spool från denna tillverkare." } }, "home": { @@ -309,11 +357,11 @@ "clone": "#{{id}} Klona spole | Spoolman" }, "vendor": { - "list": "Leverantörer | Spoolman", - "show": "#{{id}} Visa leverantör | Spoolman", - "edit": "#{{id}} Redigera leverantör | Spoolman", - "create": "Skapa leverantör | Spoolman", - "clone": "#{{id}} Klona leverantör | Spoolman" + "list": "Tillverkare | Spoolman", + "show": "#{{id}} Visa tillverkare | Spoolman", + "edit": "#{{id}} Redigera tillverkare | Spoolman", + "create": "Skapa tillverkare | Spoolman", + "clone": "#{{id}} Klona tillverkare | Spoolman" }, "help": { "list": "Hjälp | Spoolman" @@ -325,7 +373,7 @@ "filament": "Märken av filament. De har egenskaper som namn, material, färg, diameter och mer.", "spool": "Individuella fysiska spolar av ett specifikt filament." }, - "description": "Hjälp

Här är några tips för att komma igång.

Spoolman innehåller 3 olika typer av data:

För att lägga till en ny spole i databasen måste du först skapa ett Filament-objekt för den. När det är klart kan du sedan skapa ett Spol-objekt för den individuella spolen. Om du sedan köper ytterligare spolar av samma filament kan du bara skapa ytterligare Spol-objekt och återanvända samma Filament-objekt.

Du kan valfritt också skapa ett Leverantörs-objekt för företaget som tillverkar filamentet om du vill spåra den informationen.

Du kan koppla andra 3D-skrivartjänster till Spoolman, som Moonraker, som sedan automatiskt kan spåra filamentanvändning och uppdatera Spol-objekten åt dig. Se Spoolman README för hur du gör det.

", + "description": "Hjälp

Här är några tips för att komma igång.

Spoolman innehåller 3 olika typer av data:

För att lägga till en ny spole i databasen måste du först skapa ett Filament-objekt för den. När det är klart kan du sedan skapa ett Spol-objekt för den individuella spolen. Om du sedan köper ytterligare spolar av samma filament kan du bara skapa ytterligare Spol-objekt och återanvända samma Filament-objekt.

Du kan valfritt också skapa ett Tillverkar-objekt för företaget som tillverkar filamentet om du vill spåra den informationen.

Du kan koppla andra 3D-skrivartjänster till Spoolman, som Moonraker, som sedan automatiskt kan spåra filamentanvändning och uppdatera Spol-objekten åt dig. Se Spoolman README för hur du gör det.

", "help": "Hjälp" }, "kofi": "Dricksa mig på Ko-fi" diff --git a/client/public/locales/uk/common.json b/client/public/locales/uk/common.json index 5815d12..e81e28d 100644 --- a/client/public/locales/uk/common.json +++ b/client/public/locales/uk/common.json @@ -65,7 +65,7 @@ "lot_nr": "Номер партії виробника. Може використовуватися для гарантування рівномірного кольору друку при використанні декількох котушок.", "remaining_weight": "Скільки філаменту залишилося на котушці. Для нової котушки це має відповідати вазі філаменту на котушці.", "location": "Де розташована котушка, якщо у вас є кілька місць для зберігання котушок.", - "price": "Ціна цілої котушки у налаштованій в системі валюті. Якщо не вказано, замість неї буде використано ціну філамента." + "price": "Ціна цілої котушки. Якщо не вказано, замість неї буде використано ціну філамента." }, "messages": { "archive": "Ви впевнені що хочете архівувати цю котушку?" @@ -199,7 +199,7 @@ "create": "Створити Філамент" }, "fields_help": { - "price": "Ціна всієї котушки у валюті, встановленій в системі.", + "price": "Ціна всієї котушки.", "material": "Наприклад PLA, ABS, PETG, тощо.", "name": "Назва філаменту, щоб відрізнити цей філамент поміж інших від того самого виробника. Вона повинна містити, наприклад, колір.", "article_number": "Напр. EAN, UPC тощо.", @@ -209,6 +209,9 @@ "filament": "Філаменти", "form": { "filament_updated": "Цей філамент хтось/щось оновив після того, як ви відкрили цю сторінку. Збереження перезапише ці зміни!" + }, + "buttons": { + "add_spool": "Додати Котушку" } }, "unknown": "Невідомий", @@ -324,6 +327,7 @@ "delete_confirm_description": "Це призведе до видалення поля та усіх пов'язаних з ним даних для усіх об'єктів.", "choices_missing_error": "Ви не можете видалити обрані варіанти. Наступні варіанти відсутні: {{choices}}", "description": "

Тут ви можете додати додаткові користувацькі поля до своїх об’єктів.

Після додавання поля ви не можете змінити його ключ або тип, а для полів типу вибору ви не можете видалити варіанти або змінити стан кількох варіантів. Якщо ви вилучите поле, пов’язані дані для всіх об’єктів буде видалено.

Ключ – це те, як інші програми читають/записують дані, тож якщо ваше спеціальне поле має інтегруватися зі сторонніми програми, переконайтеся, що ви правильно її налаштували. Значення за замовчуванням застосовується лише до нових елементів.

Додаткові поля не можна сортувати чи фільтрувати в режимі перегляду таблиці.

" - } + }, + "settings": "Налаштування" } } diff --git a/client/public/locales/zh/common.json b/client/public/locales/zh/common.json index 399f13a..ea72f51 100644 --- a/client/public/locales/zh/common.json +++ b/client/public/locales/zh/common.json @@ -41,7 +41,9 @@ "deleteError": "删除 {{resource}} 时出现错误 (状态码:{{statusCode}})", "editSuccess": "成功修改 {{resource}}", "editError": "修改 {{resource}} 时出现错误 (状态码:{{statusCode}})", - "importProgress": "导入中: {{processed}}/{{total}}" + "importProgress": "导入中: {{processed}}/{{total}}", + "saveSuccessful": "保存成功!", + "validationError": "校验错误:{{error}}" }, "loading": "加载中", "version": "版本", @@ -96,14 +98,14 @@ "extruderTemp": "挤出温度:{{temp}}", "textSize": "内容文本大小", "showSpoolmanIcon": "显示Spoolman图标", - "showVendor": "供应商", + "showVendor": "制造商", "showContent": "打印标签", "showLotNr": "批号", "showSpoolWeight": "料盘重量", "showTemperatures": "温度", "showSpoolComment": "料盘备注", "showFilamentComment": "耗材备注", - "showVendorComment": "供应商备注" + "showVendorComment": "制造商备注" }, "spoolSelect": { "title": "选择料盘", @@ -146,7 +148,11 @@ "registered": "登记时间", "comment": "备注", "archived": "存档", - "price": "价格" + "price": "价格", + "spool_weight": "空料盘重量", + "initial_weight": "初始重量", + "filament_internal": "内部", + "filament_external": "外部" }, "fields_help": { "weight_to_use": "请选择要输入的重量值。净重只在所选的耗材设置了料盘重量时可用。", @@ -155,7 +161,10 @@ "measured_weight": "耗材和料盘的重量分别是多少。", "location": "如果您有多个存放料盘的地方,请填写料盘所在的位置。", "lot_nr": "制造商的批号。如果使用多个料盘可以使用批号进行控制,以确保打印颜色一致。", - "price": "以系统配置的货币计价的整卷料盘的价格。如果未设置,则默认使用该耗材的价格。" + "price": "整卷料盘的价格。如果未设置,则默认使用该耗材的价格。", + "spool_weight": "料盘没料时的重量。留空时使用耗材或者制造商的相关参数。", + "external_filament": "您已从外部数据库中选择了一种耗材。在创建这个料盘时,将自动创建一个耗材对象(可能还包括一个制造商对象)。如果您已经为这种耗材创建了一个耗材对象,这可能会导致耗材对象重复。", + "initial_weight": "料盘上耗材的初始重量(净重)。如果未设置将使用耗材的相关参数。" }, "titles": { "create": "创建料盘", @@ -178,8 +187,8 @@ "filament": "耗材", "fields": { "id": "编号", - "vendor_name": "供应商", - "vendor": "供应商", + "vendor_name": "制造商", + "vendor": "制造商", "name": "名称", "material": "材料", "price": "价格", @@ -193,10 +202,11 @@ "settings_extruder_temp": "挤出头温度", "settings_bed_temp": "热床温度", "color_hex": "颜色", - "spools": "显示料盘" + "spools": "显示料盘", + "external_id": "外部ID" }, "fields_help": { - "name": "耗材名称,用于区分来自同一供应商的不同耗材类型。例如包含颜色信息。", + "name": "耗材名称,用于区分来自同一制造商的不同耗材类型。例如在耗材名称中包含颜色信息。", "material": "例如PLA、ABS、PETG等。", "price": "一整卷耗材的价格。", "weight": "一整卷耗材的重量(净重)。不应包括料盘本身的重量,仅计算耗材的重量。通常在包装上注明。", @@ -212,27 +222,37 @@ "show_title": "[耗材 #{{id}}] {{name}}" }, "form": { - "filament_updated": "自您打开此页面以来,此耗材已被其他人/事物更新。保存将覆盖这些更改!" + "filament_updated": "自您打开此页面以来,此耗材已被其他人/事物更新。保存将覆盖这些更改!", + "import_external_description": "在列表中选择一种耗材以自动填充耗材创建表单中的详细信息。这将覆盖您在表单中输入的任何数据。

如果有必要,在您点击“确定”时将自动创建一个制造商对象。", + "import_external": "从外部导入" + }, + "buttons": { + "add_spool": "添加料盘" } }, "vendor": { - "vendor": "供应商", + "vendor": "制造商", "fields": { "id": "编号", "name": "名称", "registered": "登记时间", - "comment": "备注" + "comment": "备注", + "external_id": "外部ID", + "empty_spool_weight": "空料盘重量" }, "titles": { - "create": "创建供应商", - "clone": "克隆供应商", - "edit": "编辑供应商", - "list": "供应商列表", - "show": "查看供应商", - "show_title": "[供应商 #{{id}}] {{name}}" + "create": "创建制造商", + "clone": "克隆制造商", + "edit": "编辑制造商", + "list": "制造商列表", + "show": "查看制造商", + "show_title": "[制造商 #{{id}}] {{name}}" }, "form": { - "vendor_updated": "自您打开此页面以来,此供应商已被其他人/事物更新。保存将覆盖这些更改!" + "vendor_updated": "自您打开此页面以来,此制造商已被其他人/事物更新。保存将覆盖这些更改!" + }, + "fields_help": { + "empty_spool_weight": "来自此制造商的空料盘重量。" } }, "table": { @@ -256,11 +276,11 @@ "clone": "#{{id}} 克隆料盘 | Spoolman" }, "vendor": { - "list": "供应商 | Spoolman", - "show": "#{{id}} 查看供应商 | Spoolman", - "edit": "#{{id}} 编辑供应商 | Spoolman", - "create": "创建供应商 | Spoolman", - "clone": "#{{id}} 克隆供应商 | Spoolman" + "list": "制造商 | Spoolman", + "show": "#{{id}} 查看制造商 | Spoolman", + "edit": "#{{id}} 编辑制造商 | Spoolman", + "create": "创建制造商 | Spoolman", + "clone": "#{{id}} 克隆制造商 | Spoolman" }, "home": { "list": "主页 | Spoolman" @@ -280,6 +300,47 @@ "vendor": "制造耗材的公司。", "spool": "特定耗材的单个物理卷轴。" }, - "description": "帮助

以下是一些入门提示。

Spoolman保存了3种不同类型的数据:

要向数据库添加新的料盘,请先创建一个 耗材 对象。完成后,继续为该特定耗材创建一个 料盘 对象。如果以后获取相同耗材的其他料盘,只需生成其他的料盘对象并重复使用同一个耗材对象。

同时,如果您希望跟踪该信息,还可以为制造耗材的公司生成一个 供应商 对象。

您可以选择将其他3D打印机服务链接到 Spoolman,例如 Moonraker,它可以自动监视耗材使用情况并为您更新料盘对象。请参阅 Spoolman README 获取有关如何设置的指导。

" + "description": "帮助

以下是一些入门提示。

Spoolman保存了3种不同类型的数据:

要向数据库添加新的料盘,请先创建一个 耗材 对象。完成后,继续为该特定耗材创建一个 料盘 对象。如果以后获取相同耗材的其他料盘,只需生成其他的料盘对象并重复使用同一个耗材对象。

同时,如果您希望跟踪该信息,还可以为制造耗材的公司生成一个 制造商 对象。

您可以选择将其他3D打印机服务链接到 Spoolman,例如 Moonraker,它可以自动监视耗材使用情况并为您更新料盘对象。请参阅 Spoolman README 获取有关如何设置的指导。

" + }, + "settings": { + "settings": "设置", + "extra_fields": { + "tab": "额外字段", + "field_type": { + "integer_range": "整数范围", + "float": "浮点数", + "float_range": "浮点数范围", + "boolean": "布尔类型", + "datetime": "日期时间", + "text": "文本", + "integer": "整数", + "choice": "选项" + }, + "delete_confirm_description": "这将删除该字段以及所有实体的关联数据。", + "description": "

这里你可以为你的实体添加额外的自定义字段。

一旦添加了字段,就无法更改其键或类型;对于选择类型字段,无法删除选项或更改多选状态。如果删除字段,则所有实体的相关数据将被删除。

键是其他程序读取/写入数据的标识,因此,如果你的自定义字段需要与第三方程序集成,请确保设置正确。默认值仅适用于新项目。

额外字段在表视图中无法进行排序或过滤。

", + "params": { + "name": "名称", + "field_type": "类型", + "order": "顺序", + "default_value": "默认值", + "multi_choice": "多选", + "choices": "选择项", + "key": "键", + "unit": "单位" + }, + "boolean_true": "是", + "boolean_false": "否", + "choices_missing_error": "您无法删除选择。以下选项丢失:{{choices}}", + "non_unique_key_error": "键必须是唯一的。", + "key_not_changed": "请将键改成其他的。", + "delete_confirm": "删除字段 {{name}}?" + }, + "header": "设置", + "general": { + "tab": "常规", + "currency": { + "label": "货币" + } + } } } diff --git a/client/src/App.tsx b/client/src/App.tsx index fbcddf3..788e184 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -5,11 +5,6 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { ErrorComponent } from "@refinedev/antd"; import "@refinedev/antd/dist/reset.css"; -import routerBindings, { DocumentTitleHandler, UnsavedChangesNotifier } from "@refinedev/react-router-v6"; -import dataProvider from "./components/dataProvider"; -import { useTranslation } from "react-i18next"; -import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom"; -import { ColorModeContextProvider } from "./contexts/color-mode"; import { FileOutlined, HighlightOutlined, @@ -18,14 +13,21 @@ import { ToolOutlined, UserOutlined, } from "@ant-design/icons"; -import { ConfigProvider } from "antd"; -import React from "react"; -import { Locale } from "antd/es/locale"; -import { languages } from "./i18n"; import loadable from "@loadable/component"; -import SpoolmanNotificationProvider from "./components/notificationProvider"; +import routerBindings, { DocumentTitleHandler, UnsavedChangesNotifier } from "@refinedev/react-router-v6"; +import { ConfigProvider } from "antd"; +import { Locale } from "antd/es/locale"; +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom"; +import dataProvider from "./components/dataProvider"; +import { Favicon } from "./components/favicon"; import { SpoolmanLayout } from "./components/layout"; import liveProvider from "./components/liveProvider"; +import SpoolmanNotificationProvider from "./components/notificationProvider"; +import { ColorModeContextProvider } from "./contexts/color-mode"; +import { languages } from "./i18n"; +import { getAPIURL, getBasePath } from "./utils/url"; interface ResourcePageProps { resource: "spools" | "filaments" | "vendors"; @@ -60,8 +62,8 @@ function App() { }; // Fetch the antd locale using dynamic imports - const [antdLocale, setAntdLocale] = React.useState(); - React.useEffect(() => { + const [antdLocale, setAntdLocale] = useState(); + useEffect(() => { const fetchLocale = async () => { const locale = await import( `./../node_modules/antd/es/locale/${languages[i18n.language].fullCode.replace("-", "_")}.js` @@ -84,7 +86,7 @@ function App() { } return ( - + } /> } /> + } /> } /> @@ -227,6 +230,7 @@ function App() { + diff --git a/client/src/components/column.tsx b/client/src/components/column.tsx index 8a194d9..26ab086 100644 --- a/client/src/components/column.tsx +++ b/client/src/components/column.tsx @@ -1,19 +1,18 @@ +import { DateField, TextField } from "@refinedev/antd"; +import { UseQueryResult } from "@tanstack/react-query"; import { Button, Col, Dropdown, Row, Space, Spin } from "antd"; import { ColumnFilterItem, ColumnType } from "antd/es/table/interface"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import { AlignType } from "rc-table/lib/interface"; +import { Link } from "react-router-dom"; import { getFiltersForField, typeFilters } from "../utils/filtering"; +import { enrichText } from "../utils/parsing"; +import { Field, FieldType } from "../utils/queryFields"; import { TableState } from "../utils/saveload"; import { getSortOrderForField, typeSorters } from "../utils/sorting"; import { NumberFieldUnit, NumberFieldUnitRange } from "./numberField"; -import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; -import { DateField, TextField } from "@refinedev/antd"; -import Icon from "@ant-design/icons"; -import SpoolIcon from "../icon_spool.svg?react"; -import { useTranslate } from "@refinedev/core"; -import { enrichText } from "../utils/parsing"; -import { UseQueryResult } from "@tanstack/react-query"; -import { Link } from "react-router-dom"; -import { Field, FieldType } from "../utils/queryFields"; +import SpoolIcon from "./spoolIcon"; dayjs.extend(utc); @@ -45,6 +44,7 @@ interface BaseColumnProps { i18ncat?: string; i18nkey?: string; title?: string; + align?: AlignType; sorter?: boolean; t: (key: string) => string; navigate: (link: string) => void; @@ -88,6 +88,7 @@ function Column( const columnProps: ColumnType = { dataIndex: props.id, + align: props.align, title: props.title ?? t(props.i18nkey ?? `${props.i18ncat}.fields.${props.id}`), filterMultiple: props.allowMultipleFilters ?? true, width: props.width ?? undefined, @@ -196,7 +197,7 @@ export function FilteredQueryColumn(props: FilteredQueryColu if (typeof item === "string") { return { text: item, - value: item, + value: '"' + item + '"', }; } return item; @@ -227,6 +228,7 @@ interface NumberColumnProps extends BaseColumnProps { export function NumberColumn(props: NumberColumnProps) { return Column({ ...props, + align: "right", render: (rawValue) => { const value = props.transform ? props.transform(rawValue) : rawValue; if (value === null || value === undefined) { @@ -256,18 +258,19 @@ export function DateColumn(props: BaseColumnProps) { hidden={!value} value={dayjs.utc(value).local()} title={dayjs.utc(value).local().format()} - format="YYYY-MM-DD HH:mm:ss" + format="YYYY-MM-DD HH:mm" /> ); }, }); } -export function ActionsColumn(actionsFn: (record: Obj) => Action[]): ColumnType | undefined { - const t = useTranslate(); - +export function ActionsColumn( + title: string, + actionsFn: (record: Obj) => Action[] +): ColumnType | undefined { return { - title: t("table.actions"), + title, responsive: ["lg"], render: (_, record) => { const buttons = actionsFn(record).map((action) => { @@ -296,7 +299,7 @@ export function ActionsColumn(actionsFn: (record: Obj) => Ac } interface SpoolIconColumnProps extends FilteredQueryColumnProps { - color: (record: Obj) => string | undefined; + color: (record: Obj) => string | { colors: string[]; vertical: boolean } | undefined; } export function SpoolIconColumn(props: SpoolIconColumnProps) { @@ -308,7 +311,7 @@ export function SpoolIconColumn(props: SpoolIconColumnProps< if (typeof item === "string") { return { text: item, - value: item, + value: '"' + item + '"', }; } return item; @@ -343,19 +346,12 @@ export function SpoolIconColumn(props: SpoolIconColumnProps< }, render: (rawValue, record: Obj) => { const value = props.transform ? props.transform(rawValue) : rawValue; - const colorStr = props.color(record); + const colorObj = props.color(record); return ( - {colorStr && ( + {colorObj && ( - + )} {value} diff --git a/client/src/components/dataProvider.ts b/client/src/components/dataProvider.ts index 751fe5c..46e062d 100644 --- a/client/src/components/dataProvider.ts +++ b/client/src/components/dataProvider.ts @@ -1,7 +1,7 @@ -import { AxiosInstance } from "axios"; -import { stringify } from "query-string"; import { DataProvider } from "@refinedev/core"; import { axiosInstance } from "@refinedev/simple-rest"; +import { AxiosInstance } from "axios"; +import { stringify } from "query-string"; type MethodTypes = "get" | "delete" | "head" | "options"; type MethodTypesWithBody = "post" | "put" | "patch"; diff --git a/client/src/components/dateTimePicker.tsx b/client/src/components/dateTimePicker.tsx index 4097682..7be7d34 100644 --- a/client/src/components/dateTimePicker.tsx +++ b/client/src/components/dateTimePicker.tsx @@ -1,8 +1,8 @@ import { DatePicker } from "antd"; import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; -import timezone from "dayjs/plugin/timezone"; import advancedFormat from "dayjs/plugin/advancedFormat"; +import timezone from "dayjs/plugin/timezone"; +import utc from "dayjs/plugin/utc"; dayjs.extend(utc); dayjs.extend(timezone); diff --git a/client/src/components/extraFields.tsx b/client/src/components/extraFields.tsx index ab2bacc..0600f0d 100644 --- a/client/src/components/extraFields.tsx +++ b/client/src/components/extraFields.tsx @@ -1,13 +1,13 @@ import { DateField, TextField } from "@refinedev/antd"; -import { Field, FieldType } from "../utils/queryFields"; -import { NumberFieldUnit, NumberFieldUnitRange } from "./numberField"; -import { enrichText } from "../utils/parsing"; -import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; import { Checkbox, Form, Input, InputNumber, Select, Typography } from "antd"; import { FormItemProps, Rule } from "antd/es/form"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import { enrichText } from "../utils/parsing"; +import { Field, FieldType } from "../utils/queryFields"; import { DateTimePicker } from "./dateTimePicker"; import { InputNumberRange } from "./inputNumberRange"; +import { NumberFieldUnit, NumberFieldUnitRange } from "./numberField"; dayjs.extend(utc); diff --git a/client/src/components/favicon.tsx b/client/src/components/favicon.tsx new file mode 100644 index 0000000..64d1a02 --- /dev/null +++ b/client/src/components/favicon.tsx @@ -0,0 +1,20 @@ +import { useEffect } from "react"; + +/** + * Renders a favicon element in the head of the HTML document with the specified URL. + * + * @param {string} props.url - The URL of the favicon image. + * @return {JSX.Element} - An empty JSX element. + */ +export function Favicon(props: { url: string }) { + useEffect(() => { + let link = document.querySelector("link[rel~='icon']") as HTMLLinkElement; + if (!link) { + link = document.createElement("link") as HTMLLinkElement; + link.rel = "icon"; + document.getElementsByTagName("head")[0].appendChild(link); + } + link.href = props.url; + }, [props.url]); + return <>; +} diff --git a/client/src/components/filamentImportModal.tsx b/client/src/components/filamentImportModal.tsx new file mode 100644 index 0000000..d0e48e5 --- /dev/null +++ b/client/src/components/filamentImportModal.tsx @@ -0,0 +1,72 @@ +import { useTranslate } from "@refinedev/core"; +import { Form, Modal, Select } from "antd"; +import { Trans } from "react-i18next"; +import { formatFilamentLabel } from "../pages/spools/functions"; +import { searchMatches } from "../utils/filtering"; +import { ExternalFilament, useGetExternalDBFilaments } from "../utils/queryExternalDB"; + +export function FilamentImportModal(props: { + isOpen: boolean; + onImport: (filament: ExternalFilament) => void; + onClose: () => void; +}) { + const [form] = Form.useForm(); + const t = useTranslate(); + + const externalFilaments = useGetExternalDBFilaments(); + const filamentOptions = + externalFilaments.data?.map((item) => { + return { + label: formatFilamentLabel( + item.name, + item.diameter, + item.manufacturer, + item.material, + item.weight, + item.spool_type + ), + value: item.id, + item: item, + }; + }) ?? []; + filamentOptions.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: "base" })); + + return ( + form.submit()} + onCancel={() => props.onClose()} + > +
{ + const filament = filamentOptions.find((item) => item.value === values.filament)?.item; + if (!filament) { + throw new Error("Filament not found"); + } + props.onImport(filament); + props.onClose(); + form.resetFields(); + }} + > +

+ , + }} + /> +

+ + { return a?.label && b?.label @@ -113,20 +167,62 @@ export const FilamentCreate: React.FC - { - return e?.toHex(); - }} - > - + + { + setColorType(value.target.value); + }} + defaultValue={colorType} + value={colorType} + > + {t("filament.fields.single_color")} + {t("filament.fields.multi_color")} + + {colorType == "single" && ( + { + return e?.toHex(); + }} + > + + + )} + {colorType == "multi" && ( + + + {t("filament.fields.coaxial")} + {t("filament.fields.longitudinal")} + + + )} + {colorType == "multi" && ( + + + + )} = () => { const [hasChanged, setHasChanged] = useState(false); const extraFields = useGetFields(EntityType.filament); const currency = useCurrency(); + const [colorType, setColorType] = useState<"single" | "multi">("single"); const { formProps, saveButtonProps } = useForm({ liveMode: "manual", @@ -49,6 +50,16 @@ export const FilamentEdit: React.FC = () => { formProps.initialValues = ParsedExtras(formProps.initialValues); } + // Update colorType state + useEffect(() => { + console.log(formProps.initialValues?.multi_color_hexes); + if (formProps.initialValues?.multi_color_hexes) { + setColorType("multi"); + } else { + setColorType("single"); + } + }, [formProps.initialValues?.multi_color_hexes]); + // Override the form's onFinish method to stringify the extra fields const originalOnFinish = formProps.onFinish; formProps.onFinish = (allValues: IFilamentParsedExtras) => { @@ -132,20 +143,62 @@ export const FilamentEdit: React.FC = () => { } /> - { - return e?.toHex(); - }} - > - + + { + setColorType(value.target.value); + }} + defaultValue={colorType} + value={colorType} + > + {t("filament.fields.single_color")} + {t("filament.fields.multi_color")} + + {colorType == "single" && ( + { + return e?.toHex(); + }} + > + + + )} + {colorType == "multi" && ( + + + {t("filament.fields.coaxial")} + {t("filament.fields.longitudinal")} + + + )} + {colorType == "multi" && ( + + + + )} { + const vendor = await getOrCreateVendorFromExternal(externalFilament.manufacturer); + + let color_hex: string | undefined = undefined; + let multi_color_hexes: string | undefined = undefined; + let multi_color_direction: string | undefined = undefined; + if (externalFilament.color_hex) { + color_hex = externalFilament.color_hex; + } else if (externalFilament.color_hexes && externalFilament.color_hexes.length > 0) { + multi_color_hexes = externalFilament.color_hexes.join(",") + multi_color_direction = externalFilament.multi_color_direction + } + + const body: Omit & { vendor_id: number } = { + name: externalFilament.name, + material: externalFilament.material, + vendor_id: vendor.id, + density: externalFilament.density, + diameter: externalFilament.diameter, + weight: externalFilament.weight, + spool_weight: externalFilament.spool_weight || undefined, + color_hex: color_hex, + multi_color_hexes: multi_color_hexes, + multi_color_direction: multi_color_direction, + settings_extruder_temp: externalFilament.extruder_temp || undefined, + settings_bed_temp: externalFilament.bed_temp || undefined, + external_id: externalFilament.id, + }; + + const response = await fetch(getAPIURL() + "/filament", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body), + }); + if (!response.ok) { + throw new Error("Network response was not ok"); + } + return response.json(); +} diff --git a/client/src/pages/filaments/list.tsx b/client/src/pages/filaments/list.tsx index 7379c3a..9f33cdc 100644 --- a/client/src/pages/filaments/list.tsx +++ b/client/src/pages/filaments/list.tsx @@ -1,33 +1,33 @@ -import React from "react"; -import { IResourceComponentsProps, useTranslate, useInvalidate, useNavigation } from "@refinedev/core"; -import { useTable, List } from "@refinedev/antd"; -import { Table, Button, Dropdown } from "antd"; +import { EditOutlined, EyeOutlined, FileOutlined, FilterOutlined, PlusSquareOutlined } from "@ant-design/icons"; +import { List, useTable } from "@refinedev/antd"; +import { IResourceComponentsProps, useInvalidate, useNavigation, useTranslate } from "@refinedev/core"; +import { Button, Dropdown, Table } from "antd"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; -import { IFilament } from "./model"; -import { EditOutlined, EyeOutlined, FileOutlined, FilterOutlined, PlusSquareOutlined } from "@ant-design/icons"; -import { TableState, useInitialTableState, useStoreInitialState } from "../../utils/saveload"; +import { useMemo, useState } from "react"; +import { useNavigate } from "react-router-dom"; import { + ActionsColumn, + CustomFieldColumn, DateColumn, FilteredQueryColumn, NumberColumn, RichColumn, SortedColumn, SpoolIconColumn, - ActionsColumn, - CustomFieldColumn, } from "../../components/column"; +import { useLiveify } from "../../components/liveify"; import { useSpoolmanArticleNumbers, useSpoolmanFilamentNames, useSpoolmanMaterials, useSpoolmanVendors, } from "../../components/otherModels"; -import { useLiveify } from "../../components/liveify"; import { removeUndefined } from "../../utils/filtering"; import { EntityType, useGetFields } from "../../utils/queryFields"; -import { useNavigate } from "react-router-dom"; +import { TableState, useInitialTableState, useStoreInitialState } from "../../utils/saveload"; import { useCurrency } from "../../utils/settings"; +import { IFilament } from "./model"; dayjs.extend(utc); @@ -125,7 +125,7 @@ export const FilamentList: React.FC = () => { }); // Create state for the columns to show - const [showColumns, setShowColumns] = React.useState(initialState.showColumns ?? defaultColumns); + const [showColumns, setShowColumns] = useState(initialState.showColumns ?? defaultColumns); // Store state in local storage const tableState: TableState = { @@ -137,7 +137,7 @@ export const FilamentList: React.FC = () => { useStoreInitialState(namespace, tableState); // Collapse the dataSource to a mutable list - const queryDataSource: IFilamentCollapsed[] = React.useMemo( + const queryDataSource: IFilamentCollapsed[] = useMemo( () => (tableProps.dataSource || []).map((record) => ({ ...record })), [tableProps.dataSource] ); @@ -240,7 +240,13 @@ export const FilamentList: React.FC = () => { ...commonProps, id: "name", i18ncat: "filament", - color: (record: IFilamentCollapsed) => record.color_hex, + color: (record: IFilamentCollapsed) => + record.multi_color_hexes + ? { + colors: record.multi_color_hexes.split(","), + vertical: record.multi_color_direction === "longitudinal", + } + : record.color_hex, filterValueQuery: useSpoolmanFilamentNames(), }), FilteredQueryColumn({ @@ -254,6 +260,7 @@ export const FilamentList: React.FC = () => { ...commonProps, id: "price", i18ncat: "filament", + align: "right", width: 80, render: (_, obj: IFilamentCollapsed) => { return obj.price?.toLocaleString(undefined, { @@ -285,7 +292,7 @@ export const FilamentList: React.FC = () => { id: "weight", i18ncat: "filament", unit: "g", - maxDecimals: 1, + maxDecimals: 0, width: 100, }), NumberColumn({ @@ -293,7 +300,7 @@ export const FilamentList: React.FC = () => { id: "spool_weight", i18ncat: "filament", unit: "g", - maxDecimals: 1, + maxDecimals: 0, width: 100, }), FilteredQueryColumn({ @@ -336,7 +343,7 @@ export const FilamentList: React.FC = () => { i18ncat: "filament", width: 150, }), - ActionsColumn(actions), + ActionsColumn(t("table.actions"), actions), ])} /> diff --git a/client/src/pages/filaments/model.tsx b/client/src/pages/filaments/model.tsx index 20b693f..b21c709 100644 --- a/client/src/pages/filaments/model.tsx +++ b/client/src/pages/filaments/model.tsx @@ -16,6 +16,9 @@ export interface IFilament { settings_extruder_temp?: number; settings_bed_temp?: number; color_hex?: string; + multi_color_hexes?: string; + multi_color_direction?: string; + external_id?: string; extra: { [key: string]: string }; } diff --git a/client/src/pages/filaments/show.tsx b/client/src/pages/filaments/show.tsx index 567cafb..574a386 100644 --- a/client/src/pages/filaments/show.tsx +++ b/client/src/pages/filaments/show.tsx @@ -1,16 +1,17 @@ -import React from "react"; +import { DateField, NumberField, Show, TextField } from "@refinedev/antd"; import { IResourceComponentsProps, useShow, useTranslate } from "@refinedev/core"; -import { Show, NumberField, DateField, TextField } from "@refinedev/antd"; import { Button, Typography } from "antd"; -import { NumberFieldUnit } from "../../components/numberField"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; -import { IFilament } from "./model"; -import { enrichText } from "../../utils/parsing"; +import React from "react"; import { useNavigate } from "react-router-dom"; -import { EntityType, useGetFields } from "../../utils/queryFields"; import { ExtraFieldDisplay } from "../../components/extraFields"; +import { NumberFieldUnit } from "../../components/numberField"; +import SpoolIcon from "../../components/spoolIcon"; +import { enrichText } from "../../utils/parsing"; +import { EntityType, useGetFields } from "../../utils/queryFields"; import { useCurrency } from "../../utils/settings"; +import { IFilament } from "./model"; dayjs.extend(utc); const { Title } = Typography; @@ -49,6 +50,13 @@ export const FilamentShow: React.FC = () => { navigate(URL); }; + const colorObj = record?.multi_color_hexes + ? { + colors: record.multi_color_hexes.split(","), + vertical: record.multi_color_direction === "longitudinal", + } + : record?.color_hex; + return ( = () => { {t("filament.fields.name")} {t("filament.fields.color_hex")} - + {colorObj && } {t("filament.fields.material")} {t("filament.fields.price")} @@ -143,6 +151,8 @@ export const FilamentShow: React.FC = () => { )} {t("filament.fields.article_number")} + {t("filament.fields.external_id")} + {t("filament.fields.comment")} {t("settings.extra_fields.tab")} diff --git a/client/src/pages/help/index.tsx b/client/src/pages/help/index.tsx index bc16748..c0bc75f 100644 --- a/client/src/pages/help/index.tsx +++ b/client/src/pages/help/index.tsx @@ -1,13 +1,13 @@ -import React from "react"; +import { FileOutlined, HighlightOutlined, UserOutlined } from "@ant-design/icons"; import { IResourceComponentsProps, useTranslate } from "@refinedev/core"; +import { List, theme } from "antd"; +import { Content } from "antd/es/layout/layout"; +import Title from "antd/es/typography/Title"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; -import { Content } from "antd/es/layout/layout"; -import { List, theme } from "antd"; -import Title from "antd/es/typography/Title"; -import { FileOutlined, HighlightOutlined, UserOutlined } from "@ant-design/icons"; -import { Link } from "react-router-dom"; +import React from "react"; import { Trans } from "react-i18next"; +import { Link } from "react-router-dom"; dayjs.extend(utc); diff --git a/client/src/pages/home/index.tsx b/client/src/pages/home/index.tsx index 03de5e1..592e4b5 100644 --- a/client/src/pages/home/index.tsx +++ b/client/src/pages/home/index.tsx @@ -1,14 +1,14 @@ -import React, { ReactNode } from "react"; +import { FileOutlined, HighlightOutlined, PlusOutlined, UnorderedListOutlined, UserOutlined } from "@ant-design/icons"; import { IResourceComponentsProps, useList, useTranslate } from "@refinedev/core"; +import { Card, Col, Row, Statistic, theme } from "antd"; +import { Content } from "antd/es/layout/layout"; +import Title from "antd/es/typography/Title"; import dayjs from "dayjs"; import utc from "dayjs/plugin/utc"; -import { Content } from "antd/es/layout/layout"; -import { Card, Col, Row, Statistic, theme } from "antd"; -import Title from "antd/es/typography/Title"; -import Logo from "../../icon.svg?react"; -import { FileOutlined, HighlightOutlined, PlusOutlined, UnorderedListOutlined, UserOutlined } from "@ant-design/icons"; -import { ISpool } from "../spools/model"; +import React, { ReactNode } from "react"; import { Link } from "react-router-dom"; +import Logo from "../../icon.svg?react"; +import { ISpool } from "../spools/model"; dayjs.extend(utc); diff --git a/client/src/pages/printing/index.tsx b/client/src/pages/printing/index.tsx new file mode 100644 index 0000000..0e553a0 --- /dev/null +++ b/client/src/pages/printing/index.tsx @@ -0,0 +1,72 @@ +import { PageHeader } from "@refinedev/antd"; +import { IResourceComponentsProps, useTranslate } from "@refinedev/core"; +import { theme } from "antd"; +import { Content } from "antd/es/layout/layout"; +import dayjs from "dayjs"; +import utc from "dayjs/plugin/utc"; +import React from "react"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import SpoolQRCodePrintingDialog from "./spoolQrCodePrintingDialog"; +import SpoolSelectModal from "./spoolSelectModal"; + +dayjs.extend(utc); + +const { useToken } = theme; + +export const Printing: React.FC = () => { + const { token } = useToken(); + const t = useTranslate(); + const [searchParams, setSearchParams] = useSearchParams(); + const navigate = useNavigate(); + + const spoolIds = searchParams.getAll("spools").map(Number); + const step = spoolIds.length > 0 ? 1 : 0; + + return ( + <> + { + const returnUrl = searchParams.get("return"); + if (returnUrl) { + navigate(returnUrl, { relative: "path" }); + } else { + navigate("/spool"); + } + }} + > + + {step === 0 && ( + { + setSearchParams((prev) => { + const newParams = new URLSearchParams(prev); + newParams.delete("spools"); + spools.forEach((spool) => newParams.append("spools", spool.id.toString())); + newParams.set("return", "/spool/print"); + return newParams; + }); + }} + /> + )} + {step === 1 && } + + + + ); +}; + +export default Printing; diff --git a/client/src/pages/printing/printing.tsx b/client/src/pages/printing/printing.tsx new file mode 100644 index 0000000..297e4e4 --- /dev/null +++ b/client/src/pages/printing/printing.tsx @@ -0,0 +1,106 @@ +import { v4 as uuidv4 } from "uuid"; +import { useGetSetting, useSetSetting } from "../../utils/querySettings"; +import { ISpool } from "../spools/model"; + +export interface PrintSettings { + id: string; + name?: string; + margin?: { top: number; bottom: number; left: number; right: number }; + printerMargin?: { top: number; bottom: number; left: number; right: number }; + spacing?: { horizontal: number; vertical: number }; + columns?: number; + rows?: number; + skipItems?: number; + itemCopies?: number; + paperSize?: string; + customPaperSize?: { width: number; height: number }; + borderShowMode?: "none" | "border" | "grid"; +} + +export interface QRCodePrintSettings { + showContent?: boolean; + showQRCodeMode?: "no" | "simple" | "withIcon"; + textSize?: number; + printSettings: PrintSettings; +} + +export interface SpoolQRCodePrintSettings { + template?: string; + labelSettings: QRCodePrintSettings; +} + +export function useGetPrintSettings(): SpoolQRCodePrintSettings[] | undefined { + const { data } = useGetSetting("print_presets"); + if (!data) return; + const parsed: SpoolQRCodePrintSettings[] = + data && data.value ? JSON.parse(data.value) : ([] as SpoolQRCodePrintSettings[]); + // Loop through all parsed and generate a new ID field if it's not set + return parsed.map((settings) => { + if (!settings.labelSettings.printSettings.id) { + settings.labelSettings.printSettings.id = uuidv4(); + } + return settings; + }); +} + +export function useSetPrintSettings(): (spoolQRCodePrintSettings: SpoolQRCodePrintSettings[]) => void { + const mut = useSetSetting("print_presets"); + + return (spoolQRCodePrintSettings: SpoolQRCodePrintSettings[]) => { + mut.mutate(spoolQRCodePrintSettings); + }; +} + +interface GenericObject { + [key: string]: any; + extra: { [key: string]: string }; +} + +function getTagValue(tag: string, obj: GenericObject): any { + // Split tag by . + const tagParts = tag.split("."); + if (tagParts[0] === "extra") { + const extraValue = obj.extra[tagParts[1]]; + if (extraValue === undefined) { + return "?"; + } + return JSON.parse(extraValue); + } + + const value = obj[tagParts[0]] ?? "?"; + // check if value is itself an object. If so, recursively call this and remove the first part of the tag + if (typeof value === "object") { + return getTagValue(tagParts.slice(1).join("."), value); + } + return value; +} + +function applyNewline(text: string): JSX.Element[] { + return text.split("\n").map((line, idx, arr) => ( + + {line} + {idx < arr.length - 1 &&
} +
+ )); +} + +function applyTextFormatting(text: string): JSX.Element[] { + const regex = /\*\*([\w\W]*?)\*\*/g; + const parts = text.split(regex); + // Map over the parts and wrap matched text with tags + const elements = parts.map((part, index) => { + // Even index: outside asterisks, odd index: inside asterisks (to be bolded) + const node = applyNewline(part); + return index % 2 === 0 ? {node} : {node}; + }); + return elements; +} +export function renderLabelContents(template: string, spool: ISpool): JSX.Element { + // Find all {tags} in the template string and loop over them + let result = template.replace(/\{(.*?)\}/g, function (_, tag) { + return getTagValue(tag, spool); + }); + + // Split string on \n into individual lines + return <>{applyTextFormatting(result)}; +} diff --git a/client/src/components/printing/printingDialog.tsx b/client/src/pages/printing/printingDialog.tsx similarity index 54% rename from client/src/components/printing/printingDialog.tsx rename to client/src/pages/printing/printingDialog.tsx index a10e633..2d09c70 100644 --- a/client/src/components/printing/printingDialog.tsx +++ b/client/src/pages/printing/printingDialog.tsx @@ -1,29 +1,33 @@ -import React, { useRef } from "react"; +import { FileImageOutlined, PrinterOutlined } from "@ant-design/icons"; +import { useTranslate } from "@refinedev/core"; import { - Modal, - Slider, Button, - Select, - Row, Col, - Form, - Divider, - RadioChangeEvent, - Radio, - InputNumber, Collapse, + Divider, + Form, + InputNumber, + Radio, + RadioChangeEvent, + Row, + Select, + Slider, + Space, } from "antd"; +import * as htmlToImage from "html-to-image"; +import React, { useRef } from "react"; import ReactToPrint from "react-to-print"; import { useSavedState } from "../../utils/saveload"; -import { useTranslate } from "@refinedev/core"; +import { PrintSettings } from "./printing"; interface PrintingDialogProps { items: JSX.Element[]; + printSettings: PrintSettings; + setPrintSettings: (setPrintSettings: PrintSettings) => void; style?: string; extraSettings?: JSX.Element; - visible: boolean; - onCancel: () => void; - title?: string; + extraSettingsStart?: JSX.Element; + extraButtons?: JSX.Element; } interface PaperDimensions { @@ -58,79 +62,77 @@ const paperDimensions: { [key: string]: PaperDimensions } = { }, }; -const PrintingDialog: React.FC = ({ items, style, extraSettings, visible, onCancel, title }) => { +const PrintingDialog: React.FC = ({ + items, + printSettings, + setPrintSettings, + style, + extraSettings, + extraSettingsStart, + extraButtons, +}) => { const t = useTranslate(); const [collapseState, setCollapseState] = useSavedState("print-collapseState", []); - const [marginLeft, setMarginLeft] = useSavedState("print-marginLeft", 10); - const [marginTop, setMarginTop] = useSavedState("print-marginTop", 10); - const [marginRight, setMarginRight] = useSavedState("print-marginRight", 10); - const [marginBottom, setMarginBottom] = useSavedState("print-marginBottom", 10); - const [horizontalSpacing, setHorizontalSpacing] = useSavedState("print-horizontalSpacing", 0); - const [verticalSpacing, setVerticalSpacing] = useSavedState("print-verticalSpacing", 0); - const [printerMarginLeft, setPrinterMarginLeft] = useSavedState("print-printerMarginLeft", 5); - const [printerMarginTop, setPrinterMarginTop] = useSavedState("print-printerMarginTop", 5); - const [printerMarginRight, setPrinterMarginRight] = useSavedState("print-printerMarginRight", 5); - const [printerMarginBottom, setPrinterMarginBottom] = useSavedState("print-printerMarginBottom", 5); - const [paperColumns, setPaperColumns] = useSavedState("print-itemsPerRow", 3); - const [paperRows, setPaperRows] = useSavedState("print-rowsPerPage", 8); - const [skipItems, setSkipItems] = useSavedState("print-skipItems", 0); - const [paperSize, setPaperSize] = useSavedState("print-paperSize", "A4"); - const [customPaperWidth, setCustomPaperWidth] = useSavedState("print-customPaperWidth", 210); - const [customPaperHeight, setCustomPaperHeight] = useSavedState("print-customPaperHeight", 297); const [previewScale, setPreviewScale] = useSavedState("print-previewScale", 0.6); - const [borderShowMode, setBorderShowMode] = useSavedState<"none" | "border" | "grid">("print-borderShowMode", "grid"); - const paperWidth = paperSize === "custom" ? customPaperWidth : paperDimensions[paperSize].width; - const paperHeight = paperSize === "custom" ? customPaperHeight : paperDimensions[paperSize].height; + const margin = printSettings?.margin || { top: 10, bottom: 10, left: 10, right: 10 }; + const printerMargin = printSettings?.printerMargin || { top: 5, bottom: 5, left: 5, right: 5 }; + const spacing = printSettings?.spacing || { horizontal: 0, vertical: 0 }; + const paperColumns = printSettings?.columns || 3; + const paperRows = printSettings?.rows || 8; + const skipItems = printSettings?.skipItems || 0; + const itemCopies = printSettings?.itemCopies || 1; + const paperSize = printSettings?.paperSize || "A4"; + const customPaperSize = printSettings?.customPaperSize || { width: 210, height: 297 }; + const borderShowMode = printSettings?.borderShowMode || "grid"; + + const paperWidth = paperSize === "custom" ? customPaperSize.width : paperDimensions[paperSize].width; + const paperHeight = paperSize === "custom" ? customPaperSize.height : paperDimensions[paperSize].height; const printRef = useRef(null); - const itemWidth = (paperWidth - marginLeft - marginRight - horizontalSpacing) / paperColumns - horizontalSpacing; - const itemHeight = (paperHeight - marginTop - marginBottom - verticalSpacing) / paperRows - verticalSpacing; + const itemWidth = (paperWidth - margin.left - margin.right - spacing.horizontal) / paperColumns - spacing.horizontal; + const itemHeight = (paperHeight - margin.top - margin.bottom - spacing.vertical) / paperRows - spacing.vertical; const itemsPerRow = paperColumns; - const rowsPerPage = paperRows; + const itemsPerPage = itemsPerRow * paperRows; - const itemsIncludingSkipped = [...Array(skipItems).fill(<>), ...items]; - - const rowsOfItems = []; - for (let row_idx = 0; row_idx < itemsIncludingSkipped.length / itemsPerRow; row_idx += 1) { - rowsOfItems.push(itemsIncludingSkipped.slice(row_idx * itemsPerRow, (row_idx + 1) * itemsPerRow)); + const itemsIncludingSkipped = [...Array(skipItems).fill(<>)]; + for (const item of items) { + for (let i = 0; i < itemCopies; i += 1) { + itemsIncludingSkipped.push(item); + } } const pageBlocks = []; - for (let page_idx = 0; page_idx < rowsOfItems.length / rowsPerPage; page_idx += 1) { - pageBlocks.push(rowsOfItems.slice(page_idx * rowsPerPage, (page_idx + 1) * rowsPerPage)); + for (let page_idx = 0; page_idx < itemsIncludingSkipped.length / itemsPerPage; page_idx += 1) { + pageBlocks.push(itemsIncludingSkipped.slice(page_idx * itemsPerPage, (page_idx + 1) * itemsPerPage)); } - const pages = pageBlocks.map(function (rows, pageIdx) { - const itemRows = rows.map((row, rowIdx) => { + const pages = pageBlocks.map(function (items, pageIdx) { + const itemDivs = items.map((item, itemIdx) => { + const isFirstColumn = itemIdx % itemsPerRow === 0; + const isLastColumn = (itemIdx + 1) % itemsPerRow === 0; + const isFirstRow = itemIdx < itemsPerRow; + const isLastRow = itemsPerPage - itemIdx <= itemsPerRow; + return ( - - {row.map(function (item, colIdx) { - return ( - -
- {item} -
- - ); - })} - +
+ {item} +
); }); @@ -148,57 +150,75 @@ const PrintingDialog: React.FC = ({ items, style, extraSett
- - {itemRows} -
+ {itemDivs} +
); }); + const saveAsImage = () => { + const hasPrinted: Element[] = []; + + Array.from(document.getElementsByClassName("print-qrcode-item")).forEach(async (item) => { + // Prevent printing copies + for (let i = 0; i < hasPrinted.length; i += 1) { + if (item.isEqualNode(hasPrinted[i])) return; + } + hasPrinted.push(item); + + // Generate png image + const url = await htmlToImage.toPng(item as HTMLElement, { + backgroundColor: "#FFF", + cacheBust: true, + }); + + // Download image + const link = document.createElement("a"); + link.href = url; + link.download = "spoolmanlabel.png"; + link.click(); + }); + }; + return ( - } - content={() => printRef.current} - />, - ]} - width={1200} // Set the modal width to accommodate the preview - > + <> - {t("printing.generic.description")} - -
= ({ items, style, extraSett style={{ transform: `scale(${previewScale})`, transformOrigin: "top left", - display: "block", }} > @@ -248,6 +274,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett + {extraSettingsStart} + @@ -256,7 +284,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={30} value={skipItems} onChange={(value) => { - setSkipItems(value); + printSettings.skipItems = value; + setPrintSettings(printSettings); }} /> @@ -266,7 +295,34 @@ const PrintingDialog: React.FC = ({ items, style, extraSett style={{ margin: "0 16px" }} value={skipItems} onChange={(value) => { - setSkipItems(value ?? 1); + printSettings.skipItems = value ?? 1; + setPrintSettings(printSettings); + }} + /> + + + + + + + { + printSettings.itemCopies = value; + setPrintSettings(printSettings); + }} + /> + + + { + printSettings.itemCopies = value ?? 1; + setPrintSettings(printSettings); }} /> @@ -283,7 +339,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { label: t("printing.generic.borders.grid"), value: "grid" }, ]} onChange={(e: RadioChangeEvent) => { - setBorderShowMode(e.target.value); + printSettings.borderShowMode = e.target.value; + setPrintSettings(printSettings); }} value={borderShowMode} optionType="button" @@ -295,7 +352,7 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { @@ -306,7 +363,7 @@ const PrintingDialog: React.FC = ({ items, style, extraSett = ({ items, style, extraSett {extraSettings} + {t("printing.generic.description")} + - { + printSettings.paperSize = value; + setPrintSettings(printSettings); + }} + > {Object.keys(paperDimensions).map((key) => ( {key} @@ -346,10 +411,14 @@ const PrintingDialog: React.FC = ({ items, style, extraSett setCustomPaperWidth(value ?? 0)} + onChange={(value) => { + customPaperSize.width = value ?? 0; + printSettings.customPaperSize = customPaperSize; + setPrintSettings(printSettings); + }} /> @@ -357,10 +426,14 @@ const PrintingDialog: React.FC = ({ items, style, extraSett setCustomPaperHeight(value ?? 0)} + onChange={(value) => { + customPaperSize.height = value ?? 0; + printSettings.customPaperSize = customPaperSize; + setPrintSettings(printSettings); + }} /> @@ -373,7 +446,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={5} value={paperColumns} onChange={(value) => { - setPaperColumns(value); + printSettings.columns = value; + setPrintSettings(printSettings); }} /> @@ -383,7 +457,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett style={{ margin: "0 16px" }} value={paperColumns} onChange={(value) => { - setPaperColumns(value ?? 1); + printSettings.columns = value ?? 1; + setPrintSettings(printSettings); }} /> @@ -397,7 +472,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={15} value={paperRows} onChange={(value) => { - setPaperRows(value); + printSettings.rows = value; + setPrintSettings(printSettings); }} /> @@ -407,7 +483,8 @@ const PrintingDialog: React.FC = ({ items, style, extraSett style={{ margin: "0 16px" }} value={paperRows} onChange={(value) => { - setPaperRows(value ?? 1); + printSettings.rows = value ?? 1; + setPrintSettings(printSettings); }} /> @@ -423,9 +500,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={marginLeft} + value={margin.left} onChange={(value) => { - setMarginLeft(value); + margin.left = value; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -433,10 +512,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setMarginLeft(value ?? 0); + margin.left = value ?? 0; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -450,9 +531,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={marginTop} + value={margin.top} onChange={(value) => { - setMarginTop(value); + margin.top = value; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -460,10 +543,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setMarginTop(value ?? 0); + margin.top = value ?? 0; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -477,9 +562,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={marginRight} + value={margin.right} onChange={(value) => { - setMarginRight(value); + margin.right = value; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -487,10 +574,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setMarginRight(value ?? 0); + margin.right = value ?? 0; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -504,9 +593,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={marginBottom} + value={margin.bottom} onChange={(value) => { - setMarginBottom(value); + margin.bottom = value; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -514,10 +605,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setMarginBottom(value ?? 0); + margin.bottom = value ?? 0; + printSettings.margin = margin; + setPrintSettings(printSettings); }} /> @@ -533,9 +626,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={printerMarginLeft} + value={printerMargin.left} onChange={(value) => { - setPrinterMarginLeft(value); + printerMargin.left = value; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -543,10 +638,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setPrinterMarginLeft(value ?? 0); + printerMargin.left = value ?? 0; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -560,9 +657,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={printerMarginTop} + value={printerMargin.top} onChange={(value) => { - setPrinterMarginTop(value); + printerMargin.top = value; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -570,10 +669,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setPrinterMarginTop(value ?? 0); + printerMargin.top = value ?? 0; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -587,9 +688,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={printerMarginRight} + value={printerMargin.right} onChange={(value) => { - setPrinterMarginRight(value); + printerMargin.right = value; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -597,10 +700,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setPrinterMarginRight(value ?? 0); + printerMargin.right = value ?? 0; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -614,9 +719,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={50} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={printerMarginBottom} + value={printerMargin.bottom} onChange={(value) => { - setPrinterMarginBottom(value); + printerMargin.bottom = value; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -624,10 +731,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setPrinterMarginBottom(value ?? 0); + printerMargin.bottom = value ?? 0; + printSettings.printerMargin = printerMargin; + setPrintSettings(printSettings); }} /> @@ -642,9 +751,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={20} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={horizontalSpacing} + value={spacing.horizontal} onChange={(value) => { - setHorizontalSpacing(value); + spacing.horizontal = value; + printSettings.spacing = spacing; + setPrintSettings(printSettings); }} /> @@ -652,10 +763,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setHorizontalSpacing(value ?? 0); + spacing.horizontal = value ?? 0; + printSettings.spacing = spacing; + setPrintSettings(printSettings); }} /> @@ -669,9 +782,11 @@ const PrintingDialog: React.FC = ({ items, style, extraSett max={20} step={0.1} tooltip={{ formatter: (value) => `${value} mm` }} - value={verticalSpacing} + value={spacing.vertical} onChange={(value) => { - setVerticalSpacing(value); + spacing.vertical = value; + printSettings.spacing = spacing; + setPrintSettings(printSettings); }} /> @@ -679,10 +794,12 @@ const PrintingDialog: React.FC = ({ items, style, extraSett { - setVerticalSpacing(value ?? 0); + spacing.vertical = value ?? 0; + printSettings.spacing = spacing; + setPrintSettings(printSettings); }} /> @@ -693,7 +810,26 @@ const PrintingDialog: React.FC = ({ items, style, extraSett - + + + + {extraButtons} + + ( + + )} + content={() => printRef.current} + /> + + + + ); }; diff --git a/client/src/pages/printing/qrCodePrintingDialog.tsx b/client/src/pages/printing/qrCodePrintingDialog.tsx new file mode 100644 index 0000000..bf2fd6f --- /dev/null +++ b/client/src/pages/printing/qrCodePrintingDialog.tsx @@ -0,0 +1,174 @@ +import { useTranslate } from "@refinedev/core"; +import { Col, Form, InputNumber, QRCode, Radio, RadioChangeEvent, Row, Slider, Switch } from "antd"; +import { QRCodePrintSettings } from "./printing"; +import PrintingDialog from "./printingDialog"; + +interface QRCodeData { + value: string; + label?: JSX.Element; + errorLevel?: "L" | "M" | "Q" | "H"; +} + +interface QRCodePrintingDialogProps { + items: QRCodeData[]; + printSettings: QRCodePrintSettings; + setPrintSettings: (setPrintSettings: QRCodePrintSettings) => void; + extraSettings?: JSX.Element; + extraSettingsStart?: JSX.Element; + extraButtons?: JSX.Element; +} + +const QRCodePrintingDialog: React.FC = ({ + items, + printSettings, + setPrintSettings, + extraSettings, + extraSettingsStart, + extraButtons, +}) => { + const t = useTranslate(); + + const showContent = printSettings?.showContent === undefined ? true : printSettings?.showContent; + const showQRCodeMode = printSettings?.showQRCodeMode || "withIcon"; + const textSize = printSettings?.textSize || 3; + + const elements = items.map((item) => { + return ( +
+ {showQRCodeMode !== "no" && ( +
+ +
+ )} + {showContent && ( +
+ {item.label ?? item.value} +
+ )} +
+ ); + }); + + return ( + { + printSettings.printSettings = newSettings; + setPrintSettings(printSettings); + }} + extraButtons={extraButtons} + extraSettingsStart={extraSettingsStart} + extraSettings={ + <> + + { + printSettings.showQRCodeMode = e.target.value; + setPrintSettings(printSettings); + }} + value={showQRCodeMode} + optionType="button" + buttonStyle="solid" + /> + + + { + printSettings.showContent = checked; + setPrintSettings(printSettings); + }} + /> + + + + + `${value} mm` }} + min={2} + max={7} + value={textSize} + step={0.1} + onChange={(value) => { + printSettings.textSize = value; + setPrintSettings(printSettings); + }} + /> + + + { + printSettings.textSize = value ?? 5; + setPrintSettings(printSettings); + }} + /> + + + + + {extraSettings} + + } + style={` + .print-page .print-qrcode-item { + display: flex; + width: 100%; + height: 100%; + justify-content: center; + } + + .print-page .print-qrcode-container { + max-width: ${showContent ? "50%" : "100%"}; + display: flex; + } + + .print-page .print-qrcode { + width: auto !important; + height: auto !important; + padding: 2mm; + } + + .print-page .print-qrcode-title { + flex: 1 1 auto; + font-size: ${textSize}mm; + color: #000; + overflow: hidden; + } + + .print-page canvas, .print-page svg { + /* display: block; */ + object-fit: contain; + height: 100% !important; + width: 100% !important; + max-height: 100%; + max-width: 100%; + } + `} + /> + ); +}; + +export default QRCodePrintingDialog; diff --git a/client/src/pages/printing/spoolQrCodePrintingDialog.tsx b/client/src/pages/printing/spoolQrCodePrintingDialog.tsx new file mode 100644 index 0000000..b3bf763 --- /dev/null +++ b/client/src/pages/printing/spoolQrCodePrintingDialog.tsx @@ -0,0 +1,367 @@ +import { CopyOutlined, DeleteOutlined, PlusOutlined, SaveOutlined } from "@ant-design/icons"; +import { useGetSetting } from "../../utils/querySettings"; +import { useTranslate } from "@refinedev/core"; +import { Button, Flex, Form, Input, Modal, Popconfirm, Select, Table, Typography, message, Switch } from "antd"; +import TextArea from "antd/es/input/TextArea"; +import { useState } from "react"; +import { v4 as uuidv4 } from "uuid"; +import { EntityType, useGetFields } from "../../utils/queryFields"; +import { useSavedState } from "../../utils/saveload"; +import { useGetSpoolsByIds } from "../spools/functions"; +import { ISpool } from "../spools/model"; +import { + SpoolQRCodePrintSettings, + renderLabelContents, + useGetPrintSettings as useGetPrintPresets, + useSetPrintSettings as useSetPrintPresets, +} from "./printing"; +import QRCodePrintingDialog from "./qrCodePrintingDialog"; + +const { Text } = Typography; + +interface SpoolQRCodePrintingDialog { + spoolIds: number[]; +} + +const SpoolQRCodePrintingDialog: React.FC = ({ spoolIds }) => { + const t = useTranslate(); + const baseUrlSetting = useGetSetting("qr_code_url"); + const baseUrlRoot = + baseUrlSetting.data?.value !== undefined && JSON.parse(baseUrlSetting.data?.value) !== "" + ? JSON.parse(baseUrlSetting.data?.value) + : window.location.origin; + const [messageApi, contextHolder] = message.useMessage(); + const [useHTTPUrl, setUseHTTPUrl] = useSavedState("print-useHTTPUrl", baseUrlSetting.data?.value !== ""); + + const itemQueries = useGetSpoolsByIds(spoolIds); + const items = itemQueries + .map((itemQuery) => { + return itemQuery.data ?? null; + }) + .filter((item) => item !== null) as ISpool[]; + + // Selected preset state + const [selectedPresetState, setSelectedPresetState] = useSavedState("selectedPreset", undefined); + + // Keep a local copy of the settings which is what's actually displayed. Use the remote state only for saving. + // This decouples the debounce stuff from the UI + const [localPresets, setLocalPresets] = useState(); + const remotePresets = useGetPrintPresets(); + const setRemotePresets = useSetPrintPresets(); + + const localOrRemotePresets = localPresets ?? remotePresets; + + const savePresetsRemote = () => { + if (!localPresets) return; + setRemotePresets(localPresets); + }; + + // Functions to update settings + const addNewPreset = () => { + if (!localOrRemotePresets) return; + const newId = uuidv4(); + const newPreset = { + labelSettings: { + printSettings: { + id: newId, + name: t("printing.generic.newSetting"), + }, + }, + }; + setLocalPresets([...localOrRemotePresets, newPreset]); + setSelectedPresetState(newId); + return newPreset; + }; + const duplicateCurrentPreset = () => { + if (!localOrRemotePresets) return; + const newPreset = { + ...curPreset, + labelSettings: { ...curPreset.labelSettings, printSettings: { ...curPreset.labelSettings.printSettings } }, + }; + newPreset.labelSettings.printSettings.id = uuidv4(); + setLocalPresets([...localOrRemotePresets, newPreset]); + setSelectedPresetState(newPreset.labelSettings.printSettings.id); + }; + const updateCurrentPreset = (newSettings: SpoolQRCodePrintSettings) => { + if (!localOrRemotePresets) return; + setLocalPresets( + localOrRemotePresets.map((presets) => + presets.labelSettings.printSettings.id === newSettings.labelSettings.printSettings.id ? newSettings : presets + ) + ); + }; + const deleteCurrentPreset = () => { + if (!localOrRemotePresets) return; + setLocalPresets( + localOrRemotePresets.filter((qPreset) => qPreset.labelSettings.printSettings.id !== selectedPresetState) + ); + setSelectedPresetState(undefined); + }; + + // Initialize presets + let curPreset: SpoolQRCodePrintSettings; + if (localOrRemotePresets === undefined) { + // DB not loaded yet, use a temporary one + curPreset = { + labelSettings: { + printSettings: { + id: "TEMP", + name: t("printing.generic.newSetting"), + }, + }, + }; + } else { + // DB is loaded, find the selected setting + if (localOrRemotePresets.length === 0) { + // DB loaded, but no settings found, add a new one and select it + const newSetting = addNewPreset(); + if (!newSetting) { + console.error("Error adding new setting, this should never happen"); + return; + } + + // Mutate the allPrintSettings list so that the rest of the UI will work fine + localOrRemotePresets.push(newSetting); + curPreset = newSetting; + } else { + // DB loaded and at least 1 setting exists + if (!selectedPresetState) { + // No setting has been selected, select the first one + curPreset = localOrRemotePresets[0]; + setSelectedPresetState(localOrRemotePresets[0].labelSettings.printSettings.id); + } else { + // A setting has been selected, find it + const foundSetting = localOrRemotePresets.find( + (settings) => settings.labelSettings.printSettings.id === selectedPresetState + ); + if (foundSetting) { + curPreset = foundSetting; + } else { + // Selected setting not found, select a temp one + curPreset = { + labelSettings: { + printSettings: { + id: "TEMP", + name: t("printing.generic.newSetting"), + }, + }, + }; + } + } + } + } + + const [templateHelpOpen, setTemplateHelpOpen] = useState(false); + const template = + curPreset.template ?? + `**{filament.vendor.name} - {filament.name} +#{id} - {filament.material}** +Spool Weight: {filament.spool_weight} g +ET: {filament.settings_extruder_temp} °C +BT: {filament.settings_bed_temp} °C +Lot Nr: {lot_nr} +{comment} +{filament.comment} +{filament.vendor.comment}`; + + const spoolTags = [ + { tag: "id" }, + { tag: "registered" }, + { tag: "first_used" }, + { tag: "last_used" }, + { tag: "price" }, + { tag: "initial_weight" }, + { tag: "spool_weight" }, + { tag: "remaining_weight" }, + { tag: "used_weight" }, + { tag: "remaining_length" }, + { tag: "used_length" }, + { tag: "location" }, + { tag: "lot_nr" }, + { tag: "comment" }, + { tag: "archived" }, + ]; + const spoolFields = useGetFields(EntityType.spool); + if (spoolFields.data !== undefined) { + spoolFields.data.forEach((field) => { + spoolTags.push({ tag: `extra.${field.key}` }); + }); + } + const filamentTags = [ + { tag: "filament.id" }, + { tag: "filament.registered" }, + { tag: "filament.name" }, + { tag: "filament.material" }, + { tag: "filament.price" }, + { tag: "filament.density" }, + { tag: "filament.diameter" }, + { tag: "filament.weight" }, + { tag: "filament.spool_weight" }, + { tag: "filament.article_number" }, + { tag: "filament.comment" }, + { tag: "filament.settings_extruder_temp" }, + { tag: "filament.settings_bed_temp" }, + { tag: "filament.color_hex" }, + { tag: "filament.multi_color_hexes" }, + { tag: "filament.multi_color_direction" }, + { tag: "filament.external_id" }, + ]; + const filamentFields = useGetFields(EntityType.filament); + if (filamentFields.data !== undefined) { + filamentFields.data.forEach((field) => { + filamentTags.push({ tag: `filament.extra.${field.key}` }); + }); + } + const vendorTags = [ + { tag: "filament.vendor.id" }, + { tag: "filament.vendor.registered" }, + { tag: "filament.vendor.name" }, + { tag: "filament.vendor.comment" }, + { tag: "filament.vendor.empty_spool_weight" }, + { tag: "filament.vendor.external_id" }, + ]; + const vendorFields = useGetFields(EntityType.vendor); + if (vendorFields.data !== undefined) { + vendorFields.data.forEach((field) => { + vendorTags.push({ tag: `filament.vendor.extra.${field.key}` }); + }); + } + + const templateTags = [...spoolTags, ...filamentTags, ...vendorTags]; + + return ( + <> + {contextHolder} + { + curPreset.labelSettings = newSettings; + updateCurrentPreset(curPreset); + }} + extraSettingsStart={ + <> + + + +