From 7f099972e10ae751d9d59ca34ea9bc4ed52d9fff Mon Sep 17 00:00:00 2001 From: d-buchmann Date: Thu, 4 Sep 2025 14:50:59 +0200 Subject: [PATCH 01/19] Documentation - Require SQLite 3.35 That way, migrations that try to drop columns won't fail anymore (regardless if the user intended to use sqlite or not) --- docs/installation/installation_guide-debian.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/installation/installation_guide-debian.md b/docs/installation/installation_guide-debian.md index 312fe21e..b3c61126 100644 --- a/docs/installation/installation_guide-debian.md +++ b/docs/installation/installation_guide-debian.md @@ -28,9 +28,14 @@ It is recommended to install Part-DB on a 64-bit system, as the 32-bit version o For the installation of Part-DB, we need some prerequisites. They can be installed by running the following command: ```bash -sudo apt install git curl zip ca-certificates software-properties-common apt-transport-https lsb-release nano wget +sudo apt update && apt upgrade +sudo apt install git curl zip ca-certificates software-properties-common \ + apt-transport-https lsb-release nano wget sqlite3 ``` +Please run `sqlite3 --version` to assert that the SQLite version is 3.35 or higher. +Otherwise some database migrations will not succeed. + ### Install PHP and apache2 Part-DB is written in [PHP](https://php.net) and therefore needs a PHP interpreter to run. Part-DB needs PHP 8.2 or From c9a1febc563f167a9644c7099ce6af59ce6192a8 Mon Sep 17 00:00:00 2001 From: d-buchmann Date: Thu, 4 Sep 2025 14:59:40 +0200 Subject: [PATCH 02/19] Fix formatting: Use literal '->' in CDATA context --- translations/messages.en.xlf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index e65445ce..8d1e55c8 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -7164,8 +7164,8 @@ Exampletown Element 2 Element 3 -Element 1 -> Element 1.1 -Element 1 -> Element 1.2]]> +Element 1 -> Element 1.1 +Element 1 -> Element 1.2]]> From d3e3c4e3f86e8c5aa87203b6513606fecc93d301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 5 Sep 2025 19:35:58 +0200 Subject: [PATCH 03/19] Fixed currency admin page and modernized underlying swap packages Fixes issue #1009 --- composer.json | 3 +- composer.lock | 650 +++++++++++++++++++++----------------- config/packages/swap.yaml | 4 +- symfony.lock | 12 +- 4 files changed, 368 insertions(+), 301 deletions(-) diff --git a/composer.json b/composer.json index 8e3d1194..80b413f8 100644 --- a/composer.json +++ b/composer.json @@ -25,8 +25,7 @@ "doctrine/doctrine-migrations-bundle": "^3.0", "doctrine/orm": "^3.2.0", "dompdf/dompdf": "^v3.0.0", - "florianv/swap": "^4.0", - "florianv/swap-bundle": "dev-master", + "part-db/swap-bundle": "^6.0.0", "gregwar/captcha-bundle": "^2.1.0", "hshn/base64-encoded-file": "^5.0", "jbtronics/2fa-webauthn": "^3.0.0", diff --git a/composer.lock b/composer.lock index 6b9888d7..ac7b6165 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "09b78f345ea8115b5b29ea3e67dcb579", + "content-hash": "fe6dfc229f551945cfa6be8ca26a437e", "packages": [ { "name": "amphp/amp", @@ -968,7 +968,7 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", @@ -1050,13 +1050,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.1.22" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.1.23" }, "time": "2025-08-18T13:30:43+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", @@ -1135,13 +1135,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.1.22" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.1.23" }, "time": "2025-06-06T14:56:47+00:00" }, { "name": "api-platform/documentation", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1203,7 +1203,7 @@ }, { "name": "api-platform/http-cache", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", @@ -1275,13 +1275,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.1.22" + "source": "https://github.com/api-platform/http-cache/tree/v4.1.23" }, "time": "2025-06-06T14:56:47+00:00" }, { "name": "api-platform/hydra", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", @@ -1360,13 +1360,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.1.22" + "source": "https://github.com/api-platform/hydra/tree/v4.1.23" }, "time": "2025-07-15T14:10:59+00:00" }, { "name": "api-platform/json-api", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", @@ -1439,13 +1439,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.1.22" + "source": "https://github.com/api-platform/json-api/tree/v4.1.23" }, "time": "2025-08-06T07:56:58+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", @@ -1518,13 +1518,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.1.22" + "source": "https://github.com/api-platform/json-schema/tree/v4.1.23" }, "time": "2025-06-29T12:24:14+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", @@ -1596,22 +1596,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.1.22" + "source": "https://github.com/api-platform/jsonld/tree/v4.1.23" }, "time": "2025-07-25T10:05:30+00:00" }, { "name": "api-platform/metadata", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "782477dd28cc675909597bfa47af7c1f85659ffa" + "reference": "58b25f9a82c12727afab09b5a311828aacff8e88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/782477dd28cc675909597bfa47af7c1f85659ffa", - "reference": "782477dd28cc675909597bfa47af7c1f85659ffa", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/58b25f9a82c12727afab09b5a311828aacff8e88", + "reference": "58b25f9a82c12727afab09b5a311828aacff8e88", "shasum": "" }, "require": { @@ -1693,13 +1693,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.1.22" + "source": "https://github.com/api-platform/metadata/tree/v4.1.23" }, - "time": "2025-08-29T15:13:26+00:00" + "time": "2025-09-05T09:06:52+00:00" }, { "name": "api-platform/openapi", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", @@ -1780,13 +1780,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.1.22" + "source": "https://github.com/api-platform/openapi/tree/v4.1.23" }, "time": "2025-07-29T08:53:27+00:00" }, { "name": "api-platform/serializer", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", @@ -1871,13 +1871,13 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.1.22" + "source": "https://github.com/api-platform/serializer/tree/v4.1.23" }, "time": "2025-08-29T15:13:26+00:00" }, { "name": "api-platform/state", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", @@ -1963,22 +1963,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.1.22" + "source": "https://github.com/api-platform/state/tree/v4.1.23" }, "time": "2025-07-16T14:01:52+00:00" }, { "name": "api-platform/symfony", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "735b9a80f3b7a5f528b663cd28489fbe52f52416" + "reference": "e35839489b4e76ffc5fc2b0cbadbbaece75b9ad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/735b9a80f3b7a5f528b663cd28489fbe52f52416", - "reference": "735b9a80f3b7a5f528b663cd28489fbe52f52416", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/e35839489b4e76ffc5fc2b0cbadbbaece75b9ad1", + "reference": "e35839489b4e76ffc5fc2b0cbadbbaece75b9ad1", "shasum": "" }, "require": { @@ -2087,13 +2087,13 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.1.22" + "source": "https://github.com/api-platform/symfony/tree/v4.1.23" }, - "time": "2025-07-16T14:01:52+00:00" + "time": "2025-09-05T07:30:37+00:00" }, { "name": "api-platform/validator", - "version": "v4.1.22", + "version": "v4.1.23", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", @@ -2162,7 +2162,7 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.1.22" + "source": "https://github.com/api-platform/validator/tree/v4.1.23" }, "time": "2025-07-16T14:01:52+00:00" }, @@ -2881,16 +2881,16 @@ }, { "name": "doctrine/dbal", - "version": "4.3.2", + "version": "4.3.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "7669f131d43b880de168b2d2df9687d152d6c762" + "reference": "231959669bb2173194c95636eae7f1b41b2a8b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/7669f131d43b880de168b2d2df9687d152d6c762", - "reference": "7669f131d43b880de168b2d2df9687d152d6c762", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/231959669bb2173194c95636eae7f1b41b2a8b19", + "reference": "231959669bb2173194c95636eae7f1b41b2a8b19", "shasum": "" }, "require": { @@ -2900,10 +2900,10 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "13.0.0", + "doctrine/coding-standard": "13.0.1", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "2.1.17", + "phpstan/phpstan": "2.1.22", "phpstan/phpstan-phpunit": "2.0.6", "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "11.5.23", @@ -2967,7 +2967,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.3.2" + "source": "https://github.com/doctrine/dbal/tree/4.3.3" }, "funding": [ { @@ -2983,7 +2983,7 @@ "type": "tidelift" } ], - "time": "2025-08-05T13:30:38+00:00" + "time": "2025-09-04T23:52:42+00:00" }, { "name": "doctrine/deprecations", @@ -3035,16 +3035,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.15.1", + "version": "2.16.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5a305c5e776f9d3eb87f5b94d40d50aff439211d" + "reference": "152d5083f0cd205a278131dc4351a8c94d007fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5a305c5e776f9d3eb87f5b94d40d50aff439211d", - "reference": "5a305c5e776f9d3eb87f5b94d40d50aff439211d", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/152d5083f0cd205a278131dc4351a8c94d007fe1", + "reference": "152d5083f0cd205a278131dc4351a8c94d007fe1", "shasum": "" }, "require": { @@ -3081,6 +3081,7 @@ "phpunit/phpunit": "^9.6.22", "psr/log": "^1.1.4 || ^2.0 || ^3.0", "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", "symfony/messenger": "^6.4 || ^7.0", "symfony/phpunit-bridge": "^7.2", "symfony/property-info": "^6.4 || ^7.0", @@ -3137,7 +3138,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.15.1" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.16.1" }, "funding": [ { @@ -3153,7 +3154,7 @@ "type": "tidelift" } ], - "time": "2025-07-30T15:48:28+00:00" + "time": "2025-09-05T15:24:53+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -4133,16 +4134,16 @@ }, { "name": "ergebnis/classy", - "version": "1.8.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/ergebnis/classy.git", - "reference": "e5a695e44b083d4a4b4f2a40427301cd2916699d" + "reference": "05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/classy/zipball/e5a695e44b083d4a4b4f2a40427301cd2916699d", - "reference": "e5a695e44b083d4a4b4f2a40427301cd2916699d", + "url": "https://api.github.com/repos/ergebnis/classy/zipball/05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef", + "reference": "05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef", "shasum": "" }, "require": { @@ -4150,11 +4151,11 @@ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { - "ergebnis/composer-normalize": "^2.47.0", - "ergebnis/license": "^2.6.0", - "ergebnis/php-cs-fixer-config": "^6.51.0", - "ergebnis/phpstan-rules": "^2.10.5", - "ergebnis/phpunit-slow-test-detector": "^2.19.1", + "ergebnis/composer-normalize": "^2.48.1", + "ergebnis/license": "^2.7.0", + "ergebnis/php-cs-fixer-config": "^6.54.0", + "ergebnis/phpstan-rules": "^2.11.0", + "ergebnis/phpunit-slow-test-detector": "^2.20.0", "fakerphp/faker": "^1.24.1", "infection/infection": "~0.26.6", "phpstan/extension-installer": "^1.4.3", @@ -4163,7 +4164,7 @@ "phpstan/phpstan-phpunit": "^2.0.7", "phpstan/phpstan-strict-rules": "^2.0.6", "phpunit/phpunit": "^9.6.19", - "rector/rector": "^2.1.2" + "rector/rector": "^2.1.4" }, "type": "library", "autoload": { @@ -4196,208 +4197,7 @@ "issues": "https://github.com/ergebnis/classy/issues", "source": "https://github.com/ergebnis/classy" }, - "time": "2025-08-19T06:14:25+00:00" - }, - { - "name": "florianv/exchanger", - "version": "2.8.1", - "source": { - "type": "git", - "url": "https://github.com/florianv/exchanger.git", - "reference": "9214f51665fb907e7aa2397e21a90c456eb0c448" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/florianv/exchanger/zipball/9214f51665fb907e7aa2397e21a90c456eb0c448", - "reference": "9214f51665fb907e7aa2397e21a90c456eb0c448", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-libxml": "*", - "ext-simplexml": "*", - "php": "^7.1.3 || ^8.0", - "php-http/client-implementation": "^1.0", - "php-http/discovery": "^1.6", - "php-http/httplug": "^1.0 || ^2.0", - "psr/http-factory": "^1.0.2", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" - }, - "require-dev": { - "nyholm/psr7": "^1.0", - "php-http/message": "^1.7", - "php-http/mock-client": "^1.0", - "phpunit/phpunit": "^7 || ^8 || ^9.4" - }, - "suggest": { - "php-http/guzzle6-adapter": "Required to use Guzzle for sending HTTP requests", - "php-http/message": "Required to use Guzzle for sending HTTP requests" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Exchanger\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florian Voutzinos", - "email": "florian@voutzinos.com", - "homepage": "https://voutzinos.com" - } - ], - "description": "Currency exchange rates framework for PHP", - "homepage": "https://github.com/florianv/exchanger", - "keywords": [ - "Rate", - "conversion", - "currency", - "exchange rates", - "money" - ], - "support": { - "issues": "https://github.com/florianv/exchanger/issues", - "source": "https://github.com/florianv/exchanger/tree/2.8.1" - }, - "time": "2023-11-03T17:11:52+00:00" - }, - { - "name": "florianv/swap", - "version": "4.3.0", - "source": { - "type": "git", - "url": "https://github.com/florianv/swap.git", - "reference": "88edd27fcb95bdc58bbbf9e4b00539a2843d97fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/florianv/swap/zipball/88edd27fcb95bdc58bbbf9e4b00539a2843d97fd", - "reference": "88edd27fcb95bdc58bbbf9e4b00539a2843d97fd", - "shasum": "" - }, - "require": { - "florianv/exchanger": "^2.0", - "php": "^7.1.3 || ^8.0" - }, - "require-dev": { - "nyholm/psr7": "^1.0", - "php-http/message": "^1.7", - "php-http/mock-client": "^1.0", - "phpunit/phpunit": "^7 || ^8 || ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "psr-4": { - "Swap\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florian Voutzinos", - "email": "florian@voutzinos.com", - "homepage": "https://voutzinos.com" - } - ], - "description": "Exchange rates library for PHP", - "keywords": [ - "Rate", - "conversion", - "currency", - "exchange rates", - "money" - ], - "support": { - "issues": "https://github.com/florianv/swap/issues", - "source": "https://github.com/florianv/swap/tree/4.3.0" - }, - "time": "2020-12-28T10:14:12+00:00" - }, - { - "name": "florianv/swap-bundle", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/florianv/symfony-swap.git", - "reference": "c8cd268ad6e2f636f10b91df9850e3941d7f5807" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/florianv/symfony-swap/zipball/c8cd268ad6e2f636f10b91df9850e3941d7f5807", - "reference": "c8cd268ad6e2f636f10b91df9850e3941d7f5807", - "shasum": "" - }, - "require": { - "florianv/swap": "^4.0", - "php": "^7.1.3|^8.0", - "symfony/framework-bundle": "~3.0|~4.0|~5.0|~6.0|~7.0" - }, - "require-dev": { - "nyholm/psr7": "^1.1", - "php-http/guzzle6-adapter": "^1.0", - "php-http/message": "^1.7", - "phpunit/phpunit": "~5.7|~6.0|~7.0|~8.0|~9.0", - "symfony/cache": "~3.0|~4.0|~5.0|~6.0|~7.0" - }, - "suggest": { - "symfony/cache": "For caching" - }, - "default-branch": true, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Florianv\\SwapBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florian Voutzinos", - "email": "florian@voutzinos.com", - "homepage": "http://florian.voutzinos.com" - } - ], - "description": "Integrates the Swap library with Symfony", - "homepage": "https://github.com/florianv/FlorianvSwapBundle", - "keywords": [ - "Rate", - "bundle", - "conversion", - "currency", - "exchange", - "money", - "symfony" - ], - "support": { - "issues": "https://github.com/florianv/symfony-swap/issues", - "source": "https://github.com/florianv/symfony-swap/tree/master" - }, - "time": "2024-07-09T13:51:01+00:00" + "time": "2025-09-04T10:17:22+00:00" }, { "name": "gregwar/captcha", @@ -6357,22 +6157,23 @@ }, { "name": "liip/imagine-bundle", - "version": "2.13.3", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/liip/LiipImagineBundle.git", - "reference": "3faccde327f91368e51d05ecad49a9cd915abd81" + "reference": "f80dc13e9a454682b8c2255b3487829d2f8a7fe4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/3faccde327f91368e51d05ecad49a9cd915abd81", - "reference": "3faccde327f91368e51d05ecad49a9cd915abd81", + "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/f80dc13e9a454682b8c2255b3487829d2f8a7fe4", + "reference": "f80dc13e9a454682b8c2255b3487829d2f8a7fe4", "shasum": "" }, "require": { "ext-mbstring": "*", "imagine/imagine": "^1.3.2", "php": "^7.2|^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3", "symfony/filesystem": "^3.4|^4.4|^5.3|^6.0|^7.0", "symfony/finder": "^3.4|^4.4|^5.3|^6.0|^7.0", "symfony/framework-bundle": "^3.4.23|^4.4|^5.3|^6.0|^7.0", @@ -6457,9 +6258,9 @@ ], "support": { "issues": "https://github.com/liip/LiipImagineBundle/issues", - "source": "https://github.com/liip/LiipImagineBundle/tree/2.13.3" + "source": "https://github.com/liip/LiipImagineBundle/tree/2.14.0" }, - "time": "2024-12-12T09:38:23+00:00" + "time": "2025-09-03T06:33:10+00:00" }, { "name": "lorenzo/pinky", @@ -7633,6 +7434,83 @@ }, "time": "2024-04-22T22:05:04+00:00" }, + { + "name": "part-db/exchanger", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/Part-DB/exchanger.git", + "reference": "a549f2bd526042f66ad5caa044fd15c67ac5270f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Part-DB/exchanger/zipball/a549f2bd526042f66ad5caa044fd15c67ac5270f", + "reference": "a549f2bd526042f66ad5caa044fd15c67ac5270f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-libxml": "*", + "ext-simplexml": "*", + "php": "^7.1.3 || ^8.0", + "php-http/client-implementation": "^1.0", + "php-http/discovery": "^1.6", + "php-http/httplug": "^1.0 || ^2.0", + "psr/http-factory": "^1.0.2", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/message": "^1.7", + "php-http/message-factory": "^1.1", + "php-http/mock-client": "^1.0", + "phpunit/phpunit": "^7 || ^8 || ^9.4 || ^10.5", + "symfony/http-client": "^5.4 || ^6.4 || ^7.0" + }, + "suggest": { + "php-http/guzzle6-adapter": "Required to use Guzzle for sending HTTP requests", + "php-http/message": "Required to use Guzzle for sending HTTP requests" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Exchanger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florian Voutzinos", + "email": "florian@voutzinos.com", + "homepage": "https://voutzinos.com" + }, + { + "name": "Jan Böhmer", + "email": "mail@jan-boehmer.de" + } + ], + "description": "Fork of florianv/exchanger, a library to convert currencies using different exchange rate providers. Modernized to be compatible with Part-DB.", + "homepage": "https://github.com/Part-DB/exchanger", + "keywords": [ + "Rate", + "conversion", + "currency", + "exchange rates", + "money" + ], + "support": { + "source": "https://github.com/Part-DB/exchanger/tree/v3.0.0" + }, + "time": "2025-09-05T14:02:04+00:00" + }, { "name": "part-db/label-fonts", "version": "v1.1.0", @@ -7671,6 +7549,148 @@ }, "time": "2024-02-08T21:44:38+00:00" }, + { + "name": "part-db/swap", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/Part-DB/swap.git", + "reference": "4fa57dec2eb1cbe0f6b8c92a2c250ecbe80688fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Part-DB/swap/zipball/4fa57dec2eb1cbe0f6b8c92a2c250ecbe80688fe", + "reference": "4fa57dec2eb1cbe0f6b8c92a2c250ecbe80688fe", + "shasum": "" + }, + "require": { + "part-db/exchanger": "^3.0", + "php": "^7.1.3 || ^8.0", + "php-http/message-factory": "^1.1" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/discovery": "^1.0", + "php-http/message": "^1.7", + "php-http/mock-client": "^1.0", + "phpunit/phpunit": "^7 || ^8 || ^9", + "symfony/http-client": "^5.4||^6.0||^7.0" + }, + "suggest": { + "php-http/discovery": "If you are not using `useHttpClient` but instead want to auto-discover HttpClient" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Swap\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florian Voutzinos", + "email": "florian@voutzinos.com", + "homepage": "https://voutzinos.com" + }, + { + "name": "Jan Böhmer", + "email": "mail@jan-boehmer.de" + } + ], + "description": "Fork of florianv/swap modernized for use in Part-DB. Exchange rates library for PHP", + "keywords": [ + "Rate", + "conversion", + "currency", + "exchange rates", + "money" + ], + "support": { + "source": "https://github.com/Part-DB/swap/tree/v5.0.0" + }, + "time": "2025-09-05T17:10:01+00:00" + }, + { + "name": "part-db/swap-bundle", + "version": "v6.0.0", + "source": { + "type": "git", + "url": "https://github.com/Part-DB/symfony-swap.git", + "reference": "6772eda2603a864b5f0a94224e0cfd79976c7389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Part-DB/symfony-swap/zipball/6772eda2603a864b5f0a94224e0cfd79976c7389", + "reference": "6772eda2603a864b5f0a94224e0cfd79976c7389", + "shasum": "" + }, + "require": { + "part-db/swap": "^5.0", + "php": "^7.1.3|^8.0", + "psr/http-client": "^1.0", + "symfony/framework-bundle": "~3.0|~4.0|~5.0|~6.0|~7.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "php-http/guzzle6-adapter": "^1.0", + "php-http/message": "^1.7", + "phpunit/phpunit": "~5.7|~6.0|~7.0|~8.0|~9.0", + "symfony/cache": "~3.0|~4.0|~5.0|~6.0|~7.0", + "symfony/http-client": "~7.0|~6.0|~5.0" + }, + "suggest": { + "symfony/cache": "For caching" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Florianv\\SwapBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florian Voutzinos", + "email": "florian@voutzinos.com", + "homepage": "http://florian.voutzinos.com" + }, + { + "name": "Jan Böhmer", + "email": "mail@jan-boehmer.de" + } + ], + "description": "Fork of florianv/swap-bundle, modernized for use with Part-DB. Integrates the Swap library with Symfony", + "homepage": "https://github.com/florianv/FlorianvSwapBundle", + "keywords": [ + "Rate", + "bundle", + "conversion", + "currency", + "exchange", + "money", + "symfony" + ], + "support": { + "source": "https://github.com/Part-DB/symfony-swap/tree/v6.0.0" + }, + "time": "2025-09-05T17:26:07+00:00" + }, { "name": "php-http/discovery", "version": "1.20.0", @@ -7807,6 +7827,61 @@ }, "time": "2024-09-23T11:39:58+00:00" }, + { + "name": "php-http/message-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/1.1.0" + }, + "abandoned": "psr/http-factory", + "time": "2023-04-14T14:16:17+00:00" + }, { "name": "php-http/promise", "version": "1.3.1", @@ -18333,16 +18408,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.35", + "version": "11.5.36", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d341ee94ee5007b286fc7907b383aae6b5b3cc91" + "reference": "264a87c7ef68b1ab9af7172357740dc266df5957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d341ee94ee5007b286fc7907b383aae6b5b3cc91", - "reference": "d341ee94ee5007b286fc7907b383aae6b5b3cc91", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/264a87c7ef68b1ab9af7172357740dc266df5957", + "reference": "264a87c7ef68b1ab9af7172357740dc266df5957", "shasum": "" }, "require": { @@ -18414,7 +18489,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.35" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.36" }, "funding": [ { @@ -18438,20 +18513,20 @@ "type": "tidelift" } ], - "time": "2025-08-28T05:13:54+00:00" + "time": "2025-09-03T06:24:17+00:00" }, { "name": "rector/rector", - "version": "2.1.4", + "version": "2.1.6", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "fe613c528819222f8686a9a037a315ef9d4915b3" + "reference": "729aabc0ec66e700ef164e26454a1357f222a2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/fe613c528819222f8686a9a037a315ef9d4915b3", - "reference": "fe613c528819222f8686a9a037a315ef9d4915b3", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/729aabc0ec66e700ef164e26454a1357f222a2f3", + "reference": "729aabc0ec66e700ef164e26454a1357f222a2f3", "shasum": "" }, "require": { @@ -18490,7 +18565,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.1.4" + "source": "https://github.com/rectorphp/rector/tree/2.1.6" }, "funding": [ { @@ -18498,7 +18573,7 @@ "type": "github" } ], - "time": "2025-08-15T14:41:36+00:00" + "time": "2025-09-05T15:43:08+00:00" }, { "name": "roave/security-advisories", @@ -18506,12 +18581,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e7589e01dc8452bfecb4c8df977346cd3132650f" + "reference": "dc5c4ede5c331ae21fb68947ff89672df9b7cc7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e7589e01dc8452bfecb4c8df977346cd3132650f", - "reference": "e7589e01dc8452bfecb4c8df977346cd3132650f", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/dc5c4ede5c331ae21fb68947ff89672df9b7cc7d", + "reference": "dc5c4ede5c331ae21fb68947ff89672df9b7cc7d", "shasum": "" }, "conflict": { @@ -18935,7 +19010,7 @@ "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.6|>=6.0.0.0-alpha,<6.0.2", + "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", @@ -19081,7 +19156,7 @@ "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.25.2", + "pocketmine/pocketmine-mp": "<5.32.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -19089,7 +19164,7 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.1.6", + "prestashop/prestashop": "<8.2.3", "prestashop/productcomments": "<5.0.2", "prestashop/ps_contactinfo": "<=3.3.2", "prestashop/ps_emailsubscription": "<2.6.1", @@ -19463,7 +19538,7 @@ "type": "tidelift" } ], - "time": "2025-08-29T15:04:47+00:00" + "time": "2025-09-04T20:05:35+00:00" }, { "name": "sebastian/cli-parser", @@ -20959,7 +21034,6 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "florianv/swap-bundle": 20, "roave/security-advisories": 20 }, "prefer-stable": false, diff --git a/config/packages/swap.yaml b/config/packages/swap.yaml index beb41d26..6fabc893 100644 --- a/config/packages/swap.yaml +++ b/config/packages/swap.yaml @@ -6,5 +6,5 @@ florianv_swap: providers: european_central_bank: ~ # European Central Bank (only works for EUR base currency) fixer: # Fixer.io (needs an API key) - access_key: "%env(string:default:settings:exchange_rate:fixerApiKey:INVALID)%" - #exchange_rates_api: ~ \ No newline at end of file + access_key: "%env(string:settings:exchange_rate:fixerApiKey)%" + #exchange_rates_api: ~ diff --git a/symfony.lock b/symfony.lock index d301c269..7c136b4b 100644 --- a/symfony.lock +++ b/symfony.lock @@ -133,15 +133,6 @@ "ekino/phpstan-banned-code": { "version": "v0.3.1" }, - "florianv/exchanger": { - "version": "1.4.1" - }, - "florianv/swap": { - "version": "3.5.0" - }, - "florianv/swap-bundle": { - "version": "5.0.x-dev" - }, "gregwar/captcha": { "version": "v1.1.7" }, @@ -254,6 +245,9 @@ "./config/packages/datatables.yaml" ] }, + "part-db/swap-bundle": { + "version": "v6.0.0" + }, "php-http/discovery": { "version": "1.18", "recipe": { From 07172392963fa54e64f6ae0d7fa9b4b4bd75db79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 5 Sep 2025 19:56:01 +0200 Subject: [PATCH 04/19] Use central banks of czechia, turkey and romania as a free provider for their currencies exchange rates --- config/packages/swap.yaml | 9 ++++++--- src/Services/Tools/ExchangeRateUpdater.php | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/config/packages/swap.yaml b/config/packages/swap.yaml index 6fabc893..02c10f61 100644 --- a/config/packages/swap.yaml +++ b/config/packages/swap.yaml @@ -5,6 +5,9 @@ florianv_swap: providers: european_central_bank: ~ # European Central Bank (only works for EUR base currency) - fixer: # Fixer.io (needs an API key) - access_key: "%env(string:settings:exchange_rate:fixerApiKey)%" - #exchange_rates_api: ~ + central_bank_of_czech_republic: ~ + central_bank_of_republic_turkey: ~ + national_bank_of_romania: ~ + + fixer: # Fixer.io (needs an API key) + access_key: "%env(string:settings:exchange_rate:fixerApiKey)%" diff --git a/src/Services/Tools/ExchangeRateUpdater.php b/src/Services/Tools/ExchangeRateUpdater.php index 7c14b16f..6eb7ec13 100644 --- a/src/Services/Tools/ExchangeRateUpdater.php +++ b/src/Services/Tools/ExchangeRateUpdater.php @@ -26,6 +26,8 @@ use App\Entity\PriceInformations\Currency; use App\Settings\SystemSettings\LocalizationSettings; use Brick\Math\BigDecimal; use Brick\Math\RoundingMode; +use Exchanger\Exception\UnsupportedCurrencyPairException; +use Exchanger\Exception\UnsupportedExchangeQueryException; use Swap\Swap; class ExchangeRateUpdater @@ -39,15 +41,21 @@ class ExchangeRateUpdater */ public function update(Currency $currency): Currency { - //Currency pairs are always in the format "BASE/QUOTE" - $rate = $this->swap->latest($this->localizationSettings->baseCurrency.'/'.$currency->getIsoCode()); - //The rate says how many quote units are worth one base unit - //So we need to invert it to get the exchange rate + try { + //Try it in the direction QUOTE/BASE first, as most providers provide rates in this direction + $rate = $this->swap->latest($currency->getIsoCode().'/'.$this->localizationSettings->baseCurrency); + $effective_rate = BigDecimal::of($rate->getValue()); + } catch (UnsupportedCurrencyPairException|UnsupportedExchangeQueryException $exception) { + //Otherwise try to get it inverse and calculate it ourselfes, from the format "BASE/QUOTE" + $rate = $this->swap->latest($this->localizationSettings->baseCurrency.'/'.$currency->getIsoCode()); + //The rate says how many quote units are worth one base unit + //So we need to invert it to get the exchange rate - $rate_bd = BigDecimal::of($rate->getValue()); - $rate_inverted = BigDecimal::one()->dividedBy($rate_bd, Currency::PRICE_SCALE, RoundingMode::HALF_UP); + $rate_bd = BigDecimal::of($rate->getValue()); + $effective_rate = BigDecimal::one()->dividedBy($rate_bd, Currency::PRICE_SCALE, RoundingMode::HALF_UP); + } - $currency->setExchangeRate($rate_inverted); + $currency->setExchangeRate($effective_rate); return $currency; } From 379155e83917e2cba6e6d059ab3411ce818f30bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 5 Sep 2025 22:15:04 +0200 Subject: [PATCH 05/19] Allow for more currency exchange rate pairs, without need for fixer.io --- composer.lock | 25 +++++++++++++------------ config/packages/swap.yaml | 3 +++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index ac7b6165..6de15830 100644 --- a/composer.lock +++ b/composer.lock @@ -7436,16 +7436,16 @@ }, { "name": "part-db/exchanger", - "version": "v3.0.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/Part-DB/exchanger.git", - "reference": "a549f2bd526042f66ad5caa044fd15c67ac5270f" + "reference": "a43fe79a082e331ec2b24f3579e4fba153743757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Part-DB/exchanger/zipball/a549f2bd526042f66ad5caa044fd15c67ac5270f", - "reference": "a549f2bd526042f66ad5caa044fd15c67ac5270f", + "url": "https://api.github.com/repos/Part-DB/exchanger/zipball/a43fe79a082e331ec2b24f3579e4fba153743757", + "reference": "a43fe79a082e331ec2b24f3579e4fba153743757", "shasum": "" }, "require": { @@ -7507,9 +7507,9 @@ "money" ], "support": { - "source": "https://github.com/Part-DB/exchanger/tree/v3.0.0" + "source": "https://github.com/Part-DB/exchanger/tree/v3.1.0" }, - "time": "2025-09-05T14:02:04+00:00" + "time": "2025-09-05T19:48:23+00:00" }, { "name": "part-db/label-fonts", @@ -7620,19 +7620,20 @@ }, { "name": "part-db/swap-bundle", - "version": "v6.0.0", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/Part-DB/symfony-swap.git", - "reference": "6772eda2603a864b5f0a94224e0cfd79976c7389" + "reference": "fd78ebfbd762b1d76b4d71f713f39add63dec62b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Part-DB/symfony-swap/zipball/6772eda2603a864b5f0a94224e0cfd79976c7389", - "reference": "6772eda2603a864b5f0a94224e0cfd79976c7389", + "url": "https://api.github.com/repos/Part-DB/symfony-swap/zipball/fd78ebfbd762b1d76b4d71f713f39add63dec62b", + "reference": "fd78ebfbd762b1d76b4d71f713f39add63dec62b", "shasum": "" }, "require": { + "part-db/exchanger": "^3.1.0", "part-db/swap": "^5.0", "php": "^7.1.3|^8.0", "psr/http-client": "^1.0", @@ -7687,9 +7688,9 @@ "symfony" ], "support": { - "source": "https://github.com/Part-DB/symfony-swap/tree/v6.0.0" + "source": "https://github.com/Part-DB/symfony-swap/tree/v6.1.0" }, - "time": "2025-09-05T17:26:07+00:00" + "time": "2025-09-05T19:52:56+00:00" }, { "name": "php-http/discovery", diff --git a/config/packages/swap.yaml b/config/packages/swap.yaml index 02c10f61..4ef8fbdf 100644 --- a/config/packages/swap.yaml +++ b/config/packages/swap.yaml @@ -11,3 +11,6 @@ florianv_swap: fixer: # Fixer.io (needs an API key) access_key: "%env(string:settings:exchange_rate:fixerApiKey)%" + + frankfurter: ~ + fawazahmed_currency_api: ~ From 88fbc463259d7c73b3b08f42e1e18aa6f4bf20b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 5 Sep 2025 23:25:20 +0200 Subject: [PATCH 06/19] Added test for Currency Admin Controller --- src/DataFixtures/CurrencyFixtures.php | 64 +++++++++++++++++++ .../AdminPages/CurrencyController.php | 35 ++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/DataFixtures/CurrencyFixtures.php create mode 100644 tests/Controller/AdminPages/CurrencyController.php diff --git a/src/DataFixtures/CurrencyFixtures.php b/src/DataFixtures/CurrencyFixtures.php new file mode 100644 index 00000000..0c05d578 --- /dev/null +++ b/src/DataFixtures/CurrencyFixtures.php @@ -0,0 +1,64 @@ +. + */ + +declare(strict_types=1); + + +namespace App\DataFixtures; + +use App\Entity\PriceInformations\Currency; +use Brick\Math\BigDecimal; +use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Persistence\ObjectManager; + +class CurrencyFixtures extends Fixture +{ + public function load(ObjectManager $manager): void + { + $currency1 = new Currency(); + $currency1->setName('US-Dollar'); + $currency1->setIsoCode('USD'); + $manager->persist($currency1); + + $currency2 = new Currency(); + $currency2->setName('Swiss Franc'); + $currency2->setIsoCode('CHF'); + $currency2->setExchangeRate(BigDecimal::of('0.91')); + $manager->persist($currency2); + + $currency3 = new Currency(); + $currency3->setName('Great British Pound'); + $currency3->setIsoCode('GBP'); + $currency3->setExchangeRate(BigDecimal::of('0.78')); + $manager->persist($currency3); + + $currency7 = new Currency(); + $currency7->setName('Test Currency with long name'); + $currency7->setIsoCode('CHY'); + $manager->persist($currency7); + + $manager->flush(); + + + //Ensure that currency 7 gets ID 7 + $manager->getRepository(Currency::class)->changeID($currency7, 7); + $manager->flush(); + } +} diff --git a/tests/Controller/AdminPages/CurrencyController.php b/tests/Controller/AdminPages/CurrencyController.php new file mode 100644 index 00000000..21f94a29 --- /dev/null +++ b/tests/Controller/AdminPages/CurrencyController.php @@ -0,0 +1,35 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Controller\AdminPages; + +use App\Entity\PriceInformations\Currency; +use PHPUnit\Framework\Attributes\Group; +use App\Entity\Parts\Manufacturer; + +#[Group('slow')] +#[Group('DB')] +class CurrencyController extends AbstractAdminController +{ + protected static string $base_path = '/en/currency'; + protected static string $entity_class = Currency::class; +} From ba7d139f8a33564470b392d1f5eb751998b91519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 5 Sep 2025 23:33:05 +0200 Subject: [PATCH 07/19] Grey out info provider settings button if the user misses system settings permission Helps to make the problem in #1026 more clear --- templates/info_providers/providers.macro.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/info_providers/providers.macro.html.twig b/templates/info_providers/providers.macro.html.twig index 827a95fd..bf530ebd 100644 --- a/templates/info_providers/providers.macro.html.twig +++ b/templates/info_providers/providers.macro.html.twig @@ -23,7 +23,7 @@
{% if provider.providerInfo.settings_class is defined %} - {% endif %} From 117ff4484d01ffe1122d5c9a32b58bd71293b87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 00:10:50 +0200 Subject: [PATCH 08/19] Allow to show what permissions a user is lacking in case of access denied message Should help with errors like 1026 --- src/Security/Voter/PermissionVoter.php | 10 ++++++-- src/Services/UserSystem/VoterHelper.php | 24 +++++++++++++++++-- .../TwigBundle/Exception/error403.html.twig | 7 ++++-- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/Security/Voter/PermissionVoter.php b/src/Security/Voter/PermissionVoter.php index c6ec1b3d..8c304d86 100644 --- a/src/Security/Voter/PermissionVoter.php +++ b/src/Security/Voter/PermissionVoter.php @@ -24,6 +24,7 @@ namespace App\Security\Voter; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -39,12 +40,17 @@ final class PermissionVoter extends Voter } - protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool { $attribute = ltrim($attribute, '@'); [$perm, $op] = explode('.', $attribute); - return $this->helper->isGranted($token, $perm, $op); + $result = $this->helper->isGranted($token, $perm, $op); + if ($result === false) { + $this->helper->addReason($vote, $perm, $op); + } + + return $result; } public function supportsAttribute(string $attribute): bool diff --git a/src/Services/UserSystem/VoterHelper.php b/src/Services/UserSystem/VoterHelper.php index 644351f4..dda00de7 100644 --- a/src/Services/UserSystem/VoterHelper.php +++ b/src/Services/UserSystem/VoterHelper.php @@ -28,6 +28,9 @@ use App\Repository\UserRepository; use App\Security\ApiTokenAuthenticatedToken; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; +use Symfony\Component\Security\Core\Authorization\Voter\Voter; +use Symfony\Contracts\Translation\TranslatorInterface; /** * @see \App\Tests\Services\UserSystem\VoterHelperTest @@ -35,10 +38,14 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; final class VoterHelper { private readonly UserRepository $userRepository; + private readonly array $permissionStructure; - public function __construct(private readonly PermissionManager $permissionManager, private readonly EntityManagerInterface $entityManager) + public function __construct(private readonly PermissionManager $permissionManager, + private readonly TranslatorInterface $translator, + private readonly EntityManagerInterface $entityManager) { $this->userRepository = $this->entityManager->getRepository(User::class); + $this->permissionStructure = $this->permissionManager->getPermissionStructure(); } /** @@ -124,4 +131,17 @@ final class VoterHelper { return $this->permissionManager->isValidOperation($permission, $operation); } -} \ No newline at end of file + + public function addReason(?Vote $voter, string $permission, $operation): void + { + if ($voter !== null) { + $voter->addReason(sprintf("User does not have permission %s -> %s -> %s (%s.%s).", + $this->translator->trans('perm.group.'.$this->permissionStructure['perms'][$permission]['group'] ?? 'default' ), + $this->translator->trans($this->permissionStructure['perms'][$permission]['label'] ?? $permission), + $this->translator->trans($this->permissionStructure['perms'][$permission]['operations'][$operation]['label'] ?? $operation), + $permission, + $operation + )); + } + } +} diff --git a/templates/bundles/TwigBundle/Exception/error403.html.twig b/templates/bundles/TwigBundle/Exception/error403.html.twig index f5987179..334670fc 100644 --- a/templates/bundles/TwigBundle/Exception/error403.html.twig +++ b/templates/bundles/TwigBundle/Exception/error403.html.twig @@ -1,6 +1,9 @@ {% extends "bundles/TwigBundle/Exception/error.html.twig" %} {% block status_comment %} - Nice try! But you are not allowed to do this! + Nice try! But you are not allowed to do this!
+ {{ exception.message }}
If you think you should have access to this ressource, contact the adminstrator. -{% endblock %} \ No newline at end of file + + +{% endblock %} From eb4258053e338d4816cf036f244f7cdef5f83900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 00:24:55 +0200 Subject: [PATCH 09/19] Added voter reason explaination to the other voters --- src/Security/Voter/AttachmentVoter.php | 9 ++++++--- src/Security/Voter/GroupVoter.php | 5 +++-- src/Security/Voter/ImpersonateUserVoter.php | 14 +++++++++++--- src/Security/Voter/LabelProfileVoter.php | 5 +++-- src/Security/Voter/LogEntryVoter.php | 9 +++++---- src/Security/Voter/OrderdetailVoter.php | 5 +++-- src/Security/Voter/ParameterVoter.php | 5 +++-- src/Security/Voter/PartAssociationVoter.php | 5 +++-- src/Security/Voter/PartLotVoter.php | 11 ++++++++--- src/Security/Voter/PartVoter.php | 6 +++--- src/Security/Voter/PricedetailVoter.php | 5 +++-- src/Security/Voter/StructureVoter.php | 5 +++-- src/Security/Voter/UserVoter.php | 7 ++++--- src/Services/UserSystem/VoterHelper.php | 9 +++++++-- 14 files changed, 65 insertions(+), 35 deletions(-) diff --git a/src/Security/Voter/AttachmentVoter.php b/src/Security/Voter/AttachmentVoter.php index c2b17053..bd7ae4df 100644 --- a/src/Security/Voter/AttachmentVoter.php +++ b/src/Security/Voter/AttachmentVoter.php @@ -41,6 +41,7 @@ use App\Entity\Attachments\UserAttachment; use RuntimeException; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; use function in_array; @@ -56,7 +57,7 @@ final class AttachmentVoter extends Voter { } - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { //This voter only works for attachments @@ -65,7 +66,8 @@ final class AttachmentVoter extends Voter } if ($attribute === 'show_private') { - return $this->helper->isGranted($token, 'attachments', 'show_private'); + $vote?->addReason('User is not allowed to view private attachments.'); + return $this->helper->isGranted($token, 'attachments', 'show_private', $vote); } @@ -111,7 +113,8 @@ final class AttachmentVoter extends Voter throw new RuntimeException('Encountered unknown Parameter type: ' . $subject); } - return $this->helper->isGranted($token, $param, $this->mapOperation($attribute)); + $vote?->addReason('User is not allowed to '.$this->mapOperation($attribute).' attachments of type '.$param.'.'); + return $this->helper->isGranted($token, $param, $this->mapOperation($attribute), $vote); } return false; diff --git a/src/Security/Voter/GroupVoter.php b/src/Security/Voter/GroupVoter.php index 34839d38..f2ce6953 100644 --- a/src/Security/Voter/GroupVoter.php +++ b/src/Security/Voter/GroupVoter.php @@ -25,6 +25,7 @@ namespace App\Security\Voter; use App\Entity\UserSystem\Group; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -43,9 +44,9 @@ final class GroupVoter extends Voter * * @param string $attribute */ - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { - return $this->helper->isGranted($token, 'groups', $attribute); + return $this->helper->isGranted($token, 'groups', $attribute, $vote); } /** diff --git a/src/Security/Voter/ImpersonateUserVoter.php b/src/Security/Voter/ImpersonateUserVoter.php index edf55c62..1f8a70c6 100644 --- a/src/Security/Voter/ImpersonateUserVoter.php +++ b/src/Security/Voter/ImpersonateUserVoter.php @@ -26,6 +26,7 @@ namespace App\Security\Voter; use App\Entity\UserSystem\User; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; use Symfony\Component\Security\Core\User\UserInterface; @@ -47,9 +48,16 @@ final class ImpersonateUserVoter extends Voter && $subject instanceof UserInterface; } - protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool { - return $this->helper->isGranted($token, 'users', 'impersonate'); + $result = $this->helper->isGranted($token, 'users', 'impersonate'); + + if ($result === false) { + $vote?->addReason('User is not allowed to impersonate other users.'); + $this->helper->addReason($vote, 'users', 'impersonate'); + } + + return $result; } public function supportsAttribute(string $attribute): bool @@ -61,4 +69,4 @@ final class ImpersonateUserVoter extends Voter { return is_a($subjectType, User::class, true); } -} \ No newline at end of file +} diff --git a/src/Security/Voter/LabelProfileVoter.php b/src/Security/Voter/LabelProfileVoter.php index 47505bf9..cd349ddb 100644 --- a/src/Security/Voter/LabelProfileVoter.php +++ b/src/Security/Voter/LabelProfileVoter.php @@ -44,6 +44,7 @@ namespace App\Security\Voter; use App\Entity\LabelSystem\LabelProfile; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -63,9 +64,9 @@ final class LabelProfileVoter extends Voter public function __construct(private readonly VoterHelper $helper) {} - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { - return $this->helper->isGranted($token, 'labels', self::MAPPING[$attribute]); + return $this->helper->isGranted($token, 'labels', self::MAPPING[$attribute], $vote); } protected function supports($attribute, $subject): bool diff --git a/src/Security/Voter/LogEntryVoter.php b/src/Security/Voter/LogEntryVoter.php index 08bc3b70..dcb75a7a 100644 --- a/src/Security/Voter/LogEntryVoter.php +++ b/src/Security/Voter/LogEntryVoter.php @@ -26,6 +26,7 @@ use App\Services\UserSystem\VoterHelper; use Symfony\Bundle\SecurityBundle\Security; use App\Entity\LogSystem\AbstractLogEntry; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -39,7 +40,7 @@ final class LogEntryVoter extends Voter { } - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { $user = $this->helper->resolveUser($token); @@ -48,19 +49,19 @@ final class LogEntryVoter extends Voter } if ('delete' === $attribute) { - return $this->helper->isGranted($token, 'system', 'delete_logs'); + return $this->helper->isGranted($token, 'system', 'delete_logs', $vote); } if ('read' === $attribute) { //Allow read of the users own log entries if ( $subject->getUser() === $user - && $this->helper->isGranted($token, 'self', 'show_logs') + && $this->helper->isGranted($token, 'self', 'show_logs', $vote) ) { return true; } - return $this->helper->isGranted($token, 'system', 'show_logs'); + return $this->helper->isGranted($token, 'system', 'show_logs', $vote); } if ('show_details' === $attribute) { diff --git a/src/Security/Voter/OrderdetailVoter.php b/src/Security/Voter/OrderdetailVoter.php index 20843b9a..3bb2a3a3 100644 --- a/src/Security/Voter/OrderdetailVoter.php +++ b/src/Security/Voter/OrderdetailVoter.php @@ -46,6 +46,7 @@ use Symfony\Bundle\SecurityBundle\Security; use App\Entity\Parts\Part; use App\Entity\PriceInformations\Orderdetail; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -59,7 +60,7 @@ final class OrderdetailVoter extends Voter protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element']; - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { if (! is_a($subject, Orderdetail::class, true)) { throw new \RuntimeException('This voter can only handle Orderdetail objects!'); @@ -75,7 +76,7 @@ final class OrderdetailVoter extends Voter //If we have no part associated use the generic part permission if (is_string($subject) || !$subject->getPart() instanceof Part) { - return $this->helper->isGranted($token, 'parts', $operation); + return $this->helper->isGranted($token, 'parts', $operation, $vote); } //Otherwise vote on the part diff --git a/src/Security/Voter/ParameterVoter.php b/src/Security/Voter/ParameterVoter.php index 8ee2b9f5..f59bdeaf 100644 --- a/src/Security/Voter/ParameterVoter.php +++ b/src/Security/Voter/ParameterVoter.php @@ -39,6 +39,7 @@ use App\Entity\Parameters\StorageLocationParameter; use App\Entity\Parameters\SupplierParameter; use RuntimeException; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -53,7 +54,7 @@ final class ParameterVoter extends Voter { } - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { //return $this->resolver->inherit($user, 'attachments', $attribute) ?? false; @@ -108,7 +109,7 @@ final class ParameterVoter extends Voter throw new RuntimeException('Encountered unknown Parameter type: ' . (is_object($subject) ? $subject::class : $subject)); } - return $this->helper->isGranted($token, $param, $attribute); + return $this->helper->isGranted($token, $param, $attribute, $vote); } protected function supports(string $attribute, $subject): bool diff --git a/src/Security/Voter/PartAssociationVoter.php b/src/Security/Voter/PartAssociationVoter.php index 7678b67a..f1eb83c7 100644 --- a/src/Security/Voter/PartAssociationVoter.php +++ b/src/Security/Voter/PartAssociationVoter.php @@ -46,6 +46,7 @@ use App\Services\UserSystem\VoterHelper; use Symfony\Bundle\SecurityBundle\Security; use App\Entity\Parts\Part; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -61,7 +62,7 @@ final class PartAssociationVoter extends Voter protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element']; - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { if (!is_string($subject) && !$subject instanceof PartAssociation) { throw new \RuntimeException('Invalid subject type!'); @@ -77,7 +78,7 @@ final class PartAssociationVoter extends Voter //If we have no part associated use the generic part permission if (is_string($subject) || !$subject->getOwner() instanceof Part) { - return $this->helper->isGranted($token, 'parts', $operation); + return $this->helper->isGranted($token, 'parts', $operation, $vote); } //Otherwise vote on the part diff --git a/src/Security/Voter/PartLotVoter.php b/src/Security/Voter/PartLotVoter.php index a64473c8..87c3d135 100644 --- a/src/Security/Voter/PartLotVoter.php +++ b/src/Security/Voter/PartLotVoter.php @@ -46,6 +46,7 @@ use Symfony\Bundle\SecurityBundle\Security; use App\Entity\Parts\Part; use App\Entity\Parts\PartLot; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -59,13 +60,13 @@ final class PartLotVoter extends Voter protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element', 'withdraw', 'add', 'move']; - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { $user = $this->helper->resolveUser($token); if (in_array($attribute, ['withdraw', 'add', 'move'], true)) { - $base_permission = $this->helper->isGranted($token, 'parts_stock', $attribute); + $base_permission = $this->helper->isGranted($token, 'parts_stock', $attribute, $vote); $lot_permission = true; //If the lot has an owner, we need to check if the user is the owner of the lot to be allowed to withdraw it. @@ -73,6 +74,10 @@ final class PartLotVoter extends Voter $lot_permission = $subject->getOwner() === $user || $subject->getOwner()->getID() === $user->getID(); } + if (!$lot_permission) { + $vote->addReason('User is not the owner of the lot.'); + } + return $base_permission && $lot_permission; } @@ -86,7 +91,7 @@ final class PartLotVoter extends Voter //If we have no part associated use the generic part permission if (is_string($subject) || !$subject->getPart() instanceof Part) { - return $this->helper->isGranted($token, 'parts', $operation); + return $this->helper->isGranted($token, 'parts', $operation, $vote); } //Otherwise vote on the part diff --git a/src/Security/Voter/PartVoter.php b/src/Security/Voter/PartVoter.php index ef70b6ce..159e6893 100644 --- a/src/Security/Voter/PartVoter.php +++ b/src/Security/Voter/PartVoter.php @@ -25,6 +25,7 @@ namespace App\Security\Voter; use App\Entity\Parts\Part; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -52,10 +53,9 @@ final class PartVoter extends Voter return false; } - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { - //Null concealing operator means, that no - return $this->helper->isGranted($token, 'parts', $attribute); + return $this->helper->isGranted($token, 'parts', $attribute, $vote); } public function supportsAttribute(string $attribute): bool diff --git a/src/Security/Voter/PricedetailVoter.php b/src/Security/Voter/PricedetailVoter.php index 681b73b7..ca86f1ce 100644 --- a/src/Security/Voter/PricedetailVoter.php +++ b/src/Security/Voter/PricedetailVoter.php @@ -47,6 +47,7 @@ use App\Entity\PriceInformations\Orderdetail; use App\Entity\Parts\Part; use App\Entity\PriceInformations\Pricedetail; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; /** @@ -60,7 +61,7 @@ final class PricedetailVoter extends Voter protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element']; - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { $operation = match ($attribute) { 'read' => 'read', @@ -72,7 +73,7 @@ final class PricedetailVoter extends Voter //If we have no part associated use the generic part permission if (is_string($subject) || !$subject->getOrderdetail() instanceof Orderdetail || !$subject->getOrderdetail()->getPart() instanceof Part) { - return $this->helper->isGranted($token, 'parts', $operation); + return $this->helper->isGranted($token, 'parts', $operation, $vote); } //Otherwise vote on the part diff --git a/src/Security/Voter/StructureVoter.php b/src/Security/Voter/StructureVoter.php index 2417b796..ad0299a7 100644 --- a/src/Security/Voter/StructureVoter.php +++ b/src/Security/Voter/StructureVoter.php @@ -33,6 +33,7 @@ use App\Entity\Parts\Supplier; use App\Entity\PriceInformations\Currency; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; use function is_object; @@ -113,10 +114,10 @@ final class StructureVoter extends Voter * * @param string $attribute */ - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { $permission_name = $this->instanceToPermissionName($subject); //Just resolve the permission - return $this->helper->isGranted($token, $permission_name, $attribute); + return $this->helper->isGranted($token, $permission_name, $attribute, $vote); } } diff --git a/src/Security/Voter/UserVoter.php b/src/Security/Voter/UserVoter.php index b41c1a40..97f8e4fb 100644 --- a/src/Security/Voter/UserVoter.php +++ b/src/Security/Voter/UserVoter.php @@ -26,6 +26,7 @@ use App\Entity\UserSystem\User; use App\Services\UserSystem\PermissionManager; use App\Services\UserSystem\VoterHelper; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Vote; use Symfony\Component\Security\Core\Authorization\Voter\Voter; use function in_array; @@ -79,7 +80,7 @@ final class UserVoter extends Voter * * @param string $attribute */ - protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool + protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { $user = $this->helper->resolveUser($token); @@ -97,7 +98,7 @@ final class UserVoter extends Voter if (($subject instanceof User) && $subject->getID() === $user->getID() && $this->helper->isValidOperation('self', $attribute)) { //Then we also need to check the self permission - $tmp = $this->helper->isGranted($token, 'self', $attribute); + $tmp = $this->helper->isGranted($token, 'self', $attribute, $vote); //But if the self value is not allowed then use just the user value: if ($tmp) { return $tmp; @@ -106,7 +107,7 @@ final class UserVoter extends Voter //Else just check user permission: if ($this->helper->isValidOperation('users', $attribute)) { - return $this->helper->isGranted($token, 'users', $attribute); + return $this->helper->isGranted($token, 'users', $attribute, $vote); } return false; diff --git a/src/Services/UserSystem/VoterHelper.php b/src/Services/UserSystem/VoterHelper.php index dda00de7..bf65c58c 100644 --- a/src/Services/UserSystem/VoterHelper.php +++ b/src/Services/UserSystem/VoterHelper.php @@ -54,11 +54,16 @@ final class VoterHelper * @param TokenInterface $token The token to check * @param string $permission The permission to check * @param string $operation The operation to check + * @param Vote|null $vote The vote object to add reasons to (optional). If null, no reasons are added. * @return bool */ - public function isGranted(TokenInterface $token, string $permission, string $operation): bool + public function isGranted(TokenInterface $token, string $permission, string $operation, ?Vote $vote = null): bool { - return $this->isGrantedTrinary($token, $permission, $operation) ?? false; + $tmp = $this->isGrantedTrinary($token, $permission, $operation) ?? false; + if ($tmp === false) { + $this->addReason($vote, $permission, $operation); + } + return $tmp; } /** From fe7910a2f288ff7f081dae9e193de2d89bff2f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 00:39:16 +0200 Subject: [PATCH 10/19] Fixed invalid name for currency in data fixture --- src/DataFixtures/CurrencyFixtures.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DataFixtures/CurrencyFixtures.php b/src/DataFixtures/CurrencyFixtures.php index 0c05d578..2de5b277 100644 --- a/src/DataFixtures/CurrencyFixtures.php +++ b/src/DataFixtures/CurrencyFixtures.php @@ -51,7 +51,7 @@ class CurrencyFixtures extends Fixture $currency7 = new Currency(); $currency7->setName('Test Currency with long name'); - $currency7->setIsoCode('CHY'); + $currency7->setIsoCode('CNY'); $manager->persist($currency7); $manager->flush(); From 9b17efc12c33624f5c074c9ada3571495ed2601b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 00:39:23 +0200 Subject: [PATCH 11/19] Fixed phpstan issue --- src/Services/UserSystem/VoterHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/UserSystem/VoterHelper.php b/src/Services/UserSystem/VoterHelper.php index bf65c58c..d3c5368c 100644 --- a/src/Services/UserSystem/VoterHelper.php +++ b/src/Services/UserSystem/VoterHelper.php @@ -141,7 +141,7 @@ final class VoterHelper { if ($voter !== null) { $voter->addReason(sprintf("User does not have permission %s -> %s -> %s (%s.%s).", - $this->translator->trans('perm.group.'.$this->permissionStructure['perms'][$permission]['group'] ?? 'default' ), + $this->translator->trans('perm.group.'.($this->permissionStructure['perms'][$permission]['group'] ?? 'unknown') ), $this->translator->trans($this->permissionStructure['perms'][$permission]['label'] ?? $permission), $this->translator->trans($this->permissionStructure['perms'][$permission]['operations'][$operation]['label'] ?? $operation), $permission, From 065ef9f8ae75f040f74f574dfd7ff7376dee3dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 19:22:59 +0200 Subject: [PATCH 12/19] Fixed LCSC provider LCSC has changed its search API, so it was broken. Fixes issue #1018 --- src/Services/InfoProviderSystem/Providers/LCSCProvider.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php index 58df3b82..75d38c14 100755 --- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php +++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php @@ -123,11 +123,11 @@ class LCSCProvider implements InfoProviderInterface */ private function queryByTerm(string $term): array { - $response = $this->lcscClient->request('GET', self::ENDPOINT_URL . "/search/global", [ + $response = $this->lcscClient->request('POST', self::ENDPOINT_URL . "/search/v2/global", [ 'headers' => [ 'Cookie' => new Cookie('currencyCode', $this->settings->currency) ], - 'query' => [ + 'json' => [ 'keyword' => $term, ], ]); From b093866d157eaf4b4eb1130b3c47905c4164fd97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 19:27:10 +0200 Subject: [PATCH 13/19] Do not replace LCSC category slashes with arrows, as these are actually their names, not level separators --- src/Services/InfoProviderSystem/Providers/LCSCProvider.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php index 75d38c14..8db53f76 100755 --- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php +++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php @@ -197,9 +197,6 @@ class LCSCProvider implements InfoProviderInterface $category = $product['parentCatalogName'] ?? null; if (isset($product['catalogName'])) { $category = ($category ?? '') . ' -> ' . $product['catalogName']; - - // Replace the / with a -> for better readability - $category = str_replace('/', ' -> ', $category); } return new PartDetailDTO( From c1b7272ab1c55a81209b7fe76f68d9b5bd76fc6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 19:30:17 +0200 Subject: [PATCH 14/19] Updated frontend dependencies --- yarn.lock | 1518 ++++++++++++++++++++++++++--------------------------- 1 file changed, 759 insertions(+), 759 deletions(-) diff --git a/yarn.lock b/yarn.lock index 307692f2..3289c949 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,66 +2,58 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.19.2": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz#702df67a08cb3cfe8c33ee1111ef136ec1a9e232" - integrity sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw== +"@algolia/autocomplete-core@1.19.3": + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.3.tgz#f480d638d2b4218f8161f313186db7a5aac99c90" + integrity sha512-45CVTxtd3PwVux5G3WLUA3So5tRKRXu+amupW0dg3KTaTeydt+KzvH1mrZhs3hUne7VQ+g8+ZRGWHbuL/Rb5mw== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.19.2" - "@algolia/autocomplete-shared" "1.19.2" + "@algolia/autocomplete-plugin-algolia-insights" "1.19.3" + "@algolia/autocomplete-shared" "1.19.3" -"@algolia/autocomplete-js@1.19.2", "@algolia/autocomplete-js@^1.17.0": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.2.tgz#3768a501671b43923aee8c111680d3738c432215" - integrity sha512-pUElPLQypSGwewihADgV/g57EWepn/jHoArnbtyJNvn4onJCDwmJGelCm5+dN/3dAYZq7QO2ExFEjGsoiG/nUg== +"@algolia/autocomplete-js@1.19.3", "@algolia/autocomplete-js@^1.17.0": + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.3.tgz#a3f733ac654201beb18c29e83b61653e5037c04c" + integrity sha512-uJPElcGy1jqi8WAzTBgX4xufu+cRYSaDfAZW3ed4AVTOu8oDwUkMgrKgpKxp5u8d6BhugSm47vGkYoj87jZQ/Q== dependencies: - "@algolia/autocomplete-core" "1.19.2" - "@algolia/autocomplete-preset-algolia" "1.19.2" - "@algolia/autocomplete-shared" "1.19.2" + "@algolia/autocomplete-core" "1.19.3" + "@algolia/autocomplete-preset-algolia" "1.19.3" + "@algolia/autocomplete-shared" "1.19.3" htm "^3.1.1" preact "^10.13.2" -"@algolia/autocomplete-plugin-algolia-insights@1.19.2": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz#3584b625b9317e333d1ae43664d02358e175c52d" - integrity sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg== +"@algolia/autocomplete-plugin-algolia-insights@1.19.3": + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.3.tgz#04e6e8150cd0964f7521acbb1eb1a3d650e9f60d" + integrity sha512-Oy6t0Ws99xWKCzrp7pFWncLqFA3MoBAv1DDbDrn2XN9NBE9GviXw2hZsBi6CFReR/9wK72xq4vT96LBshOxhaQ== dependencies: - "@algolia/autocomplete-shared" "1.19.2" + "@algolia/autocomplete-shared" "1.19.3" "@algolia/autocomplete-plugin-recent-searches@^1.17.0": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.2.tgz#59341b2b6e121fedd1ab3e1652d86630f4c37fc4" - integrity sha512-V4VYzv0wvsBYsGxDcicpY17YRvayiFnMl24/kNAEBdIsxtF555Yfg0CHAmR55JdZRs9er/op1SOBpcc5+3V76g== + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.3.tgz#f6a98362dc7d7fcf080b17202dd8b6207fe447d2" + integrity sha512-RfY6TyolCa2gV655EKsz5sMp7E19C59ENJ3LBe5lRyq3o6sO5jNAMMyEBAp7y8M7uGRdepa6Y7Tch1zSLlCEEw== dependencies: - "@algolia/autocomplete-core" "1.19.2" - "@algolia/autocomplete-js" "1.19.2" - "@algolia/autocomplete-preset-algolia" "1.19.2" - "@algolia/autocomplete-shared" "1.19.2" + "@algolia/autocomplete-core" "1.19.3" + "@algolia/autocomplete-js" "1.19.3" + "@algolia/autocomplete-preset-algolia" "1.19.3" + "@algolia/autocomplete-shared" "1.19.3" -"@algolia/autocomplete-preset-algolia@1.19.2": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.2.tgz#c6c1e1ff7b011090a70e66b02e6db4ebade4535e" - integrity sha512-/Z9tDn84fnyUyjajvWRskOX7p/BDKK5PidEA4Y/aAl0c6VfHu5dMkTDG090CIiskLUgpkHacLbz+A10gMBP++Q== +"@algolia/autocomplete-preset-algolia@1.19.3": + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.3.tgz#027fd0937bc22b72c3eecf56053ab55f79e4b423" + integrity sha512-NIvRLWFnX5MclQVyRKPwNDxjNg214qXCTZ/jLLVXw17VmPsEYfgeSYEMWEGFapA8KKKMz+Kwb+nBOc4je6DXfg== dependencies: - "@algolia/autocomplete-shared" "1.19.2" + "@algolia/autocomplete-shared" "1.19.3" -"@algolia/autocomplete-shared@1.19.2": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz#c0b7b8dc30a5c65b70501640e62b009535e4578f" - integrity sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w== +"@algolia/autocomplete-shared@1.19.3": + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.3.tgz#9bd9dfd80fa3e320461682e917f0f94404f60eba" + integrity sha512-zzpqoVm/I4eRFT5Mcempwa5SVKox83eVIsZyLAYQdV+7tmtEYayx225Kl7nwhGrJ7NCozE9YWMwuFFN2g5dSBg== "@algolia/autocomplete-theme-classic@^1.17.0": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.2.tgz#7c2a7d8f74988536f0a2f6ae806b18f915523266" - integrity sha512-UapO6bGuT5NkRK8VWxSg8AOLRhIcxBZ/OYg7ao//WHBo/yyiDybxy+K/xeY1RcHQVgimqlWfXj8IWAyQxxZP6A== - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" + version "1.19.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.3.tgz#b4442911e3dc38bfb40c25f56b71f099a321f9c7" + integrity sha512-f0s9AxiqWTrv+etLcVXqzBTX5QbnR6JXJPmWu5mgkch7VY4AIqIuNB8ToDkSl1Hp9prkKir7/J9xEf7BDePHww== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": version "7.27.1" @@ -73,25 +65,25 @@ picocolors "^1.1.1" "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" - integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" + integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== "@babel/core@^7.19.6": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb" - integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" + integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== dependencies: - "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" "@babel/generator" "^7.28.3" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.3" - "@babel/parser" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.4" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -252,20 +244,20 @@ "@babel/traverse" "^7.28.3" "@babel/types" "^7.28.2" -"@babel/helpers@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.3.tgz#b83156c0a2232c133d1b535dd5d3452119c7e441" - integrity sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw== +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: "@babel/template" "^7.27.2" - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" -"@babel/parser@^7.18.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71" - integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA== +"@babel/parser@^7.18.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== dependencies: - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": version "7.27.1" @@ -366,9 +358,9 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-block-scoping@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz#e7c50cbacc18034f210b93defa89638666099451" - integrity sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz#e19ac4ddb8b7858bac1fd5c1be98a994d9726410" + integrity sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -389,16 +381,16 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-classes@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz#598297260343d0edbd51cb5f5075e07dee91963a" - integrity sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" + integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-globals" "^7.28.0" "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-replace-supers" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/traverse" "^7.28.4" "@babel/plugin-transform-computed-properties@^7.27.1": version "7.27.1" @@ -577,15 +569,15 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-object-rest-spread@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz#d23021857ffd7cd809f54d624299b8086402ed8d" - integrity sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== dependencies: "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-destructuring" "^7.28.0" "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.0" + "@babel/traverse" "^7.28.4" "@babel/plugin-transform-object-super@^7.27.1": version "7.27.1" @@ -642,9 +634,9 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-regenerator@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz#b8eee0f8aed37704bbcc932fd0b1a0a34d0b7344" - integrity sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A== + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" + integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -824,180 +816,180 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.3.tgz#6911a10795d2cce43ec6a28cffc440cca2593434" - integrity sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ== +"@babel/traverse@^7.18.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" + integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== dependencies: "@babel/code-frame" "^7.27.1" "@babel/generator" "^7.28.3" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.3" + "@babel/parser" "^7.28.4" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" debug "^4.3.1" -"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.4.4": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" - integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== +"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" -"@ckeditor/ckeditor5-adapter-ckfinder@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-46.0.2.tgz#a165fc259e91189d4f13cc83fc11f7f7e0c6a1b7" - integrity sha512-S4VO8l+WS8yVGpu9vB00rWNdFIR4NTAkuCP7iLlodB45KFgMobP1GTqF8EqNFIJEU2PHJz24R0kcsOyvfU6V/A== +"@ckeditor/ckeditor5-adapter-ckfinder@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-46.0.3.tgz#f19f9fa1a0a33aa2fa502f0f7c779c027f4f78bd" + integrity sha512-xebONgXYuF8Fuhr6C+lpwRSfpChSrJKTy5S0i7vuBY+EeuXLRED7AuCOvPwV9oed1/CqbzDWWH1IefgkLwZwvQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-upload" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-upload" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-alignment@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-46.0.2.tgz#68ce011f01e4bed205e8ee3cd2599a54b89af19a" - integrity sha512-iCVJIkmJ+DT2Podmc0gH8Ntj7rYr9kziYLup1VHo/k8mKPfqC3a6o6ngT8ZtPdr1nZ4h4kozVjF+ge2BqnxzmQ== +"@ckeditor/ckeditor5-alignment@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-46.0.3.tgz#34cb75002fefc79dbffc94b08c0a0a34e722adb5" + integrity sha512-P0qegTFO9u5gbR7Ig/JI0vGdWFtxzM08KPCbeYTpQtdI9+DrKdvWFo0LVB7LJjR6OKuUPCtnulGgCyhuzNT7lw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-autoformat@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-46.0.2.tgz#9153d5186a4e5ddcb27b04a181fd21c18625e830" - integrity sha512-IMEWvgRCYw4PkUsshIb7V54fqJvLLohFLH+CQ0RtjzGE8ZYDkuusu7cHDz8hgQwlDWH5X7VOvTdEdPzb0uRhjA== +"@ckeditor/ckeditor5-autoformat@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-46.0.3.tgz#ac2390550211aa71b7065559d4d9c135e3296ad0" + integrity sha512-E3bjlf8HbTD9FiGHPQyrbRXniA7W06CecmlKXwHDisGC8lLLF8ZpuRX4oGAH5QLpSVFyGuj0C1GJtVY0+PEjOw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-heading" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-heading" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-autosave@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-46.0.2.tgz#bcf3f2c44a5341c196343ace454992a3f36468d8" - integrity sha512-DKUCaGzbpwJC4FdWLVQivjJAkOkNqAaCv4+xNESPQvq8pGzBqHPFTZl0ZBvGUxEUj7S1dypIHkVWqRywSNsKJg== +"@ckeditor/ckeditor5-autosave@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-46.0.3.tgz#d26d0157ebf4005fac8f802de16ce65188e64c92" + integrity sha512-SStt6opEniy0i5N5QMsAttpxhPvlmQ5UgmfvVmkyBnvOGwFwSmIFjxAXdTsAhvKdDaKrsjeCpv/j6L6llYk7dw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-basic-styles@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-46.0.2.tgz#cc38af0cfb968911ee3ce302f1ae6a2e3dd5c57e" - integrity sha512-KFMNihlxg7LG7wKhG9OgAOqY621qkdz9clzLPmaoZzFydDfoVlnumFlC3cLnhIK1HOJvDnUec3u9te49pbqllQ== +"@ckeditor/ckeditor5-basic-styles@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-46.0.3.tgz#563cb4ef19ecfd763745cb0bd79940fd03b7a81c" + integrity sha512-THmEPEbYopSfq8NTAugPLk+QW8/vuRkJfg/NpESzeugqCkBG2to3thOHdetbpye4IJBokLFhLsGFfKVYfVF81A== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-block-quote@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-46.0.2.tgz#c7498ac1b588160703a14ccdfc2fe46aba187060" - integrity sha512-QWfqWPFQ4xFSzVgX8L3XqYYnUZE8/p3K23a2S35jwUJRrJl7PzyDNtzqbqohVWn5mGRXlO66qHdbyayrHTx0Lw== +"@ckeditor/ckeditor5-block-quote@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-46.0.3.tgz#79a783d36ad4f9163cc31fb608ac6213c040a145" + integrity sha512-8bI7GoxOPrIExt/32gxLDQJB5VdSp3Oi6fqA+GH0Lqj+ri8HKfl3S147GymTUfBh01IOymQNL7xX04Dq1Nbl6A== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-bookmark@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-46.0.2.tgz#21fc328e4da97b8a72cd9e9bf13b1cc78e381273" - integrity sha512-qtWBf55fyogvgwR/ftHPT6paMtqWKs1nKMxFkJI2ZAYkd7R1E8YYDmZGNjzbYTCRf8NLxJn6bBc9FCwZUfSxeA== +"@ckeditor/ckeditor5-bookmark@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-46.0.3.tgz#f597408d87746105ba5d7a80ce8a7f4fa32a7cb6" + integrity sha512-f1usHplw2Ndhm1AiyjWfOWoaSQehMqBaXTa94OXlvO6ci1RIijdFm+DKn4Lgh/vSjv4vo25eQReTmEM0KaysvA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-link" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-link" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-ckbox@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-46.0.2.tgz#9edef4293edc19dc7317ce9d378fa7fab633daf4" - integrity sha512-Q2oqIktjDFi8X2fCE9oELZH02USd4QDcPUShUPRnr/FWcUllx3nXDhz/O+i4bvSh6ckSQKyneRlDtIx11bDbuQ== +"@ckeditor/ckeditor5-ckbox@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-46.0.3.tgz#e0999969662c56bc768ac0ee7a4b09a3f6fefb82" + integrity sha512-UnmCqOU/iyYDef/OVsWbixeXwo+0pb3YGNWgmd2YsCFUUerbpOkDwwGuvCZPE7Hs34lNz8ybbhjR9KmGu8WcAw== dependencies: - "@ckeditor/ckeditor5-cloud-services" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-image" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-upload" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-cloud-services" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-image" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-upload" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" blurhash "2.0.5" - ckeditor5 "46.0.2" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ckfinder@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-46.0.2.tgz#658d361a64460927681e18360f8b10bd6b3df7ae" - integrity sha512-TC2ZIm1klZ6ZGP1aSbgqiQ6E4fx74pCGqtX5zj+Uk3E3yD48Yr7Wg4dO3eeKcVanIM2MRzg2kr2pGJVlTPcjUw== +"@ckeditor/ckeditor5-ckfinder@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-46.0.3.tgz#f7a0c234be03f71229461668dc8a659f608ecdca" + integrity sha512-VXggqo2w0TgFPyu6z+uH3aTWQMhbq2F2iPUi8SreYCL0JclczbU4HDKqzQU+RKhrzp+yhK1n7ztX5aN1H9EVAw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-image" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-image" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-clipboard@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-46.0.2.tgz#04b87859a599afe2204dd208d4e43d0cc2205e7a" - integrity sha512-FL1Dy3CWRmdMrk31oCpYi9FZew3okXlfgkfLyjbXIgAdUiJ+b/9Tu2ZzR6fNjpAN6BYTiOjx5cDq8h8yMLUgwg== +"@ckeditor/ckeditor5-clipboard@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-46.0.3.tgz#5a42799228875a8112c98fc61ad1ca050f42fca0" + integrity sha512-ECz2goSbYZSlhRT2HszIPCMWFfThA0uIuXpI5PjYj7rDJUoip/Y3/UZjyMo47IUFf66Y4VdvJoq0fv/Z86HYIg== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-cloud-services@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-46.0.2.tgz#edfca0c1c1661d3c0e6421a4aafcbbcb86a6c3f8" - integrity sha512-auY6i4FCrdUiRCOGPUnIEcISKQad7rUm2fkjWHtS89v9sWabDq6BWLyuAFH8HNGjb81csrwb6b2bzMAL7M1rng== +"@ckeditor/ckeditor5-cloud-services@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-46.0.3.tgz#7c02822ed77a1b4d3e80c0f70b4b250c5e946945" + integrity sha512-eKmtcygKoAoba6LGKdsFQyU50yZeeFgD9k05HYnN4BZCqZjrmlTbo3mQrTREgM/w2yxQ4AkDVj162S9NOyibWA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-code-block@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-46.0.2.tgz#c5018d9041228197d3796b558bf3e61827f506fe" - integrity sha512-ADNMDWSmlvrle0j9vNR5WMNyWjVn8t1TVILmLOab2T0/LTZcTzFXdz5i6I/oKhoxKty7soB8lmCUfJqrXNIhTw== +"@ckeditor/ckeditor5-code-block@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-46.0.3.tgz#a8595063ce34da2a2095e89cf79be8b0532de056" + integrity sha512-5Bny1t2jb+Fruy4Tf0Es6YGPe24eWUiCskTv7QZkebEUtectUhZXjrbAPXkn9GQH9E+jU/ywhYkkCKwDgg+Vnw== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-core@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-46.0.2.tgz#73b20ff36d4900605f4855fcd4cd0a5769027894" - integrity sha512-nXFO2hlmz6gkGzt2/C1yqxwxNqmHxvHy3npIiIuVHWE+e+Zx1BzJjjNEUoZ/K9+6IW0uybhidzGdpdwS6apfpg== +"@ckeditor/ckeditor5-core@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-46.0.3.tgz#e9d294b517f646d6efdccecc8b3dc030feac7641" + integrity sha512-J03+XnTDL+Ex43ttT4fBxfJGRQxDor0zJc3TxlX44g0q7xD1l7T2CIkorry+817e3By3Qe3DfiMSleHKuDnmvQ== dependencies: - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-watchdog" "46.0.2" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-watchdog" "46.0.3" es-toolkit "1.39.5" "@ckeditor/ckeditor5-dev-translations@^43.0.1", "@ckeditor/ckeditor5-dev-translations@^43.1.0": @@ -1041,316 +1033,316 @@ terser-webpack-plugin "^4.2.3" through2 "^3.0.1" -"@ckeditor/ckeditor5-easy-image@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-46.0.2.tgz#2900e18d8a193fda3a6f7698e3db5d9438c1fc46" - integrity sha512-TjSbCEd8x31k4IlZZmEXA76LW9l1IGzq/bIBX4lLjSF+X30XYVqn9jYzJnPzZ73dNZ1mbzL4gzWO20TaCNyTuA== +"@ckeditor/ckeditor5-easy-image@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-46.0.3.tgz#fbf72ea4524ded6b5aceacc41fa6f5e08672f7f3" + integrity sha512-UZs1G2wZaUr4lJSUsECBpM5ntr0UIXhGYG6lhE4Lf1TBaOypzxusR0H3txNtWIX1rq6hCeFH1P7meijfvJRgbw== dependencies: - "@ckeditor/ckeditor5-cloud-services" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-upload" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-cloud-services" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-upload" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-editor-balloon@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-46.0.2.tgz#dc0b0785aeb6e9266a205d255668aa0269a28207" - integrity sha512-ZZMFkZ1xP+O3JDFP03fsWZXrPbbzzV0ut2cyHvmTbvxsL8nWkByArbAyc4qs7ceF6wQ68PqLk1o+sPkEWHdVnw== +"@ckeditor/ckeditor5-editor-balloon@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-46.0.3.tgz#35382c0393babc1a5f3ec8acd9a0f68ebb56a291" + integrity sha512-NXqmQK45DybJmgWFUln2uTvWqg77BuTp/R/4F33K6fgA4QGmnlWZ+l96Z5Rpmq6Rxc7suBNIKKWRFihquHw1hw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-classic@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-46.0.2.tgz#5bdb980fd5b1cf995c467279e1779307e5c1f52a" - integrity sha512-LTgCEyKapUURBZHZ2y5Z5nmPrl1zl8+kTiTgtpUOgZMQURq/G5BLxx5fdSyF2P0pZAoDYbrDR4uc2ngMH+6lgg== +"@ckeditor/ckeditor5-editor-classic@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-46.0.3.tgz#f872b541014dc24b3a3ff62331a785348ea3ae40" + integrity sha512-fw4pdBqT1UpVYkBBpACQn9w5iR2Y62AvGW7ANt6b1nv55+FIN0uEAHsuChvZdFra8iJQR1qyilT24LVOTtk5mg== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-decoupled@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-46.0.2.tgz#2d3a3a0b0a831ac03a7a1969a9cbdc2a80597439" - integrity sha512-eunAH7bAC7Y0FkxK9ukecG2a7Jxm0NAXlaDIWBRBYmNOycUDnMjeD54Ax4udJ7SxJXiTFYYF6fUIZ/mQy/DHbQ== +"@ckeditor/ckeditor5-editor-decoupled@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-46.0.3.tgz#dae17ccb2d3fc3461fbe174b45590f9cde8748be" + integrity sha512-svrTpgGCi9YLhzit97i+A+lVStnQ4fNbGj6O1HlRG676BA20zqUkUWbNDPlBQT5sbq4N2oLKPwBmAqtUsF9ivQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-inline@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-46.0.2.tgz#7fb1c9b1b5aad15612c56b179b91ad4564600e89" - integrity sha512-XYERPRnt/KNSje/AXpT0aCr6BLpSDAXaGil7edmuPL09oC+gGfjEzvCJDyDHbPCEwOTu684AHVvjiJNKJiJOTQ== +"@ckeditor/ckeditor5-editor-inline@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-46.0.3.tgz#31342902ec3ad3185cfaf8097d55f1086f8f63a6" + integrity sha512-VfsD95gALQrUMHRJ5f2KKIPgtRb5flAqug85GSWy+wJZXOv7dC953tc1v8PYtUOHV6R3k2SWOUAGUClRu2ijOQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-multi-root@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-46.0.2.tgz#03f8d2bf50037c66cddb0ac52b18f4fe3be59c38" - integrity sha512-QUHS10vQ+9XqRfe/djzD6P4Q8rFav3ewXldW2D5trMpQ+d9HzpyyGnYOOHzM5P8VSpgXm1ma8lTuXtqeLnIhnw== +"@ckeditor/ckeditor5-editor-multi-root@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-46.0.3.tgz#b9d9b4f62d5396e3597c24f6183ab92ea0512d52" + integrity sha512-mS9gd8zTCclstU5DROT5L3sVq6HSDk0jw/7d7bgKEvWbGvQ6iPiqcgZ+bzpyrtvXMQKnmgfytZpU9qfODLpwFA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-emoji@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-46.0.2.tgz#e71825e85411b1de6d88503e12b6084d41adbdaa" - integrity sha512-ZxjWu2JxnvX8ZyMQpmJ5VpaoXXtWWJxiO6MNeWjL/tcZ2DhD6/lQye7CLuAOvW4P5WBwrGKDdnk+vx7GLO6NIA== +"@ckeditor/ckeditor5-emoji@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-46.0.3.tgz#e129445b3a078b19268482b55dd769449922d636" + integrity sha512-XiQsDeIZdSRDuFz/eoH16L21+Ucxykt+qHvqHSXB6bnVE8A3+65fxXYXicXnlb8st6UYhVBGwd53cpRz1ljMww== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-mention" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-mention" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-46.0.2.tgz#4f215a5f729f6c43b7dca0c8034ae7e9e30036a3" - integrity sha512-KrOmMtfLON/5EFS7x8GgCTRfVE4rFniPCRfBPzNL6rA/eWOclLYvwUGHpI6+JAymZ5XzyPLb8ftn6KjG8vvC+w== +"@ckeditor/ckeditor5-engine@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-46.0.3.tgz#a4d740ad4cd87aa5c2dedbf45bc60f8cad8f4823" + integrity sha512-U5BMV3pZTViU2ArsmmvfzqG1dt03laxgWtX8y2TtoEhaL+cNnT4N2cxj0StioeTbGAP3imkNKvVfRpRBhJIp/Q== dependencies: - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-utils" "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-enter@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-46.0.2.tgz#db3383f5310b8f2a22689abb96e882f2bd8b24a6" - integrity sha512-AZ+WhDEWDH4Ss6i7zd/YcuszlF5QKfkbGPQVsymsUziDvD/IuIQ1WtTDvLfdXbxGKI7amp9e1HCoilOJfv5uDw== +"@ckeditor/ckeditor5-enter@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-46.0.3.tgz#d511f822b98644c8c3d614930184c7df845083c3" + integrity sha512-Z/IVe2Bn/PXamXxTlG9Pf/4K1OoGsNpwBfdywiqSYxdlF5E/4e5xArCKuFVkLGPO2YPSXShPhucBorqHlGQI2Q== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" -"@ckeditor/ckeditor5-essentials@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-46.0.2.tgz#f21b2b2033e71ddd28519c69d89b983bb5c02701" - integrity sha512-ckcjNJiT1KDfllMr6eiBO9t1GlQUELXotjvUW1H93+g87qvl2yFJa/WB7PCpFOc5Derq45/OQWGL5hjySAqGUA== +"@ckeditor/ckeditor5-essentials@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-46.0.3.tgz#56a0b982fe52c8ba605773cfb2c3f0f901849bb3" + integrity sha512-lUk+AkDVXb0YXEbyw+14sA5vFtXoWA4i6026tyN8I9uShMIyyjzkVUtTX9a0AWp5j//sJ5Ke+wMS0QUFRDtj+Q== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-select-all" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-undo" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-select-all" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-undo" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-find-and-replace@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-46.0.2.tgz#dbd32fd4f65e085f000631569911f83eb2d9502a" - integrity sha512-k/gAR69CxdjeBf7mrGKWswdsVrdXoHRjCR7RbnTJH+tgzPpbn1sZydD2UacqqC5hON088whTokDY3KFd6zdbXA== +"@ckeditor/ckeditor5-find-and-replace@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-46.0.3.tgz#c2b4b617ea0c5009d5bbf5366865c52ed7721eab" + integrity sha512-WKJ32slfJKPE2xnOWtk8/kqaDlUE3AKXChmRw6fPXM9pRpBRItLrbMO4Lhic9F1V8UzzY88/6VMuTMUlVg7/pQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-font@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-46.0.2.tgz#874dd5102cc0c6e9152e9d27d4895806bfea644c" - integrity sha512-dKkjRE8+GU6+LtQP45nQSEJkvnW1xltdpHZQrZCKXlf/51b2gBg408JtSBhqc1NOT5t1ZxaJCKHnf91dd6g4Hg== +"@ckeditor/ckeditor5-font@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-46.0.3.tgz#2d7e6d27f6cc0841029fca64224ebeebd46963f7" + integrity sha512-4A0F3ShSn5QE0aQVus45EiIpFntJdXQnlf/kCLbQstYBUof915vReCa/c0cRu8q+1GOB9DmTarSPfb2jxDKhaA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-fullscreen@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-46.0.2.tgz#86813dfebb92a2ed6fbc8e266adeb3d3aa247f22" - integrity sha512-G+w2c5PpKRa9e5mZKR333FKkS1BH5bwKnkc0Xw4p2fowdIaytyv73fmUk2oQMTWEEe8sMMNfXCe69sfRSm4FmA== +"@ckeditor/ckeditor5-fullscreen@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-46.0.3.tgz#aaca7671cd65864924a23ac25a41990d1a0d5f31" + integrity sha512-+AjKdmknSeihgVytx2CZPvqJ8Iv0sQd8kP1AvTMsp7JWr9kP3eMZEWJ3IwUP7GaH9O+cSDqeW2pFY4rW1ajYlQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-editor-classic" "46.0.2" - "@ckeditor/ckeditor5-editor-decoupled" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-editor-classic" "46.0.3" + "@ckeditor/ckeditor5-editor-decoupled" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-heading@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-46.0.2.tgz#fdaf00bfc56f792a66060c7df9c0455486e4a5dd" - integrity sha512-AdvE53zuBGyuiBitaLPztWL/OyT3hG9F2kcdf1yG+RYovLXS6lG2Ut1tEL3jzmTNOoObWLQQ9Jpthj7gawXlQw== +"@ckeditor/ckeditor5-heading@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-46.0.3.tgz#5d90467e9e4f082d8c8ec1dc3b31474b74e0c320" + integrity sha512-FKTgc1I9nDvnoDJ6RzkmPX7knhU3k6iH8IGUngH78TIOmhcWPVzv7Sftszos/LdX+kTc1ZoWWaHo5vrk90waZg== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-paragraph" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-paragraph" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-highlight@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-46.0.2.tgz#71a95009de63164babe51df704a3bbaa8cd15130" - integrity sha512-wOLa7exXWaIObdFmXIWchgfDEUyk4+j2/B25NLXyYFhk+EVDOIA0le48Tq+nAM7cusA6PP4skwkUZCBOP31UIA== +"@ckeditor/ckeditor5-highlight@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-46.0.3.tgz#c75991f017a039a500bec66e17e8a07ed8a44533" + integrity sha512-woO40tvOomrE7PHV/LAIOuNDb6sm2xiRQpT3r6TU1bvHZWSdt+hBCVRbnPxMNY2b/+0FGeV6cIOP8jlZ6JXF2g== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-horizontal-line@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-46.0.2.tgz#65a6ed55eeee429c4f80377c38bc02a15c2b2ac3" - integrity sha512-TWpcU7xDQnqyKvvv30cYHy+57FTLEuNgUbKRs+ziP1Ywogd6X3jFVnmJk/WMCNc315v1IfDFiuaPbZn04zrmjA== +"@ckeditor/ckeditor5-horizontal-line@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-46.0.3.tgz#c57556048fbb22221a347993e2ead695f05f730a" + integrity sha512-mct0XA6XxSk9BXorR5HA6jiDmf40Wm2HbwSEL8RcCQ4s/ak+3c85loUQZtV5Enaro8ejUkQ30nbqUnrO21Z8ZA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-html-embed@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-46.0.2.tgz#cafad91a0f935ce83262c189f7b425decc6b8a3c" - integrity sha512-GJouBoKYKEP1NYrMSeu+vadP5vHsJgUBb/9yvx+kup/50u+HOylenBfVc+IdMMzZyU8ZoNw3wND5mgOpyQPLdQ== +"@ckeditor/ckeditor5-html-embed@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-46.0.3.tgz#8153337107ea4ebd6cf98e8a67f57bcf5814272a" + integrity sha512-8Cf0L1REllrVffu4BrnNiga0mQgFcQ0V/L4ARMGR3vmafTvS2cOvMyrGJy/69oCGM0NigyU1eSzkGv04o+599w== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-html-support@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-46.0.2.tgz#c07a5de1f2307e716606a6b2e89e72c986f880bb" - integrity sha512-DZAMx55Qxz7YQMy4qOCiNKf9oUp/FkAxqJRAG+102nweLQePq86w//oE6pc/mRo3q6U3/za8NLz6JP4L2duztw== +"@ckeditor/ckeditor5-html-support@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-46.0.3.tgz#65164419632b679de09dd8040bf1d8ba837e7a51" + integrity sha512-zBRJ1aBIi/UKKRhCUvK0mTDu9c43GOINKscGJ4ZRAD8WmKdlpxO+xUfCfZouDMGwd67lD9e37LI3xZc+hGCXGA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-heading" "46.0.2" - "@ckeditor/ckeditor5-image" "46.0.2" - "@ckeditor/ckeditor5-list" "46.0.2" - "@ckeditor/ckeditor5-remove-format" "46.0.2" - "@ckeditor/ckeditor5-table" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-heading" "46.0.3" + "@ckeditor/ckeditor5-image" "46.0.3" + "@ckeditor/ckeditor5-list" "46.0.3" + "@ckeditor/ckeditor5-remove-format" "46.0.3" + "@ckeditor/ckeditor5-table" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-icons@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-46.0.2.tgz#ef8994441f13c2d9bf33d8760e7093049d8ab0cc" - integrity sha512-QNLncoTeHgv4fU7Q/jv/qWH1nQMQ1JreWVQLysu1nEDlm4KiVLzP+8ng51BquY+wxw4rIVJTwZv1FYdyc6xlQw== +"@ckeditor/ckeditor5-icons@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-46.0.3.tgz#fae5dec3826f5f4a6649fa01152d1aaa234a1d30" + integrity sha512-ztmFx8ujcdIMTWeIQ8Hxixlexfhx8vcclV/+maDzjVHhqRNi9eZ1b/nQ7gnS4/X5Fnh6cPQuCM+3lTUR4jQscA== -"@ckeditor/ckeditor5-image@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-46.0.2.tgz#57d2d7e6118cf7eae5a535da0ffe9816d27fc2a3" - integrity sha512-1b72bijZ4lhysL6K9ZZBQZPldMUZwoAar4DFHmCnM/WN6psf/MEyFce+hr5Qq/LFOvCiOeevuNz6DTDKO7eXSg== +"@ckeditor/ckeditor5-image@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-46.0.3.tgz#51814618fdb9ffe29217746cb28730dbf83911ab" + integrity sha512-9XcJVJxG+fqzwTupf7EATKeVZ+tXqeWiHLip4w/vMejjX026CPjiB3rKA2K5/H25TKDrvsMBBm22RqpK25dzCw== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-undo" "46.0.2" - "@ckeditor/ckeditor5-upload" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-undo" "46.0.3" + "@ckeditor/ckeditor5-upload" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-indent@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-46.0.2.tgz#b36f7ecaeec9be0ebdc2f2fef68fd4dc468a6034" - integrity sha512-EKA4kM3uZexI6j7GzQyDuYNwY0ULRet0+AZTYbr4rEaB+Mo2zaJCJxuJw1RPTNBwE/9fVJyqYsPzb0UmSRqsGQ== +"@ckeditor/ckeditor5-indent@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-46.0.3.tgz#ee6a0279c9a09d2a8be0b43d3fb3aa48ec074417" + integrity sha512-XLdlp94Bitkki027adnOqL642kCSJphMoZZDYYpTNHQkKhJq6TDp8u66EFlo2/q1quVDgb1qlezDuShouYd1tQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-heading" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-list" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-heading" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-list" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-language@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-46.0.2.tgz#518488ca4195a62809ac8945540ac46291892743" - integrity sha512-eYwRnEkoWGabEZ4PVtSobORa+vnUQFuRetInuhDrkBwyMv9IjVUukS46AWHEjkPBO/rlI++O9SK1oOFyzOARCg== +"@ckeditor/ckeditor5-language@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-46.0.3.tgz#dad8aa2fa391c247001f2812a603234992c74dfa" + integrity sha512-JLkDnhZxP9J/Dw7uxJtBHYrdR1q2xpkIsi+Y0fhG0cejo6Lhfnv2F/1L76EO6JxhfhrkHWrDgLwr860PYvRztA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-link@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-46.0.2.tgz#8b4a6f5fe3cd3028534116b1fb8fb2f00ea42bd5" - integrity sha512-5uliK3QCIOcEsq2bgZF5Qz88cmN0E1YXUrYc5uoqC8LF0lzOimE+EA+7/dJhBZCya8/+Y/rvvpJ8SHsjhd++kg== +"@ckeditor/ckeditor5-link@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-46.0.3.tgz#383c13c5bfa08c36f7305abc17e6129174806cc2" + integrity sha512-s2wBD0QQ2Pz8wzTbh3YN83QbYRVbGp3qLwgN+8x7Y/bOuFE4AxR+JhDo14ekdXelXYxIeGJAqG2Z4SQj8v2rXQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-image" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-image" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-list@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-46.0.2.tgz#5eae9c0376e50eeb8b6bdb9c16614d71922a13c9" - integrity sha512-0Pq5UU4SP9UOlcRhxpjCoGXfDxHeqdumn8qtNbL5X5yRGqRE4GsVgJ4CkOmtZNTy1JVv1clZ37NPKh5miqTP4A== +"@ckeditor/ckeditor5-list@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-46.0.3.tgz#342a50f272b7079a3c0bc863d70855721d4c44bc" + integrity sha512-KEAnyhUO6hWWa3GO6NGS7Entn2OXutCQ2+od8l5MrqeGxmpnqj0OpPX6qn+RZTVWf1RnqwErCYQhhPoQM/mlZg== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-font" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-font" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-markdown-gfm@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-46.0.2.tgz#a6e3312bbd7066f1d96e8f8a8f6eb8946c0f1542" - integrity sha512-+PaA5D10LnxqrsdW+UI45vqjR7C0l6vWAHFR+M99v7bxHEW+hQiLS6af8FhL/yv9Sno9AL4Oqdsee1HUU7hjHA== +"@ckeditor/ckeditor5-markdown-gfm@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-46.0.3.tgz#f3c17385d7e6489e525632bff3d59166c5e6cf94" + integrity sha512-ROOQsKcb03UdzyWZOD4p6vPWUpjgBRf4VXgbxKds2z19dm3fOdUwFbolpVrmYuYzdHrI/0xWM/+waD7TEOatuQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" "@types/hast" "3.0.4" - ckeditor5 "46.0.2" + ckeditor5 "46.0.3" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1366,271 +1358,271 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-46.0.2.tgz#4b700713621a02ff6abaa9e84fa1b36438be57ec" - integrity sha512-HQqtmuZPGvMKvshVIkz9GQvnSxuvsuw1o99zHvkr73H2OpL2uRRgCwVLufKZpIsn6CMtNbWq9PlZxk6ZME6Nyg== +"@ckeditor/ckeditor5-media-embed@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-46.0.3.tgz#5efb29e50888bae4b38a1fdb79572bad2bed930a" + integrity sha512-aozP4L8WQuPOHBA5qXTQnH3kQrhFJd6/J5KjKl5EicR6MUqeDkvzSLxYnltUBPByoDvkNxHD/GIL8nevgeWCrQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-undo" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-undo" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-mention@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-46.0.2.tgz#1ced5689dd81b3b3d9d5f64da895cd540c636aa6" - integrity sha512-/2FT0TmXyxgO5CWg841Yy5PF0uGT4mmp8NQYPpamfgP6E236L/aOTJP4kHtZV5uOSEnt6P48N59MTXswXA3Glg== +"@ckeditor/ckeditor5-mention@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-46.0.3.tgz#42f2e38b6404650f2d8a09392d8069832269ccf4" + integrity sha512-a7sHtN8M5Glh20SbsB0KWlFxoothUwkq6cqNJKKAI6MrOYsOJX1WaMG2mUfhGr4VTrUieuJYxVtqMFuagbhBgQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-minimap@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-46.0.2.tgz#0eee763bcf39b475db97abf09fcf66378e2a0342" - integrity sha512-Hi0qLjWLgGSwT1u3BlDc5tXMA5eHsDm6L9Sv+LiyxPFPBgX/HQhWT6L6x4jIexHQLlDhBO5o/Hp3tnlW57K5Kg== +"@ckeditor/ckeditor5-minimap@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-46.0.3.tgz#ba170968a44a87557319ea6efcf97eb3d8923e3a" + integrity sha512-gsac1z96MaJMFzapfzqLtEqETpI3JVXMfdQV3N0+kRbFSlUeJmrR/aHLC/+GDQAttkfOuL9i4FlWQKiDeSN15w== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-page-break@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-46.0.2.tgz#8a7303490fe884a69a3026852671b37a046d5f84" - integrity sha512-8wSzQU0lwoqzMPFyZHYVJJRTc1GA5gwgtz7XVKKHtKRF9FsKmHYASHsEsjjX3TkU0dPTGnaqsttZ7mBGU9K9Ww== +"@ckeditor/ckeditor5-page-break@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-46.0.3.tgz#c0fece6af88c11cddfc600e849ec04b11390c872" + integrity sha512-6V0O0sqgZMh47knEhhj0htWK3Oxm6jfHLWA4vi9vColwJMv9imuP72vYgrClmKHfN/QtyZ+DGmaufmhaXS2ffw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-paragraph@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-46.0.2.tgz#760280a3596a08466186021a60632c931821c2ba" - integrity sha512-Mg4BxYvIzonlLe9zzFZTyiiMbW40NLue9G26lWaCUz+O2z8ms5CShNc065t4alJiihJis5Dtuho8tvPDiRgCNg== +"@ckeditor/ckeditor5-paragraph@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-46.0.3.tgz#c6ee4808048c0c2a23450ab7438bc9dc5d140f4a" + integrity sha512-3OlCeyykkhcueXmo+p/LppeCvC2TtEpljLpC042EbIOCJEbSMlYEGx/AJQGetn2JV8q9L3UKfgnltpOriXAeyg== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" -"@ckeditor/ckeditor5-paste-from-office@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-46.0.2.tgz#26534e6b080f00c1305e293411ea674e60dfd07d" - integrity sha512-eI08nXazXzdIBxKjiU7tANFAdqz1cb5+xRdzn6dmZj0QBLHdEMWZVLLng5XC2gPqB7V3gSA0XbuYeSLF6fTfQg== +"@ckeditor/ckeditor5-paste-from-office@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-46.0.3.tgz#79de54d4cdec9531f254256d8e4d251aa02f6d38" + integrity sha512-pgqBTqP3oIFbmHvk1ddICDmyvBvFE9d+jO0busPXl5oWIqTLaaumwWaredEEUJpYmu02POSrK+WPGS0Qis6mdg== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-remove-format@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-46.0.2.tgz#804850404632c21ef63b3c75007309e5959e8c5c" - integrity sha512-/Ez72jjpnvDqFtP4afNimyrqbt3xJn/ab7p4DoByqyuBJ/Wy7mkaRcw9dDO0oJB+GVWdcGeRWeYoFUYj3Yw0NQ== +"@ckeditor/ckeditor5-remove-format@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-46.0.3.tgz#9f73003093a2958f32baffda6024f07b557f28ef" + integrity sha512-rrGeK1NGE5o04/wuyMq10BD7bJ7qkVZq74dDXb7G6l1IkFWU/lY5SLt1K4FgVunY+oBcsena+hktwqgEsmEqdg== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-restricted-editing@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-46.0.2.tgz#0e23d6aa6978ff9c554ab109975608b26518b0db" - integrity sha512-WR8HciP0DcD1TB+i8zRVwroPMiCy9Z7m0kfirCSLmwWP8bn792XwU+kId9DrOWalNzfNh4BXoviaPpi0vtRcmA== +"@ckeditor/ckeditor5-restricted-editing@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-46.0.3.tgz#52b32ac9c9ecfcfa12266e313b62936dcb75a1bc" + integrity sha512-b1NUb7nEKdb0R5UOukXRXOeweOIE3Dsa64uwV/H6ZnRfdOmH37TVSKFJ2lWVvPUUljsT3SVdSZbl1aP4aA1SBA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-select-all@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-46.0.2.tgz#d7c3ebcfe0a3e4f8e181f26a26cc21b48cfe1167" - integrity sha512-qC+HAZ0BWO4daXkZ84dAu7ynMRJfhtcnUP8pR/o2D6VxJO7Cu+5MwtwfoLmSiJAUGYwcxVd/iFq3RP7ZxS4Rew== +"@ckeditor/ckeditor5-select-all@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-46.0.3.tgz#a785a8cf89ddefb07e9cc9adc02844667bc02bd6" + integrity sha512-Uxr3/+TRLUIOGubXo/86yzqLGgoEdPV2rGqz40ulrVhG1Q7hOYerJPDs67ULPq6DLukoFFARRTah+UN9EOYRRw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" -"@ckeditor/ckeditor5-show-blocks@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-46.0.2.tgz#d3e0ffd6a9184519b711d0b469a53f3f552b5fdb" - integrity sha512-J+C59BMbnAH4gPrkUlu/dccKR2NBUqrRIFa01hnDHk+ECYeJsBNlsENNPImxeay4hiF+p4cujhQnI8Xq1NkzQQ== +"@ckeditor/ckeditor5-show-blocks@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-46.0.3.tgz#a912926c7102797426040a1bc36b73dcd380fbe5" + integrity sha512-YSa+Q49hQe4oRxIFsnUjzIFRG1M5+2vWjzYwS84hQAR0xDMZDD0SqIS6poC3QewuIS/525bcnmASBwXZUrRdIA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-source-editing@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-46.0.2.tgz#7164812ce5b24c92cde99e0ffb1bec171fd66c44" - integrity sha512-UdQELANPxAMhbbKTBCOfm/dMtqgQpMcU0D58LKjvvOT35ZGyjlrvZCKmXweFtfLPK5SmQhlS9z5/yy9JIH3pVQ== +"@ckeditor/ckeditor5-source-editing@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-46.0.3.tgz#ea664512ecd36ec5a32f5ee7f7bbd48e69e279c1" + integrity sha512-zJMa7ekyaeQAqAysFZDRwPRyJ7+ejaP2twYvRJQARf/BgZ6YZdSDvSoW1gGIKN/c/f0XWOSTDBdRCciPZu9vCg== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-theme-lark" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-theme-lark" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-special-characters@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-46.0.2.tgz#0b490d77bda1f8e1c8f3da87699c154cd4de1c40" - integrity sha512-X3XuIAchgFxmKcWcc513vzzsMcN6eOPOzQlQtVr9NKgUd/Zvw7YTyxCP1Wj2w9usgLn57p2ame/7GlBt/P1quw== +"@ckeditor/ckeditor5-special-characters@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-46.0.3.tgz#94b62a510608b47247c243fe12762fdfcdb1d4b4" + integrity sha512-PihS9/nmrGXaycsI3TSqVK0qGlc2ZSE3XzL7dEKTCyUta7vvI7hCC/jDaTtfch2d0fZhnIXovlgqlj35u2PjDw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" -"@ckeditor/ckeditor5-style@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-46.0.2.tgz#23c964ede8de1715b942bc4399173100958f416c" - integrity sha512-LeP6kV0AeY1mrv6hbuQ2s10AEoJ64Vgv7XMAieg/fYE2/CIH0GAXE9/4Xt1+X8zCEddZ0HcbKCyCJG2l20xzyQ== +"@ckeditor/ckeditor5-style@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-46.0.3.tgz#d1c75502c27cfd717a93f238b702432e48a5b02b" + integrity sha512-/4kOCM0/s4O65AA6tHdTK9joPFaTs/Uk14RHlyGP6+QJQ5FcNx9g2yJ1HxhRAdkMLy3AsVol9lqqFXC00+W7BA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-html-support" "46.0.2" - "@ckeditor/ckeditor5-list" "46.0.2" - "@ckeditor/ckeditor5-table" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-html-support" "46.0.3" + "@ckeditor/ckeditor5-list" "46.0.3" + "@ckeditor/ckeditor5-table" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-table@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-46.0.2.tgz#a941a45394b3b8d5472861f98ce37dc2e67528b2" - integrity sha512-dGkTe1vEk7iDEmoRCTQszyerXvO5hrJH702kwHV5md2dlXyyJBteAJ9qHiSxf1euC2mOMMUhq7n5DlqpFAFb8A== +"@ckeditor/ckeditor5-table@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-46.0.3.tgz#39bf048644c3fcc6a9747233b54803bcd86925fe" + integrity sha512-Bt7d02s96cv28Xc+LxNRYBNrqlG7gI5xB8gjQWCuoIYHVikxtDUSBowu7q1UOkBmX/TEHuUpnYjUdBKD5M2n5w== dependencies: - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-theme-lark@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-46.0.2.tgz#b87718cc592dbaf4063319ef7fd2b080df42dbe0" - integrity sha512-sHhwOZVg0e3SHm6caeHP67VlKojtoqxiu6oCwFduC+hK4s3OhQ3J/v+FIs7wGeFPz4ReBMAp63LNJVVcllRw+g== +"@ckeditor/ckeditor5-theme-lark@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-46.0.3.tgz#3707200acb4da4a8ba2a2afadb20a8b1bc0a9edb" + integrity sha512-0w4fwXFExlcsDsPXgNrQz86WJWCUwIYJkcRbjL+K3fMRYBPGVoBO25OHL7tPy2rYvrnZindCJXW9w8FzKSsKhA== dependencies: - "@ckeditor/ckeditor5-ui" "46.0.2" + "@ckeditor/ckeditor5-ui" "46.0.3" -"@ckeditor/ckeditor5-typing@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-46.0.2.tgz#4fb72c79f084ab96c297898857289823f3c7707b" - integrity sha512-jYrsRmE1rZ6c8jtOWVm6Q3FpIT9HWdJg6fK453w4upkjWM7lH3kXxtPgSLmEATUyO/ON91VNXEGA+LGml2MHnw== +"@ckeditor/ckeditor5-typing@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-46.0.3.tgz#449eb12d2916b8d6ffe026ee19a823cbeda1b460" + integrity sha512-iyxTTWIJ1/DpjCk+Uca9bE8P+Q7nvMssustEoMd6b3n39McCxnnonW7hrLUjFsRf/lPuvcAhpvFApoy2cbBRZA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ui@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-46.0.2.tgz#d2bc6a2cbf8f557749ced031239db1f35a5f0867" - integrity sha512-c0Emy60YDY0EZl8nLPNaFoEA60cxQvfz8cD9uK7MYw9L5s4xSi+m0Nd0P2BR8gK/dfRnwiBnUyLDcu4yPMN1hw== +"@ckeditor/ckeditor5-ui@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-46.0.3.tgz#58d03f07402245ee92a9e6caad84f8a36e7770d4" + integrity sha512-5sRd7/IxWI+jL8N8CO5n35AwM5ofMieFLjvhtdzmkZsHl2hNHMHyfjERlOynp6tkX3TlelJBokqpAO7Yu+DrHA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-editor-multi-root" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-editor-multi-root" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" "@types/color-convert" "2.0.4" color-convert "3.1.0" color-parse "2.0.2" es-toolkit "1.39.5" vanilla-colorful "0.7.2" -"@ckeditor/ckeditor5-undo@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-46.0.2.tgz#94dddf6887e2d0b931aa739a52a015446b73a8d2" - integrity sha512-IOFL9rrYvk2KcNyFK9YPOENM3H7RRqtBNNmj9A9zntpqsoq+8QKqcY5BpcDeODrkOtmbrhwDwcwcek7uqI3S5g== +"@ckeditor/ckeditor5-undo@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-46.0.3.tgz#0aa086fb2df862451e525dd9f24bfd34410a2bfc" + integrity sha512-DnSBUIVOpARMDOtMrwvAOYAMZK263ubGLp48N4Yb4bpbE9VwH9KUaTNP1aRRE36wQ46KaPYiROqhnnq+RaemLQ== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" -"@ckeditor/ckeditor5-upload@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-46.0.2.tgz#3b1ab782e15b960df563daa4d5eb77a0ebb03df5" - integrity sha512-34lQ7Cx+/hiHAsY3yL+mwbD2Y1QPsqdr9VdgQU8McfwQNSh/PHBa5WplIMsdMRym8pEicj50nsli/hVl58FsZg== +"@ckeditor/ckeditor5-upload@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-46.0.3.tgz#8437e5d17db98a2c2e646f0b06e5c8941dba2b57" + integrity sha512-VfC3KG1fIaXQkzQRjIlt3b+G44DPj39jD9I5cepLN/xXsHU/EAUcJWXScsd/GlViSDR0DUDCygWyhIIbF/Vobw== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" -"@ckeditor/ckeditor5-utils@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-46.0.2.tgz#de4dff172d999b5cff5764092839f15e813ea03a" - integrity sha512-7t9PAZurES75Nz7ICadfRoGT5SbXnbxu6L5PoAxmyIGFPKICdZ6I4mVILVraPSNwgFDm/Zg2RxmiCOMWFTlxMg== +"@ckeditor/ckeditor5-utils@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-46.0.3.tgz#58831c99d3834b17146ea2a3d06d93fab932a1e2" + integrity sha512-z+4EI8IOSJpDzKdRSw0KHmLK3LMwYeZ9R207oQzswqlbvhYcUib3HhfMlwhE6pyAGYTofpZQ2btHEOaLPRCTDQ== dependencies: - "@ckeditor/ckeditor5-ui" "46.0.2" + "@ckeditor/ckeditor5-ui" "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-watchdog@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-46.0.2.tgz#ad14a7a2afe04d2e80f8ff294ade8951d1fd1815" - integrity sha512-QaXczfT5WgyteNVzbYWhZ0SBLQj/qXXRefMq0v1mpI9Iro44iMV7XmvOWhTVsskwTuNq32a1C5zMzfW0Ax69rQ== +"@ckeditor/ckeditor5-watchdog@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-46.0.3.tgz#78a6430ce6b9db0c8c0fcf5d5a2a539869ed7b29" + integrity sha512-TcSM3n9bsJ+Rpzc7NFN2BdobxXAnRJ52n0XY8CeVYZ0VA61GtG/zINH+OdEUORcpqKylH4F1ftyNEwf6cdUbPA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-editor-multi-root" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-editor-multi-root" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-widget@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-46.0.2.tgz#e84edc5f2bc477d31b6eb639949511656fba8647" - integrity sha512-uBcYwT7vTKCyuMXZIi0Qbs3neBQQp1sFFb/ClsX0elbh3UZEoVyr13uZIgl1+TrnVZa0scICJfWLbaiRHjVTXg== +"@ckeditor/ckeditor5-widget@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-46.0.3.tgz#4fda5f828f7a35e6d8b80b186d053b140cd1b5da" + integrity sha512-h5+KbQslzDVWntJQYCkSIj0huJSvE/lkjWTVCsbo2wmbKg6jusP+1oQ5ENtd7Nz4bpJlT83UkKDslSrF23xKlA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-word-count@46.0.2": - version "46.0.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-46.0.2.tgz#5ad88e49ea96294dbd3dcc3ed9e19023c433dd49" - integrity sha512-U2b1DTchEE75ndHmDMmV3y/NXFFx9yIoSYzupsPJywKVTdBFdDZvSnulEocuP/YCgWTA1VWTiAirRTmccII/Qw== +"@ckeditor/ckeditor5-word-count@46.0.3": + version "46.0.3" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-46.0.3.tgz#d0ffdb77e907f2eb913dade822a3b32b06194065" + integrity sha512-Qobva/b/79t4hD6ZgWsBT3PgGIFXU2dZW62kFDJNVkGpq1pkKboIdq7Iu57OffLDJaV+xkAmEvV6cIDWc4KADA== dependencies: - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - ckeditor5 "46.0.2" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + ckeditor5 "46.0.3" es-toolkit "1.39.5" "@csstools/selector-resolve-nested@^3.1.0": @@ -1838,9 +1830,9 @@ tslib "^2.8.0" "@fortawesome/fontawesome-free@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.0.0.tgz#e4a6788a2d395ea97e7812a096e29bf9c95b944c" - integrity sha512-X48nISrSOa89zu2VMljC4XaRf8NmgTwQBVHfS2Nu5G00ZwM31oOVrAtGxZF3b6wDYf9lJsf/Eq4cCSFKIkOWPQ== + version "7.0.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.0.1.tgz#c1ac7f07ba2df47d1de7b7236fad25c4e6ca5076" + integrity sha512-RLmb9U6H2rJDnGxEqXxzy7ANPrQz7WK2/eTjdZqyU9uRU5W+FkAec9uU5gTYzFBH7aoXIw2WTJSCJR4KPlReQw== "@gar/promisify@^1.0.1": version "1.1.3" @@ -1906,6 +1898,14 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" @@ -2076,9 +2076,9 @@ "@types/ms" "*" "@types/emscripten@^1.40.1": - version "1.40.1" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.40.1.tgz#4c34102d7cd1503979d4e6652082c23fd805805e" - integrity sha512-sr53lnYkQNhjHNN0oJDdUm5564biioI5DuOpycufDVK7D3y+GR3oUswe2rlwY1nPNyusHbrJ9WoTyIHl4/Bpwg== + version "1.41.1" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.41.1.tgz#318cc5f22c0108f62fe0ede8ef8c7aee38d6b43a" + integrity sha512-vW2aEgBUU1c2CB+qVMislA98amRVPszdALjqNCuUIJaEFZsNaFaM4g5IMXIs+6oHbmmb7q6zeXYubhtObJ9ZLg== "@types/eslint-scope@^3.7.7": version "3.7.7" @@ -2160,9 +2160,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "24.3.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.0.tgz#89b09f45cb9a8ee69466f18ee5864e4c3eb84dec" - integrity sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow== + version "24.3.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.1.tgz#b0a3fb2afed0ef98e8d7f06d46ef6349047709f3" + integrity sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g== dependencies: undici-types "~7.10.0" @@ -2393,7 +2393,7 @@ acorn-walk@^8.0.0: dependencies: acorn "^8.11.0" -acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0: +acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0: version "8.15.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -2770,9 +2770,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001737: - version "1.0.30001737" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz#8292bb7591932ff09e9a765f12fdf5629a241ccc" - integrity sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw== + version "1.0.30001741" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz#67fb92953edc536442f3c9da74320774aa523143" + integrity sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw== ccount@^2.0.0: version "2.0.1" @@ -2849,72 +2849,72 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -ckeditor5@46.0.2, ckeditor5@^46.0.0: - version "46.0.2" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-46.0.2.tgz#da85d11dc56a3cbac8599ae334f05854cedfbe8f" - integrity sha512-Ly+pG/OkF+9P7DaaaCp+VYJOm0+flxLR3Ue1thm10JnMvOW52XXYaRyoasAXoiGz6CC4lh0ZN7AtQSWu85oj3g== +ckeditor5@46.0.3, ckeditor5@^46.0.0: + version "46.0.3" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-46.0.3.tgz#aa1f52ad6542e90aa4b720e592012c979e8b8194" + integrity sha512-BGadZ1td6emWnNVbX40nygpxZMAYQvtC/wRhdhedJpjqmwXQmwLte9Y9RZg+lnomrEiLiaxzFsz1j4I6u2fBnA== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "46.0.2" - "@ckeditor/ckeditor5-alignment" "46.0.2" - "@ckeditor/ckeditor5-autoformat" "46.0.2" - "@ckeditor/ckeditor5-autosave" "46.0.2" - "@ckeditor/ckeditor5-basic-styles" "46.0.2" - "@ckeditor/ckeditor5-block-quote" "46.0.2" - "@ckeditor/ckeditor5-bookmark" "46.0.2" - "@ckeditor/ckeditor5-ckbox" "46.0.2" - "@ckeditor/ckeditor5-ckfinder" "46.0.2" - "@ckeditor/ckeditor5-clipboard" "46.0.2" - "@ckeditor/ckeditor5-cloud-services" "46.0.2" - "@ckeditor/ckeditor5-code-block" "46.0.2" - "@ckeditor/ckeditor5-core" "46.0.2" - "@ckeditor/ckeditor5-easy-image" "46.0.2" - "@ckeditor/ckeditor5-editor-balloon" "46.0.2" - "@ckeditor/ckeditor5-editor-classic" "46.0.2" - "@ckeditor/ckeditor5-editor-decoupled" "46.0.2" - "@ckeditor/ckeditor5-editor-inline" "46.0.2" - "@ckeditor/ckeditor5-editor-multi-root" "46.0.2" - "@ckeditor/ckeditor5-emoji" "46.0.2" - "@ckeditor/ckeditor5-engine" "46.0.2" - "@ckeditor/ckeditor5-enter" "46.0.2" - "@ckeditor/ckeditor5-essentials" "46.0.2" - "@ckeditor/ckeditor5-find-and-replace" "46.0.2" - "@ckeditor/ckeditor5-font" "46.0.2" - "@ckeditor/ckeditor5-fullscreen" "46.0.2" - "@ckeditor/ckeditor5-heading" "46.0.2" - "@ckeditor/ckeditor5-highlight" "46.0.2" - "@ckeditor/ckeditor5-horizontal-line" "46.0.2" - "@ckeditor/ckeditor5-html-embed" "46.0.2" - "@ckeditor/ckeditor5-html-support" "46.0.2" - "@ckeditor/ckeditor5-icons" "46.0.2" - "@ckeditor/ckeditor5-image" "46.0.2" - "@ckeditor/ckeditor5-indent" "46.0.2" - "@ckeditor/ckeditor5-language" "46.0.2" - "@ckeditor/ckeditor5-link" "46.0.2" - "@ckeditor/ckeditor5-list" "46.0.2" - "@ckeditor/ckeditor5-markdown-gfm" "46.0.2" - "@ckeditor/ckeditor5-media-embed" "46.0.2" - "@ckeditor/ckeditor5-mention" "46.0.2" - "@ckeditor/ckeditor5-minimap" "46.0.2" - "@ckeditor/ckeditor5-page-break" "46.0.2" - "@ckeditor/ckeditor5-paragraph" "46.0.2" - "@ckeditor/ckeditor5-paste-from-office" "46.0.2" - "@ckeditor/ckeditor5-remove-format" "46.0.2" - "@ckeditor/ckeditor5-restricted-editing" "46.0.2" - "@ckeditor/ckeditor5-select-all" "46.0.2" - "@ckeditor/ckeditor5-show-blocks" "46.0.2" - "@ckeditor/ckeditor5-source-editing" "46.0.2" - "@ckeditor/ckeditor5-special-characters" "46.0.2" - "@ckeditor/ckeditor5-style" "46.0.2" - "@ckeditor/ckeditor5-table" "46.0.2" - "@ckeditor/ckeditor5-theme-lark" "46.0.2" - "@ckeditor/ckeditor5-typing" "46.0.2" - "@ckeditor/ckeditor5-ui" "46.0.2" - "@ckeditor/ckeditor5-undo" "46.0.2" - "@ckeditor/ckeditor5-upload" "46.0.2" - "@ckeditor/ckeditor5-utils" "46.0.2" - "@ckeditor/ckeditor5-watchdog" "46.0.2" - "@ckeditor/ckeditor5-widget" "46.0.2" - "@ckeditor/ckeditor5-word-count" "46.0.2" + "@ckeditor/ckeditor5-adapter-ckfinder" "46.0.3" + "@ckeditor/ckeditor5-alignment" "46.0.3" + "@ckeditor/ckeditor5-autoformat" "46.0.3" + "@ckeditor/ckeditor5-autosave" "46.0.3" + "@ckeditor/ckeditor5-basic-styles" "46.0.3" + "@ckeditor/ckeditor5-block-quote" "46.0.3" + "@ckeditor/ckeditor5-bookmark" "46.0.3" + "@ckeditor/ckeditor5-ckbox" "46.0.3" + "@ckeditor/ckeditor5-ckfinder" "46.0.3" + "@ckeditor/ckeditor5-clipboard" "46.0.3" + "@ckeditor/ckeditor5-cloud-services" "46.0.3" + "@ckeditor/ckeditor5-code-block" "46.0.3" + "@ckeditor/ckeditor5-core" "46.0.3" + "@ckeditor/ckeditor5-easy-image" "46.0.3" + "@ckeditor/ckeditor5-editor-balloon" "46.0.3" + "@ckeditor/ckeditor5-editor-classic" "46.0.3" + "@ckeditor/ckeditor5-editor-decoupled" "46.0.3" + "@ckeditor/ckeditor5-editor-inline" "46.0.3" + "@ckeditor/ckeditor5-editor-multi-root" "46.0.3" + "@ckeditor/ckeditor5-emoji" "46.0.3" + "@ckeditor/ckeditor5-engine" "46.0.3" + "@ckeditor/ckeditor5-enter" "46.0.3" + "@ckeditor/ckeditor5-essentials" "46.0.3" + "@ckeditor/ckeditor5-find-and-replace" "46.0.3" + "@ckeditor/ckeditor5-font" "46.0.3" + "@ckeditor/ckeditor5-fullscreen" "46.0.3" + "@ckeditor/ckeditor5-heading" "46.0.3" + "@ckeditor/ckeditor5-highlight" "46.0.3" + "@ckeditor/ckeditor5-horizontal-line" "46.0.3" + "@ckeditor/ckeditor5-html-embed" "46.0.3" + "@ckeditor/ckeditor5-html-support" "46.0.3" + "@ckeditor/ckeditor5-icons" "46.0.3" + "@ckeditor/ckeditor5-image" "46.0.3" + "@ckeditor/ckeditor5-indent" "46.0.3" + "@ckeditor/ckeditor5-language" "46.0.3" + "@ckeditor/ckeditor5-link" "46.0.3" + "@ckeditor/ckeditor5-list" "46.0.3" + "@ckeditor/ckeditor5-markdown-gfm" "46.0.3" + "@ckeditor/ckeditor5-media-embed" "46.0.3" + "@ckeditor/ckeditor5-mention" "46.0.3" + "@ckeditor/ckeditor5-minimap" "46.0.3" + "@ckeditor/ckeditor5-page-break" "46.0.3" + "@ckeditor/ckeditor5-paragraph" "46.0.3" + "@ckeditor/ckeditor5-paste-from-office" "46.0.3" + "@ckeditor/ckeditor5-remove-format" "46.0.3" + "@ckeditor/ckeditor5-restricted-editing" "46.0.3" + "@ckeditor/ckeditor5-select-all" "46.0.3" + "@ckeditor/ckeditor5-show-blocks" "46.0.3" + "@ckeditor/ckeditor5-source-editing" "46.0.3" + "@ckeditor/ckeditor5-special-characters" "46.0.3" + "@ckeditor/ckeditor5-style" "46.0.3" + "@ckeditor/ckeditor5-table" "46.0.3" + "@ckeditor/ckeditor5-theme-lark" "46.0.3" + "@ckeditor/ckeditor5-typing" "46.0.3" + "@ckeditor/ckeditor5-ui" "46.0.3" + "@ckeditor/ckeditor5-undo" "46.0.3" + "@ckeditor/ckeditor5-upload" "46.0.3" + "@ckeditor/ckeditor5-utils" "46.0.3" + "@ckeditor/ckeditor5-watchdog" "46.0.3" + "@ckeditor/ckeditor5-widget" "46.0.3" + "@ckeditor/ckeditor5-word-count" "46.0.3" clean-stack@^2.0.0: version "2.2.0" @@ -3656,9 +3656,9 @@ duplexer@^0.1.2: integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== electron-to-chromium@^1.5.211: - version "1.5.211" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz#749317bf9cf894c06f67980940cf8074e5eb08ca" - integrity sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw== + version "1.5.214" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.214.tgz#f7bbdc0796124292d4b8a34a49e968c5e6430763" + integrity sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q== emoji-regex@^7.0.1: version "7.0.3" @@ -5728,9 +5728,9 @@ node-notifier@^9.0.0: which "^2.0.2" node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + version "2.0.20" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.20.tgz#e26bb79dbdd1e64a146df389c699014c611cbc27" + integrity sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -7390,12 +7390,12 @@ terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.11: terser "^5.31.1" terser@^5.3.4, terser@^5.31.1: - version "5.43.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" - integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== + version "5.44.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.0.tgz#ebefb8e5b8579d93111bfdfc39d2cf63879f4a82" + integrity sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.14.0" + acorn "^8.15.0" commander "^2.20.0" source-map-support "~0.5.20" From 3e8ca0617700f7bd3a4bd87ecbc4389086a96e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 19:34:31 +0200 Subject: [PATCH 15/19] Fixed text color in ckeditor editors when in dark mode Fixes issue #1016 --- assets/css/components/ckeditor.css | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/css/components/ckeditor.css b/assets/css/components/ckeditor.css index d6b3def4..5f093bf2 100644 --- a/assets/css/components/ckeditor.css +++ b/assets/css/components/ckeditor.css @@ -71,6 +71,8 @@ --ck-color-button-on-hover-background: var(--bs-secondary-bg); --ck-color-button-on-active-background: var(--bs-secondary-bg); --ck-color-button-on-disabled-background: var(--bs-secondary-bg); - --ck-color-button-on-color: var(--bs-primary) + --ck-color-button-on-color: var(--bs-primary); -} \ No newline at end of file + --ck-content-font-color: var(--ck-color-base-text); + +} From b1443a817ba22e3e3a9a54557cbd44ca26493cf9 Mon Sep 17 00:00:00 2001 From: d-buchmann Date: Sat, 6 Sep 2025 19:42:07 +0200 Subject: [PATCH 16/19] Add import permission for label profiles (#1021) --- config/permissions.yaml | 4 ++++ src/Security/Voter/LabelProfileVoter.php | 1 + 2 files changed, 5 insertions(+) diff --git a/config/permissions.yaml b/config/permissions.yaml index e5a1d65b..8cbd60c3 100644 --- a/config/permissions.yaml +++ b/config/permissions.yaml @@ -359,6 +359,10 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co label: "perm.revert_elements" alsoSet: ['read_profiles', 'edit_profiles', 'create_profiles', 'delete_profiles'] apiTokenRole: ROLE_API_EDIT + import: + label: "perm.import" + alsoSet: ['read_profiles', 'edit_profiles', 'create_profiles' ] + apiTokenRole: ROLE_API_EDIT api: label: "perm.api" diff --git a/src/Security/Voter/LabelProfileVoter.php b/src/Security/Voter/LabelProfileVoter.php index cd349ddb..1687bf45 100644 --- a/src/Security/Voter/LabelProfileVoter.php +++ b/src/Security/Voter/LabelProfileVoter.php @@ -59,6 +59,7 @@ final class LabelProfileVoter extends Voter 'delete' => 'delete_profiles', 'show_history' => 'show_history', 'revert_element' => 'revert_element', + 'import' => 'import', ]; public function __construct(private readonly VoterHelper $helper) From 411ac500baa34d2077355620fa10a3e1ebe85fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 6 Sep 2025 19:43:05 +0200 Subject: [PATCH 17/19] New Crowdin updates (#1008) * New translations messages.en.xlf (Czech) * New translations messages.en.xlf (Czech) * New translations messages.en.xlf (Czech) * New translations messages.en.xlf (Czech) * New translations messages.en.xlf (German) * New translations messages.en.xlf (German) * New translations messages.en.xlf (German) --- translations/messages.cs.xlf | 36 ++++++++++++++++++------------------ translations/messages.de.xlf | 14 ++++++++++---- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/translations/messages.cs.xlf b/translations/messages.cs.xlf index c70ad2af..7e896170 100644 --- a/translations/messages.cs.xlf +++ b/translations/messages.cs.xlf @@ -580,7 +580,7 @@ storelocation.new - Nové místo skladování + Nové umístění @@ -913,7 +913,7 @@ Související prvky budou přesunuty nahoru. edit.log_comment - Změnit komentář + Komentář ke změně @@ -2502,7 +2502,7 @@ Související prvky budou přesunuty nahoru. part.needs_review.badge - Potřeba revize + Vyžaduje kontrolu @@ -4019,7 +4019,7 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn search.regexmatching - RegEx. shoda + Reg.Ex. shoda @@ -4858,7 +4858,7 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn part.table.needsReview - Potřeba revize + Vyžaduje kontrolu @@ -5662,7 +5662,7 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn part.edit.needs_review - Potřeba revize + Vyžaduje kontrolu @@ -6357,7 +6357,7 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn user.theme.label - Téma + Vzhled @@ -6368,7 +6368,7 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn user_settings.theme.placeholder - Serverové téma + Vzhled pro celý server @@ -9718,7 +9718,7 @@ Element 3 part_list.action.action.group.needs_review - Potřeba revize + Vyžaduje kontrolu @@ -10678,7 +10678,7 @@ Element 3 log.element_edited.changed_fields.theme - Téma + Vzhled @@ -10774,7 +10774,7 @@ Element 3 log.element_edited.changed_fields.needs_review - Potřeba revize + Vyžaduje kontrolu @@ -10984,7 +10984,7 @@ Element 3 parts.import.help - Pomocí tohoto nástroje můžete importovat díly z existujících souborů. Díly budou zapsány přímo do databáze, proto před nahráním souboru sem zkontrolujte, zda je jeho obsah správný. + Pomocí tohoto nástroje můžete importovat součásti z existujících souborů. Součásti budou přímo zapsány do databáze, proto před nahráním souboru zkontrolujte jeho správný obsah. @@ -11014,7 +11014,7 @@ Element 3 parts.import.part_needs_review.help - Pokud je tato možnost vybrána, budou všechny díly označeny jako "Potřeba revize" bez ohledu na to, co bylo nastaveno v údajích. + Pokud je tato možnost vybrána, budou všechny díly označeny jako "Vyžaduje kontrolu" bez ohledu na to, co bylo nastaveno v údajích. @@ -12060,7 +12060,7 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz part.info.withdraw_modal.delete_lot_if_empty - Vymazat tento inventář, až se vyprázdní + Smazat tuto položku, pokud se vyprázdní @@ -12528,7 +12528,7 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz settings.system.customization.instanceName - Instance name + Název instance @@ -12576,7 +12576,7 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz settings.system.customization.theme - Globální téma + Globální vzhed @@ -12642,7 +12642,7 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz settings.system.privacy.useGravatar.description - Pokud uživatel nemá nastavený avatar, použijte avatar z Gravataru na základě e-mailové adresy uživatele. To způsobí, že prohlížeč načte obrázky od třetí strany! + Pokud uživatel nemá zadaný obrázek avatara, použije se avatar z Gravataru na základě e-mailu uživatele. To způsobí, že prohlížeč načte obrázky ze třetí strany! @@ -12691,7 +12691,7 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz settings.system.privacy - Ochrana osobních údajů + Soukromí diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index a5c18cdd..b579d908 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -6504,7 +6504,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr flash.password_change_needed - Ihr Password muss geändert werden! + Ihr Passwort muss geändert werden! @@ -7157,8 +7157,14 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr mass_creation.lines.placeholder Element 1 + Element 1.1 + Element 1.1.1 + Element 1.2 Element 2 -Element 3 +Element 3 + +Element 1 -> Element 1.1 +Element 1 -> Element 1.2 @@ -9006,7 +9012,7 @@ Element 3 part_list.action.part_count - %count% Bauteile ausgewählt! + %count% Bauteile ausgewählt @@ -12921,7 +12927,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.behavior.sidebar.rootNodeRedirectsToNewEntity - Wurzelknoten leitet zur Erstellung eines neuen Elements weiter + Stammknoten leitet zur Erstellung eines neuen Elements weiter From 4e9e82d9f1832486221cf3f8b79d9925701079ba Mon Sep 17 00:00:00 2001 From: d-buchmann Date: Sat, 6 Sep 2025 19:43:50 +0200 Subject: [PATCH 18/19] Replace "range" indicators with mathematical tilde in LCSC provider (#989) * Replace "range" indicators with mathematical tilde symbols in LCSC provider * Improve comment --- src/Services/InfoProviderSystem/Providers/LCSCProvider.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php index 8db53f76..2d83fc7c 100755 --- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php +++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php @@ -165,6 +165,9 @@ class LCSCProvider implements InfoProviderInterface if ($field === null) { return null; } + // Replace "range" indicators with mathematical tilde symbols + // so they don't get rendered as strikethrough by Markdown + $field = preg_replace("/~/", "\u{223c}", $field); return strip_tags($field); } From 0e9558e331de4170548762760a48f368e8664491 Mon Sep 17 00:00:00 2001 From: d-buchmann Date: Sat, 6 Sep 2025 19:49:38 +0200 Subject: [PATCH 19/19] Do not mark internal (relative) links as external and open in new tab in markdown blocks Don't handle links as external by default. Instead distiguish internal (relative) and external (absolute) links. --- .../controllers/common/markdown_controller.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/assets/controllers/common/markdown_controller.js b/assets/controllers/common/markdown_controller.js index b6ef0034..c6cb97df 100644 --- a/assets/controllers/common/markdown_controller.js +++ b/assets/controllers/common/markdown_controller.js @@ -56,12 +56,16 @@ export default class MarkdownController extends Controller { this.element.innerHTML = DOMPurify.sanitize(MarkdownController._marked.parse(this.unescapeHTML(raw))); for(let a of this.element.querySelectorAll('a')) { - //Mark all links as external - a.classList.add('link-external'); - //Open links in new tag - a.setAttribute('target', '_blank'); - //Dont track - a.setAttribute('rel', 'noopener'); + // test if link is absolute + var r = new RegExp('^(?:[a-z+]+:)?//', 'i'); + if (r.test(a.getAttribute('href'))) { + //Mark all links as external + a.classList.add('link-external'); + //Open links in new tag + a.setAttribute('target', '_blank'); + //Dont track + a.setAttribute('rel', 'noopener'); + } } //Apply bootstrap styles to tables @@ -108,4 +112,4 @@ export default class MarkdownController extends Controller { gfm: true, }); }*/ -} \ No newline at end of file +}