From 343c078b7d0c416a34235c930e0d8d147e06fd08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Mar 2026 23:58:32 +0100 Subject: [PATCH 001/108] fixed intendation of force visibility checkbox in category admin --- templates/admin/category_admin.html.twig | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/templates/admin/category_admin.html.twig b/templates/admin/category_admin.html.twig index be8c950e..e20349e9 100644 --- a/templates/admin/category_admin.html.twig +++ b/templates/admin/category_admin.html.twig @@ -40,11 +40,9 @@
{{ form_row(form.eda_info.reference_prefix) }} -
-
- {{ form_row(form.eda_info.visibility) }} -
-
+ + {{ form_row(form.eda_info.visibility) }} +
From 5243f90dd83dd4fcf7afc37efe32ba89e29369fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:07:56 +0100 Subject: [PATCH 002/108] Bump web-auth/webauthn-symfony-bundle from 5.2.3 to 5.2.4 (#1313) Bumps [web-auth/webauthn-symfony-bundle](https://github.com/web-auth/webauthn-symfony-bundle) from 5.2.3 to 5.2.4. - [Commits](https://github.com/web-auth/webauthn-symfony-bundle/compare/5.2.3...5.2.4) --- updated-dependencies: - dependency-name: web-auth/webauthn-symfony-bundle dependency-version: 5.2.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/composer.lock b/composer.lock index 8d224c67..00fafb81 100644 --- a/composer.lock +++ b/composer.lock @@ -17510,16 +17510,16 @@ }, { "name": "web-auth/webauthn-lib", - "version": "5.2.3", + "version": "5.2.4", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "8782f575032fedc36e2eb27c39c736054e2b6867" + "reference": "c346c9812d4d4a641f5ff26cd5fa4d0bf2035eeb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/8782f575032fedc36e2eb27c39c736054e2b6867", - "reference": "8782f575032fedc36e2eb27c39c736054e2b6867", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/c346c9812d4d4a641f5ff26cd5fa4d0bf2035eeb", + "reference": "c346c9812d4d4a641f5ff26cd5fa4d0bf2035eeb", "shasum": "" }, "require": { @@ -17580,7 +17580,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.3" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.4" }, "funding": [ { @@ -17592,11 +17592,11 @@ "type": "patreon" } ], - "time": "2025-12-20T10:54:02+00:00" + "time": "2026-03-08T17:01:15+00:00" }, { "name": "web-auth/webauthn-symfony-bundle", - "version": "5.2.3", + "version": "5.2.4", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", @@ -17662,7 +17662,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.3" + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.4" }, "funding": [ { @@ -21701,5 +21701,5 @@ "platform-overrides": { "php": "8.2.0" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } From 1de440d71ecd2d41ec330fa514a73fbe2425836c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:08:29 +0100 Subject: [PATCH 003/108] Bump docker/metadata-action from 5 to 6 (#1312) Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5 to 6. - [Release notes](https://github.com/docker/metadata-action/releases) - [Commits](https://github.com/docker/metadata-action/compare/v5...v6) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker_build.yml | 4 ++-- .github/workflows/docker_frankenphp.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 97c7f0cd..f4f07157 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -36,7 +36,7 @@ jobs: - name: Docker meta id: docker_meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -126,7 +126,7 @@ jobs: - name: Docker meta id: docker_meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | jbtronics/part-db1 diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index 0a1cd515..906b2fd2 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -36,7 +36,7 @@ jobs: - name: Docker meta id: docker_meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: # list of Docker images to use as base name for tags images: | @@ -127,7 +127,7 @@ jobs: - name: Docker meta id: docker_meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | partdborg/part-db From 9ea3ead2469c78dda8f921c856fbd9dea8a7f07b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:12:27 +0100 Subject: [PATCH 004/108] Bump docker/login-action from 3 to 4 (#1310) Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3...v4) --- updated-dependencies: - dependency-name: docker/login-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker_build.yml | 4 ++-- .github/workflows/docker_frankenphp.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index f4f07157..c4cab8c5 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -70,7 +70,7 @@ jobs: - name: Login to DockerHub if: github.event_name != 'pull_request' - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -142,7 +142,7 @@ jobs: - name: Login to DockerHub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index 906b2fd2..8c3bd5ca 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -70,7 +70,7 @@ jobs: - name: Login to DockerHub if: github.event_name != 'pull_request' - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -143,7 +143,7 @@ jobs: - name: Login to DockerHub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From 3abc0d8b38959898a36b735025b6512d7821faae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:15:20 +0100 Subject: [PATCH 005/108] Bump docker/build-push-action from 6 to 7 (#1311) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6...v7) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker_build.yml | 2 +- .github/workflows/docker_frankenphp.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index c4cab8c5..deac39f0 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -78,7 +78,7 @@ jobs: - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . platforms: ${{ matrix.platform }} diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index 8c3bd5ca..ffe819d9 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -78,7 +78,7 @@ jobs: - name: Build and push by digest id: build - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . file: Dockerfile-frankenphp From dca0cb8a1624d3fcdb5f6b34eea16b808f12673a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:15:36 +0100 Subject: [PATCH 006/108] Bump docker/setup-buildx-action from 3 to 4 (#1309) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker_build.yml | 4 ++-- .github/workflows/docker_frankenphp.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index deac39f0..210dbc18 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -66,7 +66,7 @@ jobs: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to DockerHub if: github.event_name != 'pull_request' @@ -121,7 +121,7 @@ jobs: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index ffe819d9..36ec322d 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -66,7 +66,7 @@ jobs: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to DockerHub if: github.event_name != 'pull_request' @@ -122,7 +122,7 @@ jobs: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Docker meta From c4d8192e760a635b67bd9804d650bc31b47e9a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20W=C3=B6rmann?= Date: Wed, 11 Mar 2026 11:28:09 +0100 Subject: [PATCH 007/108] add data-tube=false to SAML auth button (#1308) --- templates/security/login.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/security/login.html.twig b/templates/security/login.html.twig index 278f860b..0489f568 100644 --- a/templates/security/login.html.twig +++ b/templates/security/login.html.twig @@ -23,7 +23,7 @@ {% if saml_enabled %} From 45da6dacffbc6bf55509850998d04166b1c3db2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 11 Mar 2026 11:28:23 +0100 Subject: [PATCH 008/108] Update KiCad symbols and footprints lists (#1303) Co-authored-by: github-actions[bot] --- public/kicad/footprints.txt | 2 +- public/kicad/symbols.txt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt index 51f99de5..a34b9406 100644 --- a/public/kicad/footprints.txt +++ b/public/kicad/footprints.txt @@ -1,4 +1,4 @@ -# Generated on Tue Mar 3 14:26:21 UTC 2026 +# Generated on Mon Mar 9 04:23:25 UTC 2026 # This file contains all footprints available in the offical KiCAD library Audio_Module:Reverb_BTDR-1H Audio_Module:Reverb_BTDR-1V diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt index 984e4d66..54fd79d2 100644 --- a/public/kicad/symbols.txt +++ b/public/kicad/symbols.txt @@ -1,4 +1,4 @@ -# Generated on Tue Mar 3 14:27:05 UTC 2026 +# Generated on Mon Mar 9 04:24:12 UTC 2026 # This file contains all symbols available in the offical KiCAD library 4xxx:14528 4xxx:14529 @@ -22324,6 +22324,7 @@ Transistor_FET:PSMN5R2-60YL Transistor_FET:QM6006D Transistor_FET:QM6015D Transistor_FET:Q_Dual_NMOS_G1S2G2D2S1D1 +Transistor_FET:Q_Dual_NMOS_PMOS_G1S2G2D2S1D1 Transistor_FET:Q_Dual_NMOS_S1G1D2S2G2D1 Transistor_FET:Q_Dual_NMOS_S1G1S2G2D2D1 Transistor_FET:Q_Dual_NMOS_S1G1S2G2D2D2D1D1 From baeef1228aa2f9946218e29aa43f88387282fc51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 15:06:24 +0100 Subject: [PATCH 009/108] updated dependencies --- composer.lock | 483 +++++++++------ config/reference.php | 43 +- yarn.lock | 1404 +++++++++++++++++++++--------------------- 3 files changed, 1027 insertions(+), 903 deletions(-) diff --git a/composer.lock b/composer.lock index 00fafb81..5eb2aa47 100644 --- a/composer.lock +++ b/composer.lock @@ -968,16 +968,16 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", - "reference": "566acb646b001f21bc6aa7bd36a109e075f5c131" + "reference": "669e02ddb28cf8c6f2db8cd405ff4dfd905b7855" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/566acb646b001f21bc6aa7bd36a109e075f5c131", - "reference": "566acb646b001f21bc6aa7bd36a109e075f5c131", + "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/669e02ddb28cf8c6f2db8cd405ff4dfd905b7855", + "reference": "669e02ddb28cf8c6f2db8cd405ff4dfd905b7855", "shasum": "" }, "require": { @@ -1019,7 +1019,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1052,29 +1052,31 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.0-beta.1" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.0" }, - "time": "2026-02-13T15:07:33+00:00" + "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "a7d4c255519ac0438f9293b3e97d2b3bd9ca43d7" + "reference": "1f120e701de7514b558f4987085ebb1b096abf99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/a7d4c255519ac0438f9293b3e97d2b3bd9ca43d7", - "reference": "a7d4c255519ac0438f9293b3e97d2b3bd9ca43d7", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/1f120e701de7514b558f4987085ebb1b096abf99", + "reference": "1f120e701de7514b558f4987085ebb1b096abf99", "shasum": "" }, "require": { "api-platform/doctrine-common": "^4.2.9", "api-platform/metadata": "^4.2", + "api-platform/serializer": "^4.2.16", "api-platform/state": "^4.2.4", - "doctrine/orm": "^2.17 || ^3.0", + "composer/semver": "^3.4", + "doctrine/orm": "^2.17 || ^3.0.1", "php": ">=8.2" }, "require-dev": { @@ -1106,7 +1108,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1139,26 +1141,26 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.20" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.0" }, - "time": "2026-02-25T15:52:40+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/documentation", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", - "reference": "873543a827df5c25b008bd730f2096701e1943b8" + "reference": "a63a3a7f020b6a001b1228c5bd916e1a76887d1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/documentation/zipball/873543a827df5c25b008bd730f2096701e1943b8", - "reference": "873543a827df5c25b008bd730f2096701e1943b8", + "url": "https://api.github.com/repos/api-platform/documentation/zipball/a63a3a7f020b6a001b1228c5bd916e1a76887d1d", + "reference": "a63a3a7f020b6a001b1228c5bd916e1a76887d1d", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2", + "api-platform/metadata": "^4.3", "php": ">=8.2" }, "require-dev": { @@ -1177,7 +1179,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1202,27 +1204,27 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.3.0-beta.1" + "source": "https://github.com/api-platform/documentation/tree/v4.3.0" }, - "time": "2025-12-27T22:15:57+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", - "reference": "ec5f9068d3d66be63db4d80acaf518868dea1321" + "reference": "9ffbe58f8872932ed7c2afca8207c2d68629e037" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/http-cache/zipball/ec5f9068d3d66be63db4d80acaf518868dea1321", - "reference": "ec5f9068d3d66be63db4d80acaf518868dea1321", + "url": "https://api.github.com/repos/api-platform/http-cache/zipball/9ffbe58f8872932ed7c2afca8207c2d68629e037", + "reference": "9ffbe58f8872932ed7c2afca8207c2d68629e037", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2", - "api-platform/state": "^4.2.4", + "api-platform/metadata": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0" }, @@ -1247,7 +1249,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1282,39 +1284,39 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.3.0-beta.1" + "source": "https://github.com/api-platform/http-cache/tree/v4.3.0" }, - "time": "2026-02-13T15:07:33+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/hydra", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "3f2587cc3b98f46247ca458ba557c03f62e19905" + "reference": "222862316009f986e57c10f03648d615f2702e66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/3f2587cc3b98f46247ca458ba557c03f62e19905", - "reference": "3f2587cc3b98f46247ca458ba557c03f62e19905", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/222862316009f986e57c10f03648d615f2702e66", + "reference": "222862316009f986e57c10f03648d615f2702e66", "shasum": "" }, "require": { - "api-platform/documentation": "^4.2", - "api-platform/json-schema": "^4.2", - "api-platform/jsonld": "^4.2", - "api-platform/metadata": "^4.2", - "api-platform/serializer": "^4.2.4", - "api-platform/state": "^4.2.4", + "api-platform/documentation": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/jsonld": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/serializer": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", "symfony/type-info": "^7.3 || ^8.0", "symfony/web-link": "^6.4 || ^7.1 || ^8.0" }, "require-dev": { - "api-platform/doctrine-common": "^4.2", - "api-platform/doctrine-odm": "^4.2", - "api-platform/doctrine-orm": "^4.2", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", "phpspec/prophecy": "^1.19", "phpspec/prophecy-phpunit": "^2.2", "phpunit/phpunit": "^12.2" @@ -1332,7 +1334,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1369,30 +1371,30 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.2.20" + "source": "https://github.com/api-platform/hydra/tree/v4.3.0" }, - "time": "2026-02-27T10:31:31+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/json-api", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", - "reference": "d28b51d78c50451e6714ed7a0c673ec6d9070900" + "reference": "64bf11cbcaaf5cba3f6fceb243ed57d1ed6e2827" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-api/zipball/d28b51d78c50451e6714ed7a0c673ec6d9070900", - "reference": "d28b51d78c50451e6714ed7a0c673ec6d9070900", + "url": "https://api.github.com/repos/api-platform/json-api/zipball/64bf11cbcaaf5cba3f6fceb243ed57d1ed6e2827", + "reference": "64bf11cbcaaf5cba3f6fceb243ed57d1ed6e2827", "shasum": "" }, "require": { - "api-platform/documentation": "^4.2", - "api-platform/json-schema": "^4.2", - "api-platform/metadata": "^4.2", - "api-platform/serializer": "^4.2.18", - "api-platform/state": "^4.2.4", + "api-platform/documentation": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/serializer": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", "symfony/error-handler": "^6.4 || ^7.0 || ^8.0", "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0", @@ -1417,7 +1419,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1451,26 +1453,26 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.2.20" + "source": "https://github.com/api-platform/json-api/tree/v4.3.0" }, - "time": "2026-02-27T16:03:48+00:00" + "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", - "reference": "adc464d8240ac411ff8ed65ac8614b16d11f5544" + "reference": "0f66e93719fd65938528aeff900737471acb515a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-schema/zipball/adc464d8240ac411ff8ed65ac8614b16d11f5544", - "reference": "adc464d8240ac411ff8ed65ac8614b16d11f5544", + "url": "https://api.github.com/repos/api-platform/json-schema/zipball/0f66e93719fd65938528aeff900737471acb515a", + "reference": "0f66e93719fd65938528aeff900737471acb515a", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2", + "api-platform/metadata": "^4.3", "php": ">=8.2", "symfony/console": "^6.4 || ^7.0 || ^8.0", "symfony/property-info": "^6.4 || ^7.1 || ^8.0", @@ -1495,7 +1497,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1532,28 +1534,28 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.2.20" + "source": "https://github.com/api-platform/json-schema/tree/v4.3.0" }, - "time": "2026-02-25T15:52:40+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", - "reference": "08593fc073466badae67b8f4999ec19e3ade9eab" + "reference": "64bd84ac44d6c6c51142a26bfa7d4c6237d20593" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/jsonld/zipball/08593fc073466badae67b8f4999ec19e3ade9eab", - "reference": "08593fc073466badae67b8f4999ec19e3ade9eab", + "url": "https://api.github.com/repos/api-platform/jsonld/zipball/64bd84ac44d6c6c51142a26bfa7d4c6237d20593", + "reference": "64bd84ac44d6c6c51142a26bfa7d4c6237d20593", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2", - "api-platform/serializer": "^4.2.4", - "api-platform/state": "^4.2.4", + "api-platform/metadata": "^4.3", + "api-platform/serializer": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2" }, "require-dev": { @@ -1573,7 +1575,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1612,22 +1614,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.2.20" + "source": "https://github.com/api-platform/jsonld/tree/v4.3.0" }, - "time": "2026-02-13T17:30:49+00:00" + "time": "2026-03-13T08:23:46+00:00" }, { "name": "api-platform/metadata", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "af91b0d349b2aa8afffe100cce544b4d72add3eb" + "reference": "10016ebdff602c3460a49bcf7002ad0d68231e8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/af91b0d349b2aa8afffe100cce544b4d72add3eb", - "reference": "af91b0d349b2aa8afffe100cce544b4d72add3eb", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/10016ebdff602c3460a49bcf7002ad0d68231e8b", + "reference": "10016ebdff602c3460a49bcf7002ad0d68231e8b", "shasum": "" }, "require": { @@ -1640,9 +1642,9 @@ "symfony/type-info": "^7.3 || ^8.0" }, "require-dev": { - "api-platform/json-schema": "^4.2", - "api-platform/openapi": "^4.2", - "api-platform/state": "^4.2.4", + "api-platform/json-schema": "^4.3", + "api-platform/openapi": "^4.3", + "api-platform/state": "^4.3", "phpspec/prophecy-phpunit": "^2.2", "phpstan/phpdoc-parser": "^1.29 || ^2.0", "phpunit/phpunit": "^12.2", @@ -1670,7 +1672,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1710,28 +1712,28 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.2.20" + "source": "https://github.com/api-platform/metadata/tree/v4.3.0" }, - "time": "2026-02-25T15:52:40+00:00" + "time": "2026-03-13T14:49:56+00:00" }, { "name": "api-platform/openapi", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", - "reference": "dcab93037834665f16cd226dbd867022057c3a7e" + "reference": "afc45db74d474e43f8533b9c497102c699299dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/openapi/zipball/dcab93037834665f16cd226dbd867022057c3a7e", - "reference": "dcab93037834665f16cd226dbd867022057c3a7e", + "url": "https://api.github.com/repos/api-platform/openapi/zipball/afc45db74d474e43f8533b9c497102c699299dad", + "reference": "afc45db74d474e43f8533b9c497102c699299dad", "shasum": "" }, "require": { - "api-platform/json-schema": "^4.2", - "api-platform/metadata": "^4.2", - "api-platform/state": "^4.2.4", + "api-platform/json-schema": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", "symfony/console": "^6.4 || ^7.0 || ^8.0", "symfony/filesystem": "^6.4 || ^7.0 || ^8.0", @@ -1740,9 +1742,10 @@ "symfony/type-info": "^7.3 || ^8.0" }, "require-dev": { - "api-platform/doctrine-common": "^4.2", - "api-platform/doctrine-odm": "^4.2", - "api-platform/doctrine-orm": "^4.2", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", + "api-platform/serializer": "^4.3", "phpspec/prophecy-phpunit": "^2.2", "phpunit/phpunit": "^12.2", "symfony/type-info": "^7.3 || ^8.0" @@ -1760,7 +1763,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1800,27 +1803,27 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.2.20" + "source": "https://github.com/api-platform/openapi/tree/v4.3.0" }, - "time": "2026-03-01T17:00:49+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/serializer", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "bd627b86c0cb37bd2c2ca6b7f996d5301627f627" + "reference": "5dbd38307814025b9fcc6d6c7af7e522709a32f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/bd627b86c0cb37bd2c2ca6b7f996d5301627f627", - "reference": "bd627b86c0cb37bd2c2ca6b7f996d5301627f627", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/5dbd38307814025b9fcc6d6c7af7e522709a32f1", + "reference": "5dbd38307814025b9fcc6d6c7af7e522709a32f1", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2", - "api-platform/state": "^4.2.4", + "api-platform/metadata": "^4.3", + "api-platform/state": "^4.3", "php": ">=8.2", "symfony/property-access": "^6.4 || ^7.0 || ^8.0", "symfony/property-info": "^6.4 || ^7.1 || ^8.0", @@ -1828,14 +1831,15 @@ "symfony/validator": "^6.4.11 || ^7.0 || ^8.0" }, "require-dev": { - "api-platform/doctrine-common": "^4.2", - "api-platform/doctrine-odm": "^4.2", - "api-platform/doctrine-orm": "^4.2", - "api-platform/json-schema": "^4.2", - "api-platform/openapi": "^4.2", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/openapi": "^4.3", "doctrine/collections": "^2.1", "phpspec/prophecy-phpunit": "^2.2", "phpunit/phpunit": "^12.2", + "sebastian/exporter": "^6.3.2 || ^7.0.2", "symfony/mercure-bundle": "*", "symfony/type-info": "^7.3 || ^8.0", "symfony/var-dumper": "^6.4 || ^7.0 || ^8.0", @@ -1858,7 +1862,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1893,26 +1897,26 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.2.20" + "source": "https://github.com/api-platform/serializer/tree/v4.3.0" }, - "time": "2026-02-27T16:03:48+00:00" + "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/state", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "1b6f69c75579ab0f132cd45e45d5f43ed19a15a5" + "reference": "663c00f610f076f5cac8b13755805d9b5d97ff4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/1b6f69c75579ab0f132cd45e45d5f43ed19a15a5", - "reference": "1b6f69c75579ab0f132cd45e45d5f43ed19a15a5", + "url": "https://api.github.com/repos/api-platform/state/zipball/663c00f610f076f5cac8b13755805d9b5d97ff4c", + "reference": "663c00f610f076f5cac8b13755805d9b5d97ff4c", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2.3", + "api-platform/metadata": "^4.3", "php": ">=8.2", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^3.1", @@ -1921,8 +1925,8 @@ "symfony/translation-contracts": "^3.0" }, "require-dev": { - "api-platform/serializer": "^4.2.4", - "api-platform/validator": "^4.2.4", + "api-platform/serializer": "^4.3", + "api-platform/validator": "^4.3", "phpunit/phpunit": "^12.2", "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0", "symfony/object-mapper": "^7.4 || ^8.0", @@ -1950,7 +1954,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -1990,35 +1994,35 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.2.20" + "source": "https://github.com/api-platform/state/tree/v4.3.0" }, - "time": "2026-02-17T09:18:17+00:00" + "time": "2026-03-13T13:27:59+00:00" }, { "name": "api-platform/symfony", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "8e47b4429a2c41dd9a8865b1f42f93f9beac99c2" + "reference": "3b9b39f03250494ac4f3415c3d43c5678082b4d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/8e47b4429a2c41dd9a8865b1f42f93f9beac99c2", - "reference": "8e47b4429a2c41dd9a8865b1f42f93f9beac99c2", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/3b9b39f03250494ac4f3415c3d43c5678082b4d0", + "reference": "3b9b39f03250494ac4f3415c3d43c5678082b4d0", "shasum": "" }, "require": { - "api-platform/documentation": "^4.2.12", - "api-platform/http-cache": "^4.2.12", - "api-platform/hydra": "^4.2.12", - "api-platform/json-schema": "^4.2.12", - "api-platform/jsonld": "^4.2.12", - "api-platform/metadata": "^4.2.12", - "api-platform/openapi": "^4.2.12", - "api-platform/serializer": "^4.2.12", - "api-platform/state": "^4.2.12", - "api-platform/validator": "^4.2.12", + "api-platform/documentation": "^4.3", + "api-platform/http-cache": "^4.3", + "api-platform/hydra": "^4.3", + "api-platform/json-schema": "^4.3", + "api-platform/jsonld": "^4.3", + "api-platform/metadata": "^4.3", + "api-platform/openapi": "^4.3", + "api-platform/serializer": "^4.3", + "api-platform/state": "^4.3", + "api-platform/validator": "^4.3", "php": ">=8.2", "symfony/asset": "^6.4 || ^7.0 || ^8.0", "symfony/finder": "^6.4 || ^7.0 || ^8.0", @@ -2029,12 +2033,12 @@ "willdurand/negotiation": "^3.1" }, "require-dev": { - "api-platform/doctrine-common": "^4.2.12", - "api-platform/doctrine-odm": "^4.2.12", - "api-platform/doctrine-orm": "^4.2.12", - "api-platform/elasticsearch": "^4.2.12", - "api-platform/graphql": "^4.2.12", - "api-platform/hal": "^4.2.12", + "api-platform/doctrine-common": "^4.3", + "api-platform/doctrine-odm": "^4.3", + "api-platform/doctrine-orm": "^4.3", + "api-platform/elasticsearch": "^4.3", + "api-platform/graphql": "^4.3", + "api-platform/hal": "^4.3", "phpspec/prophecy-phpunit": "^2.2", "phpunit/phpunit": "^12.2", "symfony/expression-language": "^6.4 || ^7.0 || ^8.0", @@ -2077,7 +2081,7 @@ "require": "^6.4 || ^7.0 || ^8.0" }, "branch-alias": { - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -2118,26 +2122,26 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.2.20" + "source": "https://github.com/api-platform/symfony/tree/v4.3.0" }, - "time": "2026-03-03T08:06:46+00:00" + "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/validator", - "version": "v4.2.20", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", - "reference": "22968964145b3fe542b5885f6a2e74d77e7e28c3" + "reference": "c66b272ad9d19f67e8a402e61b34ea65b2df9b91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/validator/zipball/22968964145b3fe542b5885f6a2e74d77e7e28c3", - "reference": "22968964145b3fe542b5885f6a2e74d77e7e28c3", + "url": "https://api.github.com/repos/api-platform/validator/zipball/c66b272ad9d19f67e8a402e61b34ea65b2df9b91", + "reference": "c66b272ad9d19f67e8a402e61b34ea65b2df9b91", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2", + "api-platform/metadata": "^4.3", "php": ">=8.2", "symfony/http-kernel": "^6.4 || ^7.1 || ^8.0", "symfony/serializer": "^6.4 || ^7.1 || ^8.0", @@ -2162,7 +2166,7 @@ "dev-3.4": "3.4.x-dev", "dev-4.1": "4.1.x-dev", "dev-4.2": "4.2.x-dev", - "dev-main": "4.3.x-dev" + "dev-main": "4.4.x-dev" } }, "autoload": { @@ -2194,9 +2198,9 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.2.20" + "source": "https://github.com/api-platform/validator/tree/v4.3.0" }, - "time": "2026-01-26T15:45:40+00:00" + "time": "2026-03-06T15:07:49+00:00" }, { "name": "beberlei/assert", @@ -2722,6 +2726,83 @@ ], "time": "2024-11-12T16:29:46+00:00" }, + { + "name": "composer/semver", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" + }, { "name": "daverandom/libdns", "version": "v2.1.0", @@ -4753,16 +4834,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "shasum": "" }, "require": { @@ -4778,6 +4859,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", + "jshttp/mime-db": "1.54.0.1", "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { @@ -4849,7 +4931,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" + "source": "https://github.com/guzzle/psr7/tree/2.9.0" }, "funding": [ { @@ -4865,7 +4947,7 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2026-03-10T16:41:02+00:00" }, { "name": "hshn/base64-encoded-file", @@ -9297,16 +9379,16 @@ }, { "name": "robrichards/xmlseclibs", - "version": "3.1.4", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd" + "reference": "03062be78178cbb5e8f605cd255dc32a14981f92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/bc87389224c6de95802b505e5265b0ec2c5bcdbd", - "reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/03062be78178cbb5e8f605cd255dc32a14981f92", + "reference": "03062be78178cbb5e8f605cd255dc32a14981f92", "shasum": "" }, "require": { @@ -9333,9 +9415,9 @@ ], "support": { "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.4" + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.5" }, - "time": "2025-12-08T11:57:53+00:00" + "time": "2026-03-13T10:31:56+00:00" }, { "name": "s9e/regexp-builder", @@ -17953,16 +18035,16 @@ }, { "name": "ekino/phpstan-banned-code", - "version": "v3.1.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/ekino/phpstan-banned-code.git", - "reference": "dffb9b755168cdf51ddb9dfa7cf5764541e07afe" + "reference": "3356fb9dae03c8759a61fee39dab4728dcc16d74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ekino/phpstan-banned-code/zipball/dffb9b755168cdf51ddb9dfa7cf5764541e07afe", - "reference": "dffb9b755168cdf51ddb9dfa7cf5764541e07afe", + "url": "https://api.github.com/repos/ekino/phpstan-banned-code/zipball/3356fb9dae03c8759a61fee39dab4728dcc16d74", + "reference": "3356fb9dae03c8759a61fee39dab4728dcc16d74", "shasum": "" }, "require": { @@ -18013,9 +18095,9 @@ ], "support": { "issues": "https://github.com/ekino/phpstan-banned-code/issues", - "source": "https://github.com/ekino/phpstan-banned-code/tree/v3.1.0" + "source": "https://github.com/ekino/phpstan-banned-code/tree/v3.2.0" }, - "time": "2026-03-05T08:25:14+00:00" + "time": "2026-03-13T12:47:55+00:00" }, { "name": "jbtronics/translation-editor-bundle", @@ -18426,16 +18508,16 @@ }, { "name": "phpstan/phpstan-doctrine", - "version": "2.0.18", + "version": "2.0.20", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "44a216a5cd9fe52be489dcf1e2d565c473daa1ca" + "reference": "72f4f7a02d6c98d9101e8616e0488bc0a785196d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/44a216a5cd9fe52be489dcf1e2d565c473daa1ca", - "reference": "44a216a5cd9fe52be489dcf1e2d565c473daa1ca", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/72f4f7a02d6c98d9101e8616e0488bc0a785196d", + "reference": "72f4f7a02d6c98d9101e8616e0488bc0a785196d", "shasum": "" }, "require": { @@ -18496,9 +18578,9 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.18" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.20" }, - "time": "2026-02-24T10:01:00+00:00" + "time": "2026-03-13T13:44:51+00:00" }, { "name": "phpstan/phpstan-strict-rules", @@ -19148,18 +19230,18 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "68e4c6721ef8cd2c366bd5e2290baf007d3f0e6d" + "reference": "0d2dce39eb2bce812e8c71a73be98b0f5d78f489" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/68e4c6721ef8cd2c366bd5e2290baf007d3f0e6d", - "reference": "68e4c6721ef8cd2c366bd5e2290baf007d3f0e6d", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0d2dce39eb2bce812e8c71a73be98b0f5d78f489", + "reference": "0d2dce39eb2bce812e8c71a73be98b0f5d78f489", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<=4.3.16", + "admidio/admidio": "<5.0.6", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -19210,7 +19292,7 @@ "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<3.368", - "azuracast/azuracast": "<=0.23.1", + "azuracast/azuracast": "<=0.23.3", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", "backpack/crud": "<3.4.9", @@ -19296,8 +19378,8 @@ "cosenary/instagram": "<=2.3", "couleurcitron/tarteaucitron-wp": "<0.3", "cpsit/typo3-mailqueue": "<0.4.3|>=0.5,<0.5.1", - "craftcms/cms": "<4.17.0.0-beta2|>=5,<5.9.0.0-beta2", - "craftcms/commerce": ">=4.0.0.0-RC1-dev,<=4.10|>=5,<=5.5.1", + "craftcms/cms": "<=4.17.3|>=5,<=5.9.8", + "craftcms/commerce": ">=4,<4.11|>=5,<5.6", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", "croogo/croogo": "<=4.0.7", @@ -19432,6 +19514,7 @@ "flarum/flarum": "<0.1.0.0-beta8", "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", + "flarum/nicknames": "<1.8.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", "floriangaerber/magnesium": "<0.3.1", @@ -19588,7 +19671,7 @@ "librenms/librenms": "<26.2", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", - "limesurvey/limesurvey": "<6.5.12", + "limesurvey/limesurvey": "<6.15.4", "livehelperchat/livehelperchat": "<=3.91", "livewire-filemanager/filemanager": "<=1.0.4", "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", @@ -19817,7 +19900,7 @@ "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<=3.1.3", + "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", "rudloff/alltube": "<3.0.3", @@ -19833,8 +19916,8 @@ "setasign/fpdi": "<2.6.4", "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<1.2.1", - "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.6.1-dev", - "shopware/platform": "<6.6.10.7-dev|>=6.7,<6.7.3.1-dev", + "shopware/core": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", + "shopware/platform": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", "shopware/production": "<=6.3.5.2", "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev", "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", @@ -19868,7 +19951,7 @@ "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", "simplesamlphp/xml-common": "<1.20", - "simplesamlphp/xml-security": "==1.6.11", + "simplesamlphp/xml-security": "<2.3.1", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", "sjbr/sr-feuser-register": "<2.6.2|>=5.1,<12.5", @@ -19896,7 +19979,7 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.11|>=6,<6.4", + "statamic/cms": "<5.73.11|>=6,<6.6.2", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -19915,7 +19998,7 @@ "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "sylius/sylius": "<1.9.12|>=1.10,<1.10.16|>=1.11,<1.11.17|>=1.12,<=1.12.22|>=1.13,<=1.13.14|>=1.14,<=1.14.17|>=2,<=2.0.15|>=2.1,<=2.1.11|>=2.2,<=2.2.2", "symbiote/silverstripe-multivaluefield": ">=3,<3.1", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", @@ -20043,8 +20126,9 @@ "wallabag/wallabag": "<2.6.11", "wanglelecc/laracms": "<=1.0.3", "wapplersystems/a21glossary": "<=0.4.10", - "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", - "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9|>=5.2,<5.2.4", + "web-auth/webauthn-lib": ">=4.5,<4.9|>=5.2,<5.2.4", + "web-auth/webauthn-symfony-bundle": ">=5.2,<5.2.4", "web-feet/coastercms": "==5.5", "web-tp3/wec_map": "<3.0.3", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", @@ -20056,7 +20140,7 @@ "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "winter/wn-backend-module": "<1.2.4", + "winter/wn-backend-module": "<1.2.12", "winter/wn-cms-module": "<=1.2.9", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", @@ -20069,6 +20153,7 @@ "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", + "wpmetabox/meta-box": "<5.11.2", "wwbn/avideo": "<25", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", @@ -20167,7 +20252,7 @@ "type": "tidelift" } ], - "time": "2026-03-07T02:54:13+00:00" + "time": "2026-03-13T21:11:59+00:00" }, { "name": "sebastian/cli-parser", @@ -21701,5 +21786,5 @@ "platform-overrides": { "php": "8.2.0" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } diff --git a/config/reference.php b/config/reference.php index bfac5a46..0fac7f9b 100644 --- a/config/reference.php +++ b/config/reference.php @@ -2390,6 +2390,9 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * serialize_payload_fields?: mixed, // Set to null to serialize all payload fields when a validation error is thrown, or set the fields you want to include explicitly. // Default: [] * query_parameter_validation?: bool|Param, // Deprecated: Will be removed in API Platform 5.0. // Default: true * }, + * jsonapi?: array{ + * use_iri_as_id?: bool|Param, // Set to false to use entity identifiers instead of IRIs as the "id" field in JSON:API responses. // Default: true + * }, * eager_loading?: bool|array{ * enabled?: bool|Param, // Default: true * fetch_partial?: bool|Param, // Fetch only partial data according to serialization groups. If enabled, Doctrine ORM entities will not work as expected if any of the other fields are used. // Default: false @@ -2401,11 +2404,12 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * enable_json_streamer?: bool|Param, // Enable json streamer. // Default: false * enable_swagger_ui?: bool|Param, // Enable Swagger UI // Default: true * enable_re_doc?: bool|Param, // Enable ReDoc // Default: true + * enable_scalar?: bool|Param, // Enable Scalar API Reference // Default: true * enable_entrypoint?: bool|Param, // Enable the entrypoint // Default: true * enable_docs?: bool|Param, // Enable the docs // Default: true * enable_profiler?: bool|Param, // Enable the data collector and the WebProfilerBundle integration. // Default: true * enable_phpdoc_parser?: bool|Param, // Enable resource metadata collector using PHPStan PhpDocParser. // Default: true - * enable_link_security?: bool|Param, // Enable security for Links (sub resources) // Default: false + * enable_link_security?: bool|Param, // Deprecated: This option is always enabled and will be removed in API Platform 5.0. // Enable security for Links (sub resources). // Default: true * collection?: array{ * exists_parameter_name?: scalar|Param|null, // The name of the query parameter to filter on nullable field values. // Default: "exists" * order?: scalar|Param|null, // The default order of results. // Default: "ASC" @@ -2505,6 +2509,9 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * elasticsearch?: bool|array{ * enabled?: bool|Param, // Default: false * hosts?: list, + * ssl_ca_bundle?: scalar|Param|null, // Path to the SSL CA bundle file for Elasticsearch SSL verification. // Default: null + * ssl_verification?: bool|Param, // Enable or disable SSL verification for Elasticsearch connections. // Default: true + * client?: "elasticsearch"|"opensearch"|Param, // The search engine client to use: "elasticsearch" or "opensearch". // Default: "elasticsearch" * }, * openapi?: array{ * contact?: array{ @@ -2523,12 +2530,18 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * identifier?: scalar|Param|null, // An SPDX license expression for the API. The identifier field is mutually exclusive of the url field. // Default: null * }, * swagger_ui_extra_configuration?: mixed, // To pass extra configuration to Swagger UI, like docExpansion or filter. // Default: [] + * scalar_extra_configuration?: mixed, // To pass extra configuration to Scalar API Reference, like theme or darkMode. // Default: [] * overrideResponses?: bool|Param, // Whether API Platform adds automatic responses to the OpenAPI documentation. // Default: true * error_resource_class?: scalar|Param|null, // The class used to represent errors in the OpenAPI documentation. // Default: null * validation_error_resource_class?: scalar|Param|null, // The class used to represent validation errors in the OpenAPI documentation. // Default: null * }, * maker?: bool|array{ * enabled?: bool|Param, // Default: true + * namespace_prefix?: scalar|Param|null, // Add a prefix to all maker generated classes. e.g set it to "Api" to set the maker namespace to "App\Api\" (if the maker.root_namespace config is App). e.g. App\Api\State\MyStateProcessor // Default: "" + * }, + * mcp?: bool|array{ + * enabled?: bool|Param, // Default: true + * format?: scalar|Param|null, // The serialization format used for MCP tool input/output. Must be a format registered in api_platform.formats (e.g. "jsonld", "json", "jsonapi"). // Default: "jsonld" * }, * exception_to_status?: array, * formats?: array + * }>, * strict_query_parameter_validation?: mixed, * hide_hydra_operation?: mixed, * json_stream?: mixed, * extra_properties?: mixed, * map?: mixed, + * mcp?: mixed, * route_name?: mixed, * errors?: mixed, * read?: mixed, @@ -2626,6 +2664,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * validate?: mixed, * write?: mixed, * serialize?: mixed, + * content_negotiation?: mixed, * priority?: mixed, * name?: mixed, * allow_create?: mixed, diff --git a/yarn.lock b/yarn.lock index 93bf5d78..d5711903 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,160 +837,160 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.0.tgz#50bc924ddb4a03e7ad2611af5afc424c910c9948" - integrity sha512-SMGuLMvXlNK9NjKL24zjV1JK3KCQxMoafTFEW5iGiKA63g9GNmhVhpu56dT+9bRpOzDNchnSYW9ljuW04bDr4g== +"@ckeditor/ckeditor5-adapter-ckfinder@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.1.tgz#bb07943138ecd3c17b0e9634eb605e586c7d32f2" + integrity sha512-X4l4KyLgSsmAyRd/YY8R/OArOXR2Ts8NyoW6k+tLtYxEmZOhJsa6ZFSho/OVTole7IqMl+Zo93b9YaAwX23brw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-upload" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-alignment@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.0.tgz#97285531923a7d0ef9d24558c3d012b7420af353" - integrity sha512-vfu+Hsza8kW0ehf+7N1hibmWRQpJ84CTPWjM9PNtwb+irvnQ3WjAK8D0fw9dY+ZM7FtPCT9xJGCDCI5MoRZ/fA== +"@ckeditor/ckeditor5-alignment@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.1.tgz#9a06caee658ceb19959e6bb9fbbbbc32efa195c3" + integrity sha512-2u1+Eseelrm5gKKajE9X+gcPchVAIna3AkoJyCw3+Y4dBc6ElWZJEuCO7b6Omv5H7q3lQimbaqJnvIE1Z/nXOA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-autoformat@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.0.tgz#08ccfa310115a5a392ac9213438db37fb20202dd" - integrity sha512-idBf0RsdKr1sIcaupIqHksx6VPzGtCsKi4ZjAfFl4syVCvx3lPpJselkkvsdpTmw0Rqg4x8zyfMGElSL82SXuA== +"@ckeditor/ckeditor5-autoformat@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.1.tgz#0771f53e3d94202c454213f78e491aaebfff51ea" + integrity sha512-UI3HFyw7VCTM92IhE6hdIh5rp2nqOLL4vnnOFTgp7Lq6dLOVzuwsRJLIEfYxz4Xusy4UKu4zM8QX4FV1nOWsGQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-heading" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-autosave@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.0.tgz#77e91267abd1eeb7ff31b124d06c7be6a1dc8294" - integrity sha512-bU7E14bu/8paefBMtOT61P5V95fdafaG3OQXdnE5tHD7jrualznuEzek519U5VzL8Gh1Wo4cHyLA2pg1Ljyb/A== +"@ckeditor/ckeditor5-autosave@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.1.tgz#86fe0ca7c6c0db546298fe214df50f282ba0528b" + integrity sha512-7om5OHf2hBDi/Md8lVZL6fF7gCBAMVZfg8zsJqTmAW6fwl5gfenD4rggPdSa4GVt+mZXbheZx9EWc0HX1psAew== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-basic-styles@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.0.tgz#d0ec52ae4eb17b8e535998a7af9af4cfb56ce117" - integrity sha512-GYYO//eNp13ZGn7Fg7s9eSdaDLt/Hut6efC8gTkakfx2yCZqcjzjV4gBJmvaIul1hw+EzsMjBhYe4lorBAM5oA== +"@ckeditor/ckeditor5-basic-styles@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.1.tgz#afcb1f8e301c7fdfbe36dd10ac99aa152e1fa9bd" + integrity sha512-/8R59UxR/8quK8UmOLOS1xq47GnB+oMNySo8BgLHJl7qepRR5VnWU0hHB239idnFk46IVhuRciXQHjifrJiScQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-block-quote@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.0.tgz#2181daad92548af74abd139b4e9028a6edf4372f" - integrity sha512-xFydZ2+1tcv5TcqoWPtlDJ0wntujOJfIrXncqDe6wXXe/ByK5/wJu2d88XxLQFCNvn3BjP9VLBQNrKIAlpFM1A== +"@ckeditor/ckeditor5-block-quote@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.1.tgz#056a0992dcdb503f66b7b8fb5cfc37ab1cf6d24c" + integrity sha512-wyDLqGrmcDVNlRmHxXTpXg2PKImgB4yIU3UDRofFKVJiuvnZvKKvx/Oh9USVv1G1zOAPoFyoK9AQzqYNOB7AMQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-bookmark@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.0.tgz#14b93f34c8c1c13e11ee78ab634f464909a04f56" - integrity sha512-Bkxh46mHCEYM9cOSJjK6NpHtBpSyJWqYVyTrLl24SiixtHUpuXqFKKM7Jo23GjcuPBXVSdG2ax6iwUCzcFuHAg== +"@ckeditor/ckeditor5-bookmark@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.1.tgz#9b7452cf06a98bfcea754ed781499d4deca4d3bb" + integrity sha512-9HwVudGBEhbqMPkEXQTqSIACGYpOWlES7bOxdG6WfgOUOAdCiTPXFCc5f+HSMFbrwd7XJ40tycPLOa7XK14oEg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-link" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-link" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-ckbox@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.0.tgz#0a60e5e9e2de5b6e9b7ccc8f5da93d00d66e0ab1" - integrity sha512-IOpJZMc8NLe4ruLfG8jfwC84yEbTqn/0rUyKgdmTf6M5ZofpIMyaqSIU30aULBgmaXwkE/hQTbfjgaJ3UUSo5g== +"@ckeditor/ckeditor5-ckbox@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.1.tgz#56fbc40ffed21ffec0dc0e83a0c69f7547c81ab0" + integrity sha512-v083Tnbsx4z1fFW+ghMXlsf5EgB3UaSldjfRsipjIYUiUeatccgRN00Qh6qGMlYz7zZcSdUUtrOfTWL/LYPWDg== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-image" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-upload" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-cloud-services" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" blurhash "2.0.5" - ckeditor5 "47.6.0" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ckfinder@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.0.tgz#f719050a84a0b7c11b8ee968c351b948417fda93" - integrity sha512-hCuFkKx/ph5ntmCSvjO7zIxET/pL/5Q1fYt1joOE9hjaBWFMoRao87GUjJ3O751ZAkioSe90zECP8SXYz8ZlIQ== +"@ckeditor/ckeditor5-ckfinder@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.1.tgz#954c594b72ab291a359ebf0b4c62e5770426ce78" + integrity sha512-ewgqgtQaDDZHQUGby/gg2/840Go280bvx959ExQH8Y7u4fPVw8NEFYAxjcm43W6EXgMnlmsEr8+G8q8g4iKT1w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-image" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-clipboard@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.0.tgz#95c2498e5b3dc688d71184bda176863963449d00" - integrity sha512-ymkOH+O9C+v3vKTaw1iOrlJMti+7Q9ycKdP5bCc9/4ywtR6cRtZ5BnEkbK1S1CSxkijQCdpe+0tNgXI2aniD+A== +"@ckeditor/ckeditor5-clipboard@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.1.tgz#10fa242f281dceb318ca79dc6c9b022585935e70" + integrity sha512-F3KQuCnnCavm8wXvX+d1KN/obh5ux/jT9qC/71QfMKdDvHxEOzi/t3YWa1r3sztlksDQ4LtODU4uWh0vVKUpkg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-cloud-services@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.0.tgz#ba89532529c1ea856925b305b963331e72290241" - integrity sha512-8MkrqbfiglNwqkUnfL0uoBZVlHmsqvq6wXiz60fnWTpTiEmxzV95/JeT7toFafvxLO7WSzBjEcZcmc9Z6ChyAw== +"@ckeditor/ckeditor5-cloud-services@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.1.tgz#fdb1f25a132cbb8adb207a3dd8da426fe675f722" + integrity sha512-yC9aqornbxjgNhHuUX4gcuvPTLv34sc8CbUOeFYLGbD9ujwoC0fzzjzSB7u5b8fWNg6cAjzriFooJATHBvu40g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-code-block@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.0.tgz#6846c66a155807dbfb97f58afc5bac3736583e2a" - integrity sha512-SetV7GnNwUOqyaPHlzXgTuT/TrLLhQ9z3glmfIQ4A9BvV9dvP6Nb9vFeJnDHuhEwBauQS8M0DqdFc+F3qdJwsg== +"@ckeditor/ckeditor5-code-block@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.1.tgz#4f15dedc705845d45bb6b8bfb28bc7dd26be37dd" + integrity sha512-ntZBIEYLoC4/OTUgCkwwmyXwwqDk8QwFcx/1kZN7S4YtwocREZqpDH1wYT+GA2ZmGkjaBRxdTLwSVr/7bf+wqg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-core@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.0.tgz#0df87dc3294b4b91419aa064b414fbc0462827ea" - integrity sha512-kw1zN6Fv5SRiZBSCfJV8yBGmirNC+vnKBOKxiS5I50wRReH90IJnTyh5Fu/vqsmr7UtSR5xvAKhu4xg30MrsRQ== +"@ckeditor/ckeditor5-core@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.1.tgz#e5558a33b7d2d4870ee8de3345d56518748c89cf" + integrity sha512-6dtnquhjymLkNhdC9T6gk/Mf2bDnHSTZrhkByaXC96CbmQDriCgfcaAVY6pQgDNxBQ6fZrev0TnKBLfTItrMsg== dependencies: - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-watchdog" "47.6.0" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-watchdog" "47.6.1" es-toolkit "1.39.5" "@ckeditor/ckeditor5-dev-translations@^43.0.1", "@ckeditor/ckeditor5-dev-translations@^43.1.0": @@ -1034,319 +1034,319 @@ terser-webpack-plugin "^4.2.3" through2 "^3.0.1" -"@ckeditor/ckeditor5-easy-image@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.0.tgz#7d168f6ccd0adc079435643fb24c6452cf29dca4" - integrity sha512-hOTxDnCU+d3vp0eKeULQxk3rZRkkZ551OM9O1ZE9sEaOjAdndaikqSH9VEwhSKTfmRIWHrMJg1ouxw2aeHvwHw== +"@ckeditor/ckeditor5-easy-image@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.1.tgz#03b7b4180a194cbb9e60d2679471dafd2a6ada7f" + integrity sha512-hWaqibO1ZUHRIkvvAO7O0qDAIw+GN6UWbdr0wcGNLc4DcSZMUIpAfoXuiyyvE9hQEJPpfTOwA3r0znS6wXtMCg== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-upload" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-cloud-services" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-editor-balloon@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.0.tgz#4fc068f9981cdb416e825fafb1ebf167b854aee7" - integrity sha512-LsnDsovjVrif7mRbdwFJKmKI5q5xmD2Zi/8+ImsCUm6fOo9Q3nmairDoWhQ0Bm1KH1MFDFYCDzZXuiI42T2F8g== +"@ckeditor/ckeditor5-editor-balloon@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.1.tgz#ee58d45c86d213bf39eae01dcf50942805f6804f" + integrity sha512-geszCykoE9Sja2tBqyMww4etAzAExg4eGnlYbXSGiaUiC7Ks4OqRVeuvw37QsH8Q56J5FQC35ysq95nrLEB+0A== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-classic@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.0.tgz#0edcf4a104578164488bac91f3b22ef6e0145650" - integrity sha512-NF+YBnfacILu3+EvsEb5UZvE9llpcO0qfbDdxJUu+t8bHXMhZzo3kOh0Gw3mB3Yil62IVTita0P3AZvzq053zw== +"@ckeditor/ckeditor5-editor-classic@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.1.tgz#82fe9e61064ca5bbc431f1d9146710831a252945" + integrity sha512-w2QaF2ieqLqu6i9YldOpPnFezvAsXY/R/vp/c0D1ofvI1CtBRWhQ9/rRwADMoKgpcuyP2320sRG312anT8aiaA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-decoupled@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.0.tgz#f87ec232fc5b92fc9f43e0e57d55e1bae75bc95e" - integrity sha512-BgwJZUJEzR06bLf1Qk6Klilaacumk4uMZCAdQCCg4LSMNAk3eaQgccl6SUZqUH9V/NDpogIGcaDbUPWvuxJKjQ== +"@ckeditor/ckeditor5-editor-decoupled@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.1.tgz#46c286e4a9800be17a2e8252a578f4541fdab460" + integrity sha512-w047UpjHF106k0NeQLgWY03k29s5vIpS9M6Oj+f+IdKaf4TR7uSzl/CXsS+csfqwZEhtGwGV3LYJVzo35+SifA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-inline@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.0.tgz#3d515bab5137fdca3b2ca135b6af0eb56088eaa9" - integrity sha512-89B+SYsuI64mfu/qtIyYarw0qSmripIA33L3FaH6KUJpPBwwIjd5huZg6L5BXE6ZuPMGyRjRq6JapQb0zExWEQ== +"@ckeditor/ckeditor5-editor-inline@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.1.tgz#0b8d63092273517b17960a16816fc27b2230a953" + integrity sha512-UJQHbMh1nvsHMuiijmRx3y/5ssdxeJTrVjrwDoPlUsI8tfRYjkdIucd9SsRhXnV65Vk31Ah5wiFyaBb5OLXZaA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-multi-root@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.0.tgz#3c6e07e347c52095206528cc097f1a41938a0834" - integrity sha512-uA5JPlV7QFfMVErqoVdwLJbUoF/u3X3GGg5s+VMeVoVTnn3ZQ8592HVftuT87HIiI8W1NHdlrE/32+3iTnOoVA== +"@ckeditor/ckeditor5-editor-multi-root@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.1.tgz#b1b80992009aa64d48ca92760d74e25c5e146b9b" + integrity sha512-Jn55iVT2sg85NSPVe/mThLoiI0FTAEH5r48MXD1MKz1E5K0FkpdLiKyCR4onfdFLozWZW2NvU0faCkyI0BKaZQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-emoji@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.0.tgz#36c230ef55aafedb1f777273aab03531165303c2" - integrity sha512-DLoScPQAMKXpe6U3M6Dw2sed0ElQeMgun0B/j//EfBPdtqkY3IDPg/R7SlRxsYuYNf0cEWNZwaNnlL/JI6w+gA== +"@ckeditor/ckeditor5-emoji@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.1.tgz#196b45d7458482466e2b7eaea8da4740256d07e9" + integrity sha512-bnnnvRk/eYrvKLLQpJrjSV++Abpm1/8N31BNVaZyeHzaI0pddE6ikS44Ju82u7BQJaqSi2SO2Glx3u3C14rm2g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-mention" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-mention" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.0.tgz#98d8d6bec6292668695ba653f1818b63abbfd347" - integrity sha512-HjtlviZZhPDSfHS7aEYUfhVuEWCHCyjCUDd4r4vx9A+02W7G+Gg6I0lqtDqTRL/Bp5rVv3MeRrcaYU21jCFJ3Q== +"@ckeditor/ckeditor5-engine@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.1.tgz#b3d7dd701e6facd4c47e5e21be2a75dfd59f7f6b" + integrity sha512-Xb398PRhkJqtUuQ1E1pdLXTG1REIOanr7PCIRPpWvpHAIZZAuxTIqyacZC4qVTS9xI+ObxYqosf8yNvFsEtu8w== dependencies: - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-utils" "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-enter@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.0.tgz#187d1a59422e86bd3af2cc9369095bfc4d9d84cd" - integrity sha512-+WlxCGj4J+Q+BFyAWkJZ6q+t4LnDHEstQtYFT5pGj23oUSVeOBzc+7e5FqU4LLtOzYnClN7t98OGPDPOHHhS9w== +"@ckeditor/ckeditor5-enter@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.1.tgz#09d3d20895153bf0a53e30d8155b8ad3008eb1dd" + integrity sha512-H/d5L8JmZFmb5wYDi3NT4NICYuRueGUwiPgIpaaQ0gb8U3U0YVj4J5WVF/65KGiYdsuP2NupSwRqsdl8TilrdQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-essentials@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.0.tgz#9d0d8884ddac3e39f20044d845afb3301f2a3af9" - integrity sha512-rI5/FWOcMjGVtWlHisBQCtL88pCZJiB+SwpmpumdALqP99urUqbL8tFprwyv95r7o4sFPMymJYVdHGlUjKb4Dw== +"@ckeditor/ckeditor5-essentials@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.1.tgz#6ba445f35d4ef4df33e30eb8b57a1cf096ed9ba3" + integrity sha512-4A9E9GrOudYA/eWCXE9uLqEdw7RLO/OdmeY1KWGAF6B9fubieSCF+S69M3c5hMKS6KJoNjaVJ/iR91KfIyYmtw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-select-all" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-undo" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-select-all" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-find-and-replace@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.0.tgz#cf69a867e896101bea3075964bbd9cc38aa16ead" - integrity sha512-S6E6zgO3T4A5rFC3Idr7DvhD2QEov2yIrWVbkIFTc0Q4fuvuNIxoke59fvc+SYd9BeDvQawP7a3RjMBTgvVRGA== +"@ckeditor/ckeditor5-find-and-replace@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.1.tgz#c32a58de98142047d0f27d0203d3ea56228171fa" + integrity sha512-ZbKlNpFYCP0DRICJlhyTLaRlPSwdJ5W9BBrMFjHhGsKNbFJ2KHlPCqTD6nAEWc838heDBZM21jRGTM6O92FLHA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-font@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.0.tgz#28914be860c57e0fc950c61ab65fb2f3105b28bb" - integrity sha512-MZ9nUVCF+H+uYZeEy2FRlRys4kUFhuFcTJSaVNh6+obC8p9yrdRk9sSIKzH3VfJwmY9RWwEGg5udcyuQ4QT7KQ== +"@ckeditor/ckeditor5-font@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.1.tgz#562403cc367fd2111605e7cedcd17ef914bf9613" + integrity sha512-ayMtG44tLbmPBjoEudnF7kFkqX3GUO0Cb1lLd6JR5B4uyoNFuQbN3nyrtx7hMvdu0N4jl0hWcWXjdu6vNL4I6g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-fullscreen@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.0.tgz#3fdaaa584d71f9e4abbde98f1f284c6e27dd8bef" - integrity sha512-M53UtSJ5jLNwt34iqllHeW2zT7HEpZwzSWX/TLn/3Q4d95m9+HAO4vBHDkuX+wd2KTl+8MYcrXYSCNWDqWzU/A== +"@ckeditor/ckeditor5-fullscreen@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.1.tgz#0b46e3cc0873b880e8027cdc9c49e9c9550caaf8" + integrity sha512-LvA7vzeAkuc/z64kuRu17zm7EIFe0Bqt9xPA5GhfR6T9mBVG4wu62ElqylFUjFJ+macvkjSe68tBYQTAPyUWqg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-editor-classic" "47.6.0" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-editor-classic" "47.6.1" + "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-heading@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.0.tgz#86a7727c1c360a4c2c011f28cfc0d2366a306b0a" - integrity sha512-hduHYHzcY3j+K4e2O6A72ksH16I885zWjydwFOCGXnIPUTZAL9ZZLwRuhqDQ6jZ8uNPqiXcuRpZd1tFIXbKXOg== +"@ckeditor/ckeditor5-heading@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.1.tgz#b80bef3c6b3cec4aad48473a327fceb16f86ca92" + integrity sha512-4kVuMaaAylkxYkJ0PA4hUQCDTARoeokkqKh0dE3DwEZTvvWDZjBEAhIKaSVX116ByeGfImbLkBRAoNCljKNCHQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-paragraph" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-paragraph" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-highlight@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.0.tgz#408fda9a52e1ec29e1f7521e1833c75b81b02140" - integrity sha512-YXZWN6nIyVBrVvsYXkusruYYenNb84g6GgWilA2PwQxuW6CwTJ7PeAM9KkA3+HQm/hwAme+/I74940FoyOXMnA== +"@ckeditor/ckeditor5-highlight@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.1.tgz#845676a75389129793fb57db99085f863900495d" + integrity sha512-hEIAZAImLAGRsz7/d+bbh3k+9s854AxuYoTmCAN2u07muYX/pmrLrLm6cZcazjmi9J/Bow6sP/D5GeoYMWKkLA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-horizontal-line@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.0.tgz#06cafbb62c212c3cd218c04458820b1eca8b91b8" - integrity sha512-m7LZ0wS5GHfmm1rWR1xSs5a8e/CTx79k7ahZdexLmyKmVoI8d/rahsD7oPsaFz6E+lHHhFtz+mmcOURlpI8SCQ== +"@ckeditor/ckeditor5-horizontal-line@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.1.tgz#dd4f74979cc30d3cf53f364013f1bc13f3ac8471" + integrity sha512-YTSpxdrp8NteaWARH89dA+qUWAf3agw/Q1dRQF+XdiF2kaSXRPQCXJruvmy490H+3xtwUZVs/hSlwX9gT77Skg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-html-embed@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.0.tgz#364d2e8b290ffc72ac8da1122b1a9fa32bec9cae" - integrity sha512-i8/7VoWcPLuJGkGbDJVQMd63SdTVERDMcah9EqbDFR6uxX+BnhUdPDKiZmcrsIJ93uq6aiK8p3uDmoiEomWp6w== +"@ckeditor/ckeditor5-html-embed@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.1.tgz#d37cedfe079def1d5b3485b683bdea488ce22fdd" + integrity sha512-z4iYN6Il/PqpOBm+7OYM1mpXLUCbA7cMjq3MGIAwGwRHNFq8BWq/1by3P8FiF4ozaUyj8YgXXyWoggBC2qQRig== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-html-support@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.0.tgz#73833d4cb9ed7d16bfb1ef434f932cbd20344e1d" - integrity sha512-bGIhD71IUYfdC87LVh3kLDlB6UuMSyBAOPpEsOr/7r8oANhHgUI10BaImZVid03e5Wn5x+S9Jc9v1T38+eRzAQ== +"@ckeditor/ckeditor5-html-support@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.1.tgz#2d86875f247392efeaac05f1f3de392bd77a627f" + integrity sha512-F25LY88VYx0gZTrrThmt+kqF2thrwg52ZCIQeRujMd3RIueYEAEn7ZJ0p5iArDvm9qQXtLzsaijEyZr2edstPA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-heading" "47.6.0" - "@ckeditor/ckeditor5-image" "47.6.0" - "@ckeditor/ckeditor5-list" "47.6.0" - "@ckeditor/ckeditor5-remove-format" "47.6.0" - "@ckeditor/ckeditor5-table" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-remove-format" "47.6.1" + "@ckeditor/ckeditor5-table" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-icons@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.0.tgz#49b0a1055c73af21e9e5f23cd55cbe3c11978cc3" - integrity sha512-Flu9jiUG7BjVfSdIXnCx4IBshDh4G/Aw6JhnysKstA4RvAOypF7hVkuYw2tqNUdkG7YV9LbYlTlWitFvWEazkw== +"@ckeditor/ckeditor5-icons@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.1.tgz#076aa5bc4ae1d2939a7802155cd5e852387d9bc2" + integrity sha512-OEk5hPdMpE5/Cb2lZFtJL2XyMwy/S8xQzuAk2b2P2bJx33rJgU3pk9RUrayxCSa3p+tKqibOzm5GcshLJ7s7Tg== -"@ckeditor/ckeditor5-image@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.0.tgz#f05e9dcf69df7390fe25f61c1991cc981ab3afe8" - integrity sha512-7X5qtCvqTSc3hJcxe6qTZ2WVIW0Q81z4l4ehIpiNF/vg4FogsSXPyJ5xro2KrNILLIXJzMx20a7BFN2S2HcepQ== +"@ckeditor/ckeditor5-image@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.1.tgz#9824abdbb553a6e47215090e2f58be90649872b1" + integrity sha512-yy7b/7WQqN0c7/VC1Ng5svQU1btXWauBfQjFgVV3AzGa+nVeJ1ZIcV2fAkUa6mB+lCu+5ziv7b7ord22baJYzg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-undo" "47.6.0" - "@ckeditor/ckeditor5-upload" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-indent@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.0.tgz#2bec60617bd36e10aede87e34f0d192f8db903d7" - integrity sha512-Rsnw5FHUGRlzyixRtgLeCrK2u3+d1+Bliq8hlQcMWvXB7wfD1GTDSsEU2MxGM7QtGuMbqFa+gO0hfzjEFgRv5g== +"@ckeditor/ckeditor5-indent@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.1.tgz#95c00461942c7336de8c876e242bbd94236c0283" + integrity sha512-SaokgxUJevRrYfu5PKEMvVrUliybmxpb3Cx/f/JtOnPbyJSFrt05+/mt3XsqsSB0g8LaHH2PXQfD4vncGzE6DQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-heading" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-list" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-language@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.0.tgz#7f1330e37904fefb0ade9b175280c855ba5220ce" - integrity sha512-nwV0HvQ7xhADG74TdsYZaB3rgiJMlXEqZ1rUQ+Lcl/IcYWCeyL8UaW6CwHzwlod2wTwaZhoIgfEMAk0f50b+qg== +"@ckeditor/ckeditor5-language@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.1.tgz#6a15c81c08a2487db8f86943645b24b3ccbc8aea" + integrity sha512-YZpySDIa4Y40T9wwKIFsAlDujELkgUtoKw/+4Wl8BHlDnq/40VxXFbOSSXu4TnnVeqVFcnzTjp6Zv8CHtmY3yw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-link@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.0.tgz#3f990b045582ca90fbc68a95a11ced6baffd621b" - integrity sha512-YEw1y9nMqF3hYbrJ47DbeMGpyZj04uDf89tcYR5Ti27k3P4gqwCjBh/L/q+yiRmDXhfLbne7Zb4sqF6TVDBqog== +"@ckeditor/ckeditor5-link@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.1.tgz#f541baad9e44cc95b97e9ac5c97f7cb5fe145f8e" + integrity sha512-A/gjF7e00R/ESUotqR08EeGM91V031DiHiGwYn7b+iZ1bejsdEu3yQK707bZ4U6ByEYBUOMtq1bOMYUtGJl6EA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-image" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-list@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.0.tgz#e5b68eaeca34bcfabb0891f15b7a58c6820a9176" - integrity sha512-LyvFrLKZS3DjNX/9J+uRJ/AvwesqD1/+BfeqGF3eP0XWhqJLI4rePosyOl3H91050zWlDuLFINo4lYGL0xDkAw== +"@ckeditor/ckeditor5-list@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.1.tgz#fccef28ae23a39ab1b04c58fffa7fd9e04ee9c3d" + integrity sha512-k7lXRJpZ8vkMQy0EWoYD8U6rQqYuKEbrTshlIjZSuBOQ9qlAb9llJ80OO0gteYZBOCMde1BJGjCeVxSNAI6eFA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-font" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-font" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-markdown-gfm@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.0.tgz#52b1be1b4fde1c6eb42f82999746abde3a751e3d" - integrity sha512-rgL51xVnVsXafj4OwyfjG4roZg6FXHMlcEsZsympauyehdl/IJeE9Jia8fuS7Joef7PJQNpadPr/5IE499e1Xg== +"@ckeditor/ckeditor5-markdown-gfm@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.1.tgz#c6a150198f9285dd8f88155ec098166cfdf0c17e" + integrity sha512-bt4UsDKTmq5iyu5TkmxpC/Z5zZEsw8bcCr5egjgNtV5ozJF1E+54iQBjKIYNYIWRdD0PAEEGFE15QoWzSHBtxw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" "@types/hast" "3.0.4" - ckeditor5 "47.6.0" + ckeditor5 "47.6.1" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1362,271 +1362,271 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.0.tgz#4bf7b94cf0522f05108810d8c8d713e5207ddcc5" - integrity sha512-vKlNWEo8ICUzZXzpdo0ZA/rF6nzBglYI7EHRu1LSUAPeSA+gNoh8itXHRlox0wYQ1N5DT5f6Z6ZwxlK1pHQBQg== +"@ckeditor/ckeditor5-media-embed@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.1.tgz#d331856917347f4e49209469f7f84fbb5328d1ef" + integrity sha512-G18SeOxXVy+k0SQYHkw1HQtS6/PkqpX2Mv6zM7os9aG3OpPmX8tCqDK+X7TaMx3FRJlDV0ujOy5Qfs71SJrqKA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-undo" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-mention@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.0.tgz#31f14a8089fd94ab8e4ae72064610676ab02c7b6" - integrity sha512-odLiEzED4fTDn5SkM+RS5Rus32ghJp6+hcSWZIHwTTQ0QRJOGab+euKyY/PqNVP0rPI2Mq+Lz5uXRO5mfarahg== +"@ckeditor/ckeditor5-mention@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.1.tgz#f678033198144b7bdc92f416d5ef8fa639bd6b20" + integrity sha512-/53LFzYqcgvd8pL02XlNBduucfnakDVvY86vC02spDuTsUH5qUMqLaz2FHSo9AH2y3kNVp98KDnqI/QjNZCd+Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-minimap@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.0.tgz#115dade48515cf7604a90008c6b8ae104c3fb484" - integrity sha512-4hdS2HpkoYsx8cVsMFntN1nsvS0xsA8pHGiJFUMMNqooy77qDMRlAeaprRth+rQqruVNldGAdlnIs7LfqXoJug== +"@ckeditor/ckeditor5-minimap@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.1.tgz#1805a4be3eaec417880a0e37363cb7b2325e6e68" + integrity sha512-ksKOy4wxzs3pkhfzVtnnsu5rgJxqYHMKM7X8Rkhx9BSshcKFeuNIUVsSh+7QWDQStWKSZ/qAx+0rezdJCm6gvQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-page-break@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.0.tgz#b341b2263f155dbf1584db28772d2261776591f9" - integrity sha512-XpWPVmbCtBJD1kOtBqV/LjsVByt94xlhgk9IXXW8QE/XOoNh5Yb2JE3MisHSZ0yM3kXauROM0SWT1FVMYXx2RQ== +"@ckeditor/ckeditor5-page-break@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.1.tgz#c9f2d30a6bf1071c22bd65bbb553ce652f4945e8" + integrity sha512-KBE1tLsnyIsh0v+S6p0G+WglkvfWvKCkOESmap+gct5xwmOE0HEgRVp6xFFBfHYuGSjSISvgUU4ofdnhseZivA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-paragraph@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.0.tgz#6b9f0e7a00240b6b9a7353dd64c8bee9eed93ea9" - integrity sha512-CxSIn9OLg/7Ol/TpwL+vZxgwwksMvR2ESI2kcSp94R8q3W8du2yoYSdPw0RzQtDuHmdGFs8JuN6xLYEU37oLBw== +"@ckeditor/ckeditor5-paragraph@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.1.tgz#943629d7de22d7cf272a6744fb96947c6c071ac7" + integrity sha512-6FXs94lSb6n7V7Puwp1c9BMyjycOfsAjdPRSVGTx1THqQBziQZHuZeU9LBxJZBA1mzoQOfmFaC3v+wb8odBgAQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-paste-from-office@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.0.tgz#c3ce43517387356d787f4a777866f5fb1116cb3c" - integrity sha512-lS33vEq8l8MoxJe5aSC3Pem1pt+SAHI/zlf83twmBw/pb0nDjuB3HjkK+Y4Qbe5RQc/4llPJ/PN8VlR5QWyBcg== +"@ckeditor/ckeditor5-paste-from-office@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.1.tgz#63c514fcbf6d4b576b9cb627b6031f4f8864f0d1" + integrity sha512-Lt/V8/q59WuPURpwS9Z1UWUU1q5fF7YUbDAapWatzJlK9J/c969nRMG2aXm3z+BjXv3Kdu9qs4Oqngw0sJ0KiA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-remove-format@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.0.tgz#5b5a00f7fa9501b2e2da3bc4d7b0e7204c834efb" - integrity sha512-9+ygu79dgcynGYnQ5xkBOOwRS4DseF1gkSG4fsOfgR+53yGaDfmHrHAX4DBOrirpFPVYxBWkrbFPMY+2Wcvo4g== +"@ckeditor/ckeditor5-remove-format@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.1.tgz#96bdb0c0657cf85464970e8aa17924d6cf9b3a3f" + integrity sha512-2lQvT4+OVIFQs67yKh54exnT5UV1rPjEZX7MqyhZ3Dr0rzyEW7b9tpFz7bP/EUOSa2LpFktNoLFOSnIAZnQdyQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-restricted-editing@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.0.tgz#95d063b835a10a0b0ce8e2f311292aed639817c1" - integrity sha512-vZ0ITt/ozwwUVP57GhqK7Q82yeOd3s3YgjNmNu2EFpd1apR2pYkNTJ2urghUiutVWQwBYum/H1WMwUxdOKC2tw== +"@ckeditor/ckeditor5-restricted-editing@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.1.tgz#9308ae80f8740d9b9df662c51b47a0140757439a" + integrity sha512-ufWtexBPqBxJNNjjIw9XQe8Q+cnwLV4en6PTvdBX/zXHq87QdjpFk6NRSLCgDTpNmO2GiXnl+FsqUjGJF27zDQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-select-all@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.0.tgz#b14def862dba6847f237cfe4c732f799817bc6e5" - integrity sha512-AT6/MSUivNd3x0hYYTb8oVGtAdJ5mNJBCwM8RvjkWmX5RhqGv5xVAHt26w13mH+GNGyhot3aKVrmPgTfY7Zmqg== +"@ckeditor/ckeditor5-select-all@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.1.tgz#ecbe703910721ccfc526ed3a535c8c784a52f798" + integrity sha512-NKhujjJ04UdM/pObi45+q6Em0fD6pQ1m+g5qLgTsTyoFUq2rFhMZqeRSPGEXlfuR5dImA7hP8uQtXNtt/GpZ7g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-show-blocks@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.0.tgz#45eeee2b5bb56bc868e204c98613f992efff7560" - integrity sha512-jh9zSrHzjKf8Wqy6Y71+0sjkoCIiLJM13aIseaNuSuxpTU9RvSxciZp2wjpixjsWg3g0iD91QV+XPrVoEkfjgw== +"@ckeditor/ckeditor5-show-blocks@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.1.tgz#66b10152e8b205b91eb97bea598369536c5296c7" + integrity sha512-9MdxI7TjccCOcbdlzX+SBjFvt8CsdxCgyoJxZ2NYut6QJAJ6WPjH0yVxckZXC3LSkqIPzrIOJxHc7e2n+oFFvA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-source-editing@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.0.tgz#0e1ea17f435280b957cc442834212e26b5b1499f" - integrity sha512-3GD5xVrvl7ddifeF99pSPmekJhoFZmLizboBBIln6n/ZdHm4wXHCmF9ELvUSPJsxFiHASWtEVEMyHVKk6A3J8g== +"@ckeditor/ckeditor5-source-editing@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.1.tgz#041d16a8dfca9069ed0ddfe2b92f69f98f965003" + integrity sha512-/NeN6KvgdlvmBzOGH1Uxk26zGti8HvvmBbHLOCzFqfXZRLHB+47BG+GtzOa82t6YnLjK7pvR23opyAApRf6zIA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-theme-lark" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-theme-lark" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-special-characters@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.0.tgz#25c69b01bb9a8ebdaed87cf254a3d885efb65d29" - integrity sha512-QVkL19eOEJshIEBjBHU9XP/DXY2P1xgts7EAC4e+XRvfL/wZLzVdCZZaIC4ELdiZD1wYUGpbL+jiV/twGQxWmg== +"@ckeditor/ckeditor5-special-characters@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.1.tgz#9f89ec11f7cf1e558b4031646d6fc352be1292bb" + integrity sha512-O+WRAaDh3m/i3lWF+MaB0G++nBusB/uaB+koN+gwqiIfDHpGJ9HKr+KXrMZZYb0MjiGV0J5gswuwL+YvzNZ6rg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-style@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.0.tgz#35055e113ea3a21f59009b5dbe89cd1bef48909a" - integrity sha512-kr2KsSXxwWwkcox85OP8FIIjhoNDhSUURErf/B7kMf28CZcsV8wNv9a0A0gMk0FQDstmtXjUEsRgdHWIzpr/IA== +"@ckeditor/ckeditor5-style@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.1.tgz#b1271c0b639a5c75a711950826358e407bc23245" + integrity sha512-WD9lzsgIk3sB+Ec/mpgbYIZXr8cRBOcDAjFndfjuSQMZRYM5kCMpIz0qpvjGp1Glz2bmeg7CwfuLDvbZSqZrfA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-html-support" "47.6.0" - "@ckeditor/ckeditor5-list" "47.6.0" - "@ckeditor/ckeditor5-table" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-html-support" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-table" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-table@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.0.tgz#6d9bce4500e96e3e9a4bd3271661239903117864" - integrity sha512-JkyEJpm/WDr9U6eQ0a9wN5MUVAoqP0lk6KPnAGn64TCHAs36raeTgNEIeLbWs+1rYcl3N5IiEG+J3TNzlPpjNA== +"@ckeditor/ckeditor5-table@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.1.tgz#6ec1f74b80fab7df6cae5ba5e7071bcd2afacd0c" + integrity sha512-zFJWnqL0PpdlSs8U1m5Mu/gcuoJfi0GSpDqr174dqXLtFcMfIsftVWVTbY5d4f+OKAp8LifxOg3CMvLD1YNSGA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-theme-lark@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.0.tgz#a9f2ffaf65907e0d98552e5fe15818cdd9aab9f9" - integrity sha512-zXZLMcTcR7dSeeybQ5qOnaAk/UicN7BzyRJEFVRKTXpKCloaMFv6YX3xneEpAdH39cY265FhfVSu/Vwvthdr0Q== +"@ckeditor/ckeditor5-theme-lark@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.1.tgz#96076019c59ed0d0f6a05b56e4597ef136cc10b9" + integrity sha512-iaRFqt6ExGAAsOc4AfJNbMyY+jnh//gMzGendqklhQzkwV3RGzN6buRtV0Fps+pKXnpRcbqaVHWv0GOIOaG58Q== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.0" + "@ckeditor/ckeditor5-ui" "47.6.1" -"@ckeditor/ckeditor5-typing@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.0.tgz#c676c6e169a819e91389336effc4f0f98868b438" - integrity sha512-7dZylw4YGpxM4yXOO/vT9itMfJlyzkRe1+S3eC34Thh7q4pOOYERQQHuMVi4x+bifMyhR3AgpY8OdJ58R3gLqg== +"@ckeditor/ckeditor5-typing@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.1.tgz#4246eaf121ea07a491883c345c077953a2eedfb2" + integrity sha512-yuMJCK6+KpYyXHxkBKRtVuOF1L42eyhUlCCq4sNFHjoJfD3q3gunmesoGIkdezMZR5RpqpGSfrOapEG9orOBTg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ui@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.0.tgz#c75c46a11e700097dad388f90380aa8e02e61ab5" - integrity sha512-bwQyS0APV01GIRzUtp7MLn8lVK60WKRCCs1FNYnpT+oPULgF4XycXwEoARzctfCdhoda3aQulVReC/tZkUeZkw== +"@ckeditor/ckeditor5-ui@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.1.tgz#d2f2f7aaf439cb04027b2c91a083546bd81483e4" + integrity sha512-zBEfMSpR26rVPvc9X4KXxQd0wQG42EM+37VHdrfwJL47PFlqXTGlbsZ9BBjlElNM1mpViWSW9zpt5JdE6vtHCQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" "@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@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.0.tgz#b44336204216702f328cecbe3beeb23cb9f720ff" - integrity sha512-sUXZCd2ZvKEKKZTzAQWaIrJfUO7E22w6+4rnx3i5H9YyUBiJF53r/O4/HJGZxshTskZe2f9nHp5pHSbFSC8UlA== +"@ckeditor/ckeditor5-undo@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.1.tgz#83d13e705bacfc3140a1ccf53fe7fac46e5ad9dd" + integrity sha512-kxckLxZHglOTv0yd7cROpZAgOQFR7uJEKy+ehGaPrPy5eMrIhUqHcDWHv4sLNJfNg1IgQrsqYNHeIaTzT38RvQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-upload@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.0.tgz#d6c186f3c91c7b464e40b9a9c3306dcd48845e86" - integrity sha512-bCjMHRfQWImu/6bmvPbOjdb3Kl+mT52SX3XKp5kmnKPESQhdfrWqVSr8H8+QpJi+0GuSxVEE3GcawPNwK+NqEg== +"@ckeditor/ckeditor5-upload@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.1.tgz#64c7fcf731c87bb9fc2a44f5ad8e45ae0a6f507d" + integrity sha512-GFMKl6pct+r26EQ4K2D22xokyDQIoRYQZSZFoPl4L04FFPVRuG60pA1YSNtyi7Am+T1fR3qOVBHAuXsANyeL6g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-utils@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.0.tgz#ce8f38cdc063a15853cac311ddbcf5de87baffcc" - integrity sha512-+IWW2h6lGjXjLM6qlTHhB8xA7aR500KYQ7FteIn+5Aa5fT0ytyth8+AtmqpVJgXEtIK7GRCuexp1SFAcGntB/g== +"@ckeditor/ckeditor5-utils@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.1.tgz#6ef2d87fc795dc70802bb9c0a6dc5938193e4192" + integrity sha512-gJl5DikvPjMEsv9DZmEVv6GOZEjHQN3kgaxvaAYpfg4VcT1RENHw46BfvPN/zUHsYwZlh7DxG3+o7h3M8Pzj1w== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.0" + "@ckeditor/ckeditor5-ui" "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-watchdog@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.0.tgz#0b54d2331affb4536effef93909d343817b95c83" - integrity sha512-0oxx4Gxy5M7V3n4Iy7z6N10MzR/fwrOkFipaiisUbeMb0vHkprI4/i3i/I76iwLGYReSzu7E2Ha6+r9k5dtlfQ== +"@ckeditor/ckeditor5-watchdog@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.1.tgz#fe36e3150595c3efd25d41c554de3db08dc59717" + integrity sha512-mHum5WRT5PKiL80UwNMXiw//s1486smeCO2sgYJKZGrqlz7cSSHDOc8iUi8Cn2YuHvTfjgRjgcZxn0u9uhr1Mw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-widget@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.0.tgz#eaf198832e7defb83c9549786b16829dc093f300" - integrity sha512-/HMwSHiupKVDSEDFgqzfhGEksXN83bM/VTE00e1d4lP4CpNx6HAIopajPHu4dMDFLnIPPqFbtwdTKX9S/ffH3Q== +"@ckeditor/ckeditor5-widget@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.1.tgz#6f1fb87891e825a849cb7c79cf9265bfe0f68403" + integrity sha512-rURYZlY9w+qjumkQ+VQ1cO32JJbuxuGoWIPj2lTC3uFjn6kDzYB9KvNItOykBJM/V11R7sEEOWvpKlnsMmlnzg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-word-count@47.6.0": - version "47.6.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.0.tgz#2b367dbba743b34d26b65f92cbfa6413d8ff9388" - integrity sha512-XDZSCXWsbbGzG4Cimbl9ArS3mKD7IllvQGYOHZgry80iqvI+V488G7baAlNV+adgdAdeCeaI0VZjdJSrQ8brUQ== +"@ckeditor/ckeditor5-word-count@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.1.tgz#dd494e1529897e5ad6247abc06d07ceb2f38d8c0" + integrity sha512-q/8jRqtEFQ5SQEY8GsJBtatD7OdQT2f1o7KdKVDcZ4UZTQCo2hi9d2zvHEkQ7drA0LO+D3WJrHNEd+B6wk1slg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - ckeditor5 "47.6.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" es-toolkit "1.39.5" "@csstools/selector-resolve-nested@^3.1.0": @@ -1878,10 +1878,10 @@ dependencies: "@sinclair/typebox" "^0.34.0" -"@jest/types@30.2.0": - version "30.2.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.2.0.tgz#1c678a7924b8f59eafd4c77d56b6d0ba976d62b8" - integrity sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg== +"@jest/types@30.3.0": + version "30.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.3.0.tgz#cada800d323cb74945c24ac74615fdb312a6c85f" + integrity sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw== dependencies: "@jest/pattern" "30.0.1" "@jest/schemas" "30.0.5" @@ -2156,9 +2156,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.3.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.3.5.tgz#beccb5915561f7a9970ace547ad44d6cdbf39b46" - integrity sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA== + version "25.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" + integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== dependencies: undici-types "~7.18.0" @@ -2556,9 +2556,9 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" "babel-loader@^9.1.3 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.1.0.tgz#3ac62a9a47dba6b1be77fb24764ec5784981fbbe" - integrity sha512-5HTUZa013O4SWEYlJDHexrqSIYkWatfA9w/ZZQa7V2nMc0dRWkfu/0pmioC7XMYm8M7Z/3+q42NWj6e+fAT0MQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.1.1.tgz#ce9748e85b7071eb88006e3cfa9e6cf14eeb97c5" + integrity sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg== dependencies: find-up "^5.0.0" @@ -2602,11 +2602,11 @@ balanced-match@^4.0.2: integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== barcode-detector@^3.0.0, barcode-detector@^3.0.5: - version "3.1.0" - resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.0.tgz#ce340cead9f267951f4c53887ac24b64c21a79c4" - integrity sha512-aQjGxrgsb/WTlw6pHZwFRO6NhFMhwHGEkd0pzV25fBn8dnRA1PA1G7bLeAzvSea646S/96nW5W3jD8wezQZ1vQ== + version "3.1.1" + resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.1.tgz#4ce6ecab6eee237b53755269683309a28760c0d1" + integrity sha512-ghWlEAV93ZCUniO7Co3ih/01XPm+U30CV+NoPbO6Chj5lZzHydDAqKlrBEd+37TkoR+QTH3tnnwd8k8epGTfIg== dependencies: - zxing-wasm "3.0.0" + zxing-wasm "3.0.1" base64-js@1.3.1: version "1.3.1" @@ -2619,9 +2619,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9" - integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA== + version "2.10.8" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz#23d1cea1a85b181c2b8660b6cfe626dc2fb15630" + integrity sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ== big.js@^5.2.2: version "5.2.2" @@ -2789,9 +2789,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001777" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz#028f21e4b2718d138b55e692583e6810ccf60691" - integrity sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ== + version "1.0.30001779" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz#75e4941d406928ba00c8d7a3ddda0b2cb90d7474" + integrity sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA== ccount@^2.0.0: version "2.0.1" @@ -2868,72 +2868,72 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@47.6.0, ckeditor5@^47.0.0: - version "47.6.0" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.0.tgz#f9391aaebb435bdb1b9b8ecc3e8b38ebbdee94a4" - integrity sha512-OynbpuohqK5XV+d5itPRMnXrFjbrTcJQp8xwFbeZzvD58aeoxVSLnM8hX2V6o3wM6OvkBdSGuKq+XhjKcRfM9g== +ckeditor5@47.6.1, ckeditor5@^47.0.0: + version "47.6.1" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.1.tgz#b4d37c5d9695b83b6267197ec30d9435390f9a5c" + integrity sha512-Za7+Dyju3RgfH4TF+zam7lvfOSr+Rd+0tABfR16HEtsARRPEmNBHYgS5nM3PZtNK4+ScliL6Ch3GFk7cd/TiOw== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.0" - "@ckeditor/ckeditor5-alignment" "47.6.0" - "@ckeditor/ckeditor5-autoformat" "47.6.0" - "@ckeditor/ckeditor5-autosave" "47.6.0" - "@ckeditor/ckeditor5-basic-styles" "47.6.0" - "@ckeditor/ckeditor5-block-quote" "47.6.0" - "@ckeditor/ckeditor5-bookmark" "47.6.0" - "@ckeditor/ckeditor5-ckbox" "47.6.0" - "@ckeditor/ckeditor5-ckfinder" "47.6.0" - "@ckeditor/ckeditor5-clipboard" "47.6.0" - "@ckeditor/ckeditor5-cloud-services" "47.6.0" - "@ckeditor/ckeditor5-code-block" "47.6.0" - "@ckeditor/ckeditor5-core" "47.6.0" - "@ckeditor/ckeditor5-easy-image" "47.6.0" - "@ckeditor/ckeditor5-editor-balloon" "47.6.0" - "@ckeditor/ckeditor5-editor-classic" "47.6.0" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.0" - "@ckeditor/ckeditor5-editor-inline" "47.6.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.0" - "@ckeditor/ckeditor5-emoji" "47.6.0" - "@ckeditor/ckeditor5-engine" "47.6.0" - "@ckeditor/ckeditor5-enter" "47.6.0" - "@ckeditor/ckeditor5-essentials" "47.6.0" - "@ckeditor/ckeditor5-find-and-replace" "47.6.0" - "@ckeditor/ckeditor5-font" "47.6.0" - "@ckeditor/ckeditor5-fullscreen" "47.6.0" - "@ckeditor/ckeditor5-heading" "47.6.0" - "@ckeditor/ckeditor5-highlight" "47.6.0" - "@ckeditor/ckeditor5-horizontal-line" "47.6.0" - "@ckeditor/ckeditor5-html-embed" "47.6.0" - "@ckeditor/ckeditor5-html-support" "47.6.0" - "@ckeditor/ckeditor5-icons" "47.6.0" - "@ckeditor/ckeditor5-image" "47.6.0" - "@ckeditor/ckeditor5-indent" "47.6.0" - "@ckeditor/ckeditor5-language" "47.6.0" - "@ckeditor/ckeditor5-link" "47.6.0" - "@ckeditor/ckeditor5-list" "47.6.0" - "@ckeditor/ckeditor5-markdown-gfm" "47.6.0" - "@ckeditor/ckeditor5-media-embed" "47.6.0" - "@ckeditor/ckeditor5-mention" "47.6.0" - "@ckeditor/ckeditor5-minimap" "47.6.0" - "@ckeditor/ckeditor5-page-break" "47.6.0" - "@ckeditor/ckeditor5-paragraph" "47.6.0" - "@ckeditor/ckeditor5-paste-from-office" "47.6.0" - "@ckeditor/ckeditor5-remove-format" "47.6.0" - "@ckeditor/ckeditor5-restricted-editing" "47.6.0" - "@ckeditor/ckeditor5-select-all" "47.6.0" - "@ckeditor/ckeditor5-show-blocks" "47.6.0" - "@ckeditor/ckeditor5-source-editing" "47.6.0" - "@ckeditor/ckeditor5-special-characters" "47.6.0" - "@ckeditor/ckeditor5-style" "47.6.0" - "@ckeditor/ckeditor5-table" "47.6.0" - "@ckeditor/ckeditor5-theme-lark" "47.6.0" - "@ckeditor/ckeditor5-typing" "47.6.0" - "@ckeditor/ckeditor5-ui" "47.6.0" - "@ckeditor/ckeditor5-undo" "47.6.0" - "@ckeditor/ckeditor5-upload" "47.6.0" - "@ckeditor/ckeditor5-utils" "47.6.0" - "@ckeditor/ckeditor5-watchdog" "47.6.0" - "@ckeditor/ckeditor5-widget" "47.6.0" - "@ckeditor/ckeditor5-word-count" "47.6.0" + "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.1" + "@ckeditor/ckeditor5-alignment" "47.6.1" + "@ckeditor/ckeditor5-autoformat" "47.6.1" + "@ckeditor/ckeditor5-autosave" "47.6.1" + "@ckeditor/ckeditor5-basic-styles" "47.6.1" + "@ckeditor/ckeditor5-block-quote" "47.6.1" + "@ckeditor/ckeditor5-bookmark" "47.6.1" + "@ckeditor/ckeditor5-ckbox" "47.6.1" + "@ckeditor/ckeditor5-ckfinder" "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-cloud-services" "47.6.1" + "@ckeditor/ckeditor5-code-block" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-easy-image" "47.6.1" + "@ckeditor/ckeditor5-editor-balloon" "47.6.1" + "@ckeditor/ckeditor5-editor-classic" "47.6.1" + "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" + "@ckeditor/ckeditor5-editor-inline" "47.6.1" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" + "@ckeditor/ckeditor5-emoji" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-essentials" "47.6.1" + "@ckeditor/ckeditor5-find-and-replace" "47.6.1" + "@ckeditor/ckeditor5-font" "47.6.1" + "@ckeditor/ckeditor5-fullscreen" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-highlight" "47.6.1" + "@ckeditor/ckeditor5-horizontal-line" "47.6.1" + "@ckeditor/ckeditor5-html-embed" "47.6.1" + "@ckeditor/ckeditor5-html-support" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-indent" "47.6.1" + "@ckeditor/ckeditor5-language" "47.6.1" + "@ckeditor/ckeditor5-link" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-markdown-gfm" "47.6.1" + "@ckeditor/ckeditor5-media-embed" "47.6.1" + "@ckeditor/ckeditor5-mention" "47.6.1" + "@ckeditor/ckeditor5-minimap" "47.6.1" + "@ckeditor/ckeditor5-page-break" "47.6.1" + "@ckeditor/ckeditor5-paragraph" "47.6.1" + "@ckeditor/ckeditor5-paste-from-office" "47.6.1" + "@ckeditor/ckeditor5-remove-format" "47.6.1" + "@ckeditor/ckeditor5-restricted-editing" "47.6.1" + "@ckeditor/ckeditor5-select-all" "47.6.1" + "@ckeditor/ckeditor5-show-blocks" "47.6.1" + "@ckeditor/ckeditor5-source-editing" "47.6.1" + "@ckeditor/ckeditor5-special-characters" "47.6.1" + "@ckeditor/ckeditor5-style" "47.6.1" + "@ckeditor/ckeditor5-table" "47.6.1" + "@ckeditor/ckeditor5-theme-lark" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-watchdog" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + "@ckeditor/ckeditor5-word-count" "47.6.1" clean-stack@^2.0.0: version "2.2.0" @@ -3636,9 +3636,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^3.0.3: - version "3.3.2" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.2.tgz#58c515d0f8508b8749452a028aa589ad80b36325" - integrity sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" + integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -3670,9 +3670,9 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: gopd "^1.2.0" electron-to-chromium@^1.5.263: - version "1.5.307" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz#09f8973100c39fb0d003b890393cd1d58932b1c8" - integrity sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg== + version "1.5.313" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz#193e9ae2c2ab6915acb41e833068381e4ef0b3e4" + integrity sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA== emoji-regex@^7.0.1: version "7.0.3" @@ -4842,17 +4842,17 @@ jest-regex-util@30.0.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA== -jest-util@30.2.0: - version "30.2.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.2.0.tgz#5142adbcad6f4e53c2776c067a4db3c14f913705" - integrity sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA== +jest-util@30.3.0: + version "30.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.3.0.tgz#95a4fbacf2dac20e768e2f1744b70519f2ba7980" + integrity sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg== dependencies: - "@jest/types" "30.2.0" + "@jest/types" "30.3.0" "@types/node" "*" chalk "^4.1.2" ci-info "^4.2.0" graceful-fs "^4.2.11" - picomatch "^4.0.2" + picomatch "^4.0.3" jest-worker@^26.5.0: version "26.6.2" @@ -4873,13 +4873,13 @@ jest-worker@^27.4.5: supports-color "^8.0.0" jest-worker@^30.0.5: - version "30.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.2.0.tgz#fd5c2a36ff6058ec8f74366ec89538cc99539d26" - integrity sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g== + version "30.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.3.0.tgz#ae4dc1f1d93d0cba1415624fcedaec40ea764f14" + integrity sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ== dependencies: "@types/node" "*" "@ungap/structured-clone" "^1.3.0" - jest-util "30.2.0" + jest-util "30.3.0" merge-stream "^2.0.0" supports-color "^8.1.1" @@ -4956,9 +4956,9 @@ jszip@^3.2.0: setimmediate "^1.0.5" katex@^0.16.0: - version "0.16.37" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.37.tgz#aae346d30ebfde946c915405a48099d71ab9b149" - integrity sha512-TIGjO2cCGYono+uUzgkE7RFF329mLLWGuHUlSr6cwIVj9O8f0VQZ783rsanmJpFUo32vvtj7XT04NGRPh+SZFg== + version "0.16.38" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.38.tgz#45f7b9253ac6b6a80fd168ee893fe0209b755338" + integrity sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ== dependencies: commander "^8.3.0" @@ -5580,9 +5580,9 @@ mimic-fn@^2.1.0: integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz#d801a1f388f8fac7333c01b7c15c9222c811def4" - integrity sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g== + version "2.10.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.1.tgz#a7f0bb890f4e1ce6dfc124bd1e6d6fcd3b359844" + integrity sha512-k7G3Y5QOegl380tXmZ68foBRRjE9Ljavx835ObdvmZjQ639izvZD8CS7BkWw1qKPPzHsGL/JDhl0uyU1zc2rJw== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -5970,7 +5970,7 @@ picomatch@^2.0.4, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: +picomatch@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== @@ -6512,9 +6512,9 @@ postcss@^8.2.14, postcss@^8.2.15, postcss@^8.4.12, postcss@^8.4.40: source-map-js "^1.2.1" preact@^10.13.2: - version "10.28.4" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.4.tgz#8ffab01c5c0590535bdaecdd548801f44c6e483a" - integrity sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ== + version "10.29.0" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.29.0.tgz#a6e5858670b659c4d471c6fea232233e03b403e8" + integrity sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg== pretty-error@^4.0.0: version "4.0.0" @@ -7403,9 +7403,9 @@ terser-webpack-plugin@^4.2.3: webpack-sources "^1.4.3" terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: - version "5.3.17" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.17.tgz#75ea98876297fbb190d2fbb395e982582b859a67" - integrity sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw== + version "5.4.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" + integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" @@ -8049,10 +8049,10 @@ zwitch@^2.0.0, zwitch@^2.0.4: resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== -zxing-wasm@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-3.0.0.tgz#184feade580ef7763cac4f1231eae1aa6fe28a39" - integrity sha512-s7ASCPKX+QnH7Y83f4Byxmq/vDzYW7B9m6jMP5S30JGfN2A6WAUn6P3vcBmNguDhPLE6ny2fjTooQVyKBXI1qA== +zxing-wasm@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-3.0.1.tgz#b04c9323f2322996d9f21a02bad7fc1b450ec390" + integrity sha512-3CLj6iaGkpqPWXAB4pIWkFOR63MwqGekpMzaROFKto4dFowiPmLlC56KoMoOSXzqOCOpI5DAvMdB8ku2va6fUg== dependencies: "@types/emscripten" "^1.41.5" type-fest "^5.4.4" From de371877b906de749ca30495b0404c857e5ced70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 18:55:16 +0100 Subject: [PATCH 010/108] Make GenericWebProvider more forgiving with URLs and accept the "fixed" strings traefik provides as security measure This fixes issue #1296 --- .../InfoProviderSystem/Providers/GenericWebProvider.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index bd6d30e6..e20264b3 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -315,7 +315,14 @@ class GenericWebProvider implements InfoProviderInterface //Remove any leading slashes $url = ltrim($url, '/'); - $url = 'https://'.$url; + //If the URL starts with https:/ or http:/, add the missing slash + //Traefik removes the double slash as secruity measure, so we want to be forgiving and add it back if needed + //See https://github.com/Part-DB/Part-DB-server/issues/1296 + if (preg_match('/^https?:\/[^\/]/', $url)) { + $url = preg_replace('/^(https?:)\/([^\/])/', '$1//$2', $url); + } else { + $url = 'https://'.$url; + } } //If this is not a valid URL with host, domain and path, throw an exception From 60c5e24c94eba41f08cda2b1a3bba8cea968cecc Mon Sep 17 00:00:00 2001 From: swdee Date: Mon, 16 Mar 2026 06:57:54 +1300 Subject: [PATCH 011/108] Bug fix: Remove fallback from LCSC barcode part resolver (#1302) --- .../BarcodeScanner/BarcodeScanResultHandler.php | 11 +++-------- .../BarcodeScanner/BarcodeScanResultHandlerTest.php | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php index 45fdd16e..1927edb9 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php @@ -217,8 +217,8 @@ final readonly class BarcodeScanResultHandler * Resolve LCSC barcode -> Part. * Strategy: * 1) Try providerReference.provider_id == pc (LCSC "Cxxxxxx") if you store it there - * 2) Fallback to manufacturer_product_number == pm (MPN) * Returns first match (consistent with EIGP114 logic) + * 2) Fallback to search across supplier part number (SPN) */ private function resolvePartFromLCSC(LCSCBarcodeScanResult $barcodeScan): ?Part { @@ -231,13 +231,8 @@ final readonly class BarcodeScanResultHandler } } - // Fallback to MPN (pm) - $pm = $barcodeScan->mpn; // e.g. RC0402FR-071ML - if (!$pm) { - return null; - } - - return $this->em->getRepository(Part::class)->getPartByMPN($pm); + // fallback to search by SPN + return $this->em->getRepository(Part::class)->getPartBySPN($pc); } diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php index 95313e13..1cfe76b5 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php @@ -115,8 +115,8 @@ final class BarcodeScanResultHandlerTest extends KernelTestCase public function testLCSCBarcodeResolvePartOrNullReturnsNullWhenNotFound(): void { $scan = new LCSCBarcodeScanResult( - fields: ['pc' => 'C0000000', 'pm' => ''], - rawInput: '{pc:C0000000,pm:}' + fields: ['pc' => 'C0000000', 'pm' => 'NON_EXISTENT_MPN_12345'], + rawInput: '{pc:C0000000,pm:NON_EXISTENT_MPN_12345}' ); $this->assertNull($this->service->resolvePart($scan)); From 74e51029436a4d8f6c43c61963ebe0e668cf6e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 21:35:38 +0100 Subject: [PATCH 012/108] Automatically detect the delimiter of generic BOM imports The detectFields does this anyway, so use that guessed value further on --- src/Controller/ProjectController.php | 5 ++- .../ImportExportSystem/BOMImporter.php | 38 ++++++++++++------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 2a6d19ee..d2c35efd 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -240,7 +240,8 @@ class ProjectController extends AbstractController } // Detect fields and get suggestions - $detected_fields = $BOMImporter->detectFields($file_content); + $detected_delimiter = $BOMImporter->detectDelimiter($file_content); + $detected_fields = $BOMImporter->detectFields($file_content, $detected_delimiter); $suggested_mapping = $BOMImporter->getSuggestedFieldMapping($detected_fields); // Create mapping of original field names to sanitized field names for template @@ -257,7 +258,7 @@ class ProjectController extends AbstractController $builder->add('delimiter', ChoiceType::class, [ 'label' => 'project.bom_import.delimiter', 'required' => true, - 'data' => ',', + 'data' => $detected_delimiter, 'choices' => [ 'project.bom_import.delimiter.comma' => ',', 'project.bom_import.delimiter.semicolon' => ';', diff --git a/src/Services/ImportExportSystem/BOMImporter.php b/src/Services/ImportExportSystem/BOMImporter.php index e6518687..7cef3f81 100644 --- a/src/Services/ImportExportSystem/BOMImporter.php +++ b/src/Services/ImportExportSystem/BOMImporter.php @@ -721,26 +721,36 @@ class BOMImporter return $mapped; } + /** + * Try to detect the separator used in the CSV data by analyzing the first line and counting occurrences of common delimiters. + * @param string $data + * @return string + */ + public function detectDelimiter(string $data): string + { + $delimiters = [',', ';', "\t"]; + $lines = explode("\n", $data, 2); + $header_line = $lines[0] ?? ''; + $delimiter_counts = []; + foreach ($delimiters as $delim) { + $delimiter_counts[$delim] = substr_count($header_line, $delim); + } + // Choose the delimiter with the highest count, default to comma if all are zero + $max_count = max($delimiter_counts); + $delimiter = array_search($max_count, $delimiter_counts, true); + if ($max_count === 0 || $delimiter === false) { + $delimiter = ','; + } + return $delimiter; + } + /** * Detect available fields in CSV data for field mapping UI */ public function detectFields(string $data, ?string $delimiter = null): array { if ($delimiter === null) { - // Detect delimiter by counting occurrences in the first row (header) - $delimiters = [',', ';', "\t"]; - $lines = explode("\n", $data, 2); - $header_line = $lines[0] ?? ''; - $delimiter_counts = []; - foreach ($delimiters as $delim) { - $delimiter_counts[$delim] = substr_count($header_line, $delim); - } - // Choose the delimiter with the highest count, default to comma if all are zero - $max_count = max($delimiter_counts); - $delimiter = array_search($max_count, $delimiter_counts, true); - if ($max_count === 0 || $delimiter === false) { - $delimiter = ','; - } + $delimiter = $this->detectDelimiter($data); } // Handle potential BOM (Byte Order Mark) at the beginning $data = preg_replace('/^\xEF\xBB\xBF/', '', $data); From 95f3fc66c290d43fe27a20968f46df538be84317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 21:47:15 +0100 Subject: [PATCH 013/108] Do not throw an 500 error, if mapping is not possible This fixes issue #1298 --- .../projects/import_bom_map_fields.html.twig | 70 +++++++++++-------- translations/messages.en.xlf | 6 ++ 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/templates/projects/import_bom_map_fields.html.twig b/templates/projects/import_bom_map_fields.html.twig index 4e45eb08..ee1e23ef 100644 --- a/templates/projects/import_bom_map_fields.html.twig +++ b/templates/projects/import_bom_map_fields.html.twig @@ -48,51 +48,59 @@
- - - - - - + + + + + + - {% for field in detected_fields %} - - - + + - + - - - {% endfor %} + {% endif %} + + + + {% endfor %}
{% trans %}project.bom_import.field_mapping.csv_field{% endtrans %}{% trans %}project.bom_import.field_mapping.maps_to{% endtrans %}{% trans %}project.bom_import.field_mapping.suggestion{% endtrans %}{% trans %}project.bom_import.field_mapping.priority{% endtrans %}
{% trans %}project.bom_import.field_mapping.csv_field{% endtrans %}{% trans %}project.bom_import.field_mapping.maps_to{% endtrans %}{% trans %}project.bom_import.field_mapping.suggestion{% endtrans %}{% trans %}project.bom_import.field_mapping.priority{% endtrans %}
- {{ field }} - + {% for field in detected_fields %} +
+ {{ field }} + + {# TODO: This is more a workaround than a proper fix. Ideally the controller should be fixed in a way, that we get the correct fields here #} + {% if field_name_mapping[field] is defined %} + {% set field_name = field_name_mapping[field] %} {{ form_widget(form['mapping_' ~ field_name_mapping[field]], { 'attr': { 'class': 'form-select field-mapping-select', 'data-field': field } }) }} - - {% if suggested_mapping[field] is defined %} - + {% else %} + + {% trans %}project.bom_import.field_mapping.error.check_delimiter{% endtrans %} + + {% endif %} + + {% if suggested_mapping[field] is defined %} + {{ suggested_mapping[field] }} - {% else %} - + {% else %} + {% trans %}project.bom_import.field_mapping.no_suggestion{% endtrans %} - {% endif %} - - -
+ +
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 180d9e5e..d92af86d 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12947,5 +12947,11 @@ Buerklin-API Authentication server: [Part_lot] created from barcode: Please check if the data is correct and desired. + + + project.bom_import.field_mapping.error.check_delimiter + Mapping error: Check if you have selected the right delimiter! + + From a070ebb2ce0214b6babedeb0114bf3ae24baa052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 22:02:10 +0100 Subject: [PATCH 014/108] Fixed 500 error with displaying part prices, when a user has a currency preference different of base currency, and there is no conversion rate known for it This fixes issue #1317 --- templates/parts/info/_order_infos.html.twig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/parts/info/_order_infos.html.twig b/templates/parts/info/_order_infos.html.twig index 59b904df..9aa9d888 100644 --- a/templates/parts/info/_order_infos.html.twig +++ b/templates/parts/info/_order_infos.html.twig @@ -47,17 +47,17 @@ {{ detail.price | format_money(detail.currency) }} / {{ detail.PriceRelatedQuantity | format_amount(part.partUnit) }} - {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency) %} + {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency, app.user.currency ?? null) %} {% if detail.currency != (app.user.currency ?? null) and tmp is not null and tmp.GreaterThan(0) %} - ({{ pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency, app.user.currency ?? null) | format_money(app.user.currency ?? null) }}) + ({{ tmp | format_money(app.user.currency ?? null) }}) {% endif %} {{- helper.vat_text(detail.includesVAT) -}} {{ detail.PricePerUnit | format_money(detail.currency) }} - {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency) %} + {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency, app.user.currency ?? null) %} {% if detail.currency != (app.user.currency ?? null) and tmp is not null and tmp.GreaterThan(0) %} - ({{ pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency, app.user.currency ?? null) | format_money(app.user.currency ?? null) }}) + ({{ tmp | format_money(app.user.currency ?? null) }}) {% endif %} {{- helper.vat_text(detail.includesVAT) -}} From 17f11c02f3f5d02d85589b424d632b7ee39c941c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 22:08:38 +0100 Subject: [PATCH 015/108] New Crowdin updates (#1301) * New translations validators.en.xlf (Chinese Simplified) * New translations messages.en.xlf (English) * New translations messages.en.xlf (German) --- translations/messages.de.xlf | 6 ++++++ translations/messages.en.xlf | 2 +- translations/validators.zh.xlf | 8 +++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index a2884e77..79789e21 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -12945,5 +12945,11 @@ Buerklin-API-Authentication-Server: [Part_lot] aus Barcode erstellt: Bitte überprüfen Sie, ob die Daten korrekt und gewünscht sind. + + + project.bom_import.field_mapping.error.check_delimiter + Zuordnungsfehler: Bitte prüfen Sie, ob Sie das richtige Trennzeichen ausgewählt haben! + + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index d92af86d..ce92bda6 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12948,7 +12948,7 @@ Buerklin-API Authentication server: - + project.bom_import.field_mapping.error.check_delimiter Mapping error: Check if you have selected the right delimiter! diff --git a/translations/validators.zh.xlf b/translations/validators.zh.xlf index 8e3e50a9..75491a97 100644 --- a/translations/validators.zh.xlf +++ b/translations/validators.zh.xlf @@ -247,5 +247,11 @@ 该类型在此语言下已存在翻译定义! + + + validator.invalid_gtin + 无效的GTIN / EAN 码。 + + - \ No newline at end of file + From 8f6ed74d93827fa6d41e1e925a37be0063657e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Mar 2026 22:09:10 +0100 Subject: [PATCH 016/108] Bumped version to 2.9.1 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index c8e38b61..dedcc7d4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.9.0 +2.9.1 From 9ce215c8f927d3e4290867d4f02fd660c6230286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Mar 2026 21:50:15 +0100 Subject: [PATCH 017/108] Added tests for custom doctrine functions --- .../AbstractDoctrineFunctionTestCase.php | 68 +++++++++++++ .../Doctrine/Functions/ArrayPositionTest.php | 42 ++++++++ tests/Doctrine/Functions/Field2Test.php | 45 +++++++++ tests/Doctrine/Functions/ILikeTest.php | 66 +++++++++++++ tests/Doctrine/Functions/NatsortTest.php | 95 +++++++++++++++++++ tests/Doctrine/Functions/RegexpTest.php | 66 +++++++++++++ 6 files changed, 382 insertions(+) create mode 100644 tests/Doctrine/Functions/AbstractDoctrineFunctionTestCase.php create mode 100644 tests/Doctrine/Functions/ArrayPositionTest.php create mode 100644 tests/Doctrine/Functions/Field2Test.php create mode 100644 tests/Doctrine/Functions/ILikeTest.php create mode 100644 tests/Doctrine/Functions/NatsortTest.php create mode 100644 tests/Doctrine/Functions/RegexpTest.php diff --git a/tests/Doctrine/Functions/AbstractDoctrineFunctionTestCase.php b/tests/Doctrine/Functions/AbstractDoctrineFunctionTestCase.php new file mode 100644 index 00000000..7bc3d628 --- /dev/null +++ b/tests/Doctrine/Functions/AbstractDoctrineFunctionTestCase.php @@ -0,0 +1,68 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Doctrine\Functions; + +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Query\AST\Node; +use Doctrine\ORM\Query\SqlWalker; +use PHPUnit\Framework\TestCase; + +abstract class AbstractDoctrineFunctionTestCase extends TestCase +{ + protected function createSqlWalker(AbstractPlatform $platform, string $serverVersion = '11.0.0-MariaDB'): SqlWalker + { + $connection = $this->createMock(Connection::class); + $connection->method('getDatabasePlatform')->willReturn($platform); + $connection->method('getServerVersion')->willReturn($serverVersion); + + $sqlWalker = $this->getMockBuilder(SqlWalker::class) + ->disableOriginalConstructor() + ->onlyMethods(['getConnection']) + ->getMock(); + + $sqlWalker->method('getConnection')->willReturn($connection); + + return $sqlWalker; + } + + protected function createNode(string $sql): Node + { + $node = $this->createMock(Node::class); + $node->method('dispatch')->willReturn($sql); + + return $node; + } + + protected function setObjectProperty(object $object, string $property, mixed $value): void + { + $reflection = new \ReflectionProperty($object, $property); + $reflection->setValue($object, $value); + } + + protected function setStaticProperty(string $class, string $property, mixed $value): void + { + $reflection = new \ReflectionProperty($class, $property); + $reflection->setValue(null, $value); + } +} diff --git a/tests/Doctrine/Functions/ArrayPositionTest.php b/tests/Doctrine/Functions/ArrayPositionTest.php new file mode 100644 index 00000000..7fdff42d --- /dev/null +++ b/tests/Doctrine/Functions/ArrayPositionTest.php @@ -0,0 +1,42 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Tests\Doctrine\Functions; + +use App\Doctrine\Functions\ArrayPosition; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; + +final class ArrayPositionTest extends AbstractDoctrineFunctionTestCase +{ + public function testArrayPositionBuildsSql(): void + { + $function = new ArrayPosition('ARRAY_POSITION'); + $this->setObjectProperty($function, 'array', $this->createNode(':ids')); + $this->setObjectProperty($function, 'field', $this->createNode('p.id')); + + $sql = $function->getSql($this->createSqlWalker(new PostgreSQLPlatform())); + + $this->assertSame('ARRAY_POSITION(:ids, p.id)', $sql); + } +} + diff --git a/tests/Doctrine/Functions/Field2Test.php b/tests/Doctrine/Functions/Field2Test.php new file mode 100644 index 00000000..d25e511f --- /dev/null +++ b/tests/Doctrine/Functions/Field2Test.php @@ -0,0 +1,45 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Doctrine\Functions; + +use App\Doctrine\Functions\Field2; +use Doctrine\DBAL\Platforms\MySQLPlatform; + +final class Field2Test extends AbstractDoctrineFunctionTestCase +{ + public function testField2BuildsSql(): void + { + $function = new Field2('FIELD2'); + $this->setObjectProperty($function, 'field', $this->createNode('p.id')); + $this->setObjectProperty($function, 'values', [ + $this->createNode('1'), + $this->createNode('2'), + $this->createNode('3'), + ]); + + $sql = $function->getSql($this->createSqlWalker(new MySQLPlatform())); + + $this->assertSame('FIELD2(p.id, 1, 2, 3)', $sql); + } +} + diff --git a/tests/Doctrine/Functions/ILikeTest.php b/tests/Doctrine/Functions/ILikeTest.php new file mode 100644 index 00000000..4541e9c9 --- /dev/null +++ b/tests/Doctrine/Functions/ILikeTest.php @@ -0,0 +1,66 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Doctrine\Functions; + +use App\Doctrine\Functions\ILike; +use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\DBAL\Platforms\MySQLPlatform; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; +use Doctrine\DBAL\Platforms\SQLitePlatform; +use Doctrine\DBAL\Platforms\SQLServerPlatform; +use PHPUnit\Framework\Attributes\DataProvider; + +final class ILikeTest extends AbstractDoctrineFunctionTestCase +{ + public static function iLikePlatformProvider(): \Generator + { + yield 'mysql' => [new MySQLPlatform(), '(part_name LIKE :pattern)']; + yield 'postgres' => [new PostgreSQLPlatform(), '(part_name ILIKE :pattern)']; + yield 'sqlite' => [new SQLitePlatform(), "(part_name LIKE :pattern ESCAPE '\\')"]; + } + + #[DataProvider('iLikePlatformProvider')] + public function testILikeUsesExpectedOperator(AbstractPlatform $platform, string $expectedSql): void + { + $function = new ILike('ILIKE'); + $function->value = $this->createNode('part_name'); + $function->expr = $this->createNode(':pattern'); + + $sql = $function->getSql($this->createSqlWalker($platform)); + + $this->assertSame($expectedSql, $sql); + } + + public function testILikeThrowsOnUnsupportedPlatform(): void + { + $function = new ILike('ILIKE'); + $function->value = $this->createNode('part_name'); + $function->expr = $this->createNode(':pattern'); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('does not support case insensitive like expressions'); + + $function->getSql($this->createSqlWalker(new SQLServerPlatform())); + } +} + diff --git a/tests/Doctrine/Functions/NatsortTest.php b/tests/Doctrine/Functions/NatsortTest.php new file mode 100644 index 00000000..fd10199f --- /dev/null +++ b/tests/Doctrine/Functions/NatsortTest.php @@ -0,0 +1,95 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Doctrine\Functions; + +use App\Doctrine\Functions\Natsort; +use Doctrine\DBAL\Platforms\MariaDBPlatform; +use Doctrine\DBAL\Platforms\MySQLPlatform; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; +use Doctrine\DBAL\Platforms\SQLitePlatform; + +final class NatsortTest extends AbstractDoctrineFunctionTestCase +{ + protected function setUp(): void + { + parent::setUp(); + + Natsort::allowSlowNaturalSort(false); + $this->setStaticProperty(Natsort::class, 'supportsNaturalSort', null); + } + + public function testNatsortUsesPostgresCollation(): void + { + $function = new Natsort('NATSORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new PostgreSQLPlatform())); + + $this->assertSame('part_name COLLATE numeric', $sql); + } + + public function testNatsortUsesMariaDbNativeFunctionOnSupportedVersion(): void + { + $function = new Natsort('NATSORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new MariaDBPlatform(), '10.11.2-MariaDB')); + + $this->assertSame('NATURAL_SORT_KEY(part_name)', $sql); + } + + public function testNatsortFallsBackWithoutSlowSort(): void + { + $function = new Natsort('NATSORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new MariaDBPlatform(), '10.6.10-MariaDB')); + + $this->assertSame('part_name', $sql); + } + + public function testNatsortUsesSlowSortFunctionOnMySqlWhenEnabled(): void + { + Natsort::allowSlowNaturalSort(); + + $function = new Natsort('NATSORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new MySQLPlatform())); + + $this->assertSame('NatSortKey(part_name, 0)', $sql); + } + + public function testNatsortUsesSlowSortCollationOnSqliteWhenEnabled(): void + { + Natsort::allowSlowNaturalSort(); + + $function = new Natsort('NATSORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new SQLitePlatform())); + + $this->assertSame('part_name COLLATE NATURAL_CMP', $sql); + } +} + diff --git a/tests/Doctrine/Functions/RegexpTest.php b/tests/Doctrine/Functions/RegexpTest.php new file mode 100644 index 00000000..d1866210 --- /dev/null +++ b/tests/Doctrine/Functions/RegexpTest.php @@ -0,0 +1,66 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Doctrine\Functions; + +use App\Doctrine\Functions\Regexp; +use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\DBAL\Platforms\MySQLPlatform; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; +use Doctrine\DBAL\Platforms\SQLitePlatform; +use Doctrine\DBAL\Platforms\SQLServerPlatform; +use PHPUnit\Framework\Attributes\DataProvider; + +final class RegexpTest extends AbstractDoctrineFunctionTestCase +{ + public static function regexpPlatformProvider(): \Generator + { + yield 'mysql' => [new MySQLPlatform(), '(part_name REGEXP :regex)']; + yield 'sqlite' => [new SQLitePlatform(), '(part_name REGEXP :regex)']; + yield 'postgres' => [new PostgreSQLPlatform(), '(part_name ~* :regex)']; + } + + #[DataProvider('regexpPlatformProvider')] + public function testRegexpUsesExpectedOperator(AbstractPlatform $platform, string $expectedSql): void + { + $function = new Regexp('REGEXP'); + $this->setObjectProperty($function, 'value', $this->createNode('part_name')); + $this->setObjectProperty($function, 'regexp', $this->createNode(':regex')); + + $sql = $function->getSql($this->createSqlWalker($platform)); + + $this->assertSame($expectedSql, $sql); + } + + public function testRegexpThrowsOnUnsupportedPlatform(): void + { + $function = new Regexp('REGEXP'); + $this->setObjectProperty($function, 'value', $this->createNode('part_name')); + $this->setObjectProperty($function, 'regexp', $this->createNode(':regex')); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('does not support regular expressions'); + + $function->getSql($this->createSqlWalker(new SQLServerPlatform())); + } +} + From abf0ba53015f4159fb30241db42739e9418e07a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 24 Mar 2026 20:43:50 +0100 Subject: [PATCH 018/108] Updated dependencies --- composer.lock | 407 ++++++++++++++++++++++--------------------- config/reference.php | 2 +- yarn.lock | 244 +++++++++++++------------- 3 files changed, 335 insertions(+), 318 deletions(-) diff --git a/composer.lock b/composer.lock index 5eb2aa47..2a413dc6 100644 --- a/composer.lock +++ b/composer.lock @@ -968,7 +968,7 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", @@ -1052,22 +1052,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.0" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.1" }, "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "1f120e701de7514b558f4987085ebb1b096abf99" + "reference": "b947b0e29d5f345430bc29958db8efce4e7c2450" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/1f120e701de7514b558f4987085ebb1b096abf99", - "reference": "1f120e701de7514b558f4987085ebb1b096abf99", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/b947b0e29d5f345430bc29958db8efce4e7c2450", + "reference": "b947b0e29d5f345430bc29958db8efce4e7c2450", "shasum": "" }, "require": { @@ -1141,13 +1141,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.0" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.1" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-03-20T09:11:10+00:00" }, { "name": "api-platform/documentation", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1204,13 +1204,13 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.3.0" + "source": "https://github.com/api-platform/documentation/tree/v4.3.1" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", @@ -1284,22 +1284,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.3.0" + "source": "https://github.com/api-platform/http-cache/tree/v4.3.1" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/hydra", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "222862316009f986e57c10f03648d615f2702e66" + "reference": "bb9f7107a0bbfbe6e7b93130bde9829f0cc71529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/222862316009f986e57c10f03648d615f2702e66", - "reference": "222862316009f986e57c10f03648d615f2702e66", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/bb9f7107a0bbfbe6e7b93130bde9829f0cc71529", + "reference": "bb9f7107a0bbfbe6e7b93130bde9829f0cc71529", "shasum": "" }, "require": { @@ -1371,13 +1371,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.3.0" + "source": "https://github.com/api-platform/hydra/tree/v4.3.1" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-03-20T09:00:10+00:00" }, { "name": "api-platform/json-api", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", @@ -1453,13 +1453,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.3.0" + "source": "https://github.com/api-platform/json-api/tree/v4.3.1" }, "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", @@ -1534,13 +1534,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.3.0" + "source": "https://github.com/api-platform/json-schema/tree/v4.3.1" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", @@ -1614,13 +1614,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.3.0" + "source": "https://github.com/api-platform/jsonld/tree/v4.3.1" }, "time": "2026-03-13T08:23:46+00:00" }, { "name": "api-platform/metadata", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", @@ -1712,13 +1712,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.3.0" + "source": "https://github.com/api-platform/metadata/tree/v4.3.1" }, "time": "2026-03-13T14:49:56+00:00" }, { "name": "api-platform/openapi", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", @@ -1803,22 +1803,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.3.0" + "source": "https://github.com/api-platform/openapi/tree/v4.3.1" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/serializer", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "5dbd38307814025b9fcc6d6c7af7e522709a32f1" + "reference": "0075089665520cfb041129b26bb49bdcdf5ebb16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/5dbd38307814025b9fcc6d6c7af7e522709a32f1", - "reference": "5dbd38307814025b9fcc6d6c7af7e522709a32f1", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/0075089665520cfb041129b26bb49bdcdf5ebb16", + "reference": "0075089665520cfb041129b26bb49bdcdf5ebb16", "shasum": "" }, "require": { @@ -1897,22 +1897,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.3.0" + "source": "https://github.com/api-platform/serializer/tree/v4.3.1" }, - "time": "2026-03-13T11:03:46+00:00" + "time": "2026-03-20T09:00:10+00:00" }, { "name": "api-platform/state", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "663c00f610f076f5cac8b13755805d9b5d97ff4c" + "reference": "fc42812fb601b7c83aa43216d4329e89df79fe82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/663c00f610f076f5cac8b13755805d9b5d97ff4c", - "reference": "663c00f610f076f5cac8b13755805d9b5d97ff4c", + "url": "https://api.github.com/repos/api-platform/state/zipball/fc42812fb601b7c83aa43216d4329e89df79fe82", + "reference": "fc42812fb601b7c83aa43216d4329e89df79fe82", "shasum": "" }, "require": { @@ -1926,7 +1926,7 @@ }, "require-dev": { "api-platform/serializer": "^4.3", - "api-platform/validator": "^4.3", + "api-platform/validator": "^4.3.1", "phpunit/phpunit": "^12.2", "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0", "symfony/object-mapper": "^7.4 || ^8.0", @@ -1994,22 +1994,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.3.0" + "source": "https://github.com/api-platform/state/tree/v4.3.1" }, - "time": "2026-03-13T13:27:59+00:00" + "time": "2026-03-17T15:43:29+00:00" }, { "name": "api-platform/symfony", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "3b9b39f03250494ac4f3415c3d43c5678082b4d0" + "reference": "c416366b799f9da731bb053af0f2a120b4554259" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/3b9b39f03250494ac4f3415c3d43c5678082b4d0", - "reference": "3b9b39f03250494ac4f3415c3d43c5678082b4d0", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/c416366b799f9da731bb053af0f2a120b4554259", + "reference": "c416366b799f9da731bb053af0f2a120b4554259", "shasum": "" }, "require": { @@ -2022,7 +2022,7 @@ "api-platform/openapi": "^4.3", "api-platform/serializer": "^4.3", "api-platform/state": "^4.3", - "api-platform/validator": "^4.3", + "api-platform/validator": "^4.3.1", "php": ">=8.2", "symfony/asset": "^6.4 || ^7.0 || ^8.0", "symfony/finder": "^6.4 || ^7.0 || ^8.0", @@ -2122,22 +2122,22 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.3.0" + "source": "https://github.com/api-platform/symfony/tree/v4.3.1" }, - "time": "2026-03-13T11:03:46+00:00" + "time": "2026-03-20T10:54:28+00:00" }, { "name": "api-platform/validator", - "version": "v4.3.0", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", - "reference": "c66b272ad9d19f67e8a402e61b34ea65b2df9b91" + "reference": "3c0d486a12d7ab9b8fcfb727437b5322dc619663" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/validator/zipball/c66b272ad9d19f67e8a402e61b34ea65b2df9b91", - "reference": "c66b272ad9d19f67e8a402e61b34ea65b2df9b91", + "url": "https://api.github.com/repos/api-platform/validator/zipball/3c0d486a12d7ab9b8fcfb727437b5322dc619663", + "reference": "3c0d486a12d7ab9b8fcfb727437b5322dc619663", "shasum": "" }, "require": { @@ -2198,9 +2198,9 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.3.0" + "source": "https://github.com/api-platform/validator/tree/v4.3.1" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-03-17T15:23:21+00:00" }, { "name": "beberlei/assert", @@ -3184,16 +3184,16 @@ }, { "name": "doctrine/dbal", - "version": "4.4.2", + "version": "4.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "476f7f0fa6ea4aa5364926db7fabdf6049075722" + "reference": "61e730f1658814821a85f2402c945f3883407dec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/476f7f0fa6ea4aa5364926db7fabdf6049075722", - "reference": "476f7f0fa6ea4aa5364926db7fabdf6049075722", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61e730f1658814821a85f2402c945f3883407dec", + "reference": "61e730f1658814821a85f2402c945f3883407dec", "shasum": "" }, "require": { @@ -3270,7 +3270,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.4.2" + "source": "https://github.com/doctrine/dbal/tree/4.4.3" }, "funding": [ { @@ -3286,7 +3286,7 @@ "type": "tidelift" } ], - "time": "2026-02-26T12:12:19+00:00" + "time": "2026-03-20T08:52:12+00:00" }, { "name": "doctrine/deprecations", @@ -5768,16 +5768,16 @@ }, { "name": "league/commonmark", - "version": "2.8.1", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "84b1ca48347efdbe775426f108622a42735a6579" + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84b1ca48347efdbe775426f108622a42735a6579", - "reference": "84b1ca48347efdbe775426f108622a42735a6579", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", "shasum": "" }, "require": { @@ -5871,7 +5871,7 @@ "type": "tidelift" } ], - "time": "2026-03-05T21:37:03+00:00" + "time": "2026-03-19T13:16:38+00:00" }, { "name": "league/config", @@ -6202,20 +6202,20 @@ }, { "name": "league/uri", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "4436c6ec8d458e4244448b069cc572d088230b76" + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", - "reference": "4436c6ec8d458e4244448b069cc572d088230b76", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.8", + "league/uri-interfaces": "^7.8.1", "php": "^8.1", "psr/http-factory": "^1" }, @@ -6288,7 +6288,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.8.0" + "source": "https://github.com/thephpleague/uri/tree/7.8.1" }, "funding": [ { @@ -6296,24 +6296,24 @@ "type": "github" } ], - "time": "2026-01-14T17:24:56+00:00" + "time": "2026-03-15T20:22:25+00:00" }, { "name": "league/uri-components", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-components.git", - "reference": "8b5ffcebcc0842b76eb80964795bd56a8333b2ba" + "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/8b5ffcebcc0842b76eb80964795bd56a8333b2ba", - "reference": "8b5ffcebcc0842b76eb80964795bd56a8333b2ba", + "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/848ff9db2f0be06229d6034b7c2e33d41b4fd675", + "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675", "shasum": "" }, "require": { - "league/uri": "^7.8", + "league/uri": "^7.8.1", "php": "^8.1" }, "suggest": { @@ -6372,7 +6372,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-components/tree/7.8.0" + "source": "https://github.com/thephpleague/uri-components/tree/7.8.1" }, "funding": [ { @@ -6380,20 +6380,20 @@ "type": "github" } ], - "time": "2026-01-14T17:24:56+00:00" + "time": "2026-03-15T20:22:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", - "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", "shasum": "" }, "require": { @@ -6456,7 +6456,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" }, "funding": [ { @@ -6464,7 +6464,7 @@ "type": "github" } ], - "time": "2026-01-15T06:54:53+00:00" + "time": "2026-03-08T20:05:35+00:00" }, { "name": "liip/imagine-bundle", @@ -8423,16 +8423,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.6", + "version": "5.6.7", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" + "reference": "31a105931bc8ffa3a123383829772e832fd8d903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", - "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903", + "reference": "31a105931bc8ffa3a123383829772e832fd8d903", "shasum": "" }, "require": { @@ -8481,9 +8481,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.7" }, - "time": "2025-12-22T21:13:58+00:00" + "time": "2026-03-18T20:47:46+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -10209,40 +10209,41 @@ }, { "name": "spomky-labs/pki-framework", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "f0e9a548df4e3942886adc9b7830581a46334631" + "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/f0e9a548df4e3942886adc9b7830581a46334631", - "reference": "f0e9a548df4e3942886adc9b7830581a46334631", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/aa576cbd07128075bef97ac2f8af9854e67513d8", + "reference": "aa576cbd07128075bef97ac2f8af9854e67513d8", "shasum": "" }, "require": { - "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14", + "brick/math": "^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17", "ext-mbstring": "*", - "php": ">=8.1" + "php": ">=8.1", + "psr/clock": "^1.0" }, "require-dev": { "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", "ext-gmp": "*", "ext-openssl": "*", - "infection/infection": "^0.28|^0.29|^0.31", + "infection/infection": "^0.28|^0.29|^0.31|^0.32", "php-parallel-lint/php-parallel-lint": "^1.3", "phpstan/extension-installer": "^1.3|^2.0", "phpstan/phpstan": "^1.8|^2.0", "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", "phpstan/phpstan-phpunit": "^1.1|^2.0", "phpstan/phpstan-strict-rules": "^1.3|^2.0", - "phpunit/phpunit": "^10.1|^11.0|^12.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0|^13.0", "rector/rector": "^1.0|^2.0", "roave/security-advisories": "dev-latest", "symfony/string": "^6.4|^7.0|^8.0", "symfony/var-dumper": "^6.4|^7.0|^8.0", - "symplify/easy-coding-standard": "^12.0" + "symplify/easy-coding-standard": "^12.0|^13.0" }, "suggest": { "ext-bcmath": "For better performance (or GMP)", @@ -10302,7 +10303,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.1" + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.4.2" }, "funding": [ { @@ -10314,7 +10315,7 @@ "type": "patreon" } ], - "time": "2025-12-20T12:57:40+00:00" + "time": "2026-03-23T22:56:56+00:00" }, { "name": "symfony/apache-pack", @@ -14944,16 +14945,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.32.0", + "version": "v2.34.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "dfbf6b443bb381cb611e06f64dc23603b614b575" + "reference": "d610a2e021cf63f955838b4bfe40da7e4cafe850" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/dfbf6b443bb381cb611e06f64dc23603b614b575", - "reference": "dfbf6b443bb381cb611e06f64dc23603b614b575", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/d610a2e021cf63f955838b4bfe40da7e4cafe850", + "reference": "d610a2e021cf63f955838b4bfe40da7e4cafe850", "shasum": "" }, "require": { @@ -14993,7 +14994,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.32.0" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.34.0" }, "funding": [ { @@ -15013,7 +15014,7 @@ "type": "tidelift" } ], - "time": "2025-12-02T07:12:06+00:00" + "time": "2026-03-21T22:29:11+00:00" }, { "name": "symfony/stopwatch", @@ -15722,16 +15723,16 @@ }, { "name": "symfony/ux-translator", - "version": "v2.32.0", + "version": "v2.34.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-translator.git", - "reference": "fde719a87903d9bc6fe60abf7581c1143532c918" + "reference": "adf6c0919ece99acf5693240f4cb3d5ab84076f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-translator/zipball/fde719a87903d9bc6fe60abf7581c1143532c918", - "reference": "fde719a87903d9bc6fe60abf7581c1143532c918", + "url": "https://api.github.com/repos/symfony/ux-translator/zipball/adf6c0919ece99acf5693240f4cb3d5ab84076f6", + "reference": "adf6c0919ece99acf5693240f4cb3d5ab84076f6", "shasum": "" }, "require": { @@ -15779,7 +15780,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-translator/tree/v2.32.0" + "source": "https://github.com/symfony/ux-translator/tree/v2.34.0" }, "funding": [ { @@ -15799,20 +15800,20 @@ "type": "tidelift" } ], - "time": "2025-12-26T17:37:51+00:00" + "time": "2026-03-21T22:29:11+00:00" }, { "name": "symfony/ux-turbo", - "version": "v2.32.0", + "version": "v2.34.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "0deaa8abef20933d11f8bbe9899d950b4333ca1e" + "reference": "87511f621db238302a3bb819958a72feda27fc45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/0deaa8abef20933d11f8bbe9899d950b4333ca1e", - "reference": "0deaa8abef20933d11f8bbe9899d950b4333ca1e", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/87511f621db238302a3bb819958a72feda27fc45", + "reference": "87511f621db238302a3bb819958a72feda27fc45", "shasum": "" }, "require": { @@ -15882,7 +15883,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.32.0" + "source": "https://github.com/symfony/ux-turbo/tree/v2.34.0" }, "funding": [ { @@ -15902,7 +15903,7 @@ "type": "tidelift" } ], - "time": "2025-12-17T06:03:34+00:00" + "time": "2026-03-21T22:29:11+00:00" }, { "name": "symfony/validator", @@ -16895,7 +16896,7 @@ }, { "name": "twig/cssinliner-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", @@ -16948,7 +16949,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.24.0" }, "funding": [ { @@ -16964,16 +16965,16 @@ }, { "name": "twig/extra-bundle", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "7a27e784dc56eddfef5e9295829b290ce06f1682" + "reference": "6a621fcb1f28aa9ea7b34a99047ae0cdf5b834c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/7a27e784dc56eddfef5e9295829b290ce06f1682", - "reference": "7a27e784dc56eddfef5e9295829b290ce06f1682", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/6a621fcb1f28aa9ea7b34a99047ae0cdf5b834c9", + "reference": "6a621fcb1f28aa9ea7b34a99047ae0cdf5b834c9", "shasum": "" }, "require": { @@ -17022,7 +17023,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.23.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.24.0" }, "funding": [ { @@ -17034,20 +17035,20 @@ "type": "tidelift" } ], - "time": "2025-12-18T20:46:15+00:00" + "time": "2026-02-07T08:07:38+00:00" }, { "name": "twig/html-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/html-extra.git", - "reference": "2ef1d0ccaa06d4f4405b330fe6c4b6f7b50fbbc3" + "reference": "313900fb98b371b006a55b1a29241a192634be13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/html-extra/zipball/2ef1d0ccaa06d4f4405b330fe6c4b6f7b50fbbc3", - "reference": "2ef1d0ccaa06d4f4405b330fe6c4b6f7b50fbbc3", + "url": "https://api.github.com/repos/twigphp/html-extra/zipball/313900fb98b371b006a55b1a29241a192634be13", + "reference": "313900fb98b371b006a55b1a29241a192634be13", "shasum": "" }, "require": { @@ -17090,7 +17091,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/html-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/html-extra/tree/v3.24.0" }, "funding": [ { @@ -17102,11 +17103,11 @@ "type": "tidelift" } ], - "time": "2025-12-02T14:45:16+00:00" + "time": "2026-03-17T07:24:08+00:00" }, { "name": "twig/inky-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/inky-extra.git", @@ -17160,7 +17161,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/inky-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/inky-extra/tree/v3.24.0" }, "funding": [ { @@ -17176,7 +17177,7 @@ }, { "name": "twig/intl-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", @@ -17224,7 +17225,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.24.0" }, "funding": [ { @@ -17240,16 +17241,16 @@ }, { "name": "twig/markdown-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/markdown-extra.git", - "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2" + "reference": "67a11120356e034a5bbc70c5b9b9a4d0f31ca06e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/faf069b259e2d3930c73c2f53e2dec8440bd90a2", - "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/67a11120356e034a5bbc70c5b9b9a4d0f31ca06e", + "reference": "67a11120356e034a5bbc70c5b9b9a4d0f31ca06e", "shasum": "" }, "require": { @@ -17296,7 +17297,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/markdown-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/markdown-extra/tree/v3.24.0" }, "funding": [ { @@ -17308,11 +17309,11 @@ "type": "tidelift" } ], - "time": "2025-12-02T14:45:16+00:00" + "time": "2026-02-07T08:07:38+00:00" }, { "name": "twig/string-extra", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", @@ -17363,7 +17364,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.23.0" + "source": "https://github.com/twigphp/string-extra/tree/v3.24.0" }, "funding": [ { @@ -17379,16 +17380,16 @@ }, { "name": "twig/twig", - "version": "v3.23.0", + "version": "v3.24.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9" + "reference": "a6769aefb305efef849dc25c9fd1653358c148f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", - "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6769aefb305efef849dc25c9fd1653358c148f0", + "reference": "a6769aefb305efef849dc25c9fd1653358c148f0", "shasum": "" }, "require": { @@ -17398,7 +17399,8 @@ "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpstan/phpstan": "^2.0", + "php-cs-fixer/shim": "^3.0@stable", + "phpstan/phpstan": "^2.0@stable", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -17442,7 +17444,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.23.0" + "source": "https://github.com/twigphp/Twig/tree/v3.24.0" }, "funding": [ { @@ -17454,7 +17456,7 @@ "type": "tidelift" } ], - "time": "2026-01-23T21:00:41+00:00" + "time": "2026-03-17T21:31:11+00:00" }, { "name": "ua-parser/uap-php", @@ -17592,16 +17594,16 @@ }, { "name": "web-auth/webauthn-lib", - "version": "5.2.4", + "version": "5.2.5", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "c346c9812d4d4a641f5ff26cd5fa4d0bf2035eeb" + "reference": "c28f27cb8f968d2b84db48587563f03bb451b60a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/c346c9812d4d4a641f5ff26cd5fa4d0bf2035eeb", - "reference": "c346c9812d4d4a641f5ff26cd5fa4d0bf2035eeb", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/c28f27cb8f968d2b84db48587563f03bb451b60a", + "reference": "c28f27cb8f968d2b84db48587563f03bb451b60a", "shasum": "" }, "require": { @@ -17662,7 +17664,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.4" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.5" }, "funding": [ { @@ -17674,11 +17676,11 @@ "type": "patreon" } ], - "time": "2026-03-08T17:01:15+00:00" + "time": "2026-03-23T21:43:02+00:00" }, { "name": "web-auth/webauthn-symfony-bundle", - "version": "5.2.4", + "version": "5.2.5", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", @@ -17744,7 +17746,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.4" + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.5" }, "funding": [ { @@ -18455,11 +18457,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.40", + "version": "2.1.42", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b", - "reference": "9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1279e1ce86ba768f0780c9d889852b4e02ff40d0", + "reference": "1279e1ce86ba768f0780c9d889852b4e02ff40d0", "shasum": "" }, "require": { @@ -18504,7 +18506,7 @@ "type": "github" } ], - "time": "2026-02-23T15:04:35+00:00" + "time": "2026-03-17T14:58:32+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -19166,21 +19168,21 @@ }, { "name": "rector/rector", - "version": "2.3.8", + "version": "2.3.9", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c" + "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/bbd37aedd8df749916cffa2a947cfc4714d1ba2c", - "reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/917842143fd9f5331a2adefc214b8d7143bd32c4", + "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.38" + "phpstan/phpstan": "^2.1.40" }, "conflict": { "rector/rector-doctrine": "*", @@ -19214,7 +19216,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.8" + "source": "https://github.com/rectorphp/rector/tree/2.3.9" }, "funding": [ { @@ -19222,7 +19224,7 @@ "type": "github" } ], - "time": "2026-02-22T09:45:50+00:00" + "time": "2026-03-16T09:43:55+00:00" }, { "name": "roave/security-advisories", @@ -19230,18 +19232,18 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "0d2dce39eb2bce812e8c71a73be98b0f5d78f489" + "reference": "f1f0c914f1f975c43f70f5d8ab7735a68752c424" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0d2dce39eb2bce812e8c71a73be98b0f5d78f489", - "reference": "0d2dce39eb2bce812e8c71a73be98b0f5d78f489", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f1f0c914f1f975c43f70f5d8ab7735a68752c424", + "reference": "f1f0c914f1f975c43f70f5d8ab7735a68752c424", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<5.0.6", + "admidio/admidio": "<=5.0.6", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -19283,6 +19285,7 @@ "athlon1600/php-proxy": "<=5.1", "athlon1600/php-proxy-app": "<=3", "athlon1600/youtube-downloader": "<=4", + "aureuserp/aureuserp": "<1.3.0.0-beta1", "austintoddj/canvas": "<=3.4.2", "auth0/auth0-php": ">=3.3,<8.18", "auth0/login": "<7.20", @@ -19290,8 +19293,10 @@ "auth0/wordpress": "<=5.4", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", + "avideo/avideo": "<=26", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<3.368", + "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", "azuracast/azuracast": "<=0.23.3", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", @@ -19352,7 +19357,7 @@ "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", - "cockpit-hq/cockpit": "<2.11.4", + "cockpit-hq/cockpit": "<2.13.5", "code16/sharp": "<9.11.1", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", @@ -19377,11 +19382,15 @@ "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", "couleurcitron/tarteaucitron-wp": "<0.3", - "cpsit/typo3-mailqueue": "<0.4.3|>=0.5,<0.5.1", - "craftcms/cms": "<=4.17.3|>=5,<=5.9.8", + "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", + "craftcms/aws-s3": ">=2.0.2,<=2.2.4", + "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", + "craftcms/cms": "<=4.17.7|>=5,<=5.9.13", "craftcms/commerce": ">=4,<4.11|>=5,<5.6", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", + "craftcms/google-cloud": ">=2.0.0.0-beta1,<=2.2", + "craftcms/webhooks": ">=3,<3.2", "croogo/croogo": "<=4.0.7", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -19419,6 +19428,7 @@ "dolibarr/dolibarr": "<21.0.3", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", + "dreamfactory/df-core": "<1.0.4", "drupal-pattern-lab/unified-twig-extensions": "<=0.1", "drupal/access_code": "<2.0.5", "drupal/acquia_dam": "<1.1.5", @@ -19502,7 +19512,7 @@ "filament/actions": ">=3.2,<3.2.123", "filament/filament": ">=4,<4.3.1", "filament/infolists": ">=3,<3.2.115", - "filament/tables": ">=3,<3.2.115", + "filament/tables": ">=3,<3.2.115|>=4,<4.8.5|>=5,<5.3.5", "filegator/filegator": "<7.8", "filp/whoops": "<2.1.13", "fineuploader/php-traditional-server": "<=1.2.2", @@ -19537,7 +19547,7 @@ "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<=2.3.3", + "froxlor/froxlor": "<=2.3.4", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=7.1.0.0-RC4", @@ -19616,6 +19626,7 @@ "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", "joelbutcher/socialstream": "<5.6|>=6,<6.2", + "johnbillion/query-monitor": "<3.20.4", "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", @@ -19634,6 +19645,7 @@ "jweiland/events2": "<8.3.8|>=9,<9.0.6", "jweiland/kk-downloader": "<1.2.2", "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", @@ -19662,7 +19674,7 @@ "lavalite/cms": "<=10.1", "lavitto/typo3-form-to-database": "<2.2.5|>=3,<3.2.2|>=4,<4.2.3|>=5,<5.0.2", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<=2.8", + "league/commonmark": "<=2.8.1", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "leantime/leantime": "<3.3", @@ -19694,7 +19706,7 @@ "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", "manogi/nova-tiptap": "<=3.2.6", - "mantisbt/mantisbt": "<2.27.2", + "mantisbt/mantisbt": "<2.28.1", "marcwillmann/turn": "<0.3.3", "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", @@ -19787,7 +19799,7 @@ "openid/php-openid": "<2.3", "openmage/magento-lts": "<20.16.1", "opensolutions/vimbadmin": "<=3.0.15", - "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", + "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1", "orchid/platform": ">=8,<14.43", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", @@ -19834,7 +19846,7 @@ "phpoffice/phpexcel": "<=1.8.2", "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpseclib/phpseclib": "<=2.0.51|>=3,<=3.0.49", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", @@ -19882,6 +19894,7 @@ "pubnub/pubnub": "<6.1", "punktde/pt_extbase": "<1.5.1", "pusher/pusher-php-server": "<2.2.1", + "putyourlightson/craft-sprig": ">=2,<2.15.2|>=3,<3.15.2", "pwweb/laravel-core": "<=0.3.6.0-beta", "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", "pyrocms/pyrocms": "<=3.9.1", @@ -19890,6 +19903,7 @@ "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", "rainlab/user-plugin": "<=1.4.5", + "ralffreit/mfa-email": "<=2", "rankmath/seo-by-rank-math": "<=1.0.95", "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", @@ -19900,6 +19914,7 @@ "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", + "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", @@ -19951,7 +19966,7 @@ "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", "simplesamlphp/xml-common": "<1.20", - "simplesamlphp/xml-security": "<2.3.1", + "simplesamlphp/xml-security": "<1.13.9|>=2,<2.3.1", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", "sjbr/sr-feuser-register": "<2.6.2|>=5.1,<12.5", @@ -19979,7 +19994,7 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.11|>=6,<6.6.2", + "statamic/cms": "<5.73.14|>=6,<6.7.1", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -20154,7 +20169,7 @@ "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", "wpmetabox/meta-box": "<5.11.2", - "wwbn/avideo": "<25", + "wwbn/avideo": "<=26", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", @@ -20173,6 +20188,7 @@ "yiisoft/yii2-redis": "<2.0.20", "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yoast/duplicate-post": "<=4.5", "yourls/yourls": "<=1.10.2", "yuan1994/tpadmin": "<=1.3.12", "yungifez/skuul": "<=2.6.5", @@ -20252,7 +20268,7 @@ "type": "tidelift" } ], - "time": "2026-03-13T21:11:59+00:00" + "time": "2026-03-24T17:23:16+00:00" }, { "name": "sebastian/cli-parser", @@ -21442,19 +21458,20 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.66.0", + "version": "v1.67.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "b5b4afa2a570b926682e9f34615a6766dd560ff4" + "reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/b5b4afa2a570b926682e9f34615a6766dd560ff4", - "reference": "b5b4afa2a570b926682e9f34615a6766dd560ff4", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/6ce8b313845f16bcf385ee3cb31d8b24e30d5516", + "reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516", "shasum": "" }, "require": { + "composer-runtime-api": "^2.1", "doctrine/inflector": "^2.0", "nikic/php-parser": "^5.0", "php": ">=8.1", @@ -21516,7 +21533,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.66.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.67.0" }, "funding": [ { @@ -21536,7 +21553,7 @@ "type": "tidelift" } ], - "time": "2026-02-09T08:55:54+00:00" + "time": "2026-03-18T13:39:06+00:00" }, { "name": "symfony/phpunit-bridge", diff --git a/config/reference.php b/config/reference.php index 0fac7f9b..e353099d 100644 --- a/config/reference.php +++ b/config/reference.php @@ -2493,7 +2493,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * max_header_length?: int|Param, // Max header length supported by the cache server. // Default: 7500 * request_options?: mixed, // To pass options to the client charged with the request. // Default: [] * purger?: scalar|Param|null, // Specify a purger to use (available values: "api_platform.http_cache.purger.varnish.ban", "api_platform.http_cache.purger.varnish.xkey", "api_platform.http_cache.purger.souin"). // Default: "api_platform.http_cache.purger.varnish" - * xkey?: array{ // Deprecated: The "xkey" configuration is deprecated, use your own purger to customize surrogate keys or the appropriate paramters. + * xkey?: array{ // Deprecated: The "xkey" configuration is deprecated, use your own purger to customize surrogate keys or the appropriate parameters. * glue?: scalar|Param|null, // xkey glue between keys // Default: " " * }, * }, diff --git a/yarn.lock b/yarn.lock index d5711903..105c25c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,58 +2,58 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.19.6": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.6.tgz#472ba8f84d3bd1d253d24759caeaac454db902e7" - integrity sha512-6EoD7PeM2WBq5GY1jm0gGonDW2JVU4BaHT9tAwDcaPkc6gYIRZeY7X7aFuwdRvk9R/jwsh8sz4flDao0+Kua6g== +"@algolia/autocomplete-core@1.19.7": + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.7.tgz#723ad865d030365c3be73d5e466cfc16c501318e" + integrity sha512-4sqB+Nfo131MkKMledkmsxX08uZHMI4KbscUdsX6U69scchXsgkgENjN9tRVBKHAOn900mBSNEpUdfzKZw8f+A== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.19.6" - "@algolia/autocomplete-shared" "1.19.6" + "@algolia/autocomplete-plugin-algolia-insights" "1.19.7" + "@algolia/autocomplete-shared" "1.19.7" -"@algolia/autocomplete-js@1.19.6", "@algolia/autocomplete-js@^1.17.0": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.6.tgz#a81b3b40e7e6356f22af75bfc1c92116d4a86243" - integrity sha512-rHYKT6P+2FZ1+7a1/JtWIuCmfioOt5eXsAcri6XTYsSutl3BIh8s2e98kbvjbhLfwEuuVDWtST1hdAY2pQdrKw== +"@algolia/autocomplete-js@1.19.7", "@algolia/autocomplete-js@^1.17.0": + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.7.tgz#41c0fb2e2d4d29a79b893ea5cae25d64e33613ec" + integrity sha512-ExTgOXioDEjM1rpRnxY+3PAQzmlsHM28WwDhdY01VIHLfzr9PoKtIdTWd0N2u6XG8HdaZvDw3PrjGZ3Rno72gg== dependencies: - "@algolia/autocomplete-core" "1.19.6" - "@algolia/autocomplete-preset-algolia" "1.19.6" - "@algolia/autocomplete-shared" "1.19.6" + "@algolia/autocomplete-core" "1.19.7" + "@algolia/autocomplete-preset-algolia" "1.19.7" + "@algolia/autocomplete-shared" "1.19.7" htm "^3.1.1" preact "^10.13.2" -"@algolia/autocomplete-plugin-algolia-insights@1.19.6": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.6.tgz#7db79ca4a107059477b56e31e8f7760513f265a2" - integrity sha512-VD53DBixhEwDvOB00D03DtBVhh5crgb1N0oH3QTscfYk4TpBH+CKrwmN/XrN/VdJAdP+4K6SgwLii/3OwM9dHw== +"@algolia/autocomplete-plugin-algolia-insights@1.19.7": + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.7.tgz#21108d395d5b43fc1d1f24ac77b0b087d2fbcc8a" + integrity sha512-5nBYyDNUUXThFGrdYeWA2OkoCaIzHzspIjN2gBPRmURdo4xMQgzay4M+J+XgZginlQcJ+UFYkHKbUYQwfAZ3jw== dependencies: - "@algolia/autocomplete-shared" "1.19.6" + "@algolia/autocomplete-shared" "1.19.7" "@algolia/autocomplete-plugin-recent-searches@^1.17.0": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.6.tgz#13b6617f03bfc8257d947a0d6cf0435de5677847" - integrity sha512-HQdSxHXFlxPUx6okxYWrrSbVD2o3OrDstU/E83Qvdl3Pwya3eZKrjhBb84i3Tqkm71wuABRYmCMNjc/qGFX4hw== + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.7.tgz#a78da3e8baba4e0dc66acd2df15008ff9bf2bb80" + integrity sha512-fQBldPnmilJFLK29wUajAjJ7V19cQbCCiAutoGzAEpVlrWMl6xrP0qsOy5oy4ijmBnPMqX1wwzh76bMbKbU4LQ== dependencies: - "@algolia/autocomplete-core" "1.19.6" - "@algolia/autocomplete-js" "1.19.6" - "@algolia/autocomplete-preset-algolia" "1.19.6" - "@algolia/autocomplete-shared" "1.19.6" + "@algolia/autocomplete-core" "1.19.7" + "@algolia/autocomplete-js" "1.19.7" + "@algolia/autocomplete-preset-algolia" "1.19.7" + "@algolia/autocomplete-shared" "1.19.7" -"@algolia/autocomplete-preset-algolia@1.19.6": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.6.tgz#bf800e3e0e3f69f661476d9d1a3237b122e84aa5" - integrity sha512-/uQlHGK5Q2x5Nvrp3W7JMg4YNGG/ygkHtQLTltDbkpd45wnhV9jUiQA6aCnBed9cq0BXhOJZRxh1zGVZ3yRhBg== +"@algolia/autocomplete-preset-algolia@1.19.7": + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.7.tgz#88a315b8450d810d7d243a8a55873f63d0ae16bf" + integrity sha512-PXou3XXPN18v/lJwpP40JwUjatwKVF1zeevoj2dXo1+TKrFB8XxSiGcBbChBQ6RYUEKYoS+ck8WMbpn4LwyHAw== dependencies: - "@algolia/autocomplete-shared" "1.19.6" + "@algolia/autocomplete-shared" "1.19.7" -"@algolia/autocomplete-shared@1.19.6": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.6.tgz#5261f04a1cadf82138b6feb5a6df383106f50d60" - integrity sha512-DG1n2B6XQw6DWB5veO4RuzQ/N2oGNpG+sSzGT7gUbi7WhF+jN57abcv2QhB5flXZ0NgddE1i6h7dZuQmYBEorQ== +"@algolia/autocomplete-shared@1.19.7": + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.7.tgz#56607ba42295fb171541e8209ec20a1100482eb1" + integrity sha512-Z6nBmZzPX6A0gV0GUrXDwMPhh6AnrWQshebAfZ/oJ5ioxVoPyRl30SLd3kpCrWr/xXXaaFxUq2qthVeBC2LlVg== "@algolia/autocomplete-theme-classic@^1.17.0": - version "1.19.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.6.tgz#ba1c9760ac725283d086a9affd784823fdb72c71" - integrity sha512-lJg8fGK7ucuapoCwFqciTAvAOb7lI/BgWXN0VP+nW/oG0xtig6FvJz/XXxHxfvfVWLCfDvmW5Dw+vEAnbxXiFA== + version "1.19.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.7.tgz#f9e6cb90e4759e4758652bab323357a28335823e" + integrity sha512-XDN1pc6k3qlowkyBwkQGd4+j3R8OZtVY9BR26Tq+0ZJgyudiswdvDWLUJD/g13q4UoVy55/ygy6qrwhMKsBxZA== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" @@ -141,10 +141,10 @@ regexpu-core "^6.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.7": - version "0.6.7" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.7.tgz#8d01cba97de419115ad3497573a476db15dc6c6a" - integrity sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w== +"@babel/helper-define-polyfill-provider@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz#cf1e4462b613f2b54c41e6ff758d5dfcaa2c85d1" + integrity sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA== dependencies: "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-plugin-utils" "^7.28.6" @@ -245,17 +245,17 @@ "@babel/types" "^7.28.6" "@babel/helpers@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" - integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.2.tgz#9cfbccb02b8e229892c0b07038052cc1a8709c49" + integrity sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw== dependencies: "@babel/template" "^7.28.6" - "@babel/types" "^7.28.6" + "@babel/types" "^7.29.0" "@babel/parser@^7.18.9", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" - integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.2.tgz#58bd50b9a7951d134988a1ae177a35ef9a703ba1" + integrity sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA== dependencies: "@babel/types" "^7.29.0" @@ -723,9 +723,9 @@ "@babel/helper-plugin-utils" "^7.28.6" "@babel/preset-env@^7.19.4": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.0.tgz#c55db400c515a303662faaefd2d87e796efa08d0" - integrity sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w== + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.2.tgz#5a173f22c7d8df362af1c9fe31facd320de4a86c" + integrity sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw== dependencies: "@babel/compat-data" "^7.29.0" "@babel/helper-compilation-targets" "^7.28.6" @@ -2025,10 +2025,10 @@ schema-utils "^3.0.0 || ^4.0.0" "@symfony/ux-translator@file:vendor/symfony/ux-translator/assets": - version "2.31.0" + version "2.33.0" "@symfony/ux-turbo@file:vendor/symfony/ux-turbo/assets": - version "2.31.0" + version "2.33.0" "@symfony/webpack-encore@^5.1.0": version "5.3.1" @@ -2065,9 +2065,9 @@ integrity sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg== "@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + version "4.1.13" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.13.tgz#22d1cc9d542d3593caea764f974306ab36286ee7" + integrity sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw== dependencies: "@types/ms" "*" @@ -2563,28 +2563,28 @@ available-typed-arrays@^1.0.7: find-up "^5.0.0" babel-plugin-polyfill-corejs2@^0.4.15: - version "0.4.16" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.16.tgz#a1321145f6cde738b0a412616b6bcf77f143ab36" - integrity sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw== + version "0.4.17" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz#198f970f1c99a856b466d1187e88ce30bd199d91" + integrity sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w== dependencies: "@babel/compat-data" "^7.28.6" - "@babel/helper-define-polyfill-provider" "^0.6.7" + "@babel/helper-define-polyfill-provider" "^0.6.8" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.1.tgz#75fb533a1c23c0a976f189cba1d035199705b8ad" - integrity sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw== + version "0.14.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz#6ac08d2f312affb70c4c69c0fbba4cb417ee5587" + integrity sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.7" + "@babel/helper-define-polyfill-provider" "^0.6.8" core-js-compat "^3.48.0" babel-plugin-polyfill-regenerator@^0.6.6: - version "0.6.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.7.tgz#eca723d67ef87b798881ad00546db1b6dd72e1ef" - integrity sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA== + version "0.6.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz#8a6bfd5dd54239362b3d06ce47ac52b2d95d7721" + integrity sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.7" + "@babel/helper-define-polyfill-provider" "^0.6.8" bail@^2.0.0: version "2.0.2" @@ -2619,9 +2619,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.10.8" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz#23d1cea1a85b181c2b8660b6cfe626dc2fb15630" - integrity sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ== + version "2.10.10" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz#e74bd066724c1d8d7d8ea75fc3be25389a7a5c56" + integrity sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ== big.js@^5.2.2: version "5.2.2" @@ -2667,9 +2667,9 @@ brace-expansion@^1.1.7: concat-map "0.0.1" brace-expansion@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" - integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== + version "5.0.5" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" + integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== dependencies: balanced-match "^4.0.2" @@ -2789,9 +2789,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001779" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz#75e4941d406928ba00c8d7a3ddda0b2cb90d7474" - integrity sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA== + version "1.0.30001781" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz#344b47c03eb8168b79c3c158b872bcfbdd02a400" + integrity sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw== ccount@^2.0.0: version "2.0.1" @@ -3101,16 +3101,16 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js-compat@^3.48.0: - version "3.48.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6" - integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== + version "3.49.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.49.0.tgz#06145447d92f4aaf258a0c44f24b47afaeaffef6" + integrity sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA== dependencies: browserslist "^4.28.1" core-js@^3.38.0: - version "3.48.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.48.0.tgz#1f813220a47bbf0e667e3885c36cd6f0593bf14d" - integrity sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ== + version "3.49.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.49.0.tgz#8b4d520ac034311fa21aa616f017ada0e0dbbddd" + integrity sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg== core-util-is@~1.0.0: version "1.0.3" @@ -3670,9 +3670,9 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: gopd "^1.2.0" electron-to-chromium@^1.5.263: - version "1.5.313" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz#193e9ae2c2ab6915acb41e833068381e4ef0b3e4" - integrity sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA== + version "1.5.322" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.322.tgz#9c24e49f7098ca19bc87c0e9c7e0ad6ffe4fddca" + integrity sha512-vFU34OcrvMcH66T+dYC3G4nURmgfDVewMIu6Q2urXpumAPSMmzvcn04KVVV8Opikq8Vs5nUbO/8laNhNRqSzYw== emoji-regex@^7.0.1: version "7.0.3" @@ -3690,9 +3690,9 @@ emojis-list@^3.0.0: integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== enhanced-resolve@^5.0.0, enhanced-resolve@^5.20.0: - version "5.20.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz#323c2a70d2aa7fb4bdfd6d3c24dfc705c581295d" - integrity sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ== + version "5.20.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz#eeeb3966bea62c348c40a0cc9e7912e2557d0be0" + integrity sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA== dependencies: graceful-fs "^4.2.4" tapable "^2.3.0" @@ -4145,9 +4145,9 @@ get-symbol-description@^1.1.0: get-intrinsic "^1.2.6" get-tsconfig@^4.4.0: - version "4.13.6" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.6.tgz#2fbfda558a98a691a798f123afd95915badce876" - integrity sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw== + version "4.13.7" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.7.tgz#b9d8b199b06033ceeea1a93df7ea5765415089bc" + integrity sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q== dependencies: resolve-pkg-maps "^1.0.0" @@ -4956,9 +4956,9 @@ jszip@^3.2.0: setimmediate "^1.0.5" katex@^0.16.0: - version "0.16.38" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.38.tgz#45f7b9253ac6b6a80fd168ee893fe0209b755338" - integrity sha512-cjHooZUmIAUmDsHBN+1n8LaZdpmbj03LtYeYPyuYB7OuloiaeaV6N4LcfjcnHVzGWjVQmKrxxTrpDcmSzEZQwQ== + version "0.16.41" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.41.tgz#21d5b950ddec764d2c6f445cded96406d8701ba3" + integrity sha512-AdDAqox1xU1h5yGai/uksjxwXby0gbRkwQaWvaE6Esp2wDX/Y/lL6qxQhVg84gzFsriyIv+WVg7bXaVy1PbcJg== dependencies: commander "^8.3.0" @@ -5101,9 +5101,9 @@ marked-mangle@^1.0.1: integrity sha512-bRrqNcfU9v3iRECb7YPvA+/xKZMjHojd9R92YwHbFjdPQ+Wc7vozkbGKAv4U8AUl798mNUuY3DTBQkedsV3TeQ== marked@^17.0.1: - version "17.0.4" - resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.4.tgz#38293b06b0605db39107803f3398938bbbed1b28" - integrity sha512-NOmVMM+KAokHMvjWmC5N/ZOvgmSWuqJB8FoYI019j4ogb/PeRMKoKIjReZ2w3376kkA8dSJIP8uD993Kxc0iRQ== + version "17.0.5" + resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.5.tgz#8fc6878a439463a007b05d346d2ad50a87ec3f0e" + integrity sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg== math-intrinsics@^1.1.0: version "1.1.0" @@ -5966,14 +5966,14 @@ picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== picomatch@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" - integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + version "4.0.4" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== pify@^2.3.0: version "2.3.0" @@ -6913,9 +6913,9 @@ safe-regex-test@^1.1.0: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@^1.4.3, sax@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.5.0.tgz#b5549b671069b7aa392df55ec7574cf411179eb8" - integrity sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA== + version "1.6.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" + integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== schema-utils@^3.0.0: version "3.3.0" @@ -7371,9 +7371,9 @@ tagged-tag@^1.0.0: integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" - integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.2.tgz#86755feabad08d82a26b891db044808c6ad00f15" + integrity sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA== tar@^6.0.2: version "6.2.1" @@ -7413,9 +7413,9 @@ terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: terser "^5.31.1" terser@^5.3.4, terser@^5.31.1: - version "5.46.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.0.tgz#1b81e560d584bbdd74a8ede87b4d9477b0ff9695" - integrity sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg== + version "5.46.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.1.tgz#40e4b1e35d5f13130f82793a8b3eeb7ec3a92eee" + integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.15.0" @@ -7497,9 +7497,9 @@ tslib@^2.8.0: integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-fest@^5.4.4: - version "5.4.4" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.4.4.tgz#577f165b5ecb44cfc686559cc54ca77f62aa374d" - integrity sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw== + version "5.5.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.5.0.tgz#78fca72f3a1f9ec964e6ae260db492b070c56f3b" + integrity sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g== dependencies: tagged-tag "^1.0.0" @@ -7970,9 +7970,9 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.19.0: - version "8.19.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" - integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== + version "8.20.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" + integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA== xmldoc@^2.0.3: version "2.0.3" @@ -7997,9 +7997,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + version "1.10.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3" + integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA== yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" From 4206b702ffff68053e66d168675f9c6e595f61dc Mon Sep 17 00:00:00 2001 From: Marc Date: Tue, 24 Mar 2026 21:33:41 +0100 Subject: [PATCH 019/108] Made EIGP114 parsing less strict (#1321) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Enhance barcode format checking in isFormat06Code Updated isFormat06Code method to handle additional barcode formats for compatibility with older Mouser parts and Eyoyo barcode scanners that don't omit the record separator character * Added tests --------- Co-authored-by: Jan Böhmer --- .../EIGP114BarcodeScanResult.php | 14 +++++--- .../EIGP114BarcodeScanResultTest.php | 33 +++++++++++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php index 38b20562..0ff74fd4 100644 --- a/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php +++ b/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php @@ -254,12 +254,16 @@ readonly class EIGP114BarcodeScanResult implements BarcodeScanResultInterface */ public static function isFormat06Code(string $input): bool { - //Code must begin with [)>06 - if(!str_starts_with($input, "[)>\u{1E}06\u{1D}")){ - return false; + //Code should begin with [)>06 as per the standard + if(!str_starts_with($input, "[)>\u{1E}06\u{1D}") + // some codes don't contain record separators + && !str_starts_with($input, "[)>06\u{1D}") + // This is found on old Mouser parts + && !str_starts_with($input, ">[)>06\u{1D}")) + { + return false; } - - //Digikey does not put a trailer onto the barcode, so we just check for the header + //Digikey and Mouser don't put a trailer onto the barcode, so we just check for the header return true; } diff --git a/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php b/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php index 6d69a773..291b3c4c 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php @@ -93,6 +93,13 @@ final class EIGP114BarcodeScanResultTest extends TestCase //Valid code (digikey, without trailer) $this->assertTrue(EIGP114BarcodeScanResult::isFormat06Code("[)>\x1e06\x1dPQ1045-ND\x1d1P364019-01\x1d30PQ1045-ND\x1dK12432 TRAVIS FOSS P\x1d1K85732873\x1d10K103332956\x1d9D231013\x1d1TQJ13P\x1d11K1\x1d4LTW\x1dQ3\x1d11ZPICK\x1d12Z7360988\x1d13Z999999\x1d20Z0000000000000000000000000000000000000000000000000000000000000000000000000000000000000")); + + //Valid code (without record separator) + $this->assertTrue(EIGP114BarcodeScanResult::isFormat06Code("[)>06\x1DP596-777A1-ND\x1D1PXAF4444\x1DQ3\x1D10D1452\x1D1TBF1103\x1D4LUS\x1E\x04")); + + //Old mouser format + $this->assertTrue(EIGP114BarcodeScanResult::isFormat06Code(">[)>06\x1DP596-777A1-ND\x1D1PXAF4444\x1DQ3\x1D10D1452\x1D1TBF1103\x1D4LUS\x1E\x04")); + } public function testParseFormat06CodeInvalid(): void @@ -101,6 +108,32 @@ final class EIGP114BarcodeScanResultTest extends TestCase EIGP114BarcodeScanResult::parseFormat06Code(''); } + public function testParseWithoutRecordSeparator(): void + { + $barcode = EIGP114BarcodeScanResult::parseFormat06Code("[)>06\x1DP596-777A1-ND\x1D1PXAF4444\x1DQ3\x1D10D1452\x1D1TBF1103\x1D4LUS\x1E\x04"); + $this->assertSame([ + 'P' => '596-777A1-ND', + '1P' => 'XAF4444', + 'Q' => '3', + '10D' => '1452', + '1T' => 'BF1103', + '4L' => 'US', + ], $barcode->data); + } + + public function testParseOldMouserFormat(): void + { + $barcode = EIGP114BarcodeScanResult::parseFormat06Code(">[)>06\x1DP596-777A1-ND\x1D1PXAF4444\x1DQ3\x1D10D1452\x1D1TBF1103\x1D4LUS\x1E\x04"); + $this->assertSame([ + 'P' => '596-777A1-ND', + '1P' => 'XAF4444', + 'Q' => '3', + '10D' => '1452', + '1T' => 'BF1103', + '4L' => 'US', + ], $barcode->data); + } + public function testParseFormat06Code(): void { $barcode = EIGP114BarcodeScanResult::parseFormat06Code("[)>\x1E06\x1DP596-777A1-ND\x1D1PXAF4444\x1DQ3\x1D10D1452\x1D1TBF1103\x1D4LUS\x1E\x04"); From 34a84bce8f5093f589d7912f37b4a72d1ec3598b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 27 Mar 2026 23:27:03 +0100 Subject: [PATCH 020/108] Updated depedencies --- composer.lock | 165 ++++++++++++++++++++++--------------------- config/reference.php | 2 +- yarn.lock | 81 +++++++++++---------- 3 files changed, 126 insertions(+), 122 deletions(-) diff --git a/composer.lock b/composer.lock index 2a413dc6..0b375b2d 100644 --- a/composer.lock +++ b/composer.lock @@ -968,16 +968,16 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", - "reference": "669e02ddb28cf8c6f2db8cd405ff4dfd905b7855" + "reference": "0b0e9328e08f38ff381afd7cba68976ed1dc714a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/669e02ddb28cf8c6f2db8cd405ff4dfd905b7855", - "reference": "669e02ddb28cf8c6f2db8cd405ff4dfd905b7855", + "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/0b0e9328e08f38ff381afd7cba68976ed1dc714a", + "reference": "0b0e9328e08f38ff381afd7cba68976ed1dc714a", "shasum": "" }, "require": { @@ -1052,26 +1052,26 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.1" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.2" }, - "time": "2026-03-13T11:03:46+00:00" + "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "b947b0e29d5f345430bc29958db8efce4e7c2450" + "reference": "553f7fe120c840a8db08d8e970860e209f40ebc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/b947b0e29d5f345430bc29958db8efce4e7c2450", - "reference": "b947b0e29d5f345430bc29958db8efce4e7c2450", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/553f7fe120c840a8db08d8e970860e209f40ebc2", + "reference": "553f7fe120c840a8db08d8e970860e209f40ebc2", "shasum": "" }, "require": { - "api-platform/doctrine-common": "^4.2.9", + "api-platform/doctrine-common": "^4.2.23", "api-platform/metadata": "^4.2", "api-platform/serializer": "^4.2.16", "api-platform/state": "^4.2.4", @@ -1141,13 +1141,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.1" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.2" }, - "time": "2026-03-20T09:11:10+00:00" + "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/documentation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1204,13 +1204,13 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.3.1" + "source": "https://github.com/api-platform/documentation/tree/v4.3.2" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", @@ -1284,13 +1284,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.3.1" + "source": "https://github.com/api-platform/http-cache/tree/v4.3.2" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/hydra", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", @@ -1371,13 +1371,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.3.1" + "source": "https://github.com/api-platform/hydra/tree/v4.3.2" }, "time": "2026-03-20T09:00:10+00:00" }, { "name": "api-platform/json-api", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", @@ -1453,13 +1453,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.3.1" + "source": "https://github.com/api-platform/json-api/tree/v4.3.2" }, "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", @@ -1534,13 +1534,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.3.1" + "source": "https://github.com/api-platform/json-schema/tree/v4.3.2" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", @@ -1614,22 +1614,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.3.1" + "source": "https://github.com/api-platform/jsonld/tree/v4.3.2" }, "time": "2026-03-13T08:23:46+00:00" }, { "name": "api-platform/metadata", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "10016ebdff602c3460a49bcf7002ad0d68231e8b" + "reference": "e5d54902ad9817f1734ef39fe5b34d3c9b505f27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/10016ebdff602c3460a49bcf7002ad0d68231e8b", - "reference": "10016ebdff602c3460a49bcf7002ad0d68231e8b", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/e5d54902ad9817f1734ef39fe5b34d3c9b505f27", + "reference": "e5d54902ad9817f1734ef39fe5b34d3c9b505f27", "shasum": "" }, "require": { @@ -1712,22 +1712,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.3.1" + "source": "https://github.com/api-platform/metadata/tree/v4.3.2" }, - "time": "2026-03-13T14:49:56+00:00" + "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/openapi", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", - "reference": "afc45db74d474e43f8533b9c497102c699299dad" + "reference": "64268bd78e43c64672ab279d1cc767b75a868671" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/openapi/zipball/afc45db74d474e43f8533b9c497102c699299dad", - "reference": "afc45db74d474e43f8533b9c497102c699299dad", + "url": "https://api.github.com/repos/api-platform/openapi/zipball/64268bd78e43c64672ab279d1cc767b75a868671", + "reference": "64268bd78e43c64672ab279d1cc767b75a868671", "shasum": "" }, "require": { @@ -1803,22 +1803,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.3.1" + "source": "https://github.com/api-platform/openapi/tree/v4.3.2" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-03-25T19:19:41+00:00" }, { "name": "api-platform/serializer", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "0075089665520cfb041129b26bb49bdcdf5ebb16" + "reference": "c8a62096d277b89b0f146aa90c65eeaeb1412900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/0075089665520cfb041129b26bb49bdcdf5ebb16", - "reference": "0075089665520cfb041129b26bb49bdcdf5ebb16", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/c8a62096d277b89b0f146aa90c65eeaeb1412900", + "reference": "c8a62096d277b89b0f146aa90c65eeaeb1412900", "shasum": "" }, "require": { @@ -1897,22 +1897,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.3.1" + "source": "https://github.com/api-platform/serializer/tree/v4.3.2" }, - "time": "2026-03-20T09:00:10+00:00" + "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/state", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "fc42812fb601b7c83aa43216d4329e89df79fe82" + "reference": "bc69186661ca8d206093880c00a791ede0a79574" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/fc42812fb601b7c83aa43216d4329e89df79fe82", - "reference": "fc42812fb601b7c83aa43216d4329e89df79fe82", + "url": "https://api.github.com/repos/api-platform/state/zipball/bc69186661ca8d206093880c00a791ede0a79574", + "reference": "bc69186661ca8d206093880c00a791ede0a79574", "shasum": "" }, "require": { @@ -1994,22 +1994,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.3.1" + "source": "https://github.com/api-platform/state/tree/v4.3.2" }, - "time": "2026-03-17T15:43:29+00:00" + "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/symfony", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "c416366b799f9da731bb053af0f2a120b4554259" + "reference": "69070b33f11ed7c163ba75ecfea192e460b89ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/c416366b799f9da731bb053af0f2a120b4554259", - "reference": "c416366b799f9da731bb053af0f2a120b4554259", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/69070b33f11ed7c163ba75ecfea192e460b89ce0", + "reference": "69070b33f11ed7c163ba75ecfea192e460b89ce0", "shasum": "" }, "require": { @@ -2122,13 +2122,13 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.3.1" + "source": "https://github.com/api-platform/symfony/tree/v4.3.2" }, - "time": "2026-03-20T10:54:28+00:00" + "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/validator", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", @@ -2198,7 +2198,7 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.3.1" + "source": "https://github.com/api-platform/validator/tree/v4.3.2" }, "time": "2026-03-17T15:23:21+00:00" }, @@ -9945,16 +9945,16 @@ }, { "name": "shivas/versioning-bundle", - "version": "4.1.1", + "version": "4.1.2", "source": { "type": "git", "url": "https://github.com/shivas/versioning-bundle.git", - "reference": "fd89e3501ff1b0d3e6abe61eb7a878d1d4746868" + "reference": "766600f3f81551b6366d5a4db6cf97d5bfa47b2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shivas/versioning-bundle/zipball/fd89e3501ff1b0d3e6abe61eb7a878d1d4746868", - "reference": "fd89e3501ff1b0d3e6abe61eb7a878d1d4746868", + "url": "https://api.github.com/repos/shivas/versioning-bundle/zipball/766600f3f81551b6366d5a4db6cf97d5bfa47b2c", + "reference": "766600f3f81551b6366d5a4db6cf97d5bfa47b2c", "shasum": "" }, "require": { @@ -9998,10 +9998,10 @@ ], "support": { "issues": "https://github.com/shivas/versioning-bundle/issues", - "source": "https://github.com/shivas/versioning-bundle/tree/4.1.1", + "source": "https://github.com/shivas/versioning-bundle/tree/4.1.2", "wiki": "https://github.com/shivas/versioning-bundle/wiki" }, - "time": "2024-08-14T19:33:15+00:00" + "time": "2026-03-25T12:32:10+00:00" }, { "name": "spatie/db-dumper", @@ -18457,11 +18457,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.42", + "version": "2.1.44", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1279e1ce86ba768f0780c9d889852b4e02ff40d0", - "reference": "1279e1ce86ba768f0780c9d889852b4e02ff40d0", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4a88c083c668b2c364a425c9b3171b2d9ea5d218", + "reference": "4a88c083c668b2c364a425c9b3171b2d9ea5d218", "shasum": "" }, "require": { @@ -18506,7 +18506,7 @@ "type": "github" } ], - "time": "2026-03-17T14:58:32+00:00" + "time": "2026-03-25T17:34:21+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -19232,12 +19232,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f1f0c914f1f975c43f70f5d8ab7735a68752c424" + "reference": "00c5ced635131da46de6b6e4d76c6e82f9c9bf6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f1f0c914f1f975c43f70f5d8ab7735a68752c424", - "reference": "f1f0c914f1f975c43f70f5d8ab7735a68752c424", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/00c5ced635131da46de6b6e4d76c6e82f9c9bf6a", + "reference": "00c5ced635131da46de6b6e4d76c6e82f9c9bf6a", "shasum": "" }, "conflict": { @@ -19295,7 +19295,7 @@ "automattic/jetpack": "<9.8", "avideo/avideo": "<=26", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": "<3.368", + "aws/aws-sdk-php": "<=3.371.3", "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", "azuracast/azuracast": "<=0.23.3", "b13/seo_basics": "<0.8.2", @@ -19358,7 +19358,7 @@ "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", "cockpit-hq/cockpit": "<2.13.5", - "code16/sharp": "<9.11.1", + "code16/sharp": "<9.20", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", "codeigniter4/framework": "<4.6.2", @@ -19425,7 +19425,7 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<21.0.3", + "dolibarr/dolibarr": "<=22.0.4", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", "dreamfactory/df-core": "<1.0.4", @@ -19566,7 +19566,7 @@ "globalpayments/php-sdk": "<2", "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.4", + "google/protobuf": "<4.33.6", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gp247/core": "<1.1.24", "gree/jose": "<2.2.1", @@ -19586,6 +19586,7 @@ "hjue/justwriting": "<=1", "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", + "hybridauth/hybridauth": "<=3.12.2", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.25|>=5,<5.0.3", "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", @@ -19614,6 +19615,7 @@ "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", + "invoiceninja/invoiceninja": "<5.13.4", "ipl/web": "<0.10.1", "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", @@ -19680,7 +19682,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<26.2", + "librenms/librenms": "<26.3", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.15.4", @@ -19737,6 +19739,7 @@ "mikehaertl/php-shellcommand": "<1.6.1", "mineadmin/mineadmin": "<=3.0.9", "miniorange/miniorange-saml": "<1.4.3", + "miraheze/ts-portal": "<=33", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", "modx/revolution": "<=3.1", @@ -19876,7 +19879,7 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.2.4|>=9.0.0.0-alpha1,<9.0.3", + "prestashop/prestashop": "<8.2.5|>=9.0.0.0-alpha1,<9.1", "prestashop/productcomments": "<5.0.2", "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", "prestashop/ps_contactinfo": "<=3.3.2", @@ -19894,7 +19897,7 @@ "pubnub/pubnub": "<6.1", "punktde/pt_extbase": "<1.5.1", "pusher/pusher-php-server": "<2.2.1", - "putyourlightson/craft-sprig": ">=2,<2.15.2|>=3,<3.15.2", + "putyourlightson/craft-sprig": ">=2,<2.15.2|>=3,<3.7.2", "pwweb/laravel-core": "<=0.3.6.0-beta", "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", "pyrocms/pyrocms": "<=3.9.1", @@ -19903,7 +19906,7 @@ "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", "rainlab/user-plugin": "<=1.4.5", - "ralffreit/mfa-email": "<=2", + "ralffreit/mfa-email": "<1.0.7|==2", "rankmath/seo-by-rank-math": "<=1.0.95", "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", @@ -19924,6 +19927,7 @@ "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "saloonphp/saloon": "<4", "samwilson/unlinked-wikibase": "<1.42", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", @@ -19994,7 +19998,7 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.14|>=6,<6.7.1", + "statamic/cms": "<5.73.16|>=6,<6.7.2", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -20173,6 +20177,7 @@ "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", + "yansongda/pay": "<=3.7.19", "yeswiki/yeswiki": "<=4.5.4", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", @@ -20268,7 +20273,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T17:23:16+00:00" + "time": "2026-03-27T20:12:30+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/reference.php b/config/reference.php index e353099d..4e20a73d 100644 --- a/config/reference.php +++ b/config/reference.php @@ -1712,7 +1712,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * length?: scalar|Param|null, // Default: 5 * width?: scalar|Param|null, // Default: 130 * height?: scalar|Param|null, // Default: 50 - * font?: scalar|Param|null, // Default: "C:\\Users\\mail\\Documents\\PHP\\Part-DB-server\\vendor\\gregwar\\captcha-bundle\\DependencyInjection/../Generator/Font/captcha.ttf" + * font?: scalar|Param|null, // Default: "E:\\PHP\\Part-DB-server\\vendor\\gregwar\\captcha-bundle\\DependencyInjection/../Generator/Font/captcha.ttf" * keep_value?: scalar|Param|null, // Default: false * charset?: scalar|Param|null, // Default: "abcdefhjkmnprstuvwxyz23456789" * as_file?: scalar|Param|null, // Default: false diff --git a/yarn.lock b/yarn.lock index 105c25c5..d076b97d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1639,11 +1639,16 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== -"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": +"@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@discoveryjs/json-ext@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" + integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== + "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" @@ -2619,9 +2624,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.10.10" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz#e74bd066724c1d8d7d8ea75fc3be25389a7a5c56" - integrity sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ== + version "2.10.11" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz#957bea71ccc2e9854287c2575a037d36b3a94b73" + integrity sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg== big.js@^5.2.2: version "5.2.2" @@ -2659,9 +2664,9 @@ bootswatch@^5.1.3: integrity sha512-88mnH9tv+x6DV+scBxYFOpM4YSDVhyfEgbhqaEfvkHNctKI9qRcACxIP9nmBZ5mSeLXtsgax1VsRkUs1eWjlAQ== brace-expansion@^1.1.7: - version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" - integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + version "1.1.13" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6" + integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -3052,6 +3057,11 @@ commander@^11.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== +commander@^14.0.2: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3477,11 +3487,6 @@ datatables.net@2.3.7, datatables.net@^2, datatables.net@^2.0.0: dependencies: jquery ">=1.7" -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - debug@3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3670,9 +3675,9 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: gopd "^1.2.0" electron-to-chromium@^1.5.263: - version "1.5.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.322.tgz#9c24e49f7098ca19bc87c0e9c7e0ad6ffe4fddca" - integrity sha512-vFU34OcrvMcH66T+dYC3G4nURmgfDVewMIu6Q2urXpumAPSMmzvcn04KVVV8Opikq8Vs5nUbO/8laNhNRqSzYw== + version "1.5.328" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz#d24ce55f1aa5e4a3b877c1b315a0ab40e9498cc8" + integrity sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w== emoji-regex@^7.0.1: version "7.0.3" @@ -3885,11 +3890,6 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escape-string-regexp@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" @@ -4440,10 +4440,10 @@ htm@^3.1.1: resolved "https://registry.yarnpkg.com/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78" integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== -html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-escaper@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-3.0.3.tgz#4d336674652beb1dcbc29ef6b6ba7f6be6fdfed6" + integrity sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ== html-void-elements@^3.0.0: version "3.0.0" @@ -4956,9 +4956,9 @@ jszip@^3.2.0: setimmediate "^1.0.5" katex@^0.16.0: - version "0.16.41" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.41.tgz#21d5b950ddec764d2c6f445cded96406d8701ba3" - integrity sha512-AdDAqox1xU1h5yGai/uksjxwXby0gbRkwQaWvaE6Esp2wDX/Y/lL6qxQhVg84gzFsriyIv+WVg7bXaVy1PbcJg== + version "0.16.44" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.44.tgz#fcd7c25803d999f17780bfefe859993d083fb4b6" + integrity sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ== dependencies: commander "^8.3.0" @@ -5580,9 +5580,9 @@ mimic-fn@^2.1.0: integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: - version "2.10.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.1.tgz#a7f0bb890f4e1ce6dfc124bd1e6d6fcd3b359844" - integrity sha512-k7G3Y5QOegl380tXmZ68foBRRjE9Ljavx835ObdvmZjQ639izvZD8CS7BkWw1qKPPzHsGL/JDhl0uyU1zc2rJw== + version "2.10.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz#5c85ec9450c05d26e32531b465a15a08c3a57253" + integrity sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -5621,9 +5621,9 @@ minipass-collect@^1.0.2: minipass "^3.0.0" minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.7.tgz#145c383d5ae294b36030aa80d4e872d08bebcb73" + integrity sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA== dependencies: minipass "^3.0.0" @@ -7759,17 +7759,16 @@ web-namespaces@^2.0.0: integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== webpack-bundle-analyzer@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.2.0.tgz#9bcf0e7cc8c86632a96bf7092300287dc284c3d7" - integrity sha512-Etrauj1wYO/xjiz/Vfd6bW1lG9fEhrJpNmu10tv0X9kv+gyY3qiE09uYepqg1Xd0PxOvllRXwWYWjtQYoO/glQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.3.0.tgz#ca289e08f2f5e39964a9988c38ff3090559392bf" + integrity sha512-PEhAoqiJ+47d0uLMx/+zo5XOvaU+Vk6N2ZLht7H3n09QLy/fhyvqGNwjdRUHJDgMN8crBR2ZwVHkIswT3Xuawg== dependencies: - "@discoveryjs/json-ext" "0.5.7" + "@discoveryjs/json-ext" "^0.6.3" acorn "^8.0.4" acorn-walk "^8.0.0" - commander "^7.2.0" - debounce "^1.2.1" - escape-string-regexp "^4.0.0" - html-escaper "^2.0.2" + commander "^14.0.2" + escape-string-regexp "^5.0.0" + html-escaper "^3.0.3" opener "^1.5.2" picocolors "^1.0.0" sirv "^3.0.2" From 991daf0eadf53eb3b025a0cc91bf10ac3df1e6a4 Mon Sep 17 00:00:00 2001 From: Albert Koczy Date: Sun, 29 Mar 2026 14:53:31 +0200 Subject: [PATCH 021/108] Implement parsing of TME QR codes (#1324) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement parsing of TME QR codes They are present on parts purchased on tme.eu. It's based on the LCSC parser. Some older codes I found are in upper-case so I handle those too. * Removed unused method * Fixed translation message keys * Try to find TME part via SPN --------- Co-authored-by: Jan Böhmer --- .../BarcodeScanner/BarcodeScanHelper.php | 10 ++ .../BarcodeScanResultHandler.php | 38 +++++ .../BarcodeScanner/BarcodeSourceType.php | 3 + .../BarcodeScanner/TMEBarcodeScanResult.php | 143 ++++++++++++++++++ .../TMEBarcodeScanResultTest.php | 110 ++++++++++++++ translations/messages.de.xlf | 8 +- translations/messages.en.xlf | 6 + 7 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 src/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResult.php create mode 100644 tests/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResultTest.php diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php index 0bee33a1..7f65262a 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php @@ -105,6 +105,10 @@ final class BarcodeScanHelper return new AmazonBarcodeScanResult($input); } + if ($type === BarcodeSourceType::TME) { + return TMEBarcodeScanResult::parse($input); + } + //Null means auto and we try the different formats $result = $this->parseInternalBarcode($input); @@ -144,6 +148,11 @@ final class BarcodeScanHelper return new AmazonBarcodeScanResult($input); } + // Try TME barcode + if (TMEBarcodeScanResult::isTMEBarcode($input)) { + return TMEBarcodeScanResult::parse($input); + } + throw new InvalidArgumentException('Unknown barcode'); } @@ -162,6 +171,7 @@ final class BarcodeScanHelper return LCSCBarcodeScanResult::parse($input); } + private function parseUserDefinedBarcode(string $input): ?LocalBarcodeScanResult { $lot_repo = $this->entityManager->getRepository(PartLot::class); diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php index 1927edb9..60a1136f 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php @@ -150,6 +150,10 @@ final readonly class BarcodeScanResultHandler ?? $this->em->getRepository(Part::class)->getPartBySPN($barcodeScan->asin); } + if ($barcodeScan instanceof TMEBarcodeScanResult) { + return $this->resolvePartFromTME($barcodeScan); + } + return null; } @@ -236,6 +240,26 @@ final readonly class BarcodeScanResultHandler } + private function resolvePartFromTME(TMEBarcodeScanResult $barcodeScan): ?Part + { + $pn = $barcodeScan->tmePartNumber; + if ($pn) { + $part = $this->em->getRepository(Part::class)->getPartByProviderInfo($pn); + if ($part !== null) { + return $part; + } + + //Try to find the part by SPN/SKU + $part = $this->em->getRepository(Part::class)->getPartBySPN($pn); + if ($part !== null) { + return $part; + } + } + + // Fallback: search by MPN + return $this->em->getRepository(Part::class)->getPartByMPN($barcodeScan->mpn, $barcodeScan->manufacturer); + } + /** * Tries to extract creation information for a part from the given barcode scan result. This can be used to * automatically fill in the info provider reference of a part, when creating a new part based on the scan result. @@ -247,6 +271,20 @@ final readonly class BarcodeScanResultHandler */ public function getCreateInfos(BarcodeScanResultInterface $scanResult): ?array { + // TME + if ($scanResult instanceof TMEBarcodeScanResult) { + if ($scanResult->tmePartNumber === null) { + return null; + } + return [ + 'providerKey' => 'tme', + 'providerId' => $scanResult->tmePartNumber, + 'lotAmount' => $scanResult->quantity, + 'lotName' => $scanResult->purchaseOrder, + 'lotUserBarcode' => $scanResult->rawInput, + ]; + } + // LCSC if ($scanResult instanceof LCSCBarcodeScanResult) { return [ diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php index fb6eaa77..df991a8c 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php @@ -52,4 +52,7 @@ enum BarcodeSourceType: string case LCSC = 'lcsc'; case AMAZON = 'amazon'; + + /** For TME (tme.eu) formatted QR codes */ + case TME = 'tme'; } diff --git a/src/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResult.php new file mode 100644 index 00000000..5feb67c1 --- /dev/null +++ b/src/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResult.php @@ -0,0 +1,143 @@ +. + */ + +declare(strict_types=1); + +namespace App\Services\LabelSystem\BarcodeScanner; + +use InvalidArgumentException; + +/** + * This class represents the content of a tme.eu barcode label. + * The format is space-separated KEY:VALUE tokens, e.g.: + * QTY:1000 PN:SMD0603-5K1-1% PO:32723349/7 MFR:ROYALOHM MPN:0603SAF5101T5E CoO:TH RoHS https://www.tme.eu/details/... + */ +readonly class TMEBarcodeScanResult implements BarcodeScanResultInterface +{ + /** @var int|null Quantity (QTY) */ + public ?int $quantity; + + /** @var string|null TME part number (PN) */ + public ?string $tmePartNumber; + + /** @var string|null Purchase order number (PO) */ + public ?string $purchaseOrder; + + /** @var string|null Manufacturer name (MFR) */ + public ?string $manufacturer; + + /** @var string|null Manufacturer part number (MPN) */ + public ?string $mpn; + + /** @var string|null Country of origin (CoO) */ + public ?string $countryOfOrigin; + + /** @var bool Whether the part is RoHS compliant */ + public bool $rohs; + + /** @var string|null The product URL */ + public ?string $productUrl; + + /** + * @param array $fields Parsed key-value fields (keys uppercased) + * @param string $rawInput Original barcode string + */ + public function __construct( + public array $fields, + public string $rawInput, + ) { + $this->quantity = isset($this->fields['QTY']) ? (int) $this->fields['QTY'] : null; + $this->tmePartNumber = $this->fields['PN'] ?? null; + $this->purchaseOrder = $this->fields['PO'] ?? null; + $this->manufacturer = $this->fields['MFR'] ?? null; + $this->mpn = $this->fields['MPN'] ?? null; + $this->countryOfOrigin = $this->fields['COO'] ?? null; + $this->rohs = isset($this->fields['ROHS']); + $this->productUrl = $this->fields['URL'] ?? null; + } + + public function getSourceType(): BarcodeSourceType + { + return BarcodeSourceType::TME; + } + + public function getDecodedForInfoMode(): array + { + return [ + 'Barcode type' => 'TME', + 'TME Part No. (PN)' => $this->tmePartNumber ?? '', + 'MPN' => $this->mpn ?? '', + 'Manufacturer (MFR)' => $this->manufacturer ?? '', + 'Qty' => $this->quantity !== null ? (string) $this->quantity : '', + 'Purchase Order (PO)' => $this->purchaseOrder ?? '', + 'Country of Origin (CoO)' => $this->countryOfOrigin ?? '', + 'RoHS' => $this->rohs ? 'Yes' : 'No', + 'URL' => $this->productUrl ?? '', + ]; + } + + /** + * Returns true if the input looks like a TME barcode label (contains tme.eu URL). + */ + public static function isTMEBarcode(string $input): bool + { + return str_contains(strtolower($input), 'tme.eu'); + } + + /** + * Parse the TME barcode string into a TMEBarcodeScanResult. + */ + public static function parse(string $input): self + { + $raw = trim($input); + + if (!self::isTMEBarcode($raw)) { + throw new InvalidArgumentException('Not a TME barcode'); + } + + $fields = []; + + // Split on whitespace; each token is either KEY:VALUE, a bare keyword, or the URL + $tokens = preg_split('/\s+/', $raw); + foreach ($tokens as $token) { + if ($token === '') { + continue; + } + + // The TME URL + if (str_starts_with(strtolower($token), 'http')) { + $fields['URL'] = $token; + continue; + } + + $colonPos = strpos($token, ':'); + if ($colonPos !== false) { + $key = strtoupper(substr($token, 0, $colonPos)); + $value = substr($token, $colonPos + 1); + $fields[$key] = $value; + } else { + // Bare keyword like "RoHS" + $fields[strtoupper($token)] = ''; + } + } + + return new self($fields, $raw); + } +} diff --git a/tests/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResultTest.php b/tests/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResultTest.php new file mode 100644 index 00000000..838174b8 --- /dev/null +++ b/tests/Services/LabelSystem/BarcodeScanner/TMEBarcodeScanResultTest.php @@ -0,0 +1,110 @@ +. + */ + +namespace App\Tests\Services\LabelSystem\BarcodeScanner; + +use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType; +use App\Services\LabelSystem\BarcodeScanner\TMEBarcodeScanResult; +use InvalidArgumentException; +use PHPUnit\Framework\TestCase; + +class TMEBarcodeScanResultTest extends TestCase +{ + private const EXAMPLE1 = 'QTY:1000 PN:SMD0603-5K1-1% PO:32723349/7 MFR:ROYALOHM MPN:0603SAF5101T5E CoO:TH RoHS https://www.tme.eu/details/SMD0603-5K1-1%25'; + private const EXAMPLE2 = 'QTY:5 PN:ETQP3M6R8KVP PO:31199729/3 MFR:PANASONIC MPN:ETQP3M6R8KVP RoHS https://www.tme.eu/details/ETQP3M6R8KVP'; + + public function testIsTMEBarcode(): void + { + $this->assertFalse(TMEBarcodeScanResult::isTMEBarcode('invalid')); + $this->assertFalse(TMEBarcodeScanResult::isTMEBarcode('QTY:5 PN:ABC MPN:XYZ')); + $this->assertFalse(TMEBarcodeScanResult::isTMEBarcode('')); + + $this->assertTrue(TMEBarcodeScanResult::isTMEBarcode(self::EXAMPLE1)); + $this->assertTrue(TMEBarcodeScanResult::isTMEBarcode(self::EXAMPLE2)); + } + + public function testParseInvalidThrows(): void + { + $this->expectException(InvalidArgumentException::class); + TMEBarcodeScanResult::parse('not-a-tme-barcode'); + } + + public function testParseExample1(): void + { + $scan = TMEBarcodeScanResult::parse(self::EXAMPLE1); + + $this->assertSame(1000, $scan->quantity); + $this->assertSame('SMD0603-5K1-1%', $scan->tmePartNumber); + $this->assertSame('32723349/7', $scan->purchaseOrder); + $this->assertSame('ROYALOHM', $scan->manufacturer); + $this->assertSame('0603SAF5101T5E', $scan->mpn); + $this->assertSame('TH', $scan->countryOfOrigin); + $this->assertTrue($scan->rohs); + $this->assertSame('https://www.tme.eu/details/SMD0603-5K1-1%25', $scan->productUrl); + $this->assertSame(self::EXAMPLE1, $scan->rawInput); + } + + public function testParseExample2(): void + { + $scan = TMEBarcodeScanResult::parse(self::EXAMPLE2); + + $this->assertSame(5, $scan->quantity); + $this->assertSame('ETQP3M6R8KVP', $scan->tmePartNumber); + $this->assertSame('31199729/3', $scan->purchaseOrder); + $this->assertSame('PANASONIC', $scan->manufacturer); + $this->assertSame('ETQP3M6R8KVP', $scan->mpn); + $this->assertNull($scan->countryOfOrigin); + $this->assertTrue($scan->rohs); + $this->assertSame('https://www.tme.eu/details/ETQP3M6R8KVP', $scan->productUrl); + } + + public function testGetSourceType(): void + { + $scan = TMEBarcodeScanResult::parse(self::EXAMPLE2); + $this->assertSame(BarcodeSourceType::TME, $scan->getSourceType()); + } + + public function testParseUppercaseUrl(): void + { + $input = 'QTY:500 PN:M0.6W-10K MFR:ROYAL.OHM MPN:MF006FF1002A50 PO:7792659/8 HTTPS://WWW.TME.EU/DETAILS/M0.6W-10K'; + $this->assertTrue(TMEBarcodeScanResult::isTMEBarcode($input)); + + $scan = TMEBarcodeScanResult::parse($input); + $this->assertSame(500, $scan->quantity); + $this->assertSame('M0.6W-10K', $scan->tmePartNumber); + $this->assertSame('ROYAL.OHM', $scan->manufacturer); + $this->assertSame('MF006FF1002A50', $scan->mpn); + $this->assertSame('7792659/8', $scan->purchaseOrder); + $this->assertSame('HTTPS://WWW.TME.EU/DETAILS/M0.6W-10K', $scan->productUrl); + } + + public function testGetDecodedForInfoMode(): void + { + $scan = TMEBarcodeScanResult::parse(self::EXAMPLE1); + $decoded = $scan->getDecodedForInfoMode(); + + $this->assertSame('TME', $decoded['Barcode type']); + $this->assertSame('SMD0603-5K1-1%', $decoded['TME Part No. (PN)']); + $this->assertSame('0603SAF5101T5E', $decoded['MPN']); + $this->assertSame('ROYALOHM', $decoded['Manufacturer (MFR)']); + $this->assertSame('1000', $decoded['Qty']); + $this->assertSame('Yes', $decoded['RoHS']); + } +} diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 79789e21..db595136 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -1,6 +1,6 @@ - + attachment_type.caption @@ -12861,6 +12861,12 @@ Buerklin-API-Authentication-Server: Amazon Barcode + + + scan_dialog.mode.tme + TME Barcode + + settings.ips.canopy diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index ce92bda6..a8db61ac 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12863,6 +12863,12 @@ Buerklin-API Authentication server: Amazon barcode + + + scan_dialog.mode.tme + TME barcode + + settings.ips.canopy From 52df554b297a94aebb99d81bc26dbf62a7712f4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 30 Mar 2026 20:03:25 +0200 Subject: [PATCH 022/108] Added more warnings about sudo -E to docker docs Related to issue #1319 --- docs/installation/installation_docker.md | 5 +++++ docs/upgrade/1_to_2.md | 2 ++ 2 files changed, 7 insertions(+) diff --git a/docs/installation/installation_docker.md b/docs/installation/installation_docker.md index b7048169..391e1e03 100644 --- a/docs/installation/installation_docker.md +++ b/docs/installation/installation_docker.md @@ -95,6 +95,11 @@ services: docker-compose up -d ``` +{: .warning } +> If you run a root console inside the docker container, and wanna execute commands on the webserver behalf, be sure to use `sudo -E` command (with the `-E` flag) to preserve env variables from the current shell. +> Otherwise Part-DB console might use the wrong configuration to execute commands. + + 6. Create the initial database with ```bash diff --git a/docs/upgrade/1_to_2.md b/docs/upgrade/1_to_2.md index ef0f4575..6cd4a3e4 100644 --- a/docs/upgrade/1_to_2.md +++ b/docs/upgrade/1_to_2.md @@ -60,6 +60,8 @@ The `php bin/console partdb:backup` command can help you with this. If you want to change them, you must migrate them to the settings interface as described below. ### Docker installation +**When running the console commands from inside a docker container's shell as root, be sure to use `sudo -E` to preserve the environment variables, so that they are correctly passed to the command.** + 1. Make a backup of your existing Part-DB installation, including the database, data directories and the configuration files and the file where you configure the docker environment variables. 2. Stop the existing Part-DB container with `docker compose down` 3. Ensure that your docker compose file uses the new latest images (either `latest` or `2` tag). From f9a8818e697c84d70310d22a0934b5e5e9ac95ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 30 Mar 2026 20:09:16 +0200 Subject: [PATCH 023/108] Updated dependencies --- composer.lock | 152 +++++++++++++++++++++---------------------- config/reference.php | 2 +- yarn.lock | 63 +++++++++--------- 3 files changed, 111 insertions(+), 106 deletions(-) diff --git a/composer.lock b/composer.lock index 0b375b2d..451f7df5 100644 --- a/composer.lock +++ b/composer.lock @@ -968,7 +968,7 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", @@ -1052,13 +1052,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.2" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.3" }, "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", @@ -1141,13 +1141,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.2" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.3" }, "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/documentation", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1204,13 +1204,13 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.3.2" + "source": "https://github.com/api-platform/documentation/tree/v4.3.3" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", @@ -1284,13 +1284,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.3.2" + "source": "https://github.com/api-platform/http-cache/tree/v4.3.3" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/hydra", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", @@ -1371,13 +1371,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.3.2" + "source": "https://github.com/api-platform/hydra/tree/v4.3.3" }, "time": "2026-03-20T09:00:10+00:00" }, { "name": "api-platform/json-api", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", @@ -1453,13 +1453,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.3.2" + "source": "https://github.com/api-platform/json-api/tree/v4.3.3" }, "time": "2026-03-13T11:03:46+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", @@ -1534,13 +1534,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.3.2" + "source": "https://github.com/api-platform/json-schema/tree/v4.3.3" }, "time": "2026-03-06T15:07:49+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", @@ -1614,13 +1614,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.3.2" + "source": "https://github.com/api-platform/jsonld/tree/v4.3.3" }, "time": "2026-03-13T08:23:46+00:00" }, { "name": "api-platform/metadata", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", @@ -1712,22 +1712,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.3.2" + "source": "https://github.com/api-platform/metadata/tree/v4.3.3" }, "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/openapi", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", - "reference": "64268bd78e43c64672ab279d1cc767b75a868671" + "reference": "6ae725b4d2cee60972c18c4bd6148b63ccf16785" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/openapi/zipball/64268bd78e43c64672ab279d1cc767b75a868671", - "reference": "64268bd78e43c64672ab279d1cc767b75a868671", + "url": "https://api.github.com/repos/api-platform/openapi/zipball/6ae725b4d2cee60972c18c4bd6148b63ccf16785", + "reference": "6ae725b4d2cee60972c18c4bd6148b63ccf16785", "shasum": "" }, "require": { @@ -1803,13 +1803,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.3.2" + "source": "https://github.com/api-platform/openapi/tree/v4.3.3" }, - "time": "2026-03-25T19:19:41+00:00" + "time": "2026-03-29T07:20:23+00:00" }, { "name": "api-platform/serializer", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", @@ -1897,22 +1897,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.3.2" + "source": "https://github.com/api-platform/serializer/tree/v4.3.3" }, "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/state", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "bc69186661ca8d206093880c00a791ede0a79574" + "reference": "5387afbb9e79027b34dab731bc90e810fdd6ca60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/bc69186661ca8d206093880c00a791ede0a79574", - "reference": "bc69186661ca8d206093880c00a791ede0a79574", + "url": "https://api.github.com/repos/api-platform/state/zipball/5387afbb9e79027b34dab731bc90e810fdd6ca60", + "reference": "5387afbb9e79027b34dab731bc90e810fdd6ca60", "shasum": "" }, "require": { @@ -1994,13 +1994,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.3.2" + "source": "https://github.com/api-platform/state/tree/v4.3.3" }, - "time": "2026-03-27T06:51:10+00:00" + "time": "2026-03-29T06:54:13+00:00" }, { "name": "api-platform/symfony", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", @@ -2122,13 +2122,13 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.3.2" + "source": "https://github.com/api-platform/symfony/tree/v4.3.3" }, "time": "2026-03-27T06:51:10+00:00" }, { "name": "api-platform/validator", - "version": "v4.3.2", + "version": "v4.3.3", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", @@ -2198,7 +2198,7 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.3.2" + "source": "https://github.com/api-platform/validator/tree/v4.3.3" }, "time": "2026-03-17T15:23:21+00:00" }, @@ -2504,16 +2504,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.10", + "version": "1.5.11", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63" + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/961a5e4056dd2e4a2eedcac7576075947c28bf63", - "reference": "961a5e4056dd2e4a2eedcac7576075947c28bf63", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/68ff39175e8e94a4bb1d259407ce51a6a60f09e6", + "reference": "68ff39175e8e94a4bb1d259407ce51a6a60f09e6", "shasum": "" }, "require": { @@ -2560,7 +2560,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.10" + "source": "https://github.com/composer/ca-bundle/tree/1.5.11" }, "funding": [ { @@ -2572,7 +2572,7 @@ "type": "github" } ], - "time": "2025-12-08T15:06:51+00:00" + "time": "2026-03-30T09:16:10+00:00" }, { "name": "composer/package-versions-deprecated", @@ -9945,30 +9945,30 @@ }, { "name": "shivas/versioning-bundle", - "version": "4.1.2", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/shivas/versioning-bundle.git", - "reference": "766600f3f81551b6366d5a4db6cf97d5bfa47b2c" + "reference": "5013ef49951cb8be3846eb77bf3f096a51ea66d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shivas/versioning-bundle/zipball/766600f3f81551b6366d5a4db6cf97d5bfa47b2c", - "reference": "766600f3f81551b6366d5a4db6cf97d5bfa47b2c", + "url": "https://api.github.com/repos/shivas/versioning-bundle/zipball/5013ef49951cb8be3846eb77bf3f096a51ea66d1", + "reference": "5013ef49951cb8be3846eb77bf3f096a51ea66d1", "shasum": "" }, "require": { "nikolaposa/version": "^4", "php": "^7.2.5 || ^8", - "symfony/console": "^5.4 || ^6 || ^7", - "symfony/framework-bundle": "^5.4 || ^6 || ^7", - "symfony/process": "^5.4 || ^6 || ^7" + "symfony/console": "^5.4 || ^6 || ^7 || ^8", + "symfony/framework-bundle": "^5.4 || ^6 || ^7 || ^8", + "symfony/process": "^5.4 || ^6 || ^7 || ^8" }, "require-dev": { "mikey179/vfsstream": "^2", - "nyholm/symfony-bundle-test": "^3.0", + "nyholm/symfony-bundle-test": "^3.1", "phpunit/phpunit": "^8.5.27", - "symfony/phpunit-bridge": "^5.4 || ^6 || ^7", + "symfony/phpunit-bridge": "^5.4 || ^6 || ^7 || ^8", "twig/twig": "^2 || ^3" }, "type": "symfony-bundle", @@ -9998,10 +9998,10 @@ ], "support": { "issues": "https://github.com/shivas/versioning-bundle/issues", - "source": "https://github.com/shivas/versioning-bundle/tree/4.1.2", + "source": "https://github.com/shivas/versioning-bundle/tree/4.2.0", "wiki": "https://github.com/shivas/versioning-bundle/wiki" }, - "time": "2026-03-25T12:32:10+00:00" + "time": "2026-03-30T07:38:31+00:00" }, { "name": "spatie/db-dumper", @@ -16479,16 +16479,16 @@ }, { "name": "tecnickcom/tc-lib-barcode", - "version": "2.4.27", + "version": "2.4.29", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-barcode.git", - "reference": "8d754e2cb6001114ff7669982739245078346d8f" + "reference": "be76f91968bfab74949a3f937f78f02455597c85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/8d754e2cb6001114ff7669982739245078346d8f", - "reference": "8d754e2cb6001114ff7669982739245078346d8f", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/be76f91968bfab74949a3f937f78f02455597c85", + "reference": "be76f91968bfab74949a3f937f78f02455597c85", "shasum": "" }, "require": { @@ -16568,7 +16568,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-barcode/issues", - "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.27" + "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.29" }, "funding": [ { @@ -16576,20 +16576,20 @@ "type": "custom" } ], - "time": "2026-02-28T10:33:16+00:00" + "time": "2026-03-30T17:05:24+00:00" }, { "name": "tecnickcom/tc-lib-color", - "version": "2.3.9", + "version": "2.3.10", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-color.git", - "reference": "7eed5344ed57a3d55b56bebbd1329bd0e8fe597a" + "reference": "cf018a88218262a64784032ecce14bfec480d3dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/7eed5344ed57a3d55b56bebbd1329bd0e8fe597a", - "reference": "7eed5344ed57a3d55b56bebbd1329bd0e8fe597a", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/cf018a88218262a64784032ecce14bfec480d3dd", + "reference": "cf018a88218262a64784032ecce14bfec480d3dd", "shasum": "" }, "require": { @@ -16638,7 +16638,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-color/issues", - "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.9" + "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.10" }, "funding": [ { @@ -16646,7 +16646,7 @@ "type": "custom" } ], - "time": "2026-02-23T20:00:30+00:00" + "time": "2026-03-30T17:00:47+00:00" }, { "name": "thecodingmachine/safe", @@ -18457,11 +18457,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.44", + "version": "2.1.45", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4a88c083c668b2c364a425c9b3171b2d9ea5d218", - "reference": "4a88c083c668b2c364a425c9b3171b2d9ea5d218", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f8cdfd9421b7edb7686a2d150a234870464eac70", + "reference": "f8cdfd9421b7edb7686a2d150a234870464eac70", "shasum": "" }, "require": { @@ -18506,7 +18506,7 @@ "type": "github" } ], - "time": "2026-03-25T17:34:21+00:00" + "time": "2026-03-30T13:22:02+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -19232,12 +19232,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "00c5ced635131da46de6b6e4d76c6e82f9c9bf6a" + "reference": "f56a297d85c1ab84bee540bc669706ad6a5def7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/00c5ced635131da46de6b6e4d76c6e82f9c9bf6a", - "reference": "00c5ced635131da46de6b6e4d76c6e82f9c9bf6a", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f56a297d85c1ab84bee540bc669706ad6a5def7b", + "reference": "f56a297d85c1ab84bee540bc669706ad6a5def7b", "shasum": "" }, "conflict": { @@ -19352,7 +19352,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<0.28.5", + "ci4-cms-erp/ci4ms": "<=0.28.6", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -19557,7 +19557,7 @@ "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", "getgrav/grav": "<1.11.0.0-beta1", - "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<=5.2.1", + "getkirby/cms": "<=5.2.1", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -20273,7 +20273,7 @@ "type": "tidelift" } ], - "time": "2026-03-27T20:12:30+00:00" + "time": "2026-03-30T16:24:48+00:00" }, { "name": "sebastian/cli-parser", @@ -21808,5 +21808,5 @@ "platform-overrides": { "php": "8.2.0" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/config/reference.php b/config/reference.php index 4e20a73d..a146c2e1 100644 --- a/config/reference.php +++ b/config/reference.php @@ -1712,7 +1712,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * length?: scalar|Param|null, // Default: 5 * width?: scalar|Param|null, // Default: 130 * height?: scalar|Param|null, // Default: 50 - * font?: scalar|Param|null, // Default: "E:\\PHP\\Part-DB-server\\vendor\\gregwar\\captcha-bundle\\DependencyInjection/../Generator/Font/captcha.ttf" + * font?: scalar|Param|null, // Default: "/home/jan/php/Part-DB-server/vendor/gregwar/captcha-bundle/DependencyInjection/../Generator/Font/captcha.ttf" * keep_value?: scalar|Param|null, // Default: false * charset?: scalar|Param|null, // Default: "abcdefhjkmnprstuvwxyz23456789" * as_file?: scalar|Param|null, // Default: false diff --git a/yarn.lock b/yarn.lock index d076b97d..9c6200b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1629,6 +1629,11 @@ ckeditor5 "47.6.1" es-toolkit "1.39.5" +"@colordx/core@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.0.0.tgz#5324af97df4c63fcfaaae247003efc413445d3a2" + integrity sha512-twwxohWH8hWWh5ZJ5z6ZNn/JyMrq08K+NzxXKVGTpH+XmMPDAYYzqvszc3OPhYhqqxmfnbCSa/YHcS7pCnChmw== + "@csstools/selector-resolve-nested@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" @@ -2015,9 +2020,9 @@ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@sinclair/typebox@^0.34.0": - version "0.34.48" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.48.tgz#75b0ead87e59e1adbd6dccdc42bad4fddee73b59" - integrity sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA== + version "0.34.49" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.49.tgz#4f1369234f2ecf693866476c3b2e1b54d2a9d68e" + integrity sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A== "@symfony/stimulus-bridge@^4.0.0": version "4.0.1" @@ -2624,9 +2629,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.10.11" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz#957bea71ccc2e9854287c2575a037d36b3a94b73" - integrity sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg== + version "2.10.12" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz#60f9e2172e962839ac313d4e0c8e182090fb6621" + integrity sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ== big.js@^5.2.2: version "5.2.2" @@ -2794,9 +2799,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001781" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz#344b47c03eb8168b79c3c158b872bcfbdd02a400" - integrity sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw== + version "1.0.30001782" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz#f2b8617f998bc134701c54ce9748af44f646e062" + integrity sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw== ccount@^2.0.0: version "2.0.1" @@ -3291,16 +3296,16 @@ cssnano-preset-default@^6.1.2: postcss-svgo "^6.0.3" postcss-unique-selectors "^6.0.4" -cssnano-preset-default@^7.0.11: - version "7.0.11" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.11.tgz#ea81661d0e8fe59b752560cca4a9f2fac763e92c" - integrity sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g== +cssnano-preset-default@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.12.tgz#21e29fed4a8697952485995ffeeec20ff58945a4" + integrity sha512-B3Eoouzw/sl2zANI0AL9KbacummJTCww+fkHaDBMZad/xuVx8bUduPLly6hKVQAlrmvYkS1jB1CVQEKm3gn0AA== dependencies: browserslist "^4.28.1" css-declaration-sorter "^7.2.0" cssnano-utils "^5.0.1" postcss-calc "^10.1.1" - postcss-colormin "^7.0.6" + postcss-colormin "^7.0.7" postcss-convert-values "^7.0.9" postcss-discard-comments "^7.0.6" postcss-discard-duplicates "^7.0.2" @@ -3309,7 +3314,7 @@ cssnano-preset-default@^7.0.11: postcss-merge-longhand "^7.0.5" postcss-merge-rules "^7.0.8" postcss-minify-font-values "^7.0.1" - postcss-minify-gradients "^7.0.1" + postcss-minify-gradients "^7.0.2" postcss-minify-params "^7.0.6" postcss-minify-selectors "^7.0.6" postcss-normalize-charset "^7.0.1" @@ -3346,11 +3351,11 @@ cssnano@^6.0.3: lilconfig "^3.1.1" cssnano@^7.0.4: - version "7.1.3" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.3.tgz#2a542bb8d62b6bee9e23e455ba2e507fd102f611" - integrity sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg== + version "7.1.4" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.4.tgz#0aa5bb3b481df024ecafd41c4388c06240bb31ec" + integrity sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ== dependencies: - cssnano-preset-default "^7.0.11" + cssnano-preset-default "^7.0.12" lilconfig "^3.1.3" csso@^5.0.5: @@ -6033,14 +6038,14 @@ postcss-colormin@^6.1.0: colord "^2.9.3" postcss-value-parser "^4.2.0" -postcss-colormin@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.6.tgz#8f1bcfaa6f4959a872824f3b5bd4e1278bf35e45" - integrity sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ== +postcss-colormin@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.7.tgz#63b42eb2a9cfc092b96b1b758db66dc35a2a3f19" + integrity sha512-sBQ628lSj3VQpDquQel8Pen5mmjFPsO4pH9lDLaHB1AVkMRHtkl0pRB5DCWznc9upWsxint/kV+AveSj7W1tew== dependencies: + "@colordx/core" "^5.0.0" browserslist "^4.28.1" caniuse-api "^3.0.0" - colord "^2.9.3" postcss-value-parser "^4.2.0" postcss-convert-values@^6.1.0: @@ -6187,12 +6192,12 @@ postcss-minify-gradients@^6.0.3: cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" -postcss-minify-gradients@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz#933cb642dd00df397237c17194f37dcbe4cad739" - integrity sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A== +postcss-minify-gradients@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.2.tgz#7937c8dcbd847f6cfd5b16938500587af8882fea" + integrity sha512-fVY3AB8Um7SJR5usHqTY2Ngf9qh8IRN+FFzrBP0ONJy6yYXsP7xyjK2BvSAIrpgs1cST+H91V0TXi3diHLYJtw== dependencies: - colord "^2.9.3" + "@colordx/core" "^5.0.0" cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" From 96da2b9f1f2669f93cec32d8517dc6e60f91b6bf Mon Sep 17 00:00:00 2001 From: Tobias Klausmann Date: Fri, 3 Apr 2026 18:15:03 +0000 Subject: [PATCH 024/108] .gitignore: add public/.well-known directory (#1335) RFC 5785 defines /.well-known/ as the prefix for "well-known locations" in URIs. This prefix is used for example by Certbot/Let's Encrypt to request SSL certificates. PartDB doesn't need to care about this directory, but also should not see its existence as the git tree being "dirty". --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index dd5c43db..176b36e3 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,10 @@ uploads/* !uploads/.keep +# Some people use Certbot or similar tools to make SSL certificates. +# Also see https://www.rfc-editor.org/rfc/rfc5785 +public/.well-known/ + # Do not keep cache files .php_cs.cache .phpcs-cache @@ -50,4 +54,4 @@ phpstan.neon ###< phpstan/phpstan ### .claude/ -CLAUDE.md \ No newline at end of file +CLAUDE.md From 8b3bebca7b8a0825fe466187218785c8c293cf77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 3 Apr 2026 21:45:02 +0200 Subject: [PATCH 025/108] Updated dependencies --- composer.lock | 798 ++++++++++++++++++++++--------------------- config/reference.php | 8 +- yarn.lock | 184 +++++----- 3 files changed, 497 insertions(+), 493 deletions(-) diff --git a/composer.lock b/composer.lock index 451f7df5..daf3426c 100644 --- a/composer.lock +++ b/composer.lock @@ -3101,16 +3101,16 @@ }, { "name": "doctrine/data-fixtures", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97" + "reference": "bf7ac3a050b54b261cedfb3d0a44733819062275" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/7a615ba135e45d67674bb623d90f34f6c7b6bd97", - "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bf7ac3a050b54b261cedfb3d0a44733819062275", + "reference": "bf7ac3a050b54b261cedfb3d0a44733819062275", "shasum": "" }, "require": { @@ -3128,12 +3128,14 @@ "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", "doctrine/orm": "^2.14 || ^3", + "doctrine/phpcr-odm": "^1.8 || ^2.0", "ext-sqlite3": "*", "fig/log-test": "^1", - "phpstan/phpstan": "2.1.31", - "phpunit/phpunit": "10.5.45 || 12.4.0", - "symfony/cache": "^6.4 || ^7", - "symfony/var-exporter": "^6.4 || ^7" + "jackalope/jackalope-fs": "*", + "phpstan/phpstan": "2.1.46", + "phpunit/phpunit": "10.5.63 || 12.5.12", + "symfony/cache": "^6.4 || ^7 || ^8", + "symfony/var-exporter": "^6.4 || ^7 || ^8" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -3164,7 +3166,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/2.2.0" + "source": "https://github.com/doctrine/data-fixtures/tree/2.2.1" }, "funding": [ { @@ -3180,7 +3182,7 @@ "type": "tidelift" } ], - "time": "2025-10-17T20:06:20+00:00" + "time": "2026-04-01T13:56:01+00:00" }, { "name": "doctrine/dbal", @@ -3975,16 +3977,16 @@ }, { "name": "doctrine/orm", - "version": "3.6.2", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "4262eb495b4d2a53b45de1ac58881e0091f2970f" + "reference": "e88cd591f0786089dee22b972c28aa2076df51c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/4262eb495b4d2a53b45de1ac58881e0091f2970f", - "reference": "4262eb495b4d2a53b45de1ac58881e0091f2970f", + "url": "https://api.github.com/repos/doctrine/orm/zipball/e88cd591f0786089dee22b972c28aa2076df51c0", + "reference": "e88cd591f0786089dee22b972c28aa2076df51c0", "shasum": "" }, "require": { @@ -4057,9 +4059,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.6.2" + "source": "https://github.com/doctrine/orm/tree/3.6.3" }, - "time": "2026-01-30T21:41:41+00:00" + "time": "2026-04-02T06:53:27+00:00" }, { "name": "doctrine/persistence", @@ -9334,16 +9336,16 @@ }, { "name": "rhukster/dom-sanitizer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/rhukster/dom-sanitizer.git", - "reference": "757e4d6ac03afe9afa4f97cbef453fc5c25f0729" + "reference": "17a16925a6113f51595607bd30f50af4034f078b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/757e4d6ac03afe9afa4f97cbef453fc5c25f0729", - "reference": "757e4d6ac03afe9afa4f97cbef453fc5c25f0729", + "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/17a16925a6113f51595607bd30f50af4034f078b", + "reference": "17a16925a6113f51595607bd30f50af4034f078b", "shasum": "" }, "require": { @@ -9373,9 +9375,9 @@ "description": "A simple but effective DOM/SVG/MathML Sanitizer for PHP 7.4+", "support": { "issues": "https://github.com/rhukster/dom-sanitizer/issues", - "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.8" + "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.9" }, - "time": "2024-04-15T08:48:55+00:00" + "time": "2026-03-31T20:54:47+00:00" }, { "name": "robrichards/xmlseclibs", @@ -9664,28 +9666,29 @@ }, { "name": "sabre/uri", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sabre-io/uri.git", - "reference": "38eeab6ed9eec435a2188db489d4649c56272c51" + "reference": "4fa0b2049e06a4fbe4aea4f0aa69e7b8410a13bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/38eeab6ed9eec435a2188db489d4649c56272c51", - "reference": "38eeab6ed9eec435a2188db489d4649c56272c51", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/4fa0b2049e06a4fbe4aea4f0aa69e7b8410a13bc", + "reference": "4fa0b2049e06a4fbe4aea4f0aa69e7b8410a13bc", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64", + "friendsofphp/php-cs-fixer": "^3.94", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^1.12", - "phpstan/phpstan-phpunit": "^1.4", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "^9.6" + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "rector/rector": "^2.3" }, "type": "library", "autoload": { @@ -9720,7 +9723,7 @@ "issues": "https://github.com/sabre-io/uri/issues", "source": "https://github.com/fruux/sabre-uri" }, - "time": "2024-09-04T15:30:08+00:00" + "time": "2026-04-01T08:19:11+00:00" }, { "name": "scheb/2fa-backup-code", @@ -10068,20 +10071,20 @@ }, { "name": "spomky-labs/cbor-php", - "version": "3.2.2", + "version": "3.2.3", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/cbor-php.git", - "reference": "2a5fb86aacfe1004611370ead6caa2bfc88435d0" + "reference": "dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/2a5fb86aacfe1004611370ead6caa2bfc88435d0", - "reference": "2a5fb86aacfe1004611370ead6caa2bfc88435d0", + "url": "https://api.github.com/repos/Spomky-Labs/cbor-php/zipball/dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32", + "reference": "dd6eb84e6d92f7b8bd0da56b4b4dd7235aed0c32", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17", "ext-mbstring": "*", "php": ">=8.0" }, @@ -10123,7 +10126,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/cbor-php/issues", - "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.2.2" + "source": "https://github.com/Spomky-Labs/cbor-php/tree/3.2.3" }, "funding": [ { @@ -10135,7 +10138,7 @@ "type": "patreon" } ], - "time": "2025-11-13T13:00:34+00:00" + "time": "2026-04-01T12:15:20+00:00" }, { "name": "spomky-labs/otphp", @@ -10345,16 +10348,16 @@ }, { "name": "symfony/asset", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "d944ae87e4697af05aadeacfc5e603c3c18ef4fb" + "reference": "d2e2f014ccd6ec9fae8dbe6336a4164346a2a856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/d944ae87e4697af05aadeacfc5e603c3c18ef4fb", - "reference": "d944ae87e4697af05aadeacfc5e603c3c18ef4fb", + "url": "https://api.github.com/repos/symfony/asset/zipball/d2e2f014ccd6ec9fae8dbe6336a4164346a2a856", + "reference": "d2e2f014ccd6ec9fae8dbe6336a4164346a2a856", "shasum": "" }, "require": { @@ -10394,7 +10397,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v7.4.6" + "source": "https://github.com/symfony/asset/tree/v7.4.8" }, "funding": [ { @@ -10414,20 +10417,20 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/cache", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "665522ec357540e66c294c08583b40ee576574f0" + "reference": "467464da294734b0fb17e853e5712abc8470f819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/665522ec357540e66c294c08583b40ee576574f0", - "reference": "665522ec357540e66c294c08583b40ee576574f0", + "url": "https://api.github.com/repos/symfony/cache/zipball/467464da294734b0fb17e853e5712abc8470f819", + "reference": "467464da294734b0fb17e853e5712abc8470f819", "shasum": "" }, "require": { @@ -10498,7 +10501,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.4.7" + "source": "https://github.com/symfony/cache/tree/v7.4.8" }, "funding": [ { @@ -10518,7 +10521,7 @@ "type": "tidelift" } ], - "time": "2026-03-06T08:14:57+00:00" + "time": "2026-03-30T15:15:47+00:00" }, { "name": "symfony/cache-contracts", @@ -10598,16 +10601,16 @@ }, { "name": "symfony/clock", - "version": "v7.4.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "9169f24776edde469914c1e7a1442a50f7a4e110" + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110", - "reference": "9169f24776edde469914c1e7a1442a50f7a4e110", + "url": "https://api.github.com/repos/symfony/clock/zipball/674fa3b98e21531dd040e613479f5f6fa8f32111", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111", "shasum": "" }, "require": { @@ -10652,7 +10655,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.4.0" + "source": "https://github.com/symfony/clock/tree/v7.4.8" }, "funding": [ { @@ -10672,20 +10675,20 @@ "type": "tidelift" } ], - "time": "2025-11-12T15:39:26+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/config", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6c17162555bfb58957a55bb0e43e00035b6ae3d5" + "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6c17162555bfb58957a55bb0e43e00035b6ae3d5", - "reference": "6c17162555bfb58957a55bb0e43e00035b6ae3d5", + "url": "https://api.github.com/repos/symfony/config/zipball/2d19dde43fa2ff720b9a40763ace7226594f503b", + "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b", "shasum": "" }, "require": { @@ -10731,7 +10734,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.4.7" + "source": "https://github.com/symfony/config/tree/v7.4.8" }, "funding": [ { @@ -10751,20 +10754,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T10:41:14+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/console", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d" + "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d", + "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", "shasum": "" }, "require": { @@ -10829,7 +10832,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.7" + "source": "https://github.com/symfony/console/tree/v7.4.8" }, "funding": [ { @@ -10849,20 +10852,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T14:06:20+00:00" + "time": "2026-03-30T13:54:39+00:00" }, { "name": "symfony/css-selector", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "2e7c52c647b406e2107dd867db424a4dbac91864" + "reference": "b055f228a4178a1d6774909903905e3475f3eac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/2e7c52c647b406e2107dd867db424a4dbac91864", - "reference": "2e7c52c647b406e2107dd867db424a4dbac91864", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b055f228a4178a1d6774909903905e3475f3eac8", + "reference": "b055f228a4178a1d6774909903905e3475f3eac8", "shasum": "" }, "require": { @@ -10898,7 +10901,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.4.6" + "source": "https://github.com/symfony/css-selector/tree/v7.4.8" }, "funding": [ { @@ -10918,20 +10921,20 @@ "type": "tidelift" } ], - "time": "2026-02-17T07:53:42+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "0f651e58f4917fb0e2cd261ccbfe3d71e6e0f5db" + "reference": "f7025fd7b687c240426562f86ada06a93b1e771d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0f651e58f4917fb0e2cd261ccbfe3d71e6e0f5db", - "reference": "0f651e58f4917fb0e2cd261ccbfe3d71e6e0f5db", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f7025fd7b687c240426562f86ada06a93b1e771d", + "reference": "f7025fd7b687c240426562f86ada06a93b1e771d", "shasum": "" }, "require": { @@ -10982,7 +10985,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.4.7" + "source": "https://github.com/symfony/dependency-injection/tree/v7.4.8" }, "funding": [ { @@ -11002,7 +11005,7 @@ "type": "tidelift" } ], - "time": "2026-03-03T07:48:48+00:00" + "time": "2026-03-31T06:50:29+00:00" }, { "name": "symfony/deprecation-contracts", @@ -11073,16 +11076,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "4fc5e2dd41be3c0b6321e0373072782edeff45ed" + "reference": "3f8f805e54ecb5cbd487b1eff8837a8bbd278669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/4fc5e2dd41be3c0b6321e0373072782edeff45ed", - "reference": "4fc5e2dd41be3c0b6321e0373072782edeff45ed", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3f8f805e54ecb5cbd487b1eff8837a8bbd278669", + "reference": "3f8f805e54ecb5cbd487b1eff8837a8bbd278669", "shasum": "" }, "require": { @@ -11162,7 +11165,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.7" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.8" }, "funding": [ { @@ -11182,20 +11185,20 @@ "type": "tidelift" } ], - "time": "2026-03-05T08:16:50+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/dom-crawler", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "487ba8fa43da9a8e6503fe939b45ecd96875410e" + "reference": "2918e7c2ba964defca1f5b69c6f74886529e2dc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/487ba8fa43da9a8e6503fe939b45ecd96875410e", - "reference": "487ba8fa43da9a8e6503fe939b45ecd96875410e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2918e7c2ba964defca1f5b69c6f74886529e2dc8", + "reference": "2918e7c2ba964defca1f5b69c6f74886529e2dc8", "shasum": "" }, "require": { @@ -11234,7 +11237,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.4.6" + "source": "https://github.com/symfony/dom-crawler/tree/v7.4.8" }, "funding": [ { @@ -11254,20 +11257,20 @@ "type": "tidelift" } ], - "time": "2026-02-17T07:53:42+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/dotenv", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "7e5529a0b02395cb4614cdf507495a4cef3115c5" + "reference": "5df79f11350166125fe754c85b87f7e13d735314" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/7e5529a0b02395cb4614cdf507495a4cef3115c5", - "reference": "7e5529a0b02395cb4614cdf507495a4cef3115c5", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/5df79f11350166125fe754c85b87f7e13d735314", + "reference": "5df79f11350166125fe754c85b87f7e13d735314", "shasum": "" }, "require": { @@ -11312,7 +11315,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.4.7" + "source": "https://github.com/symfony/dotenv/tree/v7.4.8" }, "funding": [ { @@ -11332,20 +11335,20 @@ "type": "tidelift" } ], - "time": "2026-03-03T07:48:48+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/error-handler", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8" + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8", - "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", "shasum": "" }, "require": { @@ -11394,7 +11397,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.4" + "source": "https://github.com/symfony/error-handler/tree/v7.4.8" }, "funding": [ { @@ -11414,20 +11417,20 @@ "type": "tidelift" } ], - "time": "2026-01-20T16:42:42+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dc2c0eba1af673e736bb851d747d266108aea746" + "reference": "f57b899fa736fd71121168ef268f23c206083f0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", - "reference": "dc2c0eba1af673e736bb851d747d266108aea746", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f57b899fa736fd71121168ef268f23c206083f0a", + "reference": "f57b899fa736fd71121168ef268f23c206083f0a", "shasum": "" }, "require": { @@ -11479,7 +11482,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.8" }, "funding": [ { @@ -11499,7 +11502,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T11:45:34+00:00" + "time": "2026-03-30T13:54:39+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -11579,16 +11582,16 @@ }, { "name": "symfony/expression-language", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "f3a6497eb6573e185f2ec41cd3b3f0cd68ddf667" + "reference": "87ff95687748f4af65e4d5a6e917d448ec52aa83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/f3a6497eb6573e185f2ec41cd3b3f0cd68ddf667", - "reference": "f3a6497eb6573e185f2ec41cd3b3f0cd68ddf667", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/87ff95687748f4af65e4d5a6e917d448ec52aa83", + "reference": "87ff95687748f4af65e4d5a6e917d448ec52aa83", "shasum": "" }, "require": { @@ -11623,7 +11626,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v7.4.4" + "source": "https://github.com/symfony/expression-language/tree/v7.4.8" }, "funding": [ { @@ -11643,20 +11646,20 @@ "type": "tidelift" } ], - "time": "2026-01-05T08:47:25+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/filesystem", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" + "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5", + "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5", "shasum": "" }, "require": { @@ -11693,7 +11696,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.6" + "source": "https://github.com/symfony/filesystem/tree/v7.4.8" }, "funding": [ { @@ -11713,20 +11716,20 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/finder", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf" + "reference": "e0be088d22278583a82da281886e8c3592fbf149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", "shasum": "" }, "require": { @@ -11761,7 +11764,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.6" + "source": "https://github.com/symfony/finder/tree/v7.4.8" }, "funding": [ { @@ -11781,7 +11784,7 @@ "type": "tidelift" } ], - "time": "2026-01-29T09:40:50+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/flex", @@ -11858,16 +11861,16 @@ }, { "name": "symfony/form", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "5f24175103fd0a62b98442207c240688210fd88b" + "reference": "fbb79fc4de32f091ec697276824331f5de3a87b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/5f24175103fd0a62b98442207c240688210fd88b", - "reference": "5f24175103fd0a62b98442207c240688210fd88b", + "url": "https://api.github.com/repos/symfony/form/zipball/fbb79fc4de32f091ec697276824331f5de3a87b4", + "reference": "fbb79fc4de32f091ec697276824331f5de3a87b4", "shasum": "" }, "require": { @@ -11937,7 +11940,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.4.7" + "source": "https://github.com/symfony/form/tree/v7.4.8" }, "funding": [ { @@ -11957,20 +11960,20 @@ "type": "tidelift" } ], - "time": "2026-03-05T12:30:09+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "c94bc78c85d76af67918404a95d44940f66a7c2f" + "reference": "180533cfbac2144349044267db31d5d3df9957cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c94bc78c85d76af67918404a95d44940f66a7c2f", - "reference": "c94bc78c85d76af67918404a95d44940f66a7c2f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/180533cfbac2144349044267db31d5d3df9957cb", + "reference": "180533cfbac2144349044267db31d5d3df9957cb", "shasum": "" }, "require": { @@ -12095,7 +12098,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.4.7" + "source": "https://github.com/symfony/framework-bundle/tree/v7.4.8" }, "funding": [ { @@ -12115,20 +12118,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T15:39:55+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/http-client", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "1010624285470eb60e88ed10035102c75b4ea6af" + "reference": "01933e626c3de76bea1e22641e205e78f6a34342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/1010624285470eb60e88ed10035102c75b4ea6af", - "reference": "1010624285470eb60e88ed10035102c75b4ea6af", + "url": "https://api.github.com/repos/symfony/http-client/zipball/01933e626c3de76bea1e22641e205e78f6a34342", + "reference": "01933e626c3de76bea1e22641e205e78f6a34342", "shasum": "" }, "require": { @@ -12196,7 +12199,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.4.7" + "source": "https://github.com/symfony/http-client/tree/v7.4.8" }, "funding": [ { @@ -12216,7 +12219,7 @@ "type": "tidelift" } ], - "time": "2026-03-05T11:16:58+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/http-client-contracts", @@ -12298,16 +12301,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81" + "reference": "9381209597ec66c25be154cbf2289076e64d1eab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f94b3e7b7dafd40e666f0c9ff2084133bae41e81", - "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9381209597ec66c25be154cbf2289076e64d1eab", + "reference": "9381209597ec66c25be154cbf2289076e64d1eab", "shasum": "" }, "require": { @@ -12356,7 +12359,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.7" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.8" }, "funding": [ { @@ -12376,20 +12379,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T13:15:18+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1" + "reference": "017e76ad089bac281553389269e259e155935e1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3b3fcf386c809be990c922e10e4c620d6367cab1", - "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/017e76ad089bac281553389269e259e155935e1a", + "reference": "017e76ad089bac281553389269e259e155935e1a", "shasum": "" }, "require": { @@ -12475,7 +12478,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.7" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.8" }, "funding": [ { @@ -12495,20 +12498,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T16:33:18+00:00" + "time": "2026-03-31T20:57:01+00:00" }, { "name": "symfony/intl", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "6d6a398b18f73b3110140dbb030dcee2ae4ea81f" + "reference": "7cfb7792d580dea833647420afd5f2f98df8457b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/6d6a398b18f73b3110140dbb030dcee2ae4ea81f", - "reference": "6d6a398b18f73b3110140dbb030dcee2ae4ea81f", + "url": "https://api.github.com/repos/symfony/intl/zipball/7cfb7792d580dea833647420afd5f2f98df8457b", + "reference": "7cfb7792d580dea833647420afd5f2f98df8457b", "shasum": "" }, "require": { @@ -12565,7 +12568,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v7.4.6" + "source": "https://github.com/symfony/intl/tree/v7.4.8" }, "funding": [ { @@ -12585,20 +12588,20 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/mailer", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9" + "reference": "f6ea532250b476bfc1b56699b388a1bdbf168f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b02726f39a20bc65e30364f5c750c4ddbf1f58e9", - "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f6ea532250b476bfc1b56699b388a1bdbf168f62", + "reference": "f6ea532250b476bfc1b56699b388a1bdbf168f62", "shasum": "" }, "require": { @@ -12649,7 +12652,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.4.6" + "source": "https://github.com/symfony/mailer/tree/v7.4.8" }, "funding": [ { @@ -12669,20 +12672,20 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/mime", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1" + "reference": "6df02f99998081032da3407a8d6c4e1dcb5d4379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/da5ab4fde3f6c88ab06e96185b9922f48b677cd1", - "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1", + "url": "https://api.github.com/repos/symfony/mime/zipball/6df02f99998081032da3407a8d6c4e1dcb5d4379", + "reference": "6df02f99998081032da3407a8d6c4e1dcb5d4379", "shasum": "" }, "require": { @@ -12738,7 +12741,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.7" + "source": "https://github.com/symfony/mime/tree/v7.4.8" }, "funding": [ { @@ -12758,20 +12761,20 @@ "type": "tidelift" } ], - "time": "2026-03-05T15:24:09+00:00" + "time": "2026-03-30T14:11:46+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "69e98e7e10dae3daa896ef0f20e17a3928362d88" + "reference": "b52aeb44645a9a84a1795b973cc5c77a76df0720" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/69e98e7e10dae3daa896ef0f20e17a3928362d88", - "reference": "69e98e7e10dae3daa896ef0f20e17a3928362d88", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/b52aeb44645a9a84a1795b973cc5c77a76df0720", + "reference": "b52aeb44645a9a84a1795b973cc5c77a76df0720", "shasum": "" }, "require": { @@ -12821,7 +12824,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.6" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.8" }, "funding": [ { @@ -12841,20 +12844,20 @@ "type": "tidelift" } ], - "time": "2026-02-17T07:53:42+00:00" + "time": "2026-03-30T13:54:39+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v4.0.1", + "version": "v4.0.2", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "3b4ee2717ee56c5e1edb516140a175eb2a72bc66" + "reference": "c012c6aba13129eb02aa7dd61e66e720911d8598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/3b4ee2717ee56c5e1edb516140a175eb2a72bc66", - "reference": "3b4ee2717ee56c5e1edb516140a175eb2a72bc66", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/c012c6aba13129eb02aa7dd61e66e720911d8598", + "reference": "c012c6aba13129eb02aa7dd61e66e720911d8598", "shasum": "" }, "require": { @@ -12900,7 +12903,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v4.0.1" + "source": "https://github.com/symfony/monolog-bundle/tree/v4.0.2" }, "funding": [ { @@ -12920,20 +12923,20 @@ "type": "tidelift" } ], - "time": "2025-12-08T08:00:13+00:00" + "time": "2026-04-02T18:27:21+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.4.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b38026df55197f9e39a44f3215788edf83187b80" + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", - "reference": "b38026df55197f9e39a44f3215788edf83187b80", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", "shasum": "" }, "require": { @@ -12971,7 +12974,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" }, "funding": [ { @@ -12991,20 +12994,20 @@ "type": "tidelift" } ], - "time": "2025-11-12T15:39:26+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/password-hasher", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "376755eb9c9857d78aedb68341ad2f46d1908b29" + "reference": "18a7d92126c95962f7efbcc9e421ba710a366847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/376755eb9c9857d78aedb68341ad2f46d1908b29", - "reference": "376755eb9c9857d78aedb68341ad2f46d1908b29", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/18a7d92126c95962f7efbcc9e421ba710a366847", + "reference": "18a7d92126c95962f7efbcc9e421ba710a366847", "shasum": "" }, "require": { @@ -13047,7 +13050,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v7.4.6" + "source": "https://github.com/symfony/password-hasher/tree/v7.4.8" }, "funding": [ { @@ -13067,7 +13070,7 @@ "type": "tidelift" } ], - "time": "2026-02-11T16:03:16+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", @@ -13819,16 +13822,16 @@ }, { "name": "symfony/process", - "version": "v7.4.5", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "608476f4604102976d687c483ac63a79ba18cc97" + "reference": "60f19cd3badc8de688421e21e4305eba50f8089a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", - "reference": "608476f4604102976d687c483ac63a79ba18cc97", + "url": "https://api.github.com/repos/symfony/process/zipball/60f19cd3badc8de688421e21e4305eba50f8089a", + "reference": "60f19cd3badc8de688421e21e4305eba50f8089a", "shasum": "" }, "require": { @@ -13860,7 +13863,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.5" + "source": "https://github.com/symfony/process/tree/v7.4.8" }, "funding": [ { @@ -13880,20 +13883,20 @@ "type": "tidelift" } ], - "time": "2026-01-26T15:07:59+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/property-access", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1" + "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", - "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", + "url": "https://api.github.com/repos/symfony/property-access/zipball/b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", + "reference": "b7dad9dae8b8a47ef7ecc76c8569e7d8c7d90cfc", "shasum": "" }, "require": { @@ -13941,7 +13944,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.4.4" + "source": "https://github.com/symfony/property-access/tree/v7.4.8" }, "funding": [ { @@ -13961,20 +13964,20 @@ "type": "tidelift" } ], - "time": "2026-01-05T08:47:25+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/property-info", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "02501d75fd834345da3ecdd8e3200ced39e370f8" + "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/02501d75fd834345da3ecdd8e3200ced39e370f8", - "reference": "02501d75fd834345da3ecdd8e3200ced39e370f8", + "url": "https://api.github.com/repos/symfony/property-info/zipball/ac5e82528b986c4f7cfccbf7764b5d2e824d6175", + "reference": "ac5e82528b986c4f7cfccbf7764b5d2e824d6175", "shasum": "" }, "require": { @@ -14031,7 +14034,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.4.7" + "source": "https://github.com/symfony/property-info/tree/v7.4.8" }, "funding": [ { @@ -14051,20 +14054,20 @@ "type": "tidelift" } ], - "time": "2026-03-04T15:53:26+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "929ffe10bbfbb92e711ac3818d416f9daffee067" + "reference": "76f1a57719a4a04c0ea18678a6c9305b5dcb9da8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/929ffe10bbfbb92e711ac3818d416f9daffee067", - "reference": "929ffe10bbfbb92e711ac3818d416f9daffee067", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/76f1a57719a4a04c0ea18678a6c9305b5dcb9da8", + "reference": "76f1a57719a4a04c0ea18678a6c9305b5dcb9da8", "shasum": "" }, "require": { @@ -14119,7 +14122,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.4.4" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.4.8" }, "funding": [ { @@ -14139,20 +14142,20 @@ "type": "tidelift" } ], - "time": "2026-01-03T23:30:35+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/rate-limiter", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/rate-limiter.git", - "reference": "c2ff01c8d5ed54f0721f046fde14a94f2df09666" + "reference": "d55de9ec479418f58464e122e68d33886cf6f1fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/c2ff01c8d5ed54f0721f046fde14a94f2df09666", - "reference": "c2ff01c8d5ed54f0721f046fde14a94f2df09666", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/d55de9ec479418f58464e122e68d33886cf6f1fb", + "reference": "d55de9ec479418f58464e122e68d33886cf6f1fb", "shasum": "" }, "require": { @@ -14193,7 +14196,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v7.4.7" + "source": "https://github.com/symfony/rate-limiter/tree/v7.4.8" }, "funding": [ { @@ -14213,20 +14216,20 @@ "type": "tidelift" } ], - "time": "2026-03-04T13:54:41+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/routing", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "238d749c56b804b31a9bf3e26519d93b65a60938" + "reference": "9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938", - "reference": "238d749c56b804b31a9bf3e26519d93b65a60938", + "url": "https://api.github.com/repos/symfony/routing/zipball/9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b", + "reference": "9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b", "shasum": "" }, "require": { @@ -14278,7 +14281,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.6" + "source": "https://github.com/symfony/routing/tree/v7.4.8" }, "funding": [ { @@ -14298,20 +14301,20 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/runtime", - "version": "v7.4.1", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "876f902a6cb6b26c003de244188c06b2ba1c172f" + "reference": "6d792a64fec1eae2f011cfe9ab5978a9eab3071e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/876f902a6cb6b26c003de244188c06b2ba1c172f", - "reference": "876f902a6cb6b26c003de244188c06b2ba1c172f", + "url": "https://api.github.com/repos/symfony/runtime/zipball/6d792a64fec1eae2f011cfe9ab5978a9eab3071e", + "reference": "6d792a64fec1eae2f011cfe9ab5978a9eab3071e", "shasum": "" }, "require": { @@ -14361,7 +14364,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.4.1" + "source": "https://github.com/symfony/runtime/tree/v7.4.8" }, "funding": [ { @@ -14381,20 +14384,20 @@ "type": "tidelift" } ], - "time": "2025-12-05T14:04:53+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/security-bundle", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "d79c6d9a373fe8585e85bcfca4c24b9783214263" + "reference": "6f73fdfd9ad23bf24b6f6c8d35be3ea6853d91af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/d79c6d9a373fe8585e85bcfca4c24b9783214263", - "reference": "d79c6d9a373fe8585e85bcfca4c24b9783214263", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/6f73fdfd9ad23bf24b6f6c8d35be3ea6853d91af", + "reference": "6f73fdfd9ad23bf24b6f6c8d35be3ea6853d91af", "shasum": "" }, "require": { @@ -14473,7 +14476,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v7.4.6" + "source": "https://github.com/symfony/security-bundle/tree/v7.4.8" }, "funding": [ { @@ -14493,20 +14496,20 @@ "type": "tidelift" } ], - "time": "2026-02-22T22:01:45+00:00" + "time": "2026-03-30T13:54:39+00:00" }, { "name": "symfony/security-core", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "958a70725a8d669bec6721f4cd318d209712e944" + "reference": "23e0cd6615661e33e53faf714bf6a130c2f75c25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/958a70725a8d669bec6721f4cd318d209712e944", - "reference": "958a70725a8d669bec6721f4cd318d209712e944", + "url": "https://api.github.com/repos/symfony/security-core/zipball/23e0cd6615661e33e53faf714bf6a130c2f75c25", + "reference": "23e0cd6615661e33e53faf714bf6a130c2f75c25", "shasum": "" }, "require": { @@ -14564,7 +14567,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.4.4" + "source": "https://github.com/symfony/security-core/tree/v7.4.8" }, "funding": [ { @@ -14584,20 +14587,20 @@ "type": "tidelift" } ], - "time": "2026-01-14T09:36:49+00:00" + "time": "2026-03-31T07:00:19+00:00" }, { "name": "symfony/security-csrf", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "d01adcd3141bec95e4cfd338f6b4482f1dd6a42b" + "reference": "16b3aa2f67d02fb0dbd013a8759bbe90daaa9c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/d01adcd3141bec95e4cfd338f6b4482f1dd6a42b", - "reference": "d01adcd3141bec95e4cfd338f6b4482f1dd6a42b", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/16b3aa2f67d02fb0dbd013a8759bbe90daaa9c5d", + "reference": "16b3aa2f67d02fb0dbd013a8759bbe90daaa9c5d", "shasum": "" }, "require": { @@ -14638,7 +14641,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v7.4.6" + "source": "https://github.com/symfony/security-csrf/tree/v7.4.8" }, "funding": [ { @@ -14658,20 +14661,20 @@ "type": "tidelift" } ], - "time": "2026-02-11T16:03:16+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/security-http", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "52ce5ef5708900dcab9f55750cf81250a0ebba9f" + "reference": "1b07d7d472ba967fd66697067e6274084d2d1d7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/52ce5ef5708900dcab9f55750cf81250a0ebba9f", - "reference": "52ce5ef5708900dcab9f55750cf81250a0ebba9f", + "url": "https://api.github.com/repos/symfony/security-http/zipball/1b07d7d472ba967fd66697067e6274084d2d1d7c", + "reference": "1b07d7d472ba967fd66697067e6274084d2d1d7c", "shasum": "" }, "require": { @@ -14730,7 +14733,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v7.4.6" + "source": "https://github.com/symfony/security-http/tree/v7.4.8" }, "funding": [ { @@ -14750,20 +14753,20 @@ "type": "tidelift" } ], - "time": "2026-02-18T09:46:18+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/serializer", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "bd395bbc6fabd136a48e1a6f91b09f88b5050b0b" + "reference": "006fd51717addf2df2bd1a64dafef6b7fab6b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/bd395bbc6fabd136a48e1a6f91b09f88b5050b0b", - "reference": "bd395bbc6fabd136a48e1a6f91b09f88b5050b0b", + "url": "https://api.github.com/repos/symfony/serializer/zipball/006fd51717addf2df2bd1a64dafef6b7fab6b455", + "reference": "006fd51717addf2df2bd1a64dafef6b7fab6b455", "shasum": "" }, "require": { @@ -14834,7 +14837,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.4.7" + "source": "https://github.com/symfony/serializer/tree/v7.4.8" }, "funding": [ { @@ -14854,7 +14857,7 @@ "type": "tidelift" } ], - "time": "2026-03-06T13:15:18+00:00" + "time": "2026-03-30T21:34:42+00:00" }, { "name": "symfony/service-contracts", @@ -15018,16 +15021,16 @@ }, { "name": "symfony/stopwatch", - "version": "v7.4.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "8a24af0a2e8a872fb745047180649b8418303084" + "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", - "reference": "8a24af0a2e8a872fb745047180649b8418303084", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/70a852d72fec4d51efb1f48dcd968efcaf5ccb89", + "reference": "70a852d72fec4d51efb1f48dcd968efcaf5ccb89", "shasum": "" }, "require": { @@ -15060,7 +15063,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" + "source": "https://github.com/symfony/stopwatch/tree/v7.4.8" }, "funding": [ { @@ -15080,20 +15083,20 @@ "type": "tidelift" } ], - "time": "2025-08-04T07:05:15+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/string", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" + "reference": "114ac57257d75df748eda23dd003878080b8e688" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", + "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688", + "reference": "114ac57257d75df748eda23dd003878080b8e688", "shasum": "" }, "require": { @@ -15151,7 +15154,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.6" + "source": "https://github.com/symfony/string/tree/v7.4.8" }, "funding": [ { @@ -15171,20 +15174,20 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/translation", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "1888cf064399868af3784b9e043240f1d89d25ce" + "reference": "33600f8489485425bfcddd0d983391038d3422e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/1888cf064399868af3784b9e043240f1d89d25ce", - "reference": "1888cf064399868af3784b9e043240f1d89d25ce", + "url": "https://api.github.com/repos/symfony/translation/zipball/33600f8489485425bfcddd0d983391038d3422e7", + "reference": "33600f8489485425bfcddd0d983391038d3422e7", "shasum": "" }, "require": { @@ -15251,7 +15254,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.4.6" + "source": "https://github.com/symfony/translation/tree/v7.4.8" }, "funding": [ { @@ -15271,7 +15274,7 @@ "type": "tidelift" } ], - "time": "2026-02-17T07:53:42+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/translation-contracts", @@ -15357,16 +15360,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "c67219ca6b79a57b64e36bbb2cd8ba741286587e" + "reference": "ac43e7e59298ed1ce98c8d228b651d46e907d02c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c67219ca6b79a57b64e36bbb2cd8ba741286587e", - "reference": "c67219ca6b79a57b64e36bbb2cd8ba741286587e", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/ac43e7e59298ed1ce98c8d228b651d46e907d02c", + "reference": "ac43e7e59298ed1ce98c8d228b651d46e907d02c", "shasum": "" }, "require": { @@ -15382,7 +15385,7 @@ "symfony/form": "<6.4.32|>7,<7.3.10|>7.4,<7.4.4|>8.0,<8.0.4", "symfony/http-foundation": "<6.4", "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.4", + "symfony/mime": "<6.4.36|>7,<7.4.8|>8.0,<8.0.8", "symfony/serializer": "<6.4", "symfony/translation": "<6.4", "symfony/workflow": "<6.4" @@ -15403,7 +15406,7 @@ "symfony/http-foundation": "^7.3|^8.0", "symfony/http-kernel": "^6.4|^7.0|^8.0", "symfony/intl": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4.36|^7.4.8|^8.0.8", "symfony/polyfill-intl-icu": "~1.0", "symfony/property-info": "^6.4|^7.0|^8.0", "symfony/routing": "^6.4|^7.0|^8.0", @@ -15448,7 +15451,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.4.7" + "source": "https://github.com/symfony/twig-bridge/tree/v7.4.8" }, "funding": [ { @@ -15468,20 +15471,20 @@ "type": "tidelift" } ], - "time": "2026-03-04T15:37:05+00:00" + "time": "2026-03-30T15:17:09+00:00" }, { "name": "symfony/twig-bundle", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "e8829e02ff96a391ed0703bac9e7ff0537480b6b" + "reference": "ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e8829e02ff96a391ed0703bac9e7ff0537480b6b", - "reference": "e8829e02ff96a391ed0703bac9e7ff0537480b6b", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95", + "reference": "ba1e06d7ff1ebb1d1799b6608d925f4eaba88d95", "shasum": "" }, "require": { @@ -15538,7 +15541,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.4.4" + "source": "https://github.com/symfony/twig-bundle/tree/v7.4.8" }, "funding": [ { @@ -15558,20 +15561,20 @@ "type": "tidelift" } ], - "time": "2026-01-06T12:34:24+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/type-info", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "31f1e40cbf7851c7354281c90eb1b352c4cb8269" + "reference": "6bf34da885ff5143a3dfd8f1b863bb8ab95f50bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/31f1e40cbf7851c7354281c90eb1b352c4cb8269", - "reference": "31f1e40cbf7851c7354281c90eb1b352c4cb8269", + "url": "https://api.github.com/repos/symfony/type-info/zipball/6bf34da885ff5143a3dfd8f1b863bb8ab95f50bd", + "reference": "6bf34da885ff5143a3dfd8f1b863bb8ab95f50bd", "shasum": "" }, "require": { @@ -15621,7 +15624,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.4.7" + "source": "https://github.com/symfony/type-info/tree/v7.4.8" }, "funding": [ { @@ -15641,20 +15644,20 @@ "type": "tidelift" } ], - "time": "2026-03-04T12:49:16+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/uid", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36" + "reference": "6883ebdf7bf6a12b37519dbc0df62b0222401b56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36", - "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36", + "url": "https://api.github.com/repos/symfony/uid/zipball/6883ebdf7bf6a12b37519dbc0df62b0222401b56", + "reference": "6883ebdf7bf6a12b37519dbc0df62b0222401b56", "shasum": "" }, "require": { @@ -15699,7 +15702,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.4" + "source": "https://github.com/symfony/uid/tree/v7.4.8" }, "funding": [ { @@ -15719,7 +15722,7 @@ "type": "tidelift" } ], - "time": "2026-01-03T23:30:35+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/ux-translator", @@ -15907,16 +15910,16 @@ }, { "name": "symfony/validator", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "3a1a460a9f8c5e5611e15c52c4baa5a62fa3c203" + "reference": "8f73cbddae916756f319b3e195088da216f0f12f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/3a1a460a9f8c5e5611e15c52c4baa5a62fa3c203", - "reference": "3a1a460a9f8c5e5611e15c52c4baa5a62fa3c203", + "url": "https://api.github.com/repos/symfony/validator/zipball/8f73cbddae916756f319b3e195088da216f0f12f", + "reference": "8f73cbddae916756f319b3e195088da216f0f12f", "shasum": "" }, "require": { @@ -15987,7 +15990,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.4.7" + "source": "https://github.com/symfony/validator/tree/v7.4.8" }, "funding": [ { @@ -16007,20 +16010,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T11:10:17+00:00" + "time": "2026-03-30T12:55:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291" + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", "shasum": "" }, "require": { @@ -16074,7 +16077,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" }, "funding": [ { @@ -16094,20 +16097,20 @@ "type": "tidelift" } ], - "time": "2026-02-15T10:53:20+00:00" + "time": "2026-03-30T13:44:50+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.4.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "03a60f169c79a28513a78c967316fbc8bf17816f" + "reference": "398907e89a2a56fe426f7955c6fa943ec0c77225" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/03a60f169c79a28513a78c967316fbc8bf17816f", - "reference": "03a60f169c79a28513a78c967316fbc8bf17816f", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/398907e89a2a56fe426f7955c6fa943ec0c77225", + "reference": "398907e89a2a56fe426f7955c6fa943ec0c77225", "shasum": "" }, "require": { @@ -16155,7 +16158,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.4.0" + "source": "https://github.com/symfony/var-exporter/tree/v7.4.8" }, "funding": [ { @@ -16175,20 +16178,20 @@ "type": "tidelift" } ], - "time": "2025-09-11T10:15:23+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/web-link", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "9ff1f19069e3d2d341d60729392a4a6dfc45052a" + "reference": "0711009963009e7d6d59149327f3ad633ee3fe25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/9ff1f19069e3d2d341d60729392a4a6dfc45052a", - "reference": "9ff1f19069e3d2d341d60729392a4a6dfc45052a", + "url": "https://api.github.com/repos/symfony/web-link/zipball/0711009963009e7d6d59149327f3ad633ee3fe25", + "reference": "0711009963009e7d6d59149327f3ad633ee3fe25", "shasum": "" }, "require": { @@ -16242,7 +16245,7 @@ "push" ], "support": { - "source": "https://github.com/symfony/web-link/tree/v7.4.4" + "source": "https://github.com/symfony/web-link/tree/v7.4.8" }, "funding": [ { @@ -16262,7 +16265,7 @@ "type": "tidelift" } ], - "time": "2026-01-01T22:13:48+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/webpack-encore-bundle", @@ -16342,16 +16345,16 @@ }, { "name": "symfony/yaml", - "version": "v7.4.6", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "58751048de17bae71c5aa0d13cb19d79bca26391" + "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/58751048de17bae71c5aa0d13cb19d79bca26391", - "reference": "58751048de17bae71c5aa0d13cb19d79bca26391", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c58fdf7b3d6c2995368264c49e4e8b05bcff2883", + "reference": "c58fdf7b3d6c2995368264c49e4e8b05bcff2883", "shasum": "" }, "require": { @@ -16394,7 +16397,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.6" + "source": "https://github.com/symfony/yaml/tree/v7.4.8" }, "funding": [ { @@ -16414,7 +16417,7 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symplify/easy-coding-standard", @@ -17523,20 +17526,20 @@ }, { "name": "web-auth/cose-lib", - "version": "4.5.0", + "version": "4.5.1", "source": { "type": "git", "url": "https://github.com/web-auth/cose-lib.git", - "reference": "5adac6fe126994a3ee17ed9950efb4947ab132a9" + "reference": "3185af4df10dc537b65c140c315b88d15ae15b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/5adac6fe126994a3ee17ed9950efb4947ab132a9", - "reference": "5adac6fe126994a3ee17ed9950efb4947ab132a9", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/3185af4df10dc537b65c140c315b88d15ae15b80", + "reference": "3185af4df10dc537b65c140c315b88d15ae15b80", "shasum": "" }, "require": { - "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14", + "brick/math": "^0.9|^0.10|^0.11|^0.12|^0.13|^0.14|^0.15|^0.16|^0.17", "ext-json": "*", "ext-openssl": "*", "php": ">=8.1", @@ -17578,7 +17581,7 @@ ], "support": { "issues": "https://github.com/web-auth/cose-lib/issues", - "source": "https://github.com/web-auth/cose-lib/tree/4.5.0" + "source": "https://github.com/web-auth/cose-lib/tree/4.5.1" }, "funding": [ { @@ -17590,7 +17593,7 @@ "type": "patreon" } ], - "time": "2026-01-03T14:43:18+00:00" + "time": "2026-04-01T12:47:39+00:00" }, { "name": "web-auth/webauthn-lib", @@ -18457,11 +18460,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.45", + "version": "2.1.46", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f8cdfd9421b7edb7686a2d150a234870464eac70", - "reference": "f8cdfd9421b7edb7686a2d150a234870464eac70", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a193923fc2d6325ef4e741cf3af8c3e8f54dbf25", + "reference": "a193923fc2d6325ef4e741cf3af8c3e8f54dbf25", "shasum": "" }, "require": { @@ -18506,7 +18509,7 @@ "type": "github" } ], - "time": "2026-03-30T13:22:02+00:00" + "time": "2026-04-01T09:25:14+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -19232,18 +19235,18 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f56a297d85c1ab84bee540bc669706ad6a5def7b" + "reference": "958bc6ccdb194912236265e4f36256e55bb0c9da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f56a297d85c1ab84bee540bc669706ad6a5def7b", - "reference": "f56a297d85c1ab84bee540bc669706ad6a5def7b", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/958bc6ccdb194912236265e4f36256e55bb0c9da", + "reference": "958bc6ccdb194912236265e4f36256e55bb0c9da", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<=5.0.6", + "admidio/admidio": "<5.0.8", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -19287,10 +19290,10 @@ "athlon1600/youtube-downloader": "<=4", "aureuserp/aureuserp": "<1.3.0.0-beta1", "austintoddj/canvas": "<=3.4.2", - "auth0/auth0-php": ">=3.3,<8.18", - "auth0/login": "<7.20", - "auth0/symfony": "<=5.5", - "auth0/wordpress": "<=5.4", + "auth0/auth0-php": ">=3.3,<=8.18", + "auth0/login": "<=7.20", + "auth0/symfony": "<=5.7", + "auth0/wordpress": "<=5.5", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", "avideo/avideo": "<=26", @@ -19309,7 +19312,7 @@ "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.8", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<=5.1.1", + "baserproject/basercms": "<=5.2.2", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bbpress/bbpress": "<2.6.5", "bcit-ci/codeigniter": "<3.1.3", @@ -19408,7 +19411,7 @@ "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", "dev-lancer/minecraft-motd-parser": "<=1.0.5", - "devcode-it/openstamanager": "<=2.9.8", + "devcode-it/openstamanager": "<=2.10.1", "devgroup/dotplant": "<2020.09.14-dev", "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", @@ -19620,6 +19623,7 @@ "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", + "j0k3r/graby": "<=2.5", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "jambagecom/div2007": "<0.10.2", "james-heinrich/getid3": "<1.9.21", @@ -19843,7 +19847,7 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<=4.0.16", + "phpmyfaq/phpmyfaq": "<=4.1", "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", @@ -20005,7 +20009,7 @@ "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3", + "sulu/sulu": "<2.6.22|>=3,<3.0.5", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", "svewap/a21glossary": "<=0.4.10", @@ -20072,7 +20076,7 @@ "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<4.0.18|>=4.1.0.0-alpha,<=4.1.0.0-beta2", + "thorsten/phpmyfaq": "<4.1.1", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -20178,7 +20182,7 @@ "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", "yansongda/pay": "<=3.7.19", - "yeswiki/yeswiki": "<=4.5.4", + "yeswiki/yeswiki": "<4.6", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", @@ -20273,7 +20277,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T16:24:48+00:00" + "time": "2026-04-03T04:48:53+00:00" }, { "name": "sebastian/cli-parser", @@ -21315,16 +21319,16 @@ }, { "name": "symfony/browser-kit", - "version": "v7.4.4", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "bed167eadaaba641f51fc842c9227aa5e251309e" + "reference": "41850d8f8ddef9a9cd7314fa9f4902cf48885521" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/bed167eadaaba641f51fc842c9227aa5e251309e", - "reference": "bed167eadaaba641f51fc842c9227aa5e251309e", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/41850d8f8ddef9a9cd7314fa9f4902cf48885521", + "reference": "41850d8f8ddef9a9cd7314fa9f4902cf48885521", "shasum": "" }, "require": { @@ -21364,7 +21368,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v7.4.4" + "source": "https://github.com/symfony/browser-kit/tree/v7.4.8" }, "funding": [ { @@ -21384,20 +21388,20 @@ "type": "tidelift" } ], - "time": "2026-01-13T10:40:19+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/debug-bundle", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "7affd8924ef9a7739ec53284c2fc30afeeae7124" + "reference": "3eb18c1e6cd16da2cea1f1b5162e442af4afee44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7affd8924ef9a7739ec53284c2fc30afeeae7124", - "reference": "7affd8924ef9a7739ec53284c2fc30afeeae7124", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/3eb18c1e6cd16da2cea1f1b5162e442af4afee44", + "reference": "3eb18c1e6cd16da2cea1f1b5162e442af4afee44", "shasum": "" }, "require": { @@ -21439,7 +21443,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v7.4.7" + "source": "https://github.com/symfony/debug-bundle/tree/v7.4.8" }, "funding": [ { @@ -21459,7 +21463,7 @@ "type": "tidelift" } ], - "time": "2026-03-03T07:48:48+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/maker-bundle", @@ -21562,16 +21566,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "53c5a606cb4ae19c9466a5f8ffe60f61b0c93b5f" + "reference": "140bbbe1cd1c21a084494ccddeee33f3c3381d7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/53c5a606cb4ae19c9466a5f8ffe60f61b0c93b5f", - "reference": "53c5a606cb4ae19c9466a5f8ffe60f61b0c93b5f", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/140bbbe1cd1c21a084494ccddeee33f3c3381d7d", + "reference": "140bbbe1cd1c21a084494ccddeee33f3c3381d7d", "shasum": "" }, "require": { @@ -21623,7 +21627,7 @@ "testing" ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.7" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.8" }, "funding": [ { @@ -21643,20 +21647,20 @@ "type": "tidelift" } ], - "time": "2026-03-04T13:54:41+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.4.7", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "da9e91746fc9c575be8b5ff466b7572d98e7e1ae" + "reference": "79f039096c67cc1cc3f607d2ba72af86cd27e6a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/da9e91746fc9c575be8b5ff466b7572d98e7e1ae", - "reference": "da9e91746fc9c575be8b5ff466b7572d98e7e1ae", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/79f039096c67cc1cc3f607d2ba72af86cd27e6a4", + "reference": "79f039096c67cc1cc3f607d2ba72af86cd27e6a4", "shasum": "" }, "require": { @@ -21713,7 +21717,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.7" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.8" }, "funding": [ { @@ -21733,7 +21737,7 @@ "type": "tidelift" } ], - "time": "2026-03-03T13:57:00+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/reference.php b/config/reference.php index a146c2e1..1b8fdc8f 100644 --- a/config/reference.php +++ b/config/reference.php @@ -1550,7 +1550,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * template_parameters?: array{ // Default parameters to be passed to the template * className?: scalar|Param|null, // Default class attribute to apply to the root table elements // Default: "table table-bordered" * columnFilter?: "thead"|"tfoot"|"both"|Param|null, // If and where to enable the DataTables Filter module // Default: null - * ... + * ... * }, * translation_domain?: scalar|Param|null, // Default translation domain to be used // Default: "messages" * } @@ -1705,7 +1705,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * use_underscore?: bool|Param, // Default: true * unordered_list_markers?: list, * }, - * ... + * ... * }, * } * @psalm-type GregwarCaptchaConfig = array{ @@ -2649,7 +2649,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * cast_fn?: mixed, * default?: mixed, * filter_class?: mixed, - * ... + * ... * }>, * strict_query_parameter_validation?: mixed, * hide_hydra_operation?: mixed, @@ -2669,7 +2669,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * name?: mixed, * allow_create?: mixed, * item_uri_template?: mixed, - * ... + * ... * }, * } * @psalm-type ConfigType = array{ diff --git a/yarn.lock b/yarn.lock index 9c6200b2..e25ae6ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,58 +2,58 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.19.7": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.7.tgz#723ad865d030365c3be73d5e466cfc16c501318e" - integrity sha512-4sqB+Nfo131MkKMledkmsxX08uZHMI4KbscUdsX6U69scchXsgkgENjN9tRVBKHAOn900mBSNEpUdfzKZw8f+A== +"@algolia/autocomplete-core@1.19.8": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.8.tgz#7c84c771d28643fb00d09026c05013fb97aeea23" + integrity sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.19.7" - "@algolia/autocomplete-shared" "1.19.7" + "@algolia/autocomplete-plugin-algolia-insights" "1.19.8" + "@algolia/autocomplete-shared" "1.19.8" -"@algolia/autocomplete-js@1.19.7", "@algolia/autocomplete-js@^1.17.0": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.7.tgz#41c0fb2e2d4d29a79b893ea5cae25d64e33613ec" - integrity sha512-ExTgOXioDEjM1rpRnxY+3PAQzmlsHM28WwDhdY01VIHLfzr9PoKtIdTWd0N2u6XG8HdaZvDw3PrjGZ3Rno72gg== +"@algolia/autocomplete-js@1.19.8", "@algolia/autocomplete-js@^1.17.0": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.8.tgz#35960525442d741a0a4ee5ac4e1fcd6c550355ff" + integrity sha512-9Sfr9Un3vObdtnj6IqzxoD9XisjFJxA9WAyVxmOkwTD9aVluyNwDeEWeGLy12xhRyILjA5C7byto159cZcdEEA== dependencies: - "@algolia/autocomplete-core" "1.19.7" - "@algolia/autocomplete-preset-algolia" "1.19.7" - "@algolia/autocomplete-shared" "1.19.7" + "@algolia/autocomplete-core" "1.19.8" + "@algolia/autocomplete-preset-algolia" "1.19.8" + "@algolia/autocomplete-shared" "1.19.8" htm "^3.1.1" preact "^10.13.2" -"@algolia/autocomplete-plugin-algolia-insights@1.19.7": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.7.tgz#21108d395d5b43fc1d1f24ac77b0b087d2fbcc8a" - integrity sha512-5nBYyDNUUXThFGrdYeWA2OkoCaIzHzspIjN2gBPRmURdo4xMQgzay4M+J+XgZginlQcJ+UFYkHKbUYQwfAZ3jw== +"@algolia/autocomplete-plugin-algolia-insights@1.19.8": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.8.tgz#f60d21edbe2a42e6d4e2215430733e3f51641471" + integrity sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA== dependencies: - "@algolia/autocomplete-shared" "1.19.7" + "@algolia/autocomplete-shared" "1.19.8" "@algolia/autocomplete-plugin-recent-searches@^1.17.0": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.7.tgz#a78da3e8baba4e0dc66acd2df15008ff9bf2bb80" - integrity sha512-fQBldPnmilJFLK29wUajAjJ7V19cQbCCiAutoGzAEpVlrWMl6xrP0qsOy5oy4ijmBnPMqX1wwzh76bMbKbU4LQ== + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.8.tgz#74c1d64bea603cc29ac14a4ee8e6d7ccd4d1423d" + integrity sha512-Y8bLNJcdMCjSp4Mp6pfcdfl1kGCwogzlaJFUtREK3kInwDL4Ea7Fx0DO8eg8sHBkcsxq7XGHD23OH5+AmYQsKw== dependencies: - "@algolia/autocomplete-core" "1.19.7" - "@algolia/autocomplete-js" "1.19.7" - "@algolia/autocomplete-preset-algolia" "1.19.7" - "@algolia/autocomplete-shared" "1.19.7" + "@algolia/autocomplete-core" "1.19.8" + "@algolia/autocomplete-js" "1.19.8" + "@algolia/autocomplete-preset-algolia" "1.19.8" + "@algolia/autocomplete-shared" "1.19.8" -"@algolia/autocomplete-preset-algolia@1.19.7": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.7.tgz#88a315b8450d810d7d243a8a55873f63d0ae16bf" - integrity sha512-PXou3XXPN18v/lJwpP40JwUjatwKVF1zeevoj2dXo1+TKrFB8XxSiGcBbChBQ6RYUEKYoS+ck8WMbpn4LwyHAw== +"@algolia/autocomplete-preset-algolia@1.19.8": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.8.tgz#1bfffba816d497193d89692e17aa31cba875e96a" + integrity sha512-5XhJe5uXXLrt+C1MjIv1/BfGNHZyD1xkAYMVANTjdY+PXwO4o+3YIK2XGU0MxHTGryy70G6+xVO9TB7xA+3hGQ== dependencies: - "@algolia/autocomplete-shared" "1.19.7" + "@algolia/autocomplete-shared" "1.19.8" -"@algolia/autocomplete-shared@1.19.7": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.7.tgz#56607ba42295fb171541e8209ec20a1100482eb1" - integrity sha512-Z6nBmZzPX6A0gV0GUrXDwMPhh6AnrWQshebAfZ/oJ5ioxVoPyRl30SLd3kpCrWr/xXXaaFxUq2qthVeBC2LlVg== +"@algolia/autocomplete-shared@1.19.8": + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.8.tgz#5d723d8bdb448efbb1b0e1c7ff94cc18e5b1dc0e" + integrity sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ== "@algolia/autocomplete-theme-classic@^1.17.0": - version "1.19.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.7.tgz#f9e6cb90e4759e4758652bab323357a28335823e" - integrity sha512-XDN1pc6k3qlowkyBwkQGd4+j3R8OZtVY9BR26Tq+0ZJgyudiswdvDWLUJD/g13q4UoVy55/ygy6qrwhMKsBxZA== + version "1.19.8" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.8.tgz#33706300a2f711ac9386ec8008a0f119ffdccd7b" + integrity sha512-FYmpeOyL5Wy444ZGp1IW57fevpMSBMewN37j+0WULMTJZGobnvTgVEKjYIgtv5Ku4/RNNp54rtEx2/OU6l8GYA== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" @@ -1630,9 +1630,9 @@ es-toolkit "1.39.5" "@colordx/core@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.0.0.tgz#5324af97df4c63fcfaaae247003efc413445d3a2" - integrity sha512-twwxohWH8hWWh5ZJ5z6ZNn/JyMrq08K+NzxXKVGTpH+XmMPDAYYzqvszc3OPhYhqqxmfnbCSa/YHcS7pCnChmw== + version "5.0.3" + resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.0.3.tgz#d5021feffd7fbfc103f1347d2cbebb110de0120e" + integrity sha512-xBQ0MYRTNNxW3mS2sJtlQTT7C3Sasqgh1/PsHva7fyDb5uqYY+gv9V0utDdX8X80mqzbGz3u/IDJdn2d/uW09g== "@csstools/selector-resolve-nested@^3.1.0": version "3.1.0" @@ -2166,9 +2166,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" - integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== + version "25.5.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.2.tgz#94861e32f9ffd8de10b52bbec403465c84fff762" + integrity sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg== dependencies: undici-types "~7.18.0" @@ -2612,11 +2612,11 @@ balanced-match@^4.0.2: integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== barcode-detector@^3.0.0, barcode-detector@^3.0.5: - version "3.1.1" - resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.1.tgz#4ce6ecab6eee237b53755269683309a28760c0d1" - integrity sha512-ghWlEAV93ZCUniO7Co3ih/01XPm+U30CV+NoPbO6Chj5lZzHydDAqKlrBEd+37TkoR+QTH3tnnwd8k8epGTfIg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.2.tgz#8032a211ebb6cb5cc25724c5c56322c77ed02503" + integrity sha512-Q5kjXpVH5I3ItykNzbWmfWnNryFN1ZTWp10k9/PKJuS0RnoKR7jTrHEJODR4fn04bRomq7TJwie/Dr9fj/GoGQ== dependencies: - zxing-wasm "3.0.1" + zxing-wasm "3.0.2" base64-js@1.3.1: version "1.3.1" @@ -2628,10 +2628,10 @@ base64-js@^1.1.2, base64-js@^1.3.0: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.9.0: - version "2.10.12" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz#60f9e2172e962839ac313d4e0c8e182090fb6621" - integrity sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ== +baseline-browser-mapping@^2.10.12: + version "2.10.14" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.14.tgz#d25463733a8f80bb59ab9f797c902dc88832d47c" + integrity sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA== big.js@^5.2.2: version "5.2.2" @@ -2676,7 +2676,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^5.0.2: +brace-expansion@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== @@ -2703,15 +2703,15 @@ browser-stdout@1.3.1: integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1: - version "4.28.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" - integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + version "4.28.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" + integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== dependencies: - baseline-browser-mapping "^2.9.0" - caniuse-lite "^1.0.30001759" - electron-to-chromium "^1.5.263" - node-releases "^2.0.27" - update-browserslist-db "^1.2.0" + baseline-browser-mapping "^2.10.12" + caniuse-lite "^1.0.30001782" + electron-to-chromium "^1.5.328" + node-releases "^2.0.36" + update-browserslist-db "^1.2.3" bs-custom-file-input@^1.3.4: version "1.3.4" @@ -2798,10 +2798,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001782" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz#f2b8617f998bc134701c54ce9748af44f646e062" - integrity sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782: + version "1.0.30001784" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz#bdf9733a0813ccfb5ab4d02f2127e62ee4c6b718" + integrity sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw== ccount@^2.0.0: version "2.0.1" @@ -3679,10 +3679,10 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -electron-to-chromium@^1.5.263: - version "1.5.328" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz#d24ce55f1aa5e4a3b877c1b315a0ab40e9498cc8" - integrity sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w== +electron-to-chromium@^1.5.328: + version "1.5.331" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz#3e4e845042d517c68b3c00be5fc33204f13b2058" + integrity sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q== emoji-regex@^7.0.1: version "7.0.3" @@ -5051,9 +5051,9 @@ lodash.uniq@^4.5.0: integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.23" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" - integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== + version "4.18.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" + integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== log-symbols@3.0.0: version "3.0.0" @@ -5593,11 +5593,11 @@ mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: tapable "^2.2.1" minimatch@*: - version "10.2.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" - integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== + version "10.2.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" + integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== dependencies: - brace-expansion "^5.0.2" + brace-expansion "^5.0.5" minimatch@3.0.4: version "3.0.4" @@ -5746,10 +5746,10 @@ node-notifier@^9.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^2.0.27: - version "2.0.36" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" - integrity sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA== +node-releases@^2.0.36: + version "2.0.37" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.37.tgz#9bd4f10b77ba39c2b9402d4e8399c482a797f671" + integrity sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -6517,9 +6517,9 @@ postcss@^8.2.14, postcss@^8.2.15, postcss@^8.4.12, postcss@^8.4.40: source-map-js "^1.2.1" preact@^10.13.2: - version "10.29.0" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.29.0.tgz#a6e5858670b659c4d471c6fea232233e03b403e8" - integrity sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg== + version "10.29.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.29.1.tgz#2a5b936efe91cfe1e773cdb55dceb55d148d1d4b" + integrity sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg== pretty-error@^4.0.0: version "4.0.0" @@ -7486,9 +7486,9 @@ trough@^2.0.0: integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-loader@^9.2.6: - version "9.5.4" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.4.tgz#44b571165c10fb5a90744aa5b7e119233c4f4585" - integrity sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ== + version "9.5.7" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.7.tgz#582663e853646e18506cd5cc79feb354952731c0" + integrity sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" @@ -7501,7 +7501,7 @@ tslib@^2.8.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -type-fest@^5.4.4: +type-fest@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.5.0.tgz#78fca72f3a1f9ec964e6ae260db492b070c56f3b" integrity sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g== @@ -7699,7 +7699,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -update-browserslist-db@^1.2.0: +update-browserslist-db@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== @@ -8053,10 +8053,10 @@ zwitch@^2.0.0, zwitch@^2.0.4: resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== -zxing-wasm@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-3.0.1.tgz#b04c9323f2322996d9f21a02bad7fc1b450ec390" - integrity sha512-3CLj6iaGkpqPWXAB4pIWkFOR63MwqGekpMzaROFKto4dFowiPmLlC56KoMoOSXzqOCOpI5DAvMdB8ku2va6fUg== +zxing-wasm@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-3.0.2.tgz#3c39821f4a5d20b02bc5bacaefe7e6725d9520dd" + integrity sha512-2YMAriaYHX9wrBY2k7H0epSo+dyCaCZg/vOtt+nEDXM9ul480gkXz/9SkwpOeHcD2H5qqDG8lWDSBwpTcZpa6w== dependencies: "@types/emscripten" "^1.41.5" - type-fest "^5.4.4" + type-fest "^5.5.0" From 70454e3a6df10751a017f988971a252e07dabadd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 3 Apr 2026 21:55:11 +0200 Subject: [PATCH 026/108] Require node 22 and bumped ckeditor dependencies --- package.json | 8 +- yarn.lock | 4527 +++++++++++++++++++++----------------------------- 2 files changed, 1883 insertions(+), 2652 deletions(-) diff --git a/package.json b/package.json index 583d0b42..87412c73 100644 --- a/package.json +++ b/package.json @@ -30,14 +30,14 @@ "build": "encore production --progress" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "dependencies": { "@algolia/autocomplete-js": "^1.17.0", "@algolia/autocomplete-plugin-recent-searches": "^1.17.0", "@algolia/autocomplete-theme-classic": "^1.17.0", - "@ckeditor/ckeditor5-dev-translations": "^43.0.1", - "@ckeditor/ckeditor5-dev-utils": "^43.0.1", + "@ckeditor/ckeditor5-dev-translations": "^53", + "@ckeditor/ckeditor5-dev-utils": "^53", "@jbtronics/bs-treeview": "^1.0.1", "@part-db/html5-qrcode": "^4.0.0", "@zxcvbn-ts/core": "^3.0.2", @@ -51,7 +51,7 @@ "bootbox": "^6.0.0", "bootswatch": "^5.1.3", "bs-custom-file-input": "^1.3.4", - "ckeditor5": "^47.0.0", + "ckeditor5": "^48.0.0", "clipboard": "^2.0.4", "compression-webpack-plugin": "^11.1.0", "datatables.net": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index e25ae6ff..25c61836 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,516 +837,510 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.1.tgz#bb07943138ecd3c17b0e9634eb605e586c7d32f2" - integrity sha512-X4l4KyLgSsmAyRd/YY8R/OArOXR2Ts8NyoW6k+tLtYxEmZOhJsa6ZFSho/OVTole7IqMl+Zo93b9YaAwX23brw== +"@ckeditor/ckeditor5-adapter-ckfinder@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-48.0.0.tgz#593e092072d1172d702fe4cb5b2da93d543bee8d" + integrity sha512-qNMICWAlocqa3XYp8MlDF26jSVgahl7I8dOlPWQXhDWtWPF1rGVnNzBxvjICMHzwN/oHtRMyjVIRyGae5Id9rA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-upload" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-alignment@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.1.tgz#9a06caee658ceb19959e6bb9fbbbbc32efa195c3" - integrity sha512-2u1+Eseelrm5gKKajE9X+gcPchVAIna3AkoJyCw3+Y4dBc6ElWZJEuCO7b6Omv5H7q3lQimbaqJnvIE1Z/nXOA== +"@ckeditor/ckeditor5-alignment@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-48.0.0.tgz#9ea3f00a3706857c5b600d9ac96528b16065949f" + integrity sha512-6wdG0n5a69cZJQVw5WJinrFdMuGhq1YWbEsiowFXTw0zREbGjRpZs8FLV2g4tPK3Gw+jXZgVo3t8RHOYdX2G8g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-autoformat@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.1.tgz#0771f53e3d94202c454213f78e491aaebfff51ea" - integrity sha512-UI3HFyw7VCTM92IhE6hdIh5rp2nqOLL4vnnOFTgp7Lq6dLOVzuwsRJLIEfYxz4Xusy4UKu4zM8QX4FV1nOWsGQ== +"@ckeditor/ckeditor5-autoformat@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-48.0.0.tgz#490683810e89636fb28e68d1d925e71582da5479" + integrity sha512-Fr8Gp0kgEI8foRLrGrRyxuU4zAfux7OAbrDxS47bEBckbf9mGuwGOA90fcmFY3hwIDxxfgZA8h6qHJOZBCqWSg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-heading" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-autosave@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.1.tgz#86fe0ca7c6c0db546298fe214df50f282ba0528b" - integrity sha512-7om5OHf2hBDi/Md8lVZL6fF7gCBAMVZfg8zsJqTmAW6fwl5gfenD4rggPdSa4GVt+mZXbheZx9EWc0HX1psAew== +"@ckeditor/ckeditor5-autosave@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-48.0.0.tgz#f66e988a92ee8a6d1f2f3865b23c6aee75c152a9" + integrity sha512-/5nm78GoqEA94RcOCQtQ6g+nv1ibz5/pu7p1N3NWwKQBc04fM0HzdioxhcDnSd1qSjXHx1Lzo3ICZAyp0GnAjw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-basic-styles@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.1.tgz#afcb1f8e301c7fdfbe36dd10ac99aa152e1fa9bd" - integrity sha512-/8R59UxR/8quK8UmOLOS1xq47GnB+oMNySo8BgLHJl7qepRR5VnWU0hHB239idnFk46IVhuRciXQHjifrJiScQ== +"@ckeditor/ckeditor5-basic-styles@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-48.0.0.tgz#f0948e7cd83b879404bc9cb7b4d8e3da469cc536" + integrity sha512-6EX+Wmb/wHljeutCdLPVers35PENkANtslXe+qM5NKhEw9WLQEaS5fXYh+4A5xZJsppV0l/zQpMMRP7MPoQQMQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-block-quote@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.1.tgz#056a0992dcdb503f66b7b8fb5cfc37ab1cf6d24c" - integrity sha512-wyDLqGrmcDVNlRmHxXTpXg2PKImgB4yIU3UDRofFKVJiuvnZvKKvx/Oh9USVv1G1zOAPoFyoK9AQzqYNOB7AMQ== +"@ckeditor/ckeditor5-block-quote@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-48.0.0.tgz#5d321c61274578d36de9f7ab69426071944f8cf9" + integrity sha512-lgznrbDscTPqob99NJDNTFCRO8AGUKl9pXlXbW6yRf9zycfubHWU0inEp771Tc3nNHveTphwPiuTStshsPZb9A== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-bookmark@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.1.tgz#9b7452cf06a98bfcea754ed781499d4deca4d3bb" - integrity sha512-9HwVudGBEhbqMPkEXQTqSIACGYpOWlES7bOxdG6WfgOUOAdCiTPXFCc5f+HSMFbrwd7XJ40tycPLOa7XK14oEg== +"@ckeditor/ckeditor5-bookmark@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-48.0.0.tgz#94bcb61fb3bfd1a867637de4c31ebb8654e33f01" + integrity sha512-EmvW4HJYIMfp+0a6F1RrfcM9qMFyh3HjmFWz5IOsosqYUWh1BhQAf99r0cK/nUWEIwmAyX5PdbtMVLmkWOASAg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-link" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-link" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" -"@ckeditor/ckeditor5-ckbox@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.1.tgz#56fbc40ffed21ffec0dc0e83a0c69f7547c81ab0" - integrity sha512-v083Tnbsx4z1fFW+ghMXlsf5EgB3UaSldjfRsipjIYUiUeatccgRN00Qh6qGMlYz7zZcSdUUtrOfTWL/LYPWDg== +"@ckeditor/ckeditor5-ckbox@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-48.0.0.tgz#4fdf7a14763c463ba583d07d105fc9c079934ed3" + integrity sha512-O6Le5xGxdjntf6VSVbO6jwEUkoJbGIrSWJFD7REOS/bKq+xO59NnjhCuYcIwCuBveNf+i6u7KPWCdlFl+r2zGA== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-cloud-services" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-image" "48.0.0" + "@ckeditor/ckeditor5-link" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-upload" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" blurhash "2.0.5" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-ckfinder@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.1.tgz#954c594b72ab291a359ebf0b4c62e5770426ce78" - integrity sha512-ewgqgtQaDDZHQUGby/gg2/840Go280bvx959ExQH8Y7u4fPVw8NEFYAxjcm43W6EXgMnlmsEr8+G8q8g4iKT1w== +"@ckeditor/ckeditor5-ckfinder@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-48.0.0.tgz#55f886cb16851db79a178af80ed54c362ea1ae48" + integrity sha512-UuuxpUG03zp1YpxHpBs8UprkMpGySVp58o7adTJv5zJeMA9GLcKm+cB6UL066kKxzfKhBS6eSzsefHyPTaUMpg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-adapter-ckfinder" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-image" "48.0.0" + "@ckeditor/ckeditor5-link" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-clipboard@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.1.tgz#10fa242f281dceb318ca79dc6c9b022585935e70" - integrity sha512-F3KQuCnnCavm8wXvX+d1KN/obh5ux/jT9qC/71QfMKdDvHxEOzi/t3YWa1r3sztlksDQ4LtODU4uWh0vVKUpkg== +"@ckeditor/ckeditor5-clipboard@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-48.0.0.tgz#c60b5f9903bb149027cb0a646d0874f5b4da74e4" + integrity sha512-wW3Lhn3zrTmXDvE3y6w5xnie7fLxnPnewMKw/82a7vnYG+pPpA2K79czZov4h/TQ2X91JC5i9/G6PT/tMQ2UTg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-cloud-services@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.1.tgz#fdb1f25a132cbb8adb207a3dd8da426fe675f722" - integrity sha512-yC9aqornbxjgNhHuUX4gcuvPTLv34sc8CbUOeFYLGbD9ujwoC0fzzjzSB7u5b8fWNg6cAjzriFooJATHBvu40g== +"@ckeditor/ckeditor5-cloud-services@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-48.0.0.tgz#f18a85dfb67077734be260e3c3d30aca278d2125" + integrity sha512-XsXT7PZ8C68uBFYNhO+HctlnjW4mXUNbqXibLFFJmc78L+aWsYw73jdxLMG97qe7ekDncrSsKJoaegdURZE5yw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-upload" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-code-block@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.1.tgz#4f15dedc705845d45bb6b8bfb28bc7dd26be37dd" - integrity sha512-ntZBIEYLoC4/OTUgCkwwmyXwwqDk8QwFcx/1kZN7S4YtwocREZqpDH1wYT+GA2ZmGkjaBRxdTLwSVr/7bf+wqg== +"@ckeditor/ckeditor5-code-block@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-48.0.0.tgz#8d7c4b76839686a42864d115be18bfa6152ef8c7" + integrity sha512-R4rBaEg0si0u1TmsnROPGimqyru13DwoEThEoMN6B4+Z9x0K4gWuBcLJQ9DbbfcrX4FI6A42VE6pdMsjlgN1Cg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-core@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.1.tgz#e5558a33b7d2d4870ee8de3345d56518748c89cf" - integrity sha512-6dtnquhjymLkNhdC9T6gk/Mf2bDnHSTZrhkByaXC96CbmQDriCgfcaAVY6pQgDNxBQ6fZrev0TnKBLfTItrMsg== +"@ckeditor/ckeditor5-core@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-48.0.0.tgz#58a8fc61d5a9559720beaac172d39845b853193a" + integrity sha512-alN+AOKd8a5C8xgNim7ojKlW3r2jOWjIh3KrYBIfL92LvBXmFutNJRYuxzSMVO5I9+stbcYp2oAZZ1jxtpL/7g== dependencies: - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-watchdog" "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-watchdog" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-dev-translations@^43.0.1", "@ckeditor/ckeditor5-dev-translations@^43.1.0": - version "43.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-translations/-/ckeditor5-dev-translations-43.1.0.tgz#62b3929fcf5f7ab3e3d93c33c4b5234687913fa9" - integrity sha512-dIjau68aLaaQtugLsHaCTuxhRL9t2bFmtTIsoUfMl1uHWpOWMdv2LeGEcDznZp633gZh6SDmrqLq2Bp2iOVBew== +"@ckeditor/ckeditor5-dev-translations@^53", "@ckeditor/ckeditor5-dev-translations@^53.4.0": + version "53.4.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-translations/-/ckeditor5-dev-translations-53.4.0.tgz#3b76d6825aadcf9c183cbc8a712033f59d860346" + integrity sha512-e76aPDJkbJen3W18QiddkklsM0V6NdBXL3pLDmnSKPqIDbknOh49Ov/ciDwxWqMIKDqf9n5PnTaRXIDONUO0TA== dependencies: "@babel/parser" "^7.18.9" "@babel/traverse" "^7.18.9" - chalk "^4.0.0" - pofile "^1.0.9" - rimraf "^3.0.2" - webpack-sources "^2.0.1" + "@ckeditor/ckeditor5-dev-utils" "^53.4.0" + chalk "^5.0.0" + fs-extra "^11.0.0" + glob "^11.0.2" + plural-forms "^0.5.5" + pofile "^1.1.4" + rimraf "^6.0.1" + upath "^2.0.1" + webpack-sources "^3.0.0" -"@ckeditor/ckeditor5-dev-utils@^43.0.1": - version "43.1.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-43.1.0.tgz#f196c3accaa7d1272ac3f36e69abe9b15cc1ceb2" - integrity sha512-EM1zg0vWcFSkxbwOYV6YE6nPoBphfEHtRKzgk86ex9XbxoQvq8HdDvC0dkCSAfgX0oUrFxjLonQBJUTgCoD3YQ== +"@ckeditor/ckeditor5-dev-utils@^53", "@ckeditor/ckeditor5-dev-utils@^53.4.0": + version "53.4.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-53.4.0.tgz#0670275678525c8ee326fb39192256c6ac9c9c19" + integrity sha512-Ppd7MsgpeVWO5xJ9x1qcYN+ar7Cb41w8WSiJFE2VvsY7wDCxIa3FffK3adB01qFa8+criH3lzhy93PiUfm0h7w== dependencies: - "@ckeditor/ckeditor5-dev-translations" "^43.1.0" - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.6.1" - css-loader "^5.2.7" - cssnano "^6.0.3" - del "^5.0.0" - esbuild-loader "~3.0.1" - fs-extra "^11.2.0" - is-interactive "^1.0.0" - javascript-stringify "^1.6.0" + "@ckeditor/ckeditor5-dev-translations" "^53.4.0" + "@types/postcss-import" "^14.0.3" + "@types/through2" "^2.0.41" + babel-loader "^10.0.0" + chalk "^5.0.0" + cli-cursor "^5.0.0" + cli-spinners "^3.0.0" + css-loader "^7.0.0" + cssnano "^7.0.0" + esbuild-loader "^4.0.0" + fs-extra "^11.0.0" + glob "^11.0.2" + is-interactive "^2.0.0" mini-css-extract-plugin "^2.4.2" - mocha "^7.1.2" + mocha "^11.1.0" + pacote "^21.0.0" postcss "^8.4.12" - postcss-import "^14.1.0" - postcss-loader "^4.3.0" - postcss-mixins "^9.0.2" + postcss-import "^16.0.0" + postcss-loader "^8.0.0" + postcss-mixins "^11.0.0" postcss-nesting "^13.0.0" raw-loader "^4.0.1" - shelljs "^0.8.1" - style-loader "^2.0.0" - terser-webpack-plugin "^4.2.3" - through2 "^3.0.1" + shelljs "^0.10.0" + simple-git "^3.27.0" + style-loader "^4.0.0" + terser-webpack-plugin "^5.0.0" + through2 "^4.0.0" + upath "^2.0.1" -"@ckeditor/ckeditor5-easy-image@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.1.tgz#03b7b4180a194cbb9e60d2679471dafd2a6ada7f" - integrity sha512-hWaqibO1ZUHRIkvvAO7O0qDAIw+GN6UWbdr0wcGNLc4DcSZMUIpAfoXuiyyvE9hQEJPpfTOwA3r0znS6wXtMCg== +"@ckeditor/ckeditor5-easy-image@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-48.0.0.tgz#55fac5dc9fa0024558cfa2b352d1db55d0bf5645" + integrity sha512-dLblbP7Skvbx3olIiHxnZnfZUr159V5ixNzge63IlN5qRfJxLguInpm/93bQY5kMpfARU4dgI2/07B6RtYP3XA== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-cloud-services" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-image" "48.0.0" + "@ckeditor/ckeditor5-upload" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-editor-balloon@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.1.tgz#ee58d45c86d213bf39eae01dcf50942805f6804f" - integrity sha512-geszCykoE9Sja2tBqyMww4etAzAExg4eGnlYbXSGiaUiC7Ks4OqRVeuvw37QsH8Q56J5FQC35ysq95nrLEB+0A== +"@ckeditor/ckeditor5-editor-balloon@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-48.0.0.tgz#c05974790185d71e62b140634879eeeaed5b23fc" + integrity sha512-yrDqeV+3SspIvnqMJt4pGyOOC91z691uJYFFP369WF9w40sQPKpt5rtJjYmwFaSNO4vX1f7QlG8xuxD8eP/cyQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-classic@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.1.tgz#82fe9e61064ca5bbc431f1d9146710831a252945" - integrity sha512-w2QaF2ieqLqu6i9YldOpPnFezvAsXY/R/vp/c0D1ofvI1CtBRWhQ9/rRwADMoKgpcuyP2320sRG312anT8aiaA== +"@ckeditor/ckeditor5-editor-classic@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-48.0.0.tgz#15b7e097c43089bf6844a53278fa600d4e1daa76" + integrity sha512-PUtB1e3uMD5vNYFSThapmf2qCQ9i1vM7w50rOPBIFbXeBM3NgNgQ4uj7DBQe5CSxPlTZDerHujPjvur576KvVQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-decoupled@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.1.tgz#46c286e4a9800be17a2e8252a578f4541fdab460" - integrity sha512-w047UpjHF106k0NeQLgWY03k29s5vIpS9M6Oj+f+IdKaf4TR7uSzl/CXsS+csfqwZEhtGwGV3LYJVzo35+SifA== +"@ckeditor/ckeditor5-editor-decoupled@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-48.0.0.tgz#348d64dc2f6f85e30b5e480b4109b00a1281d7c8" + integrity sha512-zsKb1IQJ7Cb9mxnCbI/Foec6pE3L+GmXfyI38sXQTbsWdf0rE48CpNsot4MpPkRig+z1xovwAYT1J4F37RTLPg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-inline@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.1.tgz#0b8d63092273517b17960a16816fc27b2230a953" - integrity sha512-UJQHbMh1nvsHMuiijmRx3y/5ssdxeJTrVjrwDoPlUsI8tfRYjkdIucd9SsRhXnV65Vk31Ah5wiFyaBb5OLXZaA== +"@ckeditor/ckeditor5-editor-inline@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-48.0.0.tgz#3594dd3a98b663cb75ea1449e7bc423fcde8ead1" + integrity sha512-V2hdVLyR39frbIMi3BZbRrvLRRbyq6pBc65btbMDAstRWQ46rKeXVMv5z9AHRh1bRxhFZWji7e3Xmy3sp7035w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-multi-root@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.1.tgz#b1b80992009aa64d48ca92760d74e25c5e146b9b" - integrity sha512-Jn55iVT2sg85NSPVe/mThLoiI0FTAEH5r48MXD1MKz1E5K0FkpdLiKyCR4onfdFLozWZW2NvU0faCkyI0BKaZQ== +"@ckeditor/ckeditor5-editor-multi-root@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-48.0.0.tgz#7c484e17df151b9638c0cd2c947b7abe6d2a3ede" + integrity sha512-6I20v8RhznnSSinNq4vEO1/T+PGslCvnJXhzJDdNWJKB1szF7pfCStpEFNCR43q/n78tBQS8a5cPr5ZFXeQOeQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-emoji@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.1.tgz#196b45d7458482466e2b7eaea8da4740256d07e9" - integrity sha512-bnnnvRk/eYrvKLLQpJrjSV++Abpm1/8N31BNVaZyeHzaI0pddE6ikS44Ju82u7BQJaqSi2SO2Glx3u3C14rm2g== +"@ckeditor/ckeditor5-emoji@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-48.0.0.tgz#be7d4d88ec526139eee1a585a90fa68c5fcc796f" + integrity sha512-Ho2C+rAQwACupQH1C0tidvj3fAx9HuLBDfD1LEtHpfkQZoFanYBVFIb+9ADv4rsChe9P9dBCnqTF8RNpoafS1A== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-mention" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-mention" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.1.tgz#b3d7dd701e6facd4c47e5e21be2a75dfd59f7f6b" - integrity sha512-Xb398PRhkJqtUuQ1E1pdLXTG1REIOanr7PCIRPpWvpHAIZZAuxTIqyacZC4qVTS9xI+ObxYqosf8yNvFsEtu8w== +"@ckeditor/ckeditor5-engine@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-48.0.0.tgz#eb0c565de568c5e4030df480c374962639ff9d9a" + integrity sha512-Z/K+qz8R/pcCWFbe+w5my1hDWcfpsVmyeiWRsrecbxLBZ6o6l+04XFBFgMQpxFgHKcoqS699WnWYk+1zGZDf+w== dependencies: - "@ckeditor/ckeditor5-utils" "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-enter@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.1.tgz#09d3d20895153bf0a53e30d8155b8ad3008eb1dd" - integrity sha512-H/d5L8JmZFmb5wYDi3NT4NICYuRueGUwiPgIpaaQ0gb8U3U0YVj4J5WVF/65KGiYdsuP2NupSwRqsdl8TilrdQ== +"@ckeditor/ckeditor5-enter@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-48.0.0.tgz#6c1fb3ff0c38457a6906bb5fc5b6c2b5a1b43ef4" + integrity sha512-VPWc64iEaH2mxkpZi5j0tyJFlIPLMGuwRvhWhKyk8/W8SXt4lOHx+nmi90G9W3aPkqnLjscCuvOzfQSsl5vYeg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-essentials@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.1.tgz#6ba445f35d4ef4df33e30eb8b57a1cf096ed9ba3" - integrity sha512-4A9E9GrOudYA/eWCXE9uLqEdw7RLO/OdmeY1KWGAF6B9fubieSCF+S69M3c5hMKS6KJoNjaVJ/iR91KfIyYmtw== +"@ckeditor/ckeditor5-essentials@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-48.0.0.tgz#1f8194747e4281f53a78b7269bcf09881ba8434e" + integrity sha512-3PeYnM4oLbw5fAwsPLbMtQjxDs+hKqMwIFa8Qpk559Ldf5PPxdC1q4HNQDY6EZSjNguAzSMxqYaOlUcJC7zcHw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-select-all" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-select-all" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-undo" "48.0.0" -"@ckeditor/ckeditor5-find-and-replace@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.1.tgz#c32a58de98142047d0f27d0203d3ea56228171fa" - integrity sha512-ZbKlNpFYCP0DRICJlhyTLaRlPSwdJ5W9BBrMFjHhGsKNbFJ2KHlPCqTD6nAEWc838heDBZM21jRGTM6O92FLHA== +"@ckeditor/ckeditor5-find-and-replace@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-48.0.0.tgz#569f661fabc530c3aec4f076e36882c03afe749d" + integrity sha512-a2+sJpPh/cXfSKDSI5lLZU7QXl2fuBoVFE+J4eBct/5QuCRmNcgpsHsZ3Q6wTeeG2zPlafcWzoa6LkeDgXjsKA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-font@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.1.tgz#562403cc367fd2111605e7cedcd17ef914bf9613" - integrity sha512-ayMtG44tLbmPBjoEudnF7kFkqX3GUO0Cb1lLd6JR5B4uyoNFuQbN3nyrtx7hMvdu0N4jl0hWcWXjdu6vNL4I6g== +"@ckeditor/ckeditor5-font@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-48.0.0.tgz#489e4d46bdc9045be81460c781692b3fbc793963" + integrity sha512-V/if+TMyNb1a23LLY0NZl4a7uuHNRWGu/ZL4PYbQDk/wEJPte8Mippp00iBBsIYC/LdTavc7YiJKET14DBSFyw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-fullscreen@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.1.tgz#0b46e3cc0873b880e8027cdc9c49e9c9550caaf8" - integrity sha512-LvA7vzeAkuc/z64kuRu17zm7EIFe0Bqt9xPA5GhfR6T9mBVG4wu62ElqylFUjFJ+macvkjSe68tBYQTAPyUWqg== +"@ckeditor/ckeditor5-fullscreen@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-48.0.0.tgz#4293a98caa19581a3ae83a525e6bcea15c5ac3ac" + integrity sha512-bPf4AbQs4PC0+HAjyip07LsF8Bg8C7Rxr0j9vEw7ltwShjGknvMpBacWPPr4LVmuV++GgPh04kpRAtQVZUDgVw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-editor-classic" "47.6.1" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-editor-classic" "48.0.0" + "@ckeditor/ckeditor5-editor-decoupled" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-heading@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.1.tgz#b80bef3c6b3cec4aad48473a327fceb16f86ca92" - integrity sha512-4kVuMaaAylkxYkJ0PA4hUQCDTARoeokkqKh0dE3DwEZTvvWDZjBEAhIKaSVX116ByeGfImbLkBRAoNCljKNCHQ== +"@ckeditor/ckeditor5-heading@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-48.0.0.tgz#3c96e54d8506b4a64676d65066a0c0c6fc24b48b" + integrity sha512-/Hj1k13XyD5ABI/NIF075eccC+OEPNipEJqvdiVXIerywjIfcNIPbf/X0PQxOFixCN9CBmhCPHNF6VI/Wheeog== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-paragraph" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-paragraph" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-highlight@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.1.tgz#845676a75389129793fb57db99085f863900495d" - integrity sha512-hEIAZAImLAGRsz7/d+bbh3k+9s854AxuYoTmCAN2u07muYX/pmrLrLm6cZcazjmi9J/Bow6sP/D5GeoYMWKkLA== +"@ckeditor/ckeditor5-highlight@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-48.0.0.tgz#dd134b831497b82b505f141fde4337def10a7168" + integrity sha512-1uE6dzorsJGJ1x2NsLQGhBiIeClKAjiUFSelFJRqxPzWywfY8aMjnsc3kCbTKXar8j9jNwTZrFvQdqK9jI9agQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-horizontal-line@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.1.tgz#dd4f74979cc30d3cf53f364013f1bc13f3ac8471" - integrity sha512-YTSpxdrp8NteaWARH89dA+qUWAf3agw/Q1dRQF+XdiF2kaSXRPQCXJruvmy490H+3xtwUZVs/hSlwX9gT77Skg== +"@ckeditor/ckeditor5-horizontal-line@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-48.0.0.tgz#b4c97e5f0774ae029d71f50f079f01fcb7dcf1d3" + integrity sha512-FWnU3QC5HjqNGEfC9ljtzM/qyDVvdLZtIvU2octNddoNWCXHw+IUFDxuO/M3on71Rx6ibl+GQyNgHPug7tlAkw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" -"@ckeditor/ckeditor5-html-embed@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.1.tgz#d37cedfe079def1d5b3485b683bdea488ce22fdd" - integrity sha512-z4iYN6Il/PqpOBm+7OYM1mpXLUCbA7cMjq3MGIAwGwRHNFq8BWq/1by3P8FiF4ozaUyj8YgXXyWoggBC2qQRig== +"@ckeditor/ckeditor5-html-embed@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-48.0.0.tgz#8b369a62ecdb8d96bef6f8f7479bb1064f05609c" + integrity sha512-7FNfPCR8O3mhEY4NpdaVpA1NLWd76WLnHmDUbFSRZLE+tulXxXWmV3oe3TWrfoFaILLKHYLFwL063mM81dPd8w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" -"@ckeditor/ckeditor5-html-support@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.1.tgz#2d86875f247392efeaac05f1f3de392bd77a627f" - integrity sha512-F25LY88VYx0gZTrrThmt+kqF2thrwg52ZCIQeRujMd3RIueYEAEn7ZJ0p5iArDvm9qQXtLzsaijEyZr2edstPA== +"@ckeditor/ckeditor5-html-support@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-48.0.0.tgz#a4dcdd504102e65832b8c27a8ef29b0f4de6fe83" + integrity sha512-ahnXoBcbdNDBkwhJQmx2WRWOq0t0EJBbSFEamUxAlyVVVctASWGAKl1qlQ3JmXbnJYrfBt4dM4ECAOYxCbB+hw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-remove-format" "47.6.1" - "@ckeditor/ckeditor5-table" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-heading" "48.0.0" + "@ckeditor/ckeditor5-image" "48.0.0" + "@ckeditor/ckeditor5-list" "48.0.0" + "@ckeditor/ckeditor5-remove-format" "48.0.0" + "@ckeditor/ckeditor5-table" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-icons@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.1.tgz#076aa5bc4ae1d2939a7802155cd5e852387d9bc2" - integrity sha512-OEk5hPdMpE5/Cb2lZFtJL2XyMwy/S8xQzuAk2b2P2bJx33rJgU3pk9RUrayxCSa3p+tKqibOzm5GcshLJ7s7Tg== +"@ckeditor/ckeditor5-icons@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-48.0.0.tgz#df12ffd460552814d7a0d8d69f07b893a370152a" + integrity sha512-PWHECNrUipXbtKdN3Rvhcz8NpcsKW6Gke4U+5UFndoOBtSbgxooZMoovlo1nN3PmQ9aKbEF1owf3Pa+oeG32rA== -"@ckeditor/ckeditor5-image@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.1.tgz#9824abdbb553a6e47215090e2f58be90649872b1" - integrity sha512-yy7b/7WQqN0c7/VC1Ng5svQU1btXWauBfQjFgVV3AzGa+nVeJ1ZIcV2fAkUa6mB+lCu+5ziv7b7ord22baJYzg== +"@ckeditor/ckeditor5-image@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-48.0.0.tgz#31f928e75290a233a82b9b1f33ca1ce7c0f35960" + integrity sha512-0MT8PIcUQgo9vj7PRNpClAdZ6rjqdCz2egk4ktgh+AoYIFOVh/znzBAiLcJghsoCjZLGI8REzu3dwQ0ynJsGVg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-undo" "48.0.0" + "@ckeditor/ckeditor5-upload" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-indent@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.1.tgz#95c00461942c7336de8c876e242bbd94236c0283" - integrity sha512-SaokgxUJevRrYfu5PKEMvVrUliybmxpb3Cx/f/JtOnPbyJSFrt05+/mt3XsqsSB0g8LaHH2PXQfD4vncGzE6DQ== +"@ckeditor/ckeditor5-indent@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-48.0.0.tgz#285f86311969edcf85a4b6dd5fbe97c165181ef2" + integrity sha512-TCyJtxBJPHMN6Q2zMfZXe2bzS95SChTIcVWOxG3KL5kOtn5AsC+gU4K5t+SM1ITVhQYYpBI9elUMy12h93PceA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-heading" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-list" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-language@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.1.tgz#6a15c81c08a2487db8f86943645b24b3ccbc8aea" - integrity sha512-YZpySDIa4Y40T9wwKIFsAlDujELkgUtoKw/+4Wl8BHlDnq/40VxXFbOSSXu4TnnVeqVFcnzTjp6Zv8CHtmY3yw== +"@ckeditor/ckeditor5-language@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-48.0.0.tgz#7adcc244c887fa29f93fc8ced8305a858520624b" + integrity sha512-56iohiWWwrO23YY3chD9GbqKGgmm0g579OaSpz/zNtcSEpH3RJTdsliFyyv+bPQMbPYOmJiHKkj9eWVucHI4gw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-link@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.1.tgz#f541baad9e44cc95b97e9ac5c97f7cb5fe145f8e" - integrity sha512-A/gjF7e00R/ESUotqR08EeGM91V031DiHiGwYn7b+iZ1bejsdEu3yQK707bZ4U6ByEYBUOMtq1bOMYUtGJl6EA== +"@ckeditor/ckeditor5-link@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-48.0.0.tgz#570908131e04462751e2dba91e45de4997f6f10b" + integrity sha512-j1vu9R+cPD7cY4oD6oN+sgUTFRTvH7+JFaqU0DoIiyKBq/g3RlufZfASpJ7DlonqfniFxC/7aBuz0taWBsViug== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-image" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-list@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.1.tgz#fccef28ae23a39ab1b04c58fffa7fd9e04ee9c3d" - integrity sha512-k7lXRJpZ8vkMQy0EWoYD8U6rQqYuKEbrTshlIjZSuBOQ9qlAb9llJ80OO0gteYZBOCMde1BJGjCeVxSNAI6eFA== +"@ckeditor/ckeditor5-list@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-48.0.0.tgz#4aa71b06e09f5a2be74586730c90cc2a5b5f142d" + integrity sha512-PeRDmPvs20p40l43wMBtbPd7H/E8XGAjIPOOccSp4DHA+Vx6YvtFws1OTJhdEWaTjfa1BdF7UXPj5MdTkcuVEw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-font" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-font" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-markdown-gfm@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.1.tgz#c6a150198f9285dd8f88155ec098166cfdf0c17e" - integrity sha512-bt4UsDKTmq5iyu5TkmxpC/Z5zZEsw8bcCr5egjgNtV5ozJF1E+54iQBjKIYNYIWRdD0PAEEGFE15QoWzSHBtxw== +"@ckeditor/ckeditor5-markdown-gfm@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-48.0.0.tgz#efcf3839e7908db3a7905b8a5292795ba27c3b08" + integrity sha512-DNae4xYkZCe3f51HFYNkJZPNj2lJB6H3WwHFHb+3wqT0NrVcKd31eqqt2G4sJjpzcSeKSGIPaX46OrtZujDTLQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" "@types/hast" "3.0.4" - ckeditor5 "47.6.1" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1362,272 +1356,259 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.1.tgz#d331856917347f4e49209469f7f84fbb5328d1ef" - integrity sha512-G18SeOxXVy+k0SQYHkw1HQtS6/PkqpX2Mv6zM7os9aG3OpPmX8tCqDK+X7TaMx3FRJlDV0ujOy5Qfs71SJrqKA== +"@ckeditor/ckeditor5-media-embed@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-48.0.0.tgz#9013f90138e1aeace34335f9c165e42afc66840d" + integrity sha512-be/4of06/oqOeYUUHSB8pECLHYR+2maizqPofmFuyIoXJ73gu19qMQgougjdOY6bFpTuu8rNsePZCkIJhSem/w== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-undo" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" -"@ckeditor/ckeditor5-mention@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.1.tgz#f678033198144b7bdc92f416d5ef8fa639bd6b20" - integrity sha512-/53LFzYqcgvd8pL02XlNBduucfnakDVvY86vC02spDuTsUH5qUMqLaz2FHSo9AH2y3kNVp98KDnqI/QjNZCd+Q== +"@ckeditor/ckeditor5-mention@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-48.0.0.tgz#802f59f32b4227ba25c2a22994b6a040af1fc9b1" + integrity sha512-ocRNslENNnLkvwrwjl4M9ikQFO4/ih8TyFBnbjieUfYhVHO2TrOgCMwR/3U8sSZ4IQaqnq/B1Hb9kUJKsvfhBQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-minimap@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.1.tgz#1805a4be3eaec417880a0e37363cb7b2325e6e68" - integrity sha512-ksKOy4wxzs3pkhfzVtnnsu5rgJxqYHMKM7X8Rkhx9BSshcKFeuNIUVsSh+7QWDQStWKSZ/qAx+0rezdJCm6gvQ== +"@ckeditor/ckeditor5-minimap@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-48.0.0.tgz#2c597445c9ca94924e1bd5643d76ceb1075326c5" + integrity sha512-0nlr9Y/x2XN9zEJ5AcuzxAUTUXzy+oiJA46kw6ENEqg1KmenmuXVtzlyuIVyfN2TagyWXoz7k9slxereO6lxsQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-page-break@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.1.tgz#c9f2d30a6bf1071c22bd65bbb553ce652f4945e8" - integrity sha512-KBE1tLsnyIsh0v+S6p0G+WglkvfWvKCkOESmap+gct5xwmOE0HEgRVp6xFFBfHYuGSjSISvgUU4ofdnhseZivA== +"@ckeditor/ckeditor5-page-break@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-48.0.0.tgz#7432f8a35cfd7c55189bb1c502d5419d3e5c3f73" + integrity sha512-eiCPti0A2xk0EpGXe+/lBZFhY+8UNMMA6ZUufjPwcZNIwVwzuQOJRKQwyqMdvmNz4Xjz42Vk+3RRcJQUy4QJsw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" -"@ckeditor/ckeditor5-paragraph@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.1.tgz#943629d7de22d7cf272a6744fb96947c6c071ac7" - integrity sha512-6FXs94lSb6n7V7Puwp1c9BMyjycOfsAjdPRSVGTx1THqQBziQZHuZeU9LBxJZBA1mzoQOfmFaC3v+wb8odBgAQ== +"@ckeditor/ckeditor5-paragraph@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-48.0.0.tgz#208688e6b06eea663ed706af3eacda4ad2349d95" + integrity sha512-LPHDgn878ypHJ0e2n4xsqj4eIJpo53KrliKBDKhZGNMpFD7vOXNPxiXAAGOq0EtxUbSRtCTeymJTuW3q1oYOQw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-paste-from-office@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.1.tgz#63c514fcbf6d4b576b9cb627b6031f4f8864f0d1" - integrity sha512-Lt/V8/q59WuPURpwS9Z1UWUU1q5fF7YUbDAapWatzJlK9J/c969nRMG2aXm3z+BjXv3Kdu9qs4Oqngw0sJ0KiA== +"@ckeditor/ckeditor5-paste-from-office@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-48.0.0.tgz#805fdf05e3f2339231fc81ba2f526d4b776c9c8a" + integrity sha512-7fj6hqWScR9w/cfmGrnNNxWkYIWTR5ffqM0zmw+HR0DpItRjLCVBrRUp0oqmLs6CFqq2TY3rerFy/NjYaJkvuA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" -"@ckeditor/ckeditor5-remove-format@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.1.tgz#96bdb0c0657cf85464970e8aa17924d6cf9b3a3f" - integrity sha512-2lQvT4+OVIFQs67yKh54exnT5UV1rPjEZX7MqyhZ3Dr0rzyEW7b9tpFz7bP/EUOSa2LpFktNoLFOSnIAZnQdyQ== +"@ckeditor/ckeditor5-remove-format@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-48.0.0.tgz#1acb382be0c41e836c2f8ac556a1f2900d109706" + integrity sha512-Xwrh114VUIhAY2FP20TLVYwFvdFgDNmpigYj3Ev9SLhVSQQimckhIxYZxXYhSlDjG6+bYiEa1NSl7BUQtG7IuA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-restricted-editing@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.1.tgz#9308ae80f8740d9b9df662c51b47a0140757439a" - integrity sha512-ufWtexBPqBxJNNjjIw9XQe8Q+cnwLV4en6PTvdBX/zXHq87QdjpFk6NRSLCgDTpNmO2GiXnl+FsqUjGJF27zDQ== +"@ckeditor/ckeditor5-restricted-editing@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-48.0.0.tgz#e99723ae331bc63d72d849f2ee853cd15eb82805" + integrity sha512-GIxCV9yyuOCP93nkndmyf11Vuqp352w1ErtZd6YxcX0+JDERTmCzAMbEQsPHsf6jKHikg5ei/FTjFl8YVs38Ag== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-select-all@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.1.tgz#ecbe703910721ccfc526ed3a535c8c784a52f798" - integrity sha512-NKhujjJ04UdM/pObi45+q6Em0fD6pQ1m+g5qLgTsTyoFUq2rFhMZqeRSPGEXlfuR5dImA7hP8uQtXNtt/GpZ7g== +"@ckeditor/ckeditor5-select-all@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-48.0.0.tgz#31911f1c05f31a3a2c0f9cded5e2c829de6dd558" + integrity sha512-YnhvKuoetfulualgCphPKrY9DIg8ZDa5+P8Dh2lmWt0bOSDBZ4yKoLLxTccUOweRQFnYP0vRCc/YDnKGh2nhhA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-show-blocks@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.1.tgz#66b10152e8b205b91eb97bea598369536c5296c7" - integrity sha512-9MdxI7TjccCOcbdlzX+SBjFvt8CsdxCgyoJxZ2NYut6QJAJ6WPjH0yVxckZXC3LSkqIPzrIOJxHc7e2n+oFFvA== +"@ckeditor/ckeditor5-show-blocks@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-48.0.0.tgz#029edfab621220acfe754e9b2c6918ec421035e5" + integrity sha512-lCtp5nF9hReBV/8QASM4seTylA58FBceL2wvwEfAocptzI7rS398nX4cBwrSbFzpE55KE225/m4L6P/4RtA/wA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-source-editing@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.1.tgz#041d16a8dfca9069ed0ddfe2b92f69f98f965003" - integrity sha512-/NeN6KvgdlvmBzOGH1Uxk26zGti8HvvmBbHLOCzFqfXZRLHB+47BG+GtzOa82t6YnLjK7pvR23opyAApRf6zIA== +"@ckeditor/ckeditor5-source-editing@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-48.0.0.tgz#0b9ebf10e324a2e741a24f7266a166f7d94e6599" + integrity sha512-H4sNbAX+kFz1W9L860uZuZFCBxDfCodpUUk1ocoaPZcm42X2Oo8F2HlH0DWX2VJ+Fgsu9OAO25818EPOCaU7RA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-theme-lark" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-special-characters@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.1.tgz#9f89ec11f7cf1e558b4031646d6fc352be1292bb" - integrity sha512-O+WRAaDh3m/i3lWF+MaB0G++nBusB/uaB+koN+gwqiIfDHpGJ9HKr+KXrMZZYb0MjiGV0J5gswuwL+YvzNZ6rg== +"@ckeditor/ckeditor5-special-characters@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-48.0.0.tgz#e880052f608db77be075c205581ed2234f3f28e0" + integrity sha512-sfbRkC4syER66Pr3E9WIcgSaOIS8ZX7MkronAthP3lVHI5jBkyyJduOgPyvC6f8fcTd/Dclr5Bs8sqZUzGEG1A== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-style@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.1.tgz#b1271c0b639a5c75a711950826358e407bc23245" - integrity sha512-WD9lzsgIk3sB+Ec/mpgbYIZXr8cRBOcDAjFndfjuSQMZRYM5kCMpIz0qpvjGp1Glz2bmeg7CwfuLDvbZSqZrfA== +"@ckeditor/ckeditor5-style@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-48.0.0.tgz#1f266ecc34ce647a23d5cc600437bd025d76052c" + integrity sha512-nQMrg6RwSEXz8VYT3w05CGUTZb8guhJkdwgNJVnYexQReDeJxElGBfXnjitEisd1gxaiWBMKiuqv0nKLlqyhsQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-html-support" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-table" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-html-support" "48.0.0" + "@ckeditor/ckeditor5-list" "48.0.0" + "@ckeditor/ckeditor5-table" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-table@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.1.tgz#6ec1f74b80fab7df6cae5ba5e7071bcd2afacd0c" - integrity sha512-zFJWnqL0PpdlSs8U1m5Mu/gcuoJfi0GSpDqr174dqXLtFcMfIsftVWVTbY5d4f+OKAp8LifxOg3CMvLD1YNSGA== +"@ckeditor/ckeditor5-table@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-48.0.0.tgz#137722142b114d758ccce53c0b080266fa2556d9" + integrity sha512-opm+ZRxmfEZJdVh4OZ9koTmCm7ecdTRIoYOWHwUufZyi6jIy8Ea1kCYL2s86fLHgpUHTq28yP8wI2UN4b4Riag== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-theme-lark@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.1.tgz#96076019c59ed0d0f6a05b56e4597ef136cc10b9" - integrity sha512-iaRFqt6ExGAAsOc4AfJNbMyY+jnh//gMzGendqklhQzkwV3RGzN6buRtV0Fps+pKXnpRcbqaVHWv0GOIOaG58Q== +"@ckeditor/ckeditor5-typing@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-48.0.0.tgz#0903c3e3a1ba57a33a4fe53b76341c335b5c21a1" + integrity sha512-mJogY78t6qWcTnwwHQKzkzUrRtP16E+tVnUsBlvMsn0RJzyZAORVHxSrUkNhfFTrW6TwrSYtDjBY6+I1f4m9fA== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-typing@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.1.tgz#4246eaf121ea07a491883c345c077953a2eedfb2" - integrity sha512-yuMJCK6+KpYyXHxkBKRtVuOF1L42eyhUlCCq4sNFHjoJfD3q3gunmesoGIkdezMZR5RpqpGSfrOapEG9orOBTg== +"@ckeditor/ckeditor5-ui@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-48.0.0.tgz#d784602b1b738a565f2dcd7a771632c14bb09e4a" + integrity sha512-CzjQPUj4W8BEscJwCfm9iwLMTyBwIiT0KXF4RbTqZ4YgDJhurCquYF1JOfttGBYYlX1qdXmuMMTbDF8mYH1pWA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - es-toolkit "1.39.5" - -"@ckeditor/ckeditor5-ui@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.1.tgz#d2f2f7aaf439cb04027b2c91a083546bd81483e4" - integrity sha512-zBEfMSpR26rVPvc9X4KXxQd0wQG42EM+37VHdrfwJL47PFlqXTGlbsZ9BBjlElNM1mpViWSW9zpt5JdE6vtHCQ== - dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-editor-multi-root" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" "@types/color-convert" "2.0.4" color-convert "3.1.0" color-parse "2.0.2" - es-toolkit "1.39.5" + es-toolkit "1.45.1" vanilla-colorful "0.7.2" -"@ckeditor/ckeditor5-undo@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.1.tgz#83d13e705bacfc3140a1ccf53fe7fac46e5ad9dd" - integrity sha512-kxckLxZHglOTv0yd7cROpZAgOQFR7uJEKy+ehGaPrPy5eMrIhUqHcDWHv4sLNJfNg1IgQrsqYNHeIaTzT38RvQ== +"@ckeditor/ckeditor5-undo@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-48.0.0.tgz#76f94da618ef72ffd3aae2161c40dc0a46a76af8" + integrity sha512-DQTi8si89EQSWwAqGwOGEdt9jm3u0RQME9RknSHw/AylNutlEg6BykvVRA5fWi3cXPv/agKZjdohFGJ1ZOQALA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-upload@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.1.tgz#64c7fcf731c87bb9fc2a44f5ad8e45ae0a6f507d" - integrity sha512-GFMKl6pct+r26EQ4K2D22xokyDQIoRYQZSZFoPl4L04FFPVRuG60pA1YSNtyi7Am+T1fR3qOVBHAuXsANyeL6g== +"@ckeditor/ckeditor5-upload@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-48.0.0.tgz#b5ea925d5c312c9aead1ce8af9cc68867c0159b5" + integrity sha512-S0tOjeX6jJ7RspT0UXuxmXa/xZPQvTP0G5qQXeWPeNhaTazz8BQeZC8xzGhqLywClvFEKuBY+3fQaNz5nkijVw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" -"@ckeditor/ckeditor5-utils@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.1.tgz#6ef2d87fc795dc70802bb9c0a6dc5938193e4192" - integrity sha512-gJl5DikvPjMEsv9DZmEVv6GOZEjHQN3kgaxvaAYpfg4VcT1RENHw46BfvPN/zUHsYwZlh7DxG3+o7h3M8Pzj1w== +"@ckeditor/ckeditor5-utils@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-48.0.0.tgz#fefa1d7045ac34f67fe0ddf68e54f0b1f90aa837" + integrity sha512-EXPeI4uc3aizehvfgxnc9Ryt0qa1xvoow0BJ+T97ijOQ2XL+gaA5+NGvnIBiYshXQFtrYHW1zJ62Q8yWGUx7Wg== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-ui" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-watchdog@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.1.tgz#fe36e3150595c3efd25d41c554de3db08dc59717" - integrity sha512-mHum5WRT5PKiL80UwNMXiw//s1486smeCO2sgYJKZGrqlz7cSSHDOc8iUi8Cn2YuHvTfjgRjgcZxn0u9uhr1Mw== +"@ckeditor/ckeditor5-watchdog@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-48.0.0.tgz#6cd1c01c3631ac67cb29af03f968d06e2632f6a2" + integrity sha512-CE+y4am+dkfbb6zePcy5mxIGdcaJgOD09VLBOWDTQGlM6Lw48kQ9FDzp7y0L6tEaJYLjcuG16kNyEKFAOFK81w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-widget@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.1.tgz#6f1fb87891e825a849cb7c79cf9265bfe0f68403" - integrity sha512-rURYZlY9w+qjumkQ+VQ1cO32JJbuxuGoWIPj2lTC3uFjn6kDzYB9KvNItOykBJM/V11R7sEEOWvpKlnsMmlnzg== +"@ckeditor/ckeditor5-widget@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-48.0.0.tgz#860d28512cd3ece20ed7ceba9432a87db82c2061" + integrity sha512-10d4WNxTApQVTFrBV0PIVsctr5KUUuAkbZPj+30TLlptJCAx8vK0P0BG/UjtNWWNNUAoKzJ9dQD4gvzXnvte0Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-word-count@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.1.tgz#dd494e1529897e5ad6247abc06d07ceb2f38d8c0" - integrity sha512-q/8jRqtEFQ5SQEY8GsJBtatD7OdQT2f1o7KdKVDcZ4UZTQCo2hi9d2zvHEkQ7drA0LO+D3WJrHNEd+B6wk1slg== +"@ckeditor/ckeditor5-word-count@48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-48.0.0.tgz#db63502f2d45761ee5d15fe866b4e1ab4d490342" + integrity sha512-NfEGWQmRia5TmGmz/LfDLSCazvsb0LydJOQAa5tGbX9OVDiiWX9/CSTPS8tGV9s15rAKExd1WAp/kJURFKt4BQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + es-toolkit "1.45.1" "@colordx/core@^5.0.0": version "5.0.3" @@ -1654,115 +1635,135 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== +"@esbuild/aix-ppc64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz#82b74f92aa78d720b714162939fb248c90addf53" + integrity sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg== -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== +"@esbuild/android-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz#f78cb8a3121fc205a53285adb24972db385d185d" + integrity sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ== -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== +"@esbuild/android-arm@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.7.tgz#593e10a1450bbfcac6cb321f61f468453bac209d" + integrity sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ== -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== +"@esbuild/android-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.7.tgz#453143d073326033d2d22caf9e48de4bae274b07" + integrity sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg== -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== +"@esbuild/darwin-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz#6f23000fb9b40b7e04b7d0606c0693bd0632f322" + integrity sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw== -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== +"@esbuild/darwin-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz#27393dd18bb1263c663979c5f1576e00c2d024be" + integrity sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ== -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== +"@esbuild/freebsd-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz#22e4638fa502d1c0027077324c97640e3adf3a62" + integrity sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w== -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== +"@esbuild/freebsd-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz#9224b8e4fea924ce2194e3efc3e9aebf822192d6" + integrity sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ== -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== +"@esbuild/linux-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz#4f5d1c27527d817b35684ae21419e57c2bda0966" + integrity sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A== -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== +"@esbuild/linux-arm@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz#b9e9d070c8c1c0449cf12b20eac37d70a4595921" + integrity sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA== -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== +"@esbuild/linux-ia32@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz#3f80fb696aa96051a94047f35c85b08b21c36f9e" + integrity sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg== -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== +"@esbuild/linux-loong64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz#9be1f2c28210b13ebb4156221bba356fe1675205" + integrity sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q== -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== +"@esbuild/linux-mips64el@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz#4ab5ee67a3dfcbcb5e8fd7883dae6e735b1163b8" + integrity sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw== -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== +"@esbuild/linux-ppc64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz#dac78c689f6499459c4321e5c15032c12307e7ea" + integrity sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ== -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== +"@esbuild/linux-riscv64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz#050f7d3b355c3a98308e935bc4d6325da91b0027" + integrity sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ== -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== +"@esbuild/linux-s390x@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz#d61f715ce61d43fe5844ad0d8f463f88cbe4fef6" + integrity sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw== -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== +"@esbuild/linux-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz#ca8e1aa478fc8209257bf3ac8f79c4dc2982f32a" + integrity sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA== -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== +"@esbuild/netbsd-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz#1650f2c1b948deeb3ef948f2fc30614723c09690" + integrity sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w== -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== +"@esbuild/netbsd-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz#65772ab342c4b3319bf0705a211050aac1b6e320" + integrity sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw== -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== +"@esbuild/openbsd-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz#37ed7cfa66549d7955852fce37d0c3de4e715ea1" + integrity sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A== -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== +"@esbuild/openbsd-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz#01bf3d385855ef50cb33db7c4b52f957c34cd179" + integrity sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg== -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== +"@esbuild/openharmony-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz#6c1f94b34086599aabda4eac8f638294b9877410" + integrity sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw== + +"@esbuild/sunos-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz#4b0dd17ae0a6941d2d0fd35a906392517071a90d" + integrity sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA== + +"@esbuild/win32-arm64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz#34193ab5565d6ff68ca928ac04be75102ccb2e77" + integrity sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA== + +"@esbuild/win32-ia32@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz#eb67f0e4482515d8c1894ede631c327a4da9fc4d" + integrity sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw== + +"@esbuild/win32-x64@0.27.7": + version "0.27.7" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz#8fe30b3088b89b4873c3a6cc87597ae3920c0a8b" + integrity sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg== "@foliojs-fork/fontkit@^1.9.2": version "1.9.2" @@ -1848,10 +1849,10 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d" integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg== -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@gar/promise-retry@^1.0.0", "@gar/promise-retry@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@gar/promise-retry/-/promise-retry-1.0.3.tgz#65e726428e794bc4453948e0a41e6de4215ce8b0" + integrity sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA== "@hotwired/stimulus-webpack-helpers@^1.0.1": version "1.0.1" @@ -1868,6 +1869,30 @@ resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.23.tgz#a6eebc9ab4a5faadae265a4cbec8cfcb5731e77c" integrity sha512-GZ7cijxEZ6Ig71u7rD6LHaRv/wcE/hNsc+nEfiWOkLNqUgLOwo5MNGWOy5ZV9ZUDSiQx1no7YxjTNnT4O6//cQ== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/cliui@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" + integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + "@jbtronics/bs-treeview@^1.0.1": version "1.0.7" resolved "https://registry.yarnpkg.com/@jbtronics/bs-treeview/-/bs-treeview-1.0.7.tgz#42a5ea40ce1bfe6cffbc1b811dc4e32dd8d0273a" @@ -1943,6 +1968,18 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" + integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1964,21 +2001,86 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== +"@npmcli/agent@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-4.0.0.tgz#2bb2b1c0a170940511554a7986ae2a8be9fedcce" + integrity sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^11.2.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/fs@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-5.0.0.tgz#674619771907342b3d1ac197aaf1deeb657e3539" + integrity sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og== dependencies: - "@gar/promisify" "^1.0.1" semver "^7.3.5" -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== +"@npmcli/git@^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-7.0.2.tgz#680c3271fe51401c07ee41076be678851e600ff0" + integrity sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg== dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "@gar/promise-retry" "^1.0.0" + "@npmcli/promise-spawn" "^9.0.0" + ini "^6.0.0" + lru-cache "^11.2.1" + npm-pick-manifest "^11.0.1" + proc-log "^6.0.0" + semver "^7.3.5" + which "^6.0.0" + +"@npmcli/installed-package-contents@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz#18e5070704cfe0278f9ae48038558b6efd438426" + integrity sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA== + dependencies: + npm-bundled "^5.0.0" + npm-normalize-package-bin "^5.0.0" + +"@npmcli/node-gyp@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47" + integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ== + +"@npmcli/package-json@^7.0.0": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.5.tgz#e29481dfc586d1625a6553799e6bec52ae0487a5" + integrity sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ== + dependencies: + "@npmcli/git" "^7.0.0" + glob "^13.0.0" + hosted-git-info "^9.0.0" + json-parse-even-better-errors "^5.0.0" + proc-log "^6.0.0" + semver "^7.5.3" + spdx-expression-parse "^4.0.0" + +"@npmcli/promise-spawn@^9.0.0": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz#20e80cbdd2f24ad263a15de3ebbb1673cb82005b" + integrity sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q== + dependencies: + which "^6.0.0" + +"@npmcli/redact@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-4.0.0.tgz#c91121e02b7559a997614a2c1057cd7fc67608c4" + integrity sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q== + +"@npmcli/run-script@^10.0.0": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.4.tgz#99cddae483ce3dbf1a10f5683a4e6aaa02345ac0" + integrity sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg== + dependencies: + "@npmcli/node-gyp" "^5.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/promise-spawn" "^9.0.0" + node-gyp "^12.1.0" + proc-log "^6.0.0" "@nuxt/friendly-errors-webpack-plugin@^2.5.1": version "2.6.0" @@ -2009,6 +2111,11 @@ dependencies: barcode-detector "^3.0.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" @@ -2019,6 +2126,52 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== +"@sigstore/bundle@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83" + integrity sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A== + dependencies: + "@sigstore/protobuf-specs" "^0.5.0" + +"@sigstore/core@^3.1.0", "@sigstore/core@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.2.0.tgz#beaea6ea4d7d4caadadb7453168e35636b78830e" + integrity sha512-kxHrDQ9YgfrWUSXU0cjsQGv8JykOFZQ9ErNKbFPWzk3Hgpwu8x2hHrQ9IdA8yl+j9RTLTC3sAF3Tdq1IQCP4oA== + +"@sigstore/protobuf-specs@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz#e5f029edcb3a4329853a09b603011e61043eb005" + integrity sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA== + +"@sigstore/sign@^4.1.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.1.1.tgz#34765fe4a190d693340c0771a3d150a397bcfc55" + integrity sha512-Hf4xglukg0XXQ2RiD5vSoLjdPe8OBUPA8XeVjUObheuDcWdYWrnH/BNmxZCzkAy68MzmNCxXLeurJvs6hcP2OQ== + dependencies: + "@gar/promise-retry" "^1.0.2" + "@sigstore/bundle" "^4.0.0" + "@sigstore/core" "^3.2.0" + "@sigstore/protobuf-specs" "^0.5.0" + make-fetch-happen "^15.0.4" + proc-log "^6.1.0" + +"@sigstore/tuf@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.2.tgz#7d2fa2abcd5afa5baf752671d14a1c6ed0ed3196" + integrity sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ== + dependencies: + "@sigstore/protobuf-specs" "^0.5.0" + tuf-js "^4.1.0" + +"@sigstore/verify@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.1.0.tgz#4046d4186421db779501fe87fa5acaa5d4d21b08" + integrity sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag== + dependencies: + "@sigstore/bundle" "^4.0.0" + "@sigstore/core" "^3.1.0" + "@sigstore/protobuf-specs" "^0.5.0" + "@sinclair/typebox@^0.34.0": version "0.34.49" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.49.tgz#4f1369234f2ecf693866476c3b2e1b54d2a9d68e" @@ -2062,6 +2215,19 @@ webpack-manifest-plugin "^5.0.1" yargs-parser "^21.0.0" +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.1.0.tgz#494b39cf5e2f6855d80031246dd236d8086069b3" + integrity sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^10.1.1" + "@types/color-convert@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.4.tgz#843398ae71e951dc5415d202dfd5e43108823eeb" @@ -2107,14 +2273,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - "@types/hast@3.0.4", "@types/hast@^3.0.0": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" @@ -2153,13 +2311,6 @@ dependencies: "@types/unist" "*" -"@types/minimatch@*": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" - integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== - dependencies: - minimatch "*" - "@types/ms@*": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" @@ -2172,10 +2323,19 @@ dependencies: undici-types "~7.18.0" -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== +"@types/postcss-import@^14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@types/postcss-import/-/postcss-import-14.0.3.tgz#149236eeb5c87d5b576df5f335faa1fe49f33e5a" + integrity sha512-raZhRVTf6Vw5+QbmQ7LOHSDML71A5rj4+EqDzAbrZPfxfoGzFxMHRCq16VlddGIZpHELw0BG4G0YE2ANkdZiIQ== + dependencies: + postcss "^8.0.0" + +"@types/through2@^2.0.41": + version "2.0.41" + resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.41.tgz#3e5e1720d71ffdfa03c22f2aad6593d12a47034f" + integrity sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ== + dependencies: + "@types/node" "*" "@types/trusted-types@^2.0.7": version "2.0.7" @@ -2387,6 +2547,11 @@ resolved "https://registry.yarnpkg.com/@zxcvbn-ts/language-ja/-/language-ja-3.0.2.tgz#299bb6f5465f99405577491b1b31352058540c76" integrity sha512-YjQyt+eMe3EdpeJiSt81AMF8HfEXXCary/VRoG+0erZBzRjfJ1U3JdSiu9wFFxiEF8Cb5FEmTQ6nQPyraezH6Q== +abbrev@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-4.0.0.tgz#ec933f0e27b6cd60e89b5c6b2a304af42209bb05" + integrity sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA== + acorn-import-phases@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" @@ -2412,13 +2577,10 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== ajv-formats@^2.1.1: version "2.1.1" @@ -2459,113 +2621,46 @@ ajv@^8.0.0, ajv@^8.9.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -anymatch@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.reduce@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" - integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - is-string "^1.1.1" - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - -async-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" - integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== attr-accept@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -"babel-loader@^9.1.3 || ^10.0.0": +babel-loader@^10.0.0, "babel-loader@^9.1.3 || ^10.0.0": version "10.1.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.1.1.tgz#ce9748e85b7071eb88006e3cfa9e6cf14eeb97c5" integrity sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg== @@ -2638,11 +2733,6 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - blurhash@2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-2.0.5.tgz#efde729fc14a2f03571a6aa91b49cba80d1abe4b" @@ -2668,13 +2758,12 @@ bootswatch@^5.1.3: resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-5.3.8.tgz#534538ce50285e52cb715823f8b4d734f73956e7" integrity sha512-88mnH9tv+x6DV+scBxYFOpM4YSDVhyfEgbhqaEfvkHNctKI9qRcACxIP9nmBZ5mSeLXtsgax1VsRkUs1eWjlAQ== -brace-expansion@^1.1.7: - version "1.1.13" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6" - integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w== +brace-expansion@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" + integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== dependencies: balanced-match "^1.0.0" - concat-map "0.0.1" brace-expansion@^5.0.5: version "5.0.5" @@ -2683,7 +2772,7 @@ brace-expansion@^5.0.5: dependencies: balanced-match "^4.0.2" -braces@^3.0.3, braces@~3.0.2: +braces@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -2697,12 +2786,12 @@ brotli@^1.2.0: dependencies: base64-js "^1.1.2" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.28.1: version "4.28.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== @@ -2723,29 +2812,21 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -cacache@^15.0.5: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +cacache@^20.0.0, cacache@^20.0.1: + version "20.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-20.0.4.tgz#9b547dc3db0c1f87cba6dbbff91fb17181b4bbb1" + integrity sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA== dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" + "@npmcli/fs" "^5.0.0" + fs-minipass "^3.0.0" + glob "^13.0.0" + lru-cache "^11.1.0" + minipass "^7.0.3" + minipass-collect "^2.0.1" minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" + minipass-pipeline "^1.2.4" + p-map "^7.0.2" + ssri "^13.0.0" call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" @@ -2765,7 +2846,7 @@ call-bind@^1.0.7, call-bind@^1.0.8: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: +call-bound@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -2783,10 +2864,10 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-api@^3.0.0: version "3.0.0" @@ -2817,15 +2898,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2833,6 +2906,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + character-entities-html4@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" @@ -2848,25 +2926,17 @@ character-entities@^2.0.0: resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== +chokidar@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" + readdirp "^4.0.1" -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== chrome-trace-event@^1.0.2: version "1.0.4" @@ -2878,89 +2948,83 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@47.6.1, ckeditor5@^47.0.0: - version "47.6.1" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.1.tgz#b4d37c5d9695b83b6267197ec30d9435390f9a5c" - integrity sha512-Za7+Dyju3RgfH4TF+zam7lvfOSr+Rd+0tABfR16HEtsARRPEmNBHYgS5nM3PZtNK4+ScliL6Ch3GFk7cd/TiOw== +ckeditor5@^48.0.0: + version "48.0.0" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-48.0.0.tgz#4df45899ecc22fe4160833ca76e97c805eaf1503" + integrity sha512-DALFz+yuNaZTqguQHNRrlordhnlpuUfuhg4Juqm1KR1p6+ZvD7+mvpdTyh9L3Rg2FxE2+U+Ote7wV4kjN7g0MQ== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.1" - "@ckeditor/ckeditor5-alignment" "47.6.1" - "@ckeditor/ckeditor5-autoformat" "47.6.1" - "@ckeditor/ckeditor5-autosave" "47.6.1" - "@ckeditor/ckeditor5-basic-styles" "47.6.1" - "@ckeditor/ckeditor5-block-quote" "47.6.1" - "@ckeditor/ckeditor5-bookmark" "47.6.1" - "@ckeditor/ckeditor5-ckbox" "47.6.1" - "@ckeditor/ckeditor5-ckfinder" "47.6.1" - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-cloud-services" "47.6.1" - "@ckeditor/ckeditor5-code-block" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-easy-image" "47.6.1" - "@ckeditor/ckeditor5-editor-balloon" "47.6.1" - "@ckeditor/ckeditor5-editor-classic" "47.6.1" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" - "@ckeditor/ckeditor5-editor-inline" "47.6.1" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" - "@ckeditor/ckeditor5-emoji" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-essentials" "47.6.1" - "@ckeditor/ckeditor5-find-and-replace" "47.6.1" - "@ckeditor/ckeditor5-font" "47.6.1" - "@ckeditor/ckeditor5-fullscreen" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-highlight" "47.6.1" - "@ckeditor/ckeditor5-horizontal-line" "47.6.1" - "@ckeditor/ckeditor5-html-embed" "47.6.1" - "@ckeditor/ckeditor5-html-support" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-indent" "47.6.1" - "@ckeditor/ckeditor5-language" "47.6.1" - "@ckeditor/ckeditor5-link" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-markdown-gfm" "47.6.1" - "@ckeditor/ckeditor5-media-embed" "47.6.1" - "@ckeditor/ckeditor5-mention" "47.6.1" - "@ckeditor/ckeditor5-minimap" "47.6.1" - "@ckeditor/ckeditor5-page-break" "47.6.1" - "@ckeditor/ckeditor5-paragraph" "47.6.1" - "@ckeditor/ckeditor5-paste-from-office" "47.6.1" - "@ckeditor/ckeditor5-remove-format" "47.6.1" - "@ckeditor/ckeditor5-restricted-editing" "47.6.1" - "@ckeditor/ckeditor5-select-all" "47.6.1" - "@ckeditor/ckeditor5-show-blocks" "47.6.1" - "@ckeditor/ckeditor5-source-editing" "47.6.1" - "@ckeditor/ckeditor5-special-characters" "47.6.1" - "@ckeditor/ckeditor5-style" "47.6.1" - "@ckeditor/ckeditor5-table" "47.6.1" - "@ckeditor/ckeditor5-theme-lark" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-watchdog" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - "@ckeditor/ckeditor5-word-count" "47.6.1" + "@ckeditor/ckeditor5-adapter-ckfinder" "48.0.0" + "@ckeditor/ckeditor5-alignment" "48.0.0" + "@ckeditor/ckeditor5-autoformat" "48.0.0" + "@ckeditor/ckeditor5-autosave" "48.0.0" + "@ckeditor/ckeditor5-basic-styles" "48.0.0" + "@ckeditor/ckeditor5-block-quote" "48.0.0" + "@ckeditor/ckeditor5-bookmark" "48.0.0" + "@ckeditor/ckeditor5-ckbox" "48.0.0" + "@ckeditor/ckeditor5-ckfinder" "48.0.0" + "@ckeditor/ckeditor5-clipboard" "48.0.0" + "@ckeditor/ckeditor5-cloud-services" "48.0.0" + "@ckeditor/ckeditor5-code-block" "48.0.0" + "@ckeditor/ckeditor5-core" "48.0.0" + "@ckeditor/ckeditor5-easy-image" "48.0.0" + "@ckeditor/ckeditor5-editor-balloon" "48.0.0" + "@ckeditor/ckeditor5-editor-classic" "48.0.0" + "@ckeditor/ckeditor5-editor-decoupled" "48.0.0" + "@ckeditor/ckeditor5-editor-inline" "48.0.0" + "@ckeditor/ckeditor5-editor-multi-root" "48.0.0" + "@ckeditor/ckeditor5-emoji" "48.0.0" + "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-enter" "48.0.0" + "@ckeditor/ckeditor5-essentials" "48.0.0" + "@ckeditor/ckeditor5-find-and-replace" "48.0.0" + "@ckeditor/ckeditor5-font" "48.0.0" + "@ckeditor/ckeditor5-fullscreen" "48.0.0" + "@ckeditor/ckeditor5-heading" "48.0.0" + "@ckeditor/ckeditor5-highlight" "48.0.0" + "@ckeditor/ckeditor5-horizontal-line" "48.0.0" + "@ckeditor/ckeditor5-html-embed" "48.0.0" + "@ckeditor/ckeditor5-html-support" "48.0.0" + "@ckeditor/ckeditor5-icons" "48.0.0" + "@ckeditor/ckeditor5-image" "48.0.0" + "@ckeditor/ckeditor5-indent" "48.0.0" + "@ckeditor/ckeditor5-language" "48.0.0" + "@ckeditor/ckeditor5-link" "48.0.0" + "@ckeditor/ckeditor5-list" "48.0.0" + "@ckeditor/ckeditor5-markdown-gfm" "48.0.0" + "@ckeditor/ckeditor5-media-embed" "48.0.0" + "@ckeditor/ckeditor5-mention" "48.0.0" + "@ckeditor/ckeditor5-minimap" "48.0.0" + "@ckeditor/ckeditor5-page-break" "48.0.0" + "@ckeditor/ckeditor5-paragraph" "48.0.0" + "@ckeditor/ckeditor5-paste-from-office" "48.0.0" + "@ckeditor/ckeditor5-remove-format" "48.0.0" + "@ckeditor/ckeditor5-restricted-editing" "48.0.0" + "@ckeditor/ckeditor5-select-all" "48.0.0" + "@ckeditor/ckeditor5-show-blocks" "48.0.0" + "@ckeditor/ckeditor5-source-editing" "48.0.0" + "@ckeditor/ckeditor5-special-characters" "48.0.0" + "@ckeditor/ckeditor5-style" "48.0.0" + "@ckeditor/ckeditor5-table" "48.0.0" + "@ckeditor/ckeditor5-typing" "48.0.0" + "@ckeditor/ckeditor5-ui" "48.0.0" + "@ckeditor/ckeditor5-undo" "48.0.0" + "@ckeditor/ckeditor5-upload" "48.0.0" + "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-watchdog" "48.0.0" + "@ckeditor/ckeditor5-widget" "48.0.0" + "@ckeditor/ckeditor5-word-count" "48.0.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: - restore-cursor "^3.1.0" + restore-cursor "^5.0.0" -cli-spinners@^2.6.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== +cli-spinners@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-3.4.0.tgz#1f11f6d48c4e5bc6849fcb4efa0dc98f9e7299ea" + integrity sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw== clipboard@^2.0.4: version "2.0.11" @@ -2971,14 +3035,14 @@ clipboard@^2.0.4: select "^1.1.2" tiny-emitter "^2.0.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" clone-deep@^4.0.1: version "4.0.1" @@ -3037,11 +3101,6 @@ color-parse@2.0.2: dependencies: color-name "^2.0.0" -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - colorette@^2.0.14: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" @@ -3072,21 +3131,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - compression-webpack-plugin@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-11.1.0.tgz#ee340d2029cf99ccecdea9ad1410b377d15b48b3" @@ -3095,11 +3144,6 @@ compression-webpack-plugin@^11.1.0: schema-utils "^4.2.0" serialize-javascript "^6.0.2" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - consola@^3.2.3: version "3.4.2" resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" @@ -3132,18 +3176,17 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== +cosmiconfig@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.1.tgz#df110631a8547b5d1a98915271986f06e3011379" + integrity sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" -cross-spawn@^7.0.3: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3162,23 +3205,7 @@ css-declaration-sorter@^7.2.0: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz#acd204976d7ca5240b5579bfe6e73d4d088fd568" integrity sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA== -css-loader@^5.2.7: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -css-loader@^7.1.0: +css-loader@^7.0.0, css-loader@^7.1.0: version "7.1.4" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.4.tgz#8f6bf9f8fc8cbef7d2ef6e80acc6545eaefa90b1" integrity sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw== @@ -3226,14 +3253,6 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - css-tree@^3.0.1: version "3.2.1" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-3.2.1.tgz#86cac7011561272b30e6b1e042ba6ce047aa7518" @@ -3260,42 +3279,6 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" - integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== - dependencies: - browserslist "^4.23.0" - css-declaration-sorter "^7.2.0" - cssnano-utils "^4.0.2" - postcss-calc "^9.0.1" - postcss-colormin "^6.1.0" - postcss-convert-values "^6.1.0" - postcss-discard-comments "^6.0.2" - postcss-discard-duplicates "^6.0.3" - postcss-discard-empty "^6.0.3" - postcss-discard-overridden "^6.0.2" - postcss-merge-longhand "^6.0.5" - postcss-merge-rules "^6.1.1" - postcss-minify-font-values "^6.1.0" - postcss-minify-gradients "^6.0.3" - postcss-minify-params "^6.1.0" - postcss-minify-selectors "^6.0.4" - postcss-normalize-charset "^6.0.2" - postcss-normalize-display-values "^6.0.2" - postcss-normalize-positions "^6.0.2" - postcss-normalize-repeat-style "^6.0.2" - postcss-normalize-string "^6.0.2" - postcss-normalize-timing-functions "^6.0.2" - postcss-normalize-unicode "^6.1.0" - postcss-normalize-url "^6.0.2" - postcss-normalize-whitespace "^6.0.2" - postcss-ordered-values "^6.0.2" - postcss-reduce-initial "^6.1.0" - postcss-reduce-transforms "^6.0.2" - postcss-svgo "^6.0.3" - postcss-unique-selectors "^6.0.4" - cssnano-preset-default@^7.0.12: version "7.0.12" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.12.tgz#21e29fed4a8697952485995ffeeec20ff58945a4" @@ -3332,25 +3315,12 @@ cssnano-preset-default@^7.0.12: postcss-svgo "^7.1.1" postcss-unique-selectors "^7.0.5" -cssnano-utils@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" - integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== - cssnano-utils@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.1.tgz#f529e9aa0d7930512ca45b9e2ddb8d6b9092eb30" integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== -cssnano@^6.0.3: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" - integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== - dependencies: - cssnano-preset-default "^6.1.2" - lilconfig "^3.1.1" - -cssnano@^7.0.4: +cssnano@^7.0.0, cssnano@^7.0.4: version "7.1.4" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.4.tgz#0aa5bb3b481df024ecafd41c4388c06240bb31ec" integrity sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ== @@ -3365,33 +3335,6 @@ csso@^5.0.5: dependencies: css-tree "~2.2.0" -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - datatables.net-bs5@^2, datatables.net-bs5@^2.0.0: version "2.3.7" resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.3.7.tgz#ddef957ee23b03c2d4bc1d48735b39c6182e5d53" @@ -3492,24 +3435,17 @@ datatables.net@2.3.7, datatables.net@^2, datatables.net@^2.0.0: dependencies: jquery ">=1.7" -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.3: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decimal.js@^10.4.3: version "10.6.0" @@ -3544,7 +3480,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.2, define-properties@^1.2.1: +define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -3553,20 +3489,6 @@ define-properties@^1.1.2, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -del@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" - integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== - dependencies: - globby "^10.0.1" - graceful-fs "^4.2.2" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.1" - p-map "^3.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" @@ -3589,17 +3511,10 @@ dfa@^1.2.0: resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" +diff@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" + integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== dom-converter@^0.2.0: version "0.2.0" @@ -3670,7 +3585,7 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" -dunder-proto@^1.0.0, dunder-proto@^1.0.1: +dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -3679,21 +3594,26 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + electron-to-chromium@^1.5.328: version "1.5.331" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz#3e4e845042d517c68b3c00be5fc33204f13b2058" integrity sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3717,6 +3637,11 @@ entities@^4.2.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +env-paths@^2.2.0, env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + envinfo@^7.7.3: version "7.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" @@ -3736,71 +3661,6 @@ error-stack-parser@^2.1.4: dependencies: stackframe "^1.3.4" -es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: - version "1.24.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" - integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.3.0" - get-proto "^1.0.1" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-negative-zero "^2.0.3" - is-regex "^1.2.1" - is-set "^2.0.3" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.1" - math-intrinsics "^1.1.0" - object-inspect "^1.13.4" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.4" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - stop-iteration-iterator "^1.1.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.19" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -3823,78 +3683,68 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" +es-toolkit@1.45.1: + version "1.45.1" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.45.1.tgz#21b28b2bd43178fd4c9c937c445d5bcaccce907b" + integrity sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw== -es-to-primitive@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== +esbuild-loader@^4.0.0: + version "4.4.3" + resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-4.4.3.tgz#0d0f302e3260b2318d1256c17807dfea4bc449ed" + integrity sha512-Wpui03EzqC151xFteKlgJQhbyZl5CgnBpUHXVuao02nItULlkaTeiLdEMPTmR2zdwpEBWkXVNoT5dDOYJluUzg== dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - -es-toolkit@1.39.5: - version "1.39.5" - resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.39.5.tgz#ee2a78a66aafb76c7345af0ea8c06722c78ef1fd" - integrity sha512-z9V0qU4lx1TBXDNFWfAASWk6RNU6c6+TJBKE+FLIg8u0XJ6Yw58Hi0yX8ftEouj6p1QARRlXLFfHbIli93BdQQ== - -esbuild-loader@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-3.0.1.tgz#9871c0e8817c4c11b6249d1916832e75272e6c7e" - integrity sha512-aZfGybqTeuyCd4AsVvWOOfkhIuN+wfZFjMyh3gyQEU1Uvsl8L6vye9HqP93iRa0iTA+6Jclap514PJIC3cLnMA== - dependencies: - esbuild "^0.17.6" - get-tsconfig "^4.4.0" + esbuild "^0.27.1" + get-tsconfig "^4.10.1" loader-utils "^2.0.4" - webpack-sources "^1.4.3" + webpack-sources "^3.3.4" -esbuild@^0.17.6: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== +esbuild@^0.27.1: + version "0.27.7" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.7.tgz#bcadce22b2f3fd76f257e3a64f83a64986fea11f" + integrity sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w== optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" + "@esbuild/aix-ppc64" "0.27.7" + "@esbuild/android-arm" "0.27.7" + "@esbuild/android-arm64" "0.27.7" + "@esbuild/android-x64" "0.27.7" + "@esbuild/darwin-arm64" "0.27.7" + "@esbuild/darwin-x64" "0.27.7" + "@esbuild/freebsd-arm64" "0.27.7" + "@esbuild/freebsd-x64" "0.27.7" + "@esbuild/linux-arm" "0.27.7" + "@esbuild/linux-arm64" "0.27.7" + "@esbuild/linux-ia32" "0.27.7" + "@esbuild/linux-loong64" "0.27.7" + "@esbuild/linux-mips64el" "0.27.7" + "@esbuild/linux-ppc64" "0.27.7" + "@esbuild/linux-riscv64" "0.27.7" + "@esbuild/linux-s390x" "0.27.7" + "@esbuild/linux-x64" "0.27.7" + "@esbuild/netbsd-arm64" "0.27.7" + "@esbuild/netbsd-x64" "0.27.7" + "@esbuild/openbsd-arm64" "0.27.7" + "@esbuild/openbsd-x64" "0.27.7" + "@esbuild/openharmony-arm64" "0.27.7" + "@esbuild/sunos-x64" "0.27.7" + "@esbuild/win32-arm64" "0.27.7" + "@esbuild/win32-ia32" "0.27.7" + "@esbuild/win32-x64" "0.27.7" -escalade@^3.2.0: +escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escape-string-regexp@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" @@ -3908,11 +3758,6 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -3940,6 +3785,26 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exponential-backoff@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== + exports-loader@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-5.0.0.tgz#0e5c50baf8526237c0a2743116a3e3fa788d194f" @@ -3957,7 +3822,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3, fast-glob@^3.2.11: +fast-glob@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -3990,6 +3855,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -3997,22 +3867,6 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4029,26 +3883,20 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -for-each@^0.3.3, for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== +foreground-child@^3.1.0, foreground-child@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - is-callable "^1.2.7" + cross-spawn "^7.0.6" + signal-exit "^4.0.1" -fs-extra@^11.2.0: +fs-extra@^11.0.0: version "11.3.4" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== @@ -4057,40 +3905,18 @@ fs-extra@^11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== dependencies: - minipass "^3.0.0" + minipass "^7.0.3" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" - integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - functions-have-names "^1.2.3" - hasown "^2.0.2" - is-callable "^1.2.7" - functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -4101,22 +3927,17 @@ fuzzysort@3.1.0: resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-3.1.0.tgz#4d7832d8fa48ad381753eaa7a7aae9927bdc10a8" integrity sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ== -generator-function@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" - integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4140,16 +3961,12 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-tsconfig@^4.4.0: +get-tsconfig@^4.10.1: version "4.13.7" resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.7.tgz#b9d8b199b06033ceeea1a93df7ea5765415089bc" integrity sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q== @@ -4161,7 +3978,7 @@ github-slugger@^2.0.0: resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== -glob-parent@^5.1.2, glob-parent@~5.1.0: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4173,51 +3990,38 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@^10.4.5: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^11.0.2: + version "11.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" + integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.3.1" + jackspeak "^4.1.1" + minimatch "^10.1.1" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== +glob@^13.0.0, glob@^13.0.3: + version "13.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d" + integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" + minimatch "^10.2.2" + minipass "^7.1.3" + path-scurry "^2.0.2" good-listener@^1.2.2: version "1.2.2" @@ -4231,26 +4035,16 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4268,14 +4062,7 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - -has-symbols@^1.0.0, has-symbols@^1.0.3, has-symbols@^1.1.0: +has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== @@ -4435,11 +4222,18 @@ hastscript@9.0.1, hastscript@^9.0.0: property-information "^7.0.0" space-separated-tokens "^2.0.0" -he@1.2.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hosted-git-info@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada" + integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg== + dependencies: + lru-cache "^11.1.0" + htm@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78" @@ -4465,7 +4259,33 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -iconv-lite@^0.7.1: +http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@^0.7.1, iconv-lite@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== @@ -4477,17 +4297,19 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore@^5.1.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14" + integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A== + dependencies: + minimatch "^10.0.3" immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-fresh@^3.2.1: +import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== @@ -4503,47 +4325,15 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +ini@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30" + integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ== interpret@^3.1.1: version "3.1.1" @@ -4560,6 +4350,11 @@ intl-messageformat@^10.2.5: "@formatjs/icu-messageformat-parser" "2.11.4" tslib "^2.8.0" +ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + is-arguments@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" @@ -4568,63 +4363,11 @@ is-arguments@^1.1.1: call-bound "^1.0.2" has-tostringtag "^1.0.2" -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-async-function@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" - integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== - dependencies: - async-function "^1.0.0" - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" - integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" @@ -4632,16 +4375,7 @@ is-core-module@^2.16.1: dependencies: hasown "^2.0.2" -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.0.5, is-date-object@^1.1.0: +is-date-object@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== @@ -4659,79 +4393,38 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.10: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" - integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== - dependencies: - call-bound "^1.0.4" - generator-function "^2.0.0" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.1: +is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-obj@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" @@ -4744,7 +4437,7 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.4, is-regex@^1.2.1: +is-regex@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== @@ -4754,61 +4447,15 @@ is-regex@^1.1.4, is-regex@^1.2.1: has-tostringtag "^1.0.2" hasown "^2.0.2" -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - -is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.4, is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" - integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - dependencies: - call-bound "^1.0.3" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-wsl@^2.2.0: version "2.2.0" @@ -4817,11 +4464,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4832,15 +4474,31 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-4.0.0.tgz#48f6576af8e87a18feb796b7ed5e2e5903b43dca" + integrity sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw== + isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha512-fnjC0up+0SjEJtgmmG+teeel68kutkvzfctO/KxE3qJlbunkJYAshgH3boU++gSBHP8z5/r0ts0qRIrHf0RTQQ== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jackspeak@^4.1.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" + integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== + dependencies: + "@isaacs/cliui" "^9.0.0" jest-regex-util@30.0.1: version "30.0.1" @@ -4859,15 +4517,6 @@ jest-util@30.3.0: graceful-fs "^4.2.11" picomatch "^4.0.3" -jest-worker@^26.5.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -4888,6 +4537,11 @@ jest-worker@^30.0.5: merge-stream "^2.0.0" supports-color "^8.1.1" +jiti@^2.5.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + jpeg-exif@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" @@ -4903,13 +4557,12 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" jsesc@^3.0.2, jsesc@~3.1.0: version "3.1.0" @@ -4926,6 +4579,11 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz#93c89f529f022e5dadc233409324f0167b1e903e" + integrity sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -4950,6 +4608,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + jszip@^3.2.0: version "3.10.1" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" @@ -4972,11 +4635,6 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klona@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - lie@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" @@ -4984,7 +4642,7 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -lilconfig@^3.1.1, lilconfig@^3.1.3: +lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== @@ -5013,14 +4671,6 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -5050,23 +4700,34 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.20, lodash@^4.17.21: version "4.18.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.4.2" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" longest-streak@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1: + version "11.2.7" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.7.tgz#9127402617f34cd6767b96daee98c28e74458d35" + integrity sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5074,19 +4735,23 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.1, make-fetch-happen@^15.0.4: + version "15.0.5" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.5.tgz#b0e3dd53d487b2733e4ea232c2bebf1bd16afb03" + integrity sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg== dependencies: - yallist "^4.0.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" + "@gar/promise-retry" "^1.0.0" + "@npmcli/agent" "^4.0.0" + "@npmcli/redact" "^4.0.0" + cacache "^20.0.1" + http-cache-semantics "^4.1.1" + minipass "^7.0.2" + minipass-fetch "^5.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^1.0.0" + proc-log "^6.0.0" + ssri "^13.0.0" markdown-table@^3.0.0: version "3.0.4" @@ -5266,11 +4931,6 @@ mdn-data@2.0.28: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - mdn-data@2.27.1: version "2.27.1" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.27.1.tgz#e37b9c50880b75366c4d40ac63d9bbcacdb61f0e" @@ -5281,7 +4941,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -5584,6 +5244,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: version "2.10.2" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz#5c85ec9450c05d26e32531b465a15a08c3a57253" @@ -5592,38 +5257,37 @@ mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: schema-utils "^4.0.0" tapable "^2.2.1" -minimatch@*: +minimatch@^10.0.3, minimatch@^10.1.1, minimatch@^10.2.2: version "10.2.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== dependencies: brace-expansion "^5.0.5" -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.2" -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: - brace-expansion "^1.1.7" + minipass "^7.0.3" -minimist@^1.2.5: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +minipass-fetch@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-5.0.2.tgz#3973a605ddfd8abb865e50d6fc634853c8239729" + integrity sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ== dependencies: - minipass "^3.0.0" + minipass "^7.0.3" + minipass-sized "^2.0.0" + minizlib "^3.0.1" + optionalDependencies: + iconv-lite "^0.7.2" minipass-flush@^1.0.5: version "1.0.7" @@ -5632,86 +5296,72 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: +minipass-sized@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-2.0.0.tgz#2228ee97e3f74f6b22ba6d1319addb7621534306" + integrity sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA== + dependencies: + minipass "^7.1.2" + +minipass@^3.0.0: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2, minipass@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== +minizlib@^3.0.1, minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== dependencies: - minipass "^3.0.0" - yallist "^4.0.0" + minipass "^7.1.2" -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mocha@^11.1.0: + version "11.7.5" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.5.tgz#58f5bbfa5e0211ce7e5ee6128107cefc2515a627" + integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig== dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mocha@^7.1.2: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" + browser-stdout "^1.3.1" + chokidar "^4.0.1" + debug "^4.3.5" + diff "^7.0.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^10.4.5" + he "^1.2.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^9.0.5" + ms "^2.1.3" + picocolors "^1.1.1" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^9.2.0" + yargs "^17.7.2" + yargs-parser "^21.1.1" + yargs-unparser "^2.0.0" mrmime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1, ms@^2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5721,18 +5371,31 @@ nanoid@^3.3.11: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== +node-gyp@^12.1.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.2.0.tgz#ff73f6f509e33d8b7e768f889ffc9738ad117b07" + integrity sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ== dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + graceful-fs "^4.2.6" + make-fetch-happen "^15.0.0" + nopt "^9.0.0" + proc-log "^6.0.0" + semver "^7.3.5" + tar "^7.5.4" + tinyglobby "^0.2.12" + which "^6.0.0" node-notifier@^9.0.0: version "9.0.1" @@ -5751,10 +5414,80 @@ node-releases@^2.0.36: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.37.tgz#9bd4f10b77ba39c2b9402d4e8399c482a797f671" integrity sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg== -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +nopt@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-9.0.0.tgz#6bff0836b2964d24508b6b41b5a9a49c4f4a1f96" + integrity sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw== + dependencies: + abbrev "^4.0.0" + +npm-bundled@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-5.0.0.tgz#5025d847cfd06c7b8d9432df01695d0133d9ee80" + integrity sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw== + dependencies: + npm-normalize-package-bin "^5.0.0" + +npm-install-checks@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-8.0.0.tgz#f5d18e909bb8318d85093e9d8f36ac427c1cbe30" + integrity sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89" + integrity sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag== + +npm-package-arg@^13.0.0: + version "13.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.2.tgz#72a80f2afe8329860e63854489415e9e9a2f78a7" + integrity sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA== + dependencies: + hosted-git-info "^9.0.0" + proc-log "^6.0.0" + semver "^7.3.5" + validate-npm-package-name "^7.0.0" + +npm-packlist@^10.0.1: + version "10.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.4.tgz#aa2e0e4daf910eae8c5745c2645cf8bb8813de01" + integrity sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng== + dependencies: + ignore-walk "^8.0.0" + proc-log "^6.0.0" + +npm-pick-manifest@^11.0.1: + version "11.0.3" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz#76cf6593a351849006c36b38a7326798e2a76d13" + integrity sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ== + dependencies: + npm-install-checks "^8.0.0" + npm-normalize-package-bin "^5.0.0" + npm-package-arg "^13.0.0" + semver "^7.3.5" + +npm-registry-fetch@^19.0.0: + version "19.1.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz#51e96d21f409a9bc4f96af218a8603e884459024" + integrity sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw== + dependencies: + "@npmcli/redact" "^4.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^15.0.0" + minipass "^7.0.2" + minipass-fetch "^5.0.0" + minizlib "^3.0.1" + npm-package-arg "^13.0.0" + proc-log "^6.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" nth-check@^2.0.1: version "2.1.1" @@ -5763,11 +5496,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-inspect@^1.13.3, object-inspect@^1.13.4: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - object-is@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" @@ -5776,75 +5504,31 @@ object-is@^1.1.5: call-bind "^1.0.7" define-properties "^1.2.1" -object-keys@^1.0.11, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.9" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz#bf9e7520f14d50de88dee2b9c9eca841166322dc" - integrity sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g== - dependencies: - array.prototype.reduce "^1.0.8" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.24.0" - es-object-atoms "^1.1.1" - gopd "^1.2.0" - safe-array-concat "^1.1.3" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -own-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" - integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - dependencies: - get-intrinsic "^1.2.6" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -5858,13 +5542,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -5879,25 +5556,44 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" +p-map@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" + integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0, package-json-from-dist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@^21.0.0: + version "21.5.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.5.0.tgz#475fe00db73585dec296590bec484109522e9e6f" + integrity sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ== + dependencies: + "@gar/promise-retry" "^1.0.0" + "@npmcli/git" "^7.0.0" + "@npmcli/installed-package-contents" "^4.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/promise-spawn" "^9.0.0" + "@npmcli/run-script" "^10.0.0" + cacache "^20.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^13.0.0" + npm-packlist "^10.0.1" + npm-pick-manifest "^11.0.1" + npm-registry-fetch "^19.0.0" + proc-log "^6.0.0" + sigstore "^4.0.0" + ssri "^13.0.0" + tar "^7.4.3" + pako@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -5915,7 +5611,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -5925,22 +5621,12 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -5950,10 +5636,21 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-scurry@^2.0.0, path-scurry@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" + integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" pdfmake@^0.2.2: version "0.2.23" @@ -5970,7 +5667,7 @@ picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== @@ -5985,19 +5682,24 @@ pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +plural-forms@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/plural-forms/-/plural-forms-0.5.5.tgz#d15ca5597aff37373c97edc039ba11659461120e" + integrity sha512-rJw4xp22izsfJOVqta5Hyvep2lR3xPkFUtj7dyQtpf/FbxUiX7PQCajTn2EHDRylizH5N/Uqqodfdu22I0ju+g== + png-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== -pofile@^1.0.9: +pofile@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.4.tgz#eab7e29f5017589b2a61b2259dff608c0cad76a2" integrity sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g== @@ -6007,11 +5709,6 @@ popper.js@^1.14.7: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== -possible-typed-array-names@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" - integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== - postcss-calc@^10.1.1: version "10.1.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.1.1.tgz#52b385f2e628239686eb6e3a16207a43f36064ca" @@ -6020,24 +5717,6 @@ postcss-calc@^10.1.1: postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" -postcss-calc@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" - integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - colord "^2.9.3" - postcss-value-parser "^4.2.0" - postcss-colormin@^7.0.7: version "7.0.7" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.7.tgz#63b42eb2a9cfc092b96b1b758db66dc35a2a3f19" @@ -6048,14 +5727,6 @@ postcss-colormin@^7.0.7: caniuse-api "^3.0.0" postcss-value-parser "^4.2.0" -postcss-convert-values@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" - integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - postcss-convert-values@^7.0.9: version "7.0.9" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.9.tgz#6ada5c2c480f1ddbd4c886339025a916ecc8ff01" @@ -6064,11 +5735,6 @@ postcss-convert-values@^7.0.9: browserslist "^4.28.1" postcss-value-parser "^4.2.0" -postcss-discard-comments@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" - integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== - postcss-discard-comments@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.6.tgz#4e9c696a83391d90b3ffa4485ac144e555db443c" @@ -6076,70 +5742,45 @@ postcss-discard-comments@^7.0.6: dependencies: postcss-selector-parser "^7.1.1" -postcss-discard-duplicates@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" - integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== - postcss-discard-duplicates@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz#9cf3e659d4f94b046eef6f93679490c0250a8e4e" integrity sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w== -postcss-discard-empty@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" - integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== - postcss-discard-empty@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz#b6c57e8b5c69023169abea30dceb93f98a2ffd9f" integrity sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg== -postcss-discard-overridden@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" - integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== - postcss-discard-overridden@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== -postcss-import@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== +postcss-import@^16.0.0: + version "16.1.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-16.1.1.tgz#cfbe79e6c9232b0dbbe1c18f35308825cfe8ff2a" + integrity sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ== dependencies: postcss-value-parser "^4.0.0" read-cache "^1.0.0" resolve "^1.1.7" -postcss-js@^4.0.0: +postcss-js@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.1.0.tgz#003b63c6edde948766e40f3daf7e997ae43a5ce6" integrity sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw== dependencies: camelcase-css "^2.0.1" -postcss-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc" - integrity sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q== +postcss-loader@^8.0.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.1.tgz#c3d9b35498af906fe6c25eb62583c06f619f92fc" + integrity sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow== dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.4" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - semver "^7.3.4" - -postcss-merge-longhand@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" - integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.1.1" + cosmiconfig "^9.0.0" + jiti "^2.5.1" + semver "^7.6.2" postcss-merge-longhand@^7.0.5: version "7.0.5" @@ -6149,16 +5790,6 @@ postcss-merge-longhand@^7.0.5: postcss-value-parser "^4.2.0" stylehacks "^7.0.5" -postcss-merge-rules@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" - integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.2" - postcss-selector-parser "^6.0.16" - postcss-merge-rules@^7.0.8: version "7.0.8" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.8.tgz#d63ce875b9f7880ca4aa89d9ae3eaa3657215f82" @@ -6169,13 +5800,6 @@ postcss-merge-rules@^7.0.8: cssnano-utils "^5.0.1" postcss-selector-parser "^7.1.1" -postcss-minify-font-values@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" - integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== - dependencies: - postcss-value-parser "^4.2.0" - postcss-minify-font-values@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz#6fb4770131b31fd5a2014bd84e32f386a3406664" @@ -6183,15 +5807,6 @@ postcss-minify-font-values@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" - integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== - dependencies: - colord "^2.9.3" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - postcss-minify-gradients@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.2.tgz#7937c8dcbd847f6cfd5b16938500587af8882fea" @@ -6201,15 +5816,6 @@ postcss-minify-gradients@^7.0.2: cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-minify-params@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" - integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== - dependencies: - browserslist "^4.23.0" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - postcss-minify-params@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.6.tgz#ca0df1bd4eaa70ee7a4ee17f393d275988f44657" @@ -6219,13 +5825,6 @@ postcss-minify-params@^7.0.6: cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" - integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== - dependencies: - postcss-selector-parser "^6.0.16" - postcss-minify-selectors@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.6.tgz#1e0240e1fa3372d81d3f0586591f1e8d2ae21e16" @@ -6234,22 +5833,22 @@ postcss-minify-selectors@^7.0.6: cssesc "^3.0.0" postcss-selector-parser "^7.1.1" -postcss-mixins@^9.0.2: - version "9.0.4" - resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-9.0.4.tgz#75cd3cdb619a7e08c4c51ebb094db5f6d65b3831" - integrity sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA== +postcss-mixins@^11.0.0: + version "11.0.3" + resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-11.0.3.tgz#edae34c010a3b42d94207309fe38683404e79575" + integrity sha512-HZa6DHlN7uCkp7GTFNvhpyK/Gi9+vrVG7FPl2oQdj+sXUuYo4ri9OsWBseTnvnLfWxRWOq8/VwcHcixtZPrRRg== dependencies: - fast-glob "^3.2.11" - postcss-js "^4.0.0" - postcss-simple-vars "^7.0.0" + postcss-js "^4.0.1" + postcss-simple-vars "^7.0.1" sugarss "^4.0.1" + tinyglobby "^0.2.7" -postcss-modules-extract-imports@^3.0.0, postcss-modules-extract-imports@^3.1.0: +postcss-modules-extract-imports@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.5: +postcss-modules-local-by-default@^4.0.5: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== @@ -6258,7 +5857,7 @@ postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.5 postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0, postcss-modules-scope@^3.2.0: +postcss-modules-scope@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== @@ -6281,23 +5880,11 @@ postcss-nesting@^13.0.0: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" -postcss-normalize-charset@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" - integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== - postcss-normalize-charset@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" integrity sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ== -postcss-normalize-display-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" - integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-display-values@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz#feb40277d89a7f677b67a84cac999f0306e38235" @@ -6305,13 +5892,6 @@ postcss-normalize-display-values@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" - integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-positions@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz#c771c0d33034455205f060b999d8557c2308d22c" @@ -6319,13 +5899,6 @@ postcss-normalize-positions@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" - integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-repeat-style@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz#05fe4d838eedbd996436c5cab78feef9bb1ae57b" @@ -6333,13 +5906,6 @@ postcss-normalize-repeat-style@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" - integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-string@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz#0f111e7b5dfb6de6ab19f09d9e1c16fabeee232f" @@ -6347,13 +5913,6 @@ postcss-normalize-string@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" - integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-timing-functions@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz#7b645a36f113fec49d95d56386c9980316c71216" @@ -6361,14 +5920,6 @@ postcss-normalize-timing-functions@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" - integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - postcss-normalize-unicode@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.6.tgz#6935d6baf7f7374a34c216a7fe13229acd1073f2" @@ -6377,13 +5928,6 @@ postcss-normalize-unicode@^7.0.6: browserslist "^4.28.1" postcss-value-parser "^4.2.0" -postcss-normalize-url@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" - integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-url@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz#d6471a22b6747ce93d7038c16eb9f1ba8b307e25" @@ -6391,13 +5935,6 @@ postcss-normalize-url@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" - integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== - dependencies: - postcss-value-parser "^4.2.0" - postcss-normalize-whitespace@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz#ab8e9ff1f3213f3f3851c0a7d0e4ce4716777cea" @@ -6405,14 +5942,6 @@ postcss-normalize-whitespace@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" - integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - postcss-ordered-values@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz#0e803fbb9601e254270481772252de9a8c905f48" @@ -6421,14 +5950,6 @@ postcss-ordered-values@^7.0.2: cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" - integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - postcss-reduce-initial@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.6.tgz#fa3af45e60cd04d9a3d29315eb97c82b7b447ead" @@ -6437,13 +5958,6 @@ postcss-reduce-initial@^7.0.6: browserslist "^4.28.1" caniuse-api "^3.0.0" -postcss-reduce-transforms@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" - integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== - dependencies: - postcss-value-parser "^4.2.0" - postcss-reduce-transforms@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz#f87111264b0dfa07e1f708d7e6401578707be5d6" @@ -6451,14 +5965,6 @@ postcss-reduce-transforms@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" @@ -6467,19 +5973,11 @@ postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.1: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-simple-vars@^7.0.0: +postcss-simple-vars@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz#836b3097a54dcd13dbd3c36a5dbdd512fad2954c" integrity sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A== -postcss-svgo@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" - integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.2.0" - postcss-svgo@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.1.tgz#14b90fd2a1b1f27bcb2d0ef0444f954237e7883c" @@ -6488,13 +5986,6 @@ postcss-svgo@^7.1.1: postcss-value-parser "^4.2.0" svgo "^4.0.1" -postcss-unique-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" - integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== - dependencies: - postcss-selector-parser "^6.0.16" - postcss-unique-selectors@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.5.tgz#a7dd5652c95f459176e5f135c021473e4ee58874" @@ -6507,7 +5998,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.2.14, postcss@^8.2.15, postcss@^8.4.12, postcss@^8.4.40: +postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.12, postcss@^8.4.40: version "8.5.8" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== @@ -6529,16 +6020,16 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" +proc-log@^6.0.0, proc-log@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" + integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - property-information@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" @@ -6576,7 +6067,7 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -"readable-stream@2 || 3": +readable-stream@3: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -6598,19 +6089,10 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== rechoir@^0.8.0: version "0.8.0" @@ -6619,20 +6101,6 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" -reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - regenerate-unicode-properties@^10.2.2: version "10.2.2" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" @@ -6655,7 +6123,7 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.1.tgz#ee3f70e50bdd81a221d505242cb9a9c275a2ad91" integrity sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ== -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.4: +regexp.prototype.flags@^1.5.1: version "1.5.4" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== @@ -6800,11 +6268,6 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -6838,7 +6301,7 @@ resolve-url-loader@^5.0.0: postcss "^8.2.14" source-map "0.6.1" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.11: +resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.11: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -6847,25 +6310,26 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.11: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + onetime "^7.0.0" + signal-exit "^4.1.0" reusify@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== +rimraf@^6.0.1: + version "6.1.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.1.3.tgz#afbee236b3bd2be331d4e7ce4493bac1718981af" + integrity sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA== dependencies: - glob "^7.1.3" + glob "^13.0.3" + package-json-from-dist "^1.0.1" run-parallel@^1.1.9: version "1.2.0" @@ -6874,17 +6338,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" - integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - has-symbols "^1.1.0" - isarray "^2.0.5" - safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -6895,23 +6348,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6946,28 +6382,16 @@ select@^1.1.2: resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA== -semver@^5.7.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.3.1: +semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.6.3: +semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.6.2, semver@^7.6.3: version "7.7.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" @@ -6975,11 +6399,6 @@ serialize-javascript@^6.0.2: dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -7002,15 +6421,6 @@ set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7035,65 +6445,50 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.1: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== +shelljs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.10.0.tgz#e3bbae99b0f3f0cc5dce05b46a346fae2090e883" + integrity sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw== dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" + execa "^5.1.1" + fast-glob "^3.3.2" shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^3.0.2: +signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.1.0.tgz#d34b92a544a05e003a2430209d26d8dfafd805a0" + integrity sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA== + dependencies: + "@sigstore/bundle" "^4.0.0" + "@sigstore/core" "^3.1.0" + "@sigstore/protobuf-specs" "^0.5.0" + "@sigstore/sign" "^4.1.0" + "@sigstore/tuf" "^4.0.1" + "@sigstore/verify" "^3.1.0" + +simple-git@^3.27.0: + version "3.33.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.33.0.tgz#b903dc70f5b93535a4f64ff39172da43058cfb88" + integrity sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng== + dependencies: + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + debug "^4.4.0" + sirv@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.2.tgz#f775fccf10e22a40832684848d636346f41cd970" @@ -7103,12 +6498,29 @@ sirv@^3.0.2: mrmime "^2.0.0" totalist "^3.0.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -source-list-map@^2.0.0, source-list-map@^2.0.1: +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + +source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -7126,7 +6538,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -7141,17 +6553,30 @@ space-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== dependencies: - minipass "^3.1.1" + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.23" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz#b069e687b1291a32f126893ed76a27a745ee2133" + integrity sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw== + +ssri@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-13.0.1.tgz#2d8946614d33f4d0c84946bb370dce7a9379fd18" + integrity sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ== + dependencies: + minipass "^7.0.3" stackframe@^1.3.4: version "1.3.4" @@ -7163,32 +6588,7 @@ stimulus-use@^0.52.0: resolved "https://registry.yarnpkg.com/stimulus-use/-/stimulus-use-0.52.3.tgz#d6f35fa93277274957a2ed98a7b04b4d702cb1d6" integrity sha512-stZ5dID6FUrGCR/ChWUa0FT5Z8iqkzT6lputOAb50eF+Ayg7RzJj4U/HoRlp2NV333QfvoRidru9HLbom4hZVw== -stop-iteration-iterator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" - integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== - dependencies: - es-errors "^1.3.0" - internal-slot "^1.1.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7197,37 +6597,23 @@ string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@^1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" - integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-object-atoms "^1.0.0" - has-property-descriptors "^1.0.2" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" - integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" string_decoder@^1.1.1: version "1.3.0" @@ -7251,19 +6637,12 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" + ansi-regex "^5.0.1" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" @@ -7272,32 +6651,28 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -style-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== +strip-ansi@^7.0.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" + ansi-regex "^6.2.2" -"style-loader@^3.3.0 || ^4.0.0": +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +"style-loader@^3.3.0 || ^4.0.0", style-loader@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== -stylehacks@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" - integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== - dependencies: - browserslist "^4.23.0" - postcss-selector-parser "^6.0.16" - stylehacks@^7.0.5: version "7.0.8" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.8.tgz#cb5d00bb1779a30c4d408a7d576c016c88b36491" @@ -7311,13 +6686,6 @@ sugarss@^4.0.1: resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383" integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw== -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -7325,7 +6693,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -7344,19 +6712,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svgo@^3.2.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.3.tgz#8246aee0b08791fde3b0ed22b5661b471fadf58e" - integrity sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng== - dependencies: - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - sax "^1.5.0" - svgo@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/svgo/-/svgo-4.0.1.tgz#c82dacd04ee9f1d55cd4e0b7f9a214c86670e3ee" @@ -7380,34 +6735,18 @@ tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.2.tgz#86755feabad08d82a26b891db044808c6ad00f15" integrity sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA== -tar@^6.0.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== +tar@^7.4.3, tar@^7.5.4: + version "7.5.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.13.tgz#0d214ed56781a26edc313581c0e2d929ceeb866d" + integrity sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng== dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" -terser-webpack-plugin@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: +terser-webpack-plugin@^5.0.0, terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: version "5.4.0" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== @@ -7417,7 +6756,7 @@ terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: schema-utils "^4.3.0" terser "^5.31.1" -terser@^5.3.4, terser@^5.31.1: +terser@^5.31.1: version "5.46.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.1.tgz#40e4b1e35d5f13130f82793a8b3eeb7ec3a92eee" integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ== @@ -7427,13 +6766,12 @@ terser@^5.3.4, terser@^5.31.1: commander "^2.20.0" source-map-support "~0.5.20" -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" + readable-stream "3" tiny-emitter@^2.0.0: version "2.1.0" @@ -7445,6 +6783,14 @@ tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== +tinyglobby@^0.2.12, tinyglobby@^0.2.7: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + tmp@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" @@ -7501,6 +6847,15 @@ tslib@^2.8.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== +tuf-js@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.1.0.tgz#ae4ef9afa456fcb4af103dc50a43bc031f066603" + integrity sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ== + dependencies: + "@tufjs/models" "4.1.0" + debug "^4.4.3" + make-fetch-happen "^15.0.1" + type-fest@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.5.0.tgz#78fca72f3a1f9ec964e6ae260db492b070c56f3b" @@ -7508,66 +6863,11 @@ type-fest@^5.5.0: dependencies: tagged-tag "^1.0.0" -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" - integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.9" - -typed-array-length@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - typescript@^5.7.2: version "5.9.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - undici-types@~7.18.0: version "7.18.2" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" @@ -7625,20 +6925,6 @@ unified@11.0.5, unified@^11.0.0: trough "^2.0.0" vfile "^6.0.0" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - unist-util-find-after@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz#3fccc1b086b56f34c8b798e1ff90b5c54468e896" @@ -7699,6 +6985,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + update-browserslist-db@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" @@ -7729,6 +7020,11 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +validate-npm-package-name@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz#e57c3d721a4c8bbff454a246e7f7da811559ea0d" + integrity sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A== + vanilla-colorful@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz#3fb1f4b9f15b797e20fd1ce8e0364f33b073f4a2" @@ -7823,15 +7119,7 @@ webpack-notifier@^1.15.0: node-notifier "^9.0.0" strip-ansi "^6.0.0" -webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^2.0.1, webpack-sources@^2.2.0: +webpack-sources@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== @@ -7839,7 +7127,7 @@ webpack-sources@^2.0.1, webpack-sources@^2.2.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack-sources@^3.3.4: +webpack-sources@^3.0.0, webpack-sources@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== @@ -7875,71 +7163,6 @@ webpack@^5.74.0: watchpack "^2.5.1" webpack-sources "^3.3.4" -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.16, which-typed-array@^1.1.19: - version "1.1.20" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" - integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7947,31 +7170,49 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +which@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-6.0.1.tgz#021642443a198fb93b784a5606721cb18cfcbfce" + integrity sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg== dependencies: - string-width "^1.0.2 || 2" + isexe "^4.0.0" wildcard@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" +workerpool@^9.2.0: + version "9.3.4" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41" + integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" ws@^8.19.0: version "8.20.0" @@ -7985,10 +7226,10 @@ xmldoc@^2.0.3: dependencies: sax "^1.4.3" -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" @@ -8000,48 +7241,38 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3" - integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.0.0: +yargs-parser@^21.0.0, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== +yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" yocto-queue@^0.1.0: version "0.1.0" From f07eabd85a93c5ccd9cbe82ff6cb8a6f9b8805e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 3 Apr 2026 21:58:02 +0200 Subject: [PATCH 027/108] Updated documentation about node requirements --- .github/workflows/assets_artifact_build.yml | 2 +- .github/workflows/tests.yml | 2 +- README.md | 4 ++-- docs/upgrade/1_to_2.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/assets_artifact_build.yml b/.github/workflows/assets_artifact_build.yml index 7ee5e7fc..a74ae7cc 100644 --- a/.github/workflows/assets_artifact_build.yml +++ b/.github/workflows/assets_artifact_build.yml @@ -67,7 +67,7 @@ jobs: - name: Setup node uses: actions/setup-node@v6 with: - node-version: '20' + node-version: '22' - name: Install yarn dependencies run: yarn install diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3df1955a..efd5c3d3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -106,7 +106,7 @@ jobs: - name: Setup node uses: actions/setup-node@v6 with: - node-version: '20' + node-version: '22' - name: Install yarn dependencies run: yarn install diff --git a/README.md b/README.md index 993a1a9c..ad37e9c6 100644 --- a/README.md +++ b/README.md @@ -74,11 +74,11 @@ Part-DB is also used by small companies and universities for managing their inve ## Requirements * A **web server** (like Apache2 or nginx) that is capable of - running [Symfony 6](https://symfony.com/doc/current/reference/requirements.html), + running [Symfony 7](https://symfony.com/doc/current/reference/requirements.html), this includes a minimum PHP version of **PHP 8.2** * A **MySQL** (at least 5.7) /**MariaDB** (at least 10.4) database server, or **PostgreSQL** 10+ if you do not want to use SQLite. * Shell access to your server is highly recommended! -* For building the client-side assets **yarn** and **nodejs** (>= 20.0) is needed. +* For building the client-side assets **yarn** and **nodejs** (>= 22.0) is needed. ## Installation diff --git a/docs/upgrade/1_to_2.md b/docs/upgrade/1_to_2.md index 6cd4a3e4..af5f1aa6 100644 --- a/docs/upgrade/1_to_2.md +++ b/docs/upgrade/1_to_2.md @@ -18,7 +18,7 @@ fulfilled by the official Part-DB docker image.* Part-DB 2.0 requires at least PHP 8.2 (newer versions are recommended). So if your existing Part-DB installation is still running PHP 8.1, you will have to upgrade your PHP version first. -The minimum required version of node.js is now 20.0 or newer, so if you are using 18.0, you will have to upgrade it too. +The minimum required version of node.js is now 22.0 or newer, so if you are using 18.0, you will have to upgrade it too. Most distributions should have the possibility to get backports for PHP 8.4 and modern nodejs, so you should be able to easily upgrade your system to the new requirements. Otherwise, you can use the official Part-DB docker image, which From dc522d4795620fed52292f93ea1f6267d39b4ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 3 Apr 2026 22:08:01 +0200 Subject: [PATCH 028/108] Updated webpack-encore package --- package.json | 12 +- yarn.lock | 553 ++++++++++++++------------------------------------- 2 files changed, 160 insertions(+), 405 deletions(-) diff --git a/package.json b/package.json index 87412c73..3f4a447a 100644 --- a/package.json +++ b/package.json @@ -9,16 +9,16 @@ "@symfony/stimulus-bridge": "^4.0.0", "@symfony/ux-translator": "file:vendor/symfony/ux-translator/assets", "@symfony/ux-turbo": "file:vendor/symfony/ux-turbo/assets", - "@symfony/webpack-encore": "^5.1.0", + "@symfony/webpack-encore": "^6.0.0", "bootstrap": "^5.1.3", "core-js": "^3.38.0", - "intl-messageformat": "^10.2.5", + "intl-messageformat": "^10.5.11", "jquery": "^3.5.1", "popper.js": "^1.14.7", - "regenerator-runtime": "^0.13.9", + "regenerator-runtime": "^0.14.1", "webpack": "^5.74.0", "webpack-bundle-analyzer": "^5.1.1", - "webpack-cli": "^5.1.0", + "webpack-cli": "^6.0.0", "webpack-notifier": "^1.15.0" }, "license": "AGPL-3.0-or-later", @@ -69,11 +69,11 @@ "marked": "^17.0.1", "marked-gfm-heading-id": "^4.1.1", "marked-mangle": "^1.0.1", - "pdfmake": "^0.2.2", + "pdfmake": "^0.3.7", "stimulus-use": "^0.52.0", "tom-select": "^2.1.0", "ts-loader": "^9.2.6", - "typescript": "^5.7.2" + "typescript": "^6.0.2" }, "resolutions": { "jquery": "^3.5.1" diff --git a/yarn.lock b/yarn.lock index 25c61836..6afdd5ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1625,12 +1625,7 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@discoveryjs/json-ext@^0.6.3": +"@discoveryjs/json-ext@^0.6.1", "@discoveryjs/json-ext@^0.6.3": version "0.6.3" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== @@ -1765,44 +1760,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz#8fe30b3088b89b4873c3a6cc87597ae3920c0a8b" integrity sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg== -"@foliojs-fork/fontkit@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz#94241c195bc6204157bc84c33f34bdc967eca9c3" - integrity sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA== - dependencies: - "@foliojs-fork/restructure" "^2.0.2" - brotli "^1.2.0" - clone "^1.0.4" - deep-equal "^1.0.0" - dfa "^1.2.0" - tiny-inflate "^1.0.2" - unicode-properties "^1.2.2" - unicode-trie "^2.0.0" - -"@foliojs-fork/linebreak@^1.1.1", "@foliojs-fork/linebreak@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz#32fee03d5431fa73284373439e172e451ae1e2da" - integrity sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg== - dependencies: - base64-js "1.3.1" - unicode-trie "^2.0.0" - -"@foliojs-fork/pdfkit@^0.15.3": - version "0.15.3" - resolved "https://registry.yarnpkg.com/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz#590b31e770a98e2af62ce44f268a0d06b41ff32f" - integrity sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw== - dependencies: - "@foliojs-fork/fontkit" "^1.9.2" - "@foliojs-fork/linebreak" "^1.1.1" - crypto-js "^4.2.0" - jpeg-exif "^1.1.4" - png-js "^1.0.0" - -"@foliojs-fork/restructure@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@foliojs-fork/restructure/-/restructure-2.0.2.tgz#73759aba2aff1da87b7c4554e6839c70d43c92b4" - integrity sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA== - "@formatjs/ecma402-abstract@2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1" @@ -1968,6 +1925,16 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@kocal/friendly-errors-webpack-plugin@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@kocal/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-3.0.0.tgz#834b6a181194830200eeed848c6b92fcbc927392" + integrity sha512-ELJuHiZIFlynsi+hRmxZYZHrN3nF+j4wXRaIgVGVGy/oMtvm0Fmv8n+ZSWurFkWZ+wH/SV3grE+WhNP2MbfypA== + dependencies: + consola "^3.2.3" + error-stack-parser "^2.1.4" + picocolors "^1.1.1" + string-width "^4.2.3" + "@kwsites/file-exists@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" @@ -1980,6 +1947,16 @@ resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== +"@noble/ciphers@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" + integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== + +"@noble/hashes@^1.6.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2082,16 +2059,6 @@ node-gyp "^12.1.0" proc-log "^6.0.0" -"@nuxt/friendly-errors-webpack-plugin@^2.5.1": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.6.0.tgz#bd0cf6cd73b6e1d3e7c7f1c0de43333e69cc660c" - integrity sha512-3IZj6MXbzlvUxDncAxgBMLQwGPY/JlNhy2i+AGyOHCAReR5HcBxYjVRBvyaKM9R3s5k4OODYKeHAbrToZH/47w== - dependencies: - chalk "^2.4.2" - consola "^3.2.3" - error-stack-parser "^2.1.4" - string-width "^4.2.3" - "@orchidjs/sifter@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@orchidjs/sifter/-/sifter-1.1.0.tgz#b36154ad0cda4898305d1ac44f318b41048a0438" @@ -2177,6 +2144,13 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.49.tgz#4f1369234f2ecf693866476c3b2e1b54d2a9d68e" integrity sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A== +"@swc/helpers@^0.5.12": + version "0.5.21" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.21.tgz#0b1b020317ee1282860ca66f7e9a7c7790f05ae0" + integrity sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg== + dependencies: + tslib "^2.8.0" + "@symfony/stimulus-bridge@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@symfony/stimulus-bridge/-/stimulus-bridge-4.0.1.tgz#af0ddabc88254648a812fc328c0f407a6d5f40dc" @@ -2193,22 +2167,22 @@ "@symfony/ux-turbo@file:vendor/symfony/ux-turbo/assets": version "2.33.0" -"@symfony/webpack-encore@^5.1.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-5.3.1.tgz#a8b183bb8ba9f8ce0aa47be5f520ae194ffa1412" - integrity sha512-fNevCvcFMWrY63b901F2mvuECFUqwrQUUEJ9TZkO42lc81F0D6yiTMCFpzTKNrUIO7JSoD8aQxAWJbI5Kly4yg== +"@symfony/webpack-encore@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-6.0.0.tgz#fcc5b653c3d547599c6ab4ccdc09fc0fac760e9d" + integrity sha512-wiBvZ9QRTG5QAK9Ux4bCsbsRtzMlgzd9Eh4wSR5dOY6F3aSkgfUmxQsLKFF2lorNQinAYb4VYZtWH/9KEEt2xg== dependencies: - "@nuxt/friendly-errors-webpack-plugin" "^2.5.1" - babel-loader "^9.1.3 || ^10.0.0" + "@kocal/friendly-errors-webpack-plugin" "^3.0.0" + babel-loader "^10.0.0" css-loader "^7.1.0" - css-minimizer-webpack-plugin "^7.0.0" + css-minimizer-webpack-plugin "^8.0.0" fastest-levenshtein "^1.0.16" mini-css-extract-plugin "^2.6.0" picocolors "^1.1.0" pretty-error "^4.0.0" resolve-url-loader "^5.0.0" semver "^7.3.2" - style-loader "^3.3.0 || ^4.0.0" + style-loader "^4.0.0" tapable "^2.2.1" terser-webpack-plugin "^5.3.0" tmp "^0.2.5" @@ -2490,20 +2464,20 @@ "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" - integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== +"@webpack-cli/configtest@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz#76ac285b9658fa642ce238c276264589aa2b6b57" + integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA== -"@webpack-cli/info@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" - integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== +"@webpack-cli/info@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-3.0.1.tgz#3cff37fabb7d4ecaab6a8a4757d3826cf5888c63" + integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ== -"@webpack-cli/serve@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" - integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== +"@webpack-cli/serve@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-3.0.1.tgz#bd8b1f824d57e30faa19eb78e4c0951056f72f00" + integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2631,13 +2605,6 @@ ansi-regex@^6.2.2: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -2660,7 +2627,7 @@ attr-accept@^2.2.5: resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== -babel-loader@^10.0.0, "babel-loader@^9.1.3 || ^10.0.0": +babel-loader@^10.0.0: version "10.1.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.1.1.tgz#ce9748e85b7071eb88006e3cfa9e6cf14eeb97c5" integrity sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg== @@ -2713,10 +2680,10 @@ barcode-detector@^3.0.0, barcode-detector@^3.0.5: dependencies: zxing-wasm "3.0.2" -base64-js@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== base64-js@^1.1.2, base64-js@^1.3.0: version "1.5.1" @@ -2779,7 +2746,7 @@ braces@^3.0.3: dependencies: fill-range "^7.1.1" -brotli@^1.2.0: +brotli@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== @@ -2828,32 +2795,6 @@ cacache@^20.0.0, cacache@^20.0.1: p-map "^7.0.2" ssri "^13.0.0" -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.7, call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2889,15 +2830,6 @@ ccount@^2.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3053,10 +2985,10 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== color-convert@3.1.0: version "3.1.0" @@ -3065,13 +2997,6 @@ color-convert@3.1.0: dependencies: color-name "^2.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -3079,11 +3004,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/color-name/-/color-name-2.1.0.tgz#0b677385c1c4b4edfdeaf77e38fa338e3a40b693" @@ -3111,16 +3031,16 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - commander@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^14.0.2: version "14.0.3" resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" @@ -3195,11 +3115,6 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -crypto-js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" - integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== - css-declaration-sorter@^7.2.0: version "7.3.1" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz#acd204976d7ca5240b5579bfe6e73d4d088fd568" @@ -3219,17 +3134,17 @@ css-loader@^7.0.0, css-loader@^7.1.0: postcss-value-parser "^4.2.0" semver "^7.6.3" -css-minimizer-webpack-plugin@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.4.tgz#92d2643e3658e3f484a70382a5dba18e51997f2e" - integrity sha512-2iACis+P8qdLj1tHcShtztkGhCNIRUajJj7iX0IM9a5FA0wXGwjV8Nf6+HsBjBfb4LO8TTAVoetBbM54V6f3+Q== +css-minimizer-webpack-plugin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-8.0.0.tgz#e8e881dd171ec586d2229124177349c8ca3b63c3" + integrity sha512-9bEpzHs8gEq6/cbEj418jXL/YWjBUD2YTLLk905Npt2JODqnRITin0+So5Vx4Dp5vyi2Lpt9pp2QHzQ7fdxNrw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" cssnano "^7.0.4" jest-worker "^30.0.5" postcss "^8.4.40" schema-utils "^4.2.0" - serialize-javascript "^6.0.2" + serialize-javascript "^7.0.3" css-select@^4.1.3: version "4.3.0" @@ -3459,36 +3374,6 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -deep-equal@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" - integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== - dependencies: - is-arguments "^1.1.1" - is-date-object "^1.0.5" - is-regex "^1.1.4" - object-is "^1.1.5" - object-keys "^1.1.1" - regexp.prototype.flags "^1.5.1" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" @@ -3585,15 +3470,6 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -3642,7 +3518,7 @@ env-paths@^2.2.0, env-paths@^2.2.1: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envinfo@^7.7.3: +envinfo@^7.14.0: version "7.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== @@ -3661,28 +3537,11 @@ error-stack-parser@^2.1.4: dependencies: stackframe "^1.3.4" -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - es-module-lexer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - es-toolkit@1.45.1: version "1.45.1" resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.45.1.tgz#21b28b2bd43178fd4c9c937c445d5bcaccce907b" @@ -3735,11 +3594,6 @@ escalade@^3.1.1, escalade@^3.2.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -3888,6 +3742,21 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +fontkit@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" + integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g== + dependencies: + "@swc/helpers" "^0.5.12" + brotli "^1.3.2" + clone "^2.1.2" + dfa "^1.2.0" + fast-deep-equal "^3.1.3" + restructure "^3.0.0" + tiny-inflate "^1.0.3" + unicode-properties "^1.4.0" + unicode-trie "^2.0.0" + foreground-child@^3.1.0, foreground-child@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" @@ -3917,11 +3786,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - fuzzysort@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-3.1.0.tgz#4d7832d8fa48ad381753eaa7a7aae9927bdc10a8" @@ -3937,30 +3801,6 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -4030,11 +3870,6 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -4045,35 +3880,11 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -4285,7 +4096,7 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@^0.7.1, iconv-lite@^0.7.2: +iconv-lite@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== @@ -4340,7 +4151,7 @@ interpret@^3.1.1: resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -intl-messageformat@^10.2.5: +intl-messageformat@^10.5.11: version "10.7.18" resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.18.tgz#51a6f387afbca9b0f881b2ec081566db8c540b0d" integrity sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g== @@ -4355,14 +4166,6 @@ ip-address@^10.0.1: resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== -is-arguments@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4375,14 +4178,6 @@ is-core-module@^2.16.1: dependencies: hasown "^2.0.2" -is-date-object@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -4437,16 +4232,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -4542,16 +4327,16 @@ jiti@^2.5.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== -jpeg-exif@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" - integrity sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ== - jquery@>=1.7, jquery@^3.5.1: version "3.7.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== +js-md5@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.8.3.tgz#921bab7efa95bfc9d62b87ee08a57f8fe4305b69" + integrity sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4647,6 +4432,14 @@ lilconfig@^3.1.3: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -4775,11 +4568,6 @@ marked@^17.0.1: resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.5.tgz#8fc6878a439463a007b05d346d2ad50a87ec3f0e" integrity sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg== -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - mdast-util-find-and-replace@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" @@ -5496,19 +5284,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -5652,14 +5427,25 @@ path-scurry@^2.0.0, path-scurry@^2.0.2: lru-cache "^11.0.0" minipass "^7.1.2" -pdfmake@^0.2.2: - version "0.2.23" - resolved "https://registry.yarnpkg.com/pdfmake/-/pdfmake-0.2.23.tgz#249ce735fbc58e212ea3343d60f388408b8f2f02" - integrity sha512-A/IksoKb/ikOZH1edSDJ/2zBbqJKDghD4+fXn3rT7quvCJDlsZMs3NmIB3eajLMMFU9Bd3bZPVvlUMXhvFI+bQ== +pdfkit@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/pdfkit/-/pdfkit-0.18.0.tgz#573efa7f4c78a8ab1362232a05a589b97b292216" + integrity sha512-NvUwSDZ0eYEzqAiWwVQkRkjYUkZ48kcsHuCO31ykqPPIVkwoSDjDGiwIgHHNtsiwls3z3P/zy4q00hl2chg2Ug== dependencies: - "@foliojs-fork/linebreak" "^1.1.2" - "@foliojs-fork/pdfkit" "^0.15.3" - iconv-lite "^0.7.1" + "@noble/ciphers" "^1.0.0" + "@noble/hashes" "^1.6.0" + fontkit "^2.0.4" + js-md5 "^0.8.3" + linebreak "^1.1.0" + png-js "^1.0.0" + +pdfmake@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/pdfmake/-/pdfmake-0.3.7.tgz#7db4f5d83306d344cda20afdd59cd09cf4acdae1" + integrity sha512-SwTFcaH3kCJBlPFWi/YB34zRg6lpCxq90tkZ9GxfSi9/v4Tk96cv4IvOstA+CC40rdW1OzQIuNhD2DLD1RDVgA== + dependencies: + linebreak "^1.1.0" + pdfkit "^0.18.0" xmldoc "^2.0.3" picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: @@ -6113,28 +5899,16 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.9: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regex-parser@^2.2.11: version "2.3.1" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.1.tgz#ee3f70e50bdd81a221d505242cb9a9c275a2ad91" integrity sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ== -regexp.prototype.flags@^1.5.1: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - regexpu-core@^6.3.1: version "6.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" @@ -6318,6 +6092,11 @@ restore-cursor@^5.0.0: onetime "^7.0.0" signal-exit "^4.1.0" +restructure@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" + integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== + reusify@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" @@ -6399,27 +6178,10 @@ serialize-javascript@^6.0.2: dependencies: randombytes "^2.1.0" -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" +serialize-javascript@^7.0.3: + version "7.0.5" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.0.5.tgz#c798cc0552ffbb08981914a42a8756e339d0d5b1" + integrity sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw== setimmediate@^1.0.5: version "1.0.5" @@ -6668,7 +6430,7 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -"style-loader@^3.3.0 || ^4.0.0", style-loader@^4.0.0: +style-loader@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== @@ -6686,13 +6448,6 @@ sugarss@^4.0.1: resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383" integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw== -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -6778,7 +6533,7 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== -tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: +tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== @@ -6863,10 +6618,10 @@ type-fest@^5.5.0: dependencies: tagged-tag "^1.0.0" -typescript@^5.7.2: - version "5.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" - integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== +typescript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.2.tgz#0b1bfb15f68c64b97032f3d78abbf98bdbba501f" + integrity sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ== undici-types@~7.18.0: version "7.18.2" @@ -6891,7 +6646,7 @@ unicode-match-property-value-ecmascript@^2.2.1: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== -unicode-properties@^1.2.2: +unicode-properties@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== @@ -7075,24 +6830,24 @@ webpack-bundle-analyzer@^5.1.1: sirv "^3.0.2" ws "^8.19.0" -webpack-cli@^5.1.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" - integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== +webpack-cli@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207" + integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw== dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.1" - "@webpack-cli/info" "^2.0.2" - "@webpack-cli/serve" "^2.0.5" + "@discoveryjs/json-ext" "^0.6.1" + "@webpack-cli/configtest" "^3.0.1" + "@webpack-cli/info" "^3.0.1" + "@webpack-cli/serve" "^3.0.1" colorette "^2.0.14" - commander "^10.0.1" + commander "^12.1.0" cross-spawn "^7.0.3" - envinfo "^7.7.3" + envinfo "^7.14.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^3.1.1" rechoir "^0.8.0" - webpack-merge "^5.7.3" + webpack-merge "^6.0.1" webpack-manifest-plugin@^5.0.1: version "5.0.1" @@ -7102,14 +6857,14 @@ webpack-manifest-plugin@^5.0.1: tapable "^2.0.0" webpack-sources "^2.2.0" -webpack-merge@^5.7.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: clone-deep "^4.0.1" flat "^5.0.2" - wildcard "^2.0.0" + wildcard "^2.0.1" webpack-notifier@^1.15.0: version "1.15.0" @@ -7177,7 +6932,7 @@ which@^6.0.0: dependencies: isexe "^4.0.0" -wildcard@^2.0.0: +wildcard@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== From 0080aa9f253263db1a192a72e02b59941fce4e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 22:44:09 +0200 Subject: [PATCH 029/108] Stay on Ckeditor 47 as with 48 seems something to break 47 is the LTS version anyway --- package.json | 2 +- yarn.lock | 1330 ++++++++++++++++++++++++++------------------------ 2 files changed, 681 insertions(+), 651 deletions(-) diff --git a/package.json b/package.json index 3f4a447a..172eabc0 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "bootbox": "^6.0.0", "bootswatch": "^5.1.3", "bs-custom-file-input": "^1.3.4", - "ckeditor5": "^48.0.0", + "ckeditor5": "^47.0.0", "clipboard": "^2.0.4", "compression-webpack-plugin": "^11.1.0", "datatables.net": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index 6afdd5ef..e627772e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,160 +837,161 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-48.0.0.tgz#593e092072d1172d702fe4cb5b2da93d543bee8d" - integrity sha512-qNMICWAlocqa3XYp8MlDF26jSVgahl7I8dOlPWQXhDWtWPF1rGVnNzBxvjICMHzwN/oHtRMyjVIRyGae5Id9rA== +"@ckeditor/ckeditor5-adapter-ckfinder@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.1.tgz#bb07943138ecd3c17b0e9634eb605e586c7d32f2" + integrity sha512-X4l4KyLgSsmAyRd/YY8R/OArOXR2Ts8NyoW6k+tLtYxEmZOhJsa6ZFSho/OVTole7IqMl+Zo93b9YaAwX23brw== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-upload" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-alignment@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-48.0.0.tgz#9ea3f00a3706857c5b600d9ac96528b16065949f" - integrity sha512-6wdG0n5a69cZJQVw5WJinrFdMuGhq1YWbEsiowFXTw0zREbGjRpZs8FLV2g4tPK3Gw+jXZgVo3t8RHOYdX2G8g== +"@ckeditor/ckeditor5-alignment@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.1.tgz#9a06caee658ceb19959e6bb9fbbbbc32efa195c3" + integrity sha512-2u1+Eseelrm5gKKajE9X+gcPchVAIna3AkoJyCw3+Y4dBc6ElWZJEuCO7b6Omv5H7q3lQimbaqJnvIE1Z/nXOA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-autoformat@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-48.0.0.tgz#490683810e89636fb28e68d1d925e71582da5479" - integrity sha512-Fr8Gp0kgEI8foRLrGrRyxuU4zAfux7OAbrDxS47bEBckbf9mGuwGOA90fcmFY3hwIDxxfgZA8h6qHJOZBCqWSg== +"@ckeditor/ckeditor5-autoformat@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.1.tgz#0771f53e3d94202c454213f78e491aaebfff51ea" + integrity sha512-UI3HFyw7VCTM92IhE6hdIh5rp2nqOLL4vnnOFTgp7Lq6dLOVzuwsRJLIEfYxz4Xusy4UKu4zM8QX4FV1nOWsGQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-heading" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-autosave@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-48.0.0.tgz#f66e988a92ee8a6d1f2f3865b23c6aee75c152a9" - integrity sha512-/5nm78GoqEA94RcOCQtQ6g+nv1ibz5/pu7p1N3NWwKQBc04fM0HzdioxhcDnSd1qSjXHx1Lzo3ICZAyp0GnAjw== +"@ckeditor/ckeditor5-autosave@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.1.tgz#86fe0ca7c6c0db546298fe214df50f282ba0528b" + integrity sha512-7om5OHf2hBDi/Md8lVZL6fF7gCBAMVZfg8zsJqTmAW6fwl5gfenD4rggPdSa4GVt+mZXbheZx9EWc0HX1psAew== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-basic-styles@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-48.0.0.tgz#f0948e7cd83b879404bc9cb7b4d8e3da469cc536" - integrity sha512-6EX+Wmb/wHljeutCdLPVers35PENkANtslXe+qM5NKhEw9WLQEaS5fXYh+4A5xZJsppV0l/zQpMMRP7MPoQQMQ== +"@ckeditor/ckeditor5-basic-styles@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.1.tgz#afcb1f8e301c7fdfbe36dd10ac99aa152e1fa9bd" + integrity sha512-/8R59UxR/8quK8UmOLOS1xq47GnB+oMNySo8BgLHJl7qepRR5VnWU0hHB239idnFk46IVhuRciXQHjifrJiScQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-block-quote@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-48.0.0.tgz#5d321c61274578d36de9f7ab69426071944f8cf9" - integrity sha512-lgznrbDscTPqob99NJDNTFCRO8AGUKl9pXlXbW6yRf9zycfubHWU0inEp771Tc3nNHveTphwPiuTStshsPZb9A== +"@ckeditor/ckeditor5-block-quote@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.1.tgz#056a0992dcdb503f66b7b8fb5cfc37ab1cf6d24c" + integrity sha512-wyDLqGrmcDVNlRmHxXTpXg2PKImgB4yIU3UDRofFKVJiuvnZvKKvx/Oh9USVv1G1zOAPoFyoK9AQzqYNOB7AMQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-bookmark@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-48.0.0.tgz#94bcb61fb3bfd1a867637de4c31ebb8654e33f01" - integrity sha512-EmvW4HJYIMfp+0a6F1RrfcM9qMFyh3HjmFWz5IOsosqYUWh1BhQAf99r0cK/nUWEIwmAyX5PdbtMVLmkWOASAg== +"@ckeditor/ckeditor5-bookmark@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.1.tgz#9b7452cf06a98bfcea754ed781499d4deca4d3bb" + integrity sha512-9HwVudGBEhbqMPkEXQTqSIACGYpOWlES7bOxdG6WfgOUOAdCiTPXFCc5f+HSMFbrwd7XJ40tycPLOa7XK14oEg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-link" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-link" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-ckbox@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-48.0.0.tgz#4fdf7a14763c463ba583d07d105fc9c079934ed3" - integrity sha512-O6Le5xGxdjntf6VSVbO6jwEUkoJbGIrSWJFD7REOS/bKq+xO59NnjhCuYcIwCuBveNf+i6u7KPWCdlFl+r2zGA== +"@ckeditor/ckeditor5-ckbox@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.1.tgz#56fbc40ffed21ffec0dc0e83a0c69f7547c81ab0" + integrity sha512-v083Tnbsx4z1fFW+ghMXlsf5EgB3UaSldjfRsipjIYUiUeatccgRN00Qh6qGMlYz7zZcSdUUtrOfTWL/LYPWDg== dependencies: - "@ckeditor/ckeditor5-cloud-services" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-image" "48.0.0" - "@ckeditor/ckeditor5-link" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-upload" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-cloud-services" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" blurhash "2.0.5" - es-toolkit "1.45.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ckfinder@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-48.0.0.tgz#55f886cb16851db79a178af80ed54c362ea1ae48" - integrity sha512-UuuxpUG03zp1YpxHpBs8UprkMpGySVp58o7adTJv5zJeMA9GLcKm+cB6UL066kKxzfKhBS6eSzsefHyPTaUMpg== +"@ckeditor/ckeditor5-ckfinder@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.1.tgz#954c594b72ab291a359ebf0b4c62e5770426ce78" + integrity sha512-ewgqgtQaDDZHQUGby/gg2/840Go280bvx959ExQH8Y7u4fPVw8NEFYAxjcm43W6EXgMnlmsEr8+G8q8g4iKT1w== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-image" "48.0.0" - "@ckeditor/ckeditor5-link" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-clipboard@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-48.0.0.tgz#c60b5f9903bb149027cb0a646d0874f5b4da74e4" - integrity sha512-wW3Lhn3zrTmXDvE3y6w5xnie7fLxnPnewMKw/82a7vnYG+pPpA2K79czZov4h/TQ2X91JC5i9/G6PT/tMQ2UTg== +"@ckeditor/ckeditor5-clipboard@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.1.tgz#10fa242f281dceb318ca79dc6c9b022585935e70" + integrity sha512-F3KQuCnnCavm8wXvX+d1KN/obh5ux/jT9qC/71QfMKdDvHxEOzi/t3YWa1r3sztlksDQ4LtODU4uWh0vVKUpkg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-cloud-services@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-48.0.0.tgz#f18a85dfb67077734be260e3c3d30aca278d2125" - integrity sha512-XsXT7PZ8C68uBFYNhO+HctlnjW4mXUNbqXibLFFJmc78L+aWsYw73jdxLMG97qe7ekDncrSsKJoaegdURZE5yw== +"@ckeditor/ckeditor5-cloud-services@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.1.tgz#fdb1f25a132cbb8adb207a3dd8da426fe675f722" + integrity sha512-yC9aqornbxjgNhHuUX4gcuvPTLv34sc8CbUOeFYLGbD9ujwoC0fzzjzSB7u5b8fWNg6cAjzriFooJATHBvu40g== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-upload" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-code-block@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-48.0.0.tgz#8d7c4b76839686a42864d115be18bfa6152ef8c7" - integrity sha512-R4rBaEg0si0u1TmsnROPGimqyru13DwoEThEoMN6B4+Z9x0K4gWuBcLJQ9DbbfcrX4FI6A42VE6pdMsjlgN1Cg== +"@ckeditor/ckeditor5-code-block@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.1.tgz#4f15dedc705845d45bb6b8bfb28bc7dd26be37dd" + integrity sha512-ntZBIEYLoC4/OTUgCkwwmyXwwqDk8QwFcx/1kZN7S4YtwocREZqpDH1wYT+GA2ZmGkjaBRxdTLwSVr/7bf+wqg== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-core@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-48.0.0.tgz#58a8fc61d5a9559720beaac172d39845b853193a" - integrity sha512-alN+AOKd8a5C8xgNim7ojKlW3r2jOWjIh3KrYBIfL92LvBXmFutNJRYuxzSMVO5I9+stbcYp2oAZZ1jxtpL/7g== +"@ckeditor/ckeditor5-core@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.1.tgz#e5558a33b7d2d4870ee8de3345d56518748c89cf" + integrity sha512-6dtnquhjymLkNhdC9T6gk/Mf2bDnHSTZrhkByaXC96CbmQDriCgfcaAVY6pQgDNxBQ6fZrev0TnKBLfTItrMsg== dependencies: - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-watchdog" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-watchdog" "47.6.1" + es-toolkit "1.39.5" "@ckeditor/ckeditor5-dev-translations@^53", "@ckeditor/ckeditor5-dev-translations@^53.4.0": version "53.4.0" @@ -1043,304 +1044,319 @@ through2 "^4.0.0" upath "^2.0.1" -"@ckeditor/ckeditor5-easy-image@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-48.0.0.tgz#55fac5dc9fa0024558cfa2b352d1db55d0bf5645" - integrity sha512-dLblbP7Skvbx3olIiHxnZnfZUr159V5ixNzge63IlN5qRfJxLguInpm/93bQY5kMpfARU4dgI2/07B6RtYP3XA== +"@ckeditor/ckeditor5-easy-image@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.1.tgz#03b7b4180a194cbb9e60d2679471dafd2a6ada7f" + integrity sha512-hWaqibO1ZUHRIkvvAO7O0qDAIw+GN6UWbdr0wcGNLc4DcSZMUIpAfoXuiyyvE9hQEJPpfTOwA3r0znS6wXtMCg== dependencies: - "@ckeditor/ckeditor5-cloud-services" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-image" "48.0.0" - "@ckeditor/ckeditor5-upload" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-cloud-services" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-editor-balloon@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-48.0.0.tgz#c05974790185d71e62b140634879eeeaed5b23fc" - integrity sha512-yrDqeV+3SspIvnqMJt4pGyOOC91z691uJYFFP369WF9w40sQPKpt5rtJjYmwFaSNO4vX1f7QlG8xuxD8eP/cyQ== +"@ckeditor/ckeditor5-editor-balloon@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.1.tgz#ee58d45c86d213bf39eae01dcf50942805f6804f" + integrity sha512-geszCykoE9Sja2tBqyMww4etAzAExg4eGnlYbXSGiaUiC7Ks4OqRVeuvw37QsH8Q56J5FQC35ysq95nrLEB+0A== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-classic@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-48.0.0.tgz#15b7e097c43089bf6844a53278fa600d4e1daa76" - integrity sha512-PUtB1e3uMD5vNYFSThapmf2qCQ9i1vM7w50rOPBIFbXeBM3NgNgQ4uj7DBQe5CSxPlTZDerHujPjvur576KvVQ== +"@ckeditor/ckeditor5-editor-classic@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.1.tgz#82fe9e61064ca5bbc431f1d9146710831a252945" + integrity sha512-w2QaF2ieqLqu6i9YldOpPnFezvAsXY/R/vp/c0D1ofvI1CtBRWhQ9/rRwADMoKgpcuyP2320sRG312anT8aiaA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-decoupled@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-48.0.0.tgz#348d64dc2f6f85e30b5e480b4109b00a1281d7c8" - integrity sha512-zsKb1IQJ7Cb9mxnCbI/Foec6pE3L+GmXfyI38sXQTbsWdf0rE48CpNsot4MpPkRig+z1xovwAYT1J4F37RTLPg== +"@ckeditor/ckeditor5-editor-decoupled@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.1.tgz#46c286e4a9800be17a2e8252a578f4541fdab460" + integrity sha512-w047UpjHF106k0NeQLgWY03k29s5vIpS9M6Oj+f+IdKaf4TR7uSzl/CXsS+csfqwZEhtGwGV3LYJVzo35+SifA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-inline@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-48.0.0.tgz#3594dd3a98b663cb75ea1449e7bc423fcde8ead1" - integrity sha512-V2hdVLyR39frbIMi3BZbRrvLRRbyq6pBc65btbMDAstRWQ46rKeXVMv5z9AHRh1bRxhFZWji7e3Xmy3sp7035w== +"@ckeditor/ckeditor5-editor-inline@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.1.tgz#0b8d63092273517b17960a16816fc27b2230a953" + integrity sha512-UJQHbMh1nvsHMuiijmRx3y/5ssdxeJTrVjrwDoPlUsI8tfRYjkdIucd9SsRhXnV65Vk31Ah5wiFyaBb5OLXZaA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-multi-root@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-48.0.0.tgz#7c484e17df151b9638c0cd2c947b7abe6d2a3ede" - integrity sha512-6I20v8RhznnSSinNq4vEO1/T+PGslCvnJXhzJDdNWJKB1szF7pfCStpEFNCR43q/n78tBQS8a5cPr5ZFXeQOeQ== +"@ckeditor/ckeditor5-editor-multi-root@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.1.tgz#b1b80992009aa64d48ca92760d74e25c5e146b9b" + integrity sha512-Jn55iVT2sg85NSPVe/mThLoiI0FTAEH5r48MXD1MKz1E5K0FkpdLiKyCR4onfdFLozWZW2NvU0faCkyI0BKaZQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-emoji@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-48.0.0.tgz#be7d4d88ec526139eee1a585a90fa68c5fcc796f" - integrity sha512-Ho2C+rAQwACupQH1C0tidvj3fAx9HuLBDfD1LEtHpfkQZoFanYBVFIb+9ADv4rsChe9P9dBCnqTF8RNpoafS1A== +"@ckeditor/ckeditor5-emoji@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.1.tgz#196b45d7458482466e2b7eaea8da4740256d07e9" + integrity sha512-bnnnvRk/eYrvKLLQpJrjSV++Abpm1/8N31BNVaZyeHzaI0pddE6ikS44Ju82u7BQJaqSi2SO2Glx3u3C14rm2g== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-mention" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-mention" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-48.0.0.tgz#eb0c565de568c5e4030df480c374962639ff9d9a" - integrity sha512-Z/K+qz8R/pcCWFbe+w5my1hDWcfpsVmyeiWRsrecbxLBZ6o6l+04XFBFgMQpxFgHKcoqS699WnWYk+1zGZDf+w== +"@ckeditor/ckeditor5-engine@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.1.tgz#b3d7dd701e6facd4c47e5e21be2a75dfd59f7f6b" + integrity sha512-Xb398PRhkJqtUuQ1E1pdLXTG1REIOanr7PCIRPpWvpHAIZZAuxTIqyacZC4qVTS9xI+ObxYqosf8yNvFsEtu8w== dependencies: - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-enter@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-48.0.0.tgz#6c1fb3ff0c38457a6906bb5fc5b6c2b5a1b43ef4" - integrity sha512-VPWc64iEaH2mxkpZi5j0tyJFlIPLMGuwRvhWhKyk8/W8SXt4lOHx+nmi90G9W3aPkqnLjscCuvOzfQSsl5vYeg== +"@ckeditor/ckeditor5-enter@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.1.tgz#09d3d20895153bf0a53e30d8155b8ad3008eb1dd" + integrity sha512-H/d5L8JmZFmb5wYDi3NT4NICYuRueGUwiPgIpaaQ0gb8U3U0YVj4J5WVF/65KGiYdsuP2NupSwRqsdl8TilrdQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-essentials@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-48.0.0.tgz#1f8194747e4281f53a78b7269bcf09881ba8434e" - integrity sha512-3PeYnM4oLbw5fAwsPLbMtQjxDs+hKqMwIFa8Qpk559Ldf5PPxdC1q4HNQDY6EZSjNguAzSMxqYaOlUcJC7zcHw== +"@ckeditor/ckeditor5-essentials@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.1.tgz#6ba445f35d4ef4df33e30eb8b57a1cf096ed9ba3" + integrity sha512-4A9E9GrOudYA/eWCXE9uLqEdw7RLO/OdmeY1KWGAF6B9fubieSCF+S69M3c5hMKS6KJoNjaVJ/iR91KfIyYmtw== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-select-all" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-undo" "48.0.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-select-all" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-find-and-replace@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-48.0.0.tgz#569f661fabc530c3aec4f076e36882c03afe749d" - integrity sha512-a2+sJpPh/cXfSKDSI5lLZU7QXl2fuBoVFE+J4eBct/5QuCRmNcgpsHsZ3Q6wTeeG2zPlafcWzoa6LkeDgXjsKA== +"@ckeditor/ckeditor5-find-and-replace@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.1.tgz#c32a58de98142047d0f27d0203d3ea56228171fa" + integrity sha512-ZbKlNpFYCP0DRICJlhyTLaRlPSwdJ5W9BBrMFjHhGsKNbFJ2KHlPCqTD6nAEWc838heDBZM21jRGTM6O92FLHA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-font@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-48.0.0.tgz#489e4d46bdc9045be81460c781692b3fbc793963" - integrity sha512-V/if+TMyNb1a23LLY0NZl4a7uuHNRWGu/ZL4PYbQDk/wEJPte8Mippp00iBBsIYC/LdTavc7YiJKET14DBSFyw== +"@ckeditor/ckeditor5-font@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.1.tgz#562403cc367fd2111605e7cedcd17ef914bf9613" + integrity sha512-ayMtG44tLbmPBjoEudnF7kFkqX3GUO0Cb1lLd6JR5B4uyoNFuQbN3nyrtx7hMvdu0N4jl0hWcWXjdu6vNL4I6g== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-fullscreen@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-48.0.0.tgz#4293a98caa19581a3ae83a525e6bcea15c5ac3ac" - integrity sha512-bPf4AbQs4PC0+HAjyip07LsF8Bg8C7Rxr0j9vEw7ltwShjGknvMpBacWPPr4LVmuV++GgPh04kpRAtQVZUDgVw== +"@ckeditor/ckeditor5-fullscreen@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.1.tgz#0b46e3cc0873b880e8027cdc9c49e9c9550caaf8" + integrity sha512-LvA7vzeAkuc/z64kuRu17zm7EIFe0Bqt9xPA5GhfR6T9mBVG4wu62ElqylFUjFJ+macvkjSe68tBYQTAPyUWqg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-editor-classic" "48.0.0" - "@ckeditor/ckeditor5-editor-decoupled" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-editor-classic" "47.6.1" + "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-heading@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-48.0.0.tgz#3c96e54d8506b4a64676d65066a0c0c6fc24b48b" - integrity sha512-/Hj1k13XyD5ABI/NIF075eccC+OEPNipEJqvdiVXIerywjIfcNIPbf/X0PQxOFixCN9CBmhCPHNF6VI/Wheeog== +"@ckeditor/ckeditor5-heading@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.1.tgz#b80bef3c6b3cec4aad48473a327fceb16f86ca92" + integrity sha512-4kVuMaaAylkxYkJ0PA4hUQCDTARoeokkqKh0dE3DwEZTvvWDZjBEAhIKaSVX116ByeGfImbLkBRAoNCljKNCHQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-paragraph" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-paragraph" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-highlight@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-48.0.0.tgz#dd134b831497b82b505f141fde4337def10a7168" - integrity sha512-1uE6dzorsJGJ1x2NsLQGhBiIeClKAjiUFSelFJRqxPzWywfY8aMjnsc3kCbTKXar8j9jNwTZrFvQdqK9jI9agQ== +"@ckeditor/ckeditor5-highlight@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.1.tgz#845676a75389129793fb57db99085f863900495d" + integrity sha512-hEIAZAImLAGRsz7/d+bbh3k+9s854AxuYoTmCAN2u07muYX/pmrLrLm6cZcazjmi9J/Bow6sP/D5GeoYMWKkLA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-horizontal-line@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-48.0.0.tgz#b4c97e5f0774ae029d71f50f079f01fcb7dcf1d3" - integrity sha512-FWnU3QC5HjqNGEfC9ljtzM/qyDVvdLZtIvU2octNddoNWCXHw+IUFDxuO/M3on71Rx6ibl+GQyNgHPug7tlAkw== +"@ckeditor/ckeditor5-horizontal-line@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.1.tgz#dd4f74979cc30d3cf53f364013f1bc13f3ac8471" + integrity sha512-YTSpxdrp8NteaWARH89dA+qUWAf3agw/Q1dRQF+XdiF2kaSXRPQCXJruvmy490H+3xtwUZVs/hSlwX9gT77Skg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-html-embed@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-48.0.0.tgz#8b369a62ecdb8d96bef6f8f7479bb1064f05609c" - integrity sha512-7FNfPCR8O3mhEY4NpdaVpA1NLWd76WLnHmDUbFSRZLE+tulXxXWmV3oe3TWrfoFaILLKHYLFwL063mM81dPd8w== +"@ckeditor/ckeditor5-html-embed@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.1.tgz#d37cedfe079def1d5b3485b683bdea488ce22fdd" + integrity sha512-z4iYN6Il/PqpOBm+7OYM1mpXLUCbA7cMjq3MGIAwGwRHNFq8BWq/1by3P8FiF4ozaUyj8YgXXyWoggBC2qQRig== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-html-support@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-48.0.0.tgz#a4dcdd504102e65832b8c27a8ef29b0f4de6fe83" - integrity sha512-ahnXoBcbdNDBkwhJQmx2WRWOq0t0EJBbSFEamUxAlyVVVctASWGAKl1qlQ3JmXbnJYrfBt4dM4ECAOYxCbB+hw== +"@ckeditor/ckeditor5-html-support@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.1.tgz#2d86875f247392efeaac05f1f3de392bd77a627f" + integrity sha512-F25LY88VYx0gZTrrThmt+kqF2thrwg52ZCIQeRujMd3RIueYEAEn7ZJ0p5iArDvm9qQXtLzsaijEyZr2edstPA== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-heading" "48.0.0" - "@ckeditor/ckeditor5-image" "48.0.0" - "@ckeditor/ckeditor5-list" "48.0.0" - "@ckeditor/ckeditor5-remove-format" "48.0.0" - "@ckeditor/ckeditor5-table" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-remove-format" "47.6.1" + "@ckeditor/ckeditor5-table" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-icons@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-48.0.0.tgz#df12ffd460552814d7a0d8d69f07b893a370152a" - integrity sha512-PWHECNrUipXbtKdN3Rvhcz8NpcsKW6Gke4U+5UFndoOBtSbgxooZMoovlo1nN3PmQ9aKbEF1owf3Pa+oeG32rA== +"@ckeditor/ckeditor5-icons@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.1.tgz#076aa5bc4ae1d2939a7802155cd5e852387d9bc2" + integrity sha512-OEk5hPdMpE5/Cb2lZFtJL2XyMwy/S8xQzuAk2b2P2bJx33rJgU3pk9RUrayxCSa3p+tKqibOzm5GcshLJ7s7Tg== -"@ckeditor/ckeditor5-image@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-48.0.0.tgz#31f928e75290a233a82b9b1f33ca1ce7c0f35960" - integrity sha512-0MT8PIcUQgo9vj7PRNpClAdZ6rjqdCz2egk4ktgh+AoYIFOVh/znzBAiLcJghsoCjZLGI8REzu3dwQ0ynJsGVg== +"@ckeditor/ckeditor5-image@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.1.tgz#9824abdbb553a6e47215090e2f58be90649872b1" + integrity sha512-yy7b/7WQqN0c7/VC1Ng5svQU1btXWauBfQjFgVV3AzGa+nVeJ1ZIcV2fAkUa6mB+lCu+5ziv7b7ord22baJYzg== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-undo" "48.0.0" - "@ckeditor/ckeditor5-upload" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-indent@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-48.0.0.tgz#285f86311969edcf85a4b6dd5fbe97c165181ef2" - integrity sha512-TCyJtxBJPHMN6Q2zMfZXe2bzS95SChTIcVWOxG3KL5kOtn5AsC+gU4K5t+SM1ITVhQYYpBI9elUMy12h93PceA== +"@ckeditor/ckeditor5-indent@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.1.tgz#95c00461942c7336de8c876e242bbd94236c0283" + integrity sha512-SaokgxUJevRrYfu5PKEMvVrUliybmxpb3Cx/f/JtOnPbyJSFrt05+/mt3XsqsSB0g8LaHH2PXQfD4vncGzE6DQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-heading" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-list" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-language@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-48.0.0.tgz#7adcc244c887fa29f93fc8ced8305a858520624b" - integrity sha512-56iohiWWwrO23YY3chD9GbqKGgmm0g579OaSpz/zNtcSEpH3RJTdsliFyyv+bPQMbPYOmJiHKkj9eWVucHI4gw== +"@ckeditor/ckeditor5-language@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.1.tgz#6a15c81c08a2487db8f86943645b24b3ccbc8aea" + integrity sha512-YZpySDIa4Y40T9wwKIFsAlDujELkgUtoKw/+4Wl8BHlDnq/40VxXFbOSSXu4TnnVeqVFcnzTjp6Zv8CHtmY3yw== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-link@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-48.0.0.tgz#570908131e04462751e2dba91e45de4997f6f10b" - integrity sha512-j1vu9R+cPD7cY4oD6oN+sgUTFRTvH7+JFaqU0DoIiyKBq/g3RlufZfASpJ7DlonqfniFxC/7aBuz0taWBsViug== +"@ckeditor/ckeditor5-link@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.1.tgz#f541baad9e44cc95b97e9ac5c97f7cb5fe145f8e" + integrity sha512-A/gjF7e00R/ESUotqR08EeGM91V031DiHiGwYn7b+iZ1bejsdEu3yQK707bZ4U6ByEYBUOMtq1bOMYUtGJl6EA== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-image" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-list@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-48.0.0.tgz#4aa71b06e09f5a2be74586730c90cc2a5b5f142d" - integrity sha512-PeRDmPvs20p40l43wMBtbPd7H/E8XGAjIPOOccSp4DHA+Vx6YvtFws1OTJhdEWaTjfa1BdF7UXPj5MdTkcuVEw== +"@ckeditor/ckeditor5-list@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.1.tgz#fccef28ae23a39ab1b04c58fffa7fd9e04ee9c3d" + integrity sha512-k7lXRJpZ8vkMQy0EWoYD8U6rQqYuKEbrTshlIjZSuBOQ9qlAb9llJ80OO0gteYZBOCMde1BJGjCeVxSNAI6eFA== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-font" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-font" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-markdown-gfm@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-48.0.0.tgz#efcf3839e7908db3a7905b8a5292795ba27c3b08" - integrity sha512-DNae4xYkZCe3f51HFYNkJZPNj2lJB6H3WwHFHb+3wqT0NrVcKd31eqqt2G4sJjpzcSeKSGIPaX46OrtZujDTLQ== +"@ckeditor/ckeditor5-markdown-gfm@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.1.tgz#c6a150198f9285dd8f88155ec098166cfdf0c17e" + integrity sha512-bt4UsDKTmq5iyu5TkmxpC/Z5zZEsw8bcCr5egjgNtV5ozJF1E+54iQBjKIYNYIWRdD0PAEEGFE15QoWzSHBtxw== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" "@types/hast" "3.0.4" + ckeditor5 "47.6.1" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1356,259 +1372,272 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-48.0.0.tgz#9013f90138e1aeace34335f9c165e42afc66840d" - integrity sha512-be/4of06/oqOeYUUHSB8pECLHYR+2maizqPofmFuyIoXJ73gu19qMQgougjdOY6bFpTuu8rNsePZCkIJhSem/w== +"@ckeditor/ckeditor5-media-embed@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.1.tgz#d331856917347f4e49209469f7f84fbb5328d1ef" + integrity sha512-G18SeOxXVy+k0SQYHkw1HQtS6/PkqpX2Mv6zM7os9aG3OpPmX8tCqDK+X7TaMx3FRJlDV0ujOy5Qfs71SJrqKA== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-undo" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-mention@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-48.0.0.tgz#802f59f32b4227ba25c2a22994b6a040af1fc9b1" - integrity sha512-ocRNslENNnLkvwrwjl4M9ikQFO4/ih8TyFBnbjieUfYhVHO2TrOgCMwR/3U8sSZ4IQaqnq/B1Hb9kUJKsvfhBQ== +"@ckeditor/ckeditor5-mention@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.1.tgz#f678033198144b7bdc92f416d5ef8fa639bd6b20" + integrity sha512-/53LFzYqcgvd8pL02XlNBduucfnakDVvY86vC02spDuTsUH5qUMqLaz2FHSo9AH2y3kNVp98KDnqI/QjNZCd+Q== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-minimap@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-48.0.0.tgz#2c597445c9ca94924e1bd5643d76ceb1075326c5" - integrity sha512-0nlr9Y/x2XN9zEJ5AcuzxAUTUXzy+oiJA46kw6ENEqg1KmenmuXVtzlyuIVyfN2TagyWXoz7k9slxereO6lxsQ== +"@ckeditor/ckeditor5-minimap@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.1.tgz#1805a4be3eaec417880a0e37363cb7b2325e6e68" + integrity sha512-ksKOy4wxzs3pkhfzVtnnsu5rgJxqYHMKM7X8Rkhx9BSshcKFeuNIUVsSh+7QWDQStWKSZ/qAx+0rezdJCm6gvQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-page-break@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-48.0.0.tgz#7432f8a35cfd7c55189bb1c502d5419d3e5c3f73" - integrity sha512-eiCPti0A2xk0EpGXe+/lBZFhY+8UNMMA6ZUufjPwcZNIwVwzuQOJRKQwyqMdvmNz4Xjz42Vk+3RRcJQUy4QJsw== +"@ckeditor/ckeditor5-page-break@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.1.tgz#c9f2d30a6bf1071c22bd65bbb553ce652f4945e8" + integrity sha512-KBE1tLsnyIsh0v+S6p0G+WglkvfWvKCkOESmap+gct5xwmOE0HEgRVp6xFFBfHYuGSjSISvgUU4ofdnhseZivA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-paragraph@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-48.0.0.tgz#208688e6b06eea663ed706af3eacda4ad2349d95" - integrity sha512-LPHDgn878ypHJ0e2n4xsqj4eIJpo53KrliKBDKhZGNMpFD7vOXNPxiXAAGOq0EtxUbSRtCTeymJTuW3q1oYOQw== +"@ckeditor/ckeditor5-paragraph@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.1.tgz#943629d7de22d7cf272a6744fb96947c6c071ac7" + integrity sha512-6FXs94lSb6n7V7Puwp1c9BMyjycOfsAjdPRSVGTx1THqQBziQZHuZeU9LBxJZBA1mzoQOfmFaC3v+wb8odBgAQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-paste-from-office@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-48.0.0.tgz#805fdf05e3f2339231fc81ba2f526d4b776c9c8a" - integrity sha512-7fj6hqWScR9w/cfmGrnNNxWkYIWTR5ffqM0zmw+HR0DpItRjLCVBrRUp0oqmLs6CFqq2TY3rerFy/NjYaJkvuA== +"@ckeditor/ckeditor5-paste-from-office@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.1.tgz#63c514fcbf6d4b576b9cb627b6031f4f8864f0d1" + integrity sha512-Lt/V8/q59WuPURpwS9Z1UWUU1q5fF7YUbDAapWatzJlK9J/c969nRMG2aXm3z+BjXv3Kdu9qs4Oqngw0sJ0KiA== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-remove-format@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-48.0.0.tgz#1acb382be0c41e836c2f8ac556a1f2900d109706" - integrity sha512-Xwrh114VUIhAY2FP20TLVYwFvdFgDNmpigYj3Ev9SLhVSQQimckhIxYZxXYhSlDjG6+bYiEa1NSl7BUQtG7IuA== +"@ckeditor/ckeditor5-remove-format@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.1.tgz#96bdb0c0657cf85464970e8aa17924d6cf9b3a3f" + integrity sha512-2lQvT4+OVIFQs67yKh54exnT5UV1rPjEZX7MqyhZ3Dr0rzyEW7b9tpFz7bP/EUOSa2LpFktNoLFOSnIAZnQdyQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-restricted-editing@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-48.0.0.tgz#e99723ae331bc63d72d849f2ee853cd15eb82805" - integrity sha512-GIxCV9yyuOCP93nkndmyf11Vuqp352w1ErtZd6YxcX0+JDERTmCzAMbEQsPHsf6jKHikg5ei/FTjFl8YVs38Ag== +"@ckeditor/ckeditor5-restricted-editing@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.1.tgz#9308ae80f8740d9b9df662c51b47a0140757439a" + integrity sha512-ufWtexBPqBxJNNjjIw9XQe8Q+cnwLV4en6PTvdBX/zXHq87QdjpFk6NRSLCgDTpNmO2GiXnl+FsqUjGJF27zDQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-select-all@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-48.0.0.tgz#31911f1c05f31a3a2c0f9cded5e2c829de6dd558" - integrity sha512-YnhvKuoetfulualgCphPKrY9DIg8ZDa5+P8Dh2lmWt0bOSDBZ4yKoLLxTccUOweRQFnYP0vRCc/YDnKGh2nhhA== +"@ckeditor/ckeditor5-select-all@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.1.tgz#ecbe703910721ccfc526ed3a535c8c784a52f798" + integrity sha512-NKhujjJ04UdM/pObi45+q6Em0fD6pQ1m+g5qLgTsTyoFUq2rFhMZqeRSPGEXlfuR5dImA7hP8uQtXNtt/GpZ7g== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-show-blocks@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-48.0.0.tgz#029edfab621220acfe754e9b2c6918ec421035e5" - integrity sha512-lCtp5nF9hReBV/8QASM4seTylA58FBceL2wvwEfAocptzI7rS398nX4cBwrSbFzpE55KE225/m4L6P/4RtA/wA== +"@ckeditor/ckeditor5-show-blocks@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.1.tgz#66b10152e8b205b91eb97bea598369536c5296c7" + integrity sha512-9MdxI7TjccCOcbdlzX+SBjFvt8CsdxCgyoJxZ2NYut6QJAJ6WPjH0yVxckZXC3LSkqIPzrIOJxHc7e2n+oFFvA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-source-editing@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-48.0.0.tgz#0b9ebf10e324a2e741a24f7266a166f7d94e6599" - integrity sha512-H4sNbAX+kFz1W9L860uZuZFCBxDfCodpUUk1ocoaPZcm42X2Oo8F2HlH0DWX2VJ+Fgsu9OAO25818EPOCaU7RA== +"@ckeditor/ckeditor5-source-editing@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.1.tgz#041d16a8dfca9069ed0ddfe2b92f69f98f965003" + integrity sha512-/NeN6KvgdlvmBzOGH1Uxk26zGti8HvvmBbHLOCzFqfXZRLHB+47BG+GtzOa82t6YnLjK7pvR23opyAApRf6zIA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-theme-lark" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-special-characters@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-48.0.0.tgz#e880052f608db77be075c205581ed2234f3f28e0" - integrity sha512-sfbRkC4syER66Pr3E9WIcgSaOIS8ZX7MkronAthP3lVHI5jBkyyJduOgPyvC6f8fcTd/Dclr5Bs8sqZUzGEG1A== +"@ckeditor/ckeditor5-special-characters@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.1.tgz#9f89ec11f7cf1e558b4031646d6fc352be1292bb" + integrity sha512-O+WRAaDh3m/i3lWF+MaB0G++nBusB/uaB+koN+gwqiIfDHpGJ9HKr+KXrMZZYb0MjiGV0J5gswuwL+YvzNZ6rg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" -"@ckeditor/ckeditor5-style@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-48.0.0.tgz#1f266ecc34ce647a23d5cc600437bd025d76052c" - integrity sha512-nQMrg6RwSEXz8VYT3w05CGUTZb8guhJkdwgNJVnYexQReDeJxElGBfXnjitEisd1gxaiWBMKiuqv0nKLlqyhsQ== +"@ckeditor/ckeditor5-style@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.1.tgz#b1271c0b639a5c75a711950826358e407bc23245" + integrity sha512-WD9lzsgIk3sB+Ec/mpgbYIZXr8cRBOcDAjFndfjuSQMZRYM5kCMpIz0qpvjGp1Glz2bmeg7CwfuLDvbZSqZrfA== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-html-support" "48.0.0" - "@ckeditor/ckeditor5-list" "48.0.0" - "@ckeditor/ckeditor5-table" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-html-support" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-table" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-table@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-48.0.0.tgz#137722142b114d758ccce53c0b080266fa2556d9" - integrity sha512-opm+ZRxmfEZJdVh4OZ9koTmCm7ecdTRIoYOWHwUufZyi6jIy8Ea1kCYL2s86fLHgpUHTq28yP8wI2UN4b4Riag== +"@ckeditor/ckeditor5-table@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.1.tgz#6ec1f74b80fab7df6cae5ba5e7071bcd2afacd0c" + integrity sha512-zFJWnqL0PpdlSs8U1m5Mu/gcuoJfi0GSpDqr174dqXLtFcMfIsftVWVTbY5d4f+OKAp8LifxOg3CMvLD1YNSGA== dependencies: - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-typing@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-48.0.0.tgz#0903c3e3a1ba57a33a4fe53b76341c335b5c21a1" - integrity sha512-mJogY78t6qWcTnwwHQKzkzUrRtP16E+tVnUsBlvMsn0RJzyZAORVHxSrUkNhfFTrW6TwrSYtDjBY6+I1f4m9fA== +"@ckeditor/ckeditor5-theme-lark@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.1.tgz#96076019c59ed0d0f6a05b56e4597ef136cc10b9" + integrity sha512-iaRFqt6ExGAAsOc4AfJNbMyY+jnh//gMzGendqklhQzkwV3RGzN6buRtV0Fps+pKXnpRcbqaVHWv0GOIOaG58Q== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-ui" "47.6.1" -"@ckeditor/ckeditor5-ui@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-48.0.0.tgz#d784602b1b738a565f2dcd7a771632c14bb09e4a" - integrity sha512-CzjQPUj4W8BEscJwCfm9iwLMTyBwIiT0KXF4RbTqZ4YgDJhurCquYF1JOfttGBYYlX1qdXmuMMTbDF8mYH1pWA== +"@ckeditor/ckeditor5-typing@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.1.tgz#4246eaf121ea07a491883c345c077953a2eedfb2" + integrity sha512-yuMJCK6+KpYyXHxkBKRtVuOF1L42eyhUlCCq4sNFHjoJfD3q3gunmesoGIkdezMZR5RpqpGSfrOapEG9orOBTg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-editor-multi-root" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + es-toolkit "1.39.5" + +"@ckeditor/ckeditor5-ui@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.1.tgz#d2f2f7aaf439cb04027b2c91a083546bd81483e4" + integrity sha512-zBEfMSpR26rVPvc9X4KXxQd0wQG42EM+37VHdrfwJL47PFlqXTGlbsZ9BBjlElNM1mpViWSW9zpt5JdE6vtHCQ== + dependencies: + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" "@types/color-convert" "2.0.4" color-convert "3.1.0" color-parse "2.0.2" - es-toolkit "1.45.1" + es-toolkit "1.39.5" vanilla-colorful "0.7.2" -"@ckeditor/ckeditor5-undo@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-48.0.0.tgz#76f94da618ef72ffd3aae2161c40dc0a46a76af8" - integrity sha512-DQTi8si89EQSWwAqGwOGEdt9jm3u0RQME9RknSHw/AylNutlEg6BykvVRA5fWi3cXPv/agKZjdohFGJ1ZOQALA== +"@ckeditor/ckeditor5-undo@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.1.tgz#83d13e705bacfc3140a1ccf53fe7fac46e5ad9dd" + integrity sha512-kxckLxZHglOTv0yd7cROpZAgOQFR7uJEKy+ehGaPrPy5eMrIhUqHcDWHv4sLNJfNg1IgQrsqYNHeIaTzT38RvQ== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-upload@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-48.0.0.tgz#b5ea925d5c312c9aead1ce8af9cc68867c0159b5" - integrity sha512-S0tOjeX6jJ7RspT0UXuxmXa/xZPQvTP0G5qQXeWPeNhaTazz8BQeZC8xzGhqLywClvFEKuBY+3fQaNz5nkijVw== +"@ckeditor/ckeditor5-upload@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.1.tgz#64c7fcf731c87bb9fc2a44f5ad8e45ae0a6f507d" + integrity sha512-GFMKl6pct+r26EQ4K2D22xokyDQIoRYQZSZFoPl4L04FFPVRuG60pA1YSNtyi7Am+T1fR3qOVBHAuXsANyeL6g== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" -"@ckeditor/ckeditor5-utils@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-48.0.0.tgz#fefa1d7045ac34f67fe0ddf68e54f0b1f90aa837" - integrity sha512-EXPeI4uc3aizehvfgxnc9Ryt0qa1xvoow0BJ+T97ijOQ2XL+gaA5+NGvnIBiYshXQFtrYHW1zJ62Q8yWGUx7Wg== +"@ckeditor/ckeditor5-utils@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.1.tgz#6ef2d87fc795dc70802bb9c0a6dc5938193e4192" + integrity sha512-gJl5DikvPjMEsv9DZmEVv6GOZEjHQN3kgaxvaAYpfg4VcT1RENHw46BfvPN/zUHsYwZlh7DxG3+o7h3M8Pzj1w== dependencies: - "@ckeditor/ckeditor5-ui" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-watchdog@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-48.0.0.tgz#6cd1c01c3631ac67cb29af03f968d06e2632f6a2" - integrity sha512-CE+y4am+dkfbb6zePcy5mxIGdcaJgOD09VLBOWDTQGlM6Lw48kQ9FDzp7y0L6tEaJYLjcuG16kNyEKFAOFK81w== +"@ckeditor/ckeditor5-watchdog@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.1.tgz#fe36e3150595c3efd25d41c554de3db08dc59717" + integrity sha512-mHum5WRT5PKiL80UwNMXiw//s1486smeCO2sgYJKZGrqlz7cSSHDOc8iUi8Cn2YuHvTfjgRjgcZxn0u9uhr1Mw== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-widget@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-48.0.0.tgz#860d28512cd3ece20ed7ceba9432a87db82c2061" - integrity sha512-10d4WNxTApQVTFrBV0PIVsctr5KUUuAkbZPj+30TLlptJCAx8vK0P0BG/UjtNWWNNUAoKzJ9dQD4gvzXnvte0Q== +"@ckeditor/ckeditor5-widget@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.1.tgz#6f1fb87891e825a849cb7c79cf9265bfe0f68403" + integrity sha512-rURYZlY9w+qjumkQ+VQ1cO32JJbuxuGoWIPj2lTC3uFjn6kDzYB9KvNItOykBJM/V11R7sEEOWvpKlnsMmlnzg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + es-toolkit "1.39.5" -"@ckeditor/ckeditor5-word-count@48.0.0": - version "48.0.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-48.0.0.tgz#db63502f2d45761ee5d15fe866b4e1ab4d490342" - integrity sha512-NfEGWQmRia5TmGmz/LfDLSCazvsb0LydJOQAa5tGbX9OVDiiWX9/CSTPS8tGV9s15rAKExd1WAp/kJURFKt4BQ== +"@ckeditor/ckeditor5-word-count@47.6.1": + version "47.6.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.1.tgz#dd494e1529897e5ad6247abc06d07ceb2f38d8c0" + integrity sha512-q/8jRqtEFQ5SQEY8GsJBtatD7OdQT2f1o7KdKVDcZ4UZTQCo2hi9d2zvHEkQ7drA0LO+D3WJrHNEd+B6wk1slg== dependencies: - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - es-toolkit "1.45.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + ckeditor5 "47.6.1" + es-toolkit "1.39.5" "@colordx/core@^5.0.0": version "5.0.3" @@ -2880,71 +2909,72 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@^48.0.0: - version "48.0.0" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-48.0.0.tgz#4df45899ecc22fe4160833ca76e97c805eaf1503" - integrity sha512-DALFz+yuNaZTqguQHNRrlordhnlpuUfuhg4Juqm1KR1p6+ZvD7+mvpdTyh9L3Rg2FxE2+U+Ote7wV4kjN7g0MQ== +ckeditor5@47.6.1, ckeditor5@^47.0.0: + version "47.6.1" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.1.tgz#b4d37c5d9695b83b6267197ec30d9435390f9a5c" + integrity sha512-Za7+Dyju3RgfH4TF+zam7lvfOSr+Rd+0tABfR16HEtsARRPEmNBHYgS5nM3PZtNK4+ScliL6Ch3GFk7cd/TiOw== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "48.0.0" - "@ckeditor/ckeditor5-alignment" "48.0.0" - "@ckeditor/ckeditor5-autoformat" "48.0.0" - "@ckeditor/ckeditor5-autosave" "48.0.0" - "@ckeditor/ckeditor5-basic-styles" "48.0.0" - "@ckeditor/ckeditor5-block-quote" "48.0.0" - "@ckeditor/ckeditor5-bookmark" "48.0.0" - "@ckeditor/ckeditor5-ckbox" "48.0.0" - "@ckeditor/ckeditor5-ckfinder" "48.0.0" - "@ckeditor/ckeditor5-clipboard" "48.0.0" - "@ckeditor/ckeditor5-cloud-services" "48.0.0" - "@ckeditor/ckeditor5-code-block" "48.0.0" - "@ckeditor/ckeditor5-core" "48.0.0" - "@ckeditor/ckeditor5-easy-image" "48.0.0" - "@ckeditor/ckeditor5-editor-balloon" "48.0.0" - "@ckeditor/ckeditor5-editor-classic" "48.0.0" - "@ckeditor/ckeditor5-editor-decoupled" "48.0.0" - "@ckeditor/ckeditor5-editor-inline" "48.0.0" - "@ckeditor/ckeditor5-editor-multi-root" "48.0.0" - "@ckeditor/ckeditor5-emoji" "48.0.0" - "@ckeditor/ckeditor5-engine" "48.0.0" - "@ckeditor/ckeditor5-enter" "48.0.0" - "@ckeditor/ckeditor5-essentials" "48.0.0" - "@ckeditor/ckeditor5-find-and-replace" "48.0.0" - "@ckeditor/ckeditor5-font" "48.0.0" - "@ckeditor/ckeditor5-fullscreen" "48.0.0" - "@ckeditor/ckeditor5-heading" "48.0.0" - "@ckeditor/ckeditor5-highlight" "48.0.0" - "@ckeditor/ckeditor5-horizontal-line" "48.0.0" - "@ckeditor/ckeditor5-html-embed" "48.0.0" - "@ckeditor/ckeditor5-html-support" "48.0.0" - "@ckeditor/ckeditor5-icons" "48.0.0" - "@ckeditor/ckeditor5-image" "48.0.0" - "@ckeditor/ckeditor5-indent" "48.0.0" - "@ckeditor/ckeditor5-language" "48.0.0" - "@ckeditor/ckeditor5-link" "48.0.0" - "@ckeditor/ckeditor5-list" "48.0.0" - "@ckeditor/ckeditor5-markdown-gfm" "48.0.0" - "@ckeditor/ckeditor5-media-embed" "48.0.0" - "@ckeditor/ckeditor5-mention" "48.0.0" - "@ckeditor/ckeditor5-minimap" "48.0.0" - "@ckeditor/ckeditor5-page-break" "48.0.0" - "@ckeditor/ckeditor5-paragraph" "48.0.0" - "@ckeditor/ckeditor5-paste-from-office" "48.0.0" - "@ckeditor/ckeditor5-remove-format" "48.0.0" - "@ckeditor/ckeditor5-restricted-editing" "48.0.0" - "@ckeditor/ckeditor5-select-all" "48.0.0" - "@ckeditor/ckeditor5-show-blocks" "48.0.0" - "@ckeditor/ckeditor5-source-editing" "48.0.0" - "@ckeditor/ckeditor5-special-characters" "48.0.0" - "@ckeditor/ckeditor5-style" "48.0.0" - "@ckeditor/ckeditor5-table" "48.0.0" - "@ckeditor/ckeditor5-typing" "48.0.0" - "@ckeditor/ckeditor5-ui" "48.0.0" - "@ckeditor/ckeditor5-undo" "48.0.0" - "@ckeditor/ckeditor5-upload" "48.0.0" - "@ckeditor/ckeditor5-utils" "48.0.0" - "@ckeditor/ckeditor5-watchdog" "48.0.0" - "@ckeditor/ckeditor5-widget" "48.0.0" - "@ckeditor/ckeditor5-word-count" "48.0.0" + "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.1" + "@ckeditor/ckeditor5-alignment" "47.6.1" + "@ckeditor/ckeditor5-autoformat" "47.6.1" + "@ckeditor/ckeditor5-autosave" "47.6.1" + "@ckeditor/ckeditor5-basic-styles" "47.6.1" + "@ckeditor/ckeditor5-block-quote" "47.6.1" + "@ckeditor/ckeditor5-bookmark" "47.6.1" + "@ckeditor/ckeditor5-ckbox" "47.6.1" + "@ckeditor/ckeditor5-ckfinder" "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.1" + "@ckeditor/ckeditor5-cloud-services" "47.6.1" + "@ckeditor/ckeditor5-code-block" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.1" + "@ckeditor/ckeditor5-easy-image" "47.6.1" + "@ckeditor/ckeditor5-editor-balloon" "47.6.1" + "@ckeditor/ckeditor5-editor-classic" "47.6.1" + "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" + "@ckeditor/ckeditor5-editor-inline" "47.6.1" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" + "@ckeditor/ckeditor5-emoji" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-enter" "47.6.1" + "@ckeditor/ckeditor5-essentials" "47.6.1" + "@ckeditor/ckeditor5-find-and-replace" "47.6.1" + "@ckeditor/ckeditor5-font" "47.6.1" + "@ckeditor/ckeditor5-fullscreen" "47.6.1" + "@ckeditor/ckeditor5-heading" "47.6.1" + "@ckeditor/ckeditor5-highlight" "47.6.1" + "@ckeditor/ckeditor5-horizontal-line" "47.6.1" + "@ckeditor/ckeditor5-html-embed" "47.6.1" + "@ckeditor/ckeditor5-html-support" "47.6.1" + "@ckeditor/ckeditor5-icons" "47.6.1" + "@ckeditor/ckeditor5-image" "47.6.1" + "@ckeditor/ckeditor5-indent" "47.6.1" + "@ckeditor/ckeditor5-language" "47.6.1" + "@ckeditor/ckeditor5-link" "47.6.1" + "@ckeditor/ckeditor5-list" "47.6.1" + "@ckeditor/ckeditor5-markdown-gfm" "47.6.1" + "@ckeditor/ckeditor5-media-embed" "47.6.1" + "@ckeditor/ckeditor5-mention" "47.6.1" + "@ckeditor/ckeditor5-minimap" "47.6.1" + "@ckeditor/ckeditor5-page-break" "47.6.1" + "@ckeditor/ckeditor5-paragraph" "47.6.1" + "@ckeditor/ckeditor5-paste-from-office" "47.6.1" + "@ckeditor/ckeditor5-remove-format" "47.6.1" + "@ckeditor/ckeditor5-restricted-editing" "47.6.1" + "@ckeditor/ckeditor5-select-all" "47.6.1" + "@ckeditor/ckeditor5-show-blocks" "47.6.1" + "@ckeditor/ckeditor5-source-editing" "47.6.1" + "@ckeditor/ckeditor5-special-characters" "47.6.1" + "@ckeditor/ckeditor5-style" "47.6.1" + "@ckeditor/ckeditor5-table" "47.6.1" + "@ckeditor/ckeditor5-theme-lark" "47.6.1" + "@ckeditor/ckeditor5-typing" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-undo" "47.6.1" + "@ckeditor/ckeditor5-upload" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-watchdog" "47.6.1" + "@ckeditor/ckeditor5-widget" "47.6.1" + "@ckeditor/ckeditor5-word-count" "47.6.1" cli-cursor@^5.0.0: version "5.0.0" @@ -3542,10 +3572,10 @@ es-module-lexer@^2.0.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== -es-toolkit@1.45.1: - version "1.45.1" - resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.45.1.tgz#21b28b2bd43178fd4c9c937c445d5bcaccce907b" - integrity sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw== +es-toolkit@1.39.5: + version "1.39.5" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.39.5.tgz#ee2a78a66aafb76c7345af0ea8c06722c78ef1fd" + integrity sha512-z9V0qU4lx1TBXDNFWfAASWk6RNU6c6+TJBKE+FLIg8u0XJ6Yw58Hi0yX8ftEouj6p1QARRlXLFfHbIli93BdQQ== esbuild-loader@^4.0.0: version "4.4.3" From f12f808b34ede47be55eca52c672099767fa01b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 22:47:25 +0200 Subject: [PATCH 030/108] Upgraded dependencies --- composer.lock | 53 ++++++++++++++++++++++++++++++--------------------- yarn.lock | 30 ++++++++++++++--------------- 2 files changed, 46 insertions(+), 37 deletions(-) diff --git a/composer.lock b/composer.lock index daf3426c..ace1bf0e 100644 --- a/composer.lock +++ b/composer.lock @@ -751,24 +751,27 @@ }, { "name": "amphp/serialization", - "version": "v1.0.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/amphp/serialization.git", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0", + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "phpunit/phpunit": "^9 || ^8 || ^7" + "amphp/php-cs-fixer-config": "^2", + "ext-json": "*", + "ext-zlib": "*", + "phpunit/phpunit": "^9", + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -803,9 +806,15 @@ ], "support": { "issues": "https://github.com/amphp/serialization/issues", - "source": "https://github.com/amphp/serialization/tree/master" + "source": "https://github.com/amphp/serialization/tree/v1.1.0" }, - "time": "2020-03-25T21:39:07+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2026-04-05T15:59:53+00:00" }, { "name": "amphp/socket", @@ -19171,21 +19180,21 @@ }, { "name": "rector/rector", - "version": "2.3.9", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4" + "reference": "a51dfddbf6a29ed9fbf6e8410fc90c1608df1b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/917842143fd9f5331a2adefc214b8d7143bd32c4", - "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/a51dfddbf6a29ed9fbf6e8410fc90c1608df1b5d", + "reference": "a51dfddbf6a29ed9fbf6e8410fc90c1608df1b5d", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.40" + "phpstan/phpstan": "^2.1.41" }, "conflict": { "rector/rector-doctrine": "*", @@ -19219,7 +19228,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.9" + "source": "https://github.com/rectorphp/rector/tree/2.4.0" }, "funding": [ { @@ -19227,7 +19236,7 @@ "type": "github" } ], - "time": "2026-03-16T09:43:55+00:00" + "time": "2026-04-04T07:37:45+00:00" }, { "name": "roave/security-advisories", @@ -19235,12 +19244,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "958bc6ccdb194912236265e4f36256e55bb0c9da" + "reference": "db78064456eb735e368677828095fb7fe5aeda6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/958bc6ccdb194912236265e4f36256e55bb0c9da", - "reference": "958bc6ccdb194912236265e4f36256e55bb0c9da", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/db78064456eb735e368677828095fb7fe5aeda6f", + "reference": "db78064456eb735e368677828095fb7fe5aeda6f", "shasum": "" }, "conflict": { @@ -19661,7 +19670,7 @@ "knplabs/knp-snappy": "<=1.4.2", "kohana/core": "<3.3.3", "koillection/koillection": "<1.6.12", - "krayin/laravel-crm": "<=1.3", + "krayin/laravel-crm": "<=2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", @@ -19924,7 +19933,7 @@ "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", - "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5-dev", "rudloff/alltube": "<3.0.3", "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", @@ -20277,7 +20286,7 @@ "type": "tidelift" } ], - "time": "2026-04-03T04:48:53+00:00" + "time": "2026-04-04T07:24:55+00:00" }, { "name": "sebastian/cli-parser", diff --git a/yarn.lock b/yarn.lock index e627772e..6e6118f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2720,9 +2720,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.10.12: - version "2.10.14" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.14.tgz#d25463733a8f80bb59ab9f797c902dc88832d47c" - integrity sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA== + version "2.10.15" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.15.tgz#775e7f7237bb1117da66f4388539f57168815104" + integrity sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ== big.js@^5.2.2: version "5.2.2" @@ -2850,9 +2850,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782: - version "1.0.30001784" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz#bdf9733a0813ccfb5ab4d02f2127e62ee4c6b718" - integrity sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw== + version "1.0.30001785" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001785.tgz#31f8e3ec1059430d2a7b04fff44c27672c4482df" + integrity sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ== ccount@^2.0.0: version "2.0.1" @@ -4439,9 +4439,9 @@ jszip@^3.2.0: setimmediate "^1.0.5" katex@^0.16.0: - version "0.16.44" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.44.tgz#fcd7c25803d999f17780bfefe859993d083fb4b6" - integrity sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ== + version "0.16.45" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.45.tgz#ba60d39c54746b6b8d39ce0e7f6eace07143149c" + integrity sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA== dependencies: commander "^8.3.0" @@ -4594,9 +4594,9 @@ marked-mangle@^1.0.1: integrity sha512-bRrqNcfU9v3iRECb7YPvA+/xKZMjHojd9R92YwHbFjdPQ+Wc7vozkbGKAv4U8AUl798mNUuY3DTBQkedsV3TeQ== marked@^17.0.1: - version "17.0.5" - resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.5.tgz#8fc6878a439463a007b05d346d2ad50a87ec3f0e" - integrity sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg== + version "17.0.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.6.tgz#2a97586a272d3be5880f198e020b74ad27cf86ba" + integrity sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA== mdast-util-find-and-replace@^3.0.0: version "3.0.2" @@ -5957,9 +5957,9 @@ regjsgen@^0.8.0: integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== regjsparser@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" - integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + version "0.13.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.1.tgz#0593cbacb27527927692030928ae4d3b878d6f8d" + integrity sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw== dependencies: jsesc "~3.1.0" From ad35ae6e9e0d197b4c1226e12352c05daff96b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 23:07:24 +0200 Subject: [PATCH 031/108] Decorate hte attachment download and generic web provider with the NoPrivateNetworkHttpClient This is for security hardening to prevent SSRF attacks --- src/Services/Attachments/AttachmentSubmitHandler.php | 8 ++++++-- .../InfoProviderSystem/Providers/GenericWebProvider.php | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Services/Attachments/AttachmentSubmitHandler.php b/src/Services/Attachments/AttachmentSubmitHandler.php index 81a83f0c..f83b7027 100644 --- a/src/Services/Attachments/AttachmentSubmitHandler.php +++ b/src/Services/Attachments/AttachmentSubmitHandler.php @@ -44,6 +44,7 @@ use App\Exceptions\AttachmentDownloadException; use App\Settings\SystemSettings\AttachmentsSettings; use Hshn\Base64EncodedFile\HttpFoundation\File\Base64EncodedFile; use Hshn\Base64EncodedFile\HttpFoundation\File\UploadedBase64EncodedFile; +use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient; use const DIRECTORY_SEPARATOR; use InvalidArgumentException; use RuntimeException; @@ -95,6 +96,8 @@ class AttachmentSubmitHandler UserAttachment::class => 'user', LabelAttachment::class => 'label_profile', ]; + + $this->httpClient = new NoPrivateNetworkHttpClient($this->httpClient); } /** @@ -373,6 +376,7 @@ class AttachmentSubmitHandler ], ]; + $response = $this->httpClient->request('GET', $url, $opts); //Digikey wants TLSv1.3, so try again with that if we get a 403 if ($response->getStatusCode() === 403) { @@ -434,8 +438,8 @@ class AttachmentSubmitHandler $new_path = $this->pathResolver->realPathToPlaceholder($new_path); //Save the path to the attachment $attachment->setInternalPath($new_path); - } catch (TransportExceptionInterface) { - throw new AttachmentDownloadException('Transport error!'); + } catch (TransportExceptionInterface $exception) { + throw new AttachmentDownloadException('Transport error: '.$exception->getMessage()); } return $attachment; diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index e20264b3..b5a150f8 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -42,6 +42,7 @@ use Brick\Schema\Interfaces\Thing; use Brick\Schema\SchemaReader; use Brick\Schema\SchemaTypeList; use Symfony\Component\DomCrawler\Crawler; +use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient; use Symfony\Contracts\HttpClient\HttpClientInterface; class GenericWebProvider implements InfoProviderInterface @@ -55,7 +56,8 @@ class GenericWebProvider implements InfoProviderInterface private readonly ProviderRegistry $providerRegistry, private readonly PartInfoRetriever $infoRetriever, ) { - $this->httpClient = (new RandomizeUseragentHttpClient($httpClient))->withOptions( + //Use NoPrivateNetworkHttpClient to prevent SSRF vulnerabilities, and RandomizeUseragentHttpClient to make it harder for servers to block us + $this->httpClient = (new RandomizeUseragentHttpClient(new NoPrivateNetworkHttpClient($httpClient)))->withOptions( [ 'timeout' => 15, ] From 7d8a7ab47154bd5905d0de176dfcdba53bf5567f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 23:14:18 +0200 Subject: [PATCH 032/108] Allow to disable the NoPrivateNetwork protection for attachment downloads via an env variable --- .env | 4 ++++ config/parameters.yaml | 2 ++ docs/configuration.md | 1 + src/Services/Attachments/AttachmentSubmitHandler.php | 7 ++++++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.env b/.env index 447ff5de..79bdcefe 100644 --- a/.env +++ b/.env @@ -121,6 +121,10 @@ SAML_SP_PRIVATE_KEY="MIIE..." # In demo mode things it is not possible for a user to change his password and his settings. DEMO_MODE=0 +# When this is set to 1, users can make Part-DB directly download a file specified as a URL from the local network and create it as a local file. +# This allows users access to all resources available in the local network, which could be a security risk, so use this only if you trust your users and have a secure local network. +ALLOW_ATTACHMENT_DOWNLOADS_FROM_LOCALNETWORK=0 + # Change this to true, if no url rewriting (like mod_rewrite for Apache) is available # In that case all URL contains the index.php front controller in URL NO_URL_REWRITE_AVAILABLE=0 diff --git a/config/parameters.yaml b/config/parameters.yaml index b79e2b88..b1aa5314 100644 --- a/config/parameters.yaml +++ b/config/parameters.yaml @@ -105,6 +105,8 @@ parameters: env(DATABASE_EMULATE_NATURAL_SORT): 0 + env(ALLOW_ATTACHMENT_DOWNLOADS_FROM_LOCALNETWORK): 0 + ###################################################################################################################### # Bulk Info Provider Import Configuration ###################################################################################################################### diff --git a/docs/configuration.md b/docs/configuration.md index a2f585a1..7ba716c6 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -86,6 +86,7 @@ bundled with Part-DB. Set `DATABASE_MYSQL_SSL_VERIFY_CERT` if you want to accept * `ATTACHMENT_DOWNLOAD_BY_DEFAULT`: When this is set to 1, the "download external file" checkbox is checked by default when adding a new attachment. Otherwise, it is unchecked by default. Use this if you wanna download all attachments locally by default. Attachment download is only possible, when `ALLOW_ATTACHMENT_DOWNLOADS` is set to 1. +* `ALLOW_ATTACHMENT_DOWNLOADS_FROM_LOCALNETWORK` (default `0`): When this is set to 1, users can make Part-DB directly download a file specified as a URL from the local network and create it as a local file. This allows users access to all resources available in the local network, which could be a security risk, so use this only if you trust your users and have a secure local network. * `ATTACHMENT_SHOW_HTML_FILES`: When enabled, user uploaded HTML attachments can be viewed directly in the browser. Many potential malicious functions are restricted, still this is a potential security risk and should only be enabled, if you trust the users who can upload files. When set to 0, HTML files are rendered as plain text. diff --git a/src/Services/Attachments/AttachmentSubmitHandler.php b/src/Services/Attachments/AttachmentSubmitHandler.php index f83b7027..25f6142f 100644 --- a/src/Services/Attachments/AttachmentSubmitHandler.php +++ b/src/Services/Attachments/AttachmentSubmitHandler.php @@ -44,6 +44,7 @@ use App\Exceptions\AttachmentDownloadException; use App\Settings\SystemSettings\AttachmentsSettings; use Hshn\Base64EncodedFile\HttpFoundation\File\Base64EncodedFile; use Hshn\Base64EncodedFile\HttpFoundation\File\UploadedBase64EncodedFile; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient; use const DIRECTORY_SEPARATOR; use InvalidArgumentException; @@ -77,6 +78,8 @@ class AttachmentSubmitHandler protected FileTypeFilterTools $filterTools, protected AttachmentsSettings $settings, protected readonly SVGSanitizer $SVGSanitizer, + #[Autowire(env: "bool:ALLOW_ATTACHMENT_DOWNLOADS_FROM_LOCALNETWORK")] + private readonly bool $allow_local_network_downloads = false, ) { //The mapping used to determine which folder will be used for an attachment type @@ -97,7 +100,9 @@ class AttachmentSubmitHandler LabelAttachment::class => 'label_profile', ]; - $this->httpClient = new NoPrivateNetworkHttpClient($this->httpClient); + if (!$this->allow_local_network_downloads) { + $this->httpClient = new NoPrivateNetworkHttpClient($this->httpClient); + } } /** From 57ef3e06a78a67d6db0b17c3a8df34ca87afc61d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 23:14:50 +0200 Subject: [PATCH 033/108] Bump codecov/codecov-action from 5 to 6 (#1334) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v5...v6) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index efd5c3d3..5b756228 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -129,7 +129,7 @@ jobs: run: ./bin/phpunit --coverage-clover=coverage.xml - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@v6 with: env_vars: PHP_VERSION,DB_TYPE token: ${{ secrets.CODECOV_TOKEN }} From 05b1965957c651c6a8b57d1648a983e96547b305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 23:45:09 +0200 Subject: [PATCH 034/108] Use truncatate purging during load fixtures to fix compatibility for postgres --- src/Command/LoadFixturesCommand.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Command/LoadFixturesCommand.php b/src/Command/LoadFixturesCommand.php index d01d19c3..98052ba6 100644 --- a/src/Command/LoadFixturesCommand.php +++ b/src/Command/LoadFixturesCommand.php @@ -56,13 +56,16 @@ class LoadFixturesCommand extends Command } $factory = new ResetAutoIncrementPurgerFactory(); - $purger = $factory->createForEntityManager(null, $this->entityManager); + + //Use truncate purging to fix compatibility with postgresql + $purger = $factory->createForEntityManager(null, $this->entityManager, purgeWithTruncate: true); $purger->purge(); //Afterwards run the load fixtures command as normal, but with the --append option $new_input = new ArrayInput([ 'command' => 'doctrine:fixtures:load', + '--purge-with-truncate' => true, '--append' => true, ]); @@ -70,4 +73,4 @@ class LoadFixturesCommand extends Command return $returnCode ?? Command::FAILURE; } -} \ No newline at end of file +} From 2a6e5435e1b985d62855baef617cadb526d63c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 23:51:39 +0200 Subject: [PATCH 035/108] Use bookworm version of dunglas frankenphp base image to fix docker building --- Dockerfile-frankenphp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile-frankenphp b/Dockerfile-frankenphp index 4bf9eeeb..bdf9c1fd 100644 --- a/Dockerfile-frankenphp +++ b/Dockerfile-frankenphp @@ -62,7 +62,7 @@ RUN yarn build RUN yarn cache clean && rm -rf node_modules/ # FrankenPHP base stage -FROM dunglas/frankenphp:1-php8.4 AS frankenphp_upstream +FROM dunglas/frankenphp:1-php8.4-bookworm AS frankenphp_upstream ARG TARGETARCH RUN --mount=type=cache,id=apt-cache-$TARGETARCH,target=/var/cache/apt \ --mount=type=cache,id=apt-lists-$TARGETARCH,target=/var/lib/apt/lists \ From cee7e2a0779340d0235b8dfca6369a8c0803afae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 5 Apr 2026 23:55:07 +0200 Subject: [PATCH 036/108] Fixed phpstan issues --- src/Form/Settings/TypeSynonymRowType.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Form/Settings/TypeSynonymRowType.php b/src/Form/Settings/TypeSynonymRowType.php index f3b8f0b6..ffff14fa 100644 --- a/src/Form/Settings/TypeSynonymRowType.php +++ b/src/Form/Settings/TypeSynonymRowType.php @@ -139,7 +139,7 @@ class TypeSynonymRowType extends AbstractType */ private function getPreferredLocales(): array { - $fromSettings = $this->localizationSettings->languageMenuEntries ?? []; + $fromSettings = $this->localizationSettings->languageMenuEntries; return !empty($fromSettings) ? array_values($fromSettings) : array_values($this->preferredLanguagesParam); } From d25ac2622e3ecded2292718984713538362c0f5e Mon Sep 17 00:00:00 2001 From: Albert Koczy Date: Mon, 6 Apr 2026 14:42:54 +0200 Subject: [PATCH 037/108] Fix creating parts from TME if the SPN contains percent signs (#1337) * Fix creating TME parts with percent signs in SPN The SPN ends up in the URL, which later causes validation errors n the form. Solved by encoding the percent sign. * Add TME provider unit tests. --- .../Providers/TMEProvider.php | 6 +- .../Providers/TMEProviderTest.php | 391 ++++++++++++++++++ 2 files changed, 396 insertions(+), 1 deletion(-) create mode 100644 tests/Services/InfoProviderSystem/Providers/TMEProviderTest.php diff --git a/src/Services/InfoProviderSystem/Providers/TMEProvider.php b/src/Services/InfoProviderSystem/Providers/TMEProvider.php index 938bc7b3..93222517 100644 --- a/src/Services/InfoProviderSystem/Providers/TMEProvider.php +++ b/src/Services/InfoProviderSystem/Providers/TMEProvider.php @@ -280,9 +280,13 @@ class TMEProvider implements InfoProviderInterface, URLHandlerInfoProviderInterf { //If a URL starts with // we assume that it is a relative URL and we add the protocol if (str_starts_with($url, '//')) { - return 'https:' . $url; + $url = 'https:' . $url; } + //Encode bare % signs that are not already part of a valid percent-encoded sequence + //Fixes part numbers with % in them e.g. SMD0603-5K1-1% + $url = preg_replace('/%(?![0-9A-Fa-f]{2})/', '%25', $url); + return $url; } diff --git a/tests/Services/InfoProviderSystem/Providers/TMEProviderTest.php b/tests/Services/InfoProviderSystem/Providers/TMEProviderTest.php new file mode 100644 index 00000000..20fba523 --- /dev/null +++ b/tests/Services/InfoProviderSystem/Providers/TMEProviderTest.php @@ -0,0 +1,391 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Services\InfoProviderSystem\Providers; + +use App\Entity\Parts\ManufacturingStatus; +use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; +use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; +use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; +use App\Services\InfoProviderSystem\Providers\ProviderCapabilities; +use App\Services\InfoProviderSystem\Providers\TMEClient; +use App\Services\InfoProviderSystem\Providers\TMEProvider; +use App\Settings\InfoProviderSystem\TMESettings; +use App\Tests\SettingsTestHelper; +use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpClient\MockHttpClient; +use Symfony\Component\HttpClient\Response\MockResponse; + +final class TMEProviderTest extends TestCase +{ + private TMESettings $settings; + private TMEProvider $provider; + private MockHttpClient $httpClient; + + protected function setUp(): void + { + $this->httpClient = new MockHttpClient(); + $this->settings = SettingsTestHelper::createSettingsDummy(TMESettings::class); + // Use a short (anonymous-style) token so grossPrices is read from settings + $this->settings->apiToken = 'test_token_000000000000000000000000000000000000000'; + $this->settings->apiSecret = 'test_secret'; + $this->settings->currency = 'EUR'; + $this->settings->language = 'en'; + $this->settings->country = 'DE'; + $this->settings->grossPrices = false; + $this->provider = new TMEProvider(new TMEClient($this->httpClient, $this->settings), $this->settings); + } + + // --- Mock response helpers --- + // Only fields actually read by TMEProvider are included. + + private function mockProductList(array $products): MockResponse + { + return new MockResponse(json_encode([ + 'Status' => 'OK', + 'Data' => ['ProductList' => $products], + ])); + } + + private function mockFilesList(array $products): MockResponse + { + return new MockResponse(json_encode([ + 'Status' => 'OK', + 'Data' => ['ProductList' => $products], + ])); + } + + private function mockParametersList(array $products): MockResponse + { + return new MockResponse(json_encode([ + 'Status' => 'OK', + 'Data' => ['ProductList' => $products], + ])); + } + + private function mockPrices(string $currency, string $priceType, array $products): MockResponse + { + return new MockResponse(json_encode([ + 'Status' => 'OK', + 'Data' => [ + 'Currency' => $currency, + 'PriceType' => $priceType, + 'ProductList' => $products, + ], + ])); + } + + // --- Mock data --- + + private function smd0603Products(): MockResponse + { + return $this->mockProductList([[ + 'Symbol' => 'SMD0603-5K1-1%', + 'OriginalSymbol' => '0603SAF5101T5E', + 'Producer' => 'ROYALOHM', + 'Description' => 'Resistor: thick film; SMD; 0603; 5.1kΩ; 0.1W; ±1%; 50V; -55÷155°C', + 'Category' => 'SMD resistors', + 'Photo' => '//ce8dc832c.cloudimg.io/v7/_cdn_/E9/C2/B0/00/0/732318_1.jpg', + 'ProductStatusList' => [], + 'ProductInformationPage' => '//www.tme.eu/en/details/smd0603-5k1-1%/smd-resistors/royalohm/0603saf5101t5e/', + 'Weight' => 0.021, + 'WeightUnit' => 'g', + ]]); + } + + private function smd0603Files(): MockResponse + { + return $this->mockFilesList([[ + 'Symbol' => 'SMD0603-5K1-1%', + 'Files' => [ + 'AdditionalPhotoList' => [], + 'DocumentList' => [ + ['DocumentUrl' => '//www.tme.eu/Document/b315665a56acbc42df513c99b390ad98/ROYALOHM-THICKFILM.pdf'], + ['DocumentUrl' => '//www.tme.eu/Document/c283990e907c122bb808207d1578ac7f/POWER_RATING-DTE.pdf'], + ], + ], + ]]); + } + + private function smd0603Parameters(): MockResponse + { + return $this->mockParametersList([[ + 'Symbol' => 'SMD0603-5K1-1%', + 'ParameterList' => [ + ['ParameterId' => 34, 'ParameterName' => 'Type of resistor', 'ParameterValue' => 'thick film'], + ['ParameterId' => 35, 'ParameterName' => 'Case - mm', 'ParameterValue' => '1608'], + ['ParameterId' => 38, 'ParameterName' => 'Resistance', 'ParameterValue' => '5.1kΩ'], + ['ParameterId' => 39, 'ParameterName' => 'Tolerance', 'ParameterValue' => '±1%'], + ['ParameterId' => 120, 'ParameterName' => 'Operating voltage', 'ParameterValue' => '50V'], + ], + ]]); + } + + private function smd0603Prices(): MockResponse + { + return $this->mockPrices('EUR', 'NET', [[ + 'Symbol' => 'SMD0603-5K1-1%', + 'PriceList' => [ + ['Amount' => 100, 'PriceValue' => 0.01077], + ['Amount' => 1000, 'PriceValue' => 0.00291], + ['Amount' => 5000, 'PriceValue' => 0.00150], + ], + ]]); + } + + private function etqp3mProducts(): MockResponse + { + return $this->mockProductList([[ + 'Symbol' => 'ETQP3M6R8KVP', + 'OriginalSymbol' => 'ETQP3M6R8KVP', + 'Producer' => 'PANASONIC', + 'Description' => 'Inductor: wire; SMD; 6.8uH; 2.9A; R: 65.7mΩ; ±20%; ETQP3M; 5.5x5x3mm', + 'Category' => 'Inductors', + 'Photo' => '//ce8dc832c.cloudimg.io/v7/_cdn_/9E/27/A0/00/0/684777_1.jpg', + 'ProductStatusList' => [], + 'ProductInformationPage' => '//www.tme.eu/en/details/etqp3m6r8kvp/inductors/panasonic/', + 'Weight' => 0.44, + 'WeightUnit' => 'g', + ]]); + } + + private function etqp3mFiles(): MockResponse + { + return $this->mockFilesList([[ + 'Symbol' => 'ETQP3M6R8KVP', + 'Files' => [ + 'AdditionalPhotoList' => [], + 'DocumentList' => [ + ['DocumentUrl' => '//www.tme.eu/Document/50a845881f09d8a2248350946e11df38/AGL0000C63.pdf'], + ['DocumentUrl' => '//www.tme.eu/Document/8480690a42fa577214e35e33d3fc8d77/ETQP3M100KVN-LNK.txt'], + ], + ], + ]]); + } + + private function etqp3mParameters(): MockResponse + { + return $this->mockParametersList([[ + 'Symbol' => 'ETQP3M6R8KVP', + 'ParameterList' => [ + ['ParameterId' => 566, 'ParameterName' => 'Inductance', 'ParameterValue' => '6.8µH'], + ['ParameterId' => 370, 'ParameterName' => 'Operating current', 'ParameterValue' => '2.9A'], + ['ParameterId' => 39, 'ParameterName' => 'Tolerance', 'ParameterValue' => '±20%'], + ], + ]]); + } + + private function etqp3mPrices(): MockResponse + { + return $this->mockPrices('EUR', 'NET', [[ + 'Symbol' => 'ETQP3M6R8KVP', + 'PriceList' => [ + ['Amount' => 1, 'PriceValue' => 0.589], + ['Amount' => 5, 'PriceValue' => 0.429], + ['Amount' => 10, 'PriceValue' => 0.399], + ], + ]]); + } + + // --- Tests --- + + public function testGetProviderInfo(): void + { + $info = $this->provider->getProviderInfo(); + + $this->assertIsArray($info); + $this->assertArrayHasKey('name', $info); + $this->assertArrayHasKey('description', $info); + $this->assertArrayHasKey('url', $info); + $this->assertEquals('TME', $info['name']); + $this->assertEquals('https://tme.eu/', $info['url']); + } + + public function testGetProviderKey(): void + { + $this->assertSame('tme', $this->provider->getProviderKey()); + } + + public function testIsActiveWithCredentials(): void + { + $this->assertTrue($this->provider->isActive()); + } + + public function testIsActiveWithoutCredentials(): void + { + $this->settings->apiToken = null; + $provider = new TMEProvider(new TMEClient($this->httpClient, $this->settings), $this->settings); + $this->assertFalse($provider->isActive()); + } + + public function testGetCapabilities(): void + { + $capabilities = $this->provider->getCapabilities(); + + $this->assertIsArray($capabilities); + $this->assertContains(ProviderCapabilities::BASIC, $capabilities); + $this->assertContains(ProviderCapabilities::PICTURE, $capabilities); + $this->assertContains(ProviderCapabilities::DATASHEET, $capabilities); + $this->assertContains(ProviderCapabilities::PRICE, $capabilities); + $this->assertContains(ProviderCapabilities::FOOTPRINT, $capabilities); + } + + public function testGetHandledDomains(): void + { + $this->assertContains('tme.eu', $this->provider->getHandledDomains()); + } + + public function testGetIDFromURL(): void + { + $this->assertSame('fi321_se', $this->provider->getIDFromURL('https://www.tme.eu/de/details/fi321_se/kuhler/alutronic/')); + $this->assertSame('smd0603-5k1-1%25', $this->provider->getIDFromURL('https://www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/')); + $this->assertNull($this->provider->getIDFromURL('https://www.tme.eu/en/')); + } + + public function testSearchByKeyword(): void + { + $this->httpClient->setResponseFactory([$this->smd0603Products()]); + + $results = $this->provider->searchByKeyword('SMD0603-5K1-1%'); + + $this->assertIsArray($results); + $this->assertCount(1, $results); + $this->assertInstanceOf(SearchResultDTO::class, $results[0]); + $this->assertSame('SMD0603-5K1-1%', $results[0]->provider_id); + $this->assertSame('0603SAF5101T5E', $results[0]->name); + $this->assertSame('ROYALOHM', $results[0]->manufacturer); + $this->assertSame('SMD resistors', $results[0]->category); + $this->assertSame(ManufacturingStatus::ACTIVE, $results[0]->manufacturing_status); + $this->assertSame( + 'https://www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/', + $results[0]->provider_url + ); + } + + public function testGetDetailsWithPercentInPartNumber(): void + { + $this->httpClient->setResponseFactory([ + $this->smd0603Products(), + $this->smd0603Files(), + $this->smd0603Parameters(), + $this->smd0603Prices(), + ]); + + $result = $this->provider->getDetails('SMD0603-5K1-1%'); + + $this->assertInstanceOf(PartDetailDTO::class, $result); + $this->assertSame('SMD0603-5K1-1%', $result->provider_id); + $this->assertSame('0603SAF5101T5E', $result->name); + $this->assertSame('Resistor: thick film; SMD; 0603; 5.1kΩ; 0.1W; ±1%; 50V; -55÷155°C', $result->description); + $this->assertSame('ROYALOHM', $result->manufacturer); + $this->assertSame('0603SAF5101T5E', $result->mpn); + $this->assertSame('SMD resistors', $result->category); + $this->assertSame(ManufacturingStatus::ACTIVE, $result->manufacturing_status); + $this->assertSame(0.021, $result->mass); + $this->assertSame('1608', $result->footprint); + $this->assertSame( + 'https://www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/', + $result->provider_url + ); + + $this->assertCount(2, $result->datasheets); + $this->assertSame('https://www.tme.eu/Document/b315665a56acbc42df513c99b390ad98/ROYALOHM-THICKFILM.pdf', $result->datasheets[0]->url); + $this->assertCount(0, $result->images); + + $this->assertCount(1, $result->vendor_infos); + $vendorInfo = $result->vendor_infos[0]; + $this->assertInstanceOf(PurchaseInfoDTO::class, $vendorInfo); + $this->assertSame('TME', $vendorInfo->distributor_name); + $this->assertSame('SMD0603-5K1-1%', $vendorInfo->order_number); + $this->assertSame( + 'https://www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/', + $vendorInfo->product_url + ); + $this->assertCount(3, $vendorInfo->prices); + $this->assertSame(100.0, $vendorInfo->prices[0]->minimum_discount_amount); + $this->assertSame('0.01077', $vendorInfo->prices[0]->price); + $this->assertSame('EUR', $vendorInfo->prices[0]->currency_iso_code); + $this->assertFalse($vendorInfo->prices[0]->includes_tax); + + $this->assertCount(5, $result->parameters); + } + + public function testGetDetailsForEtqp3m6r8kvp(): void + { + $this->httpClient->setResponseFactory([ + $this->etqp3mProducts(), + $this->etqp3mFiles(), + $this->etqp3mParameters(), + $this->etqp3mPrices(), + ]); + + $result = $this->provider->getDetails('ETQP3M6R8KVP'); + + $this->assertInstanceOf(PartDetailDTO::class, $result); + $this->assertSame('ETQP3M6R8KVP', $result->provider_id); + $this->assertSame('ETQP3M6R8KVP', $result->name); + $this->assertSame('Inductor: wire; SMD; 6.8uH; 2.9A; R: 65.7mΩ; ±20%; ETQP3M; 5.5x5x3mm', $result->description); + $this->assertSame('PANASONIC', $result->manufacturer); + $this->assertSame('ETQP3M6R8KVP', $result->mpn); + $this->assertSame('Inductors', $result->category); + $this->assertSame(ManufacturingStatus::ACTIVE, $result->manufacturing_status); + $this->assertSame(0.44, $result->mass); + $this->assertNull($result->footprint); + $this->assertSame('https://www.tme.eu/en/details/etqp3m6r8kvp/inductors/panasonic/', $result->provider_url); + + $this->assertCount(2, $result->datasheets); + $this->assertSame('https://www.tme.eu/Document/50a845881f09d8a2248350946e11df38/AGL0000C63.pdf', $result->datasheets[0]->url); + $this->assertCount(0, $result->images); + + $this->assertCount(1, $result->vendor_infos); + $vendorInfo = $result->vendor_infos[0]; + $this->assertSame('TME', $vendorInfo->distributor_name); + $this->assertSame('ETQP3M6R8KVP', $vendorInfo->order_number); + $this->assertSame('https://www.tme.eu/en/details/etqp3m6r8kvp/inductors/panasonic/', $vendorInfo->product_url); + $this->assertCount(3, $vendorInfo->prices); + $this->assertSame(1.0, $vendorInfo->prices[0]->minimum_discount_amount); + $this->assertSame('0.589', $vendorInfo->prices[0]->price); + $this->assertSame('EUR', $vendorInfo->prices[0]->currency_iso_code); + $this->assertFalse($vendorInfo->prices[0]->includes_tax); + + $this->assertCount(3, $result->parameters); + } + + public function testNormalizeURLEncodesBarePctSign(): void + { + $method = (new \ReflectionClass($this->provider))->getMethod('normalizeURL'); + + $this->assertSame( + 'https://www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/', + $method->invoke($this->provider, '//www.tme.eu/en/details/smd0603-5k1-1%/smd-resistors/royalohm/0603saf5101t5e/') + ); + $this->assertSame( + 'https://www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/', + $method->invoke($this->provider, '//www.tme.eu/en/details/smd0603-5k1-1%25/smd-resistors/royalohm/0603saf5101t5e/') + ); + $this->assertSame( + 'https://www.tme.eu/en/details/etqp3m6r8kvp/inductors/panasonic/', + $method->invoke($this->provider, '//www.tme.eu/en/details/etqp3m6r8kvp/inductors/panasonic/') + ); + $this->assertSame('https://example.com/path', $method->invoke($this->provider, 'https://example.com/path')); + } +} From 0140c9a7b909f00137e3428da94f338cf190949b Mon Sep 17 00:00:00 2001 From: Marc Date: Mon, 6 Apr 2026 15:15:15 +0200 Subject: [PATCH 038/108] Fix #1305: Enable BOM sorting on part fields (Storage location, Manufacturing status) and fix BOM table query/pagination issues (#1338) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix identation * Allow ordering of column Storage Locations in BOM fix-#1152 * Fix "[Semantical Error] line 0, col 274 near 'storageLocations.name))': Error: 'storageLocations' is not defined." when trying to sort by column Storage Locations * Try to fix "Iterate with fetch join in class App\Entity\Parts\PartLot using association part not allowed." when opening BOM * Revert "Try to fix "Iterate with fetch join in class App\Entity\Parts\PartLot using association part not allowed." when opening BOM" This reverts commit 5c5c7cece179df07d3c5b16562d705e9ff9608fb. * Try to fix "Iterate with fetch join in class App\Entity\Parts\PartLot using association part not allowed." when opening BOM 2nd try * Remove alias to fix: Unknown named parameter $alias * Reformat code to allow easier diff between ProjectBomEntriesDataTable.php and PartsDataTable.php * Try if 'data' es really needed as it is not used in PartDataTable.php * Use TwoStepORMAdapter to enable sorting based on other columns like storage location, manufacturing status * Add readonly hint to projectBom query --------- Co-authored-by: root Co-authored-by: Jan Böhmer --- src/DataTables/ProjectBomEntriesDataTable.php | 107 ++++++++++++++---- 1 file changed, 84 insertions(+), 23 deletions(-) diff --git a/src/DataTables/ProjectBomEntriesDataTable.php b/src/DataTables/ProjectBomEntriesDataTable.php index 0d05c248..04d8206b 100644 --- a/src/DataTables/ProjectBomEntriesDataTable.php +++ b/src/DataTables/ProjectBomEntriesDataTable.php @@ -1,8 +1,5 @@ . */ + +declare(strict_types=1); + namespace App\DataTables; +use App\DataTables\Adapters\TwoStepORMAdapter; use App\DataTables\Column\EntityColumn; use App\DataTables\Column\EnumColumn; use App\DataTables\Column\LocaleDateTimeColumn; use App\DataTables\Column\MarkdownColumn; use App\DataTables\Helpers\PartDataTableHelper; -use App\Entity\Attachments\Attachment; +use App\Doctrine\Helpers\FieldHelper; use App\Entity\Parts\Part; use App\Entity\Parts\ManufacturingStatus; use App\Entity\ProjectSystem\ProjectBOMEntry; use App\Services\ElementTypeNameGenerator; use App\Services\EntityURLGenerator; use App\Services\Formatters\AmountFormatter; +use Doctrine\ORM\AbstractQuery; +use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; use Omines\DataTablesBundle\Adapter\Doctrine\ORM\SearchCriteriaProvider; -use Omines\DataTablesBundle\Adapter\Doctrine\ORMAdapter; use Omines\DataTablesBundle\Column\TextColumn; use Omines\DataTablesBundle\DataTable; use Omines\DataTablesBundle\DataTableTypeInterface; @@ -44,9 +46,12 @@ use Symfony\Contracts\Translation\TranslatorInterface; class ProjectBomEntriesDataTable implements DataTableTypeInterface { - public function __construct(protected TranslatorInterface $translator, protected PartDataTableHelper $partDataTableHelper, - protected EntityURLGenerator $entityURLGenerator, protected AmountFormatter $amountFormatter) - { + public function __construct( + protected EntityURLGenerator $entityURLGenerator, + protected TranslatorInterface $translator, + protected AmountFormatter $amountFormatter, + protected PartDataTableHelper $partDataTableHelper + ) { } @@ -62,7 +67,7 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface return ''; } return $this->partDataTableHelper->renderPicture($context->getPart()); - }, + } ]) ->add('id', TextColumn::class, [ @@ -133,23 +138,24 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface ->add('category', EntityColumn::class, [ 'label' => $this->translator->trans('part.table.category'), 'property' => 'part.category', - 'orderField' => 'NATSORT(category.name)', + 'orderField' => 'NATSORT(category.name)' ]) ->add('footprint', EntityColumn::class, [ 'property' => 'part.footprint', 'label' => $this->translator->trans('part.table.footprint'), - 'orderField' => 'NATSORT(footprint.name)', + 'orderField' => 'NATSORT(footprint.name)' ]) ->add('manufacturer', EntityColumn::class, [ 'property' => 'part.manufacturer', 'label' => $this->translator->trans('part.table.manufacturer'), - 'orderField' => 'NATSORT(manufacturer.name)', + 'orderField' => 'NATSORT(manufacturer.name)' ]) ->add('manufacturing_status', EnumColumn::class, [ 'label' => $this->translator->trans('part.table.manufacturingStatus'), - 'data' => static fn(ProjectBOMEntry $context): ?ManufacturingStatus => $context->getPart()?->getManufacturingStatus(), + 'data' => static fn(ProjectBOMEntry $context): ?ManufacturingStatus => $context->getPart()?->getManufacturingStatus(), + 'orderField' => 'part.manufacturing_status', 'class' => ManufacturingStatus::class, 'render' => function (?ManufacturingStatus $status, ProjectBOMEntry $context): string { if ($status === null) { @@ -183,8 +189,10 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface return ''; } ]) - ->add('storageLocations', TextColumn::class, [ - 'label' => 'part.table.storeLocations', + ->add('storelocation', TextColumn::class, [ + 'label' => $this->translator->trans('part.table.storeLocations'), + //We need to use a aggregate function to get the first store location, as we have a one-to-many relation + 'orderField' => 'NATSORT(MIN(_storelocations.name))', 'visible' => false, 'render' => function ($value, ProjectBOMEntry $context) { if ($context->getPart() !== null) { @@ -207,11 +215,13 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface $dataTable->addOrderBy('name', DataTable::SORT_ASCENDING); - $dataTable->createAdapter(ORMAdapter::class, [ - 'entity' => Attachment::class, - 'query' => function (QueryBuilder $builder) use ($options): void { - $this->getQuery($builder, $options); + $dataTable->createAdapter(TwoStepORMAdapter::class, [ + 'entity' => ProjectBOMEntry::class, + 'hydrate' => AbstractQuery::HYDRATE_OBJECT, + 'filter_query' => function (QueryBuilder $builder) use ($options): void { + $this->getFilterQuery($builder, $options); }, + 'detail_query' => $this->getDetailQuery(...), 'criteria' => [ function (QueryBuilder $builder) use ($options): void { $this->buildCriteria($builder, $options); @@ -221,20 +231,71 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface ]); } - private function getQuery(QueryBuilder $builder, array $options): void + private function getFilterQuery(QueryBuilder $builder, array $options): void { - $builder->select('bom_entry') - ->addSelect('part') + $builder + ->select('bom_entry.id') ->from(ProjectBOMEntry::class, 'bom_entry') ->leftJoin('bom_entry.part', 'part') ->leftJoin('part.category', 'category') + ->leftJoin('part.partLots', '_partLots') + ->leftJoin('_partLots.storage_location', '_storelocations') ->leftJoin('part.footprint', 'footprint') ->leftJoin('part.manufacturer', 'manufacturer') + ->leftJoin('part.partCustomState', 'partCustomState') ->where('bom_entry.project = :project') ->setParameter('project', $options['project']) + ->addGroupBy('bom_entry') + ->addGroupBy('part') + ->addGroupBy('category') + ->addGroupBy('footprint') + ->addGroupBy('manufacturer') + ->addGroupBy('partCustomState') ; } + private function getDetailQuery(QueryBuilder $builder, array $filter_results): void + { + $ids = array_map(static fn (array $row) => $row['id'], $filter_results); + if ($ids === []) { + $ids = [-1]; + } + + $builder + ->select('bom_entry') + ->addSelect('part') + ->addSelect('category') + ->addSelect('partLots') + ->addSelect('storelocations') + ->addSelect('footprint') + ->addSelect('manufacturer') + ->addSelect('partCustomState') + ->from(ProjectBOMEntry::class, 'bom_entry') + ->leftJoin('bom_entry.part', 'part') + ->leftJoin('part.category', 'category') + ->leftJoin('part.partLots', 'partLots') + ->leftJoin('partLots.storage_location', 'storelocations') + ->leftJoin('part.footprint', 'footprint') + ->leftJoin('part.manufacturer', 'manufacturer') + ->leftJoin('part.partCustomState', 'partCustomState') + ->where('bom_entry.id IN (:ids)') + ->setParameter('ids', $ids) + ->addGroupBy('bom_entry') + ->addGroupBy('part') + ->addGroupBy('partLots') + ->addGroupBy('category') + ->addGroupBy('storelocations') + ->addGroupBy('footprint') + ->addGroupBy('manufacturer') + ->addGroupBy('partCustomState') + + ->setHint(Query::HINT_READ_ONLY, true) + ->setHint(Query::HINT_FORCE_PARTIAL_LOAD, false) + ; + + FieldHelper::addOrderByFieldParam($builder, 'bom_entry.id', 'ids'); + } + private function buildCriteria(QueryBuilder $builder, array $options): void { From 35dcb298e725f42fa71425bdaec12dd3ee95d151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 13 Apr 2026 22:26:46 +0200 Subject: [PATCH 039/108] Updated dependencies --- composer.lock | 237 ++++---- yarn.lock | 1542 +++++++++++++++++++++++++------------------------ 2 files changed, 900 insertions(+), 879 deletions(-) diff --git a/composer.lock b/composer.lock index ace1bf0e..8e509fbf 100644 --- a/composer.lock +++ b/composer.lock @@ -8556,16 +8556,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "5.5.0", + "version": "5.6.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "eecd31b885a1c8192f12738130f85bbc6e8906ba" + "reference": "9b90dee03deb0d28761479c4a3a06fba5f7e012e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/eecd31b885a1c8192f12738130f85bbc6e8906ba", - "reference": "eecd31b885a1c8192f12738130f85bbc6e8906ba", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/9b90dee03deb0d28761479c4a3a06fba5f7e012e", + "reference": "9b90dee03deb0d28761479c4a3a06fba5f7e012e", "shasum": "" }, "require": { @@ -8659,9 +8659,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.5.0" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.6.0" }, - "time": "2026-03-01T00:58:56+00:00" + "time": "2026-04-10T03:00:03+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -9345,16 +9345,16 @@ }, { "name": "rhukster/dom-sanitizer", - "version": "1.0.9", + "version": "1.0.10", "source": { "type": "git", "url": "https://github.com/rhukster/dom-sanitizer.git", - "reference": "17a16925a6113f51595607bd30f50af4034f078b" + "reference": "49a98046b708a4c92f754f5b0ef1720bb85142e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/17a16925a6113f51595607bd30f50af4034f078b", - "reference": "17a16925a6113f51595607bd30f50af4034f078b", + "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/49a98046b708a4c92f754f5b0ef1720bb85142e2", + "reference": "49a98046b708a4c92f754f5b0ef1720bb85142e2", "shasum": "" }, "require": { @@ -9384,9 +9384,9 @@ "description": "A simple but effective DOM/SVG/MathML Sanitizer for PHP 7.4+", "support": { "issues": "https://github.com/rhukster/dom-sanitizer/issues", - "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.9" + "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.10" }, - "time": "2026-03-31T20:54:47+00:00" + "time": "2026-04-10T17:00:11+00:00" }, { "name": "robrichards/xmlseclibs", @@ -13083,16 +13083,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -13142,7 +13142,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.34.0" }, "funding": [ { @@ -13162,20 +13162,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -13224,7 +13224,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.34.0" }, "funding": [ { @@ -13244,20 +13244,20 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" + "reference": "3510b63d07376b04e57e27e82607d468bb134f78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", - "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/3510b63d07376b04e57e27e82607d468bb134f78", + "reference": "3510b63d07376b04e57e27e82607d468bb134f78", "shasum": "" }, "require": { @@ -13312,7 +13312,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.34.0" }, "funding": [ { @@ -13332,11 +13332,11 @@ "type": "tidelift" } ], - "time": "2025-06-20T22:24:30+00:00" + "time": "2026-04-10T16:50:15+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -13399,7 +13399,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.34.0" }, "funding": [ { @@ -13423,7 +13423,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -13484,7 +13484,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.34.0" }, "funding": [ { @@ -13508,16 +13508,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", "shasum": "" }, "require": { @@ -13564,7 +13564,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.34.0" }, "funding": [ { @@ -13584,20 +13584,20 @@ "type": "tidelift" } ], - "time": "2025-07-08T02:45:35+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -13644,7 +13644,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.34.0" }, "funding": [ { @@ -13664,20 +13664,20 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { "name": "symfony/polyfill-php85", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" + "reference": "2c408a6bb0313e6001a83628dc5506100474254e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", - "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/2c408a6bb0313e6001a83628dc5506100474254e", + "reference": "2c408a6bb0313e6001a83628dc5506100474254e", "shasum": "" }, "require": { @@ -13724,7 +13724,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.34.0" }, "funding": [ { @@ -13744,20 +13744,20 @@ "type": "tidelift" } ], - "time": "2025-06-23T16:12:55+00:00" + "time": "2026-04-10T16:50:15+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", "shasum": "" }, "require": { @@ -13807,7 +13807,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.34.0" }, "funding": [ { @@ -13827,7 +13827,7 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/process", @@ -14957,16 +14957,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.34.0", + "version": "v2.35.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "d610a2e021cf63f955838b4bfe40da7e4cafe850" + "reference": "05af0259f201dbbd15c103bea289989a4b483b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/d610a2e021cf63f955838b4bfe40da7e4cafe850", - "reference": "d610a2e021cf63f955838b4bfe40da7e4cafe850", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/05af0259f201dbbd15c103bea289989a4b483b5b", + "reference": "05af0259f201dbbd15c103bea289989a4b483b5b", "shasum": "" }, "require": { @@ -15006,7 +15006,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.34.0" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.35.0" }, "funding": [ { @@ -15026,7 +15026,7 @@ "type": "tidelift" } ], - "time": "2026-03-21T22:29:11+00:00" + "time": "2026-03-22T22:21:50+00:00" }, { "name": "symfony/stopwatch", @@ -15735,16 +15735,16 @@ }, { "name": "symfony/ux-translator", - "version": "v2.34.0", + "version": "v2.35.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-translator.git", - "reference": "adf6c0919ece99acf5693240f4cb3d5ab84076f6" + "reference": "5a56d25237393e865e3df94a39d2c8f0ce94b50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-translator/zipball/adf6c0919ece99acf5693240f4cb3d5ab84076f6", - "reference": "adf6c0919ece99acf5693240f4cb3d5ab84076f6", + "url": "https://api.github.com/repos/symfony/ux-translator/zipball/5a56d25237393e865e3df94a39d2c8f0ce94b50c", + "reference": "5a56d25237393e865e3df94a39d2c8f0ce94b50c", "shasum": "" }, "require": { @@ -15792,7 +15792,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-translator/tree/v2.34.0" + "source": "https://github.com/symfony/ux-translator/tree/v2.35.0" }, "funding": [ { @@ -15812,25 +15812,25 @@ "type": "tidelift" } ], - "time": "2026-03-21T22:29:11+00:00" + "time": "2026-03-22T22:21:50+00:00" }, { "name": "symfony/ux-turbo", - "version": "v2.34.0", + "version": "v2.35.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "87511f621db238302a3bb819958a72feda27fc45" + "reference": "4309a4299f5f1b9b7ce4c13ed6d1b77a5472c216" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/87511f621db238302a3bb819958a72feda27fc45", - "reference": "87511f621db238302a3bb819958a72feda27fc45", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/4309a4299f5f1b9b7ce4c13ed6d1b77a5472c216", + "reference": "4309a4299f5f1b9b7ce4c13ed6d1b77a5472c216", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/stimulus-bundle": "^2.9.1" + "symfony/stimulus-bundle": "^2.9.1|^3.0" }, "conflict": { "symfony/flex": "<1.13" @@ -15855,7 +15855,7 @@ "symfony/security-core": "^5.4|^6.0|^7.0|^8.0", "symfony/stopwatch": "^5.4|^6.0|^7.0|^8.0", "symfony/twig-bundle": "^6.4|^7.0|^8.0", - "symfony/ux-twig-component": "^2.21", + "symfony/ux-twig-component": "^2.21|^3.0", "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0|^8.0" }, "type": "symfony-bundle", @@ -15895,7 +15895,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.34.0" + "source": "https://github.com/symfony/ux-turbo/tree/v2.35.0" }, "funding": [ { @@ -15915,7 +15915,7 @@ "type": "tidelift" } ], - "time": "2026-03-21T22:29:11+00:00" + "time": "2026-04-03T05:13:59+00:00" }, { "name": "symfony/validator", @@ -16491,16 +16491,16 @@ }, { "name": "tecnickcom/tc-lib-barcode", - "version": "2.4.29", + "version": "2.4.31", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-barcode.git", - "reference": "be76f91968bfab74949a3f937f78f02455597c85" + "reference": "f47ebaa990027cc12cea5af43e62d3ab8e860a5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/be76f91968bfab74949a3f937f78f02455597c85", - "reference": "be76f91968bfab74949a3f937f78f02455597c85", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/f47ebaa990027cc12cea5af43e62d3ab8e860a5d", + "reference": "f47ebaa990027cc12cea5af43e62d3ab8e860a5d", "shasum": "" }, "require": { @@ -16515,7 +16515,7 @@ "pdepend/pdepend": "2.16.2", "phpcompatibility/php-compatibility": "^10.0.0@dev", "phpmd/phpmd": "2.15.0", - "phpunit/phpunit": "13.0.5 || 12.5.14 || 11.5.55 || 10.5.63", + "phpunit/phpunit": "13.1.1 || 12.5.17 || 11.5.55 || 10.5.63", "squizlabs/php_codesniffer": "4.0.1" }, "type": "library", @@ -16580,7 +16580,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-barcode/issues", - "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.29" + "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.31" }, "funding": [ { @@ -16588,20 +16588,20 @@ "type": "custom" } ], - "time": "2026-03-30T17:05:24+00:00" + "time": "2026-04-11T16:55:36+00:00" }, { "name": "tecnickcom/tc-lib-color", - "version": "2.3.10", + "version": "2.3.12", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-color.git", - "reference": "cf018a88218262a64784032ecce14bfec480d3dd" + "reference": "d76454d5723379d73629f46114e4b69ec77175df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/cf018a88218262a64784032ecce14bfec480d3dd", - "reference": "cf018a88218262a64784032ecce14bfec480d3dd", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/d76454d5723379d73629f46114e4b69ec77175df", + "reference": "d76454d5723379d73629f46114e4b69ec77175df", "shasum": "" }, "require": { @@ -16612,7 +16612,7 @@ "pdepend/pdepend": "2.16.2", "phpcompatibility/php-compatibility": "^10.0.0@dev", "phpmd/phpmd": "2.15.0", - "phpunit/phpunit": "13.0.5 || 12.5.14 || 11.5.55 || 10.5.63", + "phpunit/phpunit": "13.1.1 || 12.5.17 || 11.5.55 || 10.5.63", "squizlabs/php_codesniffer": "4.0.1" }, "type": "library", @@ -16650,7 +16650,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-color/issues", - "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.10" + "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.12" }, "funding": [ { @@ -16658,7 +16658,7 @@ "type": "custom" } ], - "time": "2026-03-30T17:00:47+00:00" + "time": "2026-04-11T16:53:57+00:00" }, { "name": "thecodingmachine/safe", @@ -17774,16 +17774,16 @@ }, { "name": "webmozart/assert", - "version": "2.1.6", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8" + "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ff31ad6efc62e66e518fbab1cde3453d389bcdc8", - "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/eb0d790f735ba6cff25c683a85a1da0eadeff9e4", + "reference": "eb0d790f735ba6cff25c683a85a1da0eadeff9e4", "shasum": "" }, "require": { @@ -17830,9 +17830,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.6" + "source": "https://github.com/webmozarts/assert/tree/2.3.0" }, - "time": "2026-02-27T10:28:38+00:00" + "time": "2026-04-11T10:33:05+00:00" }, { "name": "willdurand/negotiation", @@ -18469,11 +18469,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.46", + "version": "2.1.47", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a193923fc2d6325ef4e741cf3af8c3e8f54dbf25", - "reference": "a193923fc2d6325ef4e741cf3af8c3e8f54dbf25", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/79015445d8bd79e62b29140f12e5bfced1dcca65", + "reference": "79015445d8bd79e62b29140f12e5bfced1dcca65", "shasum": "" }, "require": { @@ -18518,7 +18518,7 @@ "type": "github" } ], - "time": "2026-04-01T09:25:14+00:00" + "time": "2026-04-13T15:49:08+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -19180,16 +19180,16 @@ }, { "name": "rector/rector", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "a51dfddbf6a29ed9fbf6e8410fc90c1608df1b5d" + "reference": "000b7050b9e4fe98db2192971e56eb0b302b3feb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/a51dfddbf6a29ed9fbf6e8410fc90c1608df1b5d", - "reference": "a51dfddbf6a29ed9fbf6e8410fc90c1608df1b5d", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/000b7050b9e4fe98db2192971e56eb0b302b3feb", + "reference": "000b7050b9e4fe98db2192971e56eb0b302b3feb", "shasum": "" }, "require": { @@ -19228,7 +19228,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.4.0" + "source": "https://github.com/rectorphp/rector/tree/2.4.1" }, "funding": [ { @@ -19236,7 +19236,7 @@ "type": "github" } ], - "time": "2026-04-04T07:37:45+00:00" + "time": "2026-04-08T08:43:56+00:00" }, { "name": "roave/security-advisories", @@ -19244,12 +19244,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "db78064456eb735e368677828095fb7fe5aeda6f" + "reference": "b0b156ed9d5d2eb313c33f92af3dbc886ba4688a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/db78064456eb735e368677828095fb7fe5aeda6f", - "reference": "db78064456eb735e368677828095fb7fe5aeda6f", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b0b156ed9d5d2eb313c33f92af3dbc886ba4688a", + "reference": "b0b156ed9d5d2eb313c33f92af3dbc886ba4688a", "shasum": "" }, "conflict": { @@ -19305,7 +19305,6 @@ "auth0/wordpress": "<=5.5", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", - "avideo/avideo": "<=26", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<=3.371.3", "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", @@ -19364,7 +19363,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<=0.28.6", + "ci4-cms-erp/ci4ms": "<=0.31.3", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -19659,6 +19658,7 @@ "juzaweb/cms": "<=3.4.2", "jweiland/events2": "<8.3.8|>=9,<9.0.6", "jweiland/kk-downloader": "<1.2.2", + "kantorge/yaffa": "<=2", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", @@ -19682,6 +19682,7 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/passport": ">=13,<13.7.1", "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.7", "laravel/socialite": ">=1,<2.0.10", @@ -19862,7 +19863,7 @@ "phpoffice/phpexcel": "<=1.8.2", "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<=2.0.51|>=3,<=3.0.49", + "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", @@ -19884,7 +19885,7 @@ "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.32.1", + "pocketmine/pocketmine-mp": "<5.41.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -19924,11 +19925,11 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.20.1", + "redaxo/source": "<5.21", "remdex/livehelperchat": "<4.29", "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", "reportico-web/reportico": "<=8.1", - "rhukster/dom-sanitizer": "<1.0.7", + "rhukster/dom-sanitizer": "<1.0.10", "rmccue/requests": ">=1.6,<1.8", "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", "robrichards/xmlseclibs": "<3.1.5", @@ -20286,7 +20287,7 @@ "type": "tidelift" } ], - "time": "2026-04-04T07:24:55+00:00" + "time": "2026-04-13T18:30:45+00:00" }, { "name": "sebastian/cli-parser", diff --git a/yarn.lock b/yarn.lock index 6e6118f0..158ab745 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,160 +837,160 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.1.tgz#bb07943138ecd3c17b0e9634eb605e586c7d32f2" - integrity sha512-X4l4KyLgSsmAyRd/YY8R/OArOXR2Ts8NyoW6k+tLtYxEmZOhJsa6ZFSho/OVTole7IqMl+Zo93b9YaAwX23brw== +"@ckeditor/ckeditor5-adapter-ckfinder@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.2.tgz#87916c1c0afbad41ca5632c6e2a4b9eff2d1c162" + integrity sha512-WeYQHtGlxbuAZE2Uvi0t9A9Punb/jCBinsHvfNZ2a15AT9OvoANHx5XuvViikl9eGmkN6xErj3JzTTDPoqIcqg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-upload" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-alignment@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.1.tgz#9a06caee658ceb19959e6bb9fbbbbc32efa195c3" - integrity sha512-2u1+Eseelrm5gKKajE9X+gcPchVAIna3AkoJyCw3+Y4dBc6ElWZJEuCO7b6Omv5H7q3lQimbaqJnvIE1Z/nXOA== +"@ckeditor/ckeditor5-alignment@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.2.tgz#55d636762c6ac545ea322f3dda4e011679ff140c" + integrity sha512-is7p5+JboGUH2auOzeLti/rGBQL8WmUSOXiUjI54CVrwLX24Tg569EA4SeuCSvGQbc7upUQtXzjV+3bAKr5gQw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-autoformat@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.1.tgz#0771f53e3d94202c454213f78e491aaebfff51ea" - integrity sha512-UI3HFyw7VCTM92IhE6hdIh5rp2nqOLL4vnnOFTgp7Lq6dLOVzuwsRJLIEfYxz4Xusy4UKu4zM8QX4FV1nOWsGQ== +"@ckeditor/ckeditor5-autoformat@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.2.tgz#5f14800113b9bf581616eb644d2e39465646cef4" + integrity sha512-0L2f6nVLfnpaWj7iQWmIKVbitb39jfj6ldduuR9dZbTQqGXkE4EbGqD5NLcbrFSMUW826umEfPbYg9pD2P80+Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-heading" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-autosave@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.1.tgz#86fe0ca7c6c0db546298fe214df50f282ba0528b" - integrity sha512-7om5OHf2hBDi/Md8lVZL6fF7gCBAMVZfg8zsJqTmAW6fwl5gfenD4rggPdSa4GVt+mZXbheZx9EWc0HX1psAew== +"@ckeditor/ckeditor5-autosave@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.2.tgz#0fa155cf5f7414fc06e041c050ce5346194b1159" + integrity sha512-v2zqJaw2YkB4VAWXecYgIOFMurtXyOweqp1TB6QdoRUKfaI6pmQ6HwiSrnQxCcEZq5J8e53gwfHqWfgmB4TDrQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-basic-styles@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.1.tgz#afcb1f8e301c7fdfbe36dd10ac99aa152e1fa9bd" - integrity sha512-/8R59UxR/8quK8UmOLOS1xq47GnB+oMNySo8BgLHJl7qepRR5VnWU0hHB239idnFk46IVhuRciXQHjifrJiScQ== +"@ckeditor/ckeditor5-basic-styles@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.2.tgz#7130d24c7a8ac192e342151b8d140f8775cdb965" + integrity sha512-v/d3WcRAENVUOAuVuQEUJuksnX0q/cHRi3Xh5tv0U/WQDjTHzcYYj3bHp18erEuEhO08Kt9j+9wBbYmDPNAntg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-block-quote@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.1.tgz#056a0992dcdb503f66b7b8fb5cfc37ab1cf6d24c" - integrity sha512-wyDLqGrmcDVNlRmHxXTpXg2PKImgB4yIU3UDRofFKVJiuvnZvKKvx/Oh9USVv1G1zOAPoFyoK9AQzqYNOB7AMQ== +"@ckeditor/ckeditor5-block-quote@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.2.tgz#129577d298c5151d25371529950303ed4c24d8e4" + integrity sha512-Vlnq7Muj6d+Jxg23n9Dm3OA0fH8LVcTv5QT4uaxktrxbqDS7aaHKlHQh9OCW4ohzs4yLmGXAiuSO/wMmY4yW0g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-bookmark@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.1.tgz#9b7452cf06a98bfcea754ed781499d4deca4d3bb" - integrity sha512-9HwVudGBEhbqMPkEXQTqSIACGYpOWlES7bOxdG6WfgOUOAdCiTPXFCc5f+HSMFbrwd7XJ40tycPLOa7XK14oEg== +"@ckeditor/ckeditor5-bookmark@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.2.tgz#00ccacdefb1fff7f76ae7f55f1f59c4b8931803f" + integrity sha512-Smn5CPafHkS/7J3olZ+XWKNASoXFh4PC0lQ5W4GWcOF4xSHYkK+O69hPPsLB3WmSzOuEF2iRimoNBiT3769gyQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-link" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-link" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-ckbox@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.1.tgz#56fbc40ffed21ffec0dc0e83a0c69f7547c81ab0" - integrity sha512-v083Tnbsx4z1fFW+ghMXlsf5EgB3UaSldjfRsipjIYUiUeatccgRN00Qh6qGMlYz7zZcSdUUtrOfTWL/LYPWDg== +"@ckeditor/ckeditor5-ckbox@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.2.tgz#fbaecba4b9e6e3da21ba141c421bfb1c306a9890" + integrity sha512-3Lvdi/ngqLkDZraY4+y7N5OYB3QZwkiUGNnfTpxoyAsx+rARHl0Os+9n0oe3orMWPsE6tOAv/Y1xGe3x2Zyoug== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-cloud-services" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-image" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-upload" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" blurhash "2.0.5" - ckeditor5 "47.6.1" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ckfinder@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.1.tgz#954c594b72ab291a359ebf0b4c62e5770426ce78" - integrity sha512-ewgqgtQaDDZHQUGby/gg2/840Go280bvx959ExQH8Y7u4fPVw8NEFYAxjcm43W6EXgMnlmsEr8+G8q8g4iKT1w== +"@ckeditor/ckeditor5-ckfinder@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.2.tgz#39216ae0aa38c20c74026b7a6b09315cafa8ead3" + integrity sha512-1xXVw/R3wbsjzK/5gx2TRHqAtB8VBNx6ZKZrR1xbEkn6QSgIleLyKSDX55r3D9rH3bAJ6Simh62e+dRi7caxIw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-image" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-clipboard@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.1.tgz#10fa242f281dceb318ca79dc6c9b022585935e70" - integrity sha512-F3KQuCnnCavm8wXvX+d1KN/obh5ux/jT9qC/71QfMKdDvHxEOzi/t3YWa1r3sztlksDQ4LtODU4uWh0vVKUpkg== +"@ckeditor/ckeditor5-clipboard@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.2.tgz#9c97879783fc9ec4735ebe58866b80d11afbef9b" + integrity sha512-Ufwo9j8TymmDLMUeTtV2uX3+KjpyK8ikWtQUxqhAs+Lkar4NXYioWjIcQHW7JsersNDae6WlAyEshrhUcxZi1g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-cloud-services@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.1.tgz#fdb1f25a132cbb8adb207a3dd8da426fe675f722" - integrity sha512-yC9aqornbxjgNhHuUX4gcuvPTLv34sc8CbUOeFYLGbD9ujwoC0fzzjzSB7u5b8fWNg6cAjzriFooJATHBvu40g== +"@ckeditor/ckeditor5-cloud-services@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.2.tgz#a7a0d6118b39a9be28bb6ad651f9d3844787185e" + integrity sha512-u0AwAfzHDZxp6EqCfHf2u8I36LBWBYp+2iEWE7+VI8jwsdyy08Ow6m75ZbPGzE+W2rC9zSFXCzDiLr04EhAIWA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-code-block@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.1.tgz#4f15dedc705845d45bb6b8bfb28bc7dd26be37dd" - integrity sha512-ntZBIEYLoC4/OTUgCkwwmyXwwqDk8QwFcx/1kZN7S4YtwocREZqpDH1wYT+GA2ZmGkjaBRxdTLwSVr/7bf+wqg== +"@ckeditor/ckeditor5-code-block@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.2.tgz#139966bb1cbc119a1eb6c947fc3d2ca2548c34a4" + integrity sha512-fEGBiVuR9wszB/9OjY2npzIAdIiLy2pzltAfe9CW+lV599ci7S0s5QAfRGjg0aCHnwT9uJ6uE2BJiUsw9+ybPw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-core@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.1.tgz#e5558a33b7d2d4870ee8de3345d56518748c89cf" - integrity sha512-6dtnquhjymLkNhdC9T6gk/Mf2bDnHSTZrhkByaXC96CbmQDriCgfcaAVY6pQgDNxBQ6fZrev0TnKBLfTItrMsg== +"@ckeditor/ckeditor5-core@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.2.tgz#a1b304ccd4b46e7123914cac619e630b86e13966" + integrity sha512-Ra28vjVeciLH9Md2Pv5WFZ91M0hr5V0FJOAi7A/aVHbroVTdc8lyCW0Fxg49T4SM511hYsJ51FNhJqOZo1OAsQ== dependencies: - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-watchdog" "47.6.1" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-watchdog" "47.6.2" es-toolkit "1.39.5" "@ckeditor/ckeditor5-dev-translations@^53", "@ckeditor/ckeditor5-dev-translations@^53.4.0": @@ -1044,319 +1044,319 @@ through2 "^4.0.0" upath "^2.0.1" -"@ckeditor/ckeditor5-easy-image@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.1.tgz#03b7b4180a194cbb9e60d2679471dafd2a6ada7f" - integrity sha512-hWaqibO1ZUHRIkvvAO7O0qDAIw+GN6UWbdr0wcGNLc4DcSZMUIpAfoXuiyyvE9hQEJPpfTOwA3r0znS6wXtMCg== +"@ckeditor/ckeditor5-easy-image@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.2.tgz#c70e1164fbd920f884f9b80922de04c621e3d938" + integrity sha512-S71X9Uv+9vDSUKXJbCXXP/elBAxIxjExUrfWm/YV8nPCZKL+p6uUguo9WgNSCDUJDm/FDjjz8ageLisEFEIVvg== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-cloud-services" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-upload" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-editor-balloon@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.1.tgz#ee58d45c86d213bf39eae01dcf50942805f6804f" - integrity sha512-geszCykoE9Sja2tBqyMww4etAzAExg4eGnlYbXSGiaUiC7Ks4OqRVeuvw37QsH8Q56J5FQC35ysq95nrLEB+0A== +"@ckeditor/ckeditor5-editor-balloon@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.2.tgz#85e684f618453117cac591c91e2a998615dbe3c4" + integrity sha512-4TLf2iOcKVpoK7QdiYCzpOpakhgeuoHeWC40wE++SqcCNzdul/8vQ8cf9QFWC3+WoYAFbJ4lljjuFyjrDGofNQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-classic@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.1.tgz#82fe9e61064ca5bbc431f1d9146710831a252945" - integrity sha512-w2QaF2ieqLqu6i9YldOpPnFezvAsXY/R/vp/c0D1ofvI1CtBRWhQ9/rRwADMoKgpcuyP2320sRG312anT8aiaA== +"@ckeditor/ckeditor5-editor-classic@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.2.tgz#5d315aa0a8a553e538efaa685fc83353bf135592" + integrity sha512-nhb6bkxk4YMPp36KenoFxSLJS9c+gm7C79m0reLU5Ohe2do6R++XQcSQ5CfMPAVNgxLZ/MVbAshTZjTsrUoD/Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-decoupled@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.1.tgz#46c286e4a9800be17a2e8252a578f4541fdab460" - integrity sha512-w047UpjHF106k0NeQLgWY03k29s5vIpS9M6Oj+f+IdKaf4TR7uSzl/CXsS+csfqwZEhtGwGV3LYJVzo35+SifA== +"@ckeditor/ckeditor5-editor-decoupled@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.2.tgz#4cd630d122a9f915a271f26650dcaea98ca02d49" + integrity sha512-694K2EwoBH+4oDvDrOk8Bxz/d30hessYZkZ+qUx0Zdlyhcwb5kGLBa+rmPx7txH8StAef4Vmn47QChqMPzo5TQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-inline@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.1.tgz#0b8d63092273517b17960a16816fc27b2230a953" - integrity sha512-UJQHbMh1nvsHMuiijmRx3y/5ssdxeJTrVjrwDoPlUsI8tfRYjkdIucd9SsRhXnV65Vk31Ah5wiFyaBb5OLXZaA== +"@ckeditor/ckeditor5-editor-inline@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.2.tgz#4311ce185b414c3f31c03c0be152bfcc19fe1652" + integrity sha512-NRM7uvwb6ZW1zwFucPnA67OzVst+NPx+VDqLIcY4gMAxbFlBrLk+Cb/k1lPW2Vs6E9foMV1LhaEjoHFNzjHKOA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-multi-root@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.1.tgz#b1b80992009aa64d48ca92760d74e25c5e146b9b" - integrity sha512-Jn55iVT2sg85NSPVe/mThLoiI0FTAEH5r48MXD1MKz1E5K0FkpdLiKyCR4onfdFLozWZW2NvU0faCkyI0BKaZQ== +"@ckeditor/ckeditor5-editor-multi-root@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.2.tgz#21575e6eff9863b18308251ee6f25822be4fc2b6" + integrity sha512-INKZT6xC0cXmM18vgoewURSnz/S3Fal07QcjtRCmgSCGNTwKg/GkPKJ8oQrowsKy7zJUPXxSpKFGR1skfjRlfQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-emoji@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.1.tgz#196b45d7458482466e2b7eaea8da4740256d07e9" - integrity sha512-bnnnvRk/eYrvKLLQpJrjSV++Abpm1/8N31BNVaZyeHzaI0pddE6ikS44Ju82u7BQJaqSi2SO2Glx3u3C14rm2g== +"@ckeditor/ckeditor5-emoji@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.2.tgz#c229129774408eaeed7b8c3e1141a0e183d3416a" + integrity sha512-tkM7Z0nATuJTm73kr2SvsZPB7XkluhfdFVI+lZX+mFEqb+w+SjcEA9ex7naPQmK69Dn0ent5w70MFpKBvj4EJA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-mention" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-mention" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.1.tgz#b3d7dd701e6facd4c47e5e21be2a75dfd59f7f6b" - integrity sha512-Xb398PRhkJqtUuQ1E1pdLXTG1REIOanr7PCIRPpWvpHAIZZAuxTIqyacZC4qVTS9xI+ObxYqosf8yNvFsEtu8w== +"@ckeditor/ckeditor5-engine@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.2.tgz#a8a3086a5a9db95334aa524450d6c42459d79f78" + integrity sha512-HAZIX0clN3ZgRWtffjGdZ0PQ7xaXGmVcnAAHwuOk6gwIFkwJHprOZiKGEySwFEwnfo5NF9steWrPf56tB47keQ== dependencies: - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-utils" "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-enter@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.1.tgz#09d3d20895153bf0a53e30d8155b8ad3008eb1dd" - integrity sha512-H/d5L8JmZFmb5wYDi3NT4NICYuRueGUwiPgIpaaQ0gb8U3U0YVj4J5WVF/65KGiYdsuP2NupSwRqsdl8TilrdQ== +"@ckeditor/ckeditor5-enter@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.2.tgz#b3ab729099569e7a0f3365c6d7222daf23ac64f8" + integrity sha512-jktgH3AGomON6YEl1N8qJZdckAidMjCYHWIE6A6JYgMJUB1ArM1nmwELNbBywFfp6oSXteRta4FegPy94nu5XA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" -"@ckeditor/ckeditor5-essentials@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.1.tgz#6ba445f35d4ef4df33e30eb8b57a1cf096ed9ba3" - integrity sha512-4A9E9GrOudYA/eWCXE9uLqEdw7RLO/OdmeY1KWGAF6B9fubieSCF+S69M3c5hMKS6KJoNjaVJ/iR91KfIyYmtw== +"@ckeditor/ckeditor5-essentials@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.2.tgz#7a9c9eeb284820bbb907080b27d1e9d7b8be7483" + integrity sha512-QKHA2Yf3TA3mdySWjCls5C/V2cG2D+F0W6ifXQlFSPBAlRgfDf7zVnuXBAHHCXcBI2lAssHkxjxz4FaArQcmXg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-select-all" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-select-all" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-undo" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-find-and-replace@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.1.tgz#c32a58de98142047d0f27d0203d3ea56228171fa" - integrity sha512-ZbKlNpFYCP0DRICJlhyTLaRlPSwdJ5W9BBrMFjHhGsKNbFJ2KHlPCqTD6nAEWc838heDBZM21jRGTM6O92FLHA== +"@ckeditor/ckeditor5-find-and-replace@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.2.tgz#006683fedf86228e255dc8e24cc4f8fb65c7da3f" + integrity sha512-z1S4x+gonSgnnSe+MWdYi/eO59EvPvP16Legi0XRk5zMdd7Lgk57YLFEw9klkxeeEjNfKSq1Y8sIWV1MbmtRLA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-font@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.1.tgz#562403cc367fd2111605e7cedcd17ef914bf9613" - integrity sha512-ayMtG44tLbmPBjoEudnF7kFkqX3GUO0Cb1lLd6JR5B4uyoNFuQbN3nyrtx7hMvdu0N4jl0hWcWXjdu6vNL4I6g== +"@ckeditor/ckeditor5-font@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.2.tgz#5fc484691afe3bde3c92554e3c225b7936a38960" + integrity sha512-sQMLwKV/K7NqsucOVKuMUuTO+BCAimQBwc6nIFp2YdArSEOTgnSdHvUvFaFTaL7ipwWE7glaN+6KlhV421QT+A== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-fullscreen@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.1.tgz#0b46e3cc0873b880e8027cdc9c49e9c9550caaf8" - integrity sha512-LvA7vzeAkuc/z64kuRu17zm7EIFe0Bqt9xPA5GhfR6T9mBVG4wu62ElqylFUjFJ+macvkjSe68tBYQTAPyUWqg== +"@ckeditor/ckeditor5-fullscreen@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.2.tgz#1a8a22a85394f78d762efd59a3035a4a53042800" + integrity sha512-Djf7vdWoZX16GTPMCj0ULwk7c9FlMnadfA4bJtB6UQiXs/IP+rsWqCO0TsWzl/gUyPhYffupI03gvR+nKfqRLA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-editor-classic" "47.6.1" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-editor-classic" "47.6.2" + "@ckeditor/ckeditor5-editor-decoupled" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-heading@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.1.tgz#b80bef3c6b3cec4aad48473a327fceb16f86ca92" - integrity sha512-4kVuMaaAylkxYkJ0PA4hUQCDTARoeokkqKh0dE3DwEZTvvWDZjBEAhIKaSVX116ByeGfImbLkBRAoNCljKNCHQ== +"@ckeditor/ckeditor5-heading@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.2.tgz#da4c0eb487c3a151c6e830c81a68debfeb9432b6" + integrity sha512-qa87vYy8JXy5q+/o17jObVl2fzdxqOYMYblT0fks8Uqgj46TVUq9kdmHcA832RR4BUGTKQpRMWOPv2ukWhKpBA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-paragraph" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-paragraph" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-highlight@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.1.tgz#845676a75389129793fb57db99085f863900495d" - integrity sha512-hEIAZAImLAGRsz7/d+bbh3k+9s854AxuYoTmCAN2u07muYX/pmrLrLm6cZcazjmi9J/Bow6sP/D5GeoYMWKkLA== +"@ckeditor/ckeditor5-highlight@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.2.tgz#3c577d727eda716c19bd7ef269bedb2b5551494b" + integrity sha512-6jhnlxax4RAV9gbShe7buBWfAZ2L4KE3w20VwKX5zzgr7LMnoro8QkyzSmCEicKWD3zq+pkohYHbIAWr+Gakvg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-horizontal-line@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.1.tgz#dd4f74979cc30d3cf53f364013f1bc13f3ac8471" - integrity sha512-YTSpxdrp8NteaWARH89dA+qUWAf3agw/Q1dRQF+XdiF2kaSXRPQCXJruvmy490H+3xtwUZVs/hSlwX9gT77Skg== +"@ckeditor/ckeditor5-horizontal-line@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.2.tgz#98f7be2ca3e325b46325fdcbd71cca92956df823" + integrity sha512-3rZohQ4kFIED0ARr/fBROMChsZgx+Sns0Zin0zrjC3znf8T0Dr3T4x/FPTIlSROtLpNcZ25NebCMb6s4o0iS2Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-html-embed@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.1.tgz#d37cedfe079def1d5b3485b683bdea488ce22fdd" - integrity sha512-z4iYN6Il/PqpOBm+7OYM1mpXLUCbA7cMjq3MGIAwGwRHNFq8BWq/1by3P8FiF4ozaUyj8YgXXyWoggBC2qQRig== +"@ckeditor/ckeditor5-html-embed@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.2.tgz#b25cf025213378dedd0e4d45f03541cdc155e3ad" + integrity sha512-OV8mCHq55oKCm6SXNkdt7HBJFD5uT1bhx1p6JIdXY3aLEM8CuyPg016/lsnFMbxnd6v0Gq3nE/gfmbTXC2IWxg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-html-support@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.1.tgz#2d86875f247392efeaac05f1f3de392bd77a627f" - integrity sha512-F25LY88VYx0gZTrrThmt+kqF2thrwg52ZCIQeRujMd3RIueYEAEn7ZJ0p5iArDvm9qQXtLzsaijEyZr2edstPA== +"@ckeditor/ckeditor5-html-support@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.2.tgz#22b5d8fe8880fbbd258549a2d8d179d304edb67e" + integrity sha512-qsVxQ5fP5Ja5pq5kTV26EprXBGPOP3uFJqbzyc7DA/TVutdAFKo8/C96Rm8kTSJpS7tViFwBr8qMA+lhTJ2wcw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-remove-format" "47.6.1" - "@ckeditor/ckeditor5-table" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-heading" "47.6.2" + "@ckeditor/ckeditor5-image" "47.6.2" + "@ckeditor/ckeditor5-list" "47.6.2" + "@ckeditor/ckeditor5-remove-format" "47.6.2" + "@ckeditor/ckeditor5-table" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-icons@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.1.tgz#076aa5bc4ae1d2939a7802155cd5e852387d9bc2" - integrity sha512-OEk5hPdMpE5/Cb2lZFtJL2XyMwy/S8xQzuAk2b2P2bJx33rJgU3pk9RUrayxCSa3p+tKqibOzm5GcshLJ7s7Tg== +"@ckeditor/ckeditor5-icons@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.2.tgz#d27f87d0e3a0884c62024c39917e8a3352d6a078" + integrity sha512-sMw14Zwsyls9qjSTEyPA1V8mAmr/amU2u0L2XPfLU6lEiyYZT5rGYrcaKLZcPjOfCA1OLEx6Ae3kS38Hpse1+w== -"@ckeditor/ckeditor5-image@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.1.tgz#9824abdbb553a6e47215090e2f58be90649872b1" - integrity sha512-yy7b/7WQqN0c7/VC1Ng5svQU1btXWauBfQjFgVV3AzGa+nVeJ1ZIcV2fAkUa6mB+lCu+5ziv7b7ord22baJYzg== +"@ckeditor/ckeditor5-image@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.2.tgz#4ea561574731741bb86898c58b8ef404af626db8" + integrity sha512-qH+yGRva8n/9lVBHJZi5FdPxeDz6xNBeZNam/ef7OHDHwDrY2D7sCjwmtRjtbwphDUt7dogp//NfTQEUpcQIsA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-undo" "47.6.2" + "@ckeditor/ckeditor5-upload" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-indent@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.1.tgz#95c00461942c7336de8c876e242bbd94236c0283" - integrity sha512-SaokgxUJevRrYfu5PKEMvVrUliybmxpb3Cx/f/JtOnPbyJSFrt05+/mt3XsqsSB0g8LaHH2PXQfD4vncGzE6DQ== +"@ckeditor/ckeditor5-indent@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.2.tgz#39757f4cd626ae621248ad38b66d760ee31d945a" + integrity sha512-KTzZHYdvwDuwjZDJSXPT/m7NA9gnVj1NojaCdTr1jcF1F0+j4wILmmoRv0qI1COzv2vn9uc61AEou4rwOhDSEw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-heading" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-list" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-language@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.1.tgz#6a15c81c08a2487db8f86943645b24b3ccbc8aea" - integrity sha512-YZpySDIa4Y40T9wwKIFsAlDujELkgUtoKw/+4Wl8BHlDnq/40VxXFbOSSXu4TnnVeqVFcnzTjp6Zv8CHtmY3yw== +"@ckeditor/ckeditor5-language@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.2.tgz#1cbface222159556aad4347ce829b32f3c664a46" + integrity sha512-v3kx5fgPS6nbsReDlNl54j5XVGqsXFNOUo9e9GktvNQ5w0Vu+fntzMHu3PReHfiizuGH9A+1GZto3ZQ2RcsIsQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-link@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.1.tgz#f541baad9e44cc95b97e9ac5c97f7cb5fe145f8e" - integrity sha512-A/gjF7e00R/ESUotqR08EeGM91V031DiHiGwYn7b+iZ1bejsdEu3yQK707bZ4U6ByEYBUOMtq1bOMYUtGJl6EA== +"@ckeditor/ckeditor5-link@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.2.tgz#5205ca7dc9b7a0f0c0b10bbf9638c1186643cf0a" + integrity sha512-UJIPewfevj/w5cGPW133Pjkt9Zx1kxr3X3MdNKCtpa6IhnCVJ1iz84hSeMJohgrxW0KaslqiRI6a/y2aiD/KBw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-image" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-list@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.1.tgz#fccef28ae23a39ab1b04c58fffa7fd9e04ee9c3d" - integrity sha512-k7lXRJpZ8vkMQy0EWoYD8U6rQqYuKEbrTshlIjZSuBOQ9qlAb9llJ80OO0gteYZBOCMde1BJGjCeVxSNAI6eFA== +"@ckeditor/ckeditor5-list@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.2.tgz#3d05b6aa620d81caf4694f56cf2a2d5b7045204c" + integrity sha512-4YwM0IJRExbzXQ1PrTxAxj3WbADcjpGZbKqlZv+NspS8gWk8Pglz3pjfYfICS6CVJ0Y+1C8TR46/Tq22j6KeBA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-font" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-font" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-markdown-gfm@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.1.tgz#c6a150198f9285dd8f88155ec098166cfdf0c17e" - integrity sha512-bt4UsDKTmq5iyu5TkmxpC/Z5zZEsw8bcCr5egjgNtV5ozJF1E+54iQBjKIYNYIWRdD0PAEEGFE15QoWzSHBtxw== +"@ckeditor/ckeditor5-markdown-gfm@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.2.tgz#adc32f2e73a2b89cf201a6d8601a33ed32692537" + integrity sha512-kmFjWXT+SbHIdAprxfKgDF4aKWE5doD+QqNTjRWifFoqpb9/Lz+rvCDZw2j1Tavnjtf0a0NY+ZwGaYWvY2zxLA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" "@types/hast" "3.0.4" - ckeditor5 "47.6.1" + ckeditor5 "47.6.2" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1372,274 +1372,274 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.1.tgz#d331856917347f4e49209469f7f84fbb5328d1ef" - integrity sha512-G18SeOxXVy+k0SQYHkw1HQtS6/PkqpX2Mv6zM7os9aG3OpPmX8tCqDK+X7TaMx3FRJlDV0ujOy5Qfs71SJrqKA== +"@ckeditor/ckeditor5-media-embed@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.2.tgz#4bf277a5874630133d731843bd1cbf3dbf05fc2f" + integrity sha512-3kYexm1NF/QXHIuh5Fj+SWcYTNQ6oEkgheYU7VxwILg9+Y2UoAf4s5TlX2K8yb07tc0bHsIFdjt8F4Nz8oagtw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-undo" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-mention@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.1.tgz#f678033198144b7bdc92f416d5ef8fa639bd6b20" - integrity sha512-/53LFzYqcgvd8pL02XlNBduucfnakDVvY86vC02spDuTsUH5qUMqLaz2FHSo9AH2y3kNVp98KDnqI/QjNZCd+Q== +"@ckeditor/ckeditor5-mention@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.2.tgz#94c0441e7e9cf86df29661e4634763720efaa1e7" + integrity sha512-mT8toRkqXbatOx/YAFCnYlPqq6XjMdaUUqg7YqoA/OOjotOfqc4veoJ/BaaPAA043wq9LFjAkkpXhNUouTOOgg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-minimap@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.1.tgz#1805a4be3eaec417880a0e37363cb7b2325e6e68" - integrity sha512-ksKOy4wxzs3pkhfzVtnnsu5rgJxqYHMKM7X8Rkhx9BSshcKFeuNIUVsSh+7QWDQStWKSZ/qAx+0rezdJCm6gvQ== +"@ckeditor/ckeditor5-minimap@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.2.tgz#60e3173d34d469e86bf1c93efb28772c0986df4f" + integrity sha512-ACju165gL+VbFARNFoUao5MEHLBsfyU+19Q4Bukv4LufZlpvtJ56UuOzHLlhEoeOVIEAPE4v5cEl0/MVYCn8GA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-page-break@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.1.tgz#c9f2d30a6bf1071c22bd65bbb553ce652f4945e8" - integrity sha512-KBE1tLsnyIsh0v+S6p0G+WglkvfWvKCkOESmap+gct5xwmOE0HEgRVp6xFFBfHYuGSjSISvgUU4ofdnhseZivA== +"@ckeditor/ckeditor5-page-break@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.2.tgz#dcd7aa61bda8dbc590f7e1e0c63f031e4cc31271" + integrity sha512-hUobTNQG8aTWkIZk3ya+3yHw9zXSQqyZdh3NdtQ21fb/lF7V7BVmdJ2lxQF3lZAeQcdax8nkaJj0l9DxRjPnfw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-paragraph@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.1.tgz#943629d7de22d7cf272a6744fb96947c6c071ac7" - integrity sha512-6FXs94lSb6n7V7Puwp1c9BMyjycOfsAjdPRSVGTx1THqQBziQZHuZeU9LBxJZBA1mzoQOfmFaC3v+wb8odBgAQ== +"@ckeditor/ckeditor5-paragraph@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.2.tgz#3f8e0cadaf90ad205d51cdf3cd291e17779d234e" + integrity sha512-HfsCPGh56ezS2Vf9kitkrBt4NEGmeSO2yBwSog88RdBQOtqcLhM3Ks6HN3LPZoP7L9LxwekptQh3wVIlU1wjyA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" -"@ckeditor/ckeditor5-paste-from-office@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.1.tgz#63c514fcbf6d4b576b9cb627b6031f4f8864f0d1" - integrity sha512-Lt/V8/q59WuPURpwS9Z1UWUU1q5fF7YUbDAapWatzJlK9J/c969nRMG2aXm3z+BjXv3Kdu9qs4Oqngw0sJ0KiA== +"@ckeditor/ckeditor5-paste-from-office@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.2.tgz#697c121bfa095fe7d20d71656cd9b0e8f429ff95" + integrity sha512-9CjNW3Xfhy2AbMw0Ax6VJcAqMJGYwFm3p21MdDMEIWxDL8vmvKxNAGhsQRYvZ3oFHPHn5yTLDFRsKJiRTA8Vrw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-remove-format@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.1.tgz#96bdb0c0657cf85464970e8aa17924d6cf9b3a3f" - integrity sha512-2lQvT4+OVIFQs67yKh54exnT5UV1rPjEZX7MqyhZ3Dr0rzyEW7b9tpFz7bP/EUOSa2LpFktNoLFOSnIAZnQdyQ== +"@ckeditor/ckeditor5-remove-format@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.2.tgz#bf75a07e49c610bccef31d98503e60a334d17556" + integrity sha512-odaDDJcNwTzvo/VgiMlfk8Om2iCxnG8UcaTmOvY+Qdg9ZZ/B2oC4vdu+RRZ2493HLjDNDO/FjPD4j567aJKUFg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-restricted-editing@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.1.tgz#9308ae80f8740d9b9df662c51b47a0140757439a" - integrity sha512-ufWtexBPqBxJNNjjIw9XQe8Q+cnwLV4en6PTvdBX/zXHq87QdjpFk6NRSLCgDTpNmO2GiXnl+FsqUjGJF27zDQ== +"@ckeditor/ckeditor5-restricted-editing@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.2.tgz#fa9fa8363b5c17f1ff9ce0f48322d8f55fea743f" + integrity sha512-FAbyy3IISxGTzFz7xB93+MXX44gMTAeF+ckqkz6wkx6qaxT5xTm9RUzIEV6rQ6lCZ5BAoFlCAPwMw2austn7ew== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-select-all@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.1.tgz#ecbe703910721ccfc526ed3a535c8c784a52f798" - integrity sha512-NKhujjJ04UdM/pObi45+q6Em0fD6pQ1m+g5qLgTsTyoFUq2rFhMZqeRSPGEXlfuR5dImA7hP8uQtXNtt/GpZ7g== +"@ckeditor/ckeditor5-select-all@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.2.tgz#c6e0c7d40c4c4e039078b046a017b528c078d9b3" + integrity sha512-Q38YdkrRRVZ43Wzx3NR8/EJRw8HJ5Q6Dw8I6ZlYYUe1VtXpKruK/nXNsWPs1Ek83eFRK2xoggCcnotHN2DpVFQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" -"@ckeditor/ckeditor5-show-blocks@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.1.tgz#66b10152e8b205b91eb97bea598369536c5296c7" - integrity sha512-9MdxI7TjccCOcbdlzX+SBjFvt8CsdxCgyoJxZ2NYut6QJAJ6WPjH0yVxckZXC3LSkqIPzrIOJxHc7e2n+oFFvA== +"@ckeditor/ckeditor5-show-blocks@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.2.tgz#92f48f6be795ebb075417af13ff2cde63dd74ad1" + integrity sha512-JiTD0J89j9UeSPWV7y9Y70SYXIRuaqvael/MEAv+ZTN8n6fPlVYY4vR9pVRjYZnajv2b7mJNRPHE07YdEJcWaA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-source-editing@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.1.tgz#041d16a8dfca9069ed0ddfe2b92f69f98f965003" - integrity sha512-/NeN6KvgdlvmBzOGH1Uxk26zGti8HvvmBbHLOCzFqfXZRLHB+47BG+GtzOa82t6YnLjK7pvR23opyAApRf6zIA== +"@ckeditor/ckeditor5-source-editing@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.2.tgz#4262c717c881f372c2f930f68743d0c0026d19b4" + integrity sha512-e4xNQWZu+V04cEjN0z8jGbnT1iIWSho/uMcxC6NehZ8Y25cGmvtexxtYv+5oxIAm36n9ooCLRydiPQ5ONq5y0A== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-theme-lark" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-theme-lark" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-special-characters@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.1.tgz#9f89ec11f7cf1e558b4031646d6fc352be1292bb" - integrity sha512-O+WRAaDh3m/i3lWF+MaB0G++nBusB/uaB+koN+gwqiIfDHpGJ9HKr+KXrMZZYb0MjiGV0J5gswuwL+YvzNZ6rg== +"@ckeditor/ckeditor5-special-characters@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.2.tgz#4400fd2e479dd088702b2efb415c6aa120f0c28a" + integrity sha512-XVM1JNRC9XjS1w7xmVe9IbELyiWjUXfpdz9OtG02HHTYt9dgxarPyOYoCN65qvaqnivF+bpU3jFw6aMKbn5sng== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" -"@ckeditor/ckeditor5-style@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.1.tgz#b1271c0b639a5c75a711950826358e407bc23245" - integrity sha512-WD9lzsgIk3sB+Ec/mpgbYIZXr8cRBOcDAjFndfjuSQMZRYM5kCMpIz0qpvjGp1Glz2bmeg7CwfuLDvbZSqZrfA== +"@ckeditor/ckeditor5-style@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.2.tgz#55c526be8d4f5a4f8b6271ca1492b4a8e1527038" + integrity sha512-shv8BOQinzy30RmwliOcD8aCC8MqVrtJjiQBry2IXZ/WTkbZP4RDZR/uvuKhWvvz8Lk2tC7AEp6V3chSCpQ9oA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-html-support" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-table" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-html-support" "47.6.2" + "@ckeditor/ckeditor5-list" "47.6.2" + "@ckeditor/ckeditor5-table" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-table@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.1.tgz#6ec1f74b80fab7df6cae5ba5e7071bcd2afacd0c" - integrity sha512-zFJWnqL0PpdlSs8U1m5Mu/gcuoJfi0GSpDqr174dqXLtFcMfIsftVWVTbY5d4f+OKAp8LifxOg3CMvLD1YNSGA== +"@ckeditor/ckeditor5-table@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.2.tgz#448c246731d1cbdee1b44e939dc47c44262f32eb" + integrity sha512-rTLISHR/YBlkTvso+F4SI4YUz9g+yKNxrHbsBgnMzbWzu96ecA0IVVTD3vg6Bt/xSzyWHdmj95ThMWuqWEJtRw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-theme-lark@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.1.tgz#96076019c59ed0d0f6a05b56e4597ef136cc10b9" - integrity sha512-iaRFqt6ExGAAsOc4AfJNbMyY+jnh//gMzGendqklhQzkwV3RGzN6buRtV0Fps+pKXnpRcbqaVHWv0GOIOaG58Q== +"@ckeditor/ckeditor5-theme-lark@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.2.tgz#514e4b0a213b2217fc4af02edc2012e97e32108c" + integrity sha512-5NlbqKiwP6o8MrniSJ9SZPQ8eq17wBnH2YU3C8KoU+3/7NYPWgCebew3/xTxIfybvFtkHIDiWAEcy1TIHNpavw== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.2" -"@ckeditor/ckeditor5-typing@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.1.tgz#4246eaf121ea07a491883c345c077953a2eedfb2" - integrity sha512-yuMJCK6+KpYyXHxkBKRtVuOF1L42eyhUlCCq4sNFHjoJfD3q3gunmesoGIkdezMZR5RpqpGSfrOapEG9orOBTg== +"@ckeditor/ckeditor5-typing@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.2.tgz#407b567797e5c5f1f5655e164e4ec6c4a66ecb22" + integrity sha512-NDZ1J7g/E7mTUvqnXCloNt7zFtxvidrK4UplyOHGbHSFM1BNRAUc5Sugk3fzxrF8JgKZmKW5CaG2+p2avclbRA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ui@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.1.tgz#d2f2f7aaf439cb04027b2c91a083546bd81483e4" - integrity sha512-zBEfMSpR26rVPvc9X4KXxQd0wQG42EM+37VHdrfwJL47PFlqXTGlbsZ9BBjlElNM1mpViWSW9zpt5JdE6vtHCQ== +"@ckeditor/ckeditor5-ui@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.2.tgz#f0909751641c8d737c143b23d4accf02b044b6a8" + integrity sha512-jpdVYEkY+IenzsFK9TCfiotqDTRbkkitU6nBC3dVOTV8dNAa/oN/mizhtZNUD+mDblhTAVsx7IsjwpKcQgivvw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" "@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@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.1.tgz#83d13e705bacfc3140a1ccf53fe7fac46e5ad9dd" - integrity sha512-kxckLxZHglOTv0yd7cROpZAgOQFR7uJEKy+ehGaPrPy5eMrIhUqHcDWHv4sLNJfNg1IgQrsqYNHeIaTzT38RvQ== +"@ckeditor/ckeditor5-undo@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.2.tgz#96259e6b380493894e121a1d2382bef4b54ca621" + integrity sha512-RW1o7yui5/VPkS0IU9KGrVNADsuU33XpAQrquSJZasZabckFOuUxRP3W+CbxhRjHUBygBtBk5naJmEoNjYGglQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" -"@ckeditor/ckeditor5-upload@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.1.tgz#64c7fcf731c87bb9fc2a44f5ad8e45ae0a6f507d" - integrity sha512-GFMKl6pct+r26EQ4K2D22xokyDQIoRYQZSZFoPl4L04FFPVRuG60pA1YSNtyi7Am+T1fR3qOVBHAuXsANyeL6g== +"@ckeditor/ckeditor5-upload@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.2.tgz#2328b71e937d8ba0189cd563a3bc88fb1651ce9a" + integrity sha512-Q7KhQetBuxRly1yquasCS/ONHv8aNANOpFg6xUXlwOrbtFSIQsyLTIXrHXNA+xDzLEqZeGkd8GYa1AIHH5fs5g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" -"@ckeditor/ckeditor5-utils@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.1.tgz#6ef2d87fc795dc70802bb9c0a6dc5938193e4192" - integrity sha512-gJl5DikvPjMEsv9DZmEVv6GOZEjHQN3kgaxvaAYpfg4VcT1RENHw46BfvPN/zUHsYwZlh7DxG3+o7h3M8Pzj1w== +"@ckeditor/ckeditor5-utils@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.2.tgz#ac8d74cfd061455d5a2e39f1dc45eb83733e0470" + integrity sha512-qClamh5T1XxIBcC/7n2Svhhug6FIc4tilOrIgJbypU8SarWarrL4XrpI2yAv3gSfz23U+QA5CHBR5c08G5lUrA== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.1" + "@ckeditor/ckeditor5-ui" "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-watchdog@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.1.tgz#fe36e3150595c3efd25d41c554de3db08dc59717" - integrity sha512-mHum5WRT5PKiL80UwNMXiw//s1486smeCO2sgYJKZGrqlz7cSSHDOc8iUi8Cn2YuHvTfjgRjgcZxn0u9uhr1Mw== +"@ckeditor/ckeditor5-watchdog@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.2.tgz#a9f67da32099fe7db123b687955347a36a0eb7de" + integrity sha512-r97uTUpn7v5yVFyrhwFUAG6uiLs7px0UG8d8lXPZTUm5XIDLuwCskrqO0r7U26No26V4+ph96QaEulnKeTTWVA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-widget@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.1.tgz#6f1fb87891e825a849cb7c79cf9265bfe0f68403" - integrity sha512-rURYZlY9w+qjumkQ+VQ1cO32JJbuxuGoWIPj2lTC3uFjn6kDzYB9KvNItOykBJM/V11R7sEEOWvpKlnsMmlnzg== +"@ckeditor/ckeditor5-widget@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.2.tgz#1783ffcb7533ffd3a11b01a383548a27b83a127b" + integrity sha512-XBvyI2qMLTMRFi+B7M6/7/GH7PJw91t6/LqrZkCFclhrmUpa5gZjDdVOpQvArOwot8CGz8sdawL5RBw/DcK2kA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-word-count@47.6.1": - version "47.6.1" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.1.tgz#dd494e1529897e5ad6247abc06d07ceb2f38d8c0" - integrity sha512-q/8jRqtEFQ5SQEY8GsJBtatD7OdQT2f1o7KdKVDcZ4UZTQCo2hi9d2zvHEkQ7drA0LO+D3WJrHNEd+B6wk1slg== +"@ckeditor/ckeditor5-word-count@47.6.2": + version "47.6.2" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.2.tgz#a8f2ba52c5c82b9eace357d70f15f24fd9ff9435" + integrity sha512-fb2Z1zjz32NhMkgA/4wHua6IdaT7Td2FQP9GUqSF5gm53d1L8Yc/Hew5CiVHyWhMBNkdcef1o3a8/MFnP2LOfA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - ckeditor5 "47.6.1" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + ckeditor5 "47.6.2" es-toolkit "1.39.5" -"@colordx/core@^5.0.0": +"@colordx/core@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.0.3.tgz#d5021feffd7fbfc103f1347d2cbebb110de0120e" integrity sha512-xBQ0MYRTNNxW3mS2sJtlQTT7C3Sasqgh1/PsHva7fyDb5uqYY+gv9V0utDdX8X80mqzbGz3u/IDJdn2d/uW09g== @@ -2135,9 +2135,9 @@ integrity sha512-kxHrDQ9YgfrWUSXU0cjsQGv8JykOFZQ9ErNKbFPWzk3Hgpwu8x2hHrQ9IdA8yl+j9RTLTC3sAF3Tdq1IQCP4oA== "@sigstore/protobuf-specs@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz#e5f029edcb3a4329853a09b603011e61043eb005" - integrity sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA== + version "0.5.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.1.tgz#5401e444b6ab0db7d1969c91c43e7954927a52fe" + integrity sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g== "@sigstore/sign@^4.1.0": version "4.1.1" @@ -2168,6 +2168,18 @@ "@sigstore/core" "^3.1.0" "@sigstore/protobuf-specs" "^0.5.0" +"@simple-git/args-pathspec@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@simple-git/args-pathspec/-/args-pathspec-1.0.3.tgz#9ef4a2ad5f49ab4056362d03f93f775b93118ca5" + integrity sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA== + +"@simple-git/argv-parser@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@simple-git/argv-parser/-/argv-parser-1.1.0.tgz#6680aed3fa68f131ca0d7efa90e52b5b23ca3183" + integrity sha512-sUKOu2lb5vGIWADNNLpscyj07DAeQZU3KLbnE2Tj53tW6BbDQKMly2CCfnR4oYzqtRELCPWfwaPg+Q0T8qfKBg== + dependencies: + "@simple-git/args-pathspec" "^1.0.3" + "@sinclair/typebox@^0.34.0": version "0.34.49" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.49.tgz#4f1369234f2ecf693866476c3b2e1b54d2a9d68e" @@ -2191,10 +2203,10 @@ schema-utils "^3.0.0 || ^4.0.0" "@symfony/ux-translator@file:vendor/symfony/ux-translator/assets": - version "2.33.0" + version "2.34.0" "@symfony/ux-turbo@file:vendor/symfony/ux-turbo/assets": - version "2.33.0" + version "2.34.0" "@symfony/webpack-encore@^6.0.0": version "6.0.0" @@ -2320,11 +2332,11 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.2.tgz#94861e32f9ffd8de10b52bbec403465c84fff762" - integrity sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg== + version "25.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.6.0.tgz#4e09bad9b469871f2d0f68140198cbd714f4edca" + integrity sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ== dependencies: - undici-types "~7.18.0" + undici-types "~7.19.0" "@types/postcss-import@^14.0.3": version "14.0.3" @@ -2720,9 +2732,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.10.12: - version "2.10.15" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.15.tgz#775e7f7237bb1117da66f4388539f57168815104" - integrity sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ== + version "2.10.18" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz#565745085ba7743af7d4072707ad132db3a5a42f" + integrity sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A== big.js@^5.2.2: version "5.2.2" @@ -2755,9 +2767,9 @@ bootswatch@^5.1.3: integrity sha512-88mnH9tv+x6DV+scBxYFOpM4YSDVhyfEgbhqaEfvkHNctKI9qRcACxIP9nmBZ5mSeLXtsgax1VsRkUs1eWjlAQ== brace-expansion@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" - integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" + integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== dependencies: balanced-match "^1.0.0" @@ -2787,7 +2799,7 @@ browser-stdout@^1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.2: version "4.28.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" integrity sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg== @@ -2850,9 +2862,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782: - version "1.0.30001785" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001785.tgz#31f8e3ec1059430d2a7b04fff44c27672c4482df" - integrity sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ== + version "1.0.30001787" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz#fd25c5e42e2d35df5c75eddda00d15d9c0c68f81" + integrity sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg== ccount@^2.0.0: version "2.0.1" @@ -2909,72 +2921,72 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@47.6.1, ckeditor5@^47.0.0: - version "47.6.1" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.1.tgz#b4d37c5d9695b83b6267197ec30d9435390f9a5c" - integrity sha512-Za7+Dyju3RgfH4TF+zam7lvfOSr+Rd+0tABfR16HEtsARRPEmNBHYgS5nM3PZtNK4+ScliL6Ch3GFk7cd/TiOw== +ckeditor5@47.6.2, ckeditor5@^47.0.0: + version "47.6.2" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.2.tgz#b13c15a2df9ce455a97ba195bbb13530ace15389" + integrity sha512-Ezi+mp/KAAelM8b1P4gbe9xLB6w70MwMQdlj5ZICju++klsbKdPfGM7Ufn0qe1AyEWelTFQQXYZbA+KO/aGxuw== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.1" - "@ckeditor/ckeditor5-alignment" "47.6.1" - "@ckeditor/ckeditor5-autoformat" "47.6.1" - "@ckeditor/ckeditor5-autosave" "47.6.1" - "@ckeditor/ckeditor5-basic-styles" "47.6.1" - "@ckeditor/ckeditor5-block-quote" "47.6.1" - "@ckeditor/ckeditor5-bookmark" "47.6.1" - "@ckeditor/ckeditor5-ckbox" "47.6.1" - "@ckeditor/ckeditor5-ckfinder" "47.6.1" - "@ckeditor/ckeditor5-clipboard" "47.6.1" - "@ckeditor/ckeditor5-cloud-services" "47.6.1" - "@ckeditor/ckeditor5-code-block" "47.6.1" - "@ckeditor/ckeditor5-core" "47.6.1" - "@ckeditor/ckeditor5-easy-image" "47.6.1" - "@ckeditor/ckeditor5-editor-balloon" "47.6.1" - "@ckeditor/ckeditor5-editor-classic" "47.6.1" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.1" - "@ckeditor/ckeditor5-editor-inline" "47.6.1" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.1" - "@ckeditor/ckeditor5-emoji" "47.6.1" - "@ckeditor/ckeditor5-engine" "47.6.1" - "@ckeditor/ckeditor5-enter" "47.6.1" - "@ckeditor/ckeditor5-essentials" "47.6.1" - "@ckeditor/ckeditor5-find-and-replace" "47.6.1" - "@ckeditor/ckeditor5-font" "47.6.1" - "@ckeditor/ckeditor5-fullscreen" "47.6.1" - "@ckeditor/ckeditor5-heading" "47.6.1" - "@ckeditor/ckeditor5-highlight" "47.6.1" - "@ckeditor/ckeditor5-horizontal-line" "47.6.1" - "@ckeditor/ckeditor5-html-embed" "47.6.1" - "@ckeditor/ckeditor5-html-support" "47.6.1" - "@ckeditor/ckeditor5-icons" "47.6.1" - "@ckeditor/ckeditor5-image" "47.6.1" - "@ckeditor/ckeditor5-indent" "47.6.1" - "@ckeditor/ckeditor5-language" "47.6.1" - "@ckeditor/ckeditor5-link" "47.6.1" - "@ckeditor/ckeditor5-list" "47.6.1" - "@ckeditor/ckeditor5-markdown-gfm" "47.6.1" - "@ckeditor/ckeditor5-media-embed" "47.6.1" - "@ckeditor/ckeditor5-mention" "47.6.1" - "@ckeditor/ckeditor5-minimap" "47.6.1" - "@ckeditor/ckeditor5-page-break" "47.6.1" - "@ckeditor/ckeditor5-paragraph" "47.6.1" - "@ckeditor/ckeditor5-paste-from-office" "47.6.1" - "@ckeditor/ckeditor5-remove-format" "47.6.1" - "@ckeditor/ckeditor5-restricted-editing" "47.6.1" - "@ckeditor/ckeditor5-select-all" "47.6.1" - "@ckeditor/ckeditor5-show-blocks" "47.6.1" - "@ckeditor/ckeditor5-source-editing" "47.6.1" - "@ckeditor/ckeditor5-special-characters" "47.6.1" - "@ckeditor/ckeditor5-style" "47.6.1" - "@ckeditor/ckeditor5-table" "47.6.1" - "@ckeditor/ckeditor5-theme-lark" "47.6.1" - "@ckeditor/ckeditor5-typing" "47.6.1" - "@ckeditor/ckeditor5-ui" "47.6.1" - "@ckeditor/ckeditor5-undo" "47.6.1" - "@ckeditor/ckeditor5-upload" "47.6.1" - "@ckeditor/ckeditor5-utils" "47.6.1" - "@ckeditor/ckeditor5-watchdog" "47.6.1" - "@ckeditor/ckeditor5-widget" "47.6.1" - "@ckeditor/ckeditor5-word-count" "47.6.1" + "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.2" + "@ckeditor/ckeditor5-alignment" "47.6.2" + "@ckeditor/ckeditor5-autoformat" "47.6.2" + "@ckeditor/ckeditor5-autosave" "47.6.2" + "@ckeditor/ckeditor5-basic-styles" "47.6.2" + "@ckeditor/ckeditor5-block-quote" "47.6.2" + "@ckeditor/ckeditor5-bookmark" "47.6.2" + "@ckeditor/ckeditor5-ckbox" "47.6.2" + "@ckeditor/ckeditor5-ckfinder" "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.6.2" + "@ckeditor/ckeditor5-cloud-services" "47.6.2" + "@ckeditor/ckeditor5-code-block" "47.6.2" + "@ckeditor/ckeditor5-core" "47.6.2" + "@ckeditor/ckeditor5-easy-image" "47.6.2" + "@ckeditor/ckeditor5-editor-balloon" "47.6.2" + "@ckeditor/ckeditor5-editor-classic" "47.6.2" + "@ckeditor/ckeditor5-editor-decoupled" "47.6.2" + "@ckeditor/ckeditor5-editor-inline" "47.6.2" + "@ckeditor/ckeditor5-editor-multi-root" "47.6.2" + "@ckeditor/ckeditor5-emoji" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-enter" "47.6.2" + "@ckeditor/ckeditor5-essentials" "47.6.2" + "@ckeditor/ckeditor5-find-and-replace" "47.6.2" + "@ckeditor/ckeditor5-font" "47.6.2" + "@ckeditor/ckeditor5-fullscreen" "47.6.2" + "@ckeditor/ckeditor5-heading" "47.6.2" + "@ckeditor/ckeditor5-highlight" "47.6.2" + "@ckeditor/ckeditor5-horizontal-line" "47.6.2" + "@ckeditor/ckeditor5-html-embed" "47.6.2" + "@ckeditor/ckeditor5-html-support" "47.6.2" + "@ckeditor/ckeditor5-icons" "47.6.2" + "@ckeditor/ckeditor5-image" "47.6.2" + "@ckeditor/ckeditor5-indent" "47.6.2" + "@ckeditor/ckeditor5-language" "47.6.2" + "@ckeditor/ckeditor5-link" "47.6.2" + "@ckeditor/ckeditor5-list" "47.6.2" + "@ckeditor/ckeditor5-markdown-gfm" "47.6.2" + "@ckeditor/ckeditor5-media-embed" "47.6.2" + "@ckeditor/ckeditor5-mention" "47.6.2" + "@ckeditor/ckeditor5-minimap" "47.6.2" + "@ckeditor/ckeditor5-page-break" "47.6.2" + "@ckeditor/ckeditor5-paragraph" "47.6.2" + "@ckeditor/ckeditor5-paste-from-office" "47.6.2" + "@ckeditor/ckeditor5-remove-format" "47.6.2" + "@ckeditor/ckeditor5-restricted-editing" "47.6.2" + "@ckeditor/ckeditor5-select-all" "47.6.2" + "@ckeditor/ckeditor5-show-blocks" "47.6.2" + "@ckeditor/ckeditor5-source-editing" "47.6.2" + "@ckeditor/ckeditor5-special-characters" "47.6.2" + "@ckeditor/ckeditor5-style" "47.6.2" + "@ckeditor/ckeditor5-table" "47.6.2" + "@ckeditor/ckeditor5-theme-lark" "47.6.2" + "@ckeditor/ckeditor5-typing" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-undo" "47.6.2" + "@ckeditor/ckeditor5-upload" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-watchdog" "47.6.2" + "@ckeditor/ckeditor5-widget" "47.6.2" + "@ckeditor/ckeditor5-word-count" "47.6.2" cli-cursor@^5.0.0: version "5.0.0" @@ -3146,9 +3158,9 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6: which "^2.0.1" css-declaration-sorter@^7.2.0: - version "7.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz#acd204976d7ca5240b5579bfe6e73d4d088fd568" - integrity sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA== + version "7.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz#9c215fbda2dcf4083bae69f125688158ae847deb" + integrity sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw== css-loader@^7.0.0, css-loader@^7.1.0: version "7.1.4" @@ -3224,26 +3236,26 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^7.0.12: - version "7.0.12" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.12.tgz#21e29fed4a8697952485995ffeeec20ff58945a4" - integrity sha512-B3Eoouzw/sl2zANI0AL9KbacummJTCww+fkHaDBMZad/xuVx8bUduPLly6hKVQAlrmvYkS1jB1CVQEKm3gn0AA== +cssnano-preset-default@^7.0.13: + version "7.0.13" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.13.tgz#b4bf247078a7cbbcf39d3d52d18b050784fdcf3a" + integrity sha512-/XvjNeb+oitOT9ks3Tg0UAsnXeHR1dh3wBMK/D/zN8gqvAHOp25FZGiLoQbvBBU203WXVNITkaqyFp4O/Rns4w== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" css-declaration-sorter "^7.2.0" cssnano-utils "^5.0.1" postcss-calc "^10.1.1" - postcss-colormin "^7.0.7" - postcss-convert-values "^7.0.9" + postcss-colormin "^7.0.8" + postcss-convert-values "^7.0.10" postcss-discard-comments "^7.0.6" postcss-discard-duplicates "^7.0.2" postcss-discard-empty "^7.0.1" postcss-discard-overridden "^7.0.1" postcss-merge-longhand "^7.0.5" - postcss-merge-rules "^7.0.8" + postcss-merge-rules "^7.0.9" postcss-minify-font-values "^7.0.1" - postcss-minify-gradients "^7.0.2" - postcss-minify-params "^7.0.6" + postcss-minify-gradients "^7.0.3" + postcss-minify-params "^7.0.7" postcss-minify-selectors "^7.0.6" postcss-normalize-charset "^7.0.1" postcss-normalize-display-values "^7.0.1" @@ -3251,11 +3263,11 @@ cssnano-preset-default@^7.0.12: postcss-normalize-repeat-style "^7.0.1" postcss-normalize-string "^7.0.1" postcss-normalize-timing-functions "^7.0.1" - postcss-normalize-unicode "^7.0.6" + postcss-normalize-unicode "^7.0.7" postcss-normalize-url "^7.0.1" postcss-normalize-whitespace "^7.0.1" postcss-ordered-values "^7.0.2" - postcss-reduce-initial "^7.0.6" + postcss-reduce-initial "^7.0.7" postcss-reduce-transforms "^7.0.1" postcss-svgo "^7.1.1" postcss-unique-selectors "^7.0.5" @@ -3266,11 +3278,11 @@ cssnano-utils@^5.0.1: integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== cssnano@^7.0.0, cssnano@^7.0.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.4.tgz#0aa5bb3b481df024ecafd41c4388c06240bb31ec" - integrity sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ== + version "7.1.5" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.5.tgz#8b2d05e8d21574f193d706aeef7298b9231b9b09" + integrity sha512-4yEvjF2zcoAOWfNq6X687ORJc5SvM5xbg6EGuLSBmGoWZbsL69wpmw1tA3fZt7OwIG+G4ndjF95RSS4luvim7A== dependencies: - cssnano-preset-default "^7.0.12" + cssnano-preset-default "^7.0.13" lilconfig "^3.1.3" csso@^5.0.5: @@ -3506,9 +3518,9 @@ eastasianwidth@^0.2.0: integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.328: - version "1.5.331" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz#3e4e845042d517c68b3c00be5fc33204f13b2058" - integrity sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q== + version "1.5.335" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.335.tgz#0b957cea44ef86795c227c616d16b4803d119daa" + integrity sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q== emoji-regex@^8.0.0: version "8.0.0" @@ -3567,6 +3579,11 @@ error-stack-parser@^2.1.4: dependencies: stackframe "^1.3.4" +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-module-lexer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" @@ -4547,9 +4564,9 @@ lru-cache@^10.2.0: integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1: - version "11.2.7" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.7.tgz#9127402617f34cd6767b96daee98c28e74458d35" - integrity sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA== + version "11.3.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.3.5.tgz#29047d348c0b2793e3112a01c739bb7c6d855637" + integrity sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw== lru-cache@^5.1.1: version "5.1.1" @@ -4582,16 +4599,16 @@ markdown-table@^3.0.0: integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== marked-gfm-heading-id@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/marked-gfm-heading-id/-/marked-gfm-heading-id-4.1.3.tgz#6b3e0bc2bc69d5124823e93ee00f05f5c6f90a5f" - integrity sha512-aR0i63LmFbuxU/gAgrgz1Ir+8HK6zAIFXMlckeKHpV+qKbYaOP95L4Ux5Gi+sKmCZU5qnN2rdKpvpb7PnUBIWg== + version "4.1.4" + resolved "https://registry.yarnpkg.com/marked-gfm-heading-id/-/marked-gfm-heading-id-4.1.4.tgz#9f0ee7bace35ce9c90c58700593d6cdbb4618706" + integrity sha512-CspnvVfHSkb/znqdPS4jUR8HtCjq3M/DnrsJCrfLBLvdrgbemmoINKpeWKQYkBiXAoBGejw0cV7xzqrPdup3WA== dependencies: github-slugger "^2.0.0" marked-mangle@^1.0.1: - version "1.1.12" - resolved "https://registry.yarnpkg.com/marked-mangle/-/marked-mangle-1.1.12.tgz#7ecc1dab1e03695f3b8b9d606e8becfba8277496" - integrity sha512-bRrqNcfU9v3iRECb7YPvA+/xKZMjHojd9R92YwHbFjdPQ+Wc7vozkbGKAv4U8AUl798mNUuY3DTBQkedsV3TeQ== + version "1.1.13" + resolved "https://registry.yarnpkg.com/marked-mangle/-/marked-mangle-1.1.13.tgz#2b1194c1ac8c5e2226d6ef3216eb00e9494bd8c0" + integrity sha512-phz1W/nYMr1T08Q7wqH2aj+PPiK85E69WQGfId+prvryfgjY/Idibx4YUvKaYMDV9rK1qo+/yC+Quu/3gdaBeA== marked@^17.0.1: version "17.0.6" @@ -5488,7 +5505,7 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== -picomatch@^4.0.3: +picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== @@ -5533,22 +5550,22 @@ postcss-calc@^10.1.1: postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" -postcss-colormin@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.7.tgz#63b42eb2a9cfc092b96b1b758db66dc35a2a3f19" - integrity sha512-sBQ628lSj3VQpDquQel8Pen5mmjFPsO4pH9lDLaHB1AVkMRHtkl0pRB5DCWznc9upWsxint/kV+AveSj7W1tew== +postcss-colormin@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.8.tgz#457eb63f4438cb5799b01975c5a1604155eb4d7e" + integrity sha512-VX0JOZx0jECwGK0GZejIKvXIU+80S1zkjet31FVUYPZ4O+IPU3ZlntrPdPKT2HnKRMOkc0wy3m/v+c4UNta02g== dependencies: - "@colordx/core" "^5.0.0" - browserslist "^4.28.1" + "@colordx/core" "^5.0.3" + browserslist "^4.28.2" caniuse-api "^3.0.0" postcss-value-parser "^4.2.0" -postcss-convert-values@^7.0.9: - version "7.0.9" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.9.tgz#6ada5c2c480f1ddbd4c886339025a916ecc8ff01" - integrity sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg== +postcss-convert-values@^7.0.10: + version "7.0.10" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.10.tgz#cbf8bedef3acae5373ed9c98c4f289b72926adb3" + integrity sha512-hVqVH3cDkPyxL4Q0xpCquRAXjJDZ6hbpjC+PNWn8ZgHmNX3RZxLtruC3U2LY9EuNe+tp4QkcsZxg0htokmjydg== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" postcss-value-parser "^4.2.0" postcss-discard-comments@^7.0.6: @@ -5606,12 +5623,12 @@ postcss-merge-longhand@^7.0.5: postcss-value-parser "^4.2.0" stylehacks "^7.0.5" -postcss-merge-rules@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.8.tgz#d63ce875b9f7880ca4aa89d9ae3eaa3657215f82" - integrity sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA== +postcss-merge-rules@^7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.9.tgz#e281067714de26fa7d0ab50b706bd29b24fc7442" + integrity sha512-XKMXkHAegyLeIymVylg1Ro4NNHITInHPvmvybsIUximYfsg5fRw2b5TeqLTQwwg5cXEDVa556AAxvMve1MJuJA== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" caniuse-api "^3.0.0" cssnano-utils "^5.0.1" postcss-selector-parser "^7.1.1" @@ -5623,21 +5640,21 @@ postcss-minify-font-values@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.2.tgz#7937c8dcbd847f6cfd5b16938500587af8882fea" - integrity sha512-fVY3AB8Um7SJR5usHqTY2Ngf9qh8IRN+FFzrBP0ONJy6yYXsP7xyjK2BvSAIrpgs1cST+H91V0TXi3diHLYJtw== +postcss-minify-gradients@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.3.tgz#5a866f18b3ae3f4bdbab78fc0776d38c87537bb4" + integrity sha512-2znRFq3Pg+Zo0ttzQxO7qIJdY2er1TOZbclHW2qMqBcHMmz+i6nn3roAyG3kuEDQTzbzd3gn24TAIifEfth1PQ== dependencies: - "@colordx/core" "^5.0.0" + "@colordx/core" "^5.0.3" cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-minify-params@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.6.tgz#ca0df1bd4eaa70ee7a4ee17f393d275988f44657" - integrity sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ== +postcss-minify-params@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.7.tgz#afc93ae5958ddbcb3fa22e2178263b22e55d341e" + integrity sha512-OPmvW/9sjPEPQYnS2Sh6jvMW54wqk1IjjEMB8k/7V8SUIie71yMy3HQ9+w/ZHoL1YvgDGBQ/mCxP3n0Y/RxgqA== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" @@ -5736,12 +5753,12 @@ postcss-normalize-timing-functions@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.6.tgz#6935d6baf7f7374a34c216a7fe13229acd1073f2" - integrity sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ== +postcss-normalize-unicode@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.7.tgz#c94d2cd291bbe37dd25b8fe1a683a507c0709d41" + integrity sha512-Kfm0mC3gTnOC+SsLgxQqNEZStRxJgBaYrMpBe9fDVB0/MjC1G++FAeDW2YxYc5Mbvav12/7mOBSOTW7HK9Knwg== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" postcss-value-parser "^4.2.0" postcss-normalize-url@^7.0.1: @@ -5766,12 +5783,12 @@ postcss-ordered-values@^7.0.2: cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.6.tgz#fa3af45e60cd04d9a3d29315eb97c82b7b447ead" - integrity sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg== +postcss-reduce-initial@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.7.tgz#a4c9f976ed1279e6bc59560fe45b3e3df9c434d4" + integrity sha512-evetDQPqkgrzHoP8g3HjE3KgH0j2W0je2Vt1pfTaO2KvmjulStxGC2IGeI2y0pdLi6ryEGc4nD08zpDRP9ge8w== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" caniuse-api "^3.0.0" postcss-reduce-transforms@^7.0.1: @@ -5815,9 +5832,9 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.12, postcss@^8.4.40: - version "8.5.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" - integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== + version "8.5.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.9.tgz#f6ee9e0b94f0f19c97d2f172bfbd7fc71fe1cca4" + integrity sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -6106,10 +6123,11 @@ resolve-url-loader@^5.0.0: source-map "0.6.1" resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.11: - version "1.22.11" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" - integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + version "1.22.12" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" + integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== dependencies: + es-errors "^1.3.0" is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -6273,12 +6291,14 @@ sigstore@^4.0.0: "@sigstore/verify" "^3.1.0" simple-git@^3.27.0: - version "3.33.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.33.0.tgz#b903dc70f5b93535a4f64ff39172da43058cfb88" - integrity sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng== + version "3.36.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.36.0.tgz#019b28c0a35847ee34299c6fb63770ab1b2dffb7" + integrity sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" + "@simple-git/args-pathspec" "^1.0.3" + "@simple-git/argv-parser" "^1.1.0" debug "^4.4.0" sirv@^3.0.2: @@ -6466,11 +6486,11 @@ style-loader@^4.0.0: integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== stylehacks@^7.0.5: - version "7.0.8" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.8.tgz#cb5d00bb1779a30c4d408a7d576c016c88b36491" - integrity sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ== + version "7.0.9" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.9.tgz#7efc8fed8155364a7e2760c496d65c992a255cb2" + integrity sha512-dgipCLBa16sZDoQ8BmXdRwV4SmFAxZ4KtbMhV0buow62M/2l6Jq6AkVsKUY/QFr8+VjgzXO5UVHx1f+vvY9DXw== dependencies: - browserslist "^4.28.1" + browserslist "^4.28.2" postcss-selector-parser "^7.1.1" sugarss@^4.0.1: @@ -6569,12 +6589,12 @@ tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== tinyglobby@^0.2.12, tinyglobby@^0.2.7: - version "0.2.15" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" - integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + version "0.2.16" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.16.tgz#1c3b7eb953fce42b226bc5a1ee06428281aff3d6" + integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== dependencies: fdir "^6.5.0" - picomatch "^4.0.3" + picomatch "^4.0.4" tmp@^0.2.5: version "0.2.5" @@ -6653,10 +6673,10 @@ typescript@^6.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.2.tgz#0b1bfb15f68c64b97032f3d78abbf98bdbba501f" integrity sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ== -undici-types@~7.18.0: - version "7.18.2" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" - integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== +undici-types@~7.19.0: + version "7.19.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.19.2.tgz#1b67fc26d0f157a0cba3a58a5b5c1e2276b8ba2a" + integrity sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" @@ -6918,9 +6938,9 @@ webpack-sources@^3.0.0, webpack-sources@^3.3.4: integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== webpack@^5.74.0: - version "5.105.4" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169" - integrity sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw== + version "5.106.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.106.1.tgz#0a3eeb43a50e4f67fbecd206e1e6fc2c89fc2b6f" + integrity sha512-EW8af29ak8Oaf4T8k8YsajjrDBDYgnKZ5er6ljWFJsXABfTNowQfvHLftwcepVgdz+IoLSdEAbBiM9DFXoll9w== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" From 58a34e3628ed1d700d11c02f91148e097e8665a8 Mon Sep 17 00:00:00 2001 From: DanTrackpaw Date: Wed, 15 Apr 2026 00:01:00 +0200 Subject: [PATCH 040/108] Add custom KiCad autocomplete list settings (#1342) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add admin editor for KiCad autocomplete lists * Add custom KiCad autocomplete list settings * Ignore the footprints_custom.txt and symbols_custom.txt in git and create them on the fly if needed Otherwise it breaks the update mechanism * Added comments * Include kicad custom files in config backup command --------- Co-authored-by: Jan Böhmer --- .gitignore | 7 + docs/usage/eda_integration.md | 1 + public/kicad/.gitignore | 3 + src/Command/BackupCommand.php | 4 + src/Controller/KicadListEditorController.php | 88 ++++++++++ .../Part/EDA/KicadFieldAutocompleteType.php | 14 +- src/Form/Settings/KicadListEditorType.php | 103 +++++++++++ src/Services/EDA/KicadListFileManager.php | 158 +++++++++++++++++ .../MiscSettings/KiCadEDASettings.php | 6 + .../settings/kicad_list_editor.html.twig | 28 +++ templates/settings/settings.html.twig | 9 + .../ApplicationAvailabilityFunctionalTest.php | 1 + .../KicadListEditorControllerTest.php | 162 ++++++++++++++++++ translations/messages.en.xlf | 84 +++++++++ 14 files changed, 665 insertions(+), 3 deletions(-) create mode 100644 public/kicad/.gitignore create mode 100644 src/Controller/KicadListEditorController.php create mode 100644 src/Form/Settings/KicadListEditorType.php create mode 100644 src/Services/EDA/KicadListFileManager.php create mode 100644 templates/settings/kicad_list_editor.html.twig create mode 100644 tests/Controller/KicadListEditorControllerTest.php diff --git a/.gitignore b/.gitignore index 176b36e3..704d6202 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,10 @@ phpstan.neon .claude/ CLAUDE.md + +.codex +migrations/.codex +docker-data/ +scripts/ +db/ +docker-compose.yaml diff --git a/docs/usage/eda_integration.md b/docs/usage/eda_integration.md index b99ed4dd..92b1244d 100644 --- a/docs/usage/eda_integration.md +++ b/docs/usage/eda_integration.md @@ -67,6 +67,7 @@ You can define this on a per-part basis using the KiCad symbol and KiCad footpri For example, to configure the values for a BC547 transistor you would put `Transistor_BJT:BC547` in the part's KiCad symbol field to give it the right schematic symbol in Eeschema and `Package_TO_SOT_THT:TO-92` to give it the right footprint in Pcbnew. If you type in a character, you will get an autocomplete list of all symbols and footprints available in the KiCad standard library. You can also input your own value. +If you want to keep custom suggestions across updates, open the server settings page and use the "Autocomplete settings" page. There you can edit `public/kicad/footprints_custom.txt` and `public/kicad/symbols_custom.txt` and enable the "Use custom autocomplete lists" option to use those files instead of the autogenerated defaults. ### Parts and category visibility diff --git a/public/kicad/.gitignore b/public/kicad/.gitignore new file mode 100644 index 00000000..1f2ab53d --- /dev/null +++ b/public/kicad/.gitignore @@ -0,0 +1,3 @@ +# They are user generated and should not be tracked by git +footprints_custom.txt +symbols_custom.txt diff --git a/src/Command/BackupCommand.php b/src/Command/BackupCommand.php index 085c552a..c4fb3777 100644 --- a/src/Command/BackupCommand.php +++ b/src/Command/BackupCommand.php @@ -201,6 +201,10 @@ class BackupCommand extends Command $config_dir = $this->project_dir.'/config'; $zip->addFile($config_dir.'/parameters.yaml', 'config/parameters.yaml'); $zip->addFile($config_dir.'/banner.md', 'config/banner.md'); + + //Add kicad custom footprints and symbols files + $zip->addFile($this->project_dir . '/public/kicad/footprints_custom.txt', 'public/kicad/footprints_custom.txt'); + $zip->addFile($this->project_dir . '/public/kicad/symbols_custom.txt', 'public/kicad/symbols_custom.txt'); } protected function backupAttachments(ZipFile $zip, SymfonyStyle $io): void diff --git a/src/Controller/KicadListEditorController.php b/src/Controller/KicadListEditorController.php new file mode 100644 index 00000000..85ca0a28 --- /dev/null +++ b/src/Controller/KicadListEditorController.php @@ -0,0 +1,88 @@ +. + */ + +declare(strict_types=1); + +namespace App\Controller; + +use App\Form\Settings\KicadListEditorType; +use App\Settings\MiscSettings\KiCadEDASettings; +use App\Services\EDA\KicadListFileManager; +use Jbtronics\SettingsBundle\Exception\SettingsNotValidException; +use Jbtronics\SettingsBundle\Manager\SettingsManagerInterface; +use RuntimeException; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; + +use function Symfony\Component\Translation\t; + +final class KicadListEditorController extends AbstractController +{ + public function __construct( + private readonly SettingsManagerInterface $settingsManager, + ) { + } + + #[Route('/settings/misc/kicad-lists', name: 'settings_kicad_lists')] + public function __invoke(Request $request, KicadListFileManager $fileManager): Response + { + $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); + $this->denyAccessUnlessGranted('@config.change_system_settings'); + + /** @var KiCadEDASettings $settings */ + $settings = $this->settingsManager->createTemporaryCopy(KiCadEDASettings::class); + $form = $this->createForm(KicadListEditorType::class, [ + 'useCustomList' => $settings->useCustomList, + 'customFootprints' => $fileManager->getCustomFootprintsContent(), + 'customSymbols' => $fileManager->getCustomSymbolsContent(), + ], [ + 'default_footprints' => $fileManager->getFootprintsContent(), + 'default_symbols' => $fileManager->getSymbolsContent(), + ]); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $data = $form->getData(); + + try { + $fileManager->saveCustom($data['customFootprints'], $data['customSymbols']); + $settings->useCustomList = (bool) $data['useCustomList']; + $this->settingsManager->mergeTemporaryCopy($settings); + $this->settingsManager->save($settings); + $this->addFlash('success', t('settings.flash.saved')); + + return $this->redirectToRoute('settings_kicad_lists'); + } catch (RuntimeException|SettingsNotValidException $exception) { + $this->addFlash('error', $exception->getMessage()); + } + } + + if ($form->isSubmitted() && !$form->isValid()) { + $this->addFlash('error', t('settings.flash.invalid')); + } + + return $this->render('settings/kicad_list_editor.html.twig', [ + 'form' => $form, + ]); + } +} diff --git a/src/Form/Part/EDA/KicadFieldAutocompleteType.php b/src/Form/Part/EDA/KicadFieldAutocompleteType.php index 50de81d0..8a7b0313 100644 --- a/src/Form/Part/EDA/KicadFieldAutocompleteType.php +++ b/src/Form/Part/EDA/KicadFieldAutocompleteType.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace App\Form\Part\EDA; use App\Form\Type\StaticFileAutocompleteType; +use App\Settings\MiscSettings\KiCadEDASettings; use Symfony\Component\Form\AbstractType; use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -39,6 +40,13 @@ class KicadFieldAutocompleteType extends AbstractType //Do not use a leading slash here! otherwise it will not work under prefixed reverse proxies public const FOOTPRINT_PATH = 'kicad/footprints.txt'; public const SYMBOL_PATH = 'kicad/symbols.txt'; + public const CUSTOM_FOOTPRINT_PATH = 'kicad/footprints_custom.txt'; + public const CUSTOM_SYMBOL_PATH = 'kicad/symbols_custom.txt'; + + public function __construct( + private readonly KiCadEDASettings $kiCadEDASettings, + ) { + } public function configureOptions(OptionsResolver $resolver): void { @@ -47,8 +55,8 @@ class KicadFieldAutocompleteType extends AbstractType $resolver->setDefaults([ 'file' => fn(Options $options) => match ($options['type']) { - self::TYPE_FOOTPRINT => self::FOOTPRINT_PATH, - self::TYPE_SYMBOL => self::SYMBOL_PATH, + self::TYPE_FOOTPRINT => $this->kiCadEDASettings->useCustomList ? self::CUSTOM_FOOTPRINT_PATH : self::FOOTPRINT_PATH, + self::TYPE_SYMBOL => $this->kiCadEDASettings->useCustomList ? self::CUSTOM_SYMBOL_PATH : self::SYMBOL_PATH, default => throw new \InvalidArgumentException('Invalid type'), } ]); @@ -58,4 +66,4 @@ class KicadFieldAutocompleteType extends AbstractType { return StaticFileAutocompleteType::class; } -} \ No newline at end of file +} diff --git a/src/Form/Settings/KicadListEditorType.php b/src/Form/Settings/KicadListEditorType.php new file mode 100644 index 00000000..cefdbdbc --- /dev/null +++ b/src/Form/Settings/KicadListEditorType.php @@ -0,0 +1,103 @@ +. + */ + +declare(strict_types=1); + +namespace App\Form\Settings; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Form type for editing the custom KiCad footprints and symbols lists. + */ +final class KicadListEditorType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('useCustomList', CheckboxType::class, [ + 'label' => 'settings.misc.kicad_eda.use_custom_list', + 'help' => 'settings.misc.kicad_eda.use_custom_list.help', + 'required' => false, + ]) + ->add('customFootprints', TextareaType::class, [ + 'label' => 'settings.misc.kicad_eda.editor.custom_footprints', + 'help' => 'settings.misc.kicad_eda.editor.footprints.help', + 'attr' => [ + 'rows' => 16, + 'spellcheck' => 'false', + 'class' => 'font-monospace', + ], + ]) + ->add('defaultFootprints', TextareaType::class, [ + 'label' => 'settings.misc.kicad_eda.editor.default_footprints', + 'help' => 'settings.misc.kicad_eda.editor.default_files_help', + 'disabled' => true, + 'mapped' => false, + 'data' => $options['default_footprints'], + 'attr' => [ + 'rows' => 16, + 'spellcheck' => 'false', + 'class' => 'font-monospace', + 'readonly' => 'readonly', + ], + ]) + ->add('customSymbols', TextareaType::class, [ + 'label' => 'settings.misc.kicad_eda.editor.custom_symbols', + 'help' => 'settings.misc.kicad_eda.editor.symbols.help', + 'attr' => [ + 'rows' => 16, + 'spellcheck' => 'false', + 'class' => 'font-monospace', + ], + ]) + ->add('defaultSymbols', TextareaType::class, [ + 'label' => 'settings.misc.kicad_eda.editor.default_symbols', + 'help' => 'settings.misc.kicad_eda.editor.default_files_help', + 'disabled' => true, + 'mapped' => false, + 'data' => $options['default_symbols'], + 'attr' => [ + 'rows' => 16, + 'spellcheck' => 'false', + 'class' => 'font-monospace', + 'readonly' => 'readonly', + ], + ]) + ->add('save', SubmitType::class, [ + 'label' => 'save', + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'default_footprints' => '', + 'default_symbols' => '', + ]); + $resolver->setAllowedTypes('default_footprints', 'string'); + $resolver->setAllowedTypes('default_symbols', 'string'); + } +} diff --git a/src/Services/EDA/KicadListFileManager.php b/src/Services/EDA/KicadListFileManager.php new file mode 100644 index 00000000..3d405026 --- /dev/null +++ b/src/Services/EDA/KicadListFileManager.php @@ -0,0 +1,158 @@ +. + */ + +declare(strict_types=1); + +namespace App\Services\EDA; + +use RuntimeException; +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface; + +/** + * Manages the KiCad footprints and symbols list files, including reading, writing and ensuring their existence. + */ +final class KicadListFileManager implements CacheWarmerInterface +{ + private const FOOTPRINTS_PATH = '/public/kicad/footprints.txt'; + private const SYMBOLS_PATH = '/public/kicad/symbols.txt'; + private const CUSTOM_FOOTPRINTS_PATH = '/public/kicad/footprints_custom.txt'; + private const CUSTOM_SYMBOLS_PATH = '/public/kicad/symbols_custom.txt'; + + private const CUSTOM_TEMPLATE = <<<'EOT' + # Custom KiCad autocomplete entries. One entry per line. + + EOT; + + public function __construct( + #[Autowire('%kernel.project_dir%')] + private readonly string $projectDir, + ) { + } + + public function getFootprintsContent(): string + { + return $this->readFile(self::FOOTPRINTS_PATH); + } + + public function getCustomFootprintsContent(): string + { + //Ensure that the custom file exists, so that the UI can always display it without error. + $this->createCustomFileIfNotExists(self::CUSTOM_FOOTPRINTS_PATH); + return $this->readFile(self::CUSTOM_FOOTPRINTS_PATH); + } + + public function getSymbolsContent(): string + { + return $this->readFile(self::SYMBOLS_PATH); + } + + public function getCustomSymbolsContent(): string + { + //Ensure that the custom file exists, so that the UI can always display it without error. + $this->createCustomFileIfNotExists(self::CUSTOM_SYMBOLS_PATH); + return $this->readFile(self::CUSTOM_SYMBOLS_PATH); + } + + public function saveCustom(string $footprints, string $symbols): void + { + $this->writeFile(self::CUSTOM_FOOTPRINTS_PATH, $this->normalizeContent($footprints)); + $this->writeFile(self::CUSTOM_SYMBOLS_PATH, $this->normalizeContent($symbols)); + } + + private function readFile(string $path): string + { + $fullPath = $this->projectDir . $path; + + if (!is_file($fullPath)) { + return ''; + } + + $content = file_get_contents($fullPath); + if ($content === false) { + throw new RuntimeException(sprintf('Failed to read KiCad list file "%s".', $fullPath)); + } + + return $content; + } + + private function writeFile(string $path, string $content): void + { + $fullPath = $this->projectDir . $path; + $tmpPath = $fullPath . '.tmp'; + + if (file_put_contents($tmpPath, $content, LOCK_EX) === false) { + throw new RuntimeException(sprintf('Failed to write KiCad list file "%s".', $fullPath)); + } + + if (!rename($tmpPath, $fullPath)) { + @unlink($tmpPath); + throw new RuntimeException(sprintf('Failed to replace KiCad list file "%s".', $fullPath)); + } + } + + private function normalizeContent(string $content): string + { + $normalized = str_replace(["\r\n", "\r"], "\n", $content); + + if ($normalized !== '' && !str_ends_with($normalized, "\n")) { + $normalized .= "\n"; + } + + return $normalized; + } + + private function createCustomFileIfNotExists(string $path): void + { + $fullPath = $this->projectDir . $path; + + if (!is_file($fullPath)) { + if (file_put_contents($fullPath, self::CUSTOM_TEMPLATE, LOCK_EX) === false) { + throw new RuntimeException(sprintf('Failed to create custom footprints file "%s".', $fullPath)); + } + } + } + + /** + * Ensures that the custom footprints and symbols files exist, so that the UI can always display them without error. + * @return void + */ + public function createCustomFilesIfNotExist(): void + { + $this->createCustomFileIfNotExists(self::CUSTOM_FOOTPRINTS_PATH); + $this->createCustomFileIfNotExists(self::CUSTOM_SYMBOLS_PATH); + } + + + public function isOptional(): bool + { + return false; + } + + /** + * Ensure that the custom footprints and symbols files exist and generate them on cache warmup, so that the frontend + * can always display them without error, even if the user has not yet visited the settings page. + */ + public function warmUp(string $cacheDir, ?string $buildDir = null): array + { + $this->createCustomFilesIfNotExist(); + return []; + } +} diff --git a/src/Settings/MiscSettings/KiCadEDASettings.php b/src/Settings/MiscSettings/KiCadEDASettings.php index cf31bd95..dd223007 100644 --- a/src/Settings/MiscSettings/KiCadEDASettings.php +++ b/src/Settings/MiscSettings/KiCadEDASettings.php @@ -62,4 +62,10 @@ class KiCadEDASettings )] public bool $defaultOrderdetailsVisibility = false; + + #[SettingsParameter( + label: new TM("settings.misc.kicad_eda.use_custom_list"), + description: new TM("settings.misc.kicad_eda.use_custom_list.help"), + )] + public bool $useCustomList = false; } diff --git a/templates/settings/kicad_list_editor.html.twig b/templates/settings/kicad_list_editor.html.twig new file mode 100644 index 00000000..33ff00ec --- /dev/null +++ b/templates/settings/kicad_list_editor.html.twig @@ -0,0 +1,28 @@ +{% extends "main_card.html.twig" %} + +{% block title %}{% trans %}settings.misc.kicad_eda.editor.title{% endtrans %}{% endblock %} + +{% block card_title %} {% trans %}settings.misc.kicad_eda.editor.title{% endtrans %}{% endblock %} + +{% block card_content %} +

+ {% trans %}settings.misc.kicad_eda.editor.description{% endtrans %} +

+ + {{ form_start(form) }} + {{ form_row(form.useCustomList) }} + +
+
+ {{ form_row(form.customFootprints) }} + {{ form_row(form.customSymbols) }} +
+
+ {{ form_row(form.defaultFootprints) }} + {{ form_row(form.defaultSymbols) }} +
+
+ + {{ form_row(form.save) }} + {{ form_end(form) }} +{% endblock %} diff --git a/templates/settings/settings.html.twig b/templates/settings/settings.html.twig index a2c01085..325118d6 100644 --- a/templates/settings/settings.html.twig +++ b/templates/settings/settings.html.twig @@ -49,6 +49,15 @@
{{ form_widget(section_widget) }} + {% if section_widget.vars.name == 'kicadEDA' %} + + {% endif %} {% if not loop.last %}
diff --git a/tests/ApplicationAvailabilityFunctionalTest.php b/tests/ApplicationAvailabilityFunctionalTest.php index c7449411..3bb222d0 100644 --- a/tests/ApplicationAvailabilityFunctionalTest.php +++ b/tests/ApplicationAvailabilityFunctionalTest.php @@ -60,6 +60,7 @@ final class ApplicationAvailabilityFunctionalTest extends WebTestCase //User related things yield ['/user/settings']; yield ['/user/info']; + yield ['/settings/misc/kicad-lists']; //Login/logout yield ['/login']; diff --git a/tests/Controller/KicadListEditorControllerTest.php b/tests/Controller/KicadListEditorControllerTest.php new file mode 100644 index 00000000..0aa05aa1 --- /dev/null +++ b/tests/Controller/KicadListEditorControllerTest.php @@ -0,0 +1,162 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Controller; + +use App\Entity\UserSystem\User; +use App\Settings\MiscSettings\KiCadEDASettings; +use Jbtronics\SettingsBundle\Manager\SettingsManagerInterface; +use PHPUnit\Framework\Attributes\Group; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; + +#[Group('slow')] +#[Group('DB')] +final class KicadListEditorControllerTest extends WebTestCase +{ + private string $footprintsPath; + private string $symbolsPath; + private string $customFootprintsPath; + private string $customSymbolsPath; + private string $originalFootprints; + private string $originalSymbols; + private string $originalCustomFootprints; + private string $originalCustomSymbols; + private bool $originalUseCustomList; + + protected function setUp(): void + { + parent::setUp(); + + $projectDir = dirname(__DIR__, 2); + $this->footprintsPath = $projectDir . '/public/kicad/footprints.txt'; + $this->symbolsPath = $projectDir . '/public/kicad/symbols.txt'; + $this->customFootprintsPath = $projectDir . '/public/kicad/footprints_custom.txt'; + $this->customSymbolsPath = $projectDir . '/public/kicad/symbols_custom.txt'; + $this->originalFootprints = (string) file_get_contents($this->footprintsPath); + $this->originalSymbols = (string) file_get_contents($this->symbolsPath); + $this->originalCustomFootprints = is_file($this->customFootprintsPath) ? (string) file_get_contents($this->customFootprintsPath) : ''; + $this->originalCustomSymbols = is_file($this->customSymbolsPath) ? (string) file_get_contents($this->customSymbolsPath) : ''; + + static::bootKernel(); + /** @var SettingsManagerInterface $settingsManager */ + $settingsManager = static::getContainer()->get(SettingsManagerInterface::class); + /** @var KiCadEDASettings $settings */ + $settings = $settingsManager->get(KiCadEDASettings::class); + $this->originalUseCustomList = $settings->useCustomList; + static::ensureKernelShutdown(); + } + + protected function tearDown(): void + { + file_put_contents($this->footprintsPath, $this->originalFootprints); + file_put_contents($this->symbolsPath, $this->originalSymbols); + file_put_contents($this->customFootprintsPath, $this->originalCustomFootprints); + file_put_contents($this->customSymbolsPath, $this->originalCustomSymbols); + + static::bootKernel(); + /** @var SettingsManagerInterface $settingsManager */ + $settingsManager = static::getContainer()->get(SettingsManagerInterface::class); + /** @var KiCadEDASettings $settings */ + $settings = $settingsManager->get(KiCadEDASettings::class); + $settings->useCustomList = $this->originalUseCustomList; + $settingsManager->save($settings); + static::ensureKernelShutdown(); + + parent::tearDown(); + } + + public function testEditorRequiresAuthentication(): void + { + $client = static::createClient(); + $client->request('GET', '/en/settings/misc/kicad-lists'); + + $this->assertResponseStatusCodeSame(401); + } + + public function testEditorAccessibleByAdmin(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('GET', '/en/settings/misc/kicad-lists'); + + $this->assertResponseIsSuccessful(); + $this->assertSelectorExists('form[name="kicad_list_editor"]'); + } + + public function testEditorShowsDefaultAndCustomFiles(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + file_put_contents($this->footprintsPath, "DefaultFootprint\n"); + file_put_contents($this->symbolsPath, "DefaultSymbol\n"); + file_put_contents($this->customFootprintsPath, "CustomFootprint\n"); + file_put_contents($this->customSymbolsPath, "CustomSymbol\n"); + + $crawler = $client->request('GET', '/en/settings/misc/kicad-lists'); + + $this->assertSame("CustomFootprint\n", $crawler->filter('#kicad_list_editor_customFootprints')->getNode(0)->nodeValue); + $this->assertSame("CustomSymbol\n", $crawler->filter('#kicad_list_editor_customSymbols')->getNode(0)->nodeValue); + $this->assertSame("DefaultFootprint\n", $crawler->filter('#kicad_list_editor_defaultFootprints')->getNode(0)->nodeValue); + $this->assertSame("DefaultSymbol\n", $crawler->filter('#kicad_list_editor_defaultSymbols')->getNode(0)->nodeValue); + } + + public function testEditorSavesCustomFilesAndSetting(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $crawler = $client->request('GET', '/en/settings/misc/kicad-lists'); + $form = $crawler->filter('form[name="kicad_list_editor"]')->form(); + $form['kicad_list_editor[customFootprints]'] = "Package_DIP:DIP-8_W7.62mm\n"; + $form['kicad_list_editor[customSymbols]'] = "Device:R\n"; + $form['kicad_list_editor[useCustomList]']->tick(); + + $client->submit($form); + + $this->assertResponseRedirects('/en/settings/misc/kicad-lists'); + $this->assertSame("Package_DIP:DIP-8_W7.62mm\n", (string) file_get_contents($this->customFootprintsPath)); + $this->assertSame("Device:R\n", (string) file_get_contents($this->customSymbolsPath)); + $this->assertSame($this->originalFootprints, (string) file_get_contents($this->footprintsPath)); + $this->assertSame($this->originalSymbols, (string) file_get_contents($this->symbolsPath)); + + /** @var SettingsManagerInterface $settingsManager */ + $settingsManager = $client->getContainer()->get(SettingsManagerInterface::class); + /** @var KiCadEDASettings $settings */ + $settings = $settingsManager->reload(KiCadEDASettings::class); + $this->assertTrue($settings->useCustomList); + } + + private function loginAsUser($client, string $username): void + { + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $userRepository = $entityManager->getRepository(User::class); + $user = $userRepository->findOneBy(['name' => $username]); + + if (!$user) { + $this->markTestSkipped(sprintf('User "%s" not found in fixtures', $username)); + } + + $client->loginUser($user); + } +} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index a8db61ac..176c6650 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -10029,6 +10029,90 @@ Please note, that you can not impersonate a disabled user. If you try you will g When enabled, the datasheet field in KiCad will link to the actual PDF file (if found). When disabled, it will link to the Part-DB page instead. The Part-DB page link is always available as a separate "Part-DB URL" field. + + + settings.misc.kicad_eda.editor.title + KiCad autocomplete lists + + + + + settings.misc.kicad_eda.editor.link + Autocomplete settings + + + + + settings.misc.kicad_eda.editor.description + Configure whether KiCad autocomplete uses the autogenerated default lists or your custom override files. The custom files are editable here, while the default files are shown read-only for reference. + + + + + settings.misc.kicad_eda.editor.footprints + Footprints list + + + + + settings.misc.kicad_eda.editor.footprints.help + One entry per line. Used as autocomplete suggestions for KiCad footprint fields. + + + + + settings.misc.kicad_eda.editor.symbols + Symbols list + + + + + settings.misc.kicad_eda.editor.symbols.help + One entry per line. Used as autocomplete suggestions for KiCad symbol fields. + + + + + settings.misc.kicad_eda.use_custom_list + Use custom autocomplete lists + + + + + settings.misc.kicad_eda.use_custom_list.help + When enabled, KiCad autocomplete uses public/kicad/footprints_custom.txt and public/kicad/symbols_custom.txt instead of the autogenerated default files. + + + + + settings.misc.kicad_eda.editor.custom_footprints + Custom footprints list + + + + + settings.misc.kicad_eda.editor.custom_symbols + Custom symbols list + + + + + settings.misc.kicad_eda.editor.default_footprints + Default footprints list + + + + + settings.misc.kicad_eda.editor.default_symbols + Default symbols list + + + + + settings.misc.kicad_eda.editor.default_files_help + Autogenerated file shown for reference only. Changes must be made in the custom list. + + settings.behavior.sidebar From 5b86d6f652966ce2c88ed904718a9d743b6c24d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 00:04:52 +0200 Subject: [PATCH 041/108] Require full authentication for the system settings, as some of the settings are quite critical --- src/Controller/SettingsController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Controller/SettingsController.php b/src/Controller/SettingsController.php index 15c945f6..5fed1571 100644 --- a/src/Controller/SettingsController.php +++ b/src/Controller/SettingsController.php @@ -44,6 +44,7 @@ class SettingsController extends AbstractController public function systemSettings(Request $request, TagAwareCacheInterface $cache): Response { $this->denyAccessUnlessGranted('@config.change_system_settings'); + $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); //Create a clone of the settings object $settings = $this->settingsManager->createTemporaryCopy(AppSettings::class); From c17cf5e83c25dc27f611ed855d74bae117a72731 Mon Sep 17 00:00:00 2001 From: Niklas <44636701+MayNiklas@users.noreply.github.com> Date: Wed, 15 Apr 2026 22:13:07 +0200 Subject: [PATCH 042/108] Add price columns to project BOM table and build price summary (#1345) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add unit price and extended price columns to project BOM table Adds two optional columns to the project BOM datatable (hidden by default, toggleable via column visibility): - **Price**: unit price for the BOM entry in the base currency, looked up via PricedetailHelper. For parts whose BOM quantity falls below the minimum order amount the minimum order amount is used for the price tier lookup so that a price is always returned. - **Extended Price**: unit price multiplied by the BOM quantity. Prices are rendered via MoneyFormatter (locale-aware, with currency symbol). Both columns round up to 2 decimal places to avoid displaying 0.00 for very small prices. * Add translation key for project.bom.ext_price Adds the English translation "Extended Price" for the new BOM extended price column. Other languages are marked needs-translation and will be picked up by Crowdin. * Add build price summary to project info tab Displays the total BOM price for N builds on the project info page, using the existing price-tier logic from PricedetailHelper. The user can adjust the number of builds via a small form; the unit price is also shown when N > 1. New backend: - ProjectBuildHelper gains calculateTotalBuildPrice(), calculateUnitBuildPrice(), roundedTotalBuildPrice(), and roundedUnitBuildPrice() — bulk-order quantities are factored in so that price tiers apply correctly across N builds. - ProjectController::info() now reads ?n= and passes number_of_builds to the template. Template (_info.html.twig): - Adds price badge (hidden when no pricing data is available). - Adds number-of-builds form that reloads the info page. * Add tests for build price calculation in ProjectBuildHelper Covers calculateTotalBuildPrice(), calculateUnitBuildPrice(), roundedTotalBuildPrice(), and the private getBomEntryUnitPrice() helper. Scenarios tested: empty project, no pricing data, non-part BOM entries with manual prices, part entries with pricedetails, mixed entries, rounding-up of sub-cent prices, and minimum order amount floor for price tier lookup. * Deduplicate BOM entry price logic into ProjectBuildHelper The private getBomEntryUnitPrice() in ProjectBomEntriesDataTable was identical to the one in ProjectBuildHelper. Replaced it with a new public getEntryUnitPrice() on ProjectBuildHelper (returns BigDecimal, never null) and delegate to it from the DataTable. This eliminates the duplicate code and brings the DataTable lines under the existing ProjectBuildHelper test coverage. Added three tests for getEntryUnitPrice() covering the no-pricing, non-part, and part cases. * Added type hint to service --------- Co-authored-by: Jan Böhmer --- src/Controller/ProjectController.php | 3 + src/DataTables/ProjectBomEntriesDataTable.php | 30 ++- .../ProjectSystem/ProjectBuildHelper.php | 87 ++++++++- templates/projects/info/_info.html.twig | 36 +++- .../ProjectSystem/ProjectBuildHelperTest.php | 180 +++++++++++++++++- .../ProjectBuildPartHelperTest.php | 3 +- translations/messages.cs.xlf | 6 + translations/messages.da.xlf | 6 + translations/messages.de.xlf | 6 + translations/messages.en.xlf | 18 ++ translations/messages.es.xlf | 6 + translations/messages.hu.xlf | 6 + translations/messages.it.xlf | 6 + translations/messages.pl.xlf | 6 + translations/messages.ru.xlf | 6 + translations/messages.zh.xlf | 6 + 16 files changed, 398 insertions(+), 13 deletions(-) diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index d2c35efd..531deb3f 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -69,10 +69,13 @@ class ProjectController extends AbstractController return $table->getResponse(); } + $number_of_builds = max(1, $request->query->getInt('n', 1)); + return $this->render('projects/info/info.html.twig', [ 'buildHelper' => $buildHelper, 'datatable' => $table, 'project' => $project, + 'number_of_builds' => $number_of_builds, ]); } diff --git a/src/DataTables/ProjectBomEntriesDataTable.php b/src/DataTables/ProjectBomEntriesDataTable.php index 04d8206b..2d5c4ebc 100644 --- a/src/DataTables/ProjectBomEntriesDataTable.php +++ b/src/DataTables/ProjectBomEntriesDataTable.php @@ -29,12 +29,15 @@ use App\DataTables\Column\LocaleDateTimeColumn; use App\DataTables\Column\MarkdownColumn; use App\DataTables\Helpers\PartDataTableHelper; use App\Doctrine\Helpers\FieldHelper; -use App\Entity\Parts\Part; use App\Entity\Parts\ManufacturingStatus; +use App\Entity\Parts\Part; use App\Entity\ProjectSystem\ProjectBOMEntry; use App\Services\ElementTypeNameGenerator; use App\Services\EntityURLGenerator; use App\Services\Formatters\AmountFormatter; +use App\Services\Formatters\MoneyFormatter; +use App\Services\ProjectSystem\ProjectBuildHelper; +use Brick\Math\RoundingMode; use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; @@ -50,7 +53,9 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface protected EntityURLGenerator $entityURLGenerator, protected TranslatorInterface $translator, protected AmountFormatter $amountFormatter, - protected PartDataTableHelper $partDataTableHelper + protected PartDataTableHelper $partDataTableHelper, + protected ProjectBuildHelper $projectBuildHelper, + protected MoneyFormatter $moneyFormatter, ) { } @@ -202,6 +207,27 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface return ''; } ]) + ->add('price', TextColumn::class, [ + 'label' => 'project.bom.price', + 'visible' => false, + 'render' => function ($value, ProjectBOMEntry $context) { + $price = $this->projectBuildHelper->getEntryUnitPrice($context); + return $this->moneyFormatter->format($price->toScale(2, RoundingMode::UP)->toFloat(), null, 2, true); + }, + ]) + ->add('ext_price', TextColumn::class, [ + 'label' => 'project.bom.ext_price', + 'visible' => false, + 'render' => function ($value, ProjectBOMEntry $context) { + $price = $this->projectBuildHelper->getEntryUnitPrice($context); + return $this->moneyFormatter->format( + $price->multipliedBy($context->getQuantity())->toScale(2, RoundingMode::UP)->toFloat(), + null, + 2, + true + ); + }, + ]) ->add('addedDate', LocaleDateTimeColumn::class, [ 'label' => $this->translator->trans('part.table.addedDate'), diff --git a/src/Services/ProjectSystem/ProjectBuildHelper.php b/src/Services/ProjectSystem/ProjectBuildHelper.php index a541c29d..ee5b8c68 100644 --- a/src/Services/ProjectSystem/ProjectBuildHelper.php +++ b/src/Services/ProjectSystem/ProjectBuildHelper.php @@ -25,16 +25,22 @@ namespace App\Services\ProjectSystem; use App\Entity\Parts\Part; use App\Entity\ProjectSystem\Project; use App\Entity\ProjectSystem\ProjectBOMEntry; +use App\Entity\PriceInformations\Currency; use App\Helpers\Projects\ProjectBuildRequest; use App\Services\Parts\PartLotWithdrawAddHelper; +use App\Services\Parts\PricedetailHelper; +use Brick\Math\BigDecimal; +use Brick\Math\RoundingMode; /** * @see \App\Tests\Services\ProjectSystem\ProjectBuildHelperTest */ final readonly class ProjectBuildHelper { - public function __construct(private PartLotWithdrawAddHelper $withdraw_add_helper) - { + public function __construct( + private PartLotWithdrawAddHelper $withdraw_add_helper, + private PricedetailHelper $pricedetailHelper, + ) { } /** @@ -168,4 +174,81 @@ final readonly class ProjectBuildHelper $this->withdraw_add_helper->add($buildRequest->getBuildsPartLot(), $buildRequest->getNumberOfBuilds(), $message); } } + + /** + * Calculates the total price to build the given project N times, taking bulk pricing into account. + * Returns null if no BOM entry has any pricing information. + */ + public function calculateTotalBuildPrice(Project $project, int $number_of_builds = 1, ?Currency $currency = null): ?BigDecimal + { + $total = BigDecimal::zero(); + $has_price = false; + + foreach ($project->getBomEntries() as $entry) { + $unit_price = $this->getBomEntryUnitPrice($entry, $number_of_builds, $currency); + if ($unit_price === null) { + continue; + } + $has_price = true; + $total = $total->plus($unit_price->multipliedBy($entry->getQuantity())->multipliedBy($number_of_builds)); + } + + return $has_price ? $total : null; + } + + /** + * Calculates the price to build one unit of the given project when ordering for N builds in total. + * Returns null if no BOM entry has any pricing information. + */ + public function calculateUnitBuildPrice(Project $project, int $number_of_builds = 1, ?Currency $currency = null): ?BigDecimal + { + $total = $this->calculateTotalBuildPrice($project, $number_of_builds, $currency); + if ($total === null) { + return null; + } + return $total->dividedBy($number_of_builds, 10, RoundingMode::HALF_UP); + } + + /** + * Returns the total build price rounded up to 2 decimal places, ready for display. + */ + public function roundedTotalBuildPrice(Project $project, int $number_of_builds = 1, ?Currency $currency = null): ?BigDecimal + { + return $this->calculateTotalBuildPrice($project, $number_of_builds, $currency) + ?->toScale(2, RoundingMode::UP); + } + + /** + * Returns the unit build price rounded up to 2 decimal places, ready for display. + */ + public function roundedUnitBuildPrice(Project $project, int $number_of_builds = 1, ?Currency $currency = null): ?BigDecimal + { + return $this->calculateUnitBuildPrice($project, $number_of_builds, $currency) + ?->toScale(2, RoundingMode::UP); + } + + /** + * Returns the effective unit price for a single piece of the given BOM entry, + * taking bulk pricing and minimum order amounts into account for N builds. + * Returns BigDecimal::zero() when no pricing data is available. + */ + public function getEntryUnitPrice(ProjectBOMEntry $entry, int $number_of_builds = 1, ?Currency $currency = null): BigDecimal + { + return $this->getBomEntryUnitPrice($entry, $number_of_builds, $currency) ?? BigDecimal::zero(); + } + + /** + * Returns the effective unit price for a single piece of the given BOM entry, + * taking bulk pricing into account for N builds. + */ + private function getBomEntryUnitPrice(ProjectBOMEntry $entry, int $number_of_builds, ?Currency $currency): ?BigDecimal + { + if ($entry->getPart() instanceof Part) { + $total_qty = $entry->getQuantity() * $number_of_builds; + $min_order = $this->pricedetailHelper->getMinOrderAmount($entry->getPart()); + $effective_qty = ($min_order !== null) ? max($total_qty, $min_order) : $total_qty; + return $this->pricedetailHelper->calculateAvgPrice($entry->getPart(), $effective_qty, $currency); + } + return $entry->getPrice(); + } } diff --git a/templates/projects/info/_info.html.twig b/templates/projects/info/_info.html.twig index b95be253..c3a8e86d 100644 --- a/templates/projects/info/_info.html.twig +++ b/templates/projects/info/_info.html.twig @@ -55,6 +55,32 @@
+ {% set n = number_of_builds ?? 1 %} + {% set total_build_price = buildHelper.roundedTotalBuildPrice(project, n, app.user.currency ?? null) %} + {% set unit_build_price = buildHelper.roundedUnitBuildPrice(project, n, app.user.currency ?? null) %} + {% if total_build_price is not null %} +
+
+ + + {% trans %}project.info.total_build_price{% endtrans %}: + {{ total_build_price | format_money(app.user.currency ?? null, 2) }} + {% if n > 1 and unit_build_price is not null %} + + ({% trans %}project.info.per_unit_price{% endtrans %}: {{ unit_build_price | format_money(app.user.currency ?? null, 2) }}) + + {% endif %} + +
+
+ {% endif %} +
+
+ {% trans %}project.builds.number_of_builds{% endtrans %} + + +
+
{% if project.children is not empty %}
@@ -69,9 +95,9 @@
{% if project.comment is not empty %} -

-

{% trans %}comment.label{% endtrans %}:
- {{ project.comment|format_markdown }} -

+
+
{% trans %}comment.label{% endtrans %}:
+ {{ project.comment|format_markdown }} +
{% endif %} - \ No newline at end of file + diff --git a/tests/Services/ProjectSystem/ProjectBuildHelperTest.php b/tests/Services/ProjectSystem/ProjectBuildHelperTest.php index fb31b51e..b80adb2f 100644 --- a/tests/Services/ProjectSystem/ProjectBuildHelperTest.php +++ b/tests/Services/ProjectSystem/ProjectBuildHelperTest.php @@ -26,13 +26,15 @@ use App\Entity\Parts\Part; use App\Entity\Parts\PartLot; use App\Entity\ProjectSystem\Project; use App\Entity\ProjectSystem\ProjectBOMEntry; +use App\Entity\PriceInformations\Orderdetail; +use App\Entity\PriceInformations\Pricedetail; use App\Services\ProjectSystem\ProjectBuildHelper; +use Brick\Math\BigDecimal; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; final class ProjectBuildHelperTest extends WebTestCase { - /** @var ProjectBuildHelper */ - protected $service; + protected ProjectBuildHelper $service; protected function setUp(): void { @@ -130,6 +132,180 @@ final class ProjectBuildHelperTest extends WebTestCase $project->addBomEntry($bom_entry1); $this->assertSame('∞', $this->service->getMaximumBuildableCountAsString($project)); + } + // --- Build price tests --- + + private function makePartWithPrice(float $pricePerPiece, float $minQty = 1.0): Part + { + $part = new Part(); + $orderdetail = new Orderdetail(); + $pricedetail = (new Pricedetail()) + ->setMinDiscountQuantity($minQty) + ->setPrice(BigDecimal::of((string) $pricePerPiece)); + $orderdetail->addPricedetail($pricedetail); + $part->addOrderdetail($orderdetail); + return $part; + } + + public function testCalculateTotalBuildPriceEmptyProject(): void + { + $project = new Project(); + $this->assertNull($this->service->calculateTotalBuildPrice($project)); + } + + public function testCalculateTotalBuildPriceNoPricingData(): void + { + $project = new Project(); + // Part with no orderdetails — no pricing + $entry = (new ProjectBOMEntry())->setPart(new Part())->setQuantity(2); + $project->addBomEntry($entry); + + $this->assertNull($this->service->calculateTotalBuildPrice($project)); + } + + public function testCalculateTotalBuildPriceNonPartEntry(): void + { + $project = new Project(); + $entry = new ProjectBOMEntry(); + $entry->setName('Custom wire'); + $entry->setQuantity(3); + $entry->setPrice(BigDecimal::of('2.00')); + $project->addBomEntry($entry); + + // 3 × 2.00 = 6.00 for 1 build + $result = $this->service->calculateTotalBuildPrice($project, 1); + $this->assertNotNull($result); + $this->assertTrue(BigDecimal::of('6.00')->isEqualTo($result)); + } + + public function testCalculateTotalBuildPriceNonPartEntryMultipleBuilds(): void + { + $project = new Project(); + $entry = new ProjectBOMEntry(); + $entry->setName('Custom wire'); + $entry->setQuantity(3); + $entry->setPrice(BigDecimal::of('2.00')); + $project->addBomEntry($entry); + + // 3 × 2.00 × 5 = 30.00 for 5 builds + $result = $this->service->calculateTotalBuildPrice($project, 5); + $this->assertNotNull($result); + $this->assertTrue(BigDecimal::of('30.00')->isEqualTo($result)); + } + + public function testCalculateTotalBuildPriceWithPart(): void + { + $project = new Project(); + $entry = new ProjectBOMEntry(); + $entry->setPart($this->makePartWithPrice(1.50)); + $entry->setQuantity(4); + $project->addBomEntry($entry); + + // 4 × 1.50 = 6.00 for 1 build + $result = $this->service->calculateTotalBuildPrice($project, 1); + $this->assertNotNull($result); + $this->assertTrue(BigDecimal::of('6.00')->isEqualTo($result)); + } + + public function testCalculateUnitBuildPriceEqualsTotal(): void + { + $project = new Project(); + $entry = new ProjectBOMEntry(); + $entry->setName('Screw'); + $entry->setQuantity(10); + $entry->setPrice(BigDecimal::of('0.10')); + $project->addBomEntry($entry); + + // unit = 10 × 0.10 = 1.00; total for 3 builds = 3.00 + $unit = $this->service->calculateUnitBuildPrice($project, 3); + $total = $this->service->calculateTotalBuildPrice($project, 3); + $this->assertNotNull($unit); + $this->assertNotNull($total); + $this->assertTrue($total->isEqualTo($unit->multipliedBy(3))); + } + + public function testRoundedTotalBuildPriceRoundsUp(): void + { + $project = new Project(); + $entry = new ProjectBOMEntry(); + $entry->setName('Tiny part'); + $entry->setQuantity(1); + $entry->setPrice(BigDecimal::of('0.001')); + $project->addBomEntry($entry); + + // 0.001 rounded up to 2dp = 0.01 + $result = $this->service->roundedTotalBuildPrice($project, 1); + $this->assertNotNull($result); + $this->assertTrue(BigDecimal::of('0.01')->isEqualTo($result)); + } + + public function testCalculateTotalBuildPriceMixedEntries(): void + { + $project = new Project(); + + // Part entry: 2 × 3.00 = 6.00 + $partEntry = new ProjectBOMEntry(); + $partEntry->setPart($this->makePartWithPrice(3.00)); + $partEntry->setQuantity(2); + $project->addBomEntry($partEntry); + + // Non-part entry with price: 5 × 1.00 = 5.00 + $nonPartEntry = new ProjectBOMEntry(); + $nonPartEntry->setName('Solder'); + $nonPartEntry->setQuantity(5); + $nonPartEntry->setPrice(BigDecimal::of('1.00')); + $project->addBomEntry($nonPartEntry); + + // Total = 11.00 + $result = $this->service->calculateTotalBuildPrice($project, 1); + $this->assertNotNull($result); + $this->assertTrue(BigDecimal::of('11.00')->isEqualTo($result)); + } + + public function testGetEntryUnitPriceReturnsZeroForNoPricingData(): void + { + $entry = new ProjectBOMEntry(); + $entry->setPart(new Part()); // part with no orderdetails + $entry->setQuantity(5); + + $result = $this->service->getEntryUnitPrice($entry); + $this->assertTrue(BigDecimal::zero()->isEqualTo($result)); + } + + public function testGetEntryUnitPriceNonPartEntry(): void + { + $entry = new ProjectBOMEntry(); + $entry->setName('Wire'); + $entry->setQuantity(2); + $entry->setPrice(BigDecimal::of('1.25')); + + $result = $this->service->getEntryUnitPrice($entry); + $this->assertTrue(BigDecimal::of('1.25')->isEqualTo($result)); + } + + public function testGetEntryUnitPriceWithPart(): void + { + $entry = new ProjectBOMEntry(); + $entry->setPart($this->makePartWithPrice(2.00)); + $entry->setQuantity(3); + + $result = $this->service->getEntryUnitPrice($entry); + $this->assertTrue(BigDecimal::of('2.00')->isEqualTo($result)); + } + + public function testCalculateTotalBuildPriceRespectsMinOrderAmount(): void + { + $project = new Project(); + // Part has a minimum order quantity of 10 at 0.50/piece + $entry = new ProjectBOMEntry(); + $entry->setPart($this->makePartWithPrice(0.50, 10.0)); + $entry->setQuantity(1); // BOM only needs 1, but MOQ is 10 + $project->addBomEntry($entry); + + // Price lookup uses qty=10 (MOQ), returns 0.50. Cost = 1 × 0.50 = 0.50 + $result = $this->service->calculateTotalBuildPrice($project, 1); + $this->assertNotNull($result); + $this->assertTrue(BigDecimal::of('0.50')->isEqualTo($result)); } } diff --git a/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php b/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php index 894f6315..8126c83d 100644 --- a/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php +++ b/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php @@ -28,8 +28,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; final class ProjectBuildPartHelperTest extends WebTestCase { - /** @var ProjectBuildPartHelper */ - protected $service; + protected ProjectBuildPartHelper $service; protected function setUp(): void { diff --git a/translations/messages.cs.xlf b/translations/messages.cs.xlf index 74ca2a26..0f4cf2c8 100644 --- a/translations/messages.cs.xlf +++ b/translations/messages.cs.xlf @@ -7241,6 +7241,12 @@ Element 3 Cena + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.da.xlf b/translations/messages.da.xlf index 9878a09e..85faf9c2 100644 --- a/translations/messages.da.xlf +++ b/translations/messages.da.xlf @@ -7184,6 +7184,12 @@ Element 3 Pris + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index db595136..680d4b7f 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -7235,6 +7235,12 @@ Element 1 -> Element 1.2 Preis + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 176c6650..9e5ed157 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -7212,6 +7212,18 @@ Element 1 -> Element 1.2 Subprojects + + + project.info.total_build_price + Total build price + + + + + project.info.per_unit_price + per unit + + project.info.bom_add_parts @@ -7236,6 +7248,12 @@ Element 1 -> Element 1.2 Price + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.es.xlf b/translations/messages.es.xlf index 17b2156b..c580a491 100644 --- a/translations/messages.es.xlf +++ b/translations/messages.es.xlf @@ -7259,6 +7259,12 @@ Elemento 3 Precio + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.hu.xlf b/translations/messages.hu.xlf index ba47c2e2..86dd9f6c 100644 --- a/translations/messages.hu.xlf +++ b/translations/messages.hu.xlf @@ -7198,6 +7198,12 @@ Ár + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.it.xlf b/translations/messages.it.xlf index cfaee7a2..70fdbdfa 100644 --- a/translations/messages.it.xlf +++ b/translations/messages.it.xlf @@ -7186,6 +7186,12 @@ Element 3 Prezzo + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.pl.xlf b/translations/messages.pl.xlf index a4eb1cda..0237d46e 100644 --- a/translations/messages.pl.xlf +++ b/translations/messages.pl.xlf @@ -7256,6 +7256,12 @@ Element 3 Cena + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.ru.xlf b/translations/messages.ru.xlf index 4fd2aa82..f0d18558 100644 --- a/translations/messages.ru.xlf +++ b/translations/messages.ru.xlf @@ -7260,6 +7260,12 @@ Цена + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw diff --git a/translations/messages.zh.xlf b/translations/messages.zh.xlf index 9455240c..fde08cfe 100644 --- a/translations/messages.zh.xlf +++ b/translations/messages.zh.xlf @@ -7259,6 +7259,12 @@ Element 3 价格 + + + project.bom.ext_price + Extended Price + + part.info.withdraw_modal.title.withdraw From 146e85f84c22f8b8cec3d668be752caedf3c2ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 22:13:54 +0200 Subject: [PATCH 043/108] Update KiCad symbols and footprints lists (#1333) * Update KiCad symbols and footprints lists * Update KiCad symbols and footprints lists * Update KiCad symbols and footprints lists --------- Co-authored-by: github-actions[bot] --- public/kicad/footprints.txt | 2 +- public/kicad/symbols.txt | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt index a34b9406..551d7d9c 100644 --- a/public/kicad/footprints.txt +++ b/public/kicad/footprints.txt @@ -1,4 +1,4 @@ -# Generated on Mon Mar 9 04:23:25 UTC 2026 +# Generated on Mon Apr 13 05:19:27 UTC 2026 # This file contains all footprints available in the offical KiCAD library Audio_Module:Reverb_BTDR-1H Audio_Module:Reverb_BTDR-1V diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt index 54fd79d2..34e246a5 100644 --- a/public/kicad/symbols.txt +++ b/public/kicad/symbols.txt @@ -1,4 +1,4 @@ -# Generated on Mon Mar 9 04:24:12 UTC 2026 +# Generated on Mon Apr 13 05:20:06 UTC 2026 # This file contains all symbols available in the offical KiCAD library 4xxx:14528 4xxx:14529 @@ -899,6 +899,7 @@ Amplifier_Buffer:BUF634AxD Amplifier_Buffer:BUF634AxDDA Amplifier_Buffer:BUF634AxDRB Amplifier_Buffer:BUF634U +Amplifier_Buffer:BUF802 Amplifier_Buffer:EL2001CN Amplifier_Buffer:LH0002H Amplifier_Buffer:LM6321H @@ -1667,7 +1668,6 @@ Analog_ADC:CA3300 Analog_ADC:HX711 Analog_ADC:ICL7106CPL Analog_ADC:ICL7107CPL -Analog_ADC:INA234AxYBJ Analog_ADC:LTC1406CGN Analog_ADC:LTC1406IGN Analog_ADC:LTC1594CS @@ -2198,6 +2198,7 @@ Audio:WM8731SEDS Audio:YM2149 Audio:YM2612 Audio:YM3438 +Auxiliary_Items:Generic_Outline Auxiliary_Items:Jumper_Shunt Auxiliary_Items:MountingScrew Battery_Management:ADP5063 @@ -2254,6 +2255,11 @@ Battery_Management:BQ76200PW Battery_Management:BQ76920PW Battery_Management:BQ76930DBT Battery_Management:BQ76940DBT +Battery_Management:BQ7695201PFBR +Battery_Management:BQ7695202PFBR +Battery_Management:BQ7695203PFBR +Battery_Management:BQ7695204PFBR +Battery_Management:BQ76952PFBR Battery_Management:BQ78350DBT Battery_Management:BQ78350DBT-R1 Battery_Management:CN3063 @@ -2763,6 +2769,8 @@ Connector:DIN41612_02x32_AC Connector:DIN41612_02x32_AE Connector:DIN41612_02x32_ZB Connector:DIN41612_03x32_C_Split +Connector:DP_Sink +Connector:DP_Source Connector:DVI-D_Dual_Link Connector:DVI-I_Dual_Link Connector:ExpressCard @@ -2901,6 +2909,7 @@ Connector:TestPoint_Alt Connector:TestPoint_Flag Connector:TestPoint_Probe Connector:TestPoint_Small +Connector:TestPoint_Square Connector:UEXT_Host Connector:UEXT_Slave Connector:USB3_A @@ -7772,6 +7781,7 @@ FPGA_Lattice:ICE40HX1K-TQ144 FPGA_Lattice:ICE40HX4K-BG121 FPGA_Lattice:ICE40HX4K-TQ144 FPGA_Lattice:ICE40HX8K-BG121 +FPGA_Lattice:ICE40LP384-SG32 FPGA_Lattice:ICE40UL1K-SWG16 FPGA_Lattice:ICE40UP5K-SG48ITR FPGA_Lattice:ICE5LP1K-SG48 @@ -15731,6 +15741,7 @@ Power_Management:RT9742AGJ5F Power_Management:RT9742ANGJ5F Power_Management:RT9742BGJ5F Power_Management:RT9742BNGJ5F +Power_Management:RT9742SNGV Power_Management:SN6505ADBV Power_Management:SN6505BDBV Power_Management:SN6507DGQ @@ -18692,6 +18703,7 @@ Regulator_Linear:TPS7A0530PDBZ Regulator_Linear:TPS7A0531PDBV Regulator_Linear:TPS7A0533PDBV Regulator_Linear:TPS7A0533PDBZ +Regulator_Linear:TPS7A20xxxDBV Regulator_Linear:TPS7A20xxxDQN Regulator_Linear:TPS7A3301RGW Regulator_Linear:TPS7A39 @@ -20301,7 +20313,6 @@ Sensor:BME280 Sensor:BME680 Sensor:CHT11 Sensor:DHT11 -Sensor:INA260 Sensor:LTC2990 Sensor:MAX30102 Sensor:Nuclear-Radiation_Detector @@ -20588,9 +20599,12 @@ Sensor_Energy:INA219BxD Sensor_Energy:INA219BxDCN Sensor_Energy:INA226 Sensor_Energy:INA228 +Sensor_Energy:INA229 Sensor_Energy:INA233 +Sensor_Energy:INA234AxYBJ Sensor_Energy:INA237 Sensor_Energy:INA238 +Sensor_Energy:INA260 Sensor_Energy:LTC4151xMS Sensor_Energy:MCP39F521 Sensor_Energy:PAC1931x-xJ6CX @@ -20872,6 +20886,7 @@ Sensor_Proximity:BPR-105 Sensor_Proximity:BPR-105F Sensor_Proximity:BPR-205 Sensor_Proximity:CNY70 +Sensor_Proximity:FDC1004DGS Sensor_Proximity:GP2S700HCP Sensor_Proximity:ITR1201SR10AR Sensor_Proximity:ITR8307 @@ -21791,6 +21806,7 @@ Transistor_BJT:Q_NPN_Darlington_ECBC Transistor_BJT:Q_NPN_EBC Transistor_BJT:Q_NPN_ECB Transistor_BJT:Q_NPN_ECBC +Transistor_BJT:Q_PNP_ACAB Transistor_BJT:Q_PNP_BCE Transistor_BJT:Q_PNP_BCEC Transistor_BJT:Q_PNP_BEC From 29db029d69282d0eb23144bb5b1741cf1f478c3a Mon Sep 17 00:00:00 2001 From: Wieland Schopohl <55855374+wschopohl@users.noreply.github.com> Date: Wed, 15 Apr 2026 22:56:34 +0200 Subject: [PATCH 044/108] Add SI-prefix-aware sorting column for parts tableFeature/si value sort (#1344) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add SI-prefix-aware sorting column for the parts table Adds an optional "Name (SI)" column that parses numeric values with SI prefixes (p, n, u/µ, m, k/K, M, G, T) from part names and sorts by the resulting physical value. This is useful for electronic components where alphabetical sorting produces wrong results — e.g. 100nF, 10pF, 1uF should sort as 10pF < 100nF < 1uF. Implementation: - New SiValueSort DQL function with platform-specific SQL generation for PostgreSQL (POSIX regex), MySQL/MariaDB (REGEXP_SUBSTR), and SQLite (PHP callback registered via the existing middleware). - The regex is start-anchored: only names beginning with a number are matched. Part numbers like "MCP2515" or "Crystal 20MHz" are ignored. - When SI sort is active, NATSORT is appended as a secondary sort so that non-matching parts fall back to natural string ordering instead of appearing in arbitrary order. - The column is opt-in (not in default columns) and displays the parsed float value, or an empty cell for non-matching names. * Rename SI column from "Name (SI)" to "SI Value" The column now shows the parsed numeric value rather than the part name, so the label should reflect that. * Support comma as decimal separator in SI value parsing Part names using European decimal notation (e.g. "4,7 kΩ", "2,2uF") were parsed incorrectly because the regex only recognized dots. Now commas are normalized to dots before parsing, matching the existing pattern used elsewhere in the codebase (PartNormalizer, price providers). --- config/packages/doctrine.yaml | 1 + src/DataTables/PartsDataTable.php | 25 +++ src/Doctrine/Functions/SiValueSort.php | 196 ++++++++++++++++++ .../SQLiteRegexExtensionMiddlewareDriver.php | 4 + .../BehaviorSettings/PartTableColumns.php | 2 + tests/Doctrine/Functions/SiValueSortTest.php | 193 +++++++++++++++++ translations/messages.en.xlf | 6 + 7 files changed, 427 insertions(+) create mode 100644 src/Doctrine/Functions/SiValueSort.php create mode 100644 tests/Doctrine/Functions/SiValueSortTest.php diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 5261c295..164ac717 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -56,6 +56,7 @@ doctrine: natsort: App\Doctrine\Functions\Natsort array_position: App\Doctrine\Functions\ArrayPosition ilike: App\Doctrine\Functions\ILike + si_value_sort: App\Doctrine\Functions\SiValueSort when@test: doctrine: diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index 8bb5f6aa..ca2abd45 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -38,6 +38,7 @@ use App\DataTables\Filters\PartFilter; use App\DataTables\Filters\PartSearchFilter; use App\DataTables\Helpers\ColumnSortHelper; use App\DataTables\Helpers\PartDataTableHelper; +use App\Doctrine\Functions\SiValueSort; use App\Doctrine\Helpers\FieldHelper; use App\Entity\Parts\ManufacturingStatus; use App\Entity\Parts\Part; @@ -118,6 +119,17 @@ final class PartsDataTable implements DataTableTypeInterface 'render' => fn($value, Part $context) => $this->partDataTableHelper->renderName($context), 'orderField' => 'NATSORT(part.name)' ]) + ->add('si_value', TextColumn::class, [ + 'label' => $this->translator->trans('part.table.si_value'), + 'render' => function ($value, Part $context): string { + $siValue = SiValueSort::sqliteSiValue($context->getName()); + if ($siValue !== null) { + return htmlspecialchars(sprintf('%g', $siValue)); + } + return ''; + }, + 'orderField' => 'SI_VALUE_SORT(part.name)', + ]) ->add('id', TextColumn::class, [ 'label' => $this->translator->trans('part.table.id'), ]) @@ -484,6 +496,19 @@ final class PartsDataTable implements DataTableTypeInterface //$builder->addGroupBy('_bulkImportJob'); } + //When sorting by SI value, add NATSORT as a secondary sort so that parts without + //an SI-prefixed value fall back to natural string ordering seamlessly. + $orderByParts = $builder->getDQLPart('orderBy'); + foreach ($orderByParts as $orderBy) { + foreach ($orderBy->getParts() as $part) { + if (str_contains($part, 'SI_VALUE_SORT')) { + $direction = str_contains($part, 'DESC') ? 'DESC' : 'ASC'; + $builder->addOrderBy('NATSORT(part.name)', $direction); + break 2; + } + } + } + return $builder; } diff --git a/src/Doctrine/Functions/SiValueSort.php b/src/Doctrine/Functions/SiValueSort.php new file mode 100644 index 00000000..1bba1b9f --- /dev/null +++ b/src/Doctrine/Functions/SiValueSort.php @@ -0,0 +1,196 @@ +. + */ + +declare(strict_types=1); + +namespace App\Doctrine\Functions; + +use Doctrine\DBAL\Platforms\AbstractMySQLPlatform; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; +use Doctrine\DBAL\Platforms\SQLitePlatform; +use Doctrine\ORM\Query\AST\Functions\FunctionNode; +use Doctrine\ORM\Query\AST\Node; +use Doctrine\ORM\Query\Parser; +use Doctrine\ORM\Query\SqlWalker; +use Doctrine\ORM\Query\TokenType; + +/** + * Custom DQL function that extracts the first numeric value with an optional SI prefix + * from a string and returns the scaled numeric value for sorting. + * + * Usage: SI_VALUE_SORT(part.name) + * + * This enables sorting parts by their physical value. For example, capacitors + * named "100nF", "1uF", "10pF" will be sorted by actual value: 10pF < 100nF < 1uF. + * + * Supported SI prefixes: p (pico, 1e-12), n (nano, 1e-9), u/µ (micro, 1e-6), + * m (milli, 1e-3), k/K (kilo, 1e3), M (mega, 1e6), G (giga, 1e9), T (tera, 1e12). + * + * Only matches numbers at the very beginning of the string (ignoring leading whitespace). + * Names like "Crystal 20MHz" will NOT match since the number is not at the start. + * Names without a recognizable numeric+prefix pattern return NULL and sort last. + */ +class SiValueSort extends FunctionNode +{ + private ?Node $field = null; + + /** + * SI prefix multipliers. Used by the SQLite PHP callback. + */ + private const SI_MULTIPLIERS = [ + 'p' => 1e-12, + 'n' => 1e-9, + 'u' => 1e-6, + 'µ' => 1e-6, + 'm' => 1e-3, + 'k' => 1e3, + 'K' => 1e3, + 'M' => 1e6, + 'G' => 1e9, + 'T' => 1e12, + ]; + + public function parse(Parser $parser): void + { + $parser->match(TokenType::T_IDENTIFIER); + $parser->match(TokenType::T_OPEN_PARENTHESIS); + + $this->field = $parser->ArithmeticExpression(); + + $parser->match(TokenType::T_CLOSE_PARENTHESIS); + } + + public function getSql(SqlWalker $sqlWalker): string + { + assert($this->field !== null, 'Field is not set'); + + $platform = $sqlWalker->getConnection()->getDatabasePlatform(); + $rawField = $this->field->dispatch($sqlWalker); + + // Normalize comma decimal separator to dot for SQL platforms (European locale support) + $fieldSql = "REPLACE({$rawField}, ',', '.')"; + + if ($platform instanceof PostgreSQLPlatform) { + return $this->getPostgreSQLSql($fieldSql); + } + + if ($platform instanceof AbstractMySQLPlatform) { + return $this->getMySQLSql($fieldSql); + } + + // SQLite: comma normalization is handled in the PHP callback + $fieldSql = $rawField; + + if ($platform instanceof SQLitePlatform) { + return "SI_VALUE({$fieldSql})"; + } + + // Fallback: return NULL (no SI sorting available) + return 'NULL'; + } + + /** + * PostgreSQL implementation using substring() with POSIX regex. + */ + private function getPostgreSQLSql(string $field): string + { + // Extract the numeric part using POSIX regex, anchored at start (with optional leading whitespace) + $numericPart = "CAST(substring({$field} FROM '^\\s*(\\d+\\.?\\d*)\\s*[pnuµmkKMGT]?') AS DOUBLE PRECISION)"; + + // Extract the SI prefix character + $prefixPart = "substring({$field} FROM '^\\s*\\d+\\.?\\d*\\s*([pnuµmkKMGT])')"; + + return $this->buildCaseExpression($numericPart, $prefixPart); + } + + /** + * MySQL/MariaDB implementation using REGEXP_SUBSTR. + */ + private function getMySQLSql(string $field): string + { + // Extract the numeric part, anchored at start (with optional leading whitespace) + $numericPart = "CAST(REGEXP_SUBSTR({$field}, '^[[:space:]]*[0-9]+\\.?[0-9]*') AS DECIMAL(30,15))"; + + // Extract the prefix: get the full number+prefix match anchored at start, then take the last char + $fullMatch = "REGEXP_SUBSTR({$field}, '^[[:space:]]*[0-9]+\\.?[0-9]*[[:space:]]*[pnuµmkKMGT]')"; + $prefixPart = "RIGHT({$fullMatch}, 1)"; + + return $this->buildCaseExpression($numericPart, $prefixPart); + } + + /** + * Build a CASE expression that maps an SI prefix character to a multiplier + * and multiplies it with the numeric value. + * + * @param string $numericExpr SQL expression that evaluates to the numeric part + * @param string $prefixExpr SQL expression that evaluates to the SI prefix character + * @return string SQL CASE expression + */ + private function buildCaseExpression(string $numericExpr, string $prefixExpr): string + { + return "(CASE" . + " WHEN {$numericExpr} IS NULL THEN NULL" . + " WHEN {$prefixExpr} = 'p' THEN {$numericExpr} * 1e-12" . + " WHEN {$prefixExpr} = 'n' THEN {$numericExpr} * 1e-9" . + " WHEN {$prefixExpr} = 'u' THEN {$numericExpr} * 1e-6" . + " WHEN {$prefixExpr} = 'µ' THEN {$numericExpr} * 1e-6" . + " WHEN {$prefixExpr} = 'm' THEN {$numericExpr} * 1e-3" . + " WHEN {$prefixExpr} = 'k' THEN {$numericExpr} * 1e3" . + " WHEN {$prefixExpr} = 'K' THEN {$numericExpr} * 1e3" . + " WHEN {$prefixExpr} = 'M' THEN {$numericExpr} * 1e6" . + " WHEN {$prefixExpr} = 'G' THEN {$numericExpr} * 1e9" . + " WHEN {$prefixExpr} = 'T' THEN {$numericExpr} * 1e12" . + " ELSE {$numericExpr} * 1" . + " END)"; + } + + /** + * PHP callback for SQLite's SI_VALUE function. + * Extracts the first numeric value with an optional SI prefix and returns the scaled value. + * + * @param string|null $value The input string + * @return float|null The scaled numeric value, or null if no number found + */ + public static function sqliteSiValue(?string $value): ?float + { + if ($value === null) { + return null; + } + + // Normalize comma decimal separator to dot (European locale support) + $value = str_replace(',', '.', $value); + + // Match a number at the very start (allowing leading whitespace), optionally followed by an SI prefix + if (!preg_match('/^\s*(\d+\.?\d*)\s*([pnuµmkKMGT])?/u', $value, $matches)) { + return null; + } + + $number = (float) $matches[1]; + $prefix = $matches[2] ?? ''; + + if ($prefix === '') { + return $number; + } + + $multiplier = self::SI_MULTIPLIERS[$prefix] ?? 1.0; + + return $number * $multiplier; + } +} diff --git a/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php b/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php index ad572d4c..aa6108c9 100644 --- a/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php +++ b/src/Doctrine/Middleware/SQLiteRegexExtensionMiddlewareDriver.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Doctrine\Middleware; +use App\Doctrine\Functions\SiValueSort; use App\Exceptions\InvalidRegexException; use Doctrine\DBAL\Driver\Connection; use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware; @@ -51,6 +52,9 @@ class SQLiteRegexExtensionMiddlewareDriver extends AbstractDriverMiddleware //Create a new collation for natural sorting $native_connection->sqliteCreateCollation('NATURAL_CMP', strnatcmp(...)); + + //Create a function for SI prefix value sorting + $native_connection->sqliteCreateFunction('SI_VALUE', SiValueSort::sqliteSiValue(...), 1, \PDO::SQLITE_DETERMINISTIC); } } diff --git a/src/Settings/BehaviorSettings/PartTableColumns.php b/src/Settings/BehaviorSettings/PartTableColumns.php index 3b30e0a4..32f6100b 100644 --- a/src/Settings/BehaviorSettings/PartTableColumns.php +++ b/src/Settings/BehaviorSettings/PartTableColumns.php @@ -52,6 +52,8 @@ enum PartTableColumns : string implements TranslatableInterface case TAGS = "tags"; case ATTACHMENTS = "attachments"; + case SI_VALUE = "si_value"; + case EDA_REFERENCE = "eda_reference"; case EDA_VALUE = "eda_value"; diff --git a/tests/Doctrine/Functions/SiValueSortTest.php b/tests/Doctrine/Functions/SiValueSortTest.php new file mode 100644 index 00000000..dbdd9d28 --- /dev/null +++ b/tests/Doctrine/Functions/SiValueSortTest.php @@ -0,0 +1,193 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Doctrine\Functions; + +use App\Doctrine\Functions\SiValueSort; +use Doctrine\DBAL\Platforms\MySQLPlatform; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; +use Doctrine\DBAL\Platforms\SQLitePlatform; + +final class SiValueSortTest extends AbstractDoctrineFunctionTestCase +{ + public function testPostgreSQLGeneratesCaseExpression(): void + { + $function = new SiValueSort('SI_VALUE_SORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new PostgreSQLPlatform())); + + $this->assertStringContainsString('CASE', $sql); + $this->assertStringContainsString("REPLACE(part_name, ',', '.')", $sql); + $this->assertStringContainsString('1e-12', $sql); + $this->assertStringContainsString('1e-9', $sql); + $this->assertStringContainsString('1e-6', $sql); + $this->assertStringContainsString('1e-3', $sql); + $this->assertStringContainsString('1e3', $sql); + $this->assertStringContainsString('1e6', $sql); + $this->assertStringContainsString('1e9', $sql); + $this->assertStringContainsString('1e12', $sql); + } + + public function testMySQLGeneratesCaseExpression(): void + { + $function = new SiValueSort('SI_VALUE_SORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new MySQLPlatform())); + + $this->assertStringContainsString('CASE', $sql); + $this->assertStringContainsString("REPLACE(part_name, ',', '.')", $sql); + $this->assertStringContainsString('1e-12', $sql); + $this->assertStringContainsString('1e6', $sql); + } + + public function testSQLiteUsesSiValueFunction(): void + { + $function = new SiValueSort('SI_VALUE_SORT'); + $this->setObjectProperty($function, 'field', $this->createNode('part_name')); + + $sql = $function->getSql($this->createSqlWalker(new SQLitePlatform())); + + $this->assertSame('SI_VALUE(part_name)', $sql); + } + + /** + * @dataProvider sqliteSiValueProvider + */ + public function testSqliteSiValue(?string $input, ?float $expected): void + { + $result = SiValueSort::sqliteSiValue($input); + + if ($expected === null) { + $this->assertNull($result); + } else { + $this->assertEqualsWithDelta($expected, $result, $expected * 1e-9); + } + } + + /** + * @return iterable + */ + public static function sqliteSiValueProvider(): iterable + { + // Basic SI prefix values + yield 'pico' => ['10pF', 10e-12]; + yield 'nano' => ['100nF', 100e-9]; + yield 'micro_u' => ['1uF', 1e-6]; + yield 'micro_µ' => ['1µF', 1e-6]; + yield 'milli' => ['4.7mH', 4.7e-3]; + yield 'kilo_lower' => ['4.7k', 4.7e3]; + yield 'kilo_upper' => ['4.7K', 4.7e3]; + yield 'mega' => ['1M', 1e6]; + yield 'giga' => ['2.2G', 2.2e9]; + yield 'tera' => ['1T', 1e12]; + + // No prefix (plain number) + yield 'plain_integer' => ['100', 100.0]; + yield 'plain_decimal' => ['4.7', 4.7]; + + // Decimal values with prefix (dot separator) + yield 'decimal_nano' => ['4.7nF', 4.7e-9]; + yield 'decimal_micro' => ['0.1uF', 0.1e-6]; + yield 'decimal_kilo' => ['2.2k', 2.2e3]; + + // Comma decimal separator (European locale) + yield 'comma_kilo' => ['4,7k', 4.7e3]; + yield 'comma_micro' => ['2,2uF', 2.2e-6]; + yield 'comma_kilo_space' => ['1,2 kΩ', 1.2e3]; + + // Number NOT at the start — should return NULL + yield 'prefixed_name' => ['CAP-100nF', null]; + yield 'name_with_number' => ['R 4.7k 1%', null]; + yield 'crystal' => ['Crystal 20MHz', null]; + + // Number at start with trailing text + yield 'number_with_suffix' => ['10nF 25V', 10e-9]; + + // Space between number and prefix + yield 'space_before_prefix' => ['100 nF', 100e-9]; + + // Leading whitespace before number + yield 'leading_whitespace' => [' 10uF', 10e-6]; + + // No number at all + yield 'no_number' => ['Connector', null]; + yield 'text_only' => ['LED red', null]; + + // Null input + yield 'null' => [null, null]; + + // Empty string + yield 'empty' => ['', null]; + } + + /** + * Test that the sort order is correct by comparing sqliteSiValue results. + */ + public function testSortOrder(): void + { + $parts = ['1uF', '100nF', '10pF', '10uF', '0.1mF', '1F', '10kF', '1MF']; + $expected = ['10pF', '100nF', '1uF', '10uF', '0.1mF', '1F', '10kF', '1MF']; + + // Sort using sqliteSiValue + usort($parts, static function (string $a, string $b): int { + $va = SiValueSort::sqliteSiValue($a); + $vb = SiValueSort::sqliteSiValue($b); + return $va <=> $vb; + }); + + $this->assertSame($expected, $parts); + } + + /** + * Test that NULL values sort last (after all numeric values). + */ + public function testNullSortsLast(): void + { + $parts = ['Connector', '100nF', 'LED red', '10pF']; + + usort($parts, static function (string $a, string $b): int { + $va = SiValueSort::sqliteSiValue($a); + $vb = SiValueSort::sqliteSiValue($b); + + // NULL sorts last + if ($va === null && $vb === null) { + return 0; + } + if ($va === null) { + return 1; + } + if ($vb === null) { + return -1; + } + + return $va <=> $vb; + }); + + $this->assertSame('10pF', $parts[0]); + $this->assertSame('100nF', $parts[1]); + // Last two should be the non-numeric names + $this->assertContains('Connector', array_slice($parts, 2)); + $this->assertContains('LED red', array_slice($parts, 2)); + } +} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 9e5ed157..4da88512 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -2780,6 +2780,12 @@ If you have done this incorrectly or if a computer is no longer trusted, you can Name + + + part.table.si_value + SI Value + + part.table.id From 766665f9e5bb712eaa0ef194dafaf25bd0c5bd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 22:48:47 +0200 Subject: [PATCH 045/108] Use big E for si value formatting output --- src/DataTables/PartsDataTable.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index ca2abd45..b34eef9d 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -124,7 +124,8 @@ final class PartsDataTable implements DataTableTypeInterface 'render' => function ($value, Part $context): string { $siValue = SiValueSort::sqliteSiValue($context->getName()); if ($siValue !== null) { - return htmlspecialchars(sprintf('%g', $siValue)); + //Output it as scientific number with a big E + return htmlspecialchars(sprintf('%G', $siValue)); } return ''; }, From 1c3dfa26bb807e2a28b4a84c511cc4afa90d1f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 23:06:40 +0200 Subject: [PATCH 046/108] Updated dependencies --- composer.lock | 68 +++++++++++++++++++++-------------------- yarn.lock | 85 ++++++++++++++++++++++++++------------------------- 2 files changed, 78 insertions(+), 75 deletions(-) diff --git a/composer.lock b/composer.lock index 8e509fbf..217a3e49 100644 --- a/composer.lock +++ b/composer.lock @@ -13083,7 +13083,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -13142,7 +13142,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -13166,7 +13166,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -13224,7 +13224,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -13248,7 +13248,7 @@ }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", @@ -13312,7 +13312,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.36.0" }, "funding": [ { @@ -13336,7 +13336,7 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -13399,7 +13399,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.36.0" }, "funding": [ { @@ -13423,7 +13423,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -13484,7 +13484,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -13508,7 +13508,7 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", @@ -13564,7 +13564,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.36.0" }, "funding": [ { @@ -13588,7 +13588,7 @@ }, { "name": "symfony/polyfill-php84", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", @@ -13644,7 +13644,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -13668,7 +13668,7 @@ }, { "name": "symfony/polyfill-php85", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", @@ -13724,7 +13724,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.36.0" }, "funding": [ { @@ -13748,7 +13748,7 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.34.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -13807,7 +13807,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.34.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.36.0" }, "funding": [ { @@ -18469,11 +18469,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.47", + "version": "2.1.48", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/79015445d8bd79e62b29140f12e5bfced1dcca65", - "reference": "79015445d8bd79e62b29140f12e5bfced1dcca65", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/231397213efb7c0a066ee024b5c3c87f2d3adfa0", + "reference": "231397213efb7c0a066ee024b5c3c87f2d3adfa0", "shasum": "" }, "require": { @@ -18518,7 +18518,7 @@ "type": "github" } ], - "time": "2026-04-13T15:49:08+00:00" + "time": "2026-04-15T20:24:19+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -19244,12 +19244,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "b0b156ed9d5d2eb313c33f92af3dbc886ba4688a" + "reference": "bb550b5adb0d4d74c4f6857c6b3b3638c022e90b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b0b156ed9d5d2eb313c33f92af3dbc886ba4688a", - "reference": "b0b156ed9d5d2eb313c33f92af3dbc886ba4688a", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/bb550b5adb0d4d74c4f6857c6b3b3638c022e90b", + "reference": "bb550b5adb0d4d74c4f6857c6b3b3638c022e90b", "shasum": "" }, "conflict": { @@ -19379,7 +19379,7 @@ "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<1.10.27|>=2,<2.2.26|>=2.3,<2.9.3", + "composer/composer": "<2.2.27|>=2.3,<2.9.6", "concrete5/concrete5": "<9.4.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -19396,7 +19396,7 @@ "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", "craftcms/aws-s3": ">=2.0.2,<=2.2.4", "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", - "craftcms/cms": "<=4.17.7|>=5,<=5.9.13", + "craftcms/cms": "<=4.17.8|>=5,<5.9.15", "craftcms/commerce": ">=4,<4.11|>=5,<5.6", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", @@ -19664,7 +19664,7 @@ "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.50", + "kimai/kimai": "<2.53", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -19805,8 +19805,8 @@ "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", "october/october": "<3.7.5", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<=3.7.12|>=4,<=4.0.11", + "october/rain": "<=3.7.13|>=4,<=4.1.9", + "october/system": "<=3.7.13|>=4,<=4.1.9", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -19885,7 +19885,7 @@ "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.41.1", + "pocketmine/pocketmine-mp": "<5.42.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -19939,6 +19939,7 @@ "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", + "s9y/serendipity": "<2.6", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", "saloonphp/saloon": "<4", @@ -20168,6 +20169,7 @@ "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", + "webonyx/graphql-php": "<=15.31.4", "webpa/webpa": "<3.1.2", "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", @@ -20187,7 +20189,7 @@ "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", "wpmetabox/meta-box": "<5.11.2", - "wwbn/avideo": "<=26", + "wwbn/avideo": "<=29", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", @@ -20287,7 +20289,7 @@ "type": "tidelift" } ], - "time": "2026-04-13T18:30:45+00:00" + "time": "2026-04-15T20:21:07+00:00" }, { "name": "sebastian/cli-parser", diff --git a/yarn.lock b/yarn.lock index 158ab745..f17966b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2174,9 +2174,9 @@ integrity sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA== "@simple-git/argv-parser@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@simple-git/argv-parser/-/argv-parser-1.1.0.tgz#6680aed3fa68f131ca0d7efa90e52b5b23ca3183" - integrity sha512-sUKOu2lb5vGIWADNNLpscyj07DAeQZU3KLbnE2Tj53tW6BbDQKMly2CCfnR4oYzqtRELCPWfwaPg+Q0T8qfKBg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/@simple-git/argv-parser/-/argv-parser-1.1.1.tgz#275b839c6eeb5030872c73b1ea839a416885da9d" + integrity sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw== dependencies: "@simple-git/args-pathspec" "^1.0.3" @@ -2732,9 +2732,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.10.12: - version "2.10.18" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz#565745085ba7743af7d4072707ad132db3a5a42f" - integrity sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A== + version "2.10.19" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz#7697721c22f94f66195d0c34299b1a91e3299493" + integrity sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g== big.js@^5.2.2: version "5.2.2" @@ -2799,6 +2799,13 @@ browser-stdout@^1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.2: version "4.28.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.2.tgz#f50b65362ef48974ca9f50b3680566d786b811d2" @@ -2862,9 +2869,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782: - version "1.0.30001787" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz#fd25c5e42e2d35df5c75eddda00d15d9c0c68f81" - integrity sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg== + version "1.0.30001788" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz#31e97d1bfec332b3f2d7eea7781460c97629b3bf" + integrity sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ== ccount@^2.0.0: version "2.0.1" @@ -3488,9 +3495,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" - integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== + version "3.4.0" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.0.tgz#b1fc33ebdadb373241621e0a30e4ad81573dfd0b" + integrity sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -3518,9 +3525,9 @@ eastasianwidth@^0.2.0: integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.328: - version "1.5.335" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.335.tgz#0b957cea44ef86795c227c616d16b4803d119daa" - integrity sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q== + version "1.5.337" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.337.tgz#73051b9160d3960eea398d73323184cbdd6914de" + integrity sha512-15gKW9mRUNP9RdzhedJNypFUxtYWSXohFz2nTLzM272xbRXHws68kNDzyATG3qej+vUj/7Sn9hf5XTDh0XK6/w== emoji-regex@^8.0.0: version "8.0.0" @@ -3854,9 +3861,9 @@ get-stream@^6.0.0: integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-tsconfig@^4.10.1: - version "4.13.7" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.7.tgz#b9d8b199b06033ceeea1a93df7ea5765415089bc" - integrity sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q== + version "4.14.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.14.0.tgz#985d85c52a9903864280ccc2448d413fbf1efed8" + integrity sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA== dependencies: resolve-pkg-maps "^1.0.0" @@ -4406,7 +4413,7 @@ json-formatter-js@^2.3.4: resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-2.5.23.tgz#b7dd0a1da7e6cbea8e76743d7d8dc1238866cc73" integrity sha512-Cbm8wHXjo/C56aCePP1VuKvjxoMEmL7g7Ckss1oWFFlCsvOEEbye1kTeaNNaqba1Cl6YpIOYAnK65pUQ8mDIUQ== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5062,17 +5069,10 @@ micromatch@^4.0.0, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== mimic-fn@^2.1.0: version "2.1.0" @@ -5421,7 +5421,7 @@ pako@^0.2.5: resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== -pako@~1.0.2: +pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -5528,9 +5528,11 @@ plural-forms@^0.5.5: integrity sha512-rJw4xp22izsfJOVqta5Hyvep2lR3xPkFUtj7dyQtpf/FbxUiX7PQCajTn2EHDRylizH5N/Uqqodfdu22I0ju+g== png-js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" - integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== + version "1.1.0" + resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.1.0.tgz#60a135216601f807b88a6d61ac93bd42a32c5ee1" + integrity sha512-PM/uYGzGdNSzqeOgly68+6wKQDL1SY0a/N+OEa/+br6LnHWOAJB0Npiamnodfq3jd2LS/i2fMeOKSAILjA+m5Q== + dependencies: + browserify-zlib "^0.2.0" pofile@^1.1.4: version "1.1.4" @@ -5832,9 +5834,9 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.12, postcss@^8.4.40: - version "8.5.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.9.tgz#f6ee9e0b94f0f19c97d2f172bfbd7fc71fe1cca4" - integrity sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw== + version "8.5.10" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.10.tgz#8992d8c30acf3f12169e7c09514a12fed7e48356" + integrity sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -6938,9 +6940,9 @@ webpack-sources@^3.0.0, webpack-sources@^3.3.4: integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== webpack@^5.74.0: - version "5.106.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.106.1.tgz#0a3eeb43a50e4f67fbecd206e1e6fc2c89fc2b6f" - integrity sha512-EW8af29ak8Oaf4T8k8YsajjrDBDYgnKZ5er6ljWFJsXABfTNowQfvHLftwcepVgdz+IoLSdEAbBiM9DFXoll9w== + version "5.106.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.106.2.tgz#ca8174b4fd80f055cc5a45fcc5577d6db76c8ac5" + integrity sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -6958,9 +6960,8 @@ webpack@^5.74.0: events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" loader-runner "^4.3.1" - mime-types "^2.1.27" + mime-db "^1.54.0" neo-async "^2.6.2" schema-utils "^4.3.3" tapable "^2.3.0" From ec05f9d8ab1a7951e80cfffdcf08f18fc3c6732b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 23:27:10 +0200 Subject: [PATCH 047/108] Fixed phpstan issues --- phpstan.dist.neon | 6 ++++++ src/Doctrine/Functions/SiValueSort.php | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/phpstan.dist.neon b/phpstan.dist.neon index fe51518d..c7da636f 100644 --- a/phpstan.dist.neon +++ b/phpstan.dist.neon @@ -59,6 +59,9 @@ parameters: - '#expects .*PartParameter, .*AbstractParameter given.#' - '#Part::getParameters\(\) should return .*AbstractParameter#' + # Fix some weird issue with how covariance with collections is solved + - '#Method App\\Entity\\Base\\AbstractStructuralDBElement::getParameters\(\) should return Doctrine\\Common\\Collections\\Collection but returns#' + # Ignore doctrine type mapping mismatch - '#Property .* type mapping mismatch: property can contain .* but database expects .*#' @@ -70,3 +73,6 @@ parameters: - message: '#Access to an undefined property Brick\\Schema\\Interfaces\\#' path: src/Services/InfoProviderSystem/Providers/GenericWebProvider.php + + - + identifier: nullCoalesce.property diff --git a/src/Doctrine/Functions/SiValueSort.php b/src/Doctrine/Functions/SiValueSort.php index 1bba1b9f..c4d16444 100644 --- a/src/Doctrine/Functions/SiValueSort.php +++ b/src/Doctrine/Functions/SiValueSort.php @@ -189,7 +189,7 @@ class SiValueSort extends FunctionNode return $number; } - $multiplier = self::SI_MULTIPLIERS[$prefix] ?? 1.0; + $multiplier = self::SI_MULTIPLIERS[$prefix] ?? 1.0; //@phpstan-ignore-line - fallback to 1.0 if prefix is not recognized (should not happen due to regex) return $number * $multiplier; } From 6a30b41688448e9866d60d85fd7db817d712cfea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 23:27:30 +0200 Subject: [PATCH 048/108] Bumped version to 2.10.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index dedcc7d4..10c2c0c3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.9.1 +2.10.0 From a82d515034e85e7577c7bef1bc715759881d34bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Wed, 15 Apr 2026 23:38:40 +0200 Subject: [PATCH 049/108] New Crowdin updates (#1325) * New translations messages.en.xlf (Danish) * New translations validators.en.xlf (Danish) * New translations messages.en.xlf (German) * New translations messages.en.xlf (English) * New translations messages.en.xlf (French) * New translations validators.en.xlf (French) * New translations messages.en.xlf (English) * New translations messages.en.xlf (English) * New translations messages.en.xlf (German) --- translations/messages.da.xlf | 556 +- translations/messages.de.xlf | 106 +- translations/messages.fr.xlf | 8697 +++++++++++++++++++++++++++----- translations/validators.da.xlf | 18 +- translations/validators.fr.xlf | 20 +- 5 files changed, 8243 insertions(+), 1154 deletions(-) diff --git a/translations/messages.da.xlf b/translations/messages.da.xlf index 85faf9c2..a435396c 100644 --- a/translations/messages.da.xlf +++ b/translations/messages.da.xlf @@ -642,6 +642,12 @@ Underelementer vil blive flyttet opad. Gruppe + + + specifications.eda_visibility.help + Eksporter denne parameter som et EDA felt + + specification.create @@ -2923,6 +2929,42 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilag + + + part.table.eda_status + EDA + + + + + eda.status.symbol_set + KiCad symbolsæt + + + + + eda.status.footprint_set + KiCad footprintsæt + + + + + eda.status.reference_set + eda. status.reference_set + + + + + eda.status.complete + EDA felter udfyldt (symbol, footprint, reference) + + + + + eda.status.partial + EDA felter delvist udfyldt + + flash.login_successful @@ -3265,6 +3307,12 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ikke længere tilgængelig + + + orderdetails.edit.eda_visibility + Synlige i EDA + + orderdetails.edit.supplierpartnr.placeholder @@ -9508,6 +9556,12 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver EIGP 114 stregkode (f.eks. Datamatrix-kode fra Digikey og Mouser dele) + + + scan_dialog.mode.lcsc + LCSC.com barcode + + scan_dialog.info_mode @@ -9520,6 +9574,24 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver Afkodet information + + + label_scanner.target_found + Genstand fundet i database + + + + + label_scanner.scan_result.title + Scan-resultat + + + + + label_scanner.no_locations + Part er ikke gemt på nogen lokation. + + label_generator.edit_profiles @@ -9954,6 +10026,18 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver Denne værdi bestemmer dybden af ​​kategoritræet, der er synligt i KiCad. 0 betyder, at kun kategorierne på øverste niveau er synlige. Indstil værdien til > 0 for at vise yderligere niveauer. Indstil værdien til -1 for at vise alle dele af deldatabasen inden for en enkelt kategori i KiCad. + + + settings.misc.kicad_eda.datasheet_link + Databladsfelt linker til PDF + + + + + settings.misc.kicad_eda.datasheet_link.help + Når det er aktiveret, vil dataarkfeltet i KiCad linke til den faktiske PDF-fil (hvis den findes). Når det er deaktiveret, vil det i stedet linke til Part-DB-siden. Linket til Part-DB-siden er altid tilgængeligt som et separat felt "Part-DB URL". + + settings.behavior.sidebar @@ -10296,6 +10380,24 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver Vis billedoverlejringen med detaljer om vedhæftet fil, når du holder musen over billedgalleriet med dele. + + + settings.behavior.keybindings + Tastaturgenveje + + + + + settings.behavior.keybindings.enable_special_characters + Aktivér tastaturgenveje for specialtegn + + + + + settings.behavior.keybindings.enable_special_characters.help + Aktivér genvejstasten Alt+ for at indsætte specialtegn (græske bogstaver, matematiske symboler osv.) i tekstfelter. Deaktiver dette, hvis genvejene er i konflikt med dit tastaturlayout eller systemgenveje. + + perm.config.change_system_settings @@ -10920,6 +11022,84 @@ Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver Masseimport af datakilder + + + part_list.action.group.eda + EDA / KiCad + + + + + part_list.action.batch_edit_eda + Batchredigering af EDA-felter + + + + + batch_eda.title + Batchredigering af EDA-felter + + + + + batch_eda.description + Rediger EDA/KiCad-felter for %count% valgte dele. Markér feltet "Anvend" ud for hvert felt, du vil ændre. + + + + + batch_eda.show_parts + Vis valgte dele + + + + + batch_eda.apply_hint + Kun felter, hvor afkrydsningsfeltet "Anvend" er markeret, ændres. Felter, der ikke er markeret, ændres ikke. + + + + + batch_eda.apply + Anvend + + + + + batch_eda.field + Felt + + + + + batch_eda.value + Værdi + + + + + batch_eda.submit + Anvend på udvalgte dele + + + + + batch_eda.cancel + Annullér + + + + + batch_eda.success + EDA felter er nu opdateret + + + + + batch_eda.no_parts_selected + Ingen dele blev valgt til batchredigering. + + info_providers.bulk_import.step1.spn_recommendation @@ -12233,7 +12413,7 @@ Buerklin API-godkendelsesserver: 10 anmodninger/minut pr. IP-adresse update_manager.progress.downgrade_title - Downgrade fremskridt + Downgrade fremskridtPart-DB er blevet nedgraderet! Du skal muligvis opdatere siden for at se den nye version. @@ -12320,6 +12500,102 @@ Buerklin API-godkendelsesserver: 10 anmodninger/minut pr. IP-adresse Gendannelse af sikkerhedskopi er deaktiveret af serverkonfigurationen. + + + update_manager.backup.create + Opret sikkerhedskopi + + + + + update_manager.backup.create.confirm + Vil du lave en fuld sikkerhedskopi nu? Det kan tage et stykke tid. + + + + + update_manager.backup.created + Sikkerhedskopi er oprettet. + + + + + update_manager.backup.delete.confirm + Er du sikker på at du vil slette denne backup? + + + + + update_manager.backup.deleted + Sikkerhedskopi er slettet. + + + + + update_manager.backup.delete_error + Sikkerhedskopi kunne ikke udføres. + + + + + update_manager.log.delete.confirm + Er du sikker på at du vil slette denne log? + + + + + update_manager.log.deleted + Log slettet. + + + + + update_manager.log.delete_error + Kunne ikke slette loggen. + + + + + update_manager.view_log + Vis log. + + + + + update_manager.delete + Slet + + + + + update_manager.backup.download + Download sikkerhedskopi + + + + + update_manager.backup.download.password_label + Bekræft password for at downloade + + + + + update_manager.backup.download.security_warning + Sikkerhedskopier indeholder følsomme data, herunder password-hashes og hemmeligheder. Bekræft venligst dit password for at fortsætte med download. + + + + + update_manager.backup.download.invalid_password + Ugyldigt password. Download af sikkerhedskopi er afvist. + + + + + update_manager.backup.docker_warning + Docker-installation registreret. Sikkerhedskopier gemmes i var/backups/, som ikke er en persistent enhed. Brug downloadknappen til at gemme sikkerhedskopier eksternt, eller montér var/backups/ som en enhed i din docker-compose.yml. + + settings.ips.conrad @@ -12410,5 +12686,281 @@ Buerklin API-godkendelsesserver: 10 anmodninger/minut pr. IP-adresse Opdatér til + + + part.gtin + GTIN / EAN + + + + + info_providers.capabilities.gtin + GTIN / EAN + + + + + part.table.gtin + GTIN + + + + + scan_dialog.mode.gtin + GTIN / EAN barcode + + + + + attachment_type.edit.allowed_targets + Anvend kun til + + + + + attachment_type.edit.allowed_targets.help + Gør kun denne bilagstype tilgængelig for bestemte elementklasser. Lad feltet stå tomt for at vise denne bilagstype for alle elementklasser. + + + + + orderdetails.edit.prices_includes_vat + Pris inklusiv moms. + + + + + prices.incl_vat + Inkl. moms + + + + + prices.excl_vat + Ekskl. moms + + + + + settings.system.localization.prices_include_tax_by_default + Priserne er som standard inklusive moms + + + + + settings.system.localization.prices_include_tax_by_default.description + Standardværdien for nyoprettede købsoplysninger, uanset om priserne inkluderer moms eller ej. + + + + + part_lot.edit.last_stocktake_at + Seneste optælling + + + + + perm.parts_stock.stocktake + Lageropgørelse + + + + + part.info.stocktake_modal.title + Lagerbeholdning + + + + + part.info.stocktake_modal.expected_amount + Forventet mængde + + + + + part.info.stocktake_modal.actual_amount + Aktuel mængde + + + + + log.part_stock_changed.stock_take + Lagerbeholdning + + + + + log.element_edited.changed_fields.last_stocktake_at + Sidste lagerbeholdning + + + + + part.table.eda_reference + EDA reference + + + + + part.table.eda_value + EDA-værdi + + + + + settings.misc.kicad_eda.default_parameter_visibility + Standard EDA-synlighed for parametre + + + + + settings.misc.kicad_eda.default_parameter_visibility.help + EDA-synlighed for alle [Part]-parametre, som ikke har en eksplicit synlighedsindstilling. Når den er aktiveret, vil alle parametre som standard være synlige i EDA-softwaren. + + + + + settings.misc.kicad_eda.default_orderdetails_visibility + Standard EDA-synlighed for købsoplysninger + + + + + settings.misc.kicad_eda.default_orderdetails_visibility.help + EDA-synlighed for alle købsoplysninger, som ikke har en eksplicit synlighedsindstilling. Når den er aktiveret, vil alle købsoplysninger som standard være synlige i EDA-softwaren. + + + + + label_scanner.open + Vis detaljer + + + + + label_scanner.db_part_found + Database [part] fundet for barcode + + + + + label_scanner.part_can_be_created + [Part] kan oprettes + + + + + label_scanner.part_can_be_created.help + Der blev ikke fundet nogen matchende [part] i databasen, men du kan oprette en ny [part] baseret på denne stregkode. + + + + + label_scanner.part_create_btn + Opret [part] fra barcode + + + + + parts.create_from_scan.title + Opret [part] ud fra labelscanning + + + + + scan_dialog.mode.amazon + Amazon barcode + + + + + settings.ips.canopy + Canopy + + + + + settings.ips.canopy.alwaysGetDetails + Hent altid detaljer + + + + + settings.ips.canopy.alwaysGetDetails.help + Når dette er valgt, hentes flere detaljer fra canopy, når en del oprettes. Dette forårsager en yderligere API-anmodning, men giver produktpunkter og kategorioplysninger. + + + + + attachment.sandbox.warning + ADVARSEL: Du ser en brugeruploadet vedhæftet fil. Dette er indhold, der ikke er tillid til. Vær forsigtig. + + + + + attachment.sandbox.back_to_partdb + Tilbage til Part-DB + + + + + settings.system.attachments.showHTMLAttachments + Vis uploadede HTML-filvedhæftninger (sandboxed) + + + + + settings.system.attachments.showHTMLAttachments.help + ⚠️ Når det er aktiveret, kan brugeruploadede HTML-vedhæftninger ses direkte i browseren. Mange potentielt skadelige funktioner er begrænsede, men dette er stadig en potentiel sikkerhedsrisiko og bør kun aktiveres, hvis du har tillid til de brugere, der kan uploade filer. + + + + + attachment.sandbox.title + HTML [Vedhæftning] + + + + + attachment.sandbox.as_plain_text + Vis som alm. tekst + + + + + modal.cancel + Annuller + + + + + update_manager.web_updates_allowed + Web-opdateringer tilladt + + + + + update_manager.backup_restore_allowed + Indlæsning af sikkerhedskopi (backup) tilladt + + + + + update_manager.backup_download_allowed + Download af sikkerhedskopi tilladt + + + + + part.create_from_info_provider.lot_filled_from_barcode + [Part_lot] oprettet fra stregkode: Kontroller venligst, om dataene er korrekte og ønskede. + + + + + project.bom_import.field_mapping.error.check_delimiter + Felttilknytningsfejl: Kontroller, om du har valgt den rigtige tegn-afgrænser! + + - \ No newline at end of file + diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 680d4b7f..7e070ff2 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -2779,6 +2779,12 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr Name + + + part.table.si_value + SI-Wert + + part.table.id @@ -7211,6 +7217,18 @@ Element 1 -> Element 1.2 Unterprojekte + + + project.info.total_build_price + Gesamterstellpreis + + + + + project.info.per_unit_price + pro Einheit + + project.info.bom_add_parts @@ -7236,9 +7254,9 @@ Element 1 -> Element 1.2 - + project.bom.ext_price - Extended Price + Gesamtpreis @@ -10034,6 +10052,90 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön Wenn aktiviert, verlinkt das Datenblatt-Feld in KiCad auf die tatsächliche PDF-Datei (sofern gefunden). Wenn deaktiviert, führt es stattdessen zur Part-DB-Seite. Der Link zur Part-DB-Seite ist immer als separates "Part-DB URL"-Feld verfügbar. + + + settings.misc.kicad_eda.editor.title + KiCad Autovervollständigungslisten + + + + + settings.misc.kicad_eda.editor.link + Autovervollständigungseinstellungen + + + + + settings.misc.kicad_eda.editor.description + Konfigurieren Sie, ob KiCad Autovervollständigung die automatisch generierten Standardlisten oder Ihre benutzerdefinierten Überschreibungsdateien verwendet. Die benutzerdefinierten Dateien sind hier bearbeitbar, während die Standarddateien nur lesbar zur Referenz angezeigt werden. + + + + + settings.misc.kicad_eda.editor.footprints + Footprint-Liste + + + + + settings.misc.kicad_eda.editor.footprints.help + Ein Eintrag pro Zeile. Wird als Autovervollständigungsvorschlag für KiCad-Footprintfelder verwendet. + + + + + settings.misc.kicad_eda.editor.symbols + Symbolliste + + + + + settings.misc.kicad_eda.editor.symbols.help + Ein Eintrag pro Zeile. Wird als Autovervollständigungsvorschlag für KiCad-Symbolfelder verwendet. + + + + + settings.misc.kicad_eda.use_custom_list + Benutzerdefinierte Autovervollständigungslisten verwenden + + + + + settings.misc.kicad_eda.use_custom_list.help + Wenn aktiviert, verwendet die KiCad Autovervollständigung public/kicad/footprints_custom.txt und public/kicad/symbols_custom.txt anstelle der automatisch generierten Standarddateien. + + + + + settings.misc.kicad_eda.editor.custom_footprints + Benutzerdefinierte Footprint-Liste + + + + + settings.misc.kicad_eda.editor.custom_symbols + Benutzerdefinierte Symbolliste + + + + + settings.misc.kicad_eda.editor.default_footprints + Standard Footprint-Liste + + + + + settings.misc.kicad_eda.editor.default_symbols + Standardsymboliste + + + + + settings.misc.kicad_eda.editor.default_files_help + Automatisch generierte Datei wird nur zur Referenz angezeigt. Änderungen müssen in der benutzerdefinierten Liste vorgenommen werden. + + settings.behavior.sidebar diff --git a/translations/messages.fr.xlf b/translations/messages.fr.xlf index 37e0d27e..49b7ca03 100644 --- a/translations/messages.fr.xlf +++ b/translations/messages.fr.xlf @@ -1,13 +1,13 @@ - + - + attachment_type.caption - Types pour fichiers joints + Type de fichiers pour la pièce jointe - + new @@ -16,7 +16,7 @@ Modifier le type de pièce jointe - + new @@ -25,25 +25,25 @@ Nouveau type de pièce jointe - + category.labelp Catégories - + admin.options Options - + admin.advanced Avancé - + new @@ -52,7 +52,7 @@ Éditer la catégorie - + new @@ -61,34 +61,28 @@ Nouvelle catégorie - - - currency.caption - Devise - - - + currency.iso_code.caption Code ISO - + currency.symbol.caption Symbole de la devise - + new currency.edit - Editer la devise + Éditer la devise - + new @@ -97,43 +91,61 @@ Nouvelle devise - + + + new + + + project.edit + Éditer le projet + + + + + new + + + project.new + Nouveau projet + + + search.placeholder Recherche - + expandAll Agrandir tout - + reduceAll Réduire tout - + part.info.timetravel_hint - C'est ainsi que le composant apparaissait avant le %timestamp%. <i>Veuillez noter que cette fonctionnalité est expérimentale, donc les infos ne sont peut-être pas correctes. </i> + C'est ainsi que le composant apparaissait avant le %timestamp%. <i>Veuillez noter que cette fonctionnalité est expérimentale, les informations ne sont peut-être pas correctes. </i> - + standard.label Propriétés - + infos.label Informations - + new @@ -142,82 +154,82 @@ Historique - + export.label Exporter - + import_export.label - Importer exporter + Importer / exporter - + mass_creation.label - Création multiple + Création en masse - + admin.common Commun - + admin.attachments Fichiers joints - + admin.parameters Paramètres - + export_all.label Exporter tous les éléments - + mass_creation.help - Chaque ligne sera interprétée comme le nom d'un élément qui sera créé. + Chaque ligne sera interprétée comme le nom d'un élément qui sera créé. Vous pouvez créer des structures imbriquées par indentations. - + edit.caption Éditer l'élément "%name" - + new.caption Nouvel élément - + footprint.labelp Empreintes - + new footprint.edit - Editer l'empreinte + Éditer l'empreinte - + new @@ -226,28 +238,22 @@ Nouvelle empreinte - - - group.edit.caption - Groupes - - - + user.edit.permissions Permissions - + new group.edit - Editer le groupe + Éditer le groupe - + new @@ -256,34 +262,28 @@ Nouveau groupe - - - label_profile.caption - Profil des étiquettes - - - + label_profile.advanced Avancé - + label_profile.comment Commentaire - + new label_profile.edit - Editer profil d'étiquette + Éditer profil d'étiquette - + new @@ -292,13 +292,7 @@ Nouveau profil d'étiquette - - - manufacturer.caption - Fabricants - - - + new @@ -307,7 +301,7 @@ Modifiez le fabricant - + new @@ -316,25 +310,13 @@ Nouveau fabricant - - - measurement_unit.caption - Unité de mesure - - - - - part_custom_state.caption - État personnalisé du composant - - - + storelocation.labelp Emplacement de stockage - + new @@ -343,7 +325,7 @@ Modifier l'emplacement de stockage - + new @@ -352,7 +334,7 @@ Nouvel emplacement de stockage - + new @@ -361,7 +343,7 @@ Modifier le fournisseur - + new @@ -370,67 +352,61 @@ Nouveau fournisseur - - - user.edit.caption - Utilisateurs - - - + user.edit.configuration Configuration - + user.edit.password Mot de passe - + user.edit.tfa.caption Authentification à deux facteurs - + user.edit.tfa.google_active Application d'authentification active - + tfa_backup.remaining_tokens Nombre de codes de secours restant - + tfa_backup.generation_date Date de génération des codes de secours - + user.edit.tfa.disabled Méthode désactivée - + user.edit.tfa.u2f_keys_count Clés de sécurité actives - + user.edit.tfa.disable_tfa_title - Voulez vous vraiment poursuivre ? + Voulez-vous vraiment poursuivre ? - + user.edit.tfa.disable_tfa_message Cela désactivera <b> toutes les méthodes d'authentification à deux facteurs de l'utilisateur</b> et supprimera <b>les codes de secours</b>! @@ -439,13 +415,13 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio <b>Ne faites ceci qu'en étant sûr de l'identité de l'utilisateur (ayant besoin d'aide),autrement le compte pourrai être compromis!</b> - + user.edit.tfa.disable_tfa.btn Désactiver toutes les méthodes d'authentification à deux facteurs - + new @@ -454,7 +430,7 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio Modifier l'utilisateur - + new @@ -463,75 +439,75 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio Nouvel utilisateur - + attachment.delete Supprimer - + - attachment.external - Externe + attachment.external_only + Pièce jointe externe uniquement - + attachment.preview.alt Miniature du fichier joint - + - attachment.view - Afficher + attachment.view_local + Vue locale de la pièce jointe - + attachment.file_not_found Fichier introuvable - + attachment.secure Fichier joint privé - + attachment.create Ajouter un fichier joint - + part_lot.edit.delete.confirm - Voulez vous vraiment supprimer ce stock ? Cette action ne pourra pas être annulée! + Voulez-vous vraiment supprimer ce stock ? Cette action ne pourra pas être annulée ! - + entity.delete.confirm_title - Voulez vous vraiment supprimer %name%? + Voulez-vous vraiment supprimer %name% ? - + entity.delete.message - Cette action ne pourra pas être annulée! + Cette action ne pourra pas être annulée ! <br> Les sous éléments seront déplacés vers le haut. - + entity.delete Supprimer l'élément - + new @@ -540,308 +516,313 @@ Les sous éléments seront déplacés vers le haut. Éditer le commentaire - + entity.delete.recursive Suppression récursive (tous les sous éléments) - + entity.duplicate Dupliquer l’élément - + export.format Format de fichier - + export.level Niveau de verbosité - + export.level.simple Simple - + export.level.extended Étendu - + export.level.full Complet - + export.include_children Exporter également les sous éléments - + export.btn Exporter - + id.label ID - + createdAt Créé le - + lastModified Dernière modification - + entity.info.parts_count Nombre de composants avec cet élément - + specifications.property Paramètre - + specifications.symbol Symbole - + specifications.value_min Min. - + specifications.value_typ - Typ. + Type. - + specifications.value_max Max. - + specifications.unit Unité - + specifications.text Texte - + specifications.group Groupe - + + + specifications.eda_visibility.help + Exporter en tant que paramètre EDA + + + specification.create Nouveau paramètre - + parameter.delete.confirm Souhaitez-vous vraiment supprimer ce paramètre ? - + attachment.list.title Liste des fichiers joints - + part_list.loading.caption Chargement - + part_list.loading.message Cela peut prendre un moment.Si ce message ne disparaît pas, essayez de recharger la page. - + vendor.base.javascript_hint - Activez Javascipt pour profiter de toutes les fonctionnalités! + Activez JavaScript pour profiter de toutes les fonctionnalités ! - + sidebar.big.toggle - Afficher/Cacher le panneau latéral -Show/Hide sidebar + Afficher / Cacher le panneau latéral - + loading.caption - Chargement: + Chargement : - + loading.message Cela peut prendre un moment.Si ce message ne disparaît pas, essayez de recharger la page. - + loading.bar Chargement... - + back_to_top Retour en haut de page - + permission.edit.permission Permissions - + permission.edit.value Valeur - + permission.legend.title - Explication des états: + Explication des états : - + permission.legend.disallow Interdire - + permission.legend.allow Autoriser - + permission.legend.inherit Hériter du groupe (parent) - + bool.true Vrai - + bool.false Faux - + Yes Oui - + No Non - + specifications.value Valeur - + version.caption Version - + homepage.license - Information de license + Information de licence - + homepage.github.caption Page du projet - + homepage.github.text - Retrouvez les téléchargements, report de bugs, to-do-list etc. sur <a href="%href%" class="link-external" target="_blank">la page du projet GitHub</a> + Retrouvez les téléchargements, report de bugs, to-do-list, etc. sur <a href="%href%" class="link-external" target="_blank">la page du projet GitHub</a> - + homepage.help.caption Aide - + homepage.help.text De l'aide et des conseils sont disponibles sur le Wiki de la <a href="%href%" class="link-external" target="_blank">page GitHub</a> - + homepage.forum.caption Forum - + new @@ -850,97 +831,97 @@ Show/Hide sidebar Activité récente - + label_generator.title Générateur d'étiquettes - + label_generator.common Commun - + label_generator.advanced Avancé - + label_generator.profiles Profils - + label_generator.selected_profile Profil actuellement sélectionné - + label_generator.edit_profile Modifier le profil - + label_generator.load_profile Charger le profil - + label_generator.download Télécharger - + label_generator.label_btn Générer une étiquette - + label_generator.label_empty Nouvelle étiquette vide - + label_scanner.title Lecteur d'étiquettes - + label_scanner.no_cam_found.title Aucune webcam trouvée - + label_scanner.no_cam_found.text Vous devez disposer d'une webcam et donner l'autorisation d'utiliser la fonction de scanner. Vous pouvez entrer le code à barres manuellement ci-dessous. - + label_scanner.source_select Sélectionnez une source - + log.list.title Journal système - + new @@ -949,7 +930,7 @@ Show/Hide sidebar Annuler le changement / revenir à une date antérieure ? - + new @@ -958,337 +939,337 @@ Show/Hide sidebar Voulez-vous annuler la modification donnée / réinitialiser l'élément à une date donnée ? - + mail.footer.email_sent_by Cet email a été envoyé automatiquement par - + mail.footer.dont_reply Ne répondez pas à cet email. - + email.hi %name% Bonjour %name% - + email.pw_reset.message Quelqu’un (surement vous) a demandé une réinitialisation de votre mot de passe.Si ce n'est pas le cas, ignorez simplement cet email. - + email.pw_reset.button Cliquez ici pour réinitialiser votre mot de passe - + email.pw_reset.fallback Si cela ne fonctionne pas pour vous, allez à <a href="%url%">%url%</a> et entrez les informations suivantes - + email.pw_reset.username Nom d'utilisateur - + email.pw_reset.token Jeton - + email.pw_reset.valid_unit %date% Le jeton de réinitialisation sera valable jusqu'au <i>%date%</i>. - + orderdetail.delete Supprimer - + pricedetails.edit.min_qty Quantité minimale de commande - + pricedetails.edit.price Prix - + pricedetails.edit.price_qty Pour la quantité - + pricedetail.create Ajouter prix - + part.edit.title Éditer le composant - + part.edit.card_title Éditer le composant - + part.edit.tab.common Général - + part.edit.tab.manufacturer Fabricant - + part.edit.tab.advanced Avancé - + part.edit.tab.advanced.ipn.commonSectionHeader - Suggestions sans incrément de partie + Suggestions sans incrémentation de composant - + part.edit.tab.advanced.ipn.partIncrementHeader - Propositions avec incréments numériques de parties + Suggestions avec incrément numérique du composant - + part.edit.tab.advanced.ipn.prefix.description.current-increment - Spécification IPN actuelle pour la pièce + Caractéristiques IPN actuelles du composant - + part.edit.tab.advanced.ipn.prefix.description.increment - Prochaine spécification IPN possible basée sur une description identique de la pièce + Prochaine caractéristique IPN possible basé sur la description d'un composant identique - + part.edit.tab.advanced.ipn.prefix_empty.direct_category - Le préfixe IPN de la catégorie directe est vide, veuillez le spécifier dans la catégorie "%name%" + Préfixe IPN ou catégorie vide, en spécifier une dans la catégorie "%name%" - + part.edit.tab.advanced.ipn.prefix.direct_category - Préfixe IPN de la catégorie directe + Préfixe IPN ou catégorie directe - + part.edit.tab.advanced.ipn.prefix.direct_category.increment - Préfixe IPN de la catégorie directe et d'un incrément spécifique à la partie + Préfixe IPN de catégorie directe et incrément spécifique au composant - + part.edit.tab.advanced.ipn.prefix.hierarchical.no_increment - Préfixes IPN avec un ordre hiérarchique des catégories des préfixes parents + Préfixes IPN avec ordre hiérarchique de catégorie du préfixe parent - + part.edit.tab.advanced.ipn.prefix.hierarchical.increment - Préfixes IPN avec un ordre hiérarchique des catégories des préfixes parents et un incrément spécifique à la pièce + Préfixes IPN avec ordre hiérarchique de catégorie du préfixe parent et incrément spécifique à la pièce - + part.edit.tab.advanced.ipn.prefix.not_saved - Créez d'abord une pièce et assignez-la à une catégorie : avec les catégories existantes et leurs propres préfixes IPN, l'identifiant IPN pour la pièce peut être proposé automatiquement + Créer d'abord une pièce et l'assigner à une catégorie : pour les catégories existantes et leur propre préfixe IPN, l'IPN de la pièce peut-être suggérer automatiquement - + part.edit.tab.part_lots Stocks - + part.edit.tab.attachments Fichiers joints - + part.edit.tab.orderdetails Informations pour la commande - + part.edit.tab.specifications Caractéristiques - + part.edit.tab.comment Commentaire - + part.new.card_title Créer un nouveau composant - + part_lot.delete Supprimer - + part_lot.create Créer un inventaire - + orderdetail.create Ajouter un fournisseur - + pricedetails.edit.delete.confirm Voulez-vous vraiment supprimer ce prix ? Cela ne peut pas être défait ! - + orderdetails.edit.delete.confirm Voulez-vous vraiment supprimer ce fournisseur ? Cela ne peut pas être défait ! - + part.info.title Informations détaillées pour - + part.part_lots.label Stocks - + comment.label Commentaire - + part.info.specifications Caractéristiques - + attachment.labelp Fichiers joints - + vendor.partinfo.shopping_infos Informations de commande - + vendor.partinfo.history Historique - + tools.label Outils - + extended_info.label Informations complémentaires - + attachment.name Nom - + attachment.attachment_type Type de fichier joint - + attachment.file_name Nom du fichier - + attachment.file_size Taille du fichier - + attachment.preview Aperçu de l'image - + - attachment.download - Téléchargement + attachment.download_local + Télécharger la pièce jointe locale - + new @@ -1297,13 +1278,13 @@ Show/Hide sidebar Utilisateur qui a créé ce composant - + Unknown Inconnu - + new @@ -1312,7 +1293,7 @@ Show/Hide sidebar Accès refusé - + new @@ -1321,31 +1302,31 @@ Show/Hide sidebar Utilisateur qui a édité ce composant en dernier - + part.isFavorite Favoris - + part.minOrderAmount Quantité minimale de commande - + manufacturer.label Fabricant - + name.label Nom - + new @@ -1354,439 +1335,439 @@ Show/Hide sidebar Retour à la version actuelle - + description.label Description - + category.label Catégorie - + instock.label En stock - + mininstock.label Stock minimum - + footprint.label Empreinte - + part.avg_price.label Prix moyen - + part.supplier.name Nom - + part.supplier.partnr - Lien/Code cmd. + Lien/Code Fournisseur - + part.order.minamount Nombre minimum - + part.order.price Prix - + part.order.single_price Prix unitaire - + part_lots.description Description - + part_lots.storage_location Emplacement de stockage - + part_lots.amount Quantité - + part_lots.location_unknown Emplacement de stockage inconnu - + part_lots.instock_unknown Quantité inconnue - + part_lots.expiration_date Date d'expiration - + part_lots.is_expired Expiré - + part_lots.need_refill Doit être rempli à nouveau - + part.info.prev_picture Image précédente - + part.info.next_picture Image suivante - + part.mass.tooltip Poids - + part.needs_review.badge Révision nécessaire - + part.favorite.badge Favoris - + part.obsolete.badge N'est plus disponible - + parameters.extracted_from_description Automatiquement extrait de la description - + parameters.auto_extracted_from_comment Automatiquement extrait du commentaire - + part.edit.btn Éditer - + part.clone.btn Duplication - + part.create.btn Créer un nouveau composant - + part.delete.confirm_title Voulez-vous vraiment supprimer ce composant ? - + part.delete.message Le composant et toutes les informations associées (stocks, fichiers joints, etc.) sont supprimés. Cela ne pourra pas être annulé. - + part.delete Supprimer le composant - + parts_list.all.title Tous les composants - + parts_list.category.title Composants avec catégorie - + parts_list.footprint.title Composants avec empreinte - + parts_list.manufacturer.title Composants avec fabricant - + parts_list.search.title Recherche de composants - + parts_list.storelocation.title Composants avec lieu de stockage - + parts_list.supplier.title Composants avec fournisseur - + parts_list.tags.title Composants avec tag - + entity.info.common.tab Général - + entity.info.statistics.tab Statistiques - + entity.info.attachments.tab Pièces jointes - + entity.info.parameters.tab Caractéristiques - + entity.info.name Nom - + entity.info.parent Parent - + entity.edit.btn Éditer - + entity.info.children_count Nombre de sous-éléments - + tfa.check.title Authentification à deux facteurs requise - + tfa.code.trusted_pc Il s'agit d'un ordinateur de confiance (si cette fonction est activée, aucune autre requête à deux facteurs n'est effectuée sur cet ordinateur) - + login.btn Connexion - + user.logout Déconnexion - + tfa.check.code.label - Code d'application de l'authentificateur + Code d'application du certificateur - + tfa.check.code.help - Entrez le code à 6 chiffres de votre application d'authentification ou l'un de vos codes de secours si l'authentificateur n'est pas disponible. + Entrez le code à 6 chiffres de votre application d'authentification ou l'un de vos codes de secours si le certificateur n'est pas disponible. - + login.title Connexion - + login.card_title Connexion - + login.username.label Nom d'utilisateur - + login.username.placeholder Nom d'utilisateur - + login.password.label Mot de passe - + login.password.placeholder Mot de passe - + login.rememberme Rester connecté (non recommandé sur les ordinateurs publics) - + pw_reset.password_forget Nom d'utilisateur/mot de passe oublié ? - + pw_reset.new_pw.header.title Définir un nouveau mot de passe - + pw_reset.request.header.title Demander un nouveau mot de passe - + tfa_u2f.http_warning Vous accédez à cette page en utilisant la méthode HTTP non sécurisée, donc U2F ne fonctionnera probablement pas (message d'erreur "Bad Request"). Demandez à un administrateur de mettre en place la méthode HTTPS sécurisée si vous souhaitez utiliser des clés de sécurité. - + r_u2f_two_factor.pressbutton Veuillez insérer la clé de sécurité et appuyer sur le bouton ! - + tfa_u2f.add_key.title Ajouter une clé de sécurité - + tfa_u2f.explanation À l'aide d'une clé de sécurité compatible U2F/FIDO (par exemple YubiKey ou NitroKey), une authentification à deux facteurs sûre et pratique peut être obtenue. Les clés de sécurité peuvent être enregistrées ici, et si une vérification à deux facteurs est nécessaire, il suffit d'insérer la clé via USB ou de la taper sur le dispositif via NFC. - + tfa_u2f.add_key.backup_hint Pour garantir l'accès même en cas de perte de la clé, il est recommandé d'enregistrer une deuxième clé en guise de sauvegarde et de la conserver dans un endroit sûr ! - + tfa_u2f.add_key.add_button Ajouter une clé de sécurité - + tfa_u2f.add_key.back_to_settings Retour aux paramètres - + new @@ -1795,7 +1776,7 @@ Show/Hide sidebar Statistiques - + new @@ -1804,7 +1785,7 @@ Show/Hide sidebar Composants - + new @@ -1813,7 +1794,7 @@ Show/Hide sidebar Structures des données - + new @@ -1822,7 +1803,7 @@ Show/Hide sidebar Fichiers joints - + new @@ -1831,7 +1812,7 @@ Show/Hide sidebar Propriété - + new @@ -1840,7 +1821,7 @@ Show/Hide sidebar Valeur - + new @@ -1849,16 +1830,16 @@ Show/Hide sidebar Nombre de composants distincts - + new statistics.parts_instock_sum - Somme de tout les composants en stock + Somme de tous les composants en stock - + new @@ -1867,7 +1848,7 @@ Show/Hide sidebar Nombre de composants avec information de prix - + new @@ -1876,7 +1857,7 @@ Show/Hide sidebar Nombre de catégories - + new @@ -1885,7 +1866,7 @@ Show/Hide sidebar Nombre d'empreintes - + new @@ -1894,7 +1875,7 @@ Show/Hide sidebar Nombre de fabricants - + new @@ -1903,7 +1884,7 @@ Show/Hide sidebar Nombre d'emplacements de stockage - + new @@ -1912,7 +1893,7 @@ Show/Hide sidebar Nombre de fournisseurs - + new @@ -1921,7 +1902,7 @@ Show/Hide sidebar Nombre de devises - + new @@ -1930,7 +1911,7 @@ Show/Hide sidebar Nombre d'unités de mesure - + new @@ -1939,7 +1920,7 @@ Show/Hide sidebar Nombre de projets - + new @@ -1948,7 +1929,7 @@ Show/Hide sidebar Nombre de types de fichiers joints - + new @@ -1957,16 +1938,16 @@ Show/Hide sidebar Total des pièces jointes - + new statistics.user_uploaded_attachments_count - Nombre de fichiers joints envoyées + Nombre de fichiers joints envoyés - + new @@ -1975,7 +1956,7 @@ Show/Hide sidebar Nombre de fichiers joints privés - + new @@ -1984,483 +1965,489 @@ Show/Hide sidebar Nombre de fichiers joints externes - + tfa_backup.codes.title Codes de secours - + tfa_backup.codes.explanation Imprimez ces codes et conservez-les dans un endroit sûr ! - + tfa_backup.codes.help Si vous n'avez plus accès à votre appareil avec l'application d'authentification (smartphone perdu, perte de données, etc.), vous pouvez utiliser un de ces codes pour accéder à votre compte et éventuellement configurer une nouvelle application d'authentification. Chacun de ces codes peut être utilisé une fois, il est recommandé de supprimer les codes utilisés. Toute personne ayant accès à ces codes peut potentiellement accéder à votre compte, alors gardez-les en lieu sûr. - + tfa_backup.username Nom d'utilisateur - + tfa_backup.codes.page_generated_on Page générée le %date% - + tfa_backup.codes.print Imprimer - + tfa_backup.codes.copy_clipboard Copier dans le presse-papier - + user.info.label Informations sur l'utilisateur - + user.firstName.label Prénom - + user.lastName.label Nom - + user.email.label Email - + user.department.label Département - + user.username.label Nom d'utilisateur - + group.label Groupe - + user.permissions Autorisations - + user.settings.label Paramètres utilisateur - + user_settings.data.label Données personnelles - + user_settings.configuration.label Configuration - + user.settings.change_pw Changer de mot de passe - + user.settings.2fa_settings Authentification à deux facteurs - + tfa.settings.google.tab Application d'authentification - + tfa.settings.bakup.tab Codes de secours - + tfa.settings.u2f.tab Clés de sécurité (U2F) - + tfa.settings.trustedDevices.tab Appareils de confiance - + tfa_google.disable.confirm_title Voulez-vous vraiment désactiver l'application d'authentification ? - + tfa_google.disable.confirm_message Si vous désactivez l'application d'authentification, tous les codes de sauvegarde seront supprimés, vous devrez donc peut-être les réimprimer.<br> Notez également que sans authentification à deux facteurs, votre compte n'est pas aussi bien protégé ! - + tfa_google.disabled_message Application d'authentification désactivée - + tfa_google.step.download Télécharger une application d'authentification (par exemple <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Authentificateur Google</a> ou <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">Authentificateur FreeOTP</a>) - + tfa_google.step.scan Scannez le QR code adjacent avec l'application ou saisissez les données manuellement - + tfa_google.step.input_code Entrez le code généré dans le champ ci-dessous et confirmez - + tfa_google.step.download_backup Imprimez vos codes de secours et conservez-les dans un endroit sûr - + tfa_google.manual_setup Configuration manuelle - + tfa_google.manual_setup.type Type - + tfa_google.manual_setup.username Nom d'utilisateur - + tfa_google.manual_setup.secret Secret - + tfa_google.manual_setup.digit_count Nombre de caractères - + tfa_google.enabled_message Application d'authentification activée - + tfa_backup.disabled Codes de secours désactivés. Configurez l'application d'authentification pour activer les codes de secours. - + tfa_backup.explanation Grâce à ces codes de secours, vous pouvez accéder à votre compte même si vous perdez l'appareil avec l'application d'authentification. Imprimez les codes et conservez-les dans un endroit sûr. - + tfa_backup.reset_codes.confirm_title - Etes vous sûr de vouloir réinitialiser les codes ? + Êtes-vous sûr de vouloir réinitialiser les codes ? - + tfa_backup.reset_codes.confirm_message Cela permettra de supprimer tous les codes précédents et de générer un ensemble de nouveaux codes. Cela ne peut pas être annulé. N'oubliez pas d'imprimer les nouveaux codes et de les conserver dans un endroit sûr ! - + tfa_backup.enabled Codes de secours activés - + tfa_backup.show_codes Afficher les codes de secours - + tfa_u2f.table_caption Clés de sécurité enregistrées - + tfa_u2f.delete_u2f.confirm_title - Etes vous sûr de vouloir supprimer cette clé de sécurité ? + Êtes-vous sûr de vouloir supprimer cette clé de sécurité ? - + tfa_u2f.delete_u2f.confirm_message Si vous supprimez cette clé, il ne sera plus possible de se connecter avec cette clé. S'il ne reste aucune clé de sécurité, l'authentification à deux facteurs sera désactivée. - + tfa_u2f.keys.name Nom de la clé - + tfa_u2f.keys.added_date Date d'enregistrement - + tfa_u2f.key_delete Supprimer la clé - + tfa_u2f.no_keys_registered Aucune clé de sécurité enregistrée - + tfa_u2f.add_new_key Enregistrer une nouvelle clé de sécurité - + tfa_trustedDevices.explanation Lors de la vérification du deuxième facteur, l'ordinateur actuel peut être marqué comme étant digne de confiance, de sorte qu'il n'est plus nécessaire de procéder à des vérifications à deux facteurs sur cet ordinateur. Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fiable, vous pouvez réinitialiser le statut de <i>tous</i> les ordinateurs ici. - + tfa_trustedDevices.invalidate.confirm_title - Etes vous sûr de vouloir supprimer tous les ordinateurs de confiance ? + Êtes-vous sûr de vouloir supprimer tous les ordinateurs de confiance ? - + tfa_trustedDevices.invalidate.confirm_message Vous devrez à nouveau procéder à une authentification à deux facteurs sur tous les ordinateurs. Assurez-vous d'avoir votre appareil à deux facteurs à portée de main. - + tfa_trustedDevices.invalidate.btn Supprimer tous les dispositifs de confiance - + sidebar.toggle Activer/désactiver la barre latérale - + navbar.scanner.link Scanner - + user.loggedin.label Connecté en tant que - + user.login Connexion - + ui.toggle_darkmode - Darkmode + Sombre - + user.language_select Langue - + search.options.label Options de recherche - + tags.label Tags - + storelocation.label Emplacement de stockage - + ordernumber.label.short Codecmd. - + supplier.label Fournisseur - + search.regexmatching Reg.Ex. Correspondance - + + + project.labelp + Projet + + + actions Actions - + datasource Source de données - + manufacturer.labelp Fabricants - + supplier.labelp Fournisseurs - + attachment.download_failed Le téléchargement du fichier joint a échoué ! - + entity.edit_flash Changements sauvegardés avec succès. - + entity.edit_flash.invalid Les changements n'ont pas pu être sauvegardés ! Veuillez vérifier vos données ! - + entity.created_flash Élément créé avec succès ! - + entity.created_flash.invalid L'élément n'a pas pu être créé ! Vérifiez vos données ! - + attachment_type.deleted Élément supprimé ! - + csfr_invalid - Le jeton RFTS n'est pas valable ! Rechargez cette page ou contactez un administrateur si le problème persiste ! + Le jeton CSRF n'est pas valide ! Rechargez cette page ou contactez un administrateur si le problème persiste ! - + label_generator.no_entities_found Aucune entité correspondant à la gamme trouvée. - + new @@ -2469,7 +2456,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'élément ciblé n'a pas pu être trouvé dans la base de données ! - + new @@ -2478,7 +2465,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Rétablissement réussi. - + new @@ -2487,7 +2474,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Élément restauré avec succès. - + new @@ -2496,7 +2483,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'élément a déjà été restauré ! - + new @@ -2505,7 +2492,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'élément a été supprimé avec succès. - + new @@ -2514,7 +2501,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'élément a déjà été supprimé ! - + new @@ -2523,7 +2510,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Annulation de la modification de l'élément - + new @@ -2532,7 +2519,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Vous devez supprimer l'élément avant de pouvoir annuler ce changement ! - + new @@ -2541,175 +2528,175 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Cette entrée de journal ne peut pas être annulée ! - + part.edited_flash Changements sauvegardés ! - + part.deleted Composant supprimé avec succès. - + part.created_flash Composants créés avec succès ! - + part.created_flash.invalid Erreur lors de la création : Vérifiez vos données ! - + scan.qr_not_found Aucun élément trouvé pour le code-barres donné. - + scan.format_unknown Format inconnu ! - + scan.qr_success Élément trouvé. - + pw_reset.user_or_email Nom d'utilisateur / Email - + pw_reset.request.success Demande de mot de passe réussie ! Consultez vos e-mails pour plus d'informations. - + pw_reset.username Nom d'utilisateur - + pw_reset.token - Jeton + Token - + pw_reset.new_pw.error Nom d'utilisateur ou jeton invalide ! Veuillez vérifier vos données. - + pw_reset.new_pw.success Le mot de passe a été réinitialisé avec succès. Vous pouvez maintenant vous connecter avec le nouveau mot de passe. - + user.edit.reset_success Toutes les méthodes d'authentification à deux facteurs ont été désactivées avec succès. - + tfa_backup.no_codes_enabled Aucun code de secours n'est activé ! - + tfa_u2f.u2f_delete.not_existing Il n'y a pas de clé de sécurité avec cet ID ! - + tfa_u2f.u2f_delete.access_denied Vous ne pouvez pas supprimer les clés de sécurité des autres utilisateurs ! - + tfa.u2f.u2f_delete.success Clé de sécurité retirée avec succès. - + tfa_trustedDevice.invalidate.success Les appareils de confiance ont été réinitialisés avec succès. - + user.settings.saved_flash Paramètres sauvegardés ! - + user.settings.pw_changed_flash Mot de passe changé ! - + user.settings.2fa.google.activated L'application d'authentification a été activée avec succès. - + user.settings.2fa.google.disabled L'application d'authentification a été désactivée avec succès. - + user.settings.2fa.backup_codes.regenerated De nouveaux codes de secours ont été générés avec succès. - + attachment.table.filesize Taille du fichier - + true Vrai - + false Faux - + log.target_deleted Cible supprimée. - + new @@ -2718,7 +2705,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Annuler la suppression - + new @@ -2727,7 +2714,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Annuler la modification - + new @@ -2736,49 +2723,49 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Restaurer à cette date - + log.id ID - + log.timestamp Horodatage - + log.type Type - + log.level Niveau - + log.user Utilisateur - + log.target_type Type de cible - + log.target Cible - + new @@ -2787,805 +2774,853 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Extra - + part.table.name Nom - + part.table.id ID - + part.table.description Description - + part.table.category Catégorie - + part.table.footprint Empreinte - + part.table.manufacturer Fabricant - + part.table.storeLocations Emplacement de stockage - + part.table.amount Quantité - + part.table.minamount Quantité min. - + part.table.partUnit Unité de mesure - + part.table.partCustomState État personnalisé de la pièce - + part.table.addedDate Créé le - + part.table.lastModified Dernière modification - + part.table.needsReview Révision nécessaire - + part.table.favorite Favoris - + part.table.manufacturingStatus État - + m_status.unknown Inconnu - + m_status.announced Annoncé - + m_status.active Actif - + m_status.nrfnd Non recommandé pour les nouvelles conceptions - + m_status.eol Fin de vie - + m_status.discontinued Arrêtés - + part.table.mpn MPN - + part.table.mass Poids - + part.table.tags Tags - + part.table.attachments Fichiers joints - + + + part.table.eda_status + EDA + + + + + eda.status.symbol_set + Ensemble de symboles KiCad + + + + + eda.status.footprint_set + Ensemble d'empreintes KiCad + + + + + eda.status.reference_set + Ensemble de préfixe de référence + + + + + eda.status.complete + Champs EDA complétés (symbole, empreinte, référence) + + + + + eda.status.partial + Champs EDA partiellement complétés + + + flash.login_successful Connexion réussie. - + JSON JSON - + XML XML - + CSV CSV - + YAML YAML - + import.abort_on_validation.help Si cette option est activée, l'ensemble du processus est interrompu si des données non valides sont détectées. Si cette option n'est pas active, les entrées non valides sont ignorées et une tentative est faite pour importer les autres entrées. - + import.csv_separator Séparateur CSV - + parent.label Élément parent - + import.file Fichier - + import.preserve_children Importer également des sous-éléments - + import.abort_on_validation Interrompre sur donnée invalide - + import.btn Importer - + attachment.edit.secure_file.help Un fichier joint marqué comme étant privé ne peut être consulté que par un utilisateur connecté qui a l'autorisation appropriée. Si cette option est activée, aucune miniature n'est générée et l'accès au fichier est plus lent. - + attachment.edit.url.help Il est possible de saisir ici soit l'URL d'un fichier externe, soit un mot clé pour rechercher les ressources intégrées (par exemple les empreintes). - + attachment.edit.name Nom - + attachment.edit.attachment_type Type de fichier joint - + attachment.edit.show_in_table Voir dans le tableau - + attachment.edit.secure_file Fichier joint privé - + attachment.edit.url URL - + attachment.edit.download_url Télécharger un fichier externe - + attachment.edit.file Télécharger le fichier - + part.label Composant - + part_lot.label Lot de composant - + label_options.barcode_type.none Aucun - + label_options.barcode_type.qr QR Code (recommandé) - + label_options.barcode_type.code128 Code 128 (recommandé) - + label_options.barcode_type.code39 Code 39 (recommandé) - + label_options.barcode_type.code93 Code 93 - + label_options.barcode_type.datamatrix Datamatrix - + label_options.lines_mode.html - Placeholders + Espace réservé - + label.options.lines_mode.twig Twig - + label_options.lines_mode.help - Si vous sélectionnez Twig ici, le champ de contenu est interprété comme un modèle Twig. Voir <a href="https://twig.symfony.com/doc/3.x/templates.html">Documentation de Twig</a> et <a href="https://github.com/Part-DB/Part-DB-symfony/wiki/Labels#twig-mode">Wiki</a> pour plus d'informations. + Si vous sélectionnez Twig ici, le champ de contenu est interprété comme un modèle Twig. Voir <a href="https://twig.symfony.com/doc/3.x/templates.html">Documentation de Twig</a> et <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> pour plus d'informations. - + label_options.page_size.label Taille de l'étiquette - + label_options.supported_elements.label Type de cible - + label_options.barcode_type.label Code barre - + label_profile.lines.label Contenu - + label_options.additional_css.label Styles supplémentaires (CSS) - + label_options.lines_mode.label - Parser mode + Mode du parseur - + label_options.width.placeholder Largeur - + label_options.height.placeholder Hauteur - + label_generator.target_id.range_hint Vous pouvez spécifier ici plusieurs ID (par exemple 1,2,3) et/ou une plage (1-3) pour générer des étiquettes pour plusieurs éléments à la fois. - + label_generator.target_id.label ID des cibles - + label_generator.update Actualisation - + scan_dialog.input Saisie - + scan_dialog.submit Soumettre - + parameters.name.placeholder - ex. Gain de courant DC + Ex. Gain de courant DC - + parameters.symbol.placeholder - ex. h_{FE} + Ex. h_{FE} - + parameters.text.placeholder ex. Test conditions - + parameters.max.placeholder ex. 350 - + parameters.min.placeholder - ex. 100 + Mémoire minimale - + parameters.typical.placeholder ex. 200 - + parameters.unit.placeholder - ex. V + Ex. V - + parameter.group.placeholder - ex. Spécifications techniques + Ex. Spécifications techniques - + orderdetails.edit.supplierpartnr Numéro de commande - + orderdetails.edit.supplier Fournisseur - + orderdetails.edit.url Lien vers l'offre - + orderdetails.edit.obsolete Plus disponible - + + + orderdetails.edit.eda_visibility + Visible en EDA + + + orderdetails.edit.supplierpartnr.placeholder Ex. BC 547C - + part.edit.name Nom - + part.edit.description Description - + part.edit.mininstock Stock minimum - + part.edit.category Catégories - + part.edit.footprint Empreinte - + part.edit.tags Tags - + part.edit.manufacturer.label Fabricant - + part.edit.manufacturer_url.label Lien vers la page du produit - + part.edit.mpn Numéro de pièce du fabricant - + part.edit.manufacturing_status État de la fabrication - + part.edit.needs_review Révision nécessaire - + part.edit.is_favorite Favoris - + part.edit.mass Poids - + part.edit.partUnit Unité de mesure - + part.edit.partCustomState État personnalisé de la pièce - + part.edit.comment Commentaire - + part.edit.master_attachment Miniature - + part.edit.save Sauvegarder les modifications - + part.edit.reset - rejeter les modifications + Rejeter les modifications - + part.edit.name.placeholder Ex. BC547 - + part.edit.description.placeholder Ex. NPN 45V, 0,1A, 0,5W - + part.editmininstock.placeholder Ex. 1 - + part_lot.edit.description Description - + part_lot.edit.location Emplacement de stockage - + part_lot.edit.amount Quantité - + part_lot.edit.instock_unknown Quantité inconnue - + part_lot.edit.needs_refill Doit être rempli - + part_lot.edit.expiration_date Date d'expiration - + part_lot.edit.comment Commentaire - + perm.group.other Divers - + tfa_google.enable Activer l'application d'authentification - + tfa_google.disable Désactiver l'application d'authentification - + google_confirmation Code de confirmation - + user.timezone.label Fuseau horaire - + user.currency.label Devise préférée - + save Appliquer les modifications - + reset Rejeter les modifications - + user_settings.language.placeholder Langue du serveur - + user_settings.timezone.placeholder Fuseau horaire du serveur - + attachment.label Fichier joint - + attachment_type.label Type de fichier joint - + + + project.label + Projet + + + measurement_unit.label Unité de mesure - + part_custom_state.label État personnalisé de la pièce - + currency.label Devise - + orderdetail.label Informations de commande - + pricedetail.label Informations sur les prix - + user.label Utilisateur - + parameter.label Caractéristique - + label_profile.label Profil d'étiquette - + new @@ -3594,133 +3629,139 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Inconnu - + markdown.loading Chargement de la remise. Si ce message ne disparaît pas, essayez de recharger la page. - + pw_reset.email.subject Réinitialisation du mot de passe de votre compte Part-DB - + tree.tools.tools Outils - + tree.tools.edit Éditer - + tree.tools.show Afficher - + tree.tools.system Système - + tree.tools.tools.label_dialog Générateur d'étiquettes - + tree.tools.tools.label_scanner Scanner - + tree.tools.edit.attachment_types Types de fichier joint - + tree.tools.edit.categories Catégories - + + + tree.tools.edit.projects + Modifier les projets + + + tree.tools.edit.suppliers Fournisseurs - + tree.tools.edit.manufacturer Fabricants - + tree.tools.edit.storelocation Emplacements de stockage - + tree.tools.edit.footprint Empreintes - + tree.tools.edit.currency Devises - + tree.tools.edit.measurement_unit Unité de mesure - + tree.tools.edit.part_custom_state État personnalisé de la pièce - + tree.tools.edit.label_profile Profils d'étiquettes - + tree.tools.edit.part Composant - + tree.tools.show.all_parts Voir tous les composants - + tree.tools.show.all_attachments Fichiers joints - + new @@ -3729,19 +3770,19 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Statistiques - + tree.tools.system.users Utilisateurs - + tree.tools.system.groups Groupes - + new @@ -3750,13 +3791,13 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Système d'événements - + entity.tree.new Nouvel élément - + obsolete @@ -3765,7 +3806,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Éditer - + obsolete @@ -3774,7 +3815,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Scanner un code-barres - + obsolete @@ -3783,7 +3824,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Thème - + obsolete @@ -3792,7 +3833,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Thème du serveur - + new obsolete @@ -3802,7 +3843,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia IP - + new obsolete @@ -3812,7 +3853,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Modification annulée - + new obsolete @@ -3822,7 +3863,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Élément restauré - + new obsolete @@ -3832,7 +3873,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ancien stock - + new obsolete @@ -3842,7 +3883,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ancien nom - + new obsolete @@ -3852,7 +3893,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Champs modifiés - + new obsolete @@ -3862,7 +3903,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Commentaire - + new obsolete @@ -3872,17 +3913,17 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Élément supprimé : - + obsolete obsolete go.exclamation - Allez! + Allez ! - + obsolete obsolete @@ -3892,7 +3933,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Anglais - + obsolete obsolete @@ -3902,7 +3943,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Allemand - + obsolete obsolete @@ -3912,7 +3953,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Votre mot de passe doit être changé ! - + obsolete obsolete @@ -3922,47 +3963,47 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Type de fichier joint - + obsolete obsolete attachment.table.element - élément lié + Élément lié - + obsolete obsolete attachment.edit.isPicture - Image? + Image ? - + obsolete obsolete attachment.edit.is3DModel - Modèle 3D? + Modèle 3D ? - + obsolete obsolete attachment.edit.isBuiltin - Intégré? + Intégré ? - + obsolete obsolete @@ -3972,7 +4013,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ex. utilisé pour les alimentations à découpage - + obsolete obsolete @@ -3982,7 +4023,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Créer de nouveaux codes de secours - + obsolete obsolete @@ -3992,7 +4033,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Un élément ne peut pas être son propre parent. - + obsolete obsolete @@ -4002,7 +4043,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Le parent ne peut pas être un de ses propres enfants. - + obsolete obsolete @@ -4012,7 +4053,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'emplacement de stockage est plein, c'est pourquoi aucun nouveau composant ne peut être ajouté. - + obsolete obsolete @@ -4022,7 +4063,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'emplacement de stockage a été marqué comme "uniquement existant", donc aucun nouveau composant ne peut être ajouté. - + obsolete obsolete @@ -4032,7 +4073,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'emplacement de stockage a été marqué comme "Composant seul", par conséquent aucun nouveau composant ne peut être ajouté. - + obsolete obsolete @@ -4042,7 +4083,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Le composant est actuellement en cours de production et sera produit dans un avenir proche. - + obsolete obsolete @@ -4052,7 +4093,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Le composant a été annoncé, mais n'est pas encore disponible. - + obsolete obsolete @@ -4062,7 +4103,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Le composant n'est plus fabriqué. - + obsolete obsolete @@ -4072,7 +4113,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia La production de ce composant sera bientôt arrêtée. - + obsolete obsolete @@ -4082,7 +4123,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ce composant est actuellement en production mais n'est pas recommandé pour les nouvelles conceptions. - + obsolete obsolete @@ -4092,7 +4133,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia L'état de la production n'est pas connu. - + obsolete obsolete @@ -4102,7 +4143,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Succès - + obsolete obsolete @@ -4112,7 +4153,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Erreur - + obsolete obsolete @@ -4122,7 +4163,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Attention - + obsolete obsolete @@ -4132,7 +4173,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Remarque - + obsolete obsolete @@ -4142,7 +4183,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Info - + obsolete obsolete @@ -4152,7 +4193,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Vous ne pouvez pas révoquer vous-même l'autorisation de "modifier les autorisations" pour éviter de vous verrouiller accidentellement ! - + obsolete obsolete @@ -4162,17 +4203,17 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Types de fichiers autorisés - + obsolete obsolete attachment_type.edit.filetype_filter.help - Vous pouvez spécifier ici une liste, séparée par des virgules, des extensions de fichiers ou des mimétapes qu'un fichier téléchargé avec ce type de pièce jointe doit avoir. Pour autoriser tous les fichiers d'images pris en charge, utilisez image/*. + Vous pouvez spécifier ici une liste, séparée par des virgules, des extensions de fichiers ou des types mimes qu'un fichier téléchargé avec ce type de pièce jointe doit avoir. Pour autoriser tous les fichiers d'images pris en charge, utilisez image/*. - + obsolete obsolete @@ -4182,7 +4223,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ex. .txt, application/pdf, image/* - + obsolete obsolete @@ -4192,7 +4233,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ex. BC547 - + obsolete obsolete @@ -4202,7 +4243,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Non sélectionnable - + obsolete obsolete @@ -4212,7 +4253,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Si cette option est activée, alors cet élément ne peut être attribué à aucun composant en tant que propriété. Utile, par exemple si cet élément doit être utilisé uniquement pour le tri. - + obsolete obsolete @@ -4222,7 +4263,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Le BBCode peut être utilisé ici (par exemple [b]Bold[/b]) - + obsolete obsolete @@ -4232,7 +4273,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Créer un élément - + obsolete obsolete @@ -4242,7 +4283,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Sauvegarder - + obsolete obsolete @@ -4252,7 +4293,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Désactiver les empreintes - + obsolete obsolete @@ -4262,7 +4303,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Si cette option est activée, la propriété Empreinte est désactivée pour tous les composants de cette catégorie. - + obsolete obsolete @@ -4272,7 +4313,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Désactiver les fabricants - + obsolete obsolete @@ -4282,7 +4323,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Si cette option est activée, la propriété fabricant est désactivée pour tous les composants de cette catégorie. - + obsolete obsolete @@ -4292,7 +4333,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Désactiver les liens automatiques des fiches techniques - + obsolete obsolete @@ -4302,7 +4343,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Si cette option est activée, aucun lien automatique avec la fiche technique n'est généré pour les pièces de cette catégorie. - + obsolete obsolete @@ -4312,7 +4353,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Désactiver les propriétés - + obsolete obsolete @@ -4322,7 +4363,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Si cette option est activée, les propriétés des composants pour tous les composants de cette catégorie sont désactivées. - + obsolete obsolete @@ -4332,7 +4373,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Indication du nom du composant - + obsolete obsolete @@ -4342,7 +4383,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ex. 100nF - + obsolete obsolete @@ -4352,13 +4393,13 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Filtre de nom - + category.edit.part_ipn_prefix - Préfixe de pièce IPN + Préfixe IPN de la pièce - + obsolete obsolete @@ -4368,7 +4409,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Description par défaut - + obsolete obsolete @@ -4378,7 +4419,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Ex. Condensateur, 10mmx10mm, CMS - + obsolete obsolete @@ -4388,7 +4429,7 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Commentaire par défaut - + obsolete obsolete @@ -4398,18 +4439,18 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia Adresse - + obsolete obsolete company.edit.address.placeholder - Ex. 99 exemple de rue + Ex. 99 exemple de rue exemple de ville - + obsolete obsolete @@ -4419,7 +4460,7 @@ exemple de ville Numéro de téléphone - + obsolete obsolete @@ -4429,7 +4470,7 @@ exemple de ville +33 1 23 45 67 89 - + obsolete obsolete @@ -4439,7 +4480,7 @@ exemple de ville Numéro de fax - + obsolete obsolete @@ -4449,7 +4490,7 @@ exemple de ville Email - + obsolete obsolete @@ -4459,7 +4500,7 @@ exemple de ville Ex. contact@foo.bar - + obsolete obsolete @@ -4469,7 +4510,7 @@ exemple de ville Site internet - + obsolete obsolete @@ -4479,7 +4520,7 @@ exemple de ville https://www.foo.bar - + obsolete obsolete @@ -4489,7 +4530,7 @@ exemple de ville URL du produit - + obsolete obsolete @@ -4499,7 +4540,7 @@ exemple de ville Si cette URL est définie, elle est utilisée pour générer l'URL d'un composant sur le site web du fabricant. Dans ce cas, %PARTNUMBER% sera remplacé par le numéro de commande. - + obsolete obsolete @@ -4509,7 +4550,7 @@ exemple de ville https://foo.bar/product/%PARTNUMBER% - + obsolete obsolete @@ -4519,7 +4560,7 @@ exemple de ville Code ISO - + obsolete obsolete @@ -4529,7 +4570,7 @@ exemple de ville Taux de change - + obsolete obsolete @@ -4539,7 +4580,7 @@ exemple de ville Modèle 3D - + obsolete obsolete @@ -4549,7 +4590,7 @@ exemple de ville Saisie - + obsolete obsolete @@ -4557,11 +4598,17 @@ exemple de ville mass_creation.lines.placeholder Élément 1 + Élément 1.1 + Élément 1.1.1 + Élément 1.2 Élément 2 -Élément 3 +Élément 3 + +Élément 1 -> Élément 1.1 +Élément 1 -> Élément 1.2 - + obsolete obsolete @@ -4571,7 +4618,7 @@ exemple de ville Créer - + obsolete obsolete @@ -4581,7 +4628,7 @@ exemple de ville Nombre entier - + obsolete obsolete @@ -4591,7 +4638,7 @@ exemple de ville Si cette option est activée, toutes les quantités dans cette unité sont arrondies à des nombres entiers. - + obsolete obsolete @@ -4601,7 +4648,7 @@ exemple de ville Utiliser les préfixes SI - + obsolete obsolete @@ -4611,7 +4658,7 @@ exemple de ville Si cette option est activée, les préfixes SI sont utilisés lors de la génération des nombres (par exemple 1,2 kg au lieu de 1200 g) - + obsolete obsolete @@ -4621,7 +4668,7 @@ exemple de ville Symbole de l'unité - + obsolete obsolete @@ -4631,7 +4678,7 @@ exemple de ville Ex. m - + obsolete obsolete @@ -4641,7 +4688,7 @@ exemple de ville Emplacement de stockage plein - + obsolete obsolete @@ -4651,7 +4698,7 @@ exemple de ville Si cette option est activée, il n'est pas possible d'ajouter de nouveaux composants à ce lieu de stockage ni d'augmenter le nombre de composants existants. - + obsolete obsolete @@ -4661,7 +4708,7 @@ exemple de ville Limiter aux composants existants - + obsolete obsolete @@ -4671,7 +4718,7 @@ exemple de ville Si cette option est active, il n'est pas possible d'ajouter de nouveaux composants à ce lieu de stockage, mais il est possible d'augmenter le nombre de composants existants. - + obsolete obsolete @@ -4681,7 +4728,7 @@ exemple de ville Seulement un composant - + obsolete obsolete @@ -4691,7 +4738,7 @@ exemple de ville Si cette option est activée, cet emplacement de stockage ne peut contenir qu'un seul composant (mais une quantité quelconque). Utile pour les petits compartiments ou les distributeurs de CMS. - + obsolete obsolete @@ -4701,7 +4748,7 @@ exemple de ville Type de stockage - + obsolete obsolete @@ -4711,7 +4758,7 @@ exemple de ville Ici, vous pouvez sélectionner une unité de mesure qu'un composant doit avoir pour être stocké dans ce lieu de stockage. - + obsolete obsolete @@ -4721,7 +4768,7 @@ exemple de ville Devise par défaut - + obsolete obsolete @@ -4731,7 +4778,7 @@ exemple de ville Frais de port - + obsolete obsolete @@ -4741,7 +4788,7 @@ exemple de ville Ex. j.doe - + obsolete obsolete @@ -4751,7 +4798,7 @@ exemple de ville Ex. John - + obsolete obsolete @@ -4761,7 +4808,7 @@ exemple de ville Ex. Doe - + obsolete obsolete @@ -4771,7 +4818,7 @@ exemple de ville j.doe@ecorp.com - + obsolete obsolete @@ -4781,7 +4828,7 @@ exemple de ville Ex. Development - + obsolete obsolete @@ -4791,7 +4838,7 @@ exemple de ville Nouveau mot de passe - + obsolete obsolete @@ -4801,7 +4848,7 @@ exemple de ville Confirmer le nouveau mot de passe - + obsolete obsolete @@ -4811,7 +4858,7 @@ exemple de ville L'utilisateur doit changer de mot de passe - + obsolete obsolete @@ -4821,7 +4868,7 @@ exemple de ville Utilisateur désactivé (connexion impossible) - + obsolete obsolete @@ -4831,7 +4878,7 @@ exemple de ville Créer l'utilisateur - + obsolete obsolete @@ -4841,7 +4888,7 @@ exemple de ville Enregistrer - + obsolete obsolete @@ -4851,7 +4898,7 @@ exemple de ville Rejeter les modifications - + obsolete obsolete @@ -4861,7 +4908,7 @@ exemple de ville Ajouter - + obsolete obsolete @@ -4871,7 +4918,7 @@ exemple de ville Lien vers le site du fabricant - + obsolete obsolete @@ -4881,7 +4928,7 @@ exemple de ville Composants - + obsolete obsolete @@ -4891,7 +4938,7 @@ exemple de ville Structures des données - + obsolete obsolete @@ -4901,17 +4948,7 @@ exemple de ville Système - - - obsolete - obsolete - - - perm.parts - Général - - - + obsolete obsolete @@ -4921,7 +4958,7 @@ exemple de ville Afficher - + obsolete obsolete @@ -4931,7 +4968,7 @@ exemple de ville Éditer - + obsolete obsolete @@ -4941,7 +4978,7 @@ exemple de ville Créer - + obsolete obsolete @@ -4951,7 +4988,7 @@ exemple de ville Changer de catégorie - + obsolete obsolete @@ -4961,7 +4998,7 @@ exemple de ville Supprimer - + obsolete obsolete @@ -4971,7 +5008,7 @@ exemple de ville Rechercher - + obsolete obsolete @@ -4981,7 +5018,7 @@ exemple de ville Liste de tous les composants - + obsolete obsolete @@ -4991,7 +5028,7 @@ exemple de ville Liste des composants sans prix - + obsolete obsolete @@ -5001,7 +5038,7 @@ exemple de ville Liste des composants obsolètes - + obsolete obsolete @@ -5011,7 +5048,7 @@ exemple de ville Liste des composants dont le stock est inconnu - + obsolete obsolete @@ -5021,7 +5058,7 @@ exemple de ville Changer le statut de favori - + obsolete obsolete @@ -5031,7 +5068,7 @@ exemple de ville Afficher les favoris - + obsolete obsolete @@ -5041,7 +5078,7 @@ exemple de ville Afficher les derniers composants modifiés/ajoutés - + obsolete obsolete @@ -5051,7 +5088,7 @@ exemple de ville Afficher le dernier utilisateur ayant apporté des modifications - + obsolete obsolete @@ -5061,7 +5098,7 @@ exemple de ville Afficher l'historique - + obsolete obsolete @@ -5071,7 +5108,7 @@ exemple de ville Nom - + obsolete obsolete @@ -5081,7 +5118,7 @@ exemple de ville Description - + obsolete obsolete @@ -5091,7 +5128,7 @@ exemple de ville En stock - + obsolete obsolete @@ -5101,7 +5138,7 @@ exemple de ville Stock minimum - + obsolete obsolete @@ -5111,7 +5148,7 @@ exemple de ville Commentaire - + obsolete obsolete @@ -5121,7 +5158,7 @@ exemple de ville Emplacement de stockage - + obsolete obsolete @@ -5131,7 +5168,7 @@ exemple de ville Fabricant - + obsolete obsolete @@ -5141,7 +5178,7 @@ exemple de ville Informations pour la commande - + obsolete obsolete @@ -5151,7 +5188,7 @@ exemple de ville Prix - + obsolete obsolete @@ -5161,7 +5198,7 @@ exemple de ville Fichiers joints - + obsolete obsolete @@ -5171,17 +5208,7 @@ exemple de ville Commandes - - - obsolete - obsolete - - - perm.storelocations - Emplacements de stockage - - - + obsolete obsolete @@ -5191,7 +5218,7 @@ exemple de ville Déplacer - + obsolete obsolete @@ -5201,57 +5228,7 @@ exemple de ville Liste des composants - - - obsolete - obsolete - - - perm.part.footprints - Empreintes - - - - - obsolete - obsolete - - - perm.part.categories - Catégories - - - - - obsolete - obsolete - - - perm.part.supplier - Fournisseurs - - - - - obsolete - obsolete - - - perm.part.manufacturers - Fabricants - - - - - obsolete - obsolete - - - perm.part.attachment_types - Types de fichiers joints - - - + obsolete obsolete @@ -5261,7 +5238,7 @@ exemple de ville Importer - + obsolete obsolete @@ -5271,7 +5248,7 @@ exemple de ville Étiquettes - + obsolete obsolete @@ -5281,7 +5258,7 @@ exemple de ville Calculateur de résistance - + obsolete obsolete @@ -5291,7 +5268,7 @@ exemple de ville Empreintes - + obsolete obsolete @@ -5301,7 +5278,7 @@ exemple de ville Logos CI - + obsolete obsolete @@ -5311,7 +5288,7 @@ exemple de ville Statistiques - + obsolete obsolete @@ -5321,7 +5298,7 @@ exemple de ville Éditer les autorisations - + obsolete obsolete @@ -5331,7 +5308,7 @@ exemple de ville Modifier le nom d'utilisateur - + obsolete obsolete @@ -5341,17 +5318,17 @@ exemple de ville Modifier le groupe - + obsolete obsolete perm.users.edit_infos - Editer les informations + Éditer les informations - + obsolete obsolete @@ -5361,7 +5338,7 @@ exemple de ville Modifier les autorisations - + obsolete obsolete @@ -5371,7 +5348,7 @@ exemple de ville Définir le mot de passe - + obsolete obsolete @@ -5381,7 +5358,7 @@ exemple de ville Changer les paramètres utilisateur - + obsolete obsolete @@ -5391,7 +5368,7 @@ exemple de ville Afficher l’état - + obsolete obsolete @@ -5401,7 +5378,7 @@ exemple de ville Actualiser la base de données - + obsolete obsolete @@ -5411,7 +5388,7 @@ exemple de ville Lecture des paramètres de la base de donnée - + obsolete obsolete @@ -5421,7 +5398,7 @@ exemple de ville Modifier les paramètres de la base de données - + obsolete obsolete @@ -5431,7 +5408,7 @@ exemple de ville Lecture de la configuration - + obsolete obsolete @@ -5441,7 +5418,7 @@ exemple de ville Modifier la configuration - + obsolete obsolete @@ -5451,7 +5428,7 @@ exemple de ville Informations sur le serveur - + obsolete obsolete @@ -5461,7 +5438,7 @@ exemple de ville Utiliser les outils de débogage - + obsolete obsolete @@ -5471,7 +5448,7 @@ exemple de ville Afficher les logs - + obsolete obsolete @@ -5481,7 +5458,7 @@ exemple de ville Supprimer les logs - + obsolete obsolete @@ -5491,7 +5468,7 @@ exemple de ville Modifier les informations - + obsolete obsolete @@ -5501,7 +5478,7 @@ exemple de ville Modifier le nom d'utilisateur - + obsolete obsolete @@ -5511,7 +5488,7 @@ exemple de ville Voir les autorisations - + obsolete obsolete @@ -5521,7 +5498,7 @@ exemple de ville Afficher ses propres logs - + obsolete obsolete @@ -5531,7 +5508,7 @@ exemple de ville Créer des étiquettes - + obsolete obsolete @@ -5541,7 +5518,7 @@ exemple de ville Modifier les options - + obsolete obsolete @@ -5551,7 +5528,7 @@ exemple de ville Supprimer les profils - + obsolete obsolete @@ -5561,7 +5538,7 @@ exemple de ville Modifier les profils - + obsolete obsolete @@ -5571,7 +5548,7 @@ exemple de ville Outils - + obsolete obsolete @@ -5581,7 +5558,7 @@ exemple de ville Groupes - + obsolete obsolete @@ -5591,7 +5568,7 @@ exemple de ville Utilisateurs - + obsolete obsolete @@ -5601,7 +5578,7 @@ exemple de ville Base de données - + obsolete obsolete @@ -5611,7 +5588,7 @@ exemple de ville Configuration - + obsolete obsolete @@ -5621,7 +5598,7 @@ exemple de ville Système - + obsolete obsolete @@ -5631,7 +5608,7 @@ exemple de ville Propre utilisateur - + obsolete obsolete @@ -5641,7 +5618,7 @@ exemple de ville Étiquettes - + obsolete obsolete @@ -5651,7 +5628,7 @@ exemple de ville Catégorie - + obsolete obsolete @@ -5661,7 +5638,7 @@ exemple de ville Quantité minimum - + obsolete obsolete @@ -5671,7 +5648,7 @@ exemple de ville Empreinte - + obsolete obsolete @@ -5681,7 +5658,7 @@ exemple de ville MPN - + obsolete obsolete @@ -5691,7 +5668,7 @@ exemple de ville État de la fabrication - + obsolete obsolete @@ -5701,7 +5678,7 @@ exemple de ville Tags - + obsolete obsolete @@ -5711,7 +5688,7 @@ exemple de ville Unité - + obsolete obsolete @@ -5721,7 +5698,7 @@ exemple de ville Poids - + obsolete obsolete @@ -5731,7 +5708,7 @@ exemple de ville Lots de composants - + obsolete obsolete @@ -5741,7 +5718,7 @@ exemple de ville Afficher le dernier utilisateur ayant apporté des modifications - + obsolete obsolete @@ -5751,7 +5728,7 @@ exemple de ville Devises - + obsolete obsolete @@ -5761,13 +5738,7 @@ exemple de ville Unités de mesure - - - perm.part_custom_states - État personnalisé du composant - - - + obsolete obsolete @@ -5777,7 +5748,7 @@ exemple de ville Ancien mot de passe - + obsolete obsolete @@ -5787,7 +5758,7 @@ exemple de ville Réinitialiser le mot de passe - + obsolete obsolete @@ -5797,17 +5768,23 @@ exemple de ville Clé de sécurité (U2F) - + obsolete obsolete google - google + Google - + + + tfa.provider.webauthn_two_factor_provider + Clé de sécurité à deux facteurs + + + obsolete obsolete @@ -5817,17 +5794,7 @@ exemple de ville Application d'authentification - - - obsolete - obsolete - - - Login successful - Connexion réussie - - - + obsolete obsolete @@ -5837,7 +5804,7 @@ exemple de ville Exception - + obsolete obsolete @@ -5847,7 +5814,7 @@ exemple de ville Connexion utilisateur - + obsolete obsolete @@ -5857,7 +5824,7 @@ exemple de ville Déconnexion de l’utilisateur - + obsolete obsolete @@ -5867,7 +5834,7 @@ exemple de ville Inconnu - + obsolete obsolete @@ -5877,7 +5844,7 @@ exemple de ville Élément créé - + obsolete obsolete @@ -5887,7 +5854,7 @@ exemple de ville Élément modifié - + obsolete obsolete @@ -5897,7 +5864,7 @@ exemple de ville Élément supprimé - + obsolete obsolete @@ -5907,7 +5874,7 @@ exemple de ville Base de données mise à jour - + obsolete @@ -5916,7 +5883,7 @@ exemple de ville Restaurer les éléments - + obsolete @@ -5925,7 +5892,7 @@ exemple de ville Afficher l'historique - + obsolete @@ -5934,7 +5901,7 @@ exemple de ville Afficher l'activité récente - + obsolete @@ -5943,16 +5910,7 @@ exemple de ville Afficher les anciennes versions des éléments (Time travel) - - - obsolete - - - Username - Nom d'utilisateur - - - + obsolete @@ -5961,7 +5919,7 @@ exemple de ville Application d'authentification désactivée - + obsolete @@ -5970,7 +5928,7 @@ exemple de ville Clé de sécurité enlevée - + obsolete @@ -5979,7 +5937,7 @@ exemple de ville Clé de sécurité ajoutée - + obsolete @@ -5988,7 +5946,7 @@ exemple de ville Clés de sauvegarde régénérées - + obsolete @@ -5997,7 +5955,7 @@ exemple de ville Application Authenticator activée - + obsolete @@ -6006,7 +5964,7 @@ exemple de ville Mot de passe modifié - + obsolete @@ -6015,7 +5973,7 @@ exemple de ville Appareils de confiance réinitialisés - + obsolete @@ -6024,7 +5982,7 @@ exemple de ville Élément de collecte supprimé - + obsolete @@ -6033,7 +5991,7 @@ exemple de ville Réinitialisation du mot de passe - + obsolete @@ -6042,7 +6000,7 @@ exemple de ville Réinitialisation à deux facteurs par l'administrateur - + obsolete @@ -6051,7 +6009,7 @@ exemple de ville Tentative d'accès non autorisé - + obsolete @@ -6060,7 +6018,7 @@ exemple de ville Succès - + obsolete @@ -6069,7 +6027,7 @@ exemple de ville 2D - + obsolete @@ -6078,7 +6036,7 @@ exemple de ville 1D - + obsolete @@ -6087,7 +6045,7 @@ exemple de ville Caractéristiques - + obsolete @@ -6096,7 +6054,7 @@ exemple de ville Voir les pièces jointes privées - + obsolete @@ -6105,7 +6063,7 @@ exemple de ville Lecteur d'étiquettes - + obsolete @@ -6114,7 +6072,7 @@ exemple de ville Lire les profils - + obsolete @@ -6123,7 +6081,7 @@ exemple de ville Créer des profils - + obsolete @@ -6132,410 +6090,6869 @@ exemple de ville Utiliser le mode twig - + label_profile.showInDropdown Afficher en sélection rapide - + group.edit.enforce_2fa Imposer l'authentification à deux facteurs (2FA) - + group.edit.enforce_2fa.help Si cette option est activée, chaque membre direct de ce groupe doit configurer au moins un deuxième facteur d'authentification. Recommandé pour les groupes administratifs ayant beaucoup de permissions. - + selectpicker.nothing_selected Rien n'est sélectionné - + entity.delete.must_not_contain_parts - L'élement contient encore des parties ! Vous devez déplacer les parties pour pouvoir supprimer cet élément. + L'élément "%PATH%" contient encore des composants ! Vous devez déplacer les composants pour pouvoir supprimer cet élément. - + entity.delete.must_not_contain_attachments Le type de pièce jointe contient toujours des pièces jointes. Changez leur type, pour pouvoir supprimer ce type de pièce jointe. - + entity.delete.must_not_contain_prices La devise contient encore des prix. Vous devez changer leur devise pour pouvoir supprimer cet élément. - + entity.delete.must_not_contain_users - Des utilisateurs utilisent toujours ce groupe ! Changez les de groupe pour pouvoir supprimer ce groupe. + Des utilisateurs utilisent toujours ce groupe ! Changez-les de groupe pour pouvoir supprimer ce groupe. - + part.table.edit Modifier - + part.table.edit.title Modifier composant - + + + part_list.action.scrollable_hint + Faire défiler pour voir toutes les actions + + + part_list.action.action.title Sélectionnez une action - + part_list.action.action.group.favorite Statut favori - + part_list.action.action.favorite Favorable - + part_list.action.action.unfavorite Défavorable - + part_list.action.action.group.change_field Modifier le champ - + part_list.action.action.change_category Modifier la catégorie - + part_list.action.action.change_footprint Modifier l'empreinte - + part_list.action.action.change_manufacturer Modifier le fabricant - + part_list.action.action.change_unit Modifier l'unité - + part_list.action.action.delete Supprimer - + part_list.action.submit Soumettre - + part_list.action.part_count %count% composants sélectionnés - + company.edit.quick.website Ouvrir le site web - + company.edit.quick.email Envoyer un e-mail - + company.edit.quick.phone Téléphoner - + company.edit.quick.fax Envoyer une télécopie - + company.fax_number.placeholder ex. +33 12 34 56 78 90 - + part.edit.save_and_clone Sauvegarder et dupliquer - + validator.file_ext_not_allowed L'extension de fichier n'est pas autorisée pour ce type de pièce jointe. - + tools.reel_calc.title Calculateur de bobines CMS - + tools.reel_calc.inner_dia Diamètre intérieur - + tools.reel_calc.outer_dia Diamètre extérieur - + tools.reel_calc.tape_thick Épaisseur du ruban - + tools.reel_calc.part_distance Distance entre les composants - + tools.reel_calc.update Actualiser - + tools.reel_calc.parts_per_meter Composants par mètre - + tools.reel_calc.result_length Longueur de la bande - + tools.reel_calc.result_amount - Nbre approximatif de composants + Nombre approximatif de composants - + tools.reel_calc.outer_greater_inner_error Erreur : Le diamètre extérieur doit être supérieur au diamètre intérieur ! - + tools.reel_calc.missing_values.error Veuillez remplir toutes les valeurs ! - + tools.reel_calc.load_preset Charger la présélection - + tools.reel_calc.explanation Ce calculateur vous donne une estimation du nombre de pièces qui restent sur une bobine de CMS. Mesurez les dimensions notées sur la bobine (ou utilisez certains des préréglages) et cliquez sur "Actualiser" pour obtenir un résultat. - + perm.tools.reel_calculator Calculateur de bobines CMS - + tree.tools.tools.reel_calculator Calculateur de bobines CMS - + + + user.pw_change_needed.flash + Votre mot de passe doit être changé. Veuillez définir un nouveau mot de passe. + + + + + part_list.action.select_null + Sélection vide + + + + + part_list.action.delete-title + Voulez-vous réellement supprimer ce composant ? + + + + + part_list.action.delete-message + Ces éléments et toutes les informations associées (comme les pièces jointes, les informations sur les prix, etc.) seront supprimés. Cette opération ne peut pas être annulée ! + + + + + part.table.actions.success + Action terminée avec succès + + + + + attachment.edit.delete.confirm + Voulez-vous réellement supprimer cette pièce jointe ? + + + + + filter.text_constraint.value.operator.EQ + Est + + + + + filter.text_constraint.value.operator.NEQ + N'est pas + + + + + filter.text_constraint.value.operator.STARTS + Commence par + + + + + filter.text_constraint.value.operator.CONTAINS + Contient + + + + + filter.text_constraint.value.operator.ENDS + Termine avec + + + + + filter.text_constraint.value.operator.LIKE + Comme modèle + + + + + filter.text_constraint.value.operator.REGEX + Expression régulière + + + + + filter.number_constraint.value.operator.BETWEEN + Entre + + + + + filter.number_constraint.AND + et + + + + + filter.entity_constraint.operator.EQ + Est (exclu répertoire enfant) + + + + + filter.entity_constraint.operator.NEQ + N'est pas (exclu répertoire enfant) + + + + + filter.entity_constraint.operator.INCLUDING_CHILDREN + Est (inclus répertoire enfant) + + + + + filter.entity_constraint.operator.EXCLUDING_CHILDREN + N'est pas (exclu répertoire enfant) + + + + + part.filter.dbId + Identifiant de la db(ID) + + + + + filter.tags_constraint.operator.ANY + N'importe laquelle des étiquettes + + + + + filter.tags_constraint.operator.ALL + TOUS les mots-clés + + + + + filter.tags_constraint.operator.NONE + Aucune des étiquettes + + + + + part.filter.lot_count + Nombre de lots + + + + + part.filter.attachments_count + Nombre de pièces jointes + + + + + part.filter.orderdetails_count + Nombre de détails de la commande + + + + + part.filter.lotExpirationDate + Date d'expiration du lot. + + + + + part.filter.lotNeedsRefill + Tous les lots doivent être rechargés + + + + + part.filter.lotUnknwonAmount + Tout lot a un montant inconnu + + + + + part.filter.attachmentName + Nom de la pièce jointe + + + + + filter.bulk_import_job.label + Tâche d'import de masse + + + + + filter.bulk_import_job.job_status + Status de la tâche + + + + + filter.bulk_import_job.part_status_in_job + Status du Composant dans la tâche + + + + + filter.bulk_import_job.status.pending + En attente + + + + + filter.bulk_import_job.status.in_progress + En cours + + + + + filter.bulk_import_job.status.completed + Terminé + + + + + filter.bulk_import_job.status.stopped + Stoppé + + + + + filter.bulk_import_job.status.failed + En échec + + + + + filter.bulk_import_job.part_status.pending + En attente + + + + + filter.bulk_import_job.part_status.completed + Terminé + + + + + filter.bulk_import_job.part_status.skipped + Zappé + + + + + filter.choice_constraint.operator.ANY + N'importe lequel des + + + + + filter.choice_constraint.operator.NONE + Aucun + + + + + part.filter.amount_sum + Montant total + + + + + filter.submit + Mise à jour + + + + + filter.discard + Effacer le filtre + + + + + filter.clear_filters + Effacer tous les filtres + + + + + filter.title + Filtre + + + + + filter.parameter_value_constraint.operator.= + Opérateur de recherche = + + + + + filter.parameter_value_constraint.operator.!= + Opérateur de recherche != + + + + + filter.parameter_value_constraint.operator.< + Opérateur de recherche < + + + + + filter.parameter_value_constraint.operator.> + Opérateur de recherche > + + + + + filter.parameter_value_constraint.operator.<= + Opérateur de recherche <= + + + + + filter.parameter_value_constraint.operator.>= + Valeur typique + + + + + filter.parameter_value_constraint.operator.BETWEEN + Value typique entre + + + + + filter.parameter_value_constraint.operator.IN_RANGE + Dans la plage de valeurs + + + + + filter.parameter_value_constraint.operator.NOT_IN_RANGE + Pas dans la plage de valeurs + + + + + filter.parameter_value_constraint.operator.GREATER_THAN_RANGE + Plus grand que la plage de valeurs + + + + + filter.parameter_value_constraint.operator.GREATER_EQUAL_RANGE + Plus grand ou égal à la plage de valeurs + + + + + filter.parameter_value_constraint.operator.LESS_THAN_RANGE + Plus petit que la plage de valeurs + + + + + filter.parameter_value_constraint.operator.LESS_EQUAL_RANGE + Plus petit ou égal à la plage de valeurs + + + + + filter.parameter_value_constraint.operator.RANGE_IN_RANGE + La plage se situe dans la page de valeurs + + + + + filter.parameter_value_constraint.operator.RANGE_INTERSECT_RANGE + La plage intersecte la plage de valeurs + + + + + filter.text_constraint.value + Aucune valeur entrée + + + + + filter.number_constraint.value1 + Aucune valeur entrée + + + + + filter.number_constraint.value2 + Valeur maximale + + + + + filter.datetime_constraint.value1 + Pas de date de définie + + + + + filter.datetime_constraint.value2 + Date trop éloignée + + + + + filter.constraint.add + Ajouter un filtre + + + + + part.filter.parameters_count + Nombre de paramètres + + + + + part.filter.lotDescription + Description du lot + + + + + parts_list.search.searching_for + Recherche dans la liste des pièces + + + + + parts_list.search_options.caption + Activation des options de recherches + + + + + attachment.table.element_type + Type d'élément attaché + + + + + log.level.debug + Débogage + + + + + log.level.info + Informations sur le niveau + + + + + log.level.notice + Notification + + + + + log.level.warning + Avertissement + + + + + log.level.error + Erreur + + + + + log.level.critical + Niveau critique + + + + + log.level.alert + Alerte de niveau + + + + + log.level.emergency + Niveau d'urgence + + + + + log.type.security + Type de sécurité + + + + + log.type.instock_changed + [LEGACY] Stock disponible modifié + + + + + log.target_id + ID de l'élément ciblé + + + + + entity.info.parts_count_recursive + Nombre de pièces avec cet élément ou ses sous-éléments + + + + + tools.server_infos.title + Infos du serveur + + + + + permission.preset.read_only + Lecture seule + + + + + permission.preset.read_only.desc + Autoriser les opérations de lecture seule uniquement + + + + + permission.preset.all_inherit + Tout Hérité + + + + + permission.preset.all_inherit.desc + Mettre toutes les permissions en "Hérité" + + + + + permission.preset.all_forbid + Tout Interdit + + + + + permission.preset.all_forbid.desc + Mettre toutes les permissions en "Interdit" + + + + + permission.preset.all_allow + Tout Autoriser + + + + + permission.preset.all_allow.desc + Mettre toutes les permissions en "Autorisé" + + + + + perm.server_infos + Infos Serveur + + + + + permission.preset.editor + Éditeur + + + + + permission.preset.editor.desc + Autoriser la modification de pièces et de structures de données + + + + + permission.preset.admin + Admin + + + + + permission.preset.admin.desc + Autoriser les actions administrateur + + + + + permission.preset.button + Appliquer le preset + + + + + perm.attachments.show_private + Montrer les pièces jointes privées + + + + + perm.attachments.list_attachments + Montrer la liste de toutes les pièces jointes + + + + + user.edit.permission_success + Preset de Permissions correctement appliquées. Vérifiez si les nouvelles permissions vous conviennent + + + + + perm.group.data + Données + + + + + part_list.action.action.group.needs_review + Nécessite un examen + + + + + part_list.action.action.set_needs_review + Appliquer le status "Nécessite un examen" + + + + + part_list.action.action.unset_needs_review + Retirer le status "Nécessite un examen" + + + + + part.edit.ipn + Numéro de Pièce Interne (IPN) + + + + + part.ipn.not_defined + Non défini + + + + + part.table.ipn + IPN + + + currency.edit.update_rate Taux de rafraîchissement - + currency.edit.exchange_rate_update.unsupported_currency Devise non prise en charge - + currency.edit.exchange_rate_update.generic_error Erreur générique - + currency.edit.exchange_rate_updated.success Succès - + + + project.bom.quantity + Quantité BOM + + + + + project.bom.mountnames + Nom du montage + + + + + project.bom.name + Nom + + + + + project.bom.comment + Notes + + + + + project.bom.part + Nom du composant + + + + + project.bom.add_entry + Ajouté un élément + + + + + part_list.action.group.projects + Projets + + + + + part_list.action.projects.add_to_project + Ajouter un élément au projet + + + + + project.bom.delete.confirm + Voulez-vous vraiment supprimer cet élément de la BOM ? + + + + + project.add_parts_to_project + Ajouter cet élément à la BOM du projet + + + + + part.info.add_part_to_project + Ajouter cet élément au projet + + + + + project_bom_entry.label + BOM + + + + + project.edit.status + Status du projet + + + + + project.status.draft + Brouillon + + + + + project.status.planning + Planning + + + + + project.status.in_production + En production + + + + + project.status.finished + Terminé + + + + + project.status.archived + Archivé + + + + + part.new_build_part.error.build_part_already_exists + Le projet est déjà associé à un composant de sortie + + + + + project.edit.associated_build_part + Composant de sortie associé + + + + + project.edit.associated_build_part.add + Ajouter un composant de sortie + + + + + project.edit.associated_build.hint + Voici le composant de sortie associé à ce projet, qui est stocké quelque part + + + + + part.info.projectBuildPart.hint + Ce composant est fabriqué par ce projet + + + + + part.is_build_part + Fait partie du projet + + + + + project.info.title + Informations Projet + + + + + project.info.bom_entries_count + Entrées de la BOM + + + + + project.info.sub_projects_count + Sous Projets + + + + + project.info.bom_add_parts + Ajouter à la BOM + + + + + project.info.info.label + Info + + + + + project.info.sub_projects.label + Sous Projets + + + + + project.bom.price + Prix + + + + + part.info.withdraw_modal.title.withdraw + Enlever un élément du lot + + + + + part.info.withdraw_modal.title.add + Ajouter un élément au lot + + + + + part.info.withdraw_modal.title.move + Bouger un élément vers un autre lot + + + + + part.info.withdraw_modal.amount + Quantité + + + + + part.info.withdraw_modal.move_to + Bouger vers + + + + + part.info.withdraw_modal.comment + Commentaire + + + + + part.info.withdraw_modal.comment.hint + Vous pouvez laisser un commentaire expliquant l'opération(ex. Pourquoi vous avez besoin de ce composant). Cette info sera sauvée dans les logs. + + + + + modal.close + Fermer + + + + + modal.submit + Soumettre + + + + + part.withdraw.success + Composant ajouté/bougé/supprimé avec succès. + + + + + perm.parts_stock + Stock de composants + + + + + perm.parts_stock.withdraw + Enlever un composant du stock + + + + + perm.parts_stock.add + Ajouter un composant du stock + + + + + perm.parts_stock.move + Bouger un composant du stock + + + + + user.permissions_schema_updated + Les permissions de votre utilisateur mis à jour à la dernière version. + + + + + log.type.part_stock_changed + Inventaire du composant changé + + + + + log.part_stock_changed.withdraw + Stock supprimé + + + + + log.part_stock_changed.add + Stock ajouté + + + + + log.part_stock_changed.move + Stock bougé + + + + + log.part_stock_changed.comment + Commentaire + + + + + log.part_stock_changed.change + Changer + + + + + log.part_stock_changed.move_target + Déplacer la cible + + + + + tools.builtin_footprints_viewer.title + Image de l'empreinte + + + + + tools.builtin_footprints_viewer.hint + Cette galerie liste toutes les images d'empreintes intégrées disponibles. Si vous voulez les utiliser dans une pièce-jointe, tapez dans le nom (ou un mot-clé) dans le champ du chemin de la pièce-jointe et sélectionnez l'image dans la sélection déroulante. + + + + + tools.ic_logos.title + Logos CI + + + + + part_list.action.group.labels + Étiquettes + + + + + part_list.action.projects.generate_label + Générer des étiquettes (pour les composants) + + + + + part_list.action.projects.generate_label_lot + Générer des étiquettes (pour un lot de composants) + + + + + part_list.action.generate_label.empty + Étiquette vide + + + + + project.info.builds.label + Fabriquer + + + + + project.builds.build_not_possible + Fabrication impossible : Pièces non stockées + + + + + project.builds.following_bom_entries_miss_instock + Les composants suivant n'ont pas assez de stock pour fabriquer au moins une fois ce projet : + + + + + project.builds.stocked + stockées + + + + + project.builds.needed + Besoins + + + + + project.builds.build_possible + Fabrication possible + + + + + project.builds.number_of_builds_possible + Vous avez assez de stock pour fabriquer <b>%max_builds%</b> éléments de ce projet. + + + + + project.builds.check_project_status + Le status du projet en cours est <b>"%project_status%"</b>. Vous devriez vérifier que vous voulez vraiment concevoir le projet avec ce status ! + + + + + project.builds.following_bom_entries_miss_instock_n + Vous n'avez pas assez de composants en stock pour fabriquer ce projet %number_of_builds% fois. Il manque cet élément en stock : + + + + + project.build.flash.invalid_input + Impossible de fabriquer ce projet. Vérifier les entrées ! + + + + + project.build.required_qty + Besoin d'une quantité + + + + + project.build.btn_build + Fabriquer + + + + + project.build.help + Choisir de quels inventaires les composants doivent être soustraits(et leur quantité). Cocher la case pour chaque ligne, ou cliquer sur la case en haut pour toutes les cocher en même temps. + + + + + project.build.buildsPartLot.new_lot + Créer un nouveau lot + + + + + project.build.add_builds_to_builds_part + Ajouter des conceptions aux composants du projet + + + + + project.build.builds_part_lot + Stock à utiliser + + + + + project.builds.number_of_builds + Nombre à fabriquer + + + + + project.builds.no_stocked_builds + Nombre de conceptions en stock + + + + + user.change_avatar.label + Changer la photo de profil + + + + + user_settings.change_avatar.label + Changer la photo de profil + + + + + user_settings.remove_avatar.label + Supprimer la photo de profil + + + + + part.edit.name.category_hint + Astuce de la catégorie + + + + + category.edit.partname_regex.placeholder + ex. "Condensateur \d+ nF/i" + + + + + category.edit.part_ipn_prefix.placeholder + e.g "PIC16F" + + + + + category.edit.partname_regex.help + Une expression régulière compatible PCRE, qu'un nom de composant doit correspondre. + + + + + category.edit.part_ipn_prefix.help + Préfixe suggéré lors du saisi de l'IPN de la pièce + + + + + entity.select.add_hint + Utilisez -> pour créer une structure imbriquée, ex "Nœud 1->Nœud 1.1" + + + + + entity.select.group.new_not_added_to_DB + Nouveau (pas encore ajouté à la BDD) + + + + + part.edit.save_and_new + Sauver et créer un nouveau composant vide + + + + + homepage.first_steps.title + Premières étapes + + + + + homepage.first_steps.introduction + Votre base de donnée est toujours vide. Vous voulez peut-être lire la <a href="%url%">documentation</a> ou commencer à créer les structures de données suivantes : + + + + + homepage.first_steps.create_part + Ou vous pouvez directement <a href="%url%">créer un nouveau composant</a>. + + + + + homepage.first_steps.hide_hint + Cette boite se cachera dès que vous aurez créé votre premier composant. + + + homepage.forum.text - Si vous avez des questions à propos de Part-DB , rendez vous sur <a href="%href%" class="link-external" target="_blank">Github</a> + Si vous avez des questions à propos de Part-DB, rendez-vous sur <a href="%href%" class="link-external" target="_blank">Github</a> - + - part_custom_state.new - Nouveau statut personnalisé du composant + log.element_edited.changed_fields.category + Catégorie - + - part_custom_state.edit - Modifier le statut personnalisé du composant + log.element_edited.changed_fields.footprint + Empreinte - + + + log.element_edited.changed_fields.manufacturer + Fabricant + + + + + log.element_edited.changed_fields.value_typical + valeur typique + + + + + log.element_edited.changed_fields.pw_reset_expires + Réinitialisation du mot de passe + + + + + log.element_edited.changed_fields.comment + Notes + + + + + log.element_edited.changed_fields.supplierpartnr + Numéro de composant fournisseur + + + + + log.element_edited.changed_fields.supplier_product_url + Lien vers l'offre + + + + + log.element_edited.changed_fields.price + Prix + + + + + log.element_edited.changed_fields.min_discount_quantity + Quantité minimale + + + + + log.element_edited.changed_fields.original_filename + Nom du fichier original + + + + + log.element_edited.changed_fields.path + Lien du fichier + + + + + log.element_edited.changed_fields.description + Description + + + + + log.element_edited.changed_fields.manufacturing_status + État de production + + + + + log.element_edited.changed_fields.options.barcode_type + Type de code barre + + + + + log.element_edited.changed_fields.status + État + + + + + log.element_edited.changed_fields.quantity + BOM Qty. + + + + + log.element_edited.changed_fields.mountnames + Méthode de montage + + + + + log.element_edited.changed_fields.name + Nom + + + + + log.element_edited.changed_fields.part + Composant + + + + + log.element_edited.changed_fields.price_currency + Devise du prix + + + + + log.element_edited.changed_fields.partname_hint + Astuce de nom de composant + + + + + log.element_edited.changed_fields.partname_regex + Filtre de nom + + + + + log.element_edited.changed_fields.disable_footprints + Désactiver les empreintes + + + + + log.element_edited.changed_fields.disable_manufacturers + Désactiver les fabricants + + + + + log.element_edited.changed_fields.disable_autodatasheets + Désactiver les liens automatiques de datasheet + + + + + log.element_edited.changed_fields.disable_properties + Propriétés désactivées + + + + + log.element_edited.changed_fields.default_description + Description par défaut + + + + + log.element_edited.changed_fields.default_comment + Notes par défaut + + + + + log.element_edited.changed_fields.filetype_filter + Extensions de fichier autorisé + + + + + log.element_edited.changed_fields.not_selectable + Non sélectionné + + + + + log.element_edited.changed_fields.parent + Élément parent + + + + + log.element_edited.changed_fields.shipping_costs + Frais d'expédition + + + + + log.element_edited.changed_fields.default_currency + Devise par défaut + + + + + log.element_edited.changed_fields.address + Adresse + + + + + log.element_edited.changed_fields.phone_number + Numéro de téléphone + + + + + log.element_edited.changed_fields.fax_number + Numéro de Fax + + + + + log.element_edited.changed_fields.email_address + Email + + + + + log.element_edited.changed_fields.website + Site Web + + + + + log.element_edited.changed_fields.auto_product_url + Lien du produit + + + + + log.element_edited.changed_fields.is_full + Espace de stockage plein + + + + + log.element_edited.changed_fields.limit_to_existing_parts + Limiter aux composants existants + + + + + log.element_edited.changed_fields.only_single_part + Seulement à l'unité + + + + + log.element_edited.changed_fields.storage_type + Type de stockage + + + + + log.element_edited.changed_fields.footprint_3d + Modèle 3D + + + + + log.element_edited.changed_fields.master_picture_attachment + Prévisualisation + + + + + log.element_edited.changed_fields.exchange_rate + Taux de change + + + + + log.element_edited.changed_fields.iso_code + Taux de change + + + + + log.element_edited.changed_fields.unit + Symbole unitaire + + + + + log.element_edited.changed_fields.is_integer + Est un entier + + + + + log.element_edited.changed_fields.use_si_prefix + Utiliser les préfixes SI + + + + + log.element_edited.changed_fields.options.width + Largeur + + + + + log.element_edited.changed_fields.options.height + Hauteur + + + + + log.element_edited.changed_fields.options.supported_element + Type d'élément + + + + + log.element_edited.changed_fields.options.additional_css + Style (CSS) additionnel + + + + + log.element_edited.changed_fields.options.lines + Contenu + + + + + log.element_edited.changed_fields.permissions.data + Permissions + + + + + log.element_edited.changed_fields.disabled + Désactivé + + + + + log.element_edited.changed_fields.theme + Thème + + + + + log.element_edited.changed_fields.timezone + Fuseau horaire + + + + + log.element_edited.changed_fields.language + Langue + + + + + log.element_edited.changed_fields.email + Email + + + + + log.element_edited.changed_fields.department + Département + + + + + log.element_edited.changed_fields.last_name + Nom de famille + + + + + log.element_edited.changed_fields.first_name + Prénom + + + + + log.element_edited.changed_fields.group + Groupe + + + + + log.element_edited.changed_fields.currency + Devise préférée + + + + + log.element_edited.changed_fields.enforce2FA + Forcer la double authentification + + + + + log.element_edited.changed_fields.symbol + Symbole + + + + + log.element_edited.changed_fields.value_min + Valeur min. + + + + + log.element_edited.changed_fields.value_max + Valeur max. + + + + + log.element_edited.changed_fields.value_text + Valeur de texte + + + + + log.element_edited.changed_fields.show_in_table + Montrer dans le tableau + + + + + log.element_edited.changed_fields.attachment_type + Montrer dans le tableau + + + + + log.element_edited.changed_fields.needs_review + Besoin d'être vérifié + + + + + log.element_edited.changed_fields.tags + Tags + + + + + log.element_edited.changed_fields.mass + Poids + + + + + log.element_edited.changed_fields.ipn + Numéro de série + + + + + log.element_edited.changed_fields.favorite + Favoris + + + + + log.element_edited.changed_fields.minamount + Stock minimum + + + + + log.element_edited.changed_fields.manufacturer_product_url + Lien vers le produit + + + + + log.element_edited.changed_fields.manufacturer_product_number + MPN + + + + + log.element_edited.changed_fields.partUnit + Unité de mesure + + + log.element_edited.changed_fields.partCustomState État personnalisé de la pièce - + - category.edit.part_ipn_prefix.placeholder - par ex. "B12A" + log.element_edited.changed_fields.expiration_date + Date d'expiration - + - category.edit.part_ipn_prefix.help - Un préfixe suggéré lors de la saisie de l'IPN d'une pièce. + log.element_edited.changed_fields.amount + Quantité - - - attachment_type.labelp - Types de fichiers joints + + + log.element_edited.changed_fields.storage_location + Lieu de stockage - - - currency.labelp - Devises + + + attachment.max_file_size + Taille maximum du fichier - - - group.labelp - Groupes + + + user.saml_user + Utilisateur SSO / SAML - - - label_profile.labelp - Profils d'étiquettes + + + user.saml_user.pw_change_hint + Votre utilisateur utilise le single sign-on (SSO). Vous ne pouvez changer le mot de passe ou paramètres 2FA ici. Configurez-les chez votre fournisseur de SSO a la place. - - - measurement_unit.labelp - Unités de mesure + + + login.sso_saml_login + Single Sign-On Login (SSO) - - - orderdetail.labelp - Informations de commandes + + + login.local_login_hint + Le formulaire suivant est seulement pour se connecter avec un utilisateur local. Si vous voulez vous connecter via SSO pressez le bouton ci-dessus. - - - parameter.labelp - Caractéristiques + + + part_list.action.action.export + Exporter les composants - - - part.labelp - Composants + + + part_list.action.export_json + Exporter en JSON - - - part_custom_state.labelp - États personnalisés de la pièce + + + part_list.action.export_csv + Exporter en CSV - - - part_lot.labelp - Lots de composants + + + part_list.action.export_yaml + Exporter en YAML - - - pricedetail.labelp - Informations sur les prix + + + part_list.action.export_xml + Export en XML + + + + + part_list.action.export_xlsx + Export vers Excel + + + + + parts.import.title + Importer des composants + + + + + parts.import.errors.title + Violations d'import + + + + + parts.import.flash.error + Erreurs pendant l'import. C'est probablement causé par des données invalides. + + + + + parts.import.format.auto + Automatique (basé sur l'extension du fichier) + + + + + parts.import.flash.error.unknown_format + Impossible de déterminer le type du fichier fourni ! + + + + + parts.import.flash.error.invalid_file + Fichier invalide. Veuillez vérifier que vous avez sélectionné le bon type ! + + + + + parts.import.part_category.label + Surcharge de la catégorie + + + + + parts.import.part_category.help + Si vous sélectionnez une valeur ici, tous les composants importés seront assignés à cette catégorie. Quoi que vous aillez dans les données. + + + + + import.create_unknown_datastructures + Créer une structure de données inconnue + + + + + import.create_unknown_datastructures.help + Si séléctionné, les structures de données (tel les catégories, empreintes, etc.) qui n'existent pas encore dans la base de donnée, seront automatiquement crées. Si ce n'est pas selectionné, seulement les structures de données existantes seront utilisés, et si aucune concordance n'est trouvé, le composant n'aura rien d'assigné + + + + + import.path_delimiter + Délimiteur de chemin + + + + + import.path_delimiter.help + Le délimiteur est utilisé pour marquer différents niveaux dans les chemins de structure de données tels que les catégories, empreintes, etc. + + + + + parts.import.help_documentation + Voir là <a href="%link%">documentation</a> pour plus d'information sur le format du fichier. + + + + + parts.import.help + Vous pouvez importer des composants depuis des fichiers existants avec cet outil. Les composants seront directement écrits en base de donnée, veuillez vérifier le contenu de votre fichier est correct avant de l'envoyer ici. + + + + + parts.import.flash.success + Import de composants avec succès ! + + + + + parts.import.errors.imported_entities + Composants importés + + + + + perm.import + Importer des données + + + + + parts.import.part_needs_review.label + Marquer tous les composants importés comme "Besoin d'être vérifié" + + + + + parts.import.part_needs_review.help + Si cette option est sélectionnée, alors tous les composants seront importés comme "Besoin d'être vérifié", peu importe ce qui est dans les paramètres. + + + + + project.bom_import.flash.success + %count% entrées de la BOM importées avec succès. + + + + + project.bom_import.type + Type + + + + + project.bom_import.type.kicad_pcbnew + KiCAD Pcbnew BOM (fichier CSV) + + + + + project.bom_import.clear_existing_bom + Supprimée les entrées de la BOM avant l'import + + + + + project.bom_import.clear_existing_bom.help + En sélectionnant cette option, toutes les entrées précédentes vont être supprimées du projet et récrite par l'importation de la BOM ! + + + + + project.bom_import.flash.invalid_file + Importation impossible. Vérifier que vous avez sélectionné le bon type. Erreur : %message% + + + + + project.bom_import.flash.invalid_entries + Problème lors de la validation ! Vérifier les données ! + + + + + project.import_bom + Importé une BOM pour le projet + + + + + project.edit.bom.import_bom + Importé une BOM + + + + + measurement_unit.new + Nouvelle unité de mesure + + + + + measurement_unit.edit + Modifier l'unité de mesure + + + + + part_custom_state.new + Nouveau [etat_personnalise_piece] + + + + + part_custom_state.edit + Éditer [etat_personnalise_piece] + + + + + user.aboutMe.label + À propos de moi + + + + + storelocation.owner.label + Propriétaire + + + + + storelocation.part_owner_must_match.label + Le propriétaire du lot de composants doit correspondre au propriétaire de la localisation de stockage + + + + + part_lot.owner + Propriétaire + + + + + part_lot.owner.help + Seul le propriétaire peut changer les stocks de ce lot. + + + + + log.element_edited.changed_fields.owner + Propriétaire + + + + + log.element_edited.changed_fields.instock_unknown + Quantité inconnue + + + + + log.element_edited.changed_fields.needs_refill + Recharge nécessaire + + + + + part.withdraw.access_denied + Impossible d’exécuter l'action. Vérifier les permissions et le propriétaire du lot. + + + + + part.info.amount.less_than_desired + Moins que voulu + + + + + log.cli_user + Utilisateur CLI + + + + + log.element_edited.changed_fields.part_owner_must_match + Le propriétaire du composant doit être le même que le propriétaire du stock + + + + + part.filter.lessThanDesired + En stock il y en a moins que voulu(qty totale < qty min.) + + + + + part.filter.lotOwner + Propriétaire du lot + + + + + user.show_email_on_profile.label + Montrer son email sur la page public du profil + + + + + log.details.title + Logs + + + + + log.user_login.login_from_ip + Login par adresse IP + + + + + log.user_login.ip_anonymize_hint + Si les derniers chiffres de l'adresse IP sont manquants, alors le mode RGPD est activé, dans lequel l'adresse IP est anonyme. + + + + + log.user_not_allowed.unauthorized_access_attempt_to + Essai d'accès a la page non autorisé + + + + + log.user_not_allowed.hint + La requête a été bloquée. Aucune action requise. + + + + + log.no_comment + Pas de commentaire + + + + + log.element_changed.field + Champ + + + + + log.element_changed.data_before + Donnés avant changements + + + + + error_table.error + Une erreur s'est produite. + + + + + part.table.invalid_regex + Expression régulière invalide (regex) + + + + + log.element_changed.data_after + Données après changement + + + + + log.element_changed.diff + Différence + + + + + log.undo.undo.short + Annuler + + + + + log.undo.revert.short + Rétablir à ce timestamp + + + + + log.view_version + Voir la version + + + + + log.undo.undelete.short + Rétablir + + + + + log.element_edited.changed_fields.id + ID + + + + + log.element_edited.changed_fields.id_owner + Propriétaire + + + + + log.element_edited.changed_fields.parent_id + Parent + + + + + log.details.delete_entry + Supprimer entrée de log + + + + + log.delete.message.title + Voulez-vous vraiment supprimer cette entrée de log ? + + + + + log.delete.message + Si c'est une entrée d'histoire d'élément, ça casse l'historique des éléments ! Ça peut amener à des résultats inattendus en utilisant la fonction de voyage dans le temps. + + + + + log.collection_deleted.on_collection + dans la Collection + + + + + log.element_edited.changed_fields.attachments + Pièces jointes + + + + + tfa_u2f.add_key.registration_error + Une erreur est survenue lors de l'enregistrement de la clé de sécurité. Réessayez ou utilisez une autre clé de sécurité ! + + + + + log.target_type.none + Aucun + + + + + ui.darkmode.light + Léger + + + + + ui.darkmode.dark + Foncé + + + + + ui.darkmode.auto + Automatique (décision basée sur les paramètres système) + + + + + label_generator.no_lines_given + Aucun contenu de texte fournit ! Les étiquettes resteront vides. + + + + + perm.users.impersonate + Imiter d'autres utilisateurs + + + + + user.impersonated_by.label + Imité par + + + + + user.stop_impersonation + Arrêter d'imiter un autre utilisateur + + + + + user.impersonate.btn + Imiter + + + + + user.impersonate.confirm.title + Voulez-vous vraiment imiter cet utilisateur ? + + + + + user.impersonate.confirm.message + Ça sera enregistré. Vous devez faire ça seulement avec une bonne raison. + + + + + log.type.security.user_impersonated + Utilisateur imité + + + + + info_providers.providers_list.title + Fournisseur d'informations + + + + + info_providers.providers_list.active + Actif + + + + + info_providers.providers_list.disabled + Désactivé + + + + + info_providers.capabilities.basic + Basique + + + + + info_providers.capabilities.footprint + Empreinte + + + + + info_providers.capabilities.picture + Photo + + + + + info_providers.capabilities.datasheet + Datasheets + + + + + info_providers.capabilities.price + Prix + + + + + part.info_provider_reference.badge + Le fournisseur d'informations utilisé pour créer ce composant. + + + + + part.info_provider_reference + Créer par un fournisseur d'informations + + + + + oauth_client.connect.btn + Connexion OAuth + + + + + info_providers.table.provider.label + Fournisseur + + + + + info_providers.search.keyword + Mot-clé + + + + + info_providers.search.submit + Chercher + + + + + info_providers.search.providers.help + Sélectionnez le fournisseur dans lequel chercher. + + + + + info_providers.search.providers + Fournisseurs + + + + + info_providers.search.info_providers_list + Voir tous les fournisseurs d'information disponibles + + + + + info_providers.search.title + Créer des composants depuis un fournisseur d'informations + + + + + oauth_client.flash.connection_successful + Connexion avec succès de l'application via OAuth ! + + + + + perm.part.info_providers + Fournisseurs d'informations + + + + + perm.part.info_providers.create_parts + Créer des composants depuis les fournisseurs d'informations + + + + + entity.edit.alternative_names.label + Noms alternatifs + + + + + entity.edit.alternative_names.help + Les noms alternatifs fournis ici sont utilisés pour trouver cet élément basé sur les résultats des fournisseurs d'informations. + + + + + info_providers.form.help_prefix + Fournisseur + + + + + update_manager.new_version_available.title + Nouvelle version disponible + + + + + update_manager.new_version_available.text + Une nouvelle version de Part-DB est disponible. Découvrez-la ici + + + + + update_manager.new_version_available.only_administrators_can_see + Seul les administrateurs peuvent voir ce message. + + + + + perm.system.show_available_updates + Voir les mises-à-jour de Part-DB disponibles + + + + + user.settings.api_tokens + API tokens + + + + + user.settings.api_tokens.description + En utilisant un token d'API, d'autres applications peuvent accéder à Part-DB avec vos droits utilisateur, pour faire diverses actions en utilisant l'API REST de Part-DB. Si vous supprimez un token d'API ici, l'application qui utilise ce token n'aura plus accès à Part-DB pour vous. + + + + + api_tokens.name + Nom + + + + + api_tokens.access_level + Niveau d'accès + + + + + api_tokens.expiration_date + Date d'expiration + + + + + api_tokens.last_time_used + Dernière fois utilisé + + + + + datetime.never + Jamais + + + + + api_token.valid + Valide + + + + + api_token.expired + Expiré + + + + + user.settings.show_api_documentation + Voir la documentation de l'API + + + + + api_token.create_new + Créer un nouveau token d'API + + + + + api_token.level.read_only + Lecture seule + + + + + api_token.level.edit + Éditer + + + + + api_token.level.admin + Admin + + + + + api_token.level.full + Complet + + + + + api_tokens.access_level.help + Vous pouvez restreindre ce que le token d'API peut accéder. L'accès est toujours limité par les permissions de votre utilisateur. + + + + + api_tokens.expiration_date.help + Après cette date, le token ne sera plus utilisable. Laissez vide si le token ne doit jamais expirer. + + + + + api_tokens.your_token_is + Votre token d'API est + + + + + api_tokens.please_save_it + Veuillez le sauver. Vous ne le reverrez plus jamais ! + + + + + api_tokens.create_new.back_to_user_settings + Retour aux paramètres utilisateur + + + + + project.build.dont_check_quantity + Ne pas vérifier les quantités + + + + + project.build.dont_check_quantity.help + Si cette option est sélectionnée, les quantités utilisées sont utilisé comme fournies, même si plus ou moins de composants sont actuellement requis pour concevoir ce projet. + + + + + part_list.action.invert_selection + Inverser la sélection + + + + + perm.api + API + + + + + perm.api.access_api + Accès API + + + + + perm.api.manage_tokens + Gérer les tokens d'API + + + + + user.settings.api_tokens.delete.title + Voulez-vous vraiment supprimer ce token d'API ? + + + + + user.settings.api_tokens.delete + Supprimer + + + + + user.settings.api_tokens.delete.message + L'application qui utilise ce token d'API n'aura plus accès à Part-DB. Cette action ne peut-être annulée ! + + + + + api_tokens.deleted + Token d'API supprimé avec succès ! + + + + + user.settings.api_tokens.no_api_tokens_yet + Aucun token d'API configurés pour le moment. + + + + + api_token.ends_with + Se termine avec + + + + + entity.select.creating_new_entities_not_allowed + Vous n'êtes pas autorisé à créer de nouvelles entités de ce type ! Veuillez en choisir une existante. + + + + + scan_dialog.mode + Type de code-barre + + + + + scan_dialog.mode.auto + Détection automatique + + + + + scan_dialog.mode.ipn + Code-barre IPN + + + + + scan_dialog.mode.internal + Code-barre Part-DB + + + + + part_association.label + Association de composant + + + + + part.edit.tab.associations + Composants associés + + + + + part_association.edit.other_part + Composant associé + + + + + part_association.edit.type + Type de relation + + + + + part_association.edit.comment + Notes + + + + + part_association.edit.type.help + Vous pouvez sélectionner ici comment le composant choisi est en relation avec ce composant. + + + + + part_association.table.from_this_part + Associations de ce composant vers les autres + + + + + part_association.table.from + Depuis + + + + + part_association.table.type + Relation + + + + + part_association.table.to + Vers + + + + + part_association.type.compatible + Est compatible avec + + + + + part_association.table.to_this_part + Associations de ce composant depuis les autres + + + + + part_association.type.other + Autre (valeur personnalisée) + + + + + part_association.type.supersedes + Remplace + + + + + part_association.edit.other_type + Type personnalisé + + + + + part_association.edit.delete.confirm + Voulez-vous vraiment supprimer cette association ? Ce ne peut-être annulé. + + + + + part_lot.edit.advanced + Dérouler les options avancées + + + + + part_lot.edit.vendor_barcode + Code-barre fournisseur + + + + + part_lot.edit.vendor_barcode.help + Si ce lot a déjà un code-barre (ex. placé par le fournisseur), vous pouvez entrer son contenu ici pour le scanner facilement. + + + + + scan_dialog.mode.vendor + Code-barre fournisseur (configuré dans le lot de composant) + + + + + project.bom.instockAmount + Quantité stockée + + + + + collection_type.new_element.tooltip + Cet élément a été créé récemment et n'a pas encore persisté dans la base de donnée. + + + + + part.merge.title + Fusionner composant + + + + + part.merge.title.into + dans + + + + + part.merge.confirm.title + Voulez-vous vraiment fusionner <b>%other%</b> dans<b>%target%</b> ? + + + + + part.merge.confirm.message + <b>%other%</b> sera supprimé, et le composant sera sauvé avec les informations affichées. + + + + + part.info.merge_modal.title + Fusionner composants + + + + + part.info.merge_modal.other_part + Autre composant + + + + + part.info.merge_modal.other_into_this + Fusionner un autre composant dans celui-là (supprimer l'autre composant, garder celui-là) + + + + + part.info.merge_modal.this_into_other + Fusionner ce composant dans l'autre (supprimer ce composant, garder l'autre) + + + + + part.info.merge_btn + Fusionner composant + + + + + part.update_part_from_info_provider.btn + Mettre-à-jour le composant depuis les fournisseurs d'informations + + + + + info_providers.update_part.title + Mettre-à-jour un composant existant depuis les fournisseurs d'informations + + + + + part.merge.flash.please_review + Donnés pas encore sauvés. Veuillez relire les changements et cliquer sur sauver pour sauvegarder les nouvelles données. + + + + + user.edit.flash.permissions_fixed + Des permissions requises par d'autres permissions étaient manquantes. Ça a été corrigé. Veuillez vérifier que les permissions sont comme vous souhaitez. + + + + + permission.legend.dependency_note + Veuillez noter que certaines permissions d'opérations dépendent entre-elles. Si vous rencontrez une alerte de permission manquante qui a été corrigée et qu'une permission a été faite pour autoriser encore, vous avez a mettre les opérations dépendantes a interdit aussi. Les dépendances peuvent normalement trouver les droits d'une opération. + + + + + log.part_stock_changed.timestamp + Horodatage + + + + + part.info.withdraw_modal.timestamp + Horodatage de l'action + + + + + part.info.withdraw_modal.timestamp.hint + Ce champ vous permet de spécifier la vraie date, quand l'opération de stock à été vraiment effectué, et non pas seulement quand ça a été enregistré. Cette valeur est sauvée dans les champs supplémentaires de l'entrée de log. + + + + + part.info.withdraw_modal.delete_lot_if_empty + Supprimer ce lot s'il devient vide + + + + + info_providers.search.error.client_exception + Une erreur est survenue lors de la communication avec le fournisseur d'informations. Vérifiez la configuration de ce fournisseur et rafraichissez les tokens OAuth si possible. + + + + + eda_info.reference_prefix.placeholder + ex. R + + + + + eda_info.reference_prefix + Préfixe de référence + + + + + eda_info.kicad_section.title + Paramètres spécifiques à KiCAD + + + + + eda_info.value + Valeur + + + + + eda_info.value.placeholder + ex. 100n + + + + + eda_info.exclude_from_bom + Exclure le composant de la BOM + + + + + eda_info.exclude_from_board + Exclure le composant du PCB/Circuit + + + + + eda_info.exclude_from_sim + Exclure le composant de la simulation + + + + + eda_info.kicad_symbol + Symbole schématique KiCAD + + + + + eda_info.kicad_symbol.placeholder + ex. Transistor_BJT:BC547 + + + + + eda_info.kicad_footprint + Empreinte KiCAD + + + + + eda_info.kicad_footprint.placeholder + ex. Package_TO_SOT_THT:TO-92 + + + + + part.edit.tab.eda + Informations EDA + + + + + api.api_endpoints.title + Terminaisons d'API + + + + + api.api_endpoints.partdb + Part-DB API + + + + + api.api_endpoints.kicad_root_url + URL racine de l'API KiCAD + + + + + eda_info.visibility + Forcer la visibilité + + + + + eda_info.visibility.help + Par défaut la visibilité du logiciel EDA est automatiquement déterminé. Avec cette coche vous pouvez forcer le composant à être visible ou invisible. + + + + + part.withdraw.zero_amount + Vous avez essayé de retirer/ajouter une quantité de zéro ! Aucune action n'a été effectuée. + + + + + login.flash.access_denied_please_login + Accès interdit ! Veuillez vous connecter pour continuer. + + + + + attachment.upload_multiple_files + Envoyer des fichiers + + + + + entity.mass_creation_flash + %COUNT% entités crées avec succès. + + + + + info_providers.search.number_of_results + %number% résultats + + + + + info_providers.search.no_results + Aucuns résultats trouvés + + + + + tfa.check.code.confirmation + Code généré + + + + + info_providers.search.show_existing_part + Voir le composant existant + + + + + info_providers.search.edit_existing_part + Éditer le composant existant + + + + + info_providers.search.existing_part_found.short + Composant déjà existant + + + + + info_providers.search.existing_part_found + Ce composant (ou un très similaire) a déjà été trouvé dans la base de donnée. Veuillez vérifier si c'est le même et si vous voulez créer le même ! + + + + + info_providers.search.update_existing_part + Mettre à jour le composant existant depuis un fournisseur d'informations + + + + + part.create_from_info_provider.no_category_yet + La catégorie ne peut pas être déterminée automatiquement par le fournisseur d'informations. Vérifiez les données et sélectionnez la catégorie manuellement. + + + + + part_lot.edit.user_barcode + Code-barre utilisateur + + + + + scan_dialog.mode.user + Code-barre défini par l'utilisateur (configuré comme lot de composants) + + + + + scan_dialog.mode.eigp + Code-barre EIGP 114 (ex. les code datamatrix des commandes DigiKey ou Mouser) + + + + + scan_dialog.mode.lcsc + LCSC.com code-barre + + + + + scan_dialog.info_mode + Mode information (décode le code-barre et affiche son contenu mais ne redirige pas vers le composant) + + + + + label_scanner.decoded_info.title + Information décodée + + + + + label_scanner.target_found + Objet trouvé dans la base de données + + + + + label_scanner.scan_result.title + Résultat du scan + + + + + label_scanner.no_locations + La pièce n'est pas stockée dans un emplacement + + + + + label_generator.edit_profiles + Éditer les profiles + + + + + label_generator.profile_name_empty + Le nom de profil ne doit pas être vide ! + + + + + label_generator.save_profile_name + Nom de profil + + + + + label_generator.save_profile + Sauver comme nouveau profil + + + + + label_generator.profile_saved + Profil sauvé ! + + + + + settings.ips.element14 + Element 14 / Farnell + + + + + settings.ips.element14.apiKey + Clé d'API + + + + + settings.ips.element14.apiKey.help + Vous pouvez vous enregistrer pour une clé d'API sur <a href="https://partner.element14.com/">https://partner.element14.com/</a>. + + + + + settings.ips.element14.storeId + Store Domain + + + + + settings.ips.element14.storeId.help + Le "store domain" pour retrouver les données. Cela décidera du language et monnaie des résultats. Voir <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">here</a> pour une liste des domains. + + + + + settings.ips.tme + TME + + + + + settings.ips.tme.token + API Token + + + + + settings.ips.tme.token.help + Vous pouvez obtenir un token d'API et secret ici <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a>. + + + + + settings.ips.tme.secret + API Secret + + + + + settings.ips.tme.currency + Monnaie + + + + + settings.ips.tme.language + Langage + + + + + settings.ips.tme.country + Pays + + + + + settings.ips.tme.grossPrices + Avoir les prix totaux (avec taxes) + + + + + settings.ips.mouser + Mouser + + + + + settings.ips.mouser.apiKey + Clé d'API + + + + + settings.ips.mouser.apiKey.help + Vous pouvez vous enregistrer pour obtenir une clé d'API ici <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a>. + + + + + settings.ips.mouser.searchLimit + Limite de recherche + + + + + settings.ips.mouser.searchLimit.help + Le nombre maximum de résultats pour une seule recherche. Ne peut être supérieur à 50. + + + + + settings.ips.mouser.searchOptions + Filtres de recherche + + + + + settings.ips.mouser.searchOptions.help + Vous autorise à seulement voir les composants avec une certaine disponibilité et/ou conforme. + + + + + settings.ips.mouser.searchOptions.none + Aucuns filtres + + + + + settings.ips.mouser.searchOptions.rohs + Seulement les composants conformes RoHS + + + + + settings.ips.mouser.searchOptions.inStock + Seulement les composants en stock + + + + + settings.ips.mouser.searchOptions.rohsAndInStock + Seulement les composants en stock et conforme RoHS + + + + + settings.ips.lcsc + LCSC + + + + + settings.ips.lcsc.help + Attention : LCSC ne fournit pas d'API officielle. Ce fournisseur utilise l'API du webshop. LCSC n'à pas prévu l'usage de cette API et peut casser à tout moment, utilisez à vos propres risques. + + + + + settings.ips.lcsc.enabled + Activer + + + + + settings.ips.lcsc.currency + Monnaie + + + + + settings.system.attachments + Fichiers & Pièces-jointes + + + + + settings.system.attachments.maxFileSize + Taille de fichier maximale + + + + + settings.system.attachments.maxFileSize.help + La taille maximale de fichiers qui peuvent être uploadés. Veuillez noter que c'est aussi limité par la configuration PHP. + + + + + settings.system.attachments.allowDownloads + Autoriser le téléchargement de fichiers externes + + + + + settings.system.attachments.allowDownloads.help + Avec cette option les utilisateurs peuvent télécharger des fichiers externes dans Part-DB en fournissant une URL. <b>Attention : Cela peut être un problème de sécurité, car il peut permettre aux utilisateurs d'accéder a des ressources intranet via Part-DB !</b> + + + + + settings.system.attachments.downloadByDefault + Télécharger les nouvelles URL de pièces-jointes par défaut + + + + + settings.system.customization + Personnalisation + + + + + settings.system.customization.instanceName + Nom d'instance + + + + + settings.system.customization.instanceName.help + Nom de cette installation de Part-DB. La valeur est affichée dans la barre de navigation et titres. + + + + + settings.system.customization.banner + Bannière de page d'accueil + + + + + settings.system.history + Historique de logs + + + + + settings.system.history.saveChangedFields + Sauver les champs modifiés d'un élément dans les entrées de log + + + + + settings.system.history.saveOldData + Sauver l'ancienne donnée dans une entrée de log lorsqu'un élément change + + + + + settings.system.history.saveNewData + Sauver les nouvelles données dans une entrée de log lors de la création/changement d'éléments + + + + + settings.system.history.saveRemovedData + Sauver les données dans une entrée de log lors de la suppression d'un élément + + + + + settings.system.customization.theme + Thème global + + + + + settings.system.history.enforceComments + Forcer les commentaires pour les types d'actions + + + + + settings.system.history.enforceComments.description + Avec cette option vous pouvez spécifier pour quelles actions les utilisateurs seront forcés de donner une raison qui sera loggué dans l'historique. + + + + + settings.system.history.enforceComments.type.part_edit + Modification de composant + + + + + settings.system.history.enforceComments.type.part_create + Création de composant + + + + + settings.system.history.enforceComments.type.part_delete + Suppression de composant + + + + + settings.system.history.enforceComments.type.part_stock_operation + Opération de stock d'un composant + + + + + settings.system.history.enforceComments.type.datastructure_edit + Modification de structure de donnée + + + + + settings.system.history.enforceComments.type.datastructure_create + Création de structure de donnée + + + + + settings.system.history.enforceComments.type.datastructure_delete + Suppression de structure de donnée + + + + + settings.system.privacy.useGravatar + Utiliser les avatars de Gravatar + + + + + settings.system.privacy.useGravatar.description + Si un utilisateur n'a pas d'avatar spécifié, utilise l'avatar depuis Gravatar basé sur l'email de l'utilisateur. Cela fera charger des images au navigateur depuis une source tierce ! + + + + + settings.system.privacy.checkForUpdates + Vérifier les mises-à-jour de Part-DB + + + + + settings.system.privacy.checkForUpdates.description + Part-DB cherche régulièrement si une nouvelle version est disponible sur GitHub. Désactivez ici si vous ne voulez pas cela ou que votre serveur n'a pas accès à internet. + + + + + settings.system.localization.locale + Langage / locale par défaut + + + + + settings.system.localization + Localisation + + + + + settings.system.localization.timezone + Fuseau horaire par défaut + + + + + settings.system.localization.base_currency + Monnaie de base + + + + + settings.system.localization.base_currency_description + La monnaie qui est utilisée pour enregistrer l'information et taux de change . Cette monnaie est assumée quand aucune monnaie n'est mise pour une information de prix. +<b>Veuillez noter que les monnaies ne sont pas converties lors du changement de cette valeur. Changer la monnaie par défaut après que vous aillez déjà ajoutés les informations de prix donnera de mauvais prix !</b> + + + + + settings.system.privacy + Confidentialité + + + + + settings.title + Paramètres serveur + + + + + settings.misc.kicad_eda + Intégration KiCAD + + + + + settings.misc.kicad_eda.category_depth + Profondeur des catégories + + + + + settings.misc.kicad_eda.category_depth.help + Cette valeur déterminera la profondeur de l'arborescence de catégories qui est visible dans KiCAD. 0 veut dire que seul le premier niveau est visible. Mettez une valeur > 0 pour afficher plus de niveaux. Mettez à -1 pour voir tous les composants de Part-DB dans une seule catégorie dans KiCAD. + + + + + settings.misc.kicad_eda.datasheet_link + Liens PDF de la datasheet + + + + + settings.misc.kicad_eda.datasheet_link.help + Lorsque qu'activé, le champ "datasheet" dans KiCad fera le lien vers le fichier lui-même (si trouvé). Lorsque désactivé, le lien renverra plutôt vers la page de Part-DB. Le lien de la page de Part-DB est toujours disponible en tant que champ séparé "Part-DB URL" + + + + + settings.behavior.sidebar + Barre latérale + + + + + settings.behavior.sidebar.items + Éléments de barre latérale + + + + + settings.behavior.sidebar.items.help + Les menus qui apparaitront dans la barre latérale par défaut. L'ordre des items peut-être modifié via glissé & déposé. + + + + + settings.behavior.sidebar.rootNodeEnabled + Utiliser un nœud principal + + + + + settings.behavior.sidebar.rootNodeEnabled.help + Si c'est activé tous les premiers niveaux de catégories, empreintes etc. seront placés sous un seul nœud unique. Si désactivé le premier niveau des catégories sera mis directement dans le menu. + + + + + settings.behavior.sidebar.rootNodeExpanded + Dérouler le nœud principal par défaut + + + + + settings.behavior.table + Tableaux + + + + + settings.behavior.table.default_page_size + Taille de page par défaut + + + + + settings.behavior.table.default_page_size.help + La taille par défaut des tableaux complets. Mettez -1 pour voir tous les items par défaut sans pagination. + + + + + settings.behavior.table.parts_default_columns + Colonnes par défaut des tableaux de composants + + + + + settings.behavior.table.parts_default_columns.help + Les colonnes à afficher par défaut dans les tableaux de composants. L'ordre des items peut être changé par glissé & déposé. + + + + + settings.ips.oemsecrets + OEMSecrets + + + + + settings.ips.oemsecrets.keepZeroPrices + Garder les distributeurs avec aucuns prix + + + + + settings.ips.oemsecrets.keepZeroPrices.help + Si ce n'est pas activé, les distributeurs dont les prix sont à 0 seront exclus comme invalides. + + + + + settings.ips.oemsecrets.parseParams + Extraire les paramètres de la description + + + + + settings.ips.oemsecrets.parseParams.help + Si activé, les fournisseurs essaient de convertir les descriptions non structurées des OEMSecrets en structures de paramètres. Chaque paramètre dans la description doit avoir la forme "...;name1:value;name2:value2" + + + + + settings.ips.oemsecrets.sortMode + Mode de tri des résultats + + + + + settings.ips.oemsecrets.sortMode.N + Aucun + + + + + settings.ips.oemsecrets.sortMode.C + Complet (priorise les items avec informations détaillés) + + + + + settings.ips.oemsecrets.sortMode.M + Complet & Nom du fabricant + + + + + entity.export.flash.error.no_entities + Aucune entité à exporter ! + + + + + attachment.table.internal_file + Fichier interne + + + + + attachment.table.external_link + Lien externe + + + + + attachment.view_external.view_at + Voir à %host% + + + + + attachment.view_external + Voir la version externe + + + + + part.table.actions.error + %count% erreurs survenues en faisant les actions : + + + + + part.table.actions.error_detail + %part_name% (ID: %part_id%): %message% + + + + + part_list.action.action.change_location + Changer emplacement (seulement pour les composants avec un lot seul) + + + + + parts.table.action_handler.error.part_lots_multiple + Ce composant contient plus d'un stock. Changez l'emplacement à la main pour sélectionner quel stock utiliser. + + + + + settings.ips.reichelt + Reichelt + + + + + settings.ips.reichelt.help + Reichelt.com n'offre aucune API officielle donc ce fournisseur d'info scrape le site web pour extraire les infos. Ça peut casser à tout moment, utilisez le à vos propres risques. + + + + + settings.ips.reichelt.include_vat + Inclure la TVA dans les prix + + + + + settings.ips.pollin + Pollin + + + + + settings.ips.pollin.help + Pollin.de n'offre aucune API officielle donc ce fournisseur d'info scrape le site web pour extraire les infos. Ça peut casser à tout moment, utilisez le à vos propres risques. + + + + + settings.behavior.sidebar.rootNodeRedirectsToNewEntity + Les nœuds principaux redirigent vers des pages de nouvelles entités + + + + + settings.ips.digikey + Digikey + + + + + settings.ips.digikey.client_id + Client ID + + + + + settings.ips.digikey.secret + Secret + + + + + settings.ips.octopart + Octopart / Nexar + + + + + settings.ips.octopart.searchLimit + Nombre de résultats + + + + + settings.ips.octopart.searchLimit.help + Le nombre de résultats à obtenir d'Octopart lors de la recherche (veuillez noter que cela compte dans vos limites d'API) + + + + + settings.ips.octopart.onlyAuthorizedSellers + Seulement les vendeurs autorisés + + + + + settings.ips.octopart.onlyAuthorizedSellers.help + Mettez à faux pour inclure les offres non autorisés dans les résultats + + + + + settings.misc.exchange_rate + Taux d'échange monétaire + + + + + settings.misc.exchange_rate.fixer_api_key + Fixer.io API Key + + + + + settings.misc.exchange_rate.fixer_api_key.help + Si vous avez besoin de taux d'échange entre monnaies non-européennes vous pouvez renseigner ici votre clé d'API depuis fixer.io. + + + + + settings.misc.ipn_suggest + Suggestion d'IPN de pièce + + + + + settings.misc.ipn_suggest.regex + Regex + + + + + settings.misc.ipn_suggest.regex_help + Texte d'aide + + + + + settings.misc.ipn_suggest.regex_help_description + Définissez votre propre texte d'aide utilisateur pour le format spécifique Regex + + + + + settings.misc.ipn_suggest.autoAppendSuffix + Ajouter un incrément suffixe à l'IPN, si la valeur est déjà utilisée par une autre pièce. + + + + + settings.misc.ipn_suggest.suggestPartDigits + Incrémenter les chiffres + + + + + settings.misc.ipn_suggest.useDuplicateDescription + Utiliser la description de la pièce pour trouver le prochain IPN disponible + + + + + settings.misc.ipn_suggest.suggestPartDigits.help + Le nombre de chiffres utilisés pour la numérotation incrémentale de la pièce dans le système de suggestion IPN + + + + + settings.behavior.part_info + Page d'info composant + + + + + settings.behavior.part_info.show_part_image_overlay + Voir image d'overlay + + + + + settings.behavior.part_info.show_part_image_overlay.help + Voir l'image d'overlay avec les détails de pièce-jointe au survol dans la galerie d'images. + + + + + settings.behavior.keybindings + Raccourcis clavier + + + + + settings.behavior.keybindings.enable_special_characters + Activer les raccourcis clavier pour caractères spéciaux + + + + + settings.behavior.keybindings.enable_special_characters.help + Activer le raccourci Alt+touche pour insérer un caractère spécial (Lettres Grecques, symboles mathématiques, etc.) dans le champ de saisi de texte. Désactiver si les raccourcis interfèrent avec votre disposition de clavier ou avec vos raccourcis système + + + + + perm.config.change_system_settings + Changer les paramètres système + + + + + tree.tools.system.settings + Paramètre système + + + + + tree.tools.system.update_manager + Gestionnaire de mises à jour + + + + + settings.tooltip.overrideable_by_env + La valeur de ce paramètre peut être écrasé en renseignant la variable d'environnement "%env%". + + + + + settings.flash.saved + Paramètres sauvés avec succès. + + + + + settings.flash.invalid + Paramètres invalides. Veuillez vérifier vos entrés ! + + + + + info_providers.settings.title + Paramètres de fournisseur d'informations + + + + + form.apikey.redacted + Caché pour raisons de sécurité + + + + + project.bom_import.map_fields + Correspondance de champs + + + + + project.bom_import.map_fields.help + Configurez comment les colonnes CSV correspondent aux champs de BOM + + + + + project.bom_import.delimiter + Délimiteur + + + + + project.bom_import.delimiter.comma + Virgule (,) + + + + + project.bom_import.delimiter.semicolon + Point-virgule (;) + + + + + project.bom_import.delimiter.tab + Tabulation + + + + + project.bom_import.field_mapping.title + Correspondance de champs + + + + + project.bom_import.field_mapping.csv_field + Champ CSV + + + + + project.bom_import.field_mapping.maps_to + Correspond à + + + + + project.bom_import.field_mapping.suggestion + Suggestion + + + + + project.bom_import.field_mapping.priority + Priorité + + + + + project.bom_import.field_mapping.priority_help + Priorité (faible nombre = priorité haute) + + + + + project.bom_import.field_mapping.priority_short + P + + + + + project.bom_import.field_mapping.priority_note + Astuce de priorité : les faibles nombres ont une plus haute priorité. La priorité par défaut est 10. Utilisez les priorités 1-9 pour les champs les plus importants, 10+ pour une priorité normale. + + + + + project.bom_import.field_mapping.summary + Résumé des correspondances de champs + + + + + project.bom_import.field_mapping.select_to_see_summary + Sélectionnez la correspondance de champs pour voir le résumé + + + + + project.bom_import.field_mapping.no_suggestion + Aucune suggestion + + + + + project.bom_import.preview + Prévisualisation + + + + + project.bom_import.flash.session_expired + Session d'import expirée. Veuillez uploader votre fichier à nouveau. + + + + + project.bom_import.field_mapping.ignore + Ignorer + + + + + project.bom_import.type.kicad_schematic + KiCAD Schematic BOM (Fichier CSV) + + + + + common.back + Précédent + + + + + project.bom_import.validation.errors.required_field_missing + Ligne %line% : Le champ requis "%field%" est manquant ou vide. Assurez-vous que ce champ est mappé et contiens des données. + + + + + project.bom_import.validation.errors.no_valid_designators + Ligne %line% : Le champ désigné ne contient pas de référence de composant valide. Format attendu : "R1,C2,U3" ou "R1, C2, U3". + + + + + project.bom_import.validation.warnings.unusual_designator_format + Ligne %line% : Certaines références de composants peuvent avoir un format inhabituel : %designators%. Format attendu : "R1", "C2", "U3", etc. + + + + + project.bom_import.validation.errors.duplicate_designators + Ligne %line% : Références de composants dupliqués trouvés : %designators%. Chaque composant ne doit être référencé qu'une seule fois par ligne. + + + + + project.bom_import.validation.errors.invalid_quantity + Ligne %line% : Quantité "%quantity%" n'est pas un nombre valide. Veuillez entrer une valeur numérique (ex., 1, 2.5, 10). + + + + + project.bom_import.validation.errors.quantity_zero_or_negative + Ligne %line% : La quantité doit être supérieure à 0, nous avons %quantity%. + + + + + project.bom_import.validation.warnings.quantity_unusually_high + Ligne %line% : La quantité %quantity% semble inhabituellement haute. Veuillez vérifier que c'est correct. + + + + + project.bom_import.validation.warnings.quantity_not_whole_number + Ligne %line% : La quantité %quantity% n'est pas un nombre entier mais vous avez %count% références de composants. Ça peut indiquer une erreur. + + + + + project.bom_import.validation.errors.quantity_designator_mismatch + Ligne %line% : Différence entre la quantité et les références de composants. Quantité : %quantity%, Références : %count% (%designators%). Ils doivent correspondre. Ajustez la quantité ou vérifiez les références des composants. + + + + + project.bom_import.validation.errors.invalid_partdb_id + Ligne %line% : L'ID Part-DB "%id%" n'est pas un nombre valide. Veuillez entrer un ID numérique. + + + + + project.bom_import.validation.errors.partdb_id_zero_or_negative + Ligne %line% : L'ID Part-DB doit être supérieur à 0, obtenu %id%. + + + + + project.bom_import.validation.warnings.partdb_id_not_found + Ligne %line% : L'ID Part-DB %id% n'a pas été trouvé dans la base de donnée. Le composant sera importé sans lien avec un composant existant. + + + + + project.bom_import.validation.info.partdb_link_success + Ligne %line% : Liaison avec le composant Part-DB "%name%" (ID: %id%) faite avec succès. + + + + + project.bom_import.validation.warnings.no_component_name + Ligne %line% : Aucun nom/description de composant fournit (MPN, Désignation, ou Valeur). Le composant sera nommé "Composant Inconnu". + + + + + project.bom_import.validation.warnings.package_name_too_long + Ligne %line% : Le nom d'empreinte "%package%" est inhabituellement long. Veuillez vérifier que c'est correct. + + + + + project.bom_import.validation.info.library_prefix_detected + Ligne %line% : L'empreinte "%package%" contient un préfixe de librairie. Ça sera supprimé automatiquement pendant l'import. + + + + + project.bom_import.validation.errors.non_numeric_field + Ligne %line% : Le champ "%field%" contient une valeur non numérique "%value%". Veuillez entrer un nombre valide. + + + + + project.bom_import.validation.info.import_summary + Résumé d'importation : %total% entrées totales, %valid% valides, %invalid% avec des problèmes. + + + + + project.bom_import.validation.errors.summary + Trouvé %count% erreur(s) de validation qui doivent être corrigés avant que l'import puisse s'effectuer. + + + + + project.bom_import.validation.warnings.summary + Trouvé %count% alerte(s). Veuillez relire les alertes avant de continuer. + + + + + project.bom_import.validation.info.all_valid + Toutes les entrées ont passé la validation avec succès ! + + + + + project.bom_import.validation.summary + Résumé de validation + + + + + project.bom_import.validation.total_entries + Entrées totales + + + + + project.bom_import.validation.valid_entries + Entrées Valides + + + + + project.bom_import.validation.invalid_entries + Entrées Invalides + + + + + project.bom_import.validation.success_rate + Taux de succès + + + + + project.bom_import.validation.errors.title + Erreurs de validation + + + + + project.bom_import.validation.errors.description + Les erreurs suivantes doivent être corrigés avant que l'import puisse continuer : + + + + + project.bom_import.validation.warnings.title + Alertes de validation + + + + + project.bom_import.validation.warnings.description + Les alertes suivantes doivent être revues avant de continuer : + + + + + project.bom_import.validation.info.title + Information + + + + + project.bom_import.validation.details.title + Résultats détaillés de validation + + + + + project.bom_import.validation.details.line + Ligne + + + + + project.bom_import.validation.details.status + Status + + + + + project.bom_import.validation.details.messages + Messages + + + + + project.bom_import.validation.details.valid + Valide + + + + + project.bom_import.validation.details.invalid + Invalide + + + + + project.bom_import.validation.all_valid + Toutes les entrées sont valides et prêtes à l'import ! + + + + + project.bom_import.validation.fix_errors + Veuillez corriger les erreurs de validation avant de procéder a l'import. + + + + + project.bom_import.type.generic_csv + CSV Générique + + + + + label_generator.update_profile + Mettre à jour le profil avec les paramètres en cours + + + + + label_generator.profile_updated + Profil d'étiquette mis à jour avec succès. + + + + + settings.behavior.hompepage.items + Items de page d'accueil + + + + + settings.behavior.homepage.items.help + Les items à montrer sur la page d'accueil. L'ordre peut être changé par glissé & déposé. + + + + + settings.system.customization.showVersionOnHomepage + Afficher la version de Part-DB sur la page d'accueil + + + + + settings.behavior.part_info.extract_params_from_description + Extraire les paramètres depuis la description du composant + + + + + settings.behavior.part_info.extract_params_from_notes + Extraire les paramètres depuis les notes du composant + + + + + settings.ips.default_providers + Fournisseurs de recherche par défaut + + + + + settings.ips.general + Paramètres généraux + + + + + settings.ips.default_providers.help + Ces fournisseurs seront présélectionnés pour les recherches dans les fournisseurs de composants. + + + + + settings.behavior.table.preview_image_max_width + Largeur maximale (px) de l'image de prévisualisation + + + + + settings.behavior.table.preview_image_min_width + Largeur minimale (px) de l'image de prévisualisation + + + + + info_providers.bulk_import.step1.title + Import de masse via fournisseur d'information - Étape 1 + + + + + info_providers.bulk_import.parts_selected + composants sélectionnés + + + + + info_providers.bulk_import.step1.global_mapping_description + Configurez les correspondances de champs qui seront appliqués a tous les composants sélectionnés. Par exemple : "MPN → LCSC + Mouser" veut dire que chercher via les fournisseurs LCSC et Mouser en utilisant chaque champ MPN des composants. + + + + + info_providers.bulk_import.selected_parts + Composants sélectionnés + + + + + info_providers.bulk_import.field_mappings + Correspondances de champs + + + + + info_providers.bulk_import.field_mappings_help + Définissez quels champs de composants rechercher avec quels fournisseurs d'informations. Plusieurs correspondances peuvent être combinées. + + + + + info_providers.bulk_import.add_mapping + Ajouter une correspondance + + + + + info_providers.bulk_import.search_results.title + Résultats de recherche + + + + + info_providers.bulk_import.errors + erreurs + + + + + info_providers.bulk_import.results_found + %count% résultats trouvés + + + + + info_providers.bulk_import.source_field + Champ Source + + + + + info_providers.bulk_import.view_existing + Voir Existant + + + + + info_providers.bulk_search.search_field + Champ de recherche + + + + + info_providers.bulk_search.providers + Fournisseurs d'informations + + + + + info_providers.bulk_import.actions.label + Actions + + + + + info_providers.bulk_search.providers.help + Sélectionnez dans quels fournisseurs d'information rechercher quand les composants ont ce champ. + + + + + info_providers.bulk_search.submit + Chercher tous les composants + + + + + info_providers.bulk_search.field.select + Sélectionnez un champ depuis lequel chercher + + + + + info_providers.bulk_search.field.mpn + Numéro de pièce fabriquant (MPN) + + + + + info_providers.bulk_search.field.name + Nom de composant + + + + + part_list.action.action.info_provider + Fournisseur d'information + + + + + part_list.action.bulk_info_provider_import + Import en masse de fournisseur d'information + + + + + part_list.action.group.eda + EDA / KiCad + + + + + part_list.action.batch_edit_eda + Modifier champs EDA par lot + + + + + batch_eda.title + Modifier champs EDA par lot + + + + + batch_eda.description + Modifier les champs EDA/KiCad pour %count% composant(s) sélectionné(s). Cochez la case "Appliquer" à côté de chaque champ à modifier + + + + + batch_eda.show_parts + Afficher la pièce sélectionnée + + + + + batch_eda.apply_hint + Seul les champs avec la case "appliquer" de cocher seront modifiés. Les champs non cochés seront laissés inchangés + + + + + batch_eda.apply + Appliquer + + + + + batch_eda.field + Champ + + + + + batch_eda.value + Valeur + + + + + batch_eda.submit + Appliquer au composant sélectionné + + + + + batch_eda.cancel + Annuler + + + + + batch_eda.success + Champs EDA mis à jour avec succès + + + + + batch_eda.no_parts_selected + Pas de composants sélectionnés pour l'édition multiple + + + + + info_providers.bulk_import.step1.spn_recommendation + Le SPN (Numéro de pièce fournisseur) est recommandé pour de meilleurs résultats. Ajoutez une correspondance pour chaque fournisseur pour utiliser leur SPN. + + + + + info_providers.bulk_import.update_part + Mettre à jour le composant + + + + + info_providers.bulk_import.prefetch_details + Détails de préchargement + + + + + info_providers.bulk_import.prefetch_details_help + Détails de préchargements pour tous les résultats. Ça prendra plus de temps mais accélèrera le workflow pour mettre à jour les composants. + + + + + info_providers.bulk_import.step2.title + Import de masse depuis les fournisseurs d'informations + + + + + info_providers.bulk_import.step2.card_title + Import de masse pour %count% composants - %date% + + + + + info_providers.bulk_import.parts + composants + + + + + info_providers.bulk_import.results + résultats + + + + + info_providers.bulk_import.created_at + Créer le + + + + + info_providers.bulk_import.status.in_progress + En Cours + + + + + info_providers.bulk_import.status.completed + Complété + + + + + info_providers.bulk_import.status.failed + Échec + + + + + info_providers.bulk_import.table.name + Nom + + + + + info_providers.bulk_import.table.description + Description + + + + + info_providers.bulk_import.table.manufacturer + Fabriquant + + + + + info_providers.bulk_import.table.provider + Fournisseur + + + + + info_providers.bulk_import.table.source_field + Champ Source + + + + + info_providers.bulk_import.back + Précédent + + + + + info_providers.bulk_import.progress + Progression : + + + + + info_providers.bulk_import.status.pending + En attente + + + + + info_providers.bulk_import.completed + terminé + + + + + info_providers.bulk_import.skipped + zappé + + + + + info_providers.bulk_import.mark_completed + Marquer terminé + + + + + info_providers.bulk_import.mark_skipped + Marquer à zapper + + + + + info_providers.bulk_import.mark_pending + Marquer en attente + + + + + info_providers.bulk_import.skip_reason + Raison pour zapper + + + + + info_providers.bulk_import.editing_part + Éditer un composant comme partie d'un import de masse + + + + + info_providers.bulk_import.complete + Terminer + + + + + info_providers.bulk_import.existing_jobs + Tâches existantes + + + + + info_providers.bulk_import.job_name + Nom de tâche + + + + + info_providers.bulk_import.parts_count + Nombre de composants + + + + + info_providers.bulk_import.results_count + Nombre de résultats + + + + + info_providers.bulk_import.progress_label + Progression : %current%/%total% + + + + + info_providers.bulk_import.manage_jobs + Gérer les tâches d'import de masse + + + + + info_providers.bulk_import.view_results + Voir les Résultats + + + + + info_providers.bulk_import.status + Status + + + + + info_providers.bulk_import.manage_jobs_description + Voir et gérer toutes vos taches d'import de masse. Pour créer une nouvelle tache, sélectionnez les composants et cliquez "Import de masse depuis les fournisseurs d'informations". + + + + + info_providers.bulk_import.no_jobs_found + Aucune tache d'import de masse trouvé. + + + + + info_providers.bulk_import.create_first_job + Créez votre première tache d'import de masse en sélectionnant plusieurs composants dans un tableau de composants et sélectionnez l'option "Import de masse de fournisseurs d'informations". + + + + + info_providers.bulk_import.confirm_delete_job + Êtes-vous sûr de vouloir supprimer cette tache ? + + + + + info_providers.bulk_import.job_name_template + Import de masse de %count% composants + + + + + info_providers.bulk_import.step2.instructions.title + Comment utiliser l'import de masse + + + + + info_providers.bulk_import.step2.instructions.description + Suivez ces étapes pour mieux mettre à jour vos composants : + + + + + info_providers.bulk_import.step2.instructions.step1 + Cliquez "Mettre à jour le composant" pour éditer un composant avec les données de fournisseur + + + + + info_providers.bulk_import.step2.instructions.step2 + Relisez et modifiez les informations de composants comme souhaité. Note : Vous devez cliquer sur "Sauver" deux fois pour sauver les changements. + + + + + info_providers.bulk_import.step2.instructions.step3 + Cliquez sur "Terminer" pour marquer le composant comme finalisé et retourner a cette vue d'ensemble + + + + + info_providers.bulk_import.created_by + Créer Par + + + + + info_providers.bulk_import.completed_at + Terminé le + + + + + info_providers.bulk_import.action.label + Action + + + + + info_providers.bulk_import.action.delete + Supprimer + + + + + info_providers.bulk_import.status.active + Actif + + + + + info_providers.bulk_import.progress.title + Progression + + + + + info_providers.bulk_import.progress.completed_text + %completed% / %total% terminés + + + + + info_providers.bulk_import.status.stopped + Arrêté + + + + + info_providers.bulk_import.action.stop + Arrêter + + + + + info_providers.bulk_import.confirm_stop_job + Êtes-vous sûr de vouloir arrêter cette tache ? + + + + + part.filter.in_bulk_import_job + Dans la tache d'import de masse + + + + + part.filter.bulk_import_job_status + Status de la tache d'import de masse + + + + + part.filter.bulk_import_part_status + Status de l'import de masse de composants + + + + + part.edit.tab.bulk_import + Tache d'import de masse + + + + + bulk_import.status.pending + En attente + + + + + bulk_import.status.in_progress + En cours + + + + + bulk_import.status.completed + Terminé + + + + + bulk_import.status.stopped + Arrêté + + + + + bulk_import.status.failed + Échec + + + + + bulk_import.part_status.pending + En attente + + + + + bulk_import.part_status.completed + Terminé + + + + + bulk_import.part_status.skipped + Zappé + + + + + bulk_import.part_status.failed + Échec + + + + + bulk_info_provider_import_job.label + Import de masse via fournisseur d'informations + + + + + bulk_info_provider_import_job_part.label + Tache d'import de masse de composant + + + + + info_providers.bulk_search.priority + Priorité + + + + + info_providers.bulk_search.priority.help + Faible nombre = haute priorité. Même priorité = combiner les résultats. Priorités différentes = essayer le plus haut en premier, repli si pas de résultats. + + + + + info_providers.bulk_import.priority_system.title + Système de priorités + + + + + info_providers.bulk_import.priority_system.description + Faible nombre = haute priorité. Même priorité = combiner les résultats. Priorités différentes = essayer le plus haut en premier, repli si pas de résultats. + + + + + info_providers.bulk_import.priority_system.example + Rechercher les fournisseurs + + + + + info_providers.bulk_import.search.submit + Rechercher les fournisseurs + + + + + info_providers.bulk_import.research.title + Rechercher les composants + + + + + info_providers.bulk_import.research.description + Re-chercher des composants en utilisant les infos mises à jour (ex. nouveau MPN). Utilise la même correspondance de champs que la recherche originelle. + + + + + info_providers.bulk_import.research.all_pending + Rechercher tous les composants en attente + + + + + info_providers.bulk_import.research.part + Recherche + + + + + info_providers.bulk_import.research.part_tooltip + Rechercher ce composant avec les infos mises à jour + + + + + info_providers.bulk_import.max_mappings_reached + Nombre maximum de correspondances atteint + + + + + settings.system + Système + + + + + settings.behavior + Comportement + + + + + settings.ips + Fournisseurs d'informations + + + + + settings.misc + Autre + + + + + settings.system.localization.language_menu_entries + Entrées de menu de langues + + + + + settings.system.localization.language_menu_entries.description + Les langues à afficher dans le menu déroulant de langues. L'ordre peut être changé par glissé & déposé. Laissez vide pour afficher toutes les langues. + + + + + project.builds.no_bom_entries + Le projet n'a aucune entrée de BOM + + + + + settings.behavior.sidebar.data_structure_nodes_table_include_children + Les tableaux doivent inclure les nœuds enfants par défaut + + + + + settings.behavior.sidebar.data_structure_nodes_table_include_children.help + Si coché, les tableaux de composants pour les catégories, empreintes etc. doivent inclure tous les composants des sous-catégories. Si non coché seul les composants qui appartiennent seulement au nœud cliqué seront visibles. + + + + + info_providers.search.error.oauth_reconnect + Vous devez reconnecter l'OAuth pour les fournisseurs suivants : %provider% +Vous pouvez faire ça depuis la liste des fournisseurs d'informations. + + + + + settings.misc.ipn_suggest.useDuplicateDescription.help + Lorsque qu'activé, la description du composant est utilisée pour en trouver un existant avec la même description et détermine le prochain IPN disponible en incrémentant leur suffixe numérique pour la liste de suggestions + + + + + settings.misc.ipn_suggest.regex.help + Expression régulière compatible PCRE que chaque IPN doit respecter. Laisser vide pour autoriser tout IPN - + user.labelp Utilisateurs + + + currency.labelp + Devises + + + + + measurement_unit.labelp + Unités de mesures + + + + + attachment_type.labelp + Type de pièce-jointe + + + + + label_profile.labelp + Profil d'étiquettes + + + + + part_custom_state.labelp + État personnalisé du composant + + + + + group.labelp + Groupes + + + + + settings.synonyms.type_synonym.type + Type + + + + + settings.synonyms.type_synonym.language + Langage + + + + + settings.synonyms.type_synonym.translation_singular + Traduction singulière + + + + + settings.synonyms.type_synonym.translation_plural + Traduction plurielle + + + + + settings.synonyms.type_synonym.add_entry + Ajouter entrée + + + + + settings.synonyms.type_synonym.remove_entry + Retirer entrée + + + + + settings.synonyms + Synonymes + + + + + settings.synonyms.help + Le système de synonymes autorise de remplacer le nommage automatique de Part-DB. Cela peut être utile, particulièrement si Part-DB est utilisé dans un autre contexte que l'électronique. Veuillez-noter que ce système est actuellement expérimental, les synonymes définis ici pourrait ne pas s'afficher à tous les endroits + + + + + settings.synonyms.type_synonyms + Synonymes de type + + + + + settings.synonyms.type_synonyms.help + Les synonymes de type vous autorise à remplacer les étiquettes des données intégrées. Par ex : vous pouvez renommer "empreintes" par autre chose + + + + + log.element_edited.changed_fields.part_ipn_prefix + Préfixe IPN + + + + + part.labelp + Composants + + + + + project_bom_entry.labelp + Entrées BOM + + + + + part_lot.labelp + Lot de pièces + + + + + orderdetail.labelp + Détails de commande + + + + + pricedetail.labelp + Détails des prix + + + + + parameter.labelp + Paramètres + + + + + part_association.labelp + Associations de composants + + + + + bulk_info_provider_import_job.labelp + Import groupé d'informations fournisseurs + + + + + bulk_info_provider_import_job_part.labelp + Import groupé de composants + + + + + password_toggle.hide + Masquer + + + + + password_toggle.show + Montrer + + + + + settings.misc.ipn_suggest.regex.help.placeholder + Ex : Format : 3-4 segments alphanumériques (nombre quelconque) séparés par "-", suivis de "-" et 4 chiffres, ex : ROBO-COMP-0001 + + + + + part.edit.tab.advanced.ipn.prefix.global_prefix + Préfixe IPN global, commun à tous les composants + + + + + settings.misc.ipn_suggest.fallbackPrefix + Préfixe de repli + + + + + settings.misc.ipn_suggest.fallbackPrefix.help + Préfixe IPN à utiliser si une catégorie n'a pas de préfixe définit + + + + + settings.misc.ipn_suggest.numberSeparator + Séparateur numérique + + + + + settings.misc.ipn_suggest.numberSeparator.help + Caractère de séparation utilisé pour séparer le nombre IPN du préfixe + + + + + settings.misc.ipn_suggest.categorySeparator + Séparateur de catégorie + + + + + settings.misc.ipn_suggest.categorySeparator.help + Le caractère séparateur utilisé pour séparer les différents niveaux de préfixes de catégorie + + + + + settings.misc.ipn_suggest.globalPrefix + Préfixe global + + + + + settings.misc.ipn_suggest.globalPrefix.help + Si activé : option permettant de générer un IPN avec le préfixe global, partagé à travers des composants de toutes les catégories + + - - Do not remove! Used for datatables rendering. - - - datatable.datatable.lengthMenu - _MENU_ - + + Do not remove! Used for datatables rendering. + + + datatable.datatable.lengthMenu + _MENU_ + + + + + settings.ips.buerklin + Buerklin + + + + + settings.ips.buerklin.username + Nom d'utilisateur + + + + + settings.ips.buerklin.help + Limites d'accès de Buerklin-API : 100 requêtes/min par adresse IP. +Serveur d'authentification Buerklin-API : 10 requêtes/min par adresse IP + + + + + project.bom.part_id + [Part] ID + + + + + info_providers.search.error.general_exception + Erreur inconnue lors de la tentative de récupération du composant depuis le fournisseur d'informations : %type%. Vérifier que vos fournisseurs sont correctement configurés et les clés d'accès correctes. Voir les logs serveur pour plus d'informations + + + + + info_providers.search.error.transport_exception + Erreur de transport lors de la récupération d'informations depuis les fournisseurs. Vérifier que votre serveur a un accès internet. Voir les logs serveur pour plus d'informations + + + + + update_manager.title + Gestionnaire de mises à jour + + + + + update_manager.new + Nouveau + + + + + update_manager.current_installation + Installation actuelle + + + + + update_manager.version + Version + + + + + update_manager.installation_type + Type d'installation + + + + + update_manager.git_branch + Branche Git + + + + + update_manager.git_commit + Commit Git + + + + + update_manager.local_changes + Modifications locales + + + + + update_manager.commits_behind + Commits de retard + + + + + update_manager.auto_update_supported + Mises-à-jour automatiques supportées + + + + + update_manager.refresh + Rafraîchir + + + + + update_manager.latest_release + Dernière mise-à-jour + + + + + update_manager.tag + Tag + + + + + update_manager.released + Publié + + + + + update_manager.release_notes + Notes de version + + + + + update_manager.view + Vue + + + + + update_manager.view_on_github + Vu sur GitHub + + + + + update_manager.view_release + Voir la version + + + + + update_manager.could_not_fetch_releases + Impossible de récupérer les informations de la version + + + + + update_manager.how_to_update + Comment mettre à jour + + + + + update_manager.cli_instruction + Pour mettre à jour Part-DB, utilisez une des commandes suivantes sur votre terminal : + + + + + update_manager.check_for_updates + Rechercher des mises à jour + + + + + update_manager.update_to_latest + Mettre à jour à la dernière version + + + + + update_manager.update_to_specific + Mettre à jour à une version spécifique + + + + + update_manager.cli_recommendation + Pour la sécurité et la fiabilité, les mises à jour doivent être exécutées via l'interface en ligne de commande. Le processus de mise à jour créera automatiquement une sauvegarde, activera le mode maintenance et gérera les migrations + + + + + update_manager.up_to_date + À jour + + + + + update_manager.newer + Plus récent + + + + + update_manager.current + Actuel + + + + + update_manager.older + Plus ancien + + + + + update_manager.prerelease + Pre-release + + + + + update_manager.status + Statut + + + + + update_manager.available_versions + Versions disponibles + + + + + update_manager.no_releases_found + Aucune mise à jour trouvée + + + + + update_manager.view_release_notes + Voir les notes de version + + + + + update_manager.update_logs + Logs de mise à jour + + + + + update_manager.backups + Sauvegardes + + + + + update_manager.date + Date + + + + + update_manager.log_file + Fichier log + + + + + update_manager.no_logs_found + Aucun log de mise à jour trouvé + + + + + update_manager.file + Fichier + + + + + update_manager.size + Taille + + + + + update_manager.no_backups_found + Aucune sauvegarde trouvée + + + + + update_manager.validation_issues + Problèmes de validation + + + + + update_manager.maintenance_mode_active + Mode maintenance activé + + + + + update_manager.update_in_progress + Une mise à jour actuellement en cours + + + + + update_manager.started_at + Commencée à + + + + + update_manager.new_version_available.message + Part-DB version %version% est maintenant disponible ! Mettez à jour pour avoir les dernières fonctionnalités et résolutions de problèmes + + + + + update_manager.changelog + Journal des modifications + + + + + update_manager.no_release_notes + Aucune note disponible pour cette version + + + + + update_manager.back_to_update_manager + Retour au gestionnaire de mise à jour + + + + + update_manager.download_assets + Télécharger + + + + + update_manager.update_to_this_version + Mettre à jour vers cette version + + + + + update_manager.run_command_to_update + Lancez la commande suivante dans votre terminal pour mettre à jour vers cette version : + + + + + update_manager.log_viewer + Visualiseur de logs + + + + + update_manager.update_log + Log de mise à jour + + + + + update_manager.bytes + Bytes + + + + + perm.system.manage_updates + Gérer les mises à jour Part-DB + + + + + update_manager.create_backup + Créer une sauvegarde avant de mettre à jour (recommandé) + + + + + update_manager.confirm_update + Êtes-vous sûr de vouloir mettre à jour Part-DB ? Une sauvegarde sera créée + + + + + update_manager.already_up_to_date + Vous utilisez la dernière version de Part-DB + + + + + update_manager.progress.title + Progression de mise à jour + + + + + update_manager.progress.updating + Mise à jour de Part-DB... + + + + + update_manager.progress.completed + Installation terminée ! + + + + + update_manager.progress.failed + Échec de la mise à jour + + + + + update_manager.progress.initializing + Initialisation... + + + + + update_manager.progress.updating_to + Mise à jour vers la version %version% + + + + + update_manager.progress.downgrading_to + Rétrogradation vers la version %version% + + + + + update_manager.progress.error + Erreur + + + + + update_manager.progress.success_message + Part-DB a correctement été mis à jour ! Vous devrez sûrement rafraichir la page pour voir la nouvelle version + + + + + update_manager.progress.steps + Étape de mise à jour + + + + + update_manager.progress.waiting + En attente du début de l'installation... + + + + + update_manager.progress.back + Retour au gestionnaire de mise à jour + + + + + update_manager.progress.refresh_page + Rafraîchir la page + + + + + update_manager.progress.warning + Important + + + + + update_manager.progress.do_not_close + Veuillez à ne pas fermer cette page ou naviguer ailleurs lorsque l'installation est en cours. La mise à jour se poursuivra même si vous fermer cette page, mais vous ne pourrez plus voir sa progression + + + + + update_manager.progress.auto_refresh + Cette page rafraîchira toutes les deux secondes pour montrer la progression + + + + + update_manager.progress.downgrade_title + Progression de la rétrogradation + + + + + update_manager.progress.downgrade_completed + Rétrogradation terminée + + + + + update_manager.progress.downgrade_failed + Échec de la rétrogradation + + + + + update_manager.progress.downgrade_success_message + Part-DB à bien été rétrogradé! Vous pouvez avoir besoin de rafraîchir la page pour voir la nouvelle version + + + + + update_manager.progress.downgrade_steps + Étapes de rétrogradation + + + + + update_manager.progress.downgrade_do_not_close + Veuillez ni navigué, ni fermer cette page lorsque la rétrogradation est en cours. La rétrogradation continuera même si vous fermez cette page, mais vous ne pourrez plus voir la progression + + + + + update_manager.confirm_downgrade + Êtes-vous certain de vouloir rétrograder Part-DB? Cela engendrera un retour à une version antérieur. Une sauvegarde sera créée avant la rétrogradation + + + + + update_manager.downgrade_removes_update_manager + ATTENTION : Cette version n'inclue pas le gestionnaire de mises à jour. Après avoir rétrogradé, vous aurez besoin de mettre à jour manuellement en utilisant la ligne de commande (git checkout, composer install, etc.) + + + + + update_manager.restore_backup + Restaurer la sauvegarde + + + + + update_manager.restore_confirm_title + Restaurer depuis une sauvegarde + + + + + update_manager.restore_confirm_message + Êtes-vous sûre de vouloir restaurer votre base de données depuis cette sauvegarde ? + + + + + update_manager.restore_confirm_warning + ATTENTION : Les données de récupération écraseront les données actuelles de votre base de données. Cette action ne peut pas être annulée ! Assurez-vous d'avoir une sauvegarde actuelle avant de poursuivre + + + + + update_manager.web_updates_disabled + Les mises à jour depuis le web sont désactivées + + + + + update_manager.web_updates_disabled_hint + Les mises à jour depuis le web ont été désactivées par l'administrateur du serveur. Veuillez utiliser la commande CLI "php bin/console partdb:update" pour effectuer des mises à jour. + + + + + update_manager.backup_restore_disabled + La récupération de sauvegarde a été désactivée par la configuration serveur + + + + + update_manager.backup.create + Créer une sauvegarde + + + + + update_manager.backup.create.confirm + Créer une sauvegarde complète maintenant ? Cela peut prendre un moment + + + + + update_manager.backup.created + Sauvegarde créée avec succès + + + + + update_manager.backup.delete.confirm + Êtes-vous certain de vouloir supprimer cette sauvegarde ? + + + + + update_manager.backup.deleted + Sauvegarde supprimée avec succès + + + + + update_manager.backup.delete_error + Échec de suppression de la sauvegarde + + + + + update_manager.log.delete.confirm + Êtes-vous sûr de vouloir supprimer ce log ? + + + + + update_manager.log.deleted + Log supprimé avec succès + + + + + update_manager.log.delete_error + Échec de la suppression du log + + + + + update_manager.view_log + Voir log + + + + + update_manager.delete + Supprimer + + + + + update_manager.backup.download + Télécharger la sauvegarde + + + + + update_manager.backup.download.password_label + Confirmer votre mot de passe pour télécharger + + + + + update_manager.backup.download.security_warning + Les sauvegardes contiennent des données sensibles, notamment des hachages de mots de passes. Veuillez confirmer votre mot de passe pour procéder au téléchargement + + + + + update_manager.backup.download.invalid_password + Mot de passe incorrect. Téléchargement de la sauvegarde refusé + + + + + update_manager.backup.docker_warning + Installation docker détectée. Les sauvegardes sont stockées dans var/backups/ qui n'est pas un volume persistant. Utiliser le bouton "télécharger" pour conserver des sauvegardes extérieurement, ou monter var/backups/ en tant que volume dans votre docker-compose.yml + + + + + settings.ips.conrad + Conrad + + + + + settings.ips.conrad.shopID + Shop ID + + + + + settings.ips.conrad.shopID.description + La version de la boutique Conrad depuis laquelle vous voulez avoir des résultats. Cela détermine la langue, les prix et la devise des résultats. Si les versions B2B et B2C sont toutes les deux disponibles, vous devrez choisir la version B2C si vous voulez des prix incluant la TVA + + + + + settings.ips.conrad.attachment_language_filter + Filtre de langage pour les pièces-jointes + + + + + settings.ips.conrad.attachment_language_filter.description + Inclure seulement les pièces-jointes dans le langage sélectionné dans les résultats + + + + + settings.ips.generic_web_provider + Fournisseur d'URL web génériques + + + + + settings.ips.generic_web_provider.description + Ce fournisseur d'informations permet de récupérer les informations basiques d'un composant depuis plusieurs pages de boutiques + + + + + settings.ips.generic_web_provider.enabled.help + Lorsque le fournisseur est activé, les utilisateurs peuvent effectuer des requêtes vers des sites web arbitraires au nom du serveur Part-DB. N'activez cette fonction que si vous êtes conscient des conséquences potentielles + + + + + info_providers.from_url.title + Créer [part] depuis un URL + + + + + info_providers.from_url.url.label + URL + + + + + info_providers.from_url.no_part_found + Pas de composant trouvé depuis l'URL donné. Êtes-vous sûr que c'est un lien valide ? + + + + + info_providers.from_url.help + Créer un composant depuis l'URL fournit. Essaie de déléguer la tâche à un fournisseur d'informations existant si possible, sinon il essaie d'extraire des données rudimentaires depuis les métadonnées de la page web + + + + + update_manager.cant_auto_update + Impossible de mettre à jour automatiquement depuis WebUI + + + + + update_manager.switch_to + Passer à + + + + + update_manager.update_to + Mettre à jour vers + + + + + part.gtin + GTIN / EAN + + + + + info_providers.capabilities.gtin + GTIN / EAN + + + + + part.table.gtin + GTIN + + + + + scan_dialog.mode.gtin + Code-barre GTIN / EAN + + + + + attachment_type.edit.allowed_targets + Utiliser seulement pour + + + + + attachment_type.edit.allowed_targets.help + Rendre ce type de pièce-jointe uniquement disponible pour certaines classes d'éléments. Laisser vide pour afficher ce type de pièce-jointe pour toutes les classes d'éléments + + + + + orderdetails.edit.prices_includes_vat + Les prix incluent la TVA + + + + + prices.incl_vat + Incl. TVA + + + + + prices.excl_vat + Excl. TVA + + + + + settings.system.localization.prices_include_tax_by_default + Les prix incluent la TVA par défaut + + + + + settings.system.localization.prices_include_tax_by_default.description + La valeur par défaut pour des informations d'achats tout juste créées, si les prix incluent la TVA ou non + + + + + part_lot.edit.last_stocktake_at + Dernier inventaire + + + + + perm.parts_stock.stocktake + Inventaire + + + + + part.info.stocktake_modal.title + Inventaire groupé + + + + + part.info.stocktake_modal.expected_amount + Quantité attendue + + + + + part.info.stocktake_modal.actual_amount + Quantité réelle + + + + + log.part_stock_changed.stock_take + Inventaire + + + + + log.element_edited.changed_fields.last_stocktake_at + Dernier inventaire + + + + + part.table.eda_reference + Référence EDA + + + + + part.table.eda_value + Valeur EDA + + + + + settings.misc.kicad_eda.default_parameter_visibility + Visibilité EDA par défaut des paramètres + + + + + settings.misc.kicad_eda.default_parameter_visibility.help + Visibilité EDA pour tous les paramètres (de pièce) qui n'ont pas de visibilité explicitement configurée + + + + + settings.misc.kicad_eda.default_orderdetails_visibility + Visibilité EDA par défaut des informations d'achat + + + + + settings.misc.kicad_eda.default_orderdetails_visibility.help + Visibilité EDA pour toutes les informations d'achat qui n'ont pas de visibilité explicitement configurée. Lorsque activé, toutes les informations d'achat seront visibles par le logiciel EDA par défaut + + + + + label_scanner.open + Détails de la vue + + + + + label_scanner.db_part_found + Base de données (pièce) trouvée pour le code-barre + + + + + label_scanner.part_can_be_created + La pièce peut être créée + + + + + label_scanner.part_can_be_created.help + Pas de pièce correspondante trouvée dans la base de données, mais vous pouvez créer une nouvelle en vous basant sur ce code-barre + + + + + label_scanner.part_create_btn + Créer (une pièce) depuis le code-barre + + + + + parts.create_from_scan.title + Créer (une pièce) depuis le scan d'étiquette + + + + + scan_dialog.mode.amazon + Code-barre Amazon + + + + + scan_dialog.mode.tme + Code-barre TME + + + + + settings.ips.canopy + Canopy + + + + + settings.ips.canopy.alwaysGetDetails + Toujours récupérer les détails + + + + + settings.ips.canopy.alwaysGetDetails.help + Lorsque sélectionné, des informations supplémentaires seront récupérées depuis Canopy lors de la création d'un composant. Cela génère une requête API additionnelle, mais fournit les points clés du produit et les informations de catégorie + + + + + attachment.sandbox.warning + ATTENTION : Vous visualisez du contenu publié par un utilisateur. Ce contenu n'est pas vérifié + + + + + attachment.sandbox.back_to_partdb + Retour à Part-DB + + + + + settings.system.attachments.showHTMLAttachments + Afficher les pièces-jointes du fichier HTML publié (bac à sable) + + + + + settings.system.attachments.showHTMLAttachments.help + ATTENTION : Lorsque activé, les pièces-jointes HTML fournis par les utilisateurs peuvent être vu directement dans le moteur de recherche. Plusieurs fonctions potentiellement malveillantes sont restreintes, cependant un risque sécuritaire subsiste toujours et cette fonction ne doit seulement être activé si vous faîtes confiance aux utilisateurs qui peuvent publier des fichiers + + + + + attachment.sandbox.title + HTML [Attachment] + + + + + attachment.sandbox.as_plain_text + Afficher en texte brut + + + + + modal.cancel + Annuler + + + + + update_manager.web_updates_allowed + Mises à jour web autorisées + + + + + update_manager.backup_restore_allowed + Récupération de sauvegarde autorisée + + + + + update_manager.backup_download_allowed + Téléchargement de sauvegarde autorisé + + + + + part.create_from_info_provider.lot_filled_from_barcode + [Part_lot] créé depuis un code-barre : veuillez vérifier si les données sont correctes et désirées + + + + + project.bom_import.field_mapping.error.check_delimiter + Erreur de mapping : vérifier si vous avez sélectionné les bons délimiteurs + - \ No newline at end of file + diff --git a/translations/validators.da.xlf b/translations/validators.da.xlf index e7379173..70e06d72 100644 --- a/translations/validators.da.xlf +++ b/translations/validators.da.xlf @@ -4,31 +4,31 @@ part.master_attachment.must_be_picture - Forhåndsvisnings-bilaget skal være et rigtigt billede! + Forhåndsvisningsvedhæftningen skal være et gyldigt billede! structural.entity.unique_name - Der eksisterer allerede et element med dette navn på dette niveau! + Et element med dette navn findes allerede på dette niveau! parameters.validator.min_lesser_typical - Værdi skal være mindre end eller lig med den typiske værdi ({{ compared_value }}). + Værdien skal være mindre end eller lig med den typiske værdi ({{ compared_value }}). parameters.validator.min_lesser_max - Værdi skal være mindre end maksumumværdien ({{ compared_value }}). + Værdien skal være mindre end den maksimale værdi ({{ compared_value }}). parameters.validator.max_greater_typical - Værdi skal være større eller lig med den typiske værdi ({{ compared_value }}). + Værdien skal være større end eller lig med den typiske værdi ({{ compared_value }}). @@ -247,5 +247,11 @@ Der er allerede defineret en oversættelse for denne type og sprog! + + + validator.invalid_gtin + Dette er ikke en gyldig GTIN / EAN! + + - \ No newline at end of file + diff --git a/translations/validators.fr.xlf b/translations/validators.fr.xlf index ac1ea192..2a936419 100644 --- a/translations/validators.fr.xlf +++ b/translations/validators.fr.xlf @@ -112,7 +112,7 @@ part.ipn.must_be_unique - Le numéro de pièce interne doit être unique.{{ value }} est déjà utilisé ! + Le numéro de pièce interne doit être unique. {{ value }} est déjà utilisé ! @@ -223,13 +223,13 @@ Suite à des limitations techniques, il n'est pas possible de sélectionner une date après le 19-01-2038 sur les systèmes 32-bit ! - + validator.fileSize.invalidFormat Taille de fichier invalide. Utilisez un nombre avec le suffixe K, G, M pour Kilo, Mega ou Gigabytes. - + validator.invalid_range L'écart fournit est invalide ! @@ -241,5 +241,17 @@ Code invalide. Vérifiez que votre application d'authentification est paramétrée correctement que le serveur et périphérique d'authentification ont l'heure correcte. + + + settings.synonyms.type_synonyms.collection_type.duplicate + Il existe déjà une traduction définit pour ce type et langage ! + + + + + validator.invalid_gtin + Cela n'est pas un GTIN / EAN valide ! + + - \ No newline at end of file + From 6330b71bfbe0cfbb75d0b7e3291c9b07cdb5b949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 21 Apr 2026 23:40:32 +0200 Subject: [PATCH 050/108] Updated dependencies --- composer.lock | 175 +++-- config/reference.php | 2 + yarn.lock | 1693 +++++++++++++++++++++--------------------- 3 files changed, 947 insertions(+), 923 deletions(-) diff --git a/composer.lock b/composer.lock index 217a3e49..3ad11a45 100644 --- a/composer.lock +++ b/composer.lock @@ -818,16 +818,16 @@ }, { "name": "amphp/socket", - "version": "v2.3.1", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/amphp/socket.git", - "reference": "58e0422221825b79681b72c50c47a930be7bf1e1" + "reference": "dadb63c5d3179fd83803e29dfeac27350e619314" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/socket/zipball/58e0422221825b79681b72c50c47a930be7bf1e1", - "reference": "58e0422221825b79681b72c50c47a930be7bf1e1", + "url": "https://api.github.com/repos/amphp/socket/zipball/dadb63c5d3179fd83803e29dfeac27350e619314", + "reference": "dadb63c5d3179fd83803e29dfeac27350e619314", "shasum": "" }, "require": { @@ -836,17 +836,17 @@ "amphp/dns": "^2", "ext-openssl": "*", "kelunik/certificate": "^1.1", - "league/uri": "^6.5 | ^7", - "league/uri-interfaces": "^2.3 | ^7", + "league/uri": "^7", + "league/uri-interfaces": "^7", "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" + "revolt/event-loop": "^1" }, "require-dev": { "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "amphp/process": "^2", "phpunit/phpunit": "^9", - "psalm/phar": "5.20" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -890,7 +890,7 @@ ], "support": { "issues": "https://github.com/amphp/socket/issues", - "source": "https://github.com/amphp/socket/tree/v2.3.1" + "source": "https://github.com/amphp/socket/tree/v2.4.0" }, "funding": [ { @@ -898,7 +898,7 @@ "type": "github" } ], - "time": "2024-04-21T14:33:03+00:00" + "time": "2026-04-19T15:09:56+00:00" }, { "name": "amphp/sync", @@ -5201,16 +5201,16 @@ }, { "name": "jbtronics/settings-bundle", - "version": "v3.2.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/jbtronics/settings-bundle.git", - "reference": "9cce5f59482e66417166354072c7e24790495b9b" + "reference": "9cce001eef4570ca3b2766da6a8a4abd327ea438" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/9cce5f59482e66417166354072c7e24790495b9b", - "reference": "9cce5f59482e66417166354072c7e24790495b9b", + "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/9cce001eef4570ca3b2766da6a8a4abd327ea438", + "reference": "9cce001eef4570ca3b2766da6a8a4abd327ea438", "shasum": "" }, "require": { @@ -5239,11 +5239,13 @@ "symfony/console": "^6.4|^7.0|^8.0", "symfony/phpunit-bridge": "^6.4|^7.0|^8.0", "symfony/security-csrf": "^7.0|^6.4|^8.0", - "symfony/twig-bridge": "^6.4|^7.0|^8.0" + "symfony/twig-bridge": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "suggest": { "doctrine/doctrine-bundle": "To use the doctrine ORM storage", - "symfony/twig-bridge": "Allows to access settings in twig templates" + "symfony/twig-bridge": "Allows to access settings in twig templates", + "symfony/yaml": "To use the YAML metadata driver for settings configuration" }, "type": "symfony-bundle", "autoload": { @@ -5258,20 +5260,30 @@ "authors": [ { "name": "Jan Böhmer", - "email": "mail@jan-boehmer.de" + "email": "mail@jan-boehmer.de", + "role": "Maintainer" + }, + { + "name": "Github Contributors", + "homepage": "https://github.com/jbtronics/settings-bundle/graphs/contributors" } ], "description": "A symfony bundle to easily create typesafe, user-configurable settings for symfony applications", "keywords": [ "Settings", "config", + "configuration", + "dynamic-settings", + "options", + "preferences", "symfony", "symfony-bundle", + "user-config", "user-configurable" ], "support": { "issues": "https://github.com/jbtronics/settings-bundle/issues", - "source": "https://github.com/jbtronics/settings-bundle/tree/v3.2.1" + "source": "https://github.com/jbtronics/settings-bundle/tree/v3.3.0" }, "funding": [ { @@ -5283,7 +5295,7 @@ "type": "github" } ], - "time": "2026-02-28T16:30:47+00:00" + "time": "2026-04-21T21:26:26+00:00" }, { "name": "jfcherng/php-color-output", @@ -8556,16 +8568,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "5.6.0", + "version": "5.7.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "9b90dee03deb0d28761479c4a3a06fba5f7e012e" + "reference": "9f55d3b9b7bcb1084fda8340e4b7ce4ed10cd0c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/9b90dee03deb0d28761479c4a3a06fba5f7e012e", - "reference": "9b90dee03deb0d28761479c4a3a06fba5f7e012e", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/9f55d3b9b7bcb1084fda8340e4b7ce4ed10cd0c8", + "reference": "9f55d3b9b7bcb1084fda8340e4b7ce4ed10cd0c8", "shasum": "" }, "require": { @@ -8659,9 +8671,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.6.0" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.7.0" }, - "time": "2026-04-10T03:00:03+00:00" + "time": "2026-04-20T02:42:17+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -16491,16 +16503,16 @@ }, { "name": "tecnickcom/tc-lib-barcode", - "version": "2.4.31", + "version": "2.4.34", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-barcode.git", - "reference": "f47ebaa990027cc12cea5af43e62d3ab8e860a5d" + "reference": "4057b35150e383f0425221efaea312e5cb968902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/f47ebaa990027cc12cea5af43e62d3ab8e860a5d", - "reference": "f47ebaa990027cc12cea5af43e62d3ab8e860a5d", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/4057b35150e383f0425221efaea312e5cb968902", + "reference": "4057b35150e383f0425221efaea312e5cb968902", "shasum": "" }, "require": { @@ -16512,11 +16524,11 @@ "tecnickcom/tc-lib-color": "^2.3" }, "require-dev": { - "pdepend/pdepend": "2.16.2", + "pdepend/pdepend": "^2.16", "phpcompatibility/php-compatibility": "^10.0.0@dev", - "phpmd/phpmd": "2.15.0", - "phpunit/phpunit": "13.1.1 || 12.5.17 || 11.5.55 || 10.5.63", - "squizlabs/php_codesniffer": "4.0.1" + "phpmd/phpmd": "^2.15", + "phpunit/phpunit": "^13.1 || ^12.5 || ^11.5 || ^10.5", + "squizlabs/php_codesniffer": "^4.0" }, "type": "library", "autoload": { @@ -16536,7 +16548,7 @@ } ], "description": "PHP library to generate linear and bidimensional barcodes", - "homepage": "http://www.tecnick.com", + "homepage": "https://tcpdf.org", "keywords": [ "3 of 9", "ANSI MH10.8M-1983", @@ -16580,7 +16592,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-barcode/issues", - "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.31" + "source": "https://github.com/tecnickcom/tc-lib-barcode" }, "funding": [ { @@ -16588,20 +16600,20 @@ "type": "custom" } ], - "time": "2026-04-11T16:55:36+00:00" + "time": "2026-04-20T07:15:41+00:00" }, { "name": "tecnickcom/tc-lib-color", - "version": "2.3.12", + "version": "2.3.14", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-color.git", - "reference": "d76454d5723379d73629f46114e4b69ec77175df" + "reference": "6fbb7daabf4f15b38d264ad9091f0745502459b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/d76454d5723379d73629f46114e4b69ec77175df", - "reference": "d76454d5723379d73629f46114e4b69ec77175df", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/6fbb7daabf4f15b38d264ad9091f0745502459b9", + "reference": "6fbb7daabf4f15b38d264ad9091f0745502459b9", "shasum": "" }, "require": { @@ -16609,11 +16621,11 @@ "php": ">=8.1" }, "require-dev": { - "pdepend/pdepend": "2.16.2", + "pdepend/pdepend": "^2.16", "phpcompatibility/php-compatibility": "^10.0.0@dev", - "phpmd/phpmd": "2.15.0", - "phpunit/phpunit": "13.1.1 || 12.5.17 || 11.5.55 || 10.5.63", - "squizlabs/php_codesniffer": "4.0.1" + "phpmd/phpmd": "^2.15", + "phpunit/phpunit": "^13.1 || ^12.5 || ^11.5 || ^10.5", + "squizlabs/php_codesniffer": "^4.0" }, "type": "library", "autoload": { @@ -16633,7 +16645,7 @@ } ], "description": "PHP library to manipulate various color representations", - "homepage": "http://www.tecnick.com", + "homepage": "https://tcpdf.org", "keywords": [ "cmyk", "color", @@ -16650,7 +16662,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-color/issues", - "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.12" + "source": "https://github.com/tecnickcom/tc-lib-color" }, "funding": [ { @@ -16658,7 +16670,7 @@ "type": "custom" } ], - "time": "2026-04-11T16:53:57+00:00" + "time": "2026-04-20T07:09:08+00:00" }, { "name": "thecodingmachine/safe", @@ -18469,11 +18481,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.48", + "version": "2.1.51", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/231397213efb7c0a066ee024b5c3c87f2d3adfa0", - "reference": "231397213efb7c0a066ee024b5c3c87f2d3adfa0", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc3b523c45e714c70de2ac5113b958223b55dc59", + "reference": "dc3b523c45e714c70de2ac5113b958223b55dc59", "shasum": "" }, "require": { @@ -18518,20 +18530,20 @@ "type": "github" } ], - "time": "2026-04-15T20:24:19+00:00" + "time": "2026-04-21T18:22:01+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "2.0.20", + "version": "2.0.21", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "72f4f7a02d6c98d9101e8616e0488bc0a785196d" + "reference": "81dac0ee4363c2359128aec844df31efb215dddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/72f4f7a02d6c98d9101e8616e0488bc0a785196d", - "reference": "72f4f7a02d6c98d9101e8616e0488bc0a785196d", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/81dac0ee4363c2359128aec844df31efb215dddc", + "reference": "81dac0ee4363c2359128aec844df31efb215dddc", "shasum": "" }, "require": { @@ -18592,9 +18604,9 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.20" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.21" }, - "time": "2026-03-13T13:44:51+00:00" + "time": "2026-04-17T13:00:39+00:00" }, { "name": "phpstan/phpstan-strict-rules", @@ -19180,21 +19192,21 @@ }, { "name": "rector/rector", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "000b7050b9e4fe98db2192971e56eb0b302b3feb" + "reference": "e645b6463c6a88ea5b44b17d3387d35a912c7946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/000b7050b9e4fe98db2192971e56eb0b302b3feb", - "reference": "000b7050b9e4fe98db2192971e56eb0b302b3feb", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/e645b6463c6a88ea5b44b17d3387d35a912c7946", + "reference": "e645b6463c6a88ea5b44b17d3387d35a912c7946", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.41" + "phpstan/phpstan": "^2.1.48" }, "conflict": { "rector/rector-doctrine": "*", @@ -19228,7 +19240,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.4.1" + "source": "https://github.com/rectorphp/rector/tree/2.4.2" }, "funding": [ { @@ -19236,7 +19248,7 @@ "type": "github" } ], - "time": "2026-04-08T08:43:56+00:00" + "time": "2026-04-16T13:07:34+00:00" }, { "name": "roave/security-advisories", @@ -19244,12 +19256,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "bb550b5adb0d4d74c4f6857c6b3b3638c022e90b" + "reference": "f41f65e527608a9a76cfbafd873756ed76c5452d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/bb550b5adb0d4d74c4f6857c6b3b3638c022e90b", - "reference": "bb550b5adb0d4d74c4f6857c6b3b3638c022e90b", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f41f65e527608a9a76cfbafd873756ed76c5452d", + "reference": "f41f65e527608a9a76cfbafd873756ed76c5452d", "shasum": "" }, "conflict": { @@ -19558,7 +19570,7 @@ "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<=2.3.4", + "froxlor/froxlor": "<2.3.6", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=7.1.0.0-RC4", @@ -19577,6 +19589,7 @@ "globalpayments/php-sdk": "<2", "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", + "goodoneuz/pay-uz": "<=2.2.24", "google/protobuf": "<4.33.6", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gp247/core": "<1.1.24", @@ -19639,6 +19652,7 @@ "jasig/phpcas": "<1.3.3", "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", + "joedolson/my-calendar": "<3.7.7", "joelbutcher/socialstream": "<5.6|>=6,<6.2", "johnbillion/query-monitor": "<3.20.4", "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", @@ -19663,8 +19677,8 @@ "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "khodakhah/nodcms": "<=3", - "kimai/kimai": "<2.53", + "khodakhah/nodcms": "<=3.4.1", + "kimai/kimai": "<=2.53", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -19724,6 +19738,7 @@ "manogi/nova-tiptap": "<=3.2.6", "mantisbt/mantisbt": "<2.28.1", "marcwillmann/turn": "<0.3.3", + "markhuot/craftql": "<=1.3.7", "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", @@ -19804,9 +19819,9 @@ "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<3.7.5", + "october/october": "<3.7.14|>=4,<4.1.10", "october/rain": "<=3.7.13|>=4,<=4.1.9", - "october/system": "<=3.7.13|>=4,<=4.1.9", + "october/system": "<3.7.16|>=4,<4.1.16", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -19814,7 +19829,7 @@ "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.16.1", + "openmage/magento-lts": "<20.17", "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1", "orchid/platform": ">=8,<14.43", @@ -19866,7 +19881,7 @@ "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", - "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", + "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", @@ -19901,7 +19916,7 @@ "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", - "processwire/processwire": "<=3.0.246", + "processwire/processwire": "<=3.0.255", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", @@ -19960,7 +19975,7 @@ "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", - "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/assets": "<2.4.5|>=3,<3.1.3", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", @@ -20013,9 +20028,9 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.16|>=6,<6.7.2", + "statamic/cms": "<5.73.20|>=6,<6.13", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<=2.1.64", + "studio-42/elfinder": "<2.1.67", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", @@ -20194,7 +20209,7 @@ "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", "yansongda/pay": "<=3.7.19", - "yeswiki/yeswiki": "<4.6", + "yeswiki/yeswiki": "<=4.6", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", @@ -20289,7 +20304,7 @@ "type": "tidelift" } ], - "time": "2026-04-15T20:21:07+00:00" + "time": "2026-04-21T17:25:01+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/reference.php b/config/reference.php index 1b8fdc8f..77a5d432 100644 --- a/config/reference.php +++ b/config/reference.php @@ -2353,6 +2353,8 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * proxy_namespace?: scalar|Param|null, // Default: "Jbtronics\\SettingsBundle\\Proxies" * default_storage_adapter?: scalar|Param|null, // Default: null * save_after_migration?: bool|Param, // Default: true + * yaml_mapping_paths?: list, + * metadata_compiler_providers?: list, * file_storage?: array{ * storage_directory?: scalar|Param|null, // Default: "%kernel.project_dir%/var/jbtronics_settings/" * default_filename?: scalar|Param|null, // Default: "settings" diff --git a/yarn.lock b/yarn.lock index f17966b2..9a4991c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,160 +837,160 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.6.2.tgz#87916c1c0afbad41ca5632c6e2a4b9eff2d1c162" - integrity sha512-WeYQHtGlxbuAZE2Uvi0t9A9Punb/jCBinsHvfNZ2a15AT9OvoANHx5XuvViikl9eGmkN6xErj3JzTTDPoqIcqg== +"@ckeditor/ckeditor5-adapter-ckfinder@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.7.0.tgz#cc565157bfb2f48abf7d2179ffc0ad3a685a806c" + integrity sha512-pl+x7dSoGg5JBgmfxBtnegA8sFPRSmCPZ2DZHsfvMzndgCsNsOl0lENmk+aBjHMlEHfKv0mEdSTfUYI2aKJqSw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-upload" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-upload" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-alignment@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.6.2.tgz#55d636762c6ac545ea322f3dda4e011679ff140c" - integrity sha512-is7p5+JboGUH2auOzeLti/rGBQL8WmUSOXiUjI54CVrwLX24Tg569EA4SeuCSvGQbc7upUQtXzjV+3bAKr5gQw== +"@ckeditor/ckeditor5-alignment@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.7.0.tgz#41829e54f45267f69fdff37cd1b34a924167b663" + integrity sha512-MKt0i5RB4dxng+sOTGe7UVTCFMMMYw6lrXHKZaI4yc00U+fLrVNLThs0PdBytPKynaz8kyZhkzOM1TGX6n6Dsg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-autoformat@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.6.2.tgz#5f14800113b9bf581616eb644d2e39465646cef4" - integrity sha512-0L2f6nVLfnpaWj7iQWmIKVbitb39jfj6ldduuR9dZbTQqGXkE4EbGqD5NLcbrFSMUW826umEfPbYg9pD2P80+Q== +"@ckeditor/ckeditor5-autoformat@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.7.0.tgz#a21b6d5bd476f6b701ff15068dfa4177feca7ed3" + integrity sha512-B1fJBTxtoNwG1ucFz2rxYRI9rVawbRBgzQR0lgyfy4PkRvNGfKvqn72w1CEx9d2thPPAtJJ7zsYGTp4oFcbH/g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-heading" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-heading" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-autosave@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.6.2.tgz#0fa155cf5f7414fc06e041c050ce5346194b1159" - integrity sha512-v2zqJaw2YkB4VAWXecYgIOFMurtXyOweqp1TB6QdoRUKfaI6pmQ6HwiSrnQxCcEZq5J8e53gwfHqWfgmB4TDrQ== +"@ckeditor/ckeditor5-autosave@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.7.0.tgz#224b31010610ca65362b6b9478575f12f9122a0b" + integrity sha512-B1qq3CMi+kjcJ9MUnmQ/cpB/Zc9sR3gw6fUhvnspcvSi9J+XSRQRJctMCIZDOrbtk6uMCBV4jXyGSUb6APx1ZQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-basic-styles@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.6.2.tgz#7130d24c7a8ac192e342151b8d140f8775cdb965" - integrity sha512-v/d3WcRAENVUOAuVuQEUJuksnX0q/cHRi3Xh5tv0U/WQDjTHzcYYj3bHp18erEuEhO08Kt9j+9wBbYmDPNAntg== +"@ckeditor/ckeditor5-basic-styles@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.7.0.tgz#a599be6e8569ec080f67a71b558d7f86a636be7e" + integrity sha512-enl1GhyyB0gpafbJ0w3IMol1BYTKfveCWvvLHRdqeBUHGYv3ixIAQC+gpMPLXv0dpQZLJYuJ47EglY+hjSOxXQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-block-quote@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.6.2.tgz#129577d298c5151d25371529950303ed4c24d8e4" - integrity sha512-Vlnq7Muj6d+Jxg23n9Dm3OA0fH8LVcTv5QT4uaxktrxbqDS7aaHKlHQh9OCW4ohzs4yLmGXAiuSO/wMmY4yW0g== +"@ckeditor/ckeditor5-block-quote@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.7.0.tgz#b665788d175e183be7b055eb39db2681ff95daa6" + integrity sha512-J5/CdFPL2M1x5/ko2Zr+24GhLzWuPGAO0MBo/7Wz319mPy8C7Jk2Eyjk3APwaYbJFq395RpOaqZCz3I2ROgYMA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-bookmark@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.6.2.tgz#00ccacdefb1fff7f76ae7f55f1f59c4b8931803f" - integrity sha512-Smn5CPafHkS/7J3olZ+XWKNASoXFh4PC0lQ5W4GWcOF4xSHYkK+O69hPPsLB3WmSzOuEF2iRimoNBiT3769gyQ== +"@ckeditor/ckeditor5-bookmark@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.7.0.tgz#39fbd0fb419faa98662884d0b75babae1a265205" + integrity sha512-LeKmsvQL+9LVKwA1Ki1tNrB90zXW/lPOVgJePxax/eDfJ4wB+rwvpddmESL6Kyayh4akK6jIdqFSTWCmOzbaKA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-link" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-link" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-ckbox@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.6.2.tgz#fbaecba4b9e6e3da21ba141c421bfb1c306a9890" - integrity sha512-3Lvdi/ngqLkDZraY4+y7N5OYB3QZwkiUGNnfTpxoyAsx+rARHl0Os+9n0oe3orMWPsE6tOAv/Y1xGe3x2Zyoug== +"@ckeditor/ckeditor5-ckbox@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.7.0.tgz#c949ef81991a40a802857983050f11eb2a558b7a" + integrity sha512-yQd9JeaT4v2xcnRZq1zCCc3TKcHQ8i/6PzB8H4r8JdlHv52HzMVs6ID/Dh989AWiUWcVirTuRC5HXVLECqUOVg== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-image" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-upload" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-cloud-services" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-image" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-upload" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" blurhash "2.0.5" - ckeditor5 "47.6.2" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ckfinder@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.6.2.tgz#39216ae0aa38c20c74026b7a6b09315cafa8ead3" - integrity sha512-1xXVw/R3wbsjzK/5gx2TRHqAtB8VBNx6ZKZrR1xbEkn6QSgIleLyKSDX55r3D9rH3bAJ6Simh62e+dRi7caxIw== +"@ckeditor/ckeditor5-ckfinder@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.7.0.tgz#0f35eb0bd718f73e73c1122eaa51e88f94014b8d" + integrity sha512-CJ8OwQhPA+GE9wxRcRf+e9H09pKQP84qlMY8R52yEKxlGx13t4S6XD+hknCVJ000urH/XAmpdHaPDc2XZ1X+pw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-image" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-image" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-clipboard@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.6.2.tgz#9c97879783fc9ec4735ebe58866b80d11afbef9b" - integrity sha512-Ufwo9j8TymmDLMUeTtV2uX3+KjpyK8ikWtQUxqhAs+Lkar4NXYioWjIcQHW7JsersNDae6WlAyEshrhUcxZi1g== +"@ckeditor/ckeditor5-clipboard@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.7.0.tgz#c9f30b247256032da4cef19bd2975be6dd6be5e7" + integrity sha512-cW1L289XXylwUWj9hy927fZJ+ygFZIV+5Y4cmTuf4htMuXYKOrMSDMraMc3Py8/I4nvdkegRKLDrbHmgtTBiFQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-cloud-services@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.6.2.tgz#a7a0d6118b39a9be28bb6ad651f9d3844787185e" - integrity sha512-u0AwAfzHDZxp6EqCfHf2u8I36LBWBYp+2iEWE7+VI8jwsdyy08Ow6m75ZbPGzE+W2rC9zSFXCzDiLr04EhAIWA== +"@ckeditor/ckeditor5-cloud-services@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.7.0.tgz#9937371c3ea61e2e55198d377d8c36acc368c507" + integrity sha512-Oic9q89t12xa7uBkzLcuF/QyUCieXFjQ5Wv5fs24+Z7mlM0kGgRlCtHHlPIw0PgwpEmk5ACWTI0TVHUpLRPJ+w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-code-block@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.6.2.tgz#139966bb1cbc119a1eb6c947fc3d2ca2548c34a4" - integrity sha512-fEGBiVuR9wszB/9OjY2npzIAdIiLy2pzltAfe9CW+lV599ci7S0s5QAfRGjg0aCHnwT9uJ6uE2BJiUsw9+ybPw== +"@ckeditor/ckeditor5-code-block@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.7.0.tgz#097dd7c177acff173badbf6fc0204fca447f8a21" + integrity sha512-qu5CIpschxz47Z7WCn6y/2jsK8oHReQElB35njtSVUwgOcGG2n2hxCbRnEBxM0Fllh3inIwAp56s8GUsyyiv1A== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-core@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.6.2.tgz#a1b304ccd4b46e7123914cac619e630b86e13966" - integrity sha512-Ra28vjVeciLH9Md2Pv5WFZ91M0hr5V0FJOAi7A/aVHbroVTdc8lyCW0Fxg49T4SM511hYsJ51FNhJqOZo1OAsQ== +"@ckeditor/ckeditor5-core@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.7.0.tgz#c0fcb55cec1c1b5f851275688c0823aa8edcab84" + integrity sha512-ock9l03yxBIDHu9t+Usi3Yrx/+UKCB90aK/9DlbKp8bizwZh/48C0YOFuvY64YX/RjiXndL3VMCCYCaWzODdOw== dependencies: - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-watchdog" "47.6.2" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-watchdog" "47.7.0" es-toolkit "1.39.5" "@ckeditor/ckeditor5-dev-translations@^53", "@ckeditor/ckeditor5-dev-translations@^53.4.0": @@ -1044,319 +1044,319 @@ through2 "^4.0.0" upath "^2.0.1" -"@ckeditor/ckeditor5-easy-image@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.6.2.tgz#c70e1164fbd920f884f9b80922de04c621e3d938" - integrity sha512-S71X9Uv+9vDSUKXJbCXXP/elBAxIxjExUrfWm/YV8nPCZKL+p6uUguo9WgNSCDUJDm/FDjjz8ageLisEFEIVvg== +"@ckeditor/ckeditor5-easy-image@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.7.0.tgz#04a7424c5041025f9d0c92642035dee67119b406" + integrity sha512-gk3KDAawRvr8HprcoySSl/t7pkYgVZDnZQP6dVrzyFHo5xyPxkW1DLQFsiqwVAJPr12PVBnkYUGycTwFRf2e7Q== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-upload" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-cloud-services" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-upload" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-editor-balloon@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.6.2.tgz#85e684f618453117cac591c91e2a998615dbe3c4" - integrity sha512-4TLf2iOcKVpoK7QdiYCzpOpakhgeuoHeWC40wE++SqcCNzdul/8vQ8cf9QFWC3+WoYAFbJ4lljjuFyjrDGofNQ== +"@ckeditor/ckeditor5-editor-balloon@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.7.0.tgz#3b6c433d82926c930846d6d1669318f19aab83ea" + integrity sha512-VyUa59C5hTpXW8DWjRnJsdHMkQiDOCjg7bCni7/u/9XcrgYbUWVSc4PThh4H104pS9TJSyIKyCSf+OqpyCqArA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-classic@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.6.2.tgz#5d315aa0a8a553e538efaa685fc83353bf135592" - integrity sha512-nhb6bkxk4YMPp36KenoFxSLJS9c+gm7C79m0reLU5Ohe2do6R++XQcSQ5CfMPAVNgxLZ/MVbAshTZjTsrUoD/Q== +"@ckeditor/ckeditor5-editor-classic@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.7.0.tgz#19efbb090601c42604db876d990260b5987eb076" + integrity sha512-iwLgAqrnc4Eu9YfQHTcgmrztPUgOj2Zyc8I3725WnRO2vil9Y6qFDx7JXYt3MhOfj358/D/ncIjSL0YSmyWgkw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-decoupled@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.6.2.tgz#4cd630d122a9f915a271f26650dcaea98ca02d49" - integrity sha512-694K2EwoBH+4oDvDrOk8Bxz/d30hessYZkZ+qUx0Zdlyhcwb5kGLBa+rmPx7txH8StAef4Vmn47QChqMPzo5TQ== +"@ckeditor/ckeditor5-editor-decoupled@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.7.0.tgz#a245bd370464493231d89c5956b5e1b49179e9e6" + integrity sha512-qQectSzm8heNQqkaaj+wx8YXKBmuiHp0F0IneQrcruPK7UScQ8pYF83k3NO+wCga4AtPXki5IDgM3VRN/6xuiQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-inline@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.6.2.tgz#4311ce185b414c3f31c03c0be152bfcc19fe1652" - integrity sha512-NRM7uvwb6ZW1zwFucPnA67OzVst+NPx+VDqLIcY4gMAxbFlBrLk+Cb/k1lPW2Vs6E9foMV1LhaEjoHFNzjHKOA== +"@ckeditor/ckeditor5-editor-inline@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.7.0.tgz#73ffc87e18e5689000bedc58471e34c756d125ff" + integrity sha512-deXc6pqT/no8zIyKnydfazK3fXXOrgkuP+4AMwNrkEqB17anWduC5LcUN0OcYz9AdEECpUsNMoONkvpdMsIS6Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-multi-root@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.6.2.tgz#21575e6eff9863b18308251ee6f25822be4fc2b6" - integrity sha512-INKZT6xC0cXmM18vgoewURSnz/S3Fal07QcjtRCmgSCGNTwKg/GkPKJ8oQrowsKy7zJUPXxSpKFGR1skfjRlfQ== +"@ckeditor/ckeditor5-editor-multi-root@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.7.0.tgz#ad12bfb6cefe71085d9263bfd18a9ff2ca1ea7c5" + integrity sha512-yvJPqmm5F3Oy8QQBHhGJj2vRKWyPcbmBjQ9Y68efeMwzwVl8toELTs7Ro6Kx8bYhIxjz3MphGExSqIQXxadZCg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-emoji@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.6.2.tgz#c229129774408eaeed7b8c3e1141a0e183d3416a" - integrity sha512-tkM7Z0nATuJTm73kr2SvsZPB7XkluhfdFVI+lZX+mFEqb+w+SjcEA9ex7naPQmK69Dn0ent5w70MFpKBvj4EJA== +"@ckeditor/ckeditor5-emoji@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.7.0.tgz#58aa3bc2380b34297492e5d84265b131d09dfc60" + integrity sha512-bXXuPnFsDVvv7LZKoiPGKabncpKha3MNcyzseoJ+I9Ong33YUtAKwFlXje5Tuc6dp+mrDUjuRGxk0raXetj3HA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-mention" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-mention" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.6.2.tgz#a8a3086a5a9db95334aa524450d6c42459d79f78" - integrity sha512-HAZIX0clN3ZgRWtffjGdZ0PQ7xaXGmVcnAAHwuOk6gwIFkwJHprOZiKGEySwFEwnfo5NF9steWrPf56tB47keQ== +"@ckeditor/ckeditor5-engine@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.7.0.tgz#745faf784de5120e81c2018332524b1215ba767c" + integrity sha512-RSeJPqi0dEaJmPqisaeQwRoouKsnvAJGnBmpAzQR8eVZh4qrP7+Ek+GwSbAo5iZkhNHfmurQSF7pxQsPc/020w== dependencies: - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-utils" "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-enter@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.6.2.tgz#b3ab729099569e7a0f3365c6d7222daf23ac64f8" - integrity sha512-jktgH3AGomON6YEl1N8qJZdckAidMjCYHWIE6A6JYgMJUB1ArM1nmwELNbBywFfp6oSXteRta4FegPy94nu5XA== +"@ckeditor/ckeditor5-enter@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.7.0.tgz#2c103f0f7decea1282c51dd30bfdf81d60e7e390" + integrity sha512-nU5vOxTBA/6UCa2qccQvPo/Aq9d9p8g9D45jlCaPJdsqf1YJO1baxpz+1qAqjCS1MfpyaarGiQ4YAhM6GEMC1g== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" -"@ckeditor/ckeditor5-essentials@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.6.2.tgz#7a9c9eeb284820bbb907080b27d1e9d7b8be7483" - integrity sha512-QKHA2Yf3TA3mdySWjCls5C/V2cG2D+F0W6ifXQlFSPBAlRgfDf7zVnuXBAHHCXcBI2lAssHkxjxz4FaArQcmXg== +"@ckeditor/ckeditor5-essentials@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.7.0.tgz#a6153af07a9b8607e46b61ff26f83fd5d9b5d735" + integrity sha512-h95DiV1Vbi3UtwFigM2m+2gjZtvNqU1ryIqINOaArikpqcMj5fZ6N8QblBwNSaeWwMTLIBXMJpck26g+C4zPHA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-select-all" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-undo" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-select-all" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-undo" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-find-and-replace@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.6.2.tgz#006683fedf86228e255dc8e24cc4f8fb65c7da3f" - integrity sha512-z1S4x+gonSgnnSe+MWdYi/eO59EvPvP16Legi0XRk5zMdd7Lgk57YLFEw9klkxeeEjNfKSq1Y8sIWV1MbmtRLA== +"@ckeditor/ckeditor5-find-and-replace@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.7.0.tgz#839c917476eae202f466fa620e58f488aa5f79d1" + integrity sha512-es2Vqsh3OCQsBUdNCC8FEIPaIM7pP9jAH4w42E4/qnnZO56xjbiQAW/TNISswYiyfrhHFt6OAIVadvq5llWdyA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-font@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.6.2.tgz#5fc484691afe3bde3c92554e3c225b7936a38960" - integrity sha512-sQMLwKV/K7NqsucOVKuMUuTO+BCAimQBwc6nIFp2YdArSEOTgnSdHvUvFaFTaL7ipwWE7glaN+6KlhV421QT+A== +"@ckeditor/ckeditor5-font@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.7.0.tgz#bf4b6158bedad9da112aef68a42a2f7a9210ebac" + integrity sha512-QJalhR9CA6tlxVydqwUv3Hunzy9oI9hqkzt4D6din1CIR+xxxp4Wokr3Zkae22jFzT7KrI7k7wAA9uD87Lu+sg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-fullscreen@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.6.2.tgz#1a8a22a85394f78d762efd59a3035a4a53042800" - integrity sha512-Djf7vdWoZX16GTPMCj0ULwk7c9FlMnadfA4bJtB6UQiXs/IP+rsWqCO0TsWzl/gUyPhYffupI03gvR+nKfqRLA== +"@ckeditor/ckeditor5-fullscreen@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.7.0.tgz#cf7003c46e4ef255d28cd366a222feace4eb49e1" + integrity sha512-nOul8Dc7xeRGr84rvmoAKrAwSsWghUxPCMalLt74JVMqJR9F8pq9Yyi0Dd/5VI2X8wNCZ6IBnTQDoNbmEHN2sg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-editor-classic" "47.6.2" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-editor-classic" "47.7.0" + "@ckeditor/ckeditor5-editor-decoupled" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-heading@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.6.2.tgz#da4c0eb487c3a151c6e830c81a68debfeb9432b6" - integrity sha512-qa87vYy8JXy5q+/o17jObVl2fzdxqOYMYblT0fks8Uqgj46TVUq9kdmHcA832RR4BUGTKQpRMWOPv2ukWhKpBA== +"@ckeditor/ckeditor5-heading@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.7.0.tgz#9f56ba371bfe1c54dae83e58cb60729c0ede9ad0" + integrity sha512-6W/7lzqNOBxhDzU+cPsBJGeRZgc44Ybaph/hmU9QHEUYdYMcPX4nCHtd5C5ydI21dWvXb2g+YLyMIbtS0m8TkQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-paragraph" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-paragraph" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-highlight@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.6.2.tgz#3c577d727eda716c19bd7ef269bedb2b5551494b" - integrity sha512-6jhnlxax4RAV9gbShe7buBWfAZ2L4KE3w20VwKX5zzgr7LMnoro8QkyzSmCEicKWD3zq+pkohYHbIAWr+Gakvg== +"@ckeditor/ckeditor5-highlight@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.7.0.tgz#ea3c6b249c0d24fecd1d81b37a4507c2d31e5f55" + integrity sha512-XTDHEMG4hyX6+eFEoJMyWzUTShWNn2If0bBr2A5YiEAVhPDVdv0zygT7V45npBDD0ja3qlLbfhSeSUfDg+c5uQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-horizontal-line@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.6.2.tgz#98f7be2ca3e325b46325fdcbd71cca92956df823" - integrity sha512-3rZohQ4kFIED0ARr/fBROMChsZgx+Sns0Zin0zrjC3znf8T0Dr3T4x/FPTIlSROtLpNcZ25NebCMb6s4o0iS2Q== +"@ckeditor/ckeditor5-horizontal-line@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.7.0.tgz#fb0f08a270009671eb9b2b1aef8569f199bd0f39" + integrity sha512-v+dbreSLaNFk0XrSCs2hvT4OK2JC5KTtrr8DBqq//LW7uIrW6WbONX5NksO4Pc+qRRH0k9vrd1mW3EG5MA6G8w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-html-embed@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.6.2.tgz#b25cf025213378dedd0e4d45f03541cdc155e3ad" - integrity sha512-OV8mCHq55oKCm6SXNkdt7HBJFD5uT1bhx1p6JIdXY3aLEM8CuyPg016/lsnFMbxnd6v0Gq3nE/gfmbTXC2IWxg== +"@ckeditor/ckeditor5-html-embed@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.7.0.tgz#0a898dc62853da5d9b4461e3f17b4dab88de689b" + integrity sha512-0gyJLXkE8V9kLVLSWa71biNN49FeqkJbDe26eIeT1baqmoFDUeGmiZZLVOgHGa8oCXUixnJDDho06gOrEHy42w== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-html-support@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.6.2.tgz#22b5d8fe8880fbbd258549a2d8d179d304edb67e" - integrity sha512-qsVxQ5fP5Ja5pq5kTV26EprXBGPOP3uFJqbzyc7DA/TVutdAFKo8/C96Rm8kTSJpS7tViFwBr8qMA+lhTJ2wcw== +"@ckeditor/ckeditor5-html-support@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.7.0.tgz#39483a55dddf8438c12fd2f25e16121c95561772" + integrity sha512-mczD/kr63l2QR4Pt+uJYGpvRvh96U82hTb0EJkqYei8IfWYXlsoaQxo0pQ6VoK8uOcLU0GCT5Sj2ruDnUd4uvw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-heading" "47.6.2" - "@ckeditor/ckeditor5-image" "47.6.2" - "@ckeditor/ckeditor5-list" "47.6.2" - "@ckeditor/ckeditor5-remove-format" "47.6.2" - "@ckeditor/ckeditor5-table" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-heading" "47.7.0" + "@ckeditor/ckeditor5-image" "47.7.0" + "@ckeditor/ckeditor5-list" "47.7.0" + "@ckeditor/ckeditor5-remove-format" "47.7.0" + "@ckeditor/ckeditor5-table" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-icons@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.6.2.tgz#d27f87d0e3a0884c62024c39917e8a3352d6a078" - integrity sha512-sMw14Zwsyls9qjSTEyPA1V8mAmr/amU2u0L2XPfLU6lEiyYZT5rGYrcaKLZcPjOfCA1OLEx6Ae3kS38Hpse1+w== +"@ckeditor/ckeditor5-icons@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.7.0.tgz#b35c3c62990198ca422938f904764eaa34bce913" + integrity sha512-4g4uH43E3EX9Sg4e8VYzaeD/GJINQlC1Zp8Gqdp22LRfQCXbkReVl/6dEZy//tmDm/9sBGzCSFXF4OhjowMS1Q== -"@ckeditor/ckeditor5-image@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.6.2.tgz#4ea561574731741bb86898c58b8ef404af626db8" - integrity sha512-qH+yGRva8n/9lVBHJZi5FdPxeDz6xNBeZNam/ef7OHDHwDrY2D7sCjwmtRjtbwphDUt7dogp//NfTQEUpcQIsA== +"@ckeditor/ckeditor5-image@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.7.0.tgz#70fccd666f3f7b6811458c942ac355c797905ec8" + integrity sha512-iTcZM9IsrhOqBZMKVv7fIU/j0ycDQgBwegCMUGHF/ZNpsAxLExSb47m3lo1SZIxINq+1D51aa6NkPGAyGubTHg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-undo" "47.6.2" - "@ckeditor/ckeditor5-upload" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-undo" "47.7.0" + "@ckeditor/ckeditor5-upload" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-indent@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.6.2.tgz#39757f4cd626ae621248ad38b66d760ee31d945a" - integrity sha512-KTzZHYdvwDuwjZDJSXPT/m7NA9gnVj1NojaCdTr1jcF1F0+j4wILmmoRv0qI1COzv2vn9uc61AEou4rwOhDSEw== +"@ckeditor/ckeditor5-indent@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.7.0.tgz#2b6f6996747ebab9c02ea0829cfd6f620f472017" + integrity sha512-CVmYtH3ATma0tQdaZt9hHM3j5bf8bNLbPW+99wLPnI8BMqVG+cCEUc/PuqJqq/OcUXkkrfQYUgvZ8Ki7TRGcbw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-heading" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-list" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-heading" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-list" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-language@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.6.2.tgz#1cbface222159556aad4347ce829b32f3c664a46" - integrity sha512-v3kx5fgPS6nbsReDlNl54j5XVGqsXFNOUo9e9GktvNQ5w0Vu+fntzMHu3PReHfiizuGH9A+1GZto3ZQ2RcsIsQ== +"@ckeditor/ckeditor5-language@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.7.0.tgz#01748eb57b1c7c8ff8063e00e0a6df2124435a87" + integrity sha512-VsxHrcqPpojGwP+l7ZS31HrNbGIYnU57pZZH2vySvSMHB5HePGmwj9KqOtR2g1VPvZaET/1ODQRMBo+2kUk/iA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-link@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.6.2.tgz#5205ca7dc9b7a0f0c0b10bbf9638c1186643cf0a" - integrity sha512-UJIPewfevj/w5cGPW133Pjkt9Zx1kxr3X3MdNKCtpa6IhnCVJ1iz84hSeMJohgrxW0KaslqiRI6a/y2aiD/KBw== +"@ckeditor/ckeditor5-link@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.7.0.tgz#16a02d763d8bb15d0b70644eb9cff64ce5d7c72b" + integrity sha512-+ZydBFDnUYYNGhlB8wYsMOUQB+UmnU+Xlq40ld5opFxlKGMCnj/+FnyynzEj1i1wPdbaMVjUTEkojz1K/TzttQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-image" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-image" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-list@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.6.2.tgz#3d05b6aa620d81caf4694f56cf2a2d5b7045204c" - integrity sha512-4YwM0IJRExbzXQ1PrTxAxj3WbADcjpGZbKqlZv+NspS8gWk8Pglz3pjfYfICS6CVJ0Y+1C8TR46/Tq22j6KeBA== +"@ckeditor/ckeditor5-list@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.7.0.tgz#c3c477dbe2b53e0959e393e6f9bc77672413aedc" + integrity sha512-cZ/HAaVg2nPmCPpT9Ts4vGCN5XEEMnFQhKvd9J+hjOCfAZVH8dQCGIIpk+7fQIjs8i33mk8VefsSLFlZAxLUwQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-font" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-font" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-markdown-gfm@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.6.2.tgz#adc32f2e73a2b89cf201a6d8601a33ed32692537" - integrity sha512-kmFjWXT+SbHIdAprxfKgDF4aKWE5doD+QqNTjRWifFoqpb9/Lz+rvCDZw2j1Tavnjtf0a0NY+ZwGaYWvY2zxLA== +"@ckeditor/ckeditor5-markdown-gfm@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.7.0.tgz#a99234f8ac05902fb3db22ca4381e1ff671e439e" + integrity sha512-DgsROdfPXcF0YHzv7WbGTf4F4Li4uTYMOaI1uIPeDtkAovA+kdHjemB7/U7ZcqcphxCTrkTZYC+d0XY3ceakoQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" "@types/hast" "3.0.4" - ckeditor5 "47.6.2" + ckeditor5 "47.7.0" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1372,277 +1372,277 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.6.2.tgz#4bf277a5874630133d731843bd1cbf3dbf05fc2f" - integrity sha512-3kYexm1NF/QXHIuh5Fj+SWcYTNQ6oEkgheYU7VxwILg9+Y2UoAf4s5TlX2K8yb07tc0bHsIFdjt8F4Nz8oagtw== +"@ckeditor/ckeditor5-media-embed@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.7.0.tgz#c86629201a0857c522f4a775e4b7484c314ca7d7" + integrity sha512-RwtLuL73Ld/JoOXQobmUwZYtExtfwId3FETmzqXkVr4OT7+tYdyxDuRbELBjw0fHCPCndR90/mzlYftMbVIK+A== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-undo" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-undo" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-mention@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.6.2.tgz#94c0441e7e9cf86df29661e4634763720efaa1e7" - integrity sha512-mT8toRkqXbatOx/YAFCnYlPqq6XjMdaUUqg7YqoA/OOjotOfqc4veoJ/BaaPAA043wq9LFjAkkpXhNUouTOOgg== +"@ckeditor/ckeditor5-mention@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.7.0.tgz#2a690b99530511a4ff1f92e30be5270722c89771" + integrity sha512-VLsXMWzUBz32/peIUJo0Q0hpKuEuvbmeyBLTMg+xtDquMtur2skKqvasHFW8HxJCHGCE9x57NDfVyNoeITMApQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-minimap@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.6.2.tgz#60e3173d34d469e86bf1c93efb28772c0986df4f" - integrity sha512-ACju165gL+VbFARNFoUao5MEHLBsfyU+19Q4Bukv4LufZlpvtJ56UuOzHLlhEoeOVIEAPE4v5cEl0/MVYCn8GA== +"@ckeditor/ckeditor5-minimap@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.7.0.tgz#5b40cacb35182ffa1b6864da7b446c58da5d1cc7" + integrity sha512-okM1UYc83CWyrtQXZXNGK+2GICjrEgE7DGAR9ZD0RxVvNm00tGTRuM2pTEhRvbMQIN3dyrfYpzo5/EQt8X2hMw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-page-break@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.6.2.tgz#dcd7aa61bda8dbc590f7e1e0c63f031e4cc31271" - integrity sha512-hUobTNQG8aTWkIZk3ya+3yHw9zXSQqyZdh3NdtQ21fb/lF7V7BVmdJ2lxQF3lZAeQcdax8nkaJj0l9DxRjPnfw== +"@ckeditor/ckeditor5-page-break@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.7.0.tgz#f91d8ed9b4c914afe2fc0192ab2df6ad2c234205" + integrity sha512-gxdDmu5R8VPLL6jEsycIIESUH74d+aK/8rqpvVIFkpUmGmMiLxYkpD4++5mN/1uD037kvEOvI/y+L1qH7NN5dw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-paragraph@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.6.2.tgz#3f8e0cadaf90ad205d51cdf3cd291e17779d234e" - integrity sha512-HfsCPGh56ezS2Vf9kitkrBt4NEGmeSO2yBwSog88RdBQOtqcLhM3Ks6HN3LPZoP7L9LxwekptQh3wVIlU1wjyA== +"@ckeditor/ckeditor5-paragraph@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.7.0.tgz#57b643db328464e31b431d34112a7c1391341e04" + integrity sha512-4yEdALU/UT1lR/7GBm1n5u0Id30m8MmIvQ67fbmDBWK+eqH+MFLobpBMEmuU4KLBeRU5qhX4JapZPUNBOHa1YQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" -"@ckeditor/ckeditor5-paste-from-office@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.6.2.tgz#697c121bfa095fe7d20d71656cd9b0e8f429ff95" - integrity sha512-9CjNW3Xfhy2AbMw0Ax6VJcAqMJGYwFm3p21MdDMEIWxDL8vmvKxNAGhsQRYvZ3oFHPHn5yTLDFRsKJiRTA8Vrw== +"@ckeditor/ckeditor5-paste-from-office@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.7.0.tgz#8648e5dbb5b6344f82f5a1fb6ca4408900f79ad2" + integrity sha512-MNFJITMDP+ar01pERwIRyrhiSkAyvwfP2LZEPzHI952guhx7SprTOC/GzcTf9mK7wabESb1uI194Xa/5Fym8wQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-remove-format@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.6.2.tgz#bf75a07e49c610bccef31d98503e60a334d17556" - integrity sha512-odaDDJcNwTzvo/VgiMlfk8Om2iCxnG8UcaTmOvY+Qdg9ZZ/B2oC4vdu+RRZ2493HLjDNDO/FjPD4j567aJKUFg== +"@ckeditor/ckeditor5-remove-format@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.7.0.tgz#1455b7fda38f27c6adbbfb85a0d201a80153c1f4" + integrity sha512-pCwoN2oqAuQ58fgsKyTWpfakCn3o+g9hH225IcJwq9IXiEHgvbvjTdK/8ATjSbPb3G+e4OFglYo7RuElGhFXqw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-restricted-editing@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.6.2.tgz#fa9fa8363b5c17f1ff9ce0f48322d8f55fea743f" - integrity sha512-FAbyy3IISxGTzFz7xB93+MXX44gMTAeF+ckqkz6wkx6qaxT5xTm9RUzIEV6rQ6lCZ5BAoFlCAPwMw2austn7ew== +"@ckeditor/ckeditor5-restricted-editing@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.7.0.tgz#f86abcd1f243c7f17d15bd0ba4cf0c548ffc0825" + integrity sha512-jIndEBQoVHV1aotNa9Ceec/xYo33XNa2GQgxxnCcZ5GxU2GOj4qI9wbXVRES0RceLk6AH+k0j+U4jOMgpXeqIA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-select-all@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.6.2.tgz#c6e0c7d40c4c4e039078b046a017b528c078d9b3" - integrity sha512-Q38YdkrRRVZ43Wzx3NR8/EJRw8HJ5Q6Dw8I6ZlYYUe1VtXpKruK/nXNsWPs1Ek83eFRK2xoggCcnotHN2DpVFQ== +"@ckeditor/ckeditor5-select-all@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.7.0.tgz#015125a72cf9022261f561858f62fbe131cd0adf" + integrity sha512-KT+2rDWwSynw2lQBmSdrh6emKahHxMOk3GqpSwX28jR+M6sDIFvNGQ0y2AvhGbphn69Tp+fZ85p6b3A/wj52rg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" -"@ckeditor/ckeditor5-show-blocks@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.6.2.tgz#92f48f6be795ebb075417af13ff2cde63dd74ad1" - integrity sha512-JiTD0J89j9UeSPWV7y9Y70SYXIRuaqvael/MEAv+ZTN8n6fPlVYY4vR9pVRjYZnajv2b7mJNRPHE07YdEJcWaA== +"@ckeditor/ckeditor5-show-blocks@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.7.0.tgz#fbe793e73594e0af18c1222821b76c9f2a0076eb" + integrity sha512-lgeWUZw8Taa2zzs5GJkARmtt2YUWD797snGZZxcLuOECicXgPonqqKceU0zHGZNC+vUul63EDXA/uDd4xRy1Vg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-source-editing@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.6.2.tgz#4262c717c881f372c2f930f68743d0c0026d19b4" - integrity sha512-e4xNQWZu+V04cEjN0z8jGbnT1iIWSho/uMcxC6NehZ8Y25cGmvtexxtYv+5oxIAm36n9ooCLRydiPQ5ONq5y0A== +"@ckeditor/ckeditor5-source-editing@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.7.0.tgz#b6232479ce523c98f7929d4a50891314023493b6" + integrity sha512-HQPVq48p6hoZus3rrGe5BY8ailE+4v/fR5kIzTT2aiCQ0mo/k6V5TcsDs5KNJBRRlXBvQt3H3Vc9gZ/6JRUizg== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-theme-lark" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-theme-lark" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-special-characters@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.6.2.tgz#4400fd2e479dd088702b2efb415c6aa120f0c28a" - integrity sha512-XVM1JNRC9XjS1w7xmVe9IbELyiWjUXfpdz9OtG02HHTYt9dgxarPyOYoCN65qvaqnivF+bpU3jFw6aMKbn5sng== +"@ckeditor/ckeditor5-special-characters@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.7.0.tgz#f90b9fbba11f35c8d28d241812da47a26a3cce39" + integrity sha512-AhPZ9KdrytVucNdt6jMOXve/9aTiPRIdEe1WaZ4GMNhSbWEj1qeT/UbPnJm8puIJ/Epmvq7bXPjV9qgXu4/5Pw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" -"@ckeditor/ckeditor5-style@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.6.2.tgz#55c526be8d4f5a4f8b6271ca1492b4a8e1527038" - integrity sha512-shv8BOQinzy30RmwliOcD8aCC8MqVrtJjiQBry2IXZ/WTkbZP4RDZR/uvuKhWvvz8Lk2tC7AEp6V3chSCpQ9oA== +"@ckeditor/ckeditor5-style@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.7.0.tgz#cb0873a06824993d22362e55617a8efa71bf76ee" + integrity sha512-fwaXaZP7tfsstKPfm5aW+DvJB5RpaSCASEYGbvXdTvjHANL6RAKx4SX+voOyxid+vZfdbYPJ6WrARWUI/jF3DA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-html-support" "47.6.2" - "@ckeditor/ckeditor5-list" "47.6.2" - "@ckeditor/ckeditor5-table" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-html-support" "47.7.0" + "@ckeditor/ckeditor5-list" "47.7.0" + "@ckeditor/ckeditor5-table" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-table@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.6.2.tgz#448c246731d1cbdee1b44e939dc47c44262f32eb" - integrity sha512-rTLISHR/YBlkTvso+F4SI4YUz9g+yKNxrHbsBgnMzbWzu96ecA0IVVTD3vg6Bt/xSzyWHdmj95ThMWuqWEJtRw== +"@ckeditor/ckeditor5-table@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.7.0.tgz#a5a0132db64993bc2d237193a8b4096c4ed1059f" + integrity sha512-F0bnZ0j97ooDCv2AaqQyUo9J3rYQYpjAppdwilCaoYHmfpGnx++SI6rqTSfb29pHSOhXoVLwmeGR7sit4OxOYg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-theme-lark@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.6.2.tgz#514e4b0a213b2217fc4af02edc2012e97e32108c" - integrity sha512-5NlbqKiwP6o8MrniSJ9SZPQ8eq17wBnH2YU3C8KoU+3/7NYPWgCebew3/xTxIfybvFtkHIDiWAEcy1TIHNpavw== +"@ckeditor/ckeditor5-theme-lark@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.7.0.tgz#2c9d6a5449353f08749f3094b479c28874ef6de1" + integrity sha512-MKyDX8Qgg/tskT7VJZC/s71tYYstOZmYGlZj82AKRxTMYC8KB5w0ikCVzxkOAbD3eYOc8xlyZkYHQznnx6NiJA== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.7.0" -"@ckeditor/ckeditor5-typing@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.6.2.tgz#407b567797e5c5f1f5655e164e4ec6c4a66ecb22" - integrity sha512-NDZ1J7g/E7mTUvqnXCloNt7zFtxvidrK4UplyOHGbHSFM1BNRAUc5Sugk3fzxrF8JgKZmKW5CaG2+p2avclbRA== +"@ckeditor/ckeditor5-typing@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.7.0.tgz#ff0f2eddd60a1bd827e36cfda17bc37022d08300" + integrity sha512-oM3K004DbInyb3uq9ciCgRAO91eq/q5SFcjD7dtItwUYboD1jzTnmV6Yp+QdxX2kJLICHzsfyAgyZKTUvEZtlw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ui@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.6.2.tgz#f0909751641c8d737c143b23d4accf02b044b6a8" - integrity sha512-jpdVYEkY+IenzsFK9TCfiotqDTRbkkitU6nBC3dVOTV8dNAa/oN/mizhtZNUD+mDblhTAVsx7IsjwpKcQgivvw== +"@ckeditor/ckeditor5-ui@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.7.0.tgz#78dac851009779d6189633a2deba9768cfa28613" + integrity sha512-eiNbp7JhBR/kAZ2DvT06u8KJpDhESGjIrLESGIn8/OzBYCpX+wqpx0Gj6WuKgK134bUI61qsYsLNqR15WcTaWA== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-editor-multi-root" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" "@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@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.6.2.tgz#96259e6b380493894e121a1d2382bef4b54ca621" - integrity sha512-RW1o7yui5/VPkS0IU9KGrVNADsuU33XpAQrquSJZasZabckFOuUxRP3W+CbxhRjHUBygBtBk5naJmEoNjYGglQ== +"@ckeditor/ckeditor5-undo@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.7.0.tgz#c460097dd2a21f5903dca043451b6d4c2a5b7759" + integrity sha512-DGGQZX+Bf8HnOlgPWtz2kVoVAuTLtFYYkJa9ihUmrdOHlbGB/mQu5DAtZSUBp/6pYabBu1vAlkiQTIUT78wOsw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" -"@ckeditor/ckeditor5-upload@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.6.2.tgz#2328b71e937d8ba0189cd563a3bc88fb1651ce9a" - integrity sha512-Q7KhQetBuxRly1yquasCS/ONHv8aNANOpFg6xUXlwOrbtFSIQsyLTIXrHXNA+xDzLEqZeGkd8GYa1AIHH5fs5g== +"@ckeditor/ckeditor5-upload@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.7.0.tgz#d5134d3c12a7d2c097711768a733fc4e026da255" + integrity sha512-OJrDuje7ZpKDed3RPAXnuGPsNV3xuBKwLC1AwKghG7c121GPSU+uILgHL0puefrVnbZbJ+JRrMjyf1LJKFfZww== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" -"@ckeditor/ckeditor5-utils@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.6.2.tgz#ac8d74cfd061455d5a2e39f1dc45eb83733e0470" - integrity sha512-qClamh5T1XxIBcC/7n2Svhhug6FIc4tilOrIgJbypU8SarWarrL4XrpI2yAv3gSfz23U+QA5CHBR5c08G5lUrA== +"@ckeditor/ckeditor5-utils@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.7.0.tgz#d676f2335121e5fadb0007edc053d66f77ea6e58" + integrity sha512-HBVctgNr/0AP9QV8tZ5zg+lY15bAcS3s8tS3yVngaN0Zrmn77XIGXixqYrOX6J64gBlJ541WDb20Uo0Z2PF4+Q== dependencies: - "@ckeditor/ckeditor5-ui" "47.6.2" + "@ckeditor/ckeditor5-ui" "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-watchdog@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.6.2.tgz#a9f67da32099fe7db123b687955347a36a0eb7de" - integrity sha512-r97uTUpn7v5yVFyrhwFUAG6uiLs7px0UG8d8lXPZTUm5XIDLuwCskrqO0r7U26No26V4+ph96QaEulnKeTTWVA== +"@ckeditor/ckeditor5-watchdog@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.7.0.tgz#a9179a52a85a51ff1c3df759e615a96eefa5d4d2" + integrity sha512-EYLj784TzBJZ5AAZzuAHGCoI12n54XPspnDxy4Un3k0fxjS0scxgB4Q5h4r3NMgeC8PfkYVeAw/I8rBZ7Dd33Q== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-editor-multi-root" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-widget@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.6.2.tgz#1783ffcb7533ffd3a11b01a383548a27b83a127b" - integrity sha512-XBvyI2qMLTMRFi+B7M6/7/GH7PJw91t6/LqrZkCFclhrmUpa5gZjDdVOpQvArOwot8CGz8sdawL5RBw/DcK2kA== +"@ckeditor/ckeditor5-widget@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.7.0.tgz#bbeea896d8fc629a9414638fb92359c87d536792" + integrity sha512-HoFEdRIb8DEo0QcIUqjw0HKSCROqWdPYYM4cH0YwTMektjA4KScUTN/8SEi4IMU913bTVuKpMeFBEYot4DSziQ== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-word-count@47.6.2": - version "47.6.2" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.6.2.tgz#a8f2ba52c5c82b9eace357d70f15f24fd9ff9435" - integrity sha512-fb2Z1zjz32NhMkgA/4wHua6IdaT7Td2FQP9GUqSF5gm53d1L8Yc/Hew5CiVHyWhMBNkdcef1o3a8/MFnP2LOfA== +"@ckeditor/ckeditor5-word-count@47.7.0": + version "47.7.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.7.0.tgz#f745581a3b0c61f583973fe0b403d79be2a7b02c" + integrity sha512-moeWGmQ6TOR8g9nPndHvanjyTWmT0bTKRzXdTruzI5CPJgxOvFRCDZVN+gzXeFq+5juzwA9nw+OW1PF6D9N6lw== dependencies: - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - ckeditor5 "47.6.2" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + ckeditor5 "47.7.0" es-toolkit "1.39.5" -"@colordx/core@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.0.3.tgz#d5021feffd7fbfc103f1347d2cbebb110de0120e" - integrity sha512-xBQ0MYRTNNxW3mS2sJtlQTT7C3Sasqgh1/PsHva7fyDb5uqYY+gv9V0utDdX8X80mqzbGz3u/IDJdn2d/uW09g== +"@colordx/core@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.2.0.tgz#fcf1f637b3f93f12aae57bd3929f3f90a7773627" + integrity sha512-wifnqsGCXRh+lJdX4975nKEPJaSk7k8rMiA/VeGrS4tOTn06WZrow6cUA7wFJKPXfcqj0rXeH4BMgGoKZvBf7g== "@csstools/selector-resolve-nested@^3.1.0": version "3.1.0" @@ -2732,9 +2732,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.10.12: - version "2.10.19" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz#7697721c22f94f66195d0c34299b1a91e3299493" - integrity sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g== + version "2.10.20" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.20.tgz#7c99b86d43ae9be3810cac515f4675802e1f6b87" + integrity sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ== big.js@^5.2.2: version "5.2.2" @@ -2928,72 +2928,72 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@47.6.2, ckeditor5@^47.0.0: - version "47.6.2" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.6.2.tgz#b13c15a2df9ce455a97ba195bbb13530ace15389" - integrity sha512-Ezi+mp/KAAelM8b1P4gbe9xLB6w70MwMQdlj5ZICju++klsbKdPfGM7Ufn0qe1AyEWelTFQQXYZbA+KO/aGxuw== +ckeditor5@47.7.0, ckeditor5@^47.0.0: + version "47.7.0" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.7.0.tgz#3dfc1c41e0c53130e0ddbab125b377b32f088e7a" + integrity sha512-j81Od9mv5+SkQdOV7OrwrxCqkv9p19V+x+H6ndpgTzchIn3o/pQYBG3pWloG5nb0oC9aebayxanUp/O/EIqHCQ== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "47.6.2" - "@ckeditor/ckeditor5-alignment" "47.6.2" - "@ckeditor/ckeditor5-autoformat" "47.6.2" - "@ckeditor/ckeditor5-autosave" "47.6.2" - "@ckeditor/ckeditor5-basic-styles" "47.6.2" - "@ckeditor/ckeditor5-block-quote" "47.6.2" - "@ckeditor/ckeditor5-bookmark" "47.6.2" - "@ckeditor/ckeditor5-ckbox" "47.6.2" - "@ckeditor/ckeditor5-ckfinder" "47.6.2" - "@ckeditor/ckeditor5-clipboard" "47.6.2" - "@ckeditor/ckeditor5-cloud-services" "47.6.2" - "@ckeditor/ckeditor5-code-block" "47.6.2" - "@ckeditor/ckeditor5-core" "47.6.2" - "@ckeditor/ckeditor5-easy-image" "47.6.2" - "@ckeditor/ckeditor5-editor-balloon" "47.6.2" - "@ckeditor/ckeditor5-editor-classic" "47.6.2" - "@ckeditor/ckeditor5-editor-decoupled" "47.6.2" - "@ckeditor/ckeditor5-editor-inline" "47.6.2" - "@ckeditor/ckeditor5-editor-multi-root" "47.6.2" - "@ckeditor/ckeditor5-emoji" "47.6.2" - "@ckeditor/ckeditor5-engine" "47.6.2" - "@ckeditor/ckeditor5-enter" "47.6.2" - "@ckeditor/ckeditor5-essentials" "47.6.2" - "@ckeditor/ckeditor5-find-and-replace" "47.6.2" - "@ckeditor/ckeditor5-font" "47.6.2" - "@ckeditor/ckeditor5-fullscreen" "47.6.2" - "@ckeditor/ckeditor5-heading" "47.6.2" - "@ckeditor/ckeditor5-highlight" "47.6.2" - "@ckeditor/ckeditor5-horizontal-line" "47.6.2" - "@ckeditor/ckeditor5-html-embed" "47.6.2" - "@ckeditor/ckeditor5-html-support" "47.6.2" - "@ckeditor/ckeditor5-icons" "47.6.2" - "@ckeditor/ckeditor5-image" "47.6.2" - "@ckeditor/ckeditor5-indent" "47.6.2" - "@ckeditor/ckeditor5-language" "47.6.2" - "@ckeditor/ckeditor5-link" "47.6.2" - "@ckeditor/ckeditor5-list" "47.6.2" - "@ckeditor/ckeditor5-markdown-gfm" "47.6.2" - "@ckeditor/ckeditor5-media-embed" "47.6.2" - "@ckeditor/ckeditor5-mention" "47.6.2" - "@ckeditor/ckeditor5-minimap" "47.6.2" - "@ckeditor/ckeditor5-page-break" "47.6.2" - "@ckeditor/ckeditor5-paragraph" "47.6.2" - "@ckeditor/ckeditor5-paste-from-office" "47.6.2" - "@ckeditor/ckeditor5-remove-format" "47.6.2" - "@ckeditor/ckeditor5-restricted-editing" "47.6.2" - "@ckeditor/ckeditor5-select-all" "47.6.2" - "@ckeditor/ckeditor5-show-blocks" "47.6.2" - "@ckeditor/ckeditor5-source-editing" "47.6.2" - "@ckeditor/ckeditor5-special-characters" "47.6.2" - "@ckeditor/ckeditor5-style" "47.6.2" - "@ckeditor/ckeditor5-table" "47.6.2" - "@ckeditor/ckeditor5-theme-lark" "47.6.2" - "@ckeditor/ckeditor5-typing" "47.6.2" - "@ckeditor/ckeditor5-ui" "47.6.2" - "@ckeditor/ckeditor5-undo" "47.6.2" - "@ckeditor/ckeditor5-upload" "47.6.2" - "@ckeditor/ckeditor5-utils" "47.6.2" - "@ckeditor/ckeditor5-watchdog" "47.6.2" - "@ckeditor/ckeditor5-widget" "47.6.2" - "@ckeditor/ckeditor5-word-count" "47.6.2" + "@ckeditor/ckeditor5-adapter-ckfinder" "47.7.0" + "@ckeditor/ckeditor5-alignment" "47.7.0" + "@ckeditor/ckeditor5-autoformat" "47.7.0" + "@ckeditor/ckeditor5-autosave" "47.7.0" + "@ckeditor/ckeditor5-basic-styles" "47.7.0" + "@ckeditor/ckeditor5-block-quote" "47.7.0" + "@ckeditor/ckeditor5-bookmark" "47.7.0" + "@ckeditor/ckeditor5-ckbox" "47.7.0" + "@ckeditor/ckeditor5-ckfinder" "47.7.0" + "@ckeditor/ckeditor5-clipboard" "47.7.0" + "@ckeditor/ckeditor5-cloud-services" "47.7.0" + "@ckeditor/ckeditor5-code-block" "47.7.0" + "@ckeditor/ckeditor5-core" "47.7.0" + "@ckeditor/ckeditor5-easy-image" "47.7.0" + "@ckeditor/ckeditor5-editor-balloon" "47.7.0" + "@ckeditor/ckeditor5-editor-classic" "47.7.0" + "@ckeditor/ckeditor5-editor-decoupled" "47.7.0" + "@ckeditor/ckeditor5-editor-inline" "47.7.0" + "@ckeditor/ckeditor5-editor-multi-root" "47.7.0" + "@ckeditor/ckeditor5-emoji" "47.7.0" + "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-enter" "47.7.0" + "@ckeditor/ckeditor5-essentials" "47.7.0" + "@ckeditor/ckeditor5-find-and-replace" "47.7.0" + "@ckeditor/ckeditor5-font" "47.7.0" + "@ckeditor/ckeditor5-fullscreen" "47.7.0" + "@ckeditor/ckeditor5-heading" "47.7.0" + "@ckeditor/ckeditor5-highlight" "47.7.0" + "@ckeditor/ckeditor5-horizontal-line" "47.7.0" + "@ckeditor/ckeditor5-html-embed" "47.7.0" + "@ckeditor/ckeditor5-html-support" "47.7.0" + "@ckeditor/ckeditor5-icons" "47.7.0" + "@ckeditor/ckeditor5-image" "47.7.0" + "@ckeditor/ckeditor5-indent" "47.7.0" + "@ckeditor/ckeditor5-language" "47.7.0" + "@ckeditor/ckeditor5-link" "47.7.0" + "@ckeditor/ckeditor5-list" "47.7.0" + "@ckeditor/ckeditor5-markdown-gfm" "47.7.0" + "@ckeditor/ckeditor5-media-embed" "47.7.0" + "@ckeditor/ckeditor5-mention" "47.7.0" + "@ckeditor/ckeditor5-minimap" "47.7.0" + "@ckeditor/ckeditor5-page-break" "47.7.0" + "@ckeditor/ckeditor5-paragraph" "47.7.0" + "@ckeditor/ckeditor5-paste-from-office" "47.7.0" + "@ckeditor/ckeditor5-remove-format" "47.7.0" + "@ckeditor/ckeditor5-restricted-editing" "47.7.0" + "@ckeditor/ckeditor5-select-all" "47.7.0" + "@ckeditor/ckeditor5-show-blocks" "47.7.0" + "@ckeditor/ckeditor5-source-editing" "47.7.0" + "@ckeditor/ckeditor5-special-characters" "47.7.0" + "@ckeditor/ckeditor5-style" "47.7.0" + "@ckeditor/ckeditor5-table" "47.7.0" + "@ckeditor/ckeditor5-theme-lark" "47.7.0" + "@ckeditor/ckeditor5-typing" "47.7.0" + "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-undo" "47.7.0" + "@ckeditor/ckeditor5-upload" "47.7.0" + "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-watchdog" "47.7.0" + "@ckeditor/ckeditor5-widget" "47.7.0" + "@ckeditor/ckeditor5-word-count" "47.7.0" cli-cursor@^5.0.0: version "5.0.0" @@ -3243,53 +3243,53 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^7.0.13: - version "7.0.13" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.13.tgz#b4bf247078a7cbbcf39d3d52d18b050784fdcf3a" - integrity sha512-/XvjNeb+oitOT9ks3Tg0UAsnXeHR1dh3wBMK/D/zN8gqvAHOp25FZGiLoQbvBBU203WXVNITkaqyFp4O/Rns4w== +cssnano-preset-default@^7.0.15: + version "7.0.15" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.15.tgz#464501cc908de8a9c18b8a59af36a21e1d955705" + integrity sha512-60kx7lJ40//HA85cIfQXSOJFby2D2V1pOMNHVCxue3KFWCjRzmiQyL9OvI+NAhwUlaojOfF9eK3nGvrJLCBUfQ== dependencies: browserslist "^4.28.2" css-declaration-sorter "^7.2.0" - cssnano-utils "^5.0.1" + cssnano-utils "^5.0.2" postcss-calc "^10.1.1" - postcss-colormin "^7.0.8" - postcss-convert-values "^7.0.10" - postcss-discard-comments "^7.0.6" - postcss-discard-duplicates "^7.0.2" - postcss-discard-empty "^7.0.1" - postcss-discard-overridden "^7.0.1" - postcss-merge-longhand "^7.0.5" - postcss-merge-rules "^7.0.9" - postcss-minify-font-values "^7.0.1" - postcss-minify-gradients "^7.0.3" - postcss-minify-params "^7.0.7" - postcss-minify-selectors "^7.0.6" - postcss-normalize-charset "^7.0.1" - postcss-normalize-display-values "^7.0.1" - postcss-normalize-positions "^7.0.1" - postcss-normalize-repeat-style "^7.0.1" - postcss-normalize-string "^7.0.1" - postcss-normalize-timing-functions "^7.0.1" - postcss-normalize-unicode "^7.0.7" - postcss-normalize-url "^7.0.1" - postcss-normalize-whitespace "^7.0.1" - postcss-ordered-values "^7.0.2" - postcss-reduce-initial "^7.0.7" - postcss-reduce-transforms "^7.0.1" - postcss-svgo "^7.1.1" - postcss-unique-selectors "^7.0.5" + postcss-colormin "^7.0.9" + postcss-convert-values "^7.0.11" + postcss-discard-comments "^7.0.7" + postcss-discard-duplicates "^7.0.3" + postcss-discard-empty "^7.0.2" + postcss-discard-overridden "^7.0.2" + postcss-merge-longhand "^7.0.6" + postcss-merge-rules "^7.0.10" + postcss-minify-font-values "^7.0.2" + postcss-minify-gradients "^7.0.4" + postcss-minify-params "^7.0.8" + postcss-minify-selectors "^7.1.0" + postcss-normalize-charset "^7.0.2" + postcss-normalize-display-values "^7.0.2" + postcss-normalize-positions "^7.0.3" + postcss-normalize-repeat-style "^7.0.3" + postcss-normalize-string "^7.0.2" + postcss-normalize-timing-functions "^7.0.2" + postcss-normalize-unicode "^7.0.8" + postcss-normalize-url "^7.0.2" + postcss-normalize-whitespace "^7.0.2" + postcss-ordered-values "^7.0.3" + postcss-reduce-initial "^7.0.8" + postcss-reduce-transforms "^7.0.2" + postcss-svgo "^7.1.2" + postcss-unique-selectors "^7.0.6" -cssnano-utils@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.1.tgz#f529e9aa0d7930512ca45b9e2ddb8d6b9092eb30" - integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== +cssnano-utils@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.2.tgz#92939eda38fb934151a8c87bd60764d1a27c5597" + integrity sha512-kt41WLK7FLKfePzPi645Y+/NtW/nNM7Su6nlNUfJyRNW3JcuU3JU7+cWJc+JexTeZ8dRBvFufefdG2XpXkIo0A== cssnano@^7.0.0, cssnano@^7.0.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.5.tgz#8b2d05e8d21574f193d706aeef7298b9231b9b09" - integrity sha512-4yEvjF2zcoAOWfNq6X687ORJc5SvM5xbg6EGuLSBmGoWZbsL69wpmw1tA3fZt7OwIG+G4ndjF95RSS4luvim7A== + version "7.1.7" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.7.tgz#152658ec9d24f080851c3010e61673d539765af7" + integrity sha512-N5LGn/OlhMxDTvKACwUPMzT34SSj1b022pvUAE/Vh6r2WD1aUCbc+QNIP/JjX9VVxebdJWZQ3352Lt4oF7dQ/g== dependencies: - cssnano-preset-default "^7.0.13" + cssnano-preset-default "^7.0.15" lilconfig "^3.1.3" csso@^5.0.5: @@ -3495,9 +3495,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^3.0.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.0.tgz#b1fc33ebdadb373241621e0a30e4ad81573dfd0b" - integrity sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg== + version "3.4.1" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.1.tgz#521d04483ac12631b2aedf434a5f5390933b8789" + integrity sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -3525,9 +3525,9 @@ eastasianwidth@^0.2.0: integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.328: - version "1.5.337" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.337.tgz#73051b9160d3960eea398d73323184cbdd6914de" - integrity sha512-15gKW9mRUNP9RdzhedJNypFUxtYWSXohFz2nTLzM272xbRXHws68kNDzyATG3qej+vUj/7Sn9hf5XTDh0XK6/w== + version "1.5.341" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.341.tgz#427b826ac41d406162b7700e6032c2b9cc4ecc5c" + integrity sha512-1sZTssferjgDgaqRTc0ieP+ozzpOy7LQTPTtEW3yQFn4+ORdIAZWV5BthXPyHF7YqLvFJCUPhNhdAJQYlYUgiw== emoji-regex@^8.0.0: version "8.0.0" @@ -3940,9 +3940,9 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + version "2.0.3" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.3.tgz#5e5c2b15b60370a4c7930c383dfb76bf17bc403c" + integrity sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg== dependencies: function-bind "^1.1.2" @@ -4439,9 +4439,9 @@ json5@^2.1.2, json5@^2.2.3: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" - integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + version "6.2.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.1.tgz#b6e31717f22cc37330b081ce0051ed5de53af2f6" + integrity sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q== dependencies: universalify "^2.0.0" optionalDependencies: @@ -5217,19 +5217,19 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== node-gyp@^12.1.0: - version "12.2.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.2.0.tgz#ff73f6f509e33d8b7e768f889ffc9738ad117b07" - integrity sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ== + version "12.3.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.3.0.tgz#a0e0d9364779451eaf4148b6f9a7366f98000b3f" + integrity sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" graceful-fs "^4.2.6" - make-fetch-happen "^15.0.0" nopt "^9.0.0" proc-log "^6.0.0" semver "^7.3.5" tar "^7.5.4" tinyglobby "^0.2.12" + undici "^6.25.0" which "^6.0.0" node-notifier@^9.0.0: @@ -5552,45 +5552,45 @@ postcss-calc@^10.1.1: postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" -postcss-colormin@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.8.tgz#457eb63f4438cb5799b01975c5a1604155eb4d7e" - integrity sha512-VX0JOZx0jECwGK0GZejIKvXIU+80S1zkjet31FVUYPZ4O+IPU3ZlntrPdPKT2HnKRMOkc0wy3m/v+c4UNta02g== +postcss-colormin@^7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.9.tgz#688b4f22599c9aedd3126f978580b43a4ced009f" + integrity sha512-EZpoUlmbXQUpe+g4ZaGM2kjGlHrQ7Bjzb3xHcNrC9ysI1tGoib6DAYvxg6aB7MGxsjgLF+Qx/jwZQkJ5cKDvXA== dependencies: - "@colordx/core" "^5.0.3" + "@colordx/core" "^5.2.0" browserslist "^4.28.2" caniuse-api "^3.0.0" postcss-value-parser "^4.2.0" -postcss-convert-values@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.10.tgz#cbf8bedef3acae5373ed9c98c4f289b72926adb3" - integrity sha512-hVqVH3cDkPyxL4Q0xpCquRAXjJDZ6hbpjC+PNWn8ZgHmNX3RZxLtruC3U2LY9EuNe+tp4QkcsZxg0htokmjydg== +postcss-convert-values@^7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.11.tgz#d13c80e74732d841894ba315410bfaae9be79545" + integrity sha512-H+s7P0f9jJylSysAHs3/5MhAx7GthDO05uw1h56L2xyEqpiLTFLEqBNw3PUYzD5p/AKwWaigCXf6FGELpOw9lw== dependencies: browserslist "^4.28.2" postcss-value-parser "^4.2.0" -postcss-discard-comments@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.6.tgz#4e9c696a83391d90b3ffa4485ac144e555db443c" - integrity sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw== +postcss-discard-comments@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.7.tgz#6e8226e8e818e37a98c7b6af5c66aa7b730e0d17" + integrity sha512-FJhE3fSte7HaRNL4iwD8LTG9vWqj3puxXIdig6LfrFqc1TJRUhY4kXOkeTXZZfTXYny+k+SO7fd2fymj1wduJg== dependencies: postcss-selector-parser "^7.1.1" -postcss-discard-duplicates@^7.0.2: +postcss-discard-duplicates@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.3.tgz#4a1c51219a1f347838744829db1064deb0758770" + integrity sha512-9cRxXwhEM/aNZon1qZyToX4NmjbFbxOGbww+0CnbYFDbbPRGZ8jg4IbM8UlA+CzkXxM35itxyaHKNqBBg/RTDg== + +postcss-discard-empty@^7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz#9cf3e659d4f94b046eef6f93679490c0250a8e4e" - integrity sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w== + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.2.tgz#4af6e7cb088ef807564a7e60bfe8db32feb8abcd" + integrity sha512-NZFouOmOwtngJVgkNeI1LtkzFdYqIurxgy4wq3qNvIiXFURTZ3b/K7q3dP3QitlWQ5imHDQL0qSorItQhoxb1g== -postcss-discard-empty@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz#b6c57e8b5c69023169abea30dceb93f98a2ffd9f" - integrity sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg== - -postcss-discard-overridden@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" - integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== +postcss-discard-overridden@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.2.tgz#aa12b18fa1f2dc7e6d6e51fe062ed839639329c0" + integrity sha512-Ym01X4v6U3sY8X0P1J9P+RTar+7JyLTOzDrxKSeaArFsLmkVu4KcAKPBWDYRIyZ/q4jwpSPnOnekeSSqXSXKUw== postcss-import@^16.0.0: version "16.1.1" @@ -5617,54 +5617,56 @@ postcss-loader@^8.0.0: jiti "^2.5.1" semver "^7.6.2" -postcss-merge-longhand@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" - integrity sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw== +postcss-merge-longhand@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.6.tgz#b24f1dfb297b1ae6d1ba33aa88176b23c2069d3c" + integrity sha512-lDsWeKRsssX/9vKFpingoRiuvGajtOGCJhs1kyaTJ5fzaVzs0aPPYe38UZ/ukMFEA5iuRIjQJHIkH2niYO3ubQ== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^7.0.5" + stylehacks "^7.0.10" -postcss-merge-rules@^7.0.9: - version "7.0.9" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.9.tgz#e281067714de26fa7d0ab50b706bd29b24fc7442" - integrity sha512-XKMXkHAegyLeIymVylg1Ro4NNHITInHPvmvybsIUximYfsg5fRw2b5TeqLTQwwg5cXEDVa556AAxvMve1MJuJA== +postcss-merge-rules@^7.0.10: + version "7.0.10" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.10.tgz#6b8d2c1e0fa72cf5c045356610c86108eb5af397" + integrity sha512-UXYKxkg8Cy1so/evF7AE/25PNXZb3E0SrvjdbtbGf+MW+doLenKqRLQzz6YZW469ktiXK2MVLFWtel/DftCV0Q== dependencies: browserslist "^4.28.2" caniuse-api "^3.0.0" - cssnano-utils "^5.0.1" + cssnano-utils "^5.0.2" postcss-selector-parser "^7.1.1" -postcss-minify-font-values@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz#6fb4770131b31fd5a2014bd84e32f386a3406664" - integrity sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ== +postcss-minify-font-values@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.2.tgz#8d831d8ddfe75d5062451d56f10d36a31e5cbea3" + integrity sha512-Z82NUmnvhPrvMUaHfkaAVBmWQq9F8Dox4Dy0LiwbaTxfmDUWLQtS+0WCgKViwdWCPPajiY9YzoQftgqKdXkM5g== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.3.tgz#5a866f18b3ae3f4bdbab78fc0776d38c87537bb4" - integrity sha512-2znRFq3Pg+Zo0ttzQxO7qIJdY2er1TOZbclHW2qMqBcHMmz+i6nn3roAyG3kuEDQTzbzd3gn24TAIifEfth1PQ== +postcss-minify-gradients@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.4.tgz#145615c2382e9c26e780a483b3ee0939688419b5" + integrity sha512-g8MNeNyN+lbwKy8DCtJ6zU6awBL0InBsSOaKmgZ1MdRLVItLQUNFNAzzzBnOp4qowOcyyB6GetTlQ0/0UNXvag== dependencies: - "@colordx/core" "^5.0.3" - cssnano-utils "^5.0.1" + "@colordx/core" "^5.2.0" + cssnano-utils "^5.0.2" postcss-value-parser "^4.2.0" -postcss-minify-params@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.7.tgz#afc93ae5958ddbcb3fa22e2178263b22e55d341e" - integrity sha512-OPmvW/9sjPEPQYnS2Sh6jvMW54wqk1IjjEMB8k/7V8SUIie71yMy3HQ9+w/ZHoL1YvgDGBQ/mCxP3n0Y/RxgqA== +postcss-minify-params@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.8.tgz#5d7f6e303bbf23ebc68899c0b1443a30cc4321d6" + integrity sha512-DIUKM5DZGTmxN7KFKT+rxt0FdPDmRrdK/k3n3+6Po+N/QYn06juwagHcfOVBG0CfCHwcnI612GAUCZc3eT+ZEg== dependencies: browserslist "^4.28.2" - cssnano-utils "^5.0.1" + cssnano-utils "^5.0.2" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.6.tgz#1e0240e1fa3372d81d3f0586591f1e8d2ae21e16" - integrity sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A== +postcss-minify-selectors@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.1.0.tgz#578e2ab5fb1b5156c4f18d7d64861ff656fd0aea" + integrity sha512-HYl/6I0aL+UvpA10t65BSa7h+tVjBgE6oRI5N/3ylX3vtwvlDL67G3FT3vYDPnTksxr0riiyJcT0tBtyRVoloA== dependencies: + browserslist "^4.28.1" + caniuse-api "^3.0.0" cssesc "^3.0.0" postcss-selector-parser "^7.1.1" @@ -5715,88 +5717,88 @@ postcss-nesting@^13.0.0: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" -postcss-normalize-charset@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" - integrity sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ== +postcss-normalize-charset@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.2.tgz#0d0b39ea2df240af4985f31ffa47690679a7a9a5" + integrity sha512-YoINoiR4YKlzfB95Y93b0DSxWy7FLw+1SADIaznMHb88AKizpzfF80tolmiDEbYr1UM4r4Hw+NZq37SwT5f3uw== -postcss-normalize-display-values@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz#feb40277d89a7f677b67a84cac999f0306e38235" - integrity sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ== +postcss-normalize-display-values@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.2.tgz#a90f6ec503b2c6441f04040108c5a123d7e0abe1" + integrity sha512-wu/NTSjnp8sX5TnEHVPN+eScjAtRs18ELtEduG+Ek3GxjeUDUT+VAA3PJjVIXBcVIk6fiLYFj2iKH0q99S3T2Q== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz#c771c0d33034455205f060b999d8557c2308d22c" - integrity sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ== +postcss-normalize-positions@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.3.tgz#79d185099da6d06b0eb417908e1564ba97082594" + integrity sha512-1CJI++oA3yK/fQlPUcEngUfcSWS08Pkt9fK+jVgL53mmtHDBHi0YiuB0m3D9BXwZjmfvCc2GQmFqCAF/CVcPzQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz#05fe4d838eedbd996436c5cab78feef9bb1ae57b" - integrity sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ== +postcss-normalize-repeat-style@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.3.tgz#479c79c371d685533c73ef491d7adf9a9759e74c" + integrity sha512-RvImJ2Ml4LZSx31qC2C8LDiz65IgBNATtwEr9r3Aue+D0cCGbj4rjNojb/uGpEm4QxnOTzFqMvaDYuKiT1Cmpg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz#0f111e7b5dfb6de6ab19f09d9e1c16fabeee232f" - integrity sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ== +postcss-normalize-string@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.2.tgz#a2d2111f320b88fa859212867beb8dd1f5f9e8c0" + integrity sha512-FqtrUh2BU2MnVeLeWBbJ2rwOjuDnA91XvoImc1BbgMWIxdxiPTaquflBHsmFBA3xh3pC3wPZO9W5MaIc7wU/Xw== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz#7b645a36f113fec49d95d56386c9980316c71216" - integrity sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg== +postcss-normalize-timing-functions@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.2.tgz#50b5b10f99f05bc1d920c6ff471f2ab9794b3fbf" + integrity sha512-5H5fpXBnMACEXzn7k9RP7qWZ1eWg8cuZkUuFygStY7icOj+UucwMWXeMmdkF/iITvTVa7fP85tdRCJeznpdFfQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.7.tgz#c94d2cd291bbe37dd25b8fe1a683a507c0709d41" - integrity sha512-Kfm0mC3gTnOC+SsLgxQqNEZStRxJgBaYrMpBe9fDVB0/MjC1G++FAeDW2YxYc5Mbvav12/7mOBSOTW7HK9Knwg== +postcss-normalize-unicode@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.8.tgz#315b2f008aa4a94d02de67ec84d9e9b1cd99f9bf" + integrity sha512-imCM3cwK3hvlAG4z1AzYM24m8BPA3/Jk/S71wfbn2I6+E2b+UwFaGvlNqydihXTSl3OFPeQXztqCzg+NGeSibQ== dependencies: browserslist "^4.28.2" postcss-value-parser "^4.2.0" -postcss-normalize-url@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz#d6471a22b6747ce93d7038c16eb9f1ba8b307e25" - integrity sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz#ab8e9ff1f3213f3f3851c0a7d0e4ce4716777cea" - integrity sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^7.0.2: +postcss-normalize-url@^7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz#0e803fbb9601e254270481772252de9a8c905f48" - integrity sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw== + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.2.tgz#5d530aa724a31cfd6b68b904eb542fd1af9cb7d3" + integrity sha512-bLnNY7t76NLRb9QQyCVmCN4qwoHxiq6vABH/CXav9wTuR6dNGHGQ72AyO/+h2quWxZk3l7BqxNL1vtDi9H6y1g== dependencies: - cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.7.tgz#a4c9f976ed1279e6bc59560fe45b3e3df9c434d4" - integrity sha512-evetDQPqkgrzHoP8g3HjE3KgH0j2W0je2Vt1pfTaO2KvmjulStxGC2IGeI2y0pdLi6ryEGc4nD08zpDRP9ge8w== +postcss-normalize-whitespace@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.2.tgz#eb91bdb73f04570e4fb7055493e61b5aedd69fb7" + integrity sha512-TNSVkuhkeOhl36WruQlflxOb7HweoeZowSusNpfsM1+ZvqJ24Mc+xksu05ecMQxlu+0zgI8pyznO2EWqDCQbLA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.3.tgz#8ad4cc375b9258904f88eefbfe6a9f13f3fe31b7" + integrity sha512-FTt6R9RF7NAYfpOHa2XFPm89FVuo5GiIbcfwOXFy1MYF38BeiNW9ke8ybw9Pk62eEsUlRVVbxHWA3B7ERYqOOA== + dependencies: + cssnano-utils "^5.0.2" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.8.tgz#81a3ac97722d55f415cbd18736e596b2fc9330e4" + integrity sha512-VeVRmbgpgTZuRcDQdqnsB4iYTeS2dBRV07UdwK6V3x61F1xTQ2pgIzHBIR4rQYRlXRNKBTGYYhEL1eNA7w9vaQ== dependencies: browserslist "^4.28.2" caniuse-api "^3.0.0" -postcss-reduce-transforms@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz#f87111264b0dfa07e1f708d7e6401578707be5d6" - integrity sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g== +postcss-reduce-transforms@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.2.tgz#f40d635a56f6417c7e02bbebb0bf082d4f84d988" + integrity sha512-OV5P9hMnf7kEkeXVXyS5ESqxbIls7a3TqFymUAV5JICO/9YCBEU+QQhQjZiDHaLwFdV7/CL481kVeBUk5FdY3w== dependencies: postcss-value-parser "^4.2.0" @@ -5813,18 +5815,18 @@ postcss-simple-vars@^7.0.1: resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz#836b3097a54dcd13dbd3c36a5dbdd512fad2954c" integrity sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A== -postcss-svgo@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.1.tgz#14b90fd2a1b1f27bcb2d0ef0444f954237e7883c" - integrity sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg== +postcss-svgo@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.2.tgz#67ffebb2910523cba32188732bbe8d8095bda9c2" + integrity sha512-ixExc8m+/68yuSYQzV/1DgtTup/7nI2dN9eiDS5GMRUzeCH4q9UcqeZPwcSVhdf8ay9fRwXDUHwcY5/XzQSszQ== dependencies: postcss-value-parser "^4.2.0" svgo "^4.0.1" -postcss-unique-selectors@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.5.tgz#a7dd5652c95f459176e5f135c021473e4ee58874" - integrity sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg== +postcss-unique-selectors@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.6.tgz#fdbb14c57ebb3afa4b79c086841cf23e7d1473b6" + integrity sha512-cDxnYw1QuBMW5w3svZ0BlYF0IA4Amr+1JoTLXzu6vDFPNwohN2QU+sPZNx15b930LR7ce+/600h28/cYoxO9vw== dependencies: postcss-selector-parser "^7.1.1" @@ -6487,10 +6489,10 @@ style-loader@^4.0.0: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== -stylehacks@^7.0.5: - version "7.0.9" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.9.tgz#7efc8fed8155364a7e2760c496d65c992a255cb2" - integrity sha512-dgipCLBa16sZDoQ8BmXdRwV4SmFAxZ4KtbMhV0buow62M/2l6Jq6AkVsKUY/QFr8+VjgzXO5UVHx1f+vvY9DXw== +stylehacks@^7.0.10: + version "7.0.10" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.10.tgz#1fdeab7bb40c85074e60286f8053700d9d7436cc" + integrity sha512-sRJ7klmhe/Fl5woJcbJUa2qP1Ueffsl1CQI4ePvqXLkZmcIuAt09aP9uT/FOFPqXh9Rh8M5UkgEnwTdTKn/Aag== dependencies: browserslist "^4.28.2" postcss-selector-parser "^7.1.1" @@ -6538,9 +6540,9 @@ tagged-tag@^1.0.0: integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.2.tgz#86755feabad08d82a26b891db044808c6ad00f15" - integrity sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" + integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== tar@^7.4.3, tar@^7.5.4: version "7.5.13" @@ -6611,9 +6613,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tom-select@^2.1.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.5.2.tgz#77dd4bc780b1ea72905337b24f04ce19dc6d2ca1" - integrity sha512-VAlGj5MBWVLMJje2NwA3XSmxa7CUFpp1tdzFZ8wymCkcLeP0NwF4ARmSuUK4BWbmSN1fETlSazWkMIxEpP4GdQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.6.0.tgz#8582363389dd17157ed11692320530bcd4111fbf" + integrity sha512-o2ToBjhUAnrrQvW/hrY9c//TpOpAKYSlfuFnf0DIwNy+ua+mmYnsF4PxN/PpzBfUIfEFkNYAngeGBfOAZWF3tw== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" @@ -6664,22 +6666,27 @@ tuf-js@^4.1.0: make-fetch-happen "^15.0.1" type-fest@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.5.0.tgz#78fca72f3a1f9ec964e6ae260db492b070c56f3b" - integrity sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g== + version "5.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.6.0.tgz#502f7a003b7309e96a7e17052cc2ab2c7e5c7a31" + integrity sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA== dependencies: tagged-tag "^1.0.0" typescript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.2.tgz#0b1bfb15f68c64b97032f3d78abbf98bdbba501f" - integrity sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ== + version "6.0.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.3.tgz#90251dc007916e972786cb94d74d15b185577d21" + integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== undici-types@~7.19.0: version "7.19.2" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.19.2.tgz#1b67fc26d0f157a0cba3a58a5b5c1e2276b8ba2a" integrity sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg== +undici@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.25.0.tgz#8c4efb8c998dc187fc1cfb5dde1ef19a211849fb" + integrity sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" From 90d327fdaa8fca8b43a491537c1221c3d5167fe8 Mon Sep 17 00:00:00 2001 From: Rahul Singh <27360432+rahools@users.noreply.github.com> Date: Sun, 22 Mar 2026 11:59:36 +0530 Subject: [PATCH 051/108] Added AI Assisted Information Provider --- .../Providers/AIInfoExtractor.php | 490 ++++++++++++++++++ .../Providers/ProviderCapabilities.php | 6 + .../AIExtractorSettings.php | 58 +++ .../InfoProviderSettings.php | 3 + 4 files changed, 557 insertions(+) create mode 100644 src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php create mode 100644 src/Settings/InfoProviderSystem/AIExtractorSettings.php diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php new file mode 100644 index 00000000..d075ea1d --- /dev/null +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -0,0 +1,490 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem\Providers; + +use App\Entity\Parts\ManufacturingStatus; +use App\Services\InfoProviderSystem\DTOs\FileDTO; +use App\Services\InfoProviderSystem\DTOs\ParameterDTO; +use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; +use App\Services\InfoProviderSystem\DTOs\PriceDTO; +use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; +use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; +use App\Settings\InfoProviderSystem\AIExtractorSettings; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +class AIInfoExtractor implements InfoProviderInterface +{ + private const DISTRIBUTOR_NAME = 'AI Extracted'; + + private readonly HttpClientInterface $httpClient; + + public function __construct(HttpClientInterface $httpClient, private readonly AIExtractorSettings $settings) + { + $this->httpClient = $httpClient->withOptions([ + 'timeout' => 30, + 'headers' => [ + 'User-Agent' => 'Mozilla/5.0 (compatible; Part-DB AI-Extractor/1.0)', + ], + ]); + } + + public function getProviderInfo(): array + { + return [ + 'name' => 'AI Information Extractor', + 'description' => 'Extract part info from any URL using OpenRouter LLM', + 'url' => 'https://openrouter.ai', + 'disabled_help' => 'Configure OpenRouter API key in settings', + 'settings_class' => AIExtractorSettings::class, + ]; + } + + public function getProviderKey(): string + { + return 'ai_extractor'; + } + + public function isActive(): bool + { + return !empty($this->settings->apiKey) && $this->settings->enabled; + } + + public function searchByKeyword(string $keyword): array + { + // Treat the keyword as a URL and return a single search result + $url = $this->normalizeURL($keyword); + + try { + $part = $this->getDetails($url); + return [ + new SearchResultDTO( + provider_key: $this->getProviderKey(), + provider_id: $url, + name: $part->name, + description: $part->description, + category: $part->category, + manufacturer: $part->manufacturer, + mpn: $part->mpn, + preview_image_url: $part->preview_image_url, + manufacturing_status: $part->manufacturing_status, + provider_url: $part->provider_url, + footprint: $part->footprint, + gtin: $part->gtin, + ), + ]; + } catch (\Throwable $e) { + // Return empty array on error + return []; + } + } + + public function getDetails(string $id): PartDetailDTO + { + $url = $this->normalizeURL($id); + + // Fetch HTML content + $response = $this->httpClient->request('GET', $url); + $html = $response->getContent(); + + // Clean HTML + $cleanedHtml = $this->cleanHTML($html); + + // Truncate to max content length + $truncatedHtml = $this->truncateHTML($cleanedHtml, $this->settings->maxContentLength); + + // Call OpenRouter API + $llmResponse = $this->callOpenRouterAPI($truncatedHtml, $url); + + // Parse JSON response + $data = json_decode($llmResponse, true, 512, JSON_THROW_ON_ERROR); + + // Build and return PartDetailDTO + return $this->buildPartDetailDTO($data, $url); + } + + public function getCapabilities(): array + { + return [ + ProviderCapabilities::BASIC, + ProviderCapabilities::PICTURE, + ProviderCapabilities::DATASHEET, + ProviderCapabilities::PRICE, + ProviderCapabilities::PARAMETERS, + ]; + } + + private function normalizeURL(string $url): string + { + // Add https:// if no protocol + if (!preg_match('/^https?:\/\//', $url)) { + $url = 'https://' . ltrim($url, '/'); + } + + // Validate URL + if (filter_var($url, FILTER_VALIDATE_URL) === false) { + throw new \InvalidArgumentException("Invalid URL: $url"); + } + + return $url; + } + + private function cleanHTML(string $html): string + { + // Remove script tags + $html = preg_replace('/]*>(.*?)<\/script>/is', '', $html); + + // Remove style tags + $html = preg_replace('/]*>(.*?)<\/style>/is', '', $html); + + // Remove nav tags + $html = preg_replace('/]*>(.*?)<\/nav>/is', '', $html); + + // Remove footer tags + $html = preg_replace('/]*>(.*?)<\/footer>/is', '', $html); + + // Remove header tags + $html = preg_replace('/]*>(.*?)<\/header>/is', '', $html); + + // Remove HTML comments + $html = preg_replace('//is', '', $html); + + return $html; + } + + private function truncateHTML(string $html, int $maxLength): string + { + if (strlen($html) <= $maxLength) { + return $html; + } + + // Truncate and find the last > or space to avoid cutting tags + $truncated = substr($html, 0, $maxLength); + + // Find the last occurrence of > or space + $lastPos = max(strrpos($truncated, '>'), strrpos($truncated, ' ')); + + if ($lastPos !== false && $lastPos > $maxLength * 0.9) { + $truncated = substr($truncated, 0, $lastPos + 1); + } + + return $truncated; + } + + private function callOpenRouterAPI(string $htmlContent, string $url): string + { + $systemPrompt = $this->buildSystemPrompt(); + + // Define the tool/function for structured output + $toolDefinition = [ + 'type' => 'function', + 'function' => [ + 'name' => 'extract_part_info', + 'description' => 'Extract electronic component information from a webpage', + 'parameters' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string', 'description' => 'Product name'], + 'description' => ['type' => 'string', 'description' => 'Product description'], + 'manufacturer' => ['type' => ['string', 'null'], 'description' => 'Manufacturer name'], + 'mpn' => ['type' => ['string', 'null'], 'description' => 'Manufacturer Part Number'], + 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], + 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], + 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], + 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass in grams'], + 'parameters' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string'], + 'value' => ['type' => 'string'], + 'unit' => ['type' => ['string', 'null']], + ], + 'required' => ['name', 'value'], + ], + ], + 'datasheets' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => ['type' => 'string'], + 'description' => ['type' => 'string'], + ], + 'required' => ['url'], + ], + ], + 'images' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => ['type' => 'string'], + 'description' => ['type' => 'string'], + ], + 'required' => ['url'], + ], + ], + 'vendor_infos' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'distributor_name' => ['type' => 'string'], + 'order_number' => ['type' => ['string', 'null']], + 'product_url' => ['type' => 'string'], + 'prices' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'minimum_quantity' => ['type' => 'integer'], + 'price' => ['type' => 'number'], + 'currency' => ['type' => 'string'], + ], + 'required' => ['minimum_quantity', 'price', 'currency'], + ], + ], + ], + 'required' => ['distributor_name', 'product_url'], + ], + ], + 'manufacturer_product_url' => ['type' => ['string', 'null'], 'description' => 'Manufacturer product page URL'], + ], + 'required' => ['name', 'description'], + ], + ], + ]; + + $payload = [ + 'model' => $this->settings->model, + 'messages' => [ + [ + 'role' => 'system', + 'content' => $systemPrompt, + ], + [ + 'role' => 'user', + 'content' => "Extract part information from this webpage content:\n\nURL: $url\n\n$htmlContent", + ], + ], + 'tools' => [$toolDefinition], + 'tool_choice' => ['type' => 'function', 'function' => ['name' => 'extract_part_info']], + 'max_tokens' => 4096, + 'temperature' => 0.1, + ]; + + $response = $this->httpClient->request('POST', 'https://openrouter.ai/api/v1/chat/completions', [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->settings->apiKey, + 'Content-Type' => 'application/json', + 'HTTP-Referer' => 'https://github.com/Part-DB/Part-DB-server', + 'X-Title' => 'Part-DB AI Info Extractor', + ], + 'json' => $payload, + ]); + + $data = $response->toArray(); + + $message = $data['choices'][0]['message'] ?? null; + if ($message === null) { + throw new \RuntimeException('No response message from LLM'); + } + + // Check if the model used the tool/function call + if (isset($message['tool_calls']) && !empty($message['tool_calls'])) { + foreach ($message['tool_calls'] as $toolCall) { + if ($toolCall['function']['name'] === 'extract_part_info') { + return $toolCall['function']['arguments']; + } + } + } + + // Fallback to content if no tool call (some models might not support tool calling) + $content = $message['content'] ?? throw new \RuntimeException('No response content from LLM'); + + // Strip markdown code blocks if present (fallback for models without tool support) + $content = preg_replace('/^```(?:json)?\s*\n?/i', '', $content); + $content = preg_replace('/\n?```\s*$/i', '', $content); + $content = trim($content); + + return $content; + } + + private function buildSystemPrompt(): string + { + return <<<'PROMPT' +You are an expert at extracting electronic component information from web pages. Extract structured data in JSON format. + +Return ONLY a valid JSON object with this exact structure: +{ + "name": "string", + "description": "string", + "manufacturer": "string | null", + "mpn": "string | null", + "category": "string | null", + "manufacturing_status": "active|obsolete|nrfnd|discontinued|null", + "footprint": "string | null", + "mass": "number | null (in grams)", + "parameters": [{"name": "string", "value": "string", "unit": "string | null"}], + "datasheets": [{"url": "string", "description": "string"}], + "images": [{"url": "string", "description": "string"}], + "vendor_infos": [{ + "distributor_name": "string", + "order_number": "string | null", + "product_url": "string", + "prices": [{"minimum_quantity": int, "price": number, "currency": "string"}] + }], + "manufacturer_product_url": "string | null" +} + +Rules: +- manufacturing_status: Use "active", "obsolete", "nrfnd" (not recommended for new designs), "discontinued", or null +- parameters: Extract technical specs like voltage, current, temperature, etc. +- prices: Extract pricing tiers with minimum_quantity, price, and currency code +- URLs must be absolute (include https://...) +- If information is not found, use null +- Return ONLY the JSON, no explanation text + +For parameters, combine name, value, and unit. The unit should be separate if possible. +PROMPT; + } + + private function buildPartDetailDTO(array $data, string $url): PartDetailDTO + { + // Map manufacturing status + $manufacturingStatus = null; + if (!empty($data['manufacturing_status'])) { + $status = strtolower((string) $data['manufacturing_status']); + $manufacturingStatus = match ($status) { + 'active' => ManufacturingStatus::ACTIVE, + 'obsolete', 'discontinued' => ManufacturingStatus::DISCONTINUED, + 'nrfnd', 'not recommended for new designs' => ManufacturingStatus::NRFND, + 'eol' => ManufacturingStatus::EOL, + 'announced' => ManufacturingStatus::ANNOUNCED, + default => null, + }; + } + + // Build parameters + $parameters = null; + if (!empty($data['parameters']) && is_array($data['parameters'])) { + $parameters = []; + foreach ($data['parameters'] as $p) { + if (!empty($p['name'])) { + $value = $p['value'] ?? ''; + $unit = $p['unit'] ?? null; + // Combine value and unit for parsing + $valueWithUnit = $unit ? $value . ' ' . $unit : $value; + $parameters[] = ParameterDTO::parseValueField( + name: $p['name'], + value: $valueWithUnit + ); + } + } + } + + // Build datasheets + $datasheets = null; + if (!empty($data['datasheets']) && is_array($data['datasheets'])) { + $datasheets = []; + foreach ($data['datasheets'] as $d) { + if (!empty($d['url'])) { + $datasheets[] = new FileDTO( + url: $d['url'], + name: $d['description'] ?? 'Datasheet' + ); + } + } + } + + // Build images + $images = null; + if (!empty($data['images']) && is_array($data['images'])) { + $images = []; + foreach ($data['images'] as $i) { + if (!empty($i['url'])) { + $images[] = new FileDTO( + url: $i['url'], + name: $i['description'] ?? 'Image' + ); + } + } + } + + // Build vendor infos + $vendorInfos = null; + if (!empty($data['vendor_infos']) && is_array($data['vendor_infos'])) { + $vendorInfos = []; + foreach ($data['vendor_infos'] as $v) { + $prices = []; + if (!empty($v['prices']) && is_array($v['prices'])) { + foreach ($v['prices'] as $p) { + $prices[] = new PriceDTO( + minimum_discount_amount: (int) ($p['minimum_quantity'] ?? 1), + price: (string) ($p['price'] ?? 0), + currency_iso_code: $p['currency'] ?? 'USD', + price_related_quantity: (int) ($p['minimum_quantity'] ?? 1), + ); + } + } + + $vendorInfos[] = new PurchaseInfoDTO( + distributor_name: $v['distributor_name'] ?? self::DISTRIBUTOR_NAME, + order_number: $v['order_number'] ?? 'Unknown', + prices: $prices, + product_url: $v['product_url'] ?? $url, + ); + } + } + + // Get preview image URL + $previewImageUrl = null; + if (!empty($data['images']) && is_array($data['images']) && !empty($data['images'][0]['url'])) { + $previewImageUrl = $data['images'][0]['url']; + } + + return new PartDetailDTO( + provider_key: $this->getProviderKey(), + provider_id: $url, + name: $data['name'] ?? 'Unknown', + description: $data['description'] ?? '', + category: $data['category'] ?? null, + manufacturer: $data['manufacturer'] ?? null, + mpn: $data['mpn'] ?? null, + preview_image_url: $previewImageUrl, + manufacturing_status: $manufacturingStatus, + provider_url: $url, + footprint: $data['footprint'] ?? null, + mass: isset($data['mass']) && is_numeric($data['mass']) ? (float) $data['mass'] : null, + notes: null, + datasheets: $datasheets, + images: $images, + parameters: $parameters, + vendor_infos: $vendorInfos, + manufacturer_product_url: $data['manufacturer_product_url'] ?? null, + ); + } +} diff --git a/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php b/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php index 21fba53b..3a7d03e9 100644 --- a/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php +++ b/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php @@ -46,6 +46,9 @@ enum ProviderCapabilities /** Provider can provide GTIN for a part */ case GTIN; + /** Provider can provide parameters/specifications for a part */ + case PARAMETERS; + /** * Get the order index for displaying capabilities in a stable order. * @return int @@ -59,6 +62,7 @@ enum ProviderCapabilities self::PRICE => 4, self::FOOTPRINT => 5, self::GTIN => 6, + self::PARAMETERS => 7, }; } @@ -71,6 +75,7 @@ enum ProviderCapabilities self::DATASHEET => 'datasheet', self::PRICE => 'price', self::GTIN => 'gtin', + self::PARAMETERS => 'parameters', }; } @@ -83,6 +88,7 @@ enum ProviderCapabilities self::DATASHEET => 'fa-file-alt', self::PRICE => 'fa-money-bill-wave', self::GTIN => 'fa-barcode', + self::PARAMETERS => 'fa-list-ul', }; } } diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php new file mode 100644 index 00000000..c78ca96e --- /dev/null +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -0,0 +1,58 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\InfoProviderSystem; + +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsParameter; +use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Translation\TranslatableMessage as TM; + +#[Settings(name: "ai_extractor", label: new TM("settings.ips.ai_extractor"), description: new TM("settings.ips.ai_extractor.description"))] +#[SettingsIcon("fa-robot")] +class AIExtractorSettings +{ + use SettingsTrait; + + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.api_key"), description: new TM("settings.ips.ai_extractor.api_key.description"), + envVar: "string:PROVIDER_AI_EXTRACTOR_API_KEY", envVarMode: EnvVarMode::OVERWRITE + )] + public ?string $apiKey = null; + + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.description"), + envVar: "string:PROVIDER_AI_EXTRACTOR_MODEL", envVarMode: EnvVarMode::OVERWRITE + )] + public string $model = 'z-ai/glm-4.7'; + + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.enabled"), description: new TM("settings.ips.ai_extractor.enabled.description"), + envVar: "bool:PROVIDER_AI_EXTRACTOR_ENABLED", envVarMode: EnvVarMode::OVERWRITE + )] + public bool $enabled = false; + + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.max_content_length"), description: new TM("settings.ips.ai_extractor.max_content_length.description"), + envVar: "int:PROVIDER_AI_EXTRACTOR_MAX_CONTENT_LENGTH", envVarMode: EnvVarMode::OVERWRITE + )] + public int $maxContentLength = 50000; +} diff --git a/src/Settings/InfoProviderSystem/InfoProviderSettings.php b/src/Settings/InfoProviderSystem/InfoProviderSettings.php index 248fcedc..be0fe746 100644 --- a/src/Settings/InfoProviderSystem/InfoProviderSettings.php +++ b/src/Settings/InfoProviderSystem/InfoProviderSettings.php @@ -75,4 +75,7 @@ class InfoProviderSettings #[EmbeddedSettings] public ?CanopySettings $canopy = null; + + #[EmbeddedSettings] + public ?AIExtractorSettings $aiExtractor = null; } From 9cf16248e664074e9d710d4bb4ab5eece9673d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Thu, 23 Apr 2026 23:26:23 +0200 Subject: [PATCH 052/108] Use symfony AI platform for AI provider --- .env | 8 + composer.json | 3 + composer.lock | 610 +++++++++++++++++- config/bundles.php | 1 + config/packages/ai.yaml | 27 + config/packages/ai_generic_platform.yaml | 5 + config/packages/ai_lm_studio_platform.yaml | 3 + config/packages/ai_open_router_platform.yaml | 4 + config/reference.php | 464 +++++++++++++ .../Providers/AIInfoExtractor.php | 161 ++++- symfony.lock | 48 ++ 11 files changed, 1304 insertions(+), 30 deletions(-) create mode 100644 config/packages/ai.yaml create mode 100644 config/packages/ai_generic_platform.yaml create mode 100644 config/packages/ai_lm_studio_platform.yaml create mode 100644 config/packages/ai_open_router_platform.yaml diff --git a/.env b/.env index 79bdcefe..2ea04325 100644 --- a/.env +++ b/.env @@ -155,3 +155,11 @@ APP_ENV=prod APP_SECRET=a03498528f5a5fc089273ec9ae5b2849 APP_SHARE_DIR=var/share ###< symfony/framework-bundle ### + +###> symfony/ai-generic-platform ### +# GENERIC_BASE_URL=https://api.example.com/v1 +###< symfony/ai-generic-platform ### + +###> symfony/ai-open-router-platform ### +OPENROUTER_API_KEY= +###< symfony/ai-open-router-platform ### diff --git a/composer.json b/composer.json index 9d51033e..c7c52d5c 100644 --- a/composer.json +++ b/composer.json @@ -56,6 +56,9 @@ "scheb/2fa-trusted-device": "^v7.11.0", "shivas/versioning-bundle": "^4.0", "spatie/db-dumper": "^3.3.1", + "symfony/ai-bundle": "^0.8.0", + "symfony/ai-lm-studio-platform": "^0.8.0", + "symfony/ai-open-router-platform": "^0.8.0", "symfony/apache-pack": "^1.0", "symfony/asset": "7.4.*", "symfony/console": "7.4.*", diff --git a/composer.lock b/composer.lock index 3ad11a45..00b5e831 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": "8fd737684b48f8d24fcad35fce37a297", + "content-hash": "699f421ad81f8a1acacf8e2c4af66491", "packages": [ { "name": "amphp/amp", @@ -7821,6 +7821,58 @@ ], "time": "2025-12-09T10:50:49+00:00" }, + { + "name": "oskarstark/enum-helper", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/OskarStark/enum-helper.git", + "reference": "14e185f1cc259d7cd3f61eea17f9b174a886a6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OskarStark/enum-helper/zipball/14e185f1cc259d7cd3f61eea17f9b174a886a6da", + "reference": "14e185f1cc259d7cd3f61eea17f9b174a886a6da", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "phpunit/phpunit": "<10" + }, + "require-dev": { + "ergebnis/php-cs-fixer-config": "^6.58", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^10.5", + "rector/rector": "^2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "OskarStark\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oskar Stark", + "email": "oskarstark@googlemail.com" + } + ], + "description": "This library provides helpers for several enum operations", + "keywords": [ + "enum" + ], + "support": { + "issues": "https://github.com/OskarStark/enum-helper/issues", + "source": "https://github.com/OskarStark/enum-helper/tree/1.8.4" + }, + "time": "2026-02-05T08:59:09+00:00" + }, { "name": "paragonie/constant_time_encoding", "version": "v3.1.3", @@ -10341,6 +10393,552 @@ ], "time": "2026-03-23T22:56:56+00:00" }, + { + "name": "symfony/ai-bundle", + "version": "v0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/ai-bundle.git", + "reference": "847365e0f885f8814421e9c94f03ce19e0b54bbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ai-bundle/zipball/847365e0f885f8814421e9c94f03ce19e0b54bbc", + "reference": "847365e0f885f8814421e9c94f03ce19e0b54bbc", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/ai-platform": "^0.8", + "symfony/clock": "^7.3|^8.0", + "symfony/config": "^7.3|^8.0", + "symfony/console": "^7.3|^8.0", + "symfony/dependency-injection": "^7.3|^8.0", + "symfony/framework-bundle": "^7.3|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.3|^8.0" + }, + "require-dev": { + "google/auth": "^1.47", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11.5.53", + "symfony/ai-agent": "^0.8", + "symfony/ai-ai-ml-api-platform": "^0.8", + "symfony/ai-albert-platform": "^0.8", + "symfony/ai-amazee-ai-platform": "^0.8", + "symfony/ai-anthropic-platform": "^0.8", + "symfony/ai-azure-platform": "^0.8", + "symfony/ai-azure-search-store": "^0.8", + "symfony/ai-bedrock-platform": "^0.8", + "symfony/ai-cache-message-store": "^0.8", + "symfony/ai-cache-platform": "^0.8", + "symfony/ai-cache-store": "^0.8", + "symfony/ai-cartesia-platform": "^0.8", + "symfony/ai-cerebras-platform": "^0.8", + "symfony/ai-chat": "^0.8", + "symfony/ai-chroma-db-store": "^0.8", + "symfony/ai-click-house-store": "^0.8", + "symfony/ai-cloudflare-message-store": "^0.8", + "symfony/ai-cloudflare-store": "^0.8", + "symfony/ai-decart-platform": "^0.8", + "symfony/ai-deep-seek-platform": "^0.8", + "symfony/ai-docker-model-runner-platform": "^0.8", + "symfony/ai-doctrine-message-store": "^0.8", + "symfony/ai-elasticsearch-store": "^0.8", + "symfony/ai-eleven-labs-platform": "^0.8", + "symfony/ai-failover-platform": "^0.8", + "symfony/ai-gemini-platform": "^0.8", + "symfony/ai-generic-platform": "^0.8", + "symfony/ai-hugging-face-platform": "^0.8", + "symfony/ai-lm-studio-platform": "^0.8", + "symfony/ai-manticore-search-store": "^0.8", + "symfony/ai-maria-db-store": "^0.8", + "symfony/ai-meilisearch-message-store": "^0.8", + "symfony/ai-meilisearch-store": "^0.8", + "symfony/ai-meta-platform": "^0.8", + "symfony/ai-milvus-store": "^0.8", + "symfony/ai-mistral-platform": "^0.8", + "symfony/ai-mongo-db-message-store": "^0.8", + "symfony/ai-mongo-db-store": "^0.8", + "symfony/ai-neo4j-store": "^0.8", + "symfony/ai-ollama-platform": "^0.8", + "symfony/ai-open-ai-platform": "^0.8", + "symfony/ai-open-responses-platform": "^0.8", + "symfony/ai-open-router-platform": "^0.8", + "symfony/ai-open-search-store": "^0.8", + "symfony/ai-perplexity-platform": "^0.8", + "symfony/ai-pinecone-store": "^0.8", + "symfony/ai-pogocache-message-store": "^0.8", + "symfony/ai-postgres-store": "^0.8", + "symfony/ai-qdrant-store": "^0.8", + "symfony/ai-redis-message-store": "^0.8", + "symfony/ai-redis-store": "^0.8", + "symfony/ai-replicate-platform": "^0.8", + "symfony/ai-s3vectors-store": "^0.8", + "symfony/ai-scaleway-platform": "^0.8", + "symfony/ai-session-message-store": "^0.8", + "symfony/ai-sqlite-store": "^0.8", + "symfony/ai-store": "^0.8", + "symfony/ai-supabase-store": "^0.8", + "symfony/ai-surreal-db-message-store": "^0.8", + "symfony/ai-surreal-db-store": "^0.8", + "symfony/ai-transformers-php-platform": "^0.8", + "symfony/ai-typesense-store": "^0.8", + "symfony/ai-vektor-store": "^0.8", + "symfony/ai-vertex-ai-platform": "^0.8", + "symfony/ai-voyage-platform": "^0.8", + "symfony/ai-weaviate-store": "^0.8", + "symfony/expression-language": "^7.3|^8.0", + "symfony/security-core": "^7.3|^8.0", + "symfony/translation": "^7.3|^8.0", + "symfony/validator": "^7.3|^8.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ai", + "name": "symfony/ai" + } + }, + "autoload": { + "psr-4": { + "Symfony\\AI\\AiBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Hertel", + "email": "mail@christopher-hertel.de" + }, + { + "name": "Oskar Stark", + "email": "oskarstark@googlemail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration bundle for Symfony AI components", + "support": { + "source": "https://github.com/symfony/ai-bundle/tree/v0.8.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-20T21:23:24+00:00" + }, + { + "name": "symfony/ai-generic-platform", + "version": "v0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/ai-generic-platform.git", + "reference": "2e358c0e88c676fad0b61b3df715f9822d29a7e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ai-generic-platform/zipball/2e358c0e88c676fad0b61b3df715f9822d29a7e3", + "reference": "2e358c0e88c676fad0b61b3df715f9822d29a7e3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/ai-platform": "^0.8", + "symfony/http-client": "^7.3|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11.5.53" + }, + "type": "symfony-ai-platform", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ai", + "name": "symfony/ai" + } + }, + "autoload": { + "psr-4": { + "Symfony\\AI\\Platform\\Bridge\\Generic\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Hertel", + "email": "mail@christopher-hertel.de" + }, + { + "name": "Oskar Stark", + "email": "oskarstark@googlemail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic platform bridge for Symfony AI", + "keywords": [ + "Bridge", + "ai", + "generic", + "platform" + ], + "support": { + "source": "https://github.com/symfony/ai-generic-platform/tree/v0.8.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-20T21:23:24+00:00" + }, + { + "name": "symfony/ai-lm-studio-platform", + "version": "v0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/ai-lm-studio-platform.git", + "reference": "ad1c046dd9e7d6e474bc86554443e2d9400a7826" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ai-lm-studio-platform/zipball/ad1c046dd9e7d6e474bc86554443e2d9400a7826", + "reference": "ad1c046dd9e7d6e474bc86554443e2d9400a7826", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/ai-generic-platform": "^0.8", + "symfony/ai-platform": "^0.8", + "symfony/http-client": "^7.3|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11.5.53" + }, + "type": "symfony-ai-platform", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ai", + "name": "symfony/ai" + } + }, + "autoload": { + "psr-4": { + "Symfony\\AI\\Platform\\Bridge\\LmStudio\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Hertel", + "email": "mail@christopher-hertel.de" + }, + { + "name": "Oskar Stark", + "email": "oskarstark@googlemail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "LM Studio platform bridge for Symfony AI", + "keywords": [ + "Bridge", + "ai", + "lmstudio", + "local", + "platform" + ], + "support": { + "source": "https://github.com/symfony/ai-lm-studio-platform/tree/v0.8.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-20T21:23:24+00:00" + }, + { + "name": "symfony/ai-open-router-platform", + "version": "v0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/ai-open-router-platform.git", + "reference": "eb5ed3176b78bc489bf325c5d6bc4efc255804be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ai-open-router-platform/zipball/eb5ed3176b78bc489bf325c5d6bc4efc255804be", + "reference": "eb5ed3176b78bc489bf325c5d6bc4efc255804be", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/ai-generic-platform": "^0.8", + "symfony/ai-platform": "^0.8", + "symfony/http-client": "^7.3|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11.5.53" + }, + "type": "symfony-ai-platform", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ai", + "name": "symfony/ai" + } + }, + "autoload": { + "psr-4": { + "Symfony\\AI\\Platform\\Bridge\\OpenRouter\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Hertel", + "email": "mail@christopher-hertel.de" + }, + { + "name": "Oskar Stark", + "email": "oskarstark@googlemail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "OpenRouter platform bridge for Symfony AI", + "keywords": [ + "Bridge", + "OpenRouter", + "ai", + "platform" + ], + "support": { + "source": "https://github.com/symfony/ai-open-router-platform/tree/v0.8.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-20T21:23:24+00:00" + }, + { + "name": "symfony/ai-platform", + "version": "v0.8.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/ai-platform.git", + "reference": "86ed9396f53cad02b5d1ca8092956ea74f65823f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ai-platform/zipball/86ed9396f53cad02b5d1ca8092956ea74f65823f", + "reference": "86ed9396f53cad02b5d1ca8092956ea74f65823f", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "oskarstark/enum-helper": "^1.5", + "php": ">=8.2", + "phpdocumentor/reflection-docblock": "^5.4|^6.0", + "phpstan/phpdoc-parser": "^2.1", + "psr/log": "^3.0", + "symfony/clock": "^7.3|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/property-access": "^7.3|^8.0", + "symfony/property-info": "^7.3|^8.0", + "symfony/serializer": "^7.3|^8.0", + "symfony/type-info": "^7.3|^8.0", + "symfony/uid": "^7.3|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11.5.53", + "symfony/cache": "^7.3|^8.0", + "symfony/console": "^7.3|^8.0", + "symfony/dotenv": "^7.3|^8.0", + "symfony/expression-language": "^7.3|^8.0", + "symfony/finder": "^7.3|^8.0", + "symfony/http-client": "^7.3|^8.0", + "symfony/http-client-contracts": "^3.5", + "symfony/intl": "^7.3|^8.0", + "symfony/process": "^7.3|^8.0", + "symfony/validator": "^7.3|^8.0", + "symfony/var-dumper": "^7.3|^8.0", + "symfony/yaml": "^7.3|^8.0" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ai", + "name": "symfony/ai" + } + }, + "autoload": { + "psr-4": { + "Symfony\\AI\\Platform\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Hertel", + "email": "mail@christopher-hertel.de" + }, + { + "name": "Oskar Stark", + "email": "oskarstark@googlemail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "PHP library for interacting with AI platform provider.", + "keywords": [ + "Gemini", + "OpenRouter", + "ai", + "aimlapi", + "albert", + "amazeeai", + "anthropic", + "azure", + "bedrock", + "cerebras", + "dockermodelrunner", + "elevenlabs", + "huggingface", + "inference", + "litellm", + "llama", + "lmstudio", + "meta", + "mistral", + "nova", + "ollama", + "openai", + "ovh", + "perplexity", + "replicate", + "speech", + "transformers", + "vertexai", + "voyage" + ], + "support": { + "source": "https://github.com/symfony/ai-platform/tree/v0.8.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-20T21:28:38+00:00" + }, { "name": "symfony/apache-pack", "version": "v1.0.1", @@ -19256,12 +19854,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f41f65e527608a9a76cfbafd873756ed76c5452d" + "reference": "10b8a93511210c9bae3be31f4fe13c3ff974cad4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f41f65e527608a9a76cfbafd873756ed76c5452d", - "reference": "f41f65e527608a9a76cfbafd873756ed76c5452d", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10b8a93511210c9bae3be31f4fe13c3ff974cad4", + "reference": "10b8a93511210c9bae3be31f4fe13c3ff974cad4", "shasum": "" }, "conflict": { @@ -19375,7 +19973,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<=0.31.3", + "ci4-cms-erp/ci4ms": "<0.31.5", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -20304,7 +20902,7 @@ "type": "tidelift" } ], - "time": "2026-04-21T17:25:01+00:00" + "time": "2026-04-22T18:27:19+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/bundles.php b/config/bundles.php index ae7dc9cc..000c58a1 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -33,4 +33,5 @@ return [ Jbtronics\SettingsBundle\JbtronicsSettingsBundle::class => ['all' => true], Jbtronics\TranslationEditorBundle\JbtronicsTranslationEditorBundle::class => ['dev' => true], ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], + Symfony\AI\AiBundle\AiBundle::class => ['all' => true], ]; diff --git a/config/packages/ai.yaml b/config/packages/ai.yaml new file mode 100644 index 00000000..89f8e7ae --- /dev/null +++ b/config/packages/ai.yaml @@ -0,0 +1,27 @@ +ai: + platform: + # Inference Platform configuration + # see https://github.com/symfony/ai/tree/main/src/platform#platform-bridges + + # openai: + # api_key: '%env(OPENAI_API_KEY)%' + + agent: + # Agent configuration + # see https://symfony.com/doc/current/ai/bundles/ai-bundle.html + + # default: + # platform: 'ai.platform.openai' + # model: 'gpt-5-mini' + # prompt: | + # You are a pirate and you write funny. + # tools: + # - 'Symfony\AI\Agent\Bridge\Clock\Clock' + + store: + # Store configuration + + # chromadb: + # default: + # client: 'client.service.id' + # collection: 'my_collection' diff --git a/config/packages/ai_generic_platform.yaml b/config/packages/ai_generic_platform.yaml new file mode 100644 index 00000000..c2c2e133 --- /dev/null +++ b/config/packages/ai_generic_platform.yaml @@ -0,0 +1,5 @@ +ai: + platform: + generic: + default: + base_url: '%env(GENERIC_BASE_URL)%' diff --git a/config/packages/ai_lm_studio_platform.yaml b/config/packages/ai_lm_studio_platform.yaml new file mode 100644 index 00000000..0e6e4ac0 --- /dev/null +++ b/config/packages/ai_lm_studio_platform.yaml @@ -0,0 +1,3 @@ +ai: + platform: + lmstudio: null diff --git a/config/packages/ai_open_router_platform.yaml b/config/packages/ai_open_router_platform.yaml new file mode 100644 index 00000000..bef68793 --- /dev/null +++ b/config/packages/ai_open_router_platform.yaml @@ -0,0 +1,4 @@ +ai: + platform: + openrouter: + api_key: '%env(OPENROUTER_API_KEY)%' diff --git a/config/reference.php b/config/reference.php index 77a5d432..71850e24 100644 --- a/config/reference.php +++ b/config/reference.php @@ -2674,6 +2674,465 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * ... * }, * } + * @psalm-type AiConfig = array{ + * platform?: array{ + * albert?: array{ + * api_key?: string|Param, + * base_url?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * amazeeai?: array{ + * base_url?: string|Param, + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * anthropic?: array{ + * api_key?: string|Param, + * version?: string|Param, // Default: null + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * cache_retention?: "none"|"short"|"long"|Param, // Prompt cache retention policy for Anthropic models // Default: "short" + * }, + * azure?: array, + * bedrock?: array, + * cache?: array, + * cartesia?: array{ + * api_key?: string|Param, + * version?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * cerebras?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * cohere?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * decart?: array{ + * api_key?: string|Param, + * host?: string|Param, // Default: "https://api.decart.ai/v1" + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * deepseek?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * dockermodelrunner?: array{ + * host_url?: string|Param, // Default: "http://127.0.0.1:12434" + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * elevenlabs?: array{ + * api_key?: string|Param, + * endpoint?: string|Param, // Default: "https://api.elevenlabs.io/v1/" + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * failover?: array, + * rate_limiter?: string|Param, + * }>, + * gemini?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * generic?: array, + * huggingface?: array{ + * api_key?: string|Param, + * provider?: string|Param, // Default: "hf-inference" + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * lmstudio?: array{ + * host_url?: string|Param, // Default: "http://127.0.0.1:1234" + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * mistral?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * ollama?: array{ + * endpoint?: string|Param, // Endpoint for Ollama (e.g. "http://127.0.0.1:11434" for local, or a cloud endpoint). If null, the http_client is used as-is and must already be configured with a base URI. + * api_key?: string|Param, // API key for Ollama Cloud authentication (optional for local usage) + * http_client?: string|Param, // Service ID of the HTTP client to use. When "endpoint" is null, this client must be pre-configured (e.g. with a base_uri). // Default: "http_client" + * }, + * openai?: array{ + * api_key?: string|Param, + * region?: scalar|Param|null, // The region for OpenAI API (EU, US, or null for default) // Default: null + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * openrouter?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * ovh?: array{ + * api_key?: scalar|Param|null, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * perplexity?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * scaleway?: array{ + * api_key?: scalar|Param|null, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * transformersphp?: array, + * vertexai?: array{ + * location?: string|Param, // Required for the project-scoped endpoint. Must be set together with "project_id". // Default: null + * project_id?: string|Param, // Required for the project-scoped endpoint. Must be set together with "location". // Default: null + * api_key?: string|Param, // When set without "location" and "project_id", uses the global endpoint. Note: API keys only identify the project for billing and do not provide identity-based access control. For production use with IAM, audit logging, or data residency, prefer the project-scoped endpoint with service account authentication. // Default: null + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * voyage?: array{ + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }, + * }, + * model?: array|\Symfony\AI\Platform\Capability|Param>, + * }>>, + * agent?: array, + * }, + * keep_tool_messages?: bool|Param, // Keep tool messages in the conversation history // Default: false + * include_sources?: bool|Param, // Include sources exposed by tools as part of the tool result metadata // Default: false + * fault_tolerant_toolbox?: bool|Param, // Continue the agent run even if a tool call fails // Default: true + * speech?: bool|array{ // Speech (TTS/STT) decorator configuration + * enabled?: bool|Param, // Default: true + * text_to_speech_platform?: string|Param, // Service name of the TTS platform (e.g. ai.platform.elevenlabs). // Default: null + * speech_to_text_platform?: string|Param, // Service name of the STT platform (e.g. ai.platform.openai). // Default: null + * tts_model?: string|Param, // Text-to-speech model name // Default: null + * tts_options?: mixed, // Provider-specific TTS options // Default: [] + * stt_model?: string|Param, // Speech-to-text model name // Default: null + * stt_options?: mixed, // Provider-specific STT options // Default: [] + * }, + * }>, + * multi_agent?: array>, + * fallback?: string|Param, // Service ID of the fallback agent for unmatched requests + * }>, + * store?: array{ + * azuresearch?: array, + * cache?: array, + * chromadb?: array, + * clickhouse?: array, + * cloudflare?: array, + * elasticsearch?: array, + * manticoresearch?: array, + * mariadb?: array, + * meilisearch?: array, + * memory?: array, + * milvus?: array, + * mongodb?: array, + * neo4j?: array, + * opensearch?: array, + * pinecone?: array, + * top_k?: int|Param, + * }>, + * postgres?: array, + * qdrant?: array, + * redis?: array, + * s3vectors?: array, + * vector_bucket_name?: string|Param, + * index_name?: string|Param, + * filter?: array, + * top_k?: int|Param, // Default number of results to return // Default: 3 + * }>, + * sqlite?: array, + * supabase?: array, + * surrealdb?: array, + * typesense?: array, + * weaviate?: array, + * vektor?: array, + * }, + * message_store?: array{ + * cache?: array, + * cloudflare?: array, + * doctrine?: array{ + * dbal?: array, + * }, + * meilisearch?: array, + * memory?: array, + * mongodb?: array, + * pogocache?: array, + * redis?: array, + * session?: array, + * surrealdb?: array, + * }, + * chat?: array, + * vectorizer?: array, + * indexer?: array, + * filters?: list, + * vectorizer?: scalar|Param|null, // Service name of vectorizer // Default: "Symfony\\AI\\Store\\Document\\VectorizerInterface" + * store?: string|Param, // Service name of store // Default: "Symfony\\AI\\Store\\StoreInterface" + * }>, + * retriever?: array, + * } * @psalm-type ConfigType = array{ * imports?: ImportsConfig, * parameters?: ParametersConfig, @@ -2703,6 +3162,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * nelmio_cors?: NelmioCorsConfig, * jbtronics_settings?: JbtronicsSettingsConfig, * api_platform?: ApiPlatformConfig, + * ai?: AiConfig, * "when@dev"?: array{ * imports?: ImportsConfig, * parameters?: ParametersConfig, @@ -2736,6 +3196,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * jbtronics_settings?: JbtronicsSettingsConfig, * jbtronics_translation_editor?: JbtronicsTranslationEditorConfig, * api_platform?: ApiPlatformConfig, + * ai?: AiConfig, * }, * "when@docker"?: array{ * imports?: ImportsConfig, @@ -2766,6 +3227,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * nelmio_cors?: NelmioCorsConfig, * jbtronics_settings?: JbtronicsSettingsConfig, * api_platform?: ApiPlatformConfig, + * ai?: AiConfig, * }, * "when@prod"?: array{ * imports?: ImportsConfig, @@ -2796,6 +3258,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * nelmio_cors?: NelmioCorsConfig, * jbtronics_settings?: JbtronicsSettingsConfig, * api_platform?: ApiPlatformConfig, + * ai?: AiConfig, * }, * "when@test"?: array{ * imports?: ImportsConfig, @@ -2829,6 +3292,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * nelmio_cors?: NelmioCorsConfig, * jbtronics_settings?: JbtronicsSettingsConfig, * api_platform?: ApiPlatformConfig, + * ai?: AiConfig, * }, * ...httpClient = $httpClient->withOptions([ 'timeout' => 30, @@ -68,7 +76,8 @@ class AIInfoExtractor implements InfoProviderInterface public function isActive(): bool { - return !empty($this->settings->apiKey) && $this->settings->enabled; + return true; + //return !empty($this->settings->apiKey) && $this->settings->enabled; } public function searchByKeyword(string $keyword): array @@ -76,28 +85,28 @@ class AIInfoExtractor implements InfoProviderInterface // Treat the keyword as a URL and return a single search result $url = $this->normalizeURL($keyword); - try { - $part = $this->getDetails($url); - return [ - new SearchResultDTO( - provider_key: $this->getProviderKey(), - provider_id: $url, - name: $part->name, - description: $part->description, - category: $part->category, - manufacturer: $part->manufacturer, - mpn: $part->mpn, - preview_image_url: $part->preview_image_url, - manufacturing_status: $part->manufacturing_status, - provider_url: $part->provider_url, - footprint: $part->footprint, - gtin: $part->gtin, - ), - ]; - } catch (\Throwable $e) { - // Return empty array on error - return []; - } + //try { + $part = $this->getDetails($url); + return [ + new SearchResultDTO( + provider_key: $this->getProviderKey(), + provider_id: $url, + name: $part->name, + description: $part->description, + category: $part->category, + manufacturer: $part->manufacturer, + mpn: $part->mpn, + preview_image_url: $part->preview_image_url, + manufacturing_status: $part->manufacturing_status, + provider_url: $part->provider_url, + footprint: $part->footprint, + gtin: $part->gtin, + ), + ]; + //} catch (\Throwable $e) { + // // Return empty array on error + // return []; + //} } public function getDetails(string $id): PartDetailDTO @@ -194,6 +203,108 @@ class AIInfoExtractor implements InfoProviderInterface private function callOpenRouterAPI(string $htmlContent, string $url): string { + $input = new MessageBag( + Message::forSystem($this->buildSystemPrompt()), + Message::ofUser("Extract part information from this webpage content:\n\nURL: $url\n\n$htmlContent") + ); + + $models = $this->aiPlatform->getModelCatalog()->getModels(); + + try { + //'openai/gpt-5-mini' + $result = $this->aiPlatform->invoke('openrouter/auto', $input, [ + 'response_format' => 'json_schema', + 'json_schema' => [ + 'name' => 'clock', + 'strict' => true, + 'schema' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string', 'description' => 'Product name'], + 'description' => ['type' => 'string', 'description' => 'Product description'], + 'manufacturer' => ['type' => ['string', 'null'], 'description' => 'Manufacturer name'], + 'mpn' => ['type' => ['string', 'null'], 'description' => 'Manufacturer Part Number'], + 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], + 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], + 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], + 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass in grams'], + 'parameters' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string'], + 'value' => ['type' => 'string'], + 'unit' => ['type' => ['string', 'null']], + ], + 'required' => ['name', 'value'], + ], + ], + 'datasheets' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => ['type' => 'string'], + 'description' => ['type' => 'string'], + ], + 'required' => ['url'], + ], + ], + 'images' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => ['type' => 'string'], + 'description' => ['type' => 'string'], + ], + 'required' => ['url'], + ], + ], + 'vendor_infos' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'distributor_name' => ['type' => 'string'], + 'order_number' => ['type' => ['string', 'null']], + 'product_url' => ['type' => 'string'], + 'prices' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'minimum_quantity' => ['type' => 'integer'], + 'price' => ['type' => 'number'], + 'currency' => ['type' => 'string'], + ], + 'required' => ['minimum_quantity', 'price', 'currency'], + ], + ], + ], + 'required' => ['distributor_name', 'product_url'], + ], + ], + 'manufacturer_product_url' => ['type' => ['string', 'null'], 'description' => 'Manufacturer product page URL'], + ], + 'required' => ['name', 'description'], + ], + ], + ]); + } catch (\Throwable $e) { + dump($e); + throw new \RuntimeException('LLM invocation failed: ' . $e->getMessage(), previous: $e); + } + + + + dump($result->getResult()->getContent()); + + return json_encode($result->getResult()->getContent()); + + /* + $systemPrompt = $this->buildSystemPrompt(); // Define the tool/function for structured output @@ -331,6 +442,8 @@ class AIInfoExtractor implements InfoProviderInterface $content = trim($content); return $content; + */ + } private function buildSystemPrompt(): string diff --git a/symfony.lock b/symfony.lock index 68de2da7..dde7df36 100644 --- a/symfony.lock +++ b/symfony.lock @@ -375,6 +375,54 @@ "shivas/versioning-bundle": { "version": "4.0.3" }, + "symfony/ai-bundle": { + "version": "0.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "0.1", + "ref": "2be6ccd77335c2631fdf12d1680649b072efb8ad" + }, + "files": [ + "config/packages/ai.yaml" + ] + }, + "symfony/ai-generic-platform": { + "version": "0.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "0.1", + "ref": "f38913b87380322d4c40c302b41626e811516bc4" + }, + "files": [ + "config/packages/ai_generic_platform.yaml" + ] + }, + "symfony/ai-lm-studio-platform": { + "version": "0.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "0.1", + "ref": "e35cced28f6559fc5effccb8f22597f309fedfdf" + }, + "files": [ + "config/packages/ai_lm_studio_platform.yaml" + ] + }, + "symfony/ai-open-router-platform": { + "version": "0.8", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "0.1", + "ref": "c39a146c6ec3df8b874accf6ce1cccbda431a688" + }, + "files": [ + "config/packages/ai_open_router_platform.yaml" + ] + }, "symfony/apache-pack": { "version": "1.0", "recipe": { From c0017d29a747dd66e2e8e56dd8d1ed2f68fe24ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 25 Apr 2026 22:21:06 +0200 Subject: [PATCH 053/108] Refactored and cleaned up AIInfoExtractor --- .../DTOJsonSchemaConverter.php | 239 ++++++++++ .../Providers/AIInfoExtractor.php | 428 +----------------- .../Providers/FixAndValidateUrlTrait.php | 58 +++ .../Providers/GenericWebProvider.php | 29 +- 4 files changed, 324 insertions(+), 430 deletions(-) create mode 100644 src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php create mode 100644 src/Services/InfoProviderSystem/Providers/FixAndValidateUrlTrait.php diff --git a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php new file mode 100644 index 00000000..b9208c87 --- /dev/null +++ b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php @@ -0,0 +1,239 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem; + +use App\Entity\Parts\ManufacturingStatus; +use App\Services\InfoProviderSystem\DTOs\FileDTO; +use App\Services\InfoProviderSystem\DTOs\ParameterDTO; +use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; +use App\Services\InfoProviderSystem\DTOs\PriceDTO; +use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; + +/** + * This class allows to convert the JSON data returned by an LLM into the DTOs used by the info provider system later. + */ +final class DTOJsonSchemaConverter +{ + /** + * Returns the JSON schema, that defines the expected structure of the JSON data returned by the LLM. + * @return array + */ + public function getJSONSchema(): array + { + return [ + 'name' => 'clock', + 'strict' => true, + 'schema' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string', 'description' => 'Product name'], + 'description' => ['type' => 'string', 'description' => 'Product description'], + 'manufacturer' => ['type' => ['string', 'null'], 'description' => 'Manufacturer name'], + 'mpn' => ['type' => ['string', 'null'], 'description' => 'Manufacturer Part Number'], + 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], + 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], + 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], + 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass in grams'], + 'parameters' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string'], + 'value' => ['type' => 'string'], + 'unit' => ['type' => ['string', 'null']], + ], + 'required' => ['name', 'value'], + ], + ], + 'datasheets' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => ['type' => 'string'], + 'description' => ['type' => 'string'], + ], + 'required' => ['url'], + ], + ], + 'images' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'url' => ['type' => 'string'], + 'description' => ['type' => 'string'], + ], + 'required' => ['url'], + ], + ], + 'vendor_infos' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'distributor_name' => ['type' => 'string'], + 'order_number' => ['type' => ['string', 'null']], + 'product_url' => ['type' => 'string'], + 'prices' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'minimum_quantity' => ['type' => 'integer'], + 'price' => ['type' => 'number'], + 'currency' => ['type' => 'string'], + ], + 'required' => ['minimum_quantity', 'price', 'currency'], + ], + ], + ], + 'required' => ['distributor_name', 'product_url'], + ], + ], + 'manufacturer_product_url' => ['type' => ['string', 'null'], 'description' => 'Manufacturer product page URL'], + ], + 'required' => ['name', 'description'], + ] + ]; + } + + public function jsonToDTO(array $data, string $providerKey, string $providerId, ?string $productUrl = null, string $distributorNameFallback = '???'): PartDetailDTO + { + // Map manufacturing status + $manufacturingStatus = null; + if (!empty($data['manufacturing_status'])) { + $status = strtolower((string) $data['manufacturing_status']); + $manufacturingStatus = match ($status) { + 'active' => ManufacturingStatus::ACTIVE, + 'obsolete', 'discontinued' => ManufacturingStatus::DISCONTINUED, + 'nrfnd', 'not recommended for new designs' => ManufacturingStatus::NRFND, + 'eol' => ManufacturingStatus::EOL, + 'announced' => ManufacturingStatus::ANNOUNCED, + default => null, + }; + } + + // Build parameters + $parameters = null; + if (!empty($data['parameters']) && is_array($data['parameters'])) { + $parameters = []; + foreach ($data['parameters'] as $p) { + if (!empty($p['name'])) { + $value = $p['value'] ?? ''; + $unit = $p['unit'] ?? null; + // Combine value and unit for parsing + $valueWithUnit = $unit ? $value . ' ' . $unit : $value; + $parameters[] = ParameterDTO::parseValueField( + name: $p['name'], + value: $valueWithUnit + ); + } + } + } + + // Build datasheets + $datasheets = null; + if (!empty($data['datasheets']) && is_array($data['datasheets'])) { + $datasheets = []; + foreach ($data['datasheets'] as $d) { + if (!empty($d['url'])) { + $datasheets[] = new FileDTO( + url: $d['url'], + name: $d['description'] ?? 'Datasheet' + ); + } + } + } + + // Build images + $images = null; + if (!empty($data['images']) && is_array($data['images'])) { + $images = []; + foreach ($data['images'] as $i) { + if (!empty($i['url'])) { + $images[] = new FileDTO( + url: $i['url'], + name: $i['description'] ?? 'Image' + ); + } + } + } + + // Build vendor infos + $vendorInfos = null; + if (!empty($data['vendor_infos']) && is_array($data['vendor_infos'])) { + $vendorInfos = []; + foreach ($data['vendor_infos'] as $v) { + $prices = []; + if (!empty($v['prices']) && is_array($v['prices'])) { + foreach ($v['prices'] as $p) { + $prices[] = new PriceDTO( + minimum_discount_amount: (int) ($p['minimum_quantity'] ?? 1), + price: (string) ($p['price'] ?? 0), + currency_iso_code: $p['currency'] ?? 'USD', + price_related_quantity: (int) ($p['minimum_quantity'] ?? 1), + ); + } + } + + $vendorInfos[] = new PurchaseInfoDTO( + distributor_name: $v['distributor_name'] ?? $distributorNameFallback, + order_number: $v['order_number'] ?? 'Unknown', + prices: $prices, + product_url: $v['product_url'] ?? $productUrl, + ); + } + } + + // Get preview image URL + $previewImageUrl = null; + if (!empty($data['images']) && is_array($data['images']) && !empty($data['images'][0]['url'])) { + $previewImageUrl = $data['images'][0]['url']; + } + + return new PartDetailDTO( + provider_key: $providerKey, + provider_id: $providerId, + name: $data['name'] ?? 'Unknown', + description: $data['description'] ?? '', + category: $data['category'] ?? null, + manufacturer: $data['manufacturer'] ?? null, + mpn: $data['mpn'] ?? null, + preview_image_url: $previewImageUrl, + manufacturing_status: $manufacturingStatus, + provider_url: $productUrl, + footprint: $data['footprint'] ?? null, + notes: null, + datasheets: $datasheets, + images: $images, + parameters: $parameters, + vendor_infos: $vendorInfos, + mass: isset($data['mass']) && is_numeric($data['mass']) ? (float) $data['mass'] : null, + manufacturer_product_url: $data['manufacturer_product_url'] ?? null, + ); + } + +} diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index c260f43e..0bf32159 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -24,32 +24,31 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\Providers; -use App\Entity\Parts\ManufacturingStatus; -use App\Services\InfoProviderSystem\DTOs\FileDTO; -use App\Services\InfoProviderSystem\DTOs\ParameterDTO; +use App\Exceptions\ProviderIDNotSupportedException; +use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; -use App\Services\InfoProviderSystem\DTOs\PriceDTO; -use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; -use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Settings\InfoProviderSystem\AIExtractorSettings; use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; -use Symfony\AI\Platform\Platform; use Symfony\AI\Platform\PlatformInterface; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Contracts\HttpClient\HttpClientInterface; -class AIInfoExtractor implements InfoProviderInterface +final class AIInfoExtractor implements InfoProviderInterface { + use FixAndValidateUrlTrait; + private const DISTRIBUTOR_NAME = 'AI Extracted'; private readonly HttpClientInterface $httpClient; - public function __construct(HttpClientInterface $httpClient, private readonly AIExtractorSettings $settings, + public function __construct( + HttpClientInterface $httpClient, + private readonly AIExtractorSettings $settings, #[Autowire(service: "ai.traceable_platform.openrouter")] - private readonly PlatformInterface $aiPlatform - ) - { + private readonly PlatformInterface $aiPlatform, + private readonly DTOJsonSchemaConverter $jsonSchemaConverter, + ) { $this->httpClient = $httpClient->withOptions([ 'timeout' => 30, 'headers' => [ @@ -82,36 +81,17 @@ class AIInfoExtractor implements InfoProviderInterface public function searchByKeyword(string $keyword): array { - // Treat the keyword as a URL and return a single search result - $url = $this->normalizeURL($keyword); - - //try { - $part = $this->getDetails($url); - return [ - new SearchResultDTO( - provider_key: $this->getProviderKey(), - provider_id: $url, - name: $part->name, - description: $part->description, - category: $part->category, - manufacturer: $part->manufacturer, - mpn: $part->mpn, - preview_image_url: $part->preview_image_url, - manufacturing_status: $part->manufacturing_status, - provider_url: $part->provider_url, - footprint: $part->footprint, - gtin: $part->gtin, - ), - ]; - //} catch (\Throwable $e) { - // // Return empty array on error - // return []; - //} + try { + return [ + $this->getDetails($keyword) + ]; } catch (ProviderIDNotSupportedException $e) { + return []; + } } public function getDetails(string $id): PartDetailDTO { - $url = $this->normalizeURL($id); + $url = $this->fixAndValidateURL($id); // Fetch HTML content $response = $this->httpClient->request('GET', $url); @@ -123,14 +103,11 @@ class AIInfoExtractor implements InfoProviderInterface // Truncate to max content length $truncatedHtml = $this->truncateHTML($cleanedHtml, $this->settings->maxContentLength); - // Call OpenRouter API - $llmResponse = $this->callOpenRouterAPI($truncatedHtml, $url); - - // Parse JSON response - $data = json_decode($llmResponse, true, 512, JSON_THROW_ON_ERROR); + // Call LLM + $llmResponse = $this->callLLM($truncatedHtml, $url); // Build and return PartDetailDTO - return $this->buildPartDetailDTO($data, $url); + return $this->jsonSchemaConverter->jsonToDTO($llmResponse, $this->getProviderKey(), $url, $url, self::DISTRIBUTOR_NAME); } public function getCapabilities(): array @@ -144,21 +121,6 @@ class AIInfoExtractor implements InfoProviderInterface ]; } - private function normalizeURL(string $url): string - { - // Add https:// if no protocol - if (!preg_match('/^https?:\/\//', $url)) { - $url = 'https://' . ltrim($url, '/'); - } - - // Validate URL - if (filter_var($url, FILTER_VALIDATE_URL) === false) { - throw new \InvalidArgumentException("Invalid URL: $url"); - } - - return $url; - } - private function cleanHTML(string $html): string { // Remove script tags @@ -201,249 +163,24 @@ class AIInfoExtractor implements InfoProviderInterface return $truncated; } - private function callOpenRouterAPI(string $htmlContent, string $url): string + private function callLLM(string $htmlContent, string $url): array { $input = new MessageBag( Message::forSystem($this->buildSystemPrompt()), Message::ofUser("Extract part information from this webpage content:\n\nURL: $url\n\n$htmlContent") ); - $models = $this->aiPlatform->getModelCatalog()->getModels(); - try { //'openai/gpt-5-mini' $result = $this->aiPlatform->invoke('openrouter/auto', $input, [ 'response_format' => 'json_schema', - 'json_schema' => [ - 'name' => 'clock', - 'strict' => true, - 'schema' => [ - 'type' => 'object', - 'properties' => [ - 'name' => ['type' => 'string', 'description' => 'Product name'], - 'description' => ['type' => 'string', 'description' => 'Product description'], - 'manufacturer' => ['type' => ['string', 'null'], 'description' => 'Manufacturer name'], - 'mpn' => ['type' => ['string', 'null'], 'description' => 'Manufacturer Part Number'], - 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], - 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], - 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], - 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass in grams'], - 'parameters' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'name' => ['type' => 'string'], - 'value' => ['type' => 'string'], - 'unit' => ['type' => ['string', 'null']], - ], - 'required' => ['name', 'value'], - ], - ], - 'datasheets' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'url' => ['type' => 'string'], - 'description' => ['type' => 'string'], - ], - 'required' => ['url'], - ], - ], - 'images' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'url' => ['type' => 'string'], - 'description' => ['type' => 'string'], - ], - 'required' => ['url'], - ], - ], - 'vendor_infos' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'distributor_name' => ['type' => 'string'], - 'order_number' => ['type' => ['string', 'null']], - 'product_url' => ['type' => 'string'], - 'prices' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'minimum_quantity' => ['type' => 'integer'], - 'price' => ['type' => 'number'], - 'currency' => ['type' => 'string'], - ], - 'required' => ['minimum_quantity', 'price', 'currency'], - ], - ], - ], - 'required' => ['distributor_name', 'product_url'], - ], - ], - 'manufacturer_product_url' => ['type' => ['string', 'null'], 'description' => 'Manufacturer product page URL'], - ], - 'required' => ['name', 'description'], - ], - ], + 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), ]); } catch (\Throwable $e) { - dump($e); - throw new \RuntimeException('LLM invocation failed: ' . $e->getMessage(), previous: $e); + throw new \RuntimeException('LLM invocation failed: '.$e->getMessage(), previous: $e); } - - - dump($result->getResult()->getContent()); - - return json_encode($result->getResult()->getContent()); - - /* - - $systemPrompt = $this->buildSystemPrompt(); - - // Define the tool/function for structured output - $toolDefinition = [ - 'type' => 'function', - 'function' => [ - 'name' => 'extract_part_info', - 'description' => 'Extract electronic component information from a webpage', - 'parameters' => [ - 'type' => 'object', - 'properties' => [ - 'name' => ['type' => 'string', 'description' => 'Product name'], - 'description' => ['type' => 'string', 'description' => 'Product description'], - 'manufacturer' => ['type' => ['string', 'null'], 'description' => 'Manufacturer name'], - 'mpn' => ['type' => ['string', 'null'], 'description' => 'Manufacturer Part Number'], - 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], - 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], - 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], - 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass in grams'], - 'parameters' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'name' => ['type' => 'string'], - 'value' => ['type' => 'string'], - 'unit' => ['type' => ['string', 'null']], - ], - 'required' => ['name', 'value'], - ], - ], - 'datasheets' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'url' => ['type' => 'string'], - 'description' => ['type' => 'string'], - ], - 'required' => ['url'], - ], - ], - 'images' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'url' => ['type' => 'string'], - 'description' => ['type' => 'string'], - ], - 'required' => ['url'], - ], - ], - 'vendor_infos' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'distributor_name' => ['type' => 'string'], - 'order_number' => ['type' => ['string', 'null']], - 'product_url' => ['type' => 'string'], - 'prices' => [ - 'type' => 'array', - 'items' => [ - 'type' => 'object', - 'properties' => [ - 'minimum_quantity' => ['type' => 'integer'], - 'price' => ['type' => 'number'], - 'currency' => ['type' => 'string'], - ], - 'required' => ['minimum_quantity', 'price', 'currency'], - ], - ], - ], - 'required' => ['distributor_name', 'product_url'], - ], - ], - 'manufacturer_product_url' => ['type' => ['string', 'null'], 'description' => 'Manufacturer product page URL'], - ], - 'required' => ['name', 'description'], - ], - ], - ]; - - $payload = [ - 'model' => $this->settings->model, - 'messages' => [ - [ - 'role' => 'system', - 'content' => $systemPrompt, - ], - [ - 'role' => 'user', - 'content' => "Extract part information from this webpage content:\n\nURL: $url\n\n$htmlContent", - ], - ], - 'tools' => [$toolDefinition], - 'tool_choice' => ['type' => 'function', 'function' => ['name' => 'extract_part_info']], - 'max_tokens' => 4096, - 'temperature' => 0.1, - ]; - - $response = $this->httpClient->request('POST', 'https://openrouter.ai/api/v1/chat/completions', [ - 'headers' => [ - 'Authorization' => 'Bearer ' . $this->settings->apiKey, - 'Content-Type' => 'application/json', - 'HTTP-Referer' => 'https://github.com/Part-DB/Part-DB-server', - 'X-Title' => 'Part-DB AI Info Extractor', - ], - 'json' => $payload, - ]); - - $data = $response->toArray(); - - $message = $data['choices'][0]['message'] ?? null; - if ($message === null) { - throw new \RuntimeException('No response message from LLM'); - } - - // Check if the model used the tool/function call - if (isset($message['tool_calls']) && !empty($message['tool_calls'])) { - foreach ($message['tool_calls'] as $toolCall) { - if ($toolCall['function']['name'] === 'extract_part_info') { - return $toolCall['function']['arguments']; - } - } - } - - // Fallback to content if no tool call (some models might not support tool calling) - $content = $message['content'] ?? throw new \RuntimeException('No response content from LLM'); - - // Strip markdown code blocks if present (fallback for models without tool support) - $content = preg_replace('/^```(?:json)?\s*\n?/i', '', $content); - $content = preg_replace('/\n?```\s*$/i', '', $content); - $content = trim($content); - - return $content; - */ - + return $result->getResult()->getContent(); } private function buildSystemPrompt(): string @@ -485,119 +222,4 @@ For parameters, combine name, value, and unit. The unit should be separate if po PROMPT; } - private function buildPartDetailDTO(array $data, string $url): PartDetailDTO - { - // Map manufacturing status - $manufacturingStatus = null; - if (!empty($data['manufacturing_status'])) { - $status = strtolower((string) $data['manufacturing_status']); - $manufacturingStatus = match ($status) { - 'active' => ManufacturingStatus::ACTIVE, - 'obsolete', 'discontinued' => ManufacturingStatus::DISCONTINUED, - 'nrfnd', 'not recommended for new designs' => ManufacturingStatus::NRFND, - 'eol' => ManufacturingStatus::EOL, - 'announced' => ManufacturingStatus::ANNOUNCED, - default => null, - }; - } - - // Build parameters - $parameters = null; - if (!empty($data['parameters']) && is_array($data['parameters'])) { - $parameters = []; - foreach ($data['parameters'] as $p) { - if (!empty($p['name'])) { - $value = $p['value'] ?? ''; - $unit = $p['unit'] ?? null; - // Combine value and unit for parsing - $valueWithUnit = $unit ? $value . ' ' . $unit : $value; - $parameters[] = ParameterDTO::parseValueField( - name: $p['name'], - value: $valueWithUnit - ); - } - } - } - - // Build datasheets - $datasheets = null; - if (!empty($data['datasheets']) && is_array($data['datasheets'])) { - $datasheets = []; - foreach ($data['datasheets'] as $d) { - if (!empty($d['url'])) { - $datasheets[] = new FileDTO( - url: $d['url'], - name: $d['description'] ?? 'Datasheet' - ); - } - } - } - - // Build images - $images = null; - if (!empty($data['images']) && is_array($data['images'])) { - $images = []; - foreach ($data['images'] as $i) { - if (!empty($i['url'])) { - $images[] = new FileDTO( - url: $i['url'], - name: $i['description'] ?? 'Image' - ); - } - } - } - - // Build vendor infos - $vendorInfos = null; - if (!empty($data['vendor_infos']) && is_array($data['vendor_infos'])) { - $vendorInfos = []; - foreach ($data['vendor_infos'] as $v) { - $prices = []; - if (!empty($v['prices']) && is_array($v['prices'])) { - foreach ($v['prices'] as $p) { - $prices[] = new PriceDTO( - minimum_discount_amount: (int) ($p['minimum_quantity'] ?? 1), - price: (string) ($p['price'] ?? 0), - currency_iso_code: $p['currency'] ?? 'USD', - price_related_quantity: (int) ($p['minimum_quantity'] ?? 1), - ); - } - } - - $vendorInfos[] = new PurchaseInfoDTO( - distributor_name: $v['distributor_name'] ?? self::DISTRIBUTOR_NAME, - order_number: $v['order_number'] ?? 'Unknown', - prices: $prices, - product_url: $v['product_url'] ?? $url, - ); - } - } - - // Get preview image URL - $previewImageUrl = null; - if (!empty($data['images']) && is_array($data['images']) && !empty($data['images'][0]['url'])) { - $previewImageUrl = $data['images'][0]['url']; - } - - return new PartDetailDTO( - provider_key: $this->getProviderKey(), - provider_id: $url, - name: $data['name'] ?? 'Unknown', - description: $data['description'] ?? '', - category: $data['category'] ?? null, - manufacturer: $data['manufacturer'] ?? null, - mpn: $data['mpn'] ?? null, - preview_image_url: $previewImageUrl, - manufacturing_status: $manufacturingStatus, - provider_url: $url, - footprint: $data['footprint'] ?? null, - mass: isset($data['mass']) && is_numeric($data['mass']) ? (float) $data['mass'] : null, - notes: null, - datasheets: $datasheets, - images: $images, - parameters: $parameters, - vendor_infos: $vendorInfos, - manufacturer_product_url: $data['manufacturer_product_url'] ?? null, - ); - } } diff --git a/src/Services/InfoProviderSystem/Providers/FixAndValidateUrlTrait.php b/src/Services/InfoProviderSystem/Providers/FixAndValidateUrlTrait.php new file mode 100644 index 00000000..c9395a46 --- /dev/null +++ b/src/Services/InfoProviderSystem/Providers/FixAndValidateUrlTrait.php @@ -0,0 +1,58 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem\Providers; + +use App\Exceptions\ProviderIDNotSupportedException; + +trait FixAndValidateUrlTrait +{ + private function fixAndValidateURL(string $url): string + { + $originalUrl = $url; + + //Add scheme if missing + if (!preg_match('/^https?:\/\//', $url)) { + //Remove any leading slashes + $url = ltrim($url, '/'); + + //If the URL starts with https:/ or http:/, add the missing slash + //Traefik removes the double slash as secruity measure, so we want to be forgiving and add it back if needed + //See https://github.com/Part-DB/Part-DB-server/issues/1296 + if (preg_match('/^https?:\/[^\/]/', $url)) { + $url = preg_replace('/^(https?:)\/([^\/])/', '$1//$2', $url); + } else { + $url = 'https://'.$url; + } + } + + //If this is not a valid URL with host, domain and path, throw an exception + if (filter_var($url, FILTER_VALIDATE_URL) === false || + parse_url($url, PHP_URL_HOST) === null || + parse_url($url, PHP_URL_PATH) === null) { + throw new ProviderIDNotSupportedException("The given ID is not a valid URL: ".$originalUrl); + } + + return $url; + } +} diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index b5a150f8..90268c9c 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -48,6 +48,8 @@ use Symfony\Contracts\HttpClient\HttpClientInterface; class GenericWebProvider implements InfoProviderInterface { + use FixAndValidateUrlTrait; + public const DISTRIBUTOR_NAME = 'Website'; private readonly HttpClientInterface $httpClient; @@ -308,34 +310,7 @@ class GenericWebProvider implements InfoProviderInterface return null; } - private function fixAndValidateURL(string $url): string - { - $originalUrl = $url; - //Add scheme if missing - if (!preg_match('/^https?:\/\//', $url)) { - //Remove any leading slashes - $url = ltrim($url, '/'); - - //If the URL starts with https:/ or http:/, add the missing slash - //Traefik removes the double slash as secruity measure, so we want to be forgiving and add it back if needed - //See https://github.com/Part-DB/Part-DB-server/issues/1296 - if (preg_match('/^https?:\/[^\/]/', $url)) { - $url = preg_replace('/^(https?:)\/([^\/])/', '$1//$2', $url); - } else { - $url = 'https://'.$url; - } - } - - //If this is not a valid URL with host, domain and path, throw an exception - if (filter_var($url, FILTER_VALIDATE_URL) === false || - parse_url($url, PHP_URL_HOST) === null || - parse_url($url, PHP_URL_PATH) === null) { - throw new ProviderIDNotSupportedException("The given ID is not a valid URL: ".$originalUrl); - } - - return $url; - } public function getDetails(string $id, bool $check_for_delegation = true): PartDetailDTO { From 2631ff4bee1ab5e780859e898303a57fec6672f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 25 Apr 2026 23:29:22 +0200 Subject: [PATCH 054/108] Introduced subsystem to configure AI providers and allow services to select them dynamiclly --- config/packages/ai_lm_studio_platform.yaml | 3 +- config/packages/ai_open_router_platform.yaml | 2 +- src/Services/AI/AIPlatformRegistry.php | 95 +++++++++++++++++++ .../AI/AIPlatformSettingsInterface.php | 33 +++++++ src/Services/AI/AIPlatforms.php | 57 +++++++++++ .../Providers/AIInfoExtractor.php | 9 +- src/Settings/AISettings/AISettings.php | 43 +++++++++ src/Settings/AISettings/LMStudioSettings.php | 51 ++++++++++ .../AISettings/OpenRouterSettings.php | 50 ++++++++++ src/Settings/AppSettings.php | 4 + 10 files changed, 342 insertions(+), 5 deletions(-) create mode 100644 src/Services/AI/AIPlatformRegistry.php create mode 100644 src/Services/AI/AIPlatformSettingsInterface.php create mode 100644 src/Services/AI/AIPlatforms.php create mode 100644 src/Settings/AISettings/AISettings.php create mode 100644 src/Settings/AISettings/LMStudioSettings.php create mode 100644 src/Settings/AISettings/OpenRouterSettings.php diff --git a/config/packages/ai_lm_studio_platform.yaml b/config/packages/ai_lm_studio_platform.yaml index 0e6e4ac0..0e4287e0 100644 --- a/config/packages/ai_lm_studio_platform.yaml +++ b/config/packages/ai_lm_studio_platform.yaml @@ -1,3 +1,4 @@ ai: platform: - lmstudio: null + lmstudio: + host_url: '%env(string:settings:ai_lmstudio:hostURL)%' diff --git a/config/packages/ai_open_router_platform.yaml b/config/packages/ai_open_router_platform.yaml index bef68793..d34de592 100644 --- a/config/packages/ai_open_router_platform.yaml +++ b/config/packages/ai_open_router_platform.yaml @@ -1,4 +1,4 @@ ai: platform: openrouter: - api_key: '%env(OPENROUTER_API_KEY)%' + api_key: '%env(string:settings:ai_openrouter:apiKey)%' diff --git a/src/Services/AI/AIPlatformRegistry.php b/src/Services/AI/AIPlatformRegistry.php new file mode 100644 index 00000000..bf1d355c --- /dev/null +++ b/src/Services/AI/AIPlatformRegistry.php @@ -0,0 +1,95 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\AI; + +use Jbtronics\SettingsBundle\Manager\SettingsManagerInterface; +use Symfony\AI\Platform\PlatformInterface; +use Symfony\Component\DependencyInjection\Attribute\AutowireIterator; + +final readonly class AIPlatformRegistry +{ + /** + * All registered platforms, indexed by their service tag name (e.g. "openrouter", "lmstudio") + * @var array $allPlatforms + */ + private array $allPlatforms; + + /** + * All registered platforms, indexed by their AIPlatforms enum value (e.g. AIPlatforms::OPENROUTER->value) + * @var array $enabledPlatforms + */ + private array $enabledPlatforms; + + public function __construct( + SettingsManagerInterface $settingsManager, + + #[AutowireIterator(tag: 'ai.platform', indexAttribute: 'name')] + iterable $platforms, + ) { + $this->allPlatforms = iterator_to_array($platforms); + + //Check which platforms are active based on the settings and store them in $activePlatforms + $tmp = []; + foreach (AIPlatforms::cases() as $platform) { + if (isset($this->allPlatforms[$platform->toServiceTagName()])) { + //Check if the platform is active by calling its isActive() on the settings class + $settings = $settingsManager->get($platform->toSettingsClass()); + if (!$settings->isAIPlatformEnabled()) { + continue; + } + + $tmp[$platform->value] = $this->allPlatforms[$platform->toServiceTagName()]; + } + } + $this->enabledPlatforms = $tmp; + } + + public function getPlatform(AIPlatforms $platform): PlatformInterface + { + if (!isset($this->enabledPlatforms[$platform->value])) { + throw new \InvalidArgumentException(sprintf('AI platform "%s" is not active or does not exist.', $platform->name)); + } + + return $this->enabledPlatforms[$platform->value]; + } + + /** + * Check if the given platform is active (i.e. it is registered and its settings are properly configured) + * @param AIPlatforms $platform + * @return bool + */ + public function isEnabled(AIPlatforms $platform): bool + { + return isset($this->enabledPlatforms[$platform->value]); + } + + /** + * Returns an array of all active platforms, indexed by their AIPlatforms enum value (e.g. AIPlatforms::OPENROUTER->value) + * @return PlatformInterface[] + */ + public function getEnabledPlatforms(): array + { + return $this->enabledPlatforms; + } +} diff --git a/src/Services/AI/AIPlatformSettingsInterface.php b/src/Services/AI/AIPlatformSettingsInterface.php new file mode 100644 index 00000000..c400db46 --- /dev/null +++ b/src/Services/AI/AIPlatformSettingsInterface.php @@ -0,0 +1,33 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\AI; + +interface AIPlatformSettingsInterface +{ + /** + * Returns true, if the AI platform is enabled in the settings and can be used, false otherwise. + * @return bool + */ + public function isAIPlatformEnabled(): bool; +} diff --git a/src/Services/AI/AIPlatforms.php b/src/Services/AI/AIPlatforms.php new file mode 100644 index 00000000..9a1480e4 --- /dev/null +++ b/src/Services/AI/AIPlatforms.php @@ -0,0 +1,57 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\AI; + +use App\Settings\AISettings\LMStudioSettings; +use App\Settings\AISettings\OpenRouterSettings; + +enum AIPlatforms: string +{ + case OPENROUTER = 'openrouter'; + case LMSTUDIO = 'lmstudio'; + + /** + * Returns the name attribute of the service tag for this platform, which is used to register the platform in the AIPlatformRegistry + * @return string + */ + public function toServiceTagName(): string + { + return $this->value; + } + + /** + * Returns the class name of the settings class for this platform, which implements AIPlatformSettingsInterface + * @return string + * @phpstan-return class-string + */ + public function toSettingsClass(): string + { + return match ($this) { + self::LMSTUDIO => LMStudioSettings::class, + self::OPENROUTER => OpenRouterSettings::class, + + default => throw new \InvalidArgumentException(sprintf('No settings class defined for AI platform "%s".', $this->name)), + }; + } +} diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 0bf32159..7472c87f 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -25,6 +25,8 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\Providers; use App\Exceptions\ProviderIDNotSupportedException; +use App\Services\AI\AIPlatformRegistry; +use App\Services\AI\AIPlatforms; use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Settings\InfoProviderSystem\AIExtractorSettings; @@ -45,8 +47,7 @@ final class AIInfoExtractor implements InfoProviderInterface public function __construct( HttpClientInterface $httpClient, private readonly AIExtractorSettings $settings, - #[Autowire(service: "ai.traceable_platform.openrouter")] - private readonly PlatformInterface $aiPlatform, + private readonly AIPlatformRegistry $AIPlatformRegistry, private readonly DTOJsonSchemaConverter $jsonSchemaConverter, ) { $this->httpClient = $httpClient->withOptions([ @@ -171,8 +172,10 @@ final class AIInfoExtractor implements InfoProviderInterface ); try { + $aiPlatform = $this->AIPlatformRegistry->getPlatform(AIPlatforms::OPENROUTER); + //'openai/gpt-5-mini' - $result = $this->aiPlatform->invoke('openrouter/auto', $input, [ + $result = $aiPlatform->invoke('openrouter/auto', $input, [ 'response_format' => 'json_schema', 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), ]); diff --git a/src/Settings/AISettings/AISettings.php b/src/Settings/AISettings/AISettings.php new file mode 100644 index 00000000..0e99d6fc --- /dev/null +++ b/src/Settings/AISettings/AISettings.php @@ -0,0 +1,43 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\AISettings; + +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Settings\EmbeddedSettings; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Translation\TranslatableMessage as TM; + +#[Settings(label: new TM("settings.ai"), description: "settings.ai.help")] +#[SettingsIcon("fa-brain")] +class AISettings +{ + use SettingsTrait; + + #[EmbeddedSettings] + public ?OpenRouterSettings $openRouter = null; + + #[EmbeddedSettings] + public ?LMStudioSettings $lmstudio = null; +} diff --git a/src/Settings/AISettings/LMStudioSettings.php b/src/Settings/AISettings/LMStudioSettings.php new file mode 100644 index 00000000..ea6b9681 --- /dev/null +++ b/src/Settings/AISettings/LMStudioSettings.php @@ -0,0 +1,51 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\AISettings; + +use App\Form\Type\APIKeyType; +use App\Services\AI\AIPlatformSettingsInterface; +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsParameter; +use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Form\Extension\Core\Type\UrlType; +use Symfony\Component\Translation\TranslatableMessage as TM; + +#[Settings(name: 'ai_lmstudio', label: new TM("settings.ai.openrouter"), description: "settings.ai.lmstudio.help")] +#[SettingsIcon("fa-brain")] +class LMStudioSettings implements AIPlatformSettingsInterface +{ + use SettingsTrait; + + #[SettingsParameter(label: new TM("settings.ai.lmstudio.hosturl"), + formType: UrlType::class, + envVar: "AI_LMSTUDIO_HOSTURL", envVarMode: EnvVarMode::OVERWRITE)] + public ?string $hostURL = null; + + public function isAIPlatformEnabled(): bool + { + return $this->hostURL !== null && $this->hostURL !== ""; + } +} diff --git a/src/Settings/AISettings/OpenRouterSettings.php b/src/Settings/AISettings/OpenRouterSettings.php new file mode 100644 index 00000000..7b96c1d9 --- /dev/null +++ b/src/Settings/AISettings/OpenRouterSettings.php @@ -0,0 +1,50 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\AISettings; + +use App\Form\Type\APIKeyType; +use App\Services\AI\AIPlatformSettingsInterface; +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsParameter; +use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Translation\TranslatableMessage as TM; + +#[Settings(name: 'ai_openrouter', label: new TM("settings.ai.openrouter"), description: "settings.ai.openrouter.help")] +#[SettingsIcon("fa-brain")] +class OpenRouterSettings implements AIPlatformSettingsInterface +{ + use SettingsTrait; + + #[SettingsParameter(label: new TM("settings.ips.element14.apiKey"), + formType: APIKeyType::class, + formOptions: ["help_html" => true], envVar: "AI_OPENROUTER_KEY", envVarMode: EnvVarMode::OVERWRITE)] + public ?string $apiKey = null; + + public function isAIPlatformEnabled(): bool + { + return $this->apiKey !== null && $this->apiKey !== ""; + } +} diff --git a/src/Settings/AppSettings.php b/src/Settings/AppSettings.php index 14d9395e..085f7ffe 100644 --- a/src/Settings/AppSettings.php +++ b/src/Settings/AppSettings.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Settings; +use App\Settings\AISettings\AISettings; use App\Settings\BehaviorSettings\BehaviorSettings; use App\Settings\InfoProviderSystem\InfoProviderSettings; use App\Settings\MiscSettings\MiscSettings; @@ -50,6 +51,9 @@ class AppSettings #[EmbeddedSettings] public ?SynonymSettings $synonyms = null; + #[EmbeddedSettings] + public ?AISettings $ai = null; + #[EmbeddedSettings()] public ?MiscSettings $miscSettings = null; From c9d20449495ed977d841fb8f95ad7eda56152ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 00:40:17 +0200 Subject: [PATCH 055/108] Fixed structured output response format --- .../InfoProviderSystem/Providers/AIInfoExtractor.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 7472c87f..973987de 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -176,8 +176,10 @@ final class AIInfoExtractor implements InfoProviderInterface //'openai/gpt-5-mini' $result = $aiPlatform->invoke('openrouter/auto', $input, [ - 'response_format' => 'json_schema', - 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), + 'response_format' => [ + 'type' => 'json_schema', + 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), + ] ]); } catch (\Throwable $e) { throw new \RuntimeException('LLM invocation failed: '.$e->getMessage(), previous: $e); From 18bf07b19f18ba059931330cfdb346bafb13c741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 01:10:00 +0200 Subject: [PATCH 056/108] Added an AI platform selector for settings --- src/Form/Settings/AiPlatformChoiceType.php | 54 +++++++++++++++++++ src/Services/AI/AIPlatforms.php | 11 +++- .../Providers/AIInfoExtractor.php | 10 ++-- .../AIExtractorSettings.php | 7 ++- 4 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 src/Form/Settings/AiPlatformChoiceType.php diff --git a/src/Form/Settings/AiPlatformChoiceType.php b/src/Form/Settings/AiPlatformChoiceType.php new file mode 100644 index 00000000..b28f217d --- /dev/null +++ b/src/Form/Settings/AiPlatformChoiceType.php @@ -0,0 +1,54 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Form\Settings; + +use App\Services\AI\AIPlatformRegistry; +use App\Services\AI\AIPlatforms; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\Extension\Core\Type\EnumType; +use Symfony\Component\OptionsResolver\OptionsResolver; + +final class AiPlatformChoiceType extends AbstractType +{ + public function __construct(private readonly AIPlatformRegistry $platformRegistry) + { + } + + public function getParent(): ?string + { + return EnumType::class; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $choices = array_map(static fn(string $val) => AIPlatforms::from($val), array_keys($this->platformRegistry->getEnabledPlatforms())); + + $resolver->setDefaults([ + 'class' => AIPlatforms::class, + 'choices' => $choices, + 'required' => false, + ]); + } +} diff --git a/src/Services/AI/AIPlatforms.php b/src/Services/AI/AIPlatforms.php index 9a1480e4..ec772cf3 100644 --- a/src/Services/AI/AIPlatforms.php +++ b/src/Services/AI/AIPlatforms.php @@ -25,8 +25,10 @@ namespace App\Services\AI; use App\Settings\AISettings\LMStudioSettings; use App\Settings\AISettings\OpenRouterSettings; +use Symfony\Contracts\Translation\TranslatableInterface; +use Symfony\Contracts\Translation\TranslatorInterface; -enum AIPlatforms: string +enum AIPlatforms: string implements TranslatableInterface { case OPENROUTER = 'openrouter'; case LMSTUDIO = 'lmstudio'; @@ -54,4 +56,11 @@ enum AIPlatforms: string default => throw new \InvalidArgumentException(sprintf('No settings class defined for AI platform "%s".', $this->name)), }; } + + public function trans(TranslatorInterface $translator, ?string $locale = null): string + { + $key = 'settings.ai.' . $this->value; + + return $translator->trans($key, locale: $locale); + } } diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 973987de..d5be0267 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -26,14 +26,11 @@ namespace App\Services\InfoProviderSystem\Providers; use App\Exceptions\ProviderIDNotSupportedException; use App\Services\AI\AIPlatformRegistry; -use App\Services\AI\AIPlatforms; use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Settings\InfoProviderSystem\AIExtractorSettings; use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; -use Symfony\AI\Platform\PlatformInterface; -use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Contracts\HttpClient\HttpClientInterface; final class AIInfoExtractor implements InfoProviderInterface @@ -76,8 +73,7 @@ final class AIInfoExtractor implements InfoProviderInterface public function isActive(): bool { - return true; - //return !empty($this->settings->apiKey) && $this->settings->enabled; + return $this->settings->platform !== null && $this->settings->model !== ''; } public function searchByKeyword(string $keyword): array @@ -172,10 +168,10 @@ final class AIInfoExtractor implements InfoProviderInterface ); try { - $aiPlatform = $this->AIPlatformRegistry->getPlatform(AIPlatforms::OPENROUTER); + $aiPlatform = $this->AIPlatformRegistry->getPlatform($this->settings->platform ?? throw new \RuntimeException('No AI platform selected') ); //'openai/gpt-5-mini' - $result = $aiPlatform->invoke('openrouter/auto', $input, [ + $result = $aiPlatform->invoke($this->settings->model, $input, [ 'response_format' => [ 'type' => 'json_schema', 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index c78ca96e..69b02637 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -23,6 +23,8 @@ declare(strict_types=1); namespace App\Settings\InfoProviderSystem; +use App\Form\Settings\AiPlatformChoiceType; +use App\Services\AI\AIPlatforms; use App\Settings\SettingsIcon; use Jbtronics\SettingsBundle\Metadata\EnvVarMode; use Jbtronics\SettingsBundle\Settings\Settings; @@ -36,10 +38,11 @@ class AIExtractorSettings { use SettingsTrait; - #[SettingsParameter(label: new TM("settings.ips.ai_extractor.api_key"), description: new TM("settings.ips.ai_extractor.api_key.description"), + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.ai_platform"), description: new TM("settings.ips.ai_extractor.ai_platform.help"), + formType: AiPlatformChoiceType::class, envVar: "string:PROVIDER_AI_EXTRACTOR_API_KEY", envVarMode: EnvVarMode::OVERWRITE )] - public ?string $apiKey = null; + public ?AIPlatforms $platform = null; #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.description"), envVar: "string:PROVIDER_AI_EXTRACTOR_MODEL", envVarMode: EnvVarMode::OVERWRITE From 25ced0d660a9871c3803271900f88e1c58f20d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 01:19:25 +0200 Subject: [PATCH 057/108] Added workaround to make lmstudio accept all models --- src/Services/AI/AcceptAllModelsCatalog.php | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/Services/AI/AcceptAllModelsCatalog.php diff --git a/src/Services/AI/AcceptAllModelsCatalog.php b/src/Services/AI/AcceptAllModelsCatalog.php new file mode 100644 index 00000000..b3b68135 --- /dev/null +++ b/src/Services/AI/AcceptAllModelsCatalog.php @@ -0,0 +1,59 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\AI; + +use Symfony\AI\Platform\Exception\ModelNotFoundException; +use Symfony\AI\Platform\Model; +use Symfony\AI\Platform\ModelCatalog\ModelCatalogInterface; +use Symfony\Component\DependencyInjection\Attribute\AsDecorator; + +/** + * This is a wrapper, to allow accepting all models, even if they are not contained in the decorated ModelCatalogInterface. + * This is a workaround for outdated/incomplete model catalogs provided by AI platforms, which do not contain all available models, or do not update their catalogs frequently enough. + */ +#[AsDecorator('ai.platform.model_catalog.lmstudio')] +final readonly class AcceptAllModelsCatalog implements ModelCatalogInterface +{ + + public function __construct(private ModelCatalogInterface $decorated) + { + } + + public function getModel(string $modelName): Model + { + //Use the actual values when its available. + try { + return $this->decorated->getModel($modelName); + } catch (ModelNotFoundException $e) { + //If the model is not found, return a generic model with the given name and no capabilities. + return new Model($modelName, []); + } + } + + public function getModels(): array + { + //Return the actual models catalog here for correct autocompletition + return $this->decorated->getModels(); + } +} From 67cb6fb8a21f513f6b319311d9fb84d4311a0ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 01:27:25 +0200 Subject: [PATCH 058/108] AcceptAllModels return CompletitionsModels as fallback --- src/Services/AI/AcceptAllModelsCatalog.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Services/AI/AcceptAllModelsCatalog.php b/src/Services/AI/AcceptAllModelsCatalog.php index b3b68135..bf590128 100644 --- a/src/Services/AI/AcceptAllModelsCatalog.php +++ b/src/Services/AI/AcceptAllModelsCatalog.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Services\AI; +use Symfony\AI\Platform\Bridge\Generic\CompletionsModel; use Symfony\AI\Platform\Exception\ModelNotFoundException; use Symfony\AI\Platform\Model; use Symfony\AI\Platform\ModelCatalog\ModelCatalogInterface; @@ -47,7 +48,7 @@ final readonly class AcceptAllModelsCatalog implements ModelCatalogInterface return $this->decorated->getModel($modelName); } catch (ModelNotFoundException $e) { //If the model is not found, return a generic model with the given name and no capabilities. - return new Model($modelName, []); + return new CompletionsModel($modelName, []); } } From 9d389309fc0cc880e4aeded9bb95a73661770e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 15:19:52 +0200 Subject: [PATCH 059/108] Added an custom form type for model selection with autocompletition --- .../ai_model_autocomplete_controller.js | 152 ++++++++++++++++++ src/Controller/TypeaheadController.php | 22 +++ src/Form/Settings/AiModelsType.php | 62 +++++++ src/Form/Settings/AiPlatformChoiceType.php | 11 ++ .../AIExtractorSettings.php | 6 +- 5 files changed, 252 insertions(+), 1 deletion(-) create mode 100644 assets/controllers/elements/ai_model_autocomplete_controller.js create mode 100644 src/Form/Settings/AiModelsType.php diff --git a/assets/controllers/elements/ai_model_autocomplete_controller.js b/assets/controllers/elements/ai_model_autocomplete_controller.js new file mode 100644 index 00000000..e36e6b1f --- /dev/null +++ b/assets/controllers/elements/ai_model_autocomplete_controller.js @@ -0,0 +1,152 @@ +/* + * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). + * + * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import {Controller} from "@hotwired/stimulus"; + +import "tom-select/dist/css/tom-select.bootstrap5.css"; +import '../../css/components/tom-select_extensions.css'; +import TomSelect from "tom-select"; + +import TomSelect_click_to_edit from '../../tomselect/click_to_edit/click_to_edit' +import TomSelect_autoselect_typed from '../../tomselect/autoselect_typed/autoselect_typed' + +TomSelect.define('click_to_edit', TomSelect_click_to_edit) +TomSelect.define('autoselect_typed', TomSelect_autoselect_typed) + +export default class extends Controller { + _tomSelect; + + _platformSelector; + + connect() { + + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } + + //Try to find the platform selector + const platformSelector = document.querySelector("select[data-platform-selector-label='" + this.element.dataset.platformSelector + "']"); + //Clear tomselect options, if the platform selector changes + if (platformSelector) { + this.platformSelector = platformSelector; + platformSelector.addEventListener('change', () => { + //Force reload of options by clearing the cache and options of TomSelect and triggering a search with an empty string + this._tomSelect.clearOptions(); + this._tomSelect.clearCache(); + this._tomSelect.load(''); + }); + } + + let settings = { + persistent: false, + create: true, + maxItems: 1, + preload: 'focus', + createOnBlur: true, + selectOnTab: true, + clearAfterSelect: true, + shouldLoad: ((query) => true), + maxOptions: null, + //This a an ugly solution to disable the delimiter parsing of the TomSelect plugin + delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING', + dropdownParent: dropdownParent, + render: { + item: (data, escape) => { + return '' + escape(data.label) + ''; + }, + option: (data, escape) => { + if (data.image) { + return "
" + data.label + "
" + } + return '
' + escape(data.label) + '
'; + } + }, + plugins: { + 'autoselect_typed': {}, + 'click_to_edit': {}, + 'clear_button': {}, + "restore_on_backspace": {} + } + }; + + if(this.element.dataset.urlTemplate) { + const base_url = this.element.dataset.urlTemplate; + settings.searchField = "label"; + settings.sortField = "label"; + settings.valueField = "label"; + settings.load = (query, callback) => { + + + if (!this.platformSelector) { + console.error("Platform selector not found for AI model autocomplete"); + callback(); + return; + } + + //Platform is the selected option + const platform = this.platformSelector.value; + if (!platform) { + callback(); + return; + } + + const self = this; + + //Only fetch each platform once + if(self.platformLoaded === platform) { + callback(); + } + + + const url = base_url.replace('__PLATFORM__', encodeURIComponent(platform)); + + fetch(url) + .then(response => response.json()) + .then(json => { + + self.platformLoaded = platform; + + var data = []; + + for (const name in json) { + data.push({ + "label": name, + "capabilities": json[name].capabilities, + }); + } + + callback(data); + }).catch(()=>{ + callback(); + }); + }; + } + this._tomSelect = new TomSelect(this.element, settings); + } + + disconnect() { + super.disconnect(); + //Destroy the TomSelect instance + this._tomSelect.destroy(); + } + +} + + diff --git a/src/Controller/TypeaheadController.php b/src/Controller/TypeaheadController.php index 95480329..cca7df98 100644 --- a/src/Controller/TypeaheadController.php +++ b/src/Controller/TypeaheadController.php @@ -23,7 +23,10 @@ declare(strict_types=1); namespace App\Controller; use App\Entity\Parameters\AbstractParameter; +use App\Services\AI\AIPlatformRegistry; +use App\Services\AI\AIPlatforms; use App\Settings\MiscSettings\IpnSuggestSettings; +use Symfony\Component\Cache\Adapter\AdapterInterface; use Symfony\Component\HttpFoundation\Response; use App\Entity\Attachments\Attachment; use App\Entity\Parts\Category; @@ -54,6 +57,8 @@ use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Serializer; +use Symfony\Contracts\Cache\CacheInterface; +use Symfony\Contracts\Cache\ItemInterface; /** * In this controller the endpoints for the typeaheads are collected. @@ -223,4 +228,21 @@ class TypeaheadController extends AbstractController return new JsonResponse($ipnSuggestions); } + + #[Route(path: '/ai/{platform}/models', name: 'typeahead_ai_models', requirements: ['platform' => '.+'])] + public function aiModels( + AIPlatforms $platform, + AIPlatformRegistry $platformRegistry, + CacheInterface $cache, + ): JsonResponse { + + $this->denyAccessUnlessGranted('@config.change_system_settings'); + + $models = $cache->get('ai_models_'.$platform->value, function(ItemInterface $item) use ($platformRegistry, $platform) { + $item->expiresAfter(3600); //Cache for 1 hour + return $platformRegistry->getPlatform($platform)->getModelCatalog()->getModels(); + }); + + return new JsonResponse($models); + } } diff --git a/src/Form/Settings/AiModelsType.php b/src/Form/Settings/AiModelsType.php new file mode 100644 index 00000000..78b088ed --- /dev/null +++ b/src/Form/Settings/AiModelsType.php @@ -0,0 +1,62 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Form\Settings; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; +use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; + +/** + * An text input with autocomplete for AI models from the given platform. + * The platform is determined by the value of another form field, which is specified by the "platform_selector" option. This allows to filter the available models based on the selected platform. + */ +final class AiModelsType extends AbstractType +{ + public function __construct(private readonly UrlGeneratorInterface $urlGenerator) + { + } + + public function getParent(): string + { + return TextType::class; + } + + public function configureOptions(OptionsResolver $resolver): void + { + //The target label of the platform select, which is used to filter the models for the selected platform. + $resolver->setRequired('platform_selector'); + $resolver->setAllowedTypes('platform_selector', 'string'); + } + + public function finishView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['attr']['data-url-template'] = $this->urlGenerator->generate('typeahead_ai_models', ['platform' => '__PLATFORM__']); + $view->vars['attr']['data-controller'] = 'elements--ai-model-autocomplete'; + + $view->vars['attr']['data-platform-selector'] = $options['platform_selector']; + } +} diff --git a/src/Form/Settings/AiPlatformChoiceType.php b/src/Form/Settings/AiPlatformChoiceType.php index b28f217d..eb48d933 100644 --- a/src/Form/Settings/AiPlatformChoiceType.php +++ b/src/Form/Settings/AiPlatformChoiceType.php @@ -28,8 +28,13 @@ use App\Services\AI\AIPlatforms; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\EnumType; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; +/** + * Allow to choose an AI platform from the enabled platforms in the system. This is used in the settings to choose the default platform for AI features. + */ final class AiPlatformChoiceType extends AbstractType { public function __construct(private readonly AIPlatformRegistry $platformRegistry) @@ -49,6 +54,12 @@ final class AiPlatformChoiceType extends AbstractType 'class' => AIPlatforms::class, 'choices' => $choices, 'required' => false, + 'platform_selector_label' => null ]); } + + public function finishView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['attr']['data-platform-selector-label'] = $options['platform_selector_label'] ?? $view->vars['id'].'_label'; + } } diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index 69b02637..0852d2ec 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Settings\InfoProviderSystem; +use App\Form\Settings\AiModelsType; use App\Form\Settings\AiPlatformChoiceType; use App\Services\AI\AIPlatforms; use App\Settings\SettingsIcon; @@ -36,15 +37,18 @@ use Symfony\Component\Translation\TranslatableMessage as TM; #[SettingsIcon("fa-robot")] class AIExtractorSettings { + private const MODEL_SELECTOR_LABEL = 'ai_extractor'; + use SettingsTrait; #[SettingsParameter(label: new TM("settings.ips.ai_extractor.ai_platform"), description: new TM("settings.ips.ai_extractor.ai_platform.help"), - formType: AiPlatformChoiceType::class, + formType: AiPlatformChoiceType::class, formOptions: ['platform_selector_label' => self::MODEL_SELECTOR_LABEL], envVar: "string:PROVIDER_AI_EXTRACTOR_API_KEY", envVarMode: EnvVarMode::OVERWRITE )] public ?AIPlatforms $platform = null; #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.description"), + formType: AiModelsType::class, formOptions: ['platform_selector' => self::MODEL_SELECTOR_LABEL], envVar: "string:PROVIDER_AI_EXTRACTOR_MODEL", envVarMode: EnvVarMode::OVERWRITE )] public string $model = 'z-ai/glm-4.7'; From 368dd14785975b339a7afd346142e681f4829c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 15:39:52 +0200 Subject: [PATCH 060/108] Allow to add selectors to ai model selects and only show models supporting structured output for AI extractor --- src/Controller/TypeaheadController.php | 54 ++++++++++++------- src/Form/Settings/AiModelsType.php | 12 ++++- .../AIExtractorSettings.php | 3 +- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/Controller/TypeaheadController.php b/src/Controller/TypeaheadController.php index cca7df98..c4cd5607 100644 --- a/src/Controller/TypeaheadController.php +++ b/src/Controller/TypeaheadController.php @@ -22,37 +22,37 @@ declare(strict_types=1); namespace App\Controller; -use App\Entity\Parameters\AbstractParameter; -use App\Services\AI\AIPlatformRegistry; -use App\Services\AI\AIPlatforms; -use App\Settings\MiscSettings\IpnSuggestSettings; -use Symfony\Component\Cache\Adapter\AdapterInterface; -use Symfony\Component\HttpFoundation\Response; use App\Entity\Attachments\Attachment; -use App\Entity\Parts\Category; -use App\Entity\Parts\Footprint; +use App\Entity\Parameters\AbstractParameter; use App\Entity\Parameters\AttachmentTypeParameter; use App\Entity\Parameters\CategoryParameter; -use App\Entity\Parameters\ProjectParameter; use App\Entity\Parameters\FootprintParameter; use App\Entity\Parameters\GroupParameter; use App\Entity\Parameters\ManufacturerParameter; use App\Entity\Parameters\MeasurementUnitParameter; use App\Entity\Parameters\PartParameter; +use App\Entity\Parameters\ProjectParameter; use App\Entity\Parameters\StorageLocationParameter; use App\Entity\Parameters\SupplierParameter; +use App\Entity\Parts\Category; +use App\Entity\Parts\Footprint; use App\Entity\Parts\Part; use App\Entity\PriceInformations\Currency; use App\Repository\ParameterRepository; +use App\Services\AI\AIPlatformRegistry; +use App\Services\AI\AIPlatforms; use App\Services\Attachments\AttachmentURLGenerator; use App\Services\Attachments\BuiltinAttachmentsFinder; use App\Services\Attachments\PartPreviewGenerator; use App\Services\Tools\TagFinder; +use App\Settings\MiscSettings\IpnSuggestSettings; use Doctrine\ORM\EntityManagerInterface; +use Symfony\AI\Platform\Capability; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Asset\Packages; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; @@ -126,9 +126,12 @@ class TypeaheadController extends AbstractController } #[Route(path: '/parts/search/{query}', name: 'typeahead_parts')] - public function parts(EntityManagerInterface $entityManager, PartPreviewGenerator $previewGenerator, - AttachmentURLGenerator $attachmentURLGenerator, string $query = ""): JsonResponse - { + public function parts( + EntityManagerInterface $entityManager, + PartPreviewGenerator $previewGenerator, + AttachmentURLGenerator $attachmentURLGenerator, + string $query = "" + ): JsonResponse { $this->denyAccessUnlessGranted('@parts.read'); $repo = $entityManager->getRepository(Part::class); @@ -139,7 +142,7 @@ class TypeaheadController extends AbstractController foreach ($parts as $part) { //Determine the picture to show: $preview_attachment = $previewGenerator->getTablePreviewAttachment($part); - if($preview_attachment instanceof Attachment) { + if ($preview_attachment instanceof Attachment) { $preview_url = $attachmentURLGenerator->getThumbnailURL($preview_attachment, 'thumbnail_sm'); } else { $preview_url = ''; @@ -153,7 +156,7 @@ class TypeaheadController extends AbstractController 'footprint' => $part->getFootprint() instanceof Footprint ? $part->getFootprint()->getName() : '', 'description' => mb_strimwidth($part->getDescription(), 0, 127, '...'), 'image' => $preview_url, - ]; + ]; } return new JsonResponse($data); @@ -224,7 +227,8 @@ class TypeaheadController extends AbstractController $partRepository = $entityManager->getRepository(Part::class); - $ipnSuggestions = $partRepository->autoCompleteIpn($clonedPart, $description, $this->ipnSuggestSettings->suggestPartDigits); + $ipnSuggestions = $partRepository->autoCompleteIpn($clonedPart, $description, + $this->ipnSuggestSettings->suggestPartDigits); return new JsonResponse($ipnSuggestions); } @@ -232,16 +236,26 @@ class TypeaheadController extends AbstractController #[Route(path: '/ai/{platform}/models', name: 'typeahead_ai_models', requirements: ['platform' => '.+'])] public function aiModels( AIPlatforms $platform, + Request $request, AIPlatformRegistry $platformRegistry, CacheInterface $cache, ): JsonResponse { - $this->denyAccessUnlessGranted('@config.change_system_settings'); - $models = $cache->get('ai_models_'.$platform->value, function(ItemInterface $item) use ($platformRegistry, $platform) { - $item->expiresAfter(3600); //Cache for 1 hour - return $platformRegistry->getPlatform($platform)->getModelCatalog()->getModels(); - }); + $capability_filter = $request->query->getEnum('capability', Capability::class); + + $models = $cache->get('ai_models_'.$platform->value.'_'.($capability_filter?->value ?? 'all'), + function (ItemInterface $item) use ($platformRegistry, $platform, $capability_filter) { + $item->expiresAfter(3600); //Cache for 1 hour + if ($capability_filter === null) { + return $platformRegistry->getPlatform($platform)->getModelCatalog()->getModels(); + } + + //Otherwise filter the models by the capability + return array_filter($platformRegistry->getPlatform($platform)->getModelCatalog()->getModels(), + static fn(array $model) => in_array($capability_filter, $model['capabilities'] ?? [], true) + ); + }); return new JsonResponse($models); } diff --git a/src/Form/Settings/AiModelsType.php b/src/Form/Settings/AiModelsType.php index 78b088ed..5228bb47 100644 --- a/src/Form/Settings/AiModelsType.php +++ b/src/Form/Settings/AiModelsType.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Form\Settings; +use Symfony\AI\Platform\Capability; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormInterface; @@ -50,11 +51,20 @@ final class AiModelsType extends AbstractType //The target label of the platform select, which is used to filter the models for the selected platform. $resolver->setRequired('platform_selector'); $resolver->setAllowedTypes('platform_selector', 'string'); + + //Only show models, that have the given capability. This is used to only show models that support structured output for the AI extractor settings. + $resolver->setDefault('filter_capability', null); + $resolver->setAllowedTypes('filter_capability', ['null', Capability::class]); } public function finishView(FormView $view, FormInterface $form, array $options): void { - $view->vars['attr']['data-url-template'] = $this->urlGenerator->generate('typeahead_ai_models', ['platform' => '__PLATFORM__']); + $urlOptions = ['platform' => '__PLATFORM__']; + if ($options['filter_capability'] !== null) { + $urlOptions['capability'] = $options['filter_capability']->value; + } + + $view->vars['attr']['data-url-template'] = $this->urlGenerator->generate('typeahead_ai_models', $urlOptions); $view->vars['attr']['data-controller'] = 'elements--ai-model-autocomplete'; $view->vars['attr']['data-platform-selector'] = $options['platform_selector']; diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index 0852d2ec..2efd6717 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -31,6 +31,7 @@ use Jbtronics\SettingsBundle\Metadata\EnvVarMode; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\AI\Platform\Capability; use Symfony\Component\Translation\TranslatableMessage as TM; #[Settings(name: "ai_extractor", label: new TM("settings.ips.ai_extractor"), description: new TM("settings.ips.ai_extractor.description"))] @@ -48,7 +49,7 @@ class AIExtractorSettings public ?AIPlatforms $platform = null; #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.description"), - formType: AiModelsType::class, formOptions: ['platform_selector' => self::MODEL_SELECTOR_LABEL], + formType: AiModelsType::class, formOptions: ['platform_selector' => self::MODEL_SELECTOR_LABEL, 'filter_capability' => Capability::OUTPUT_STRUCTURED], envVar: "string:PROVIDER_AI_EXTRACTOR_MODEL", envVarMode: EnvVarMode::OVERWRITE )] public string $model = 'z-ai/glm-4.7'; From af98fc10795599f886e512176fd91e40545f4c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 15:48:17 +0200 Subject: [PATCH 061/108] Added translations to AI settings --- .../Providers/AIInfoExtractor.php | 6 +- src/Settings/AISettings/AISettings.php | 2 +- src/Settings/AISettings/LMStudioSettings.php | 4 +- .../AISettings/OpenRouterSettings.php | 2 +- .../AIExtractorSettings.php | 19 ++--- translations/messages.en.xlf | 72 ++++++++++++++----- 6 files changed, 67 insertions(+), 38 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index d5be0267..c8eff0a4 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -60,7 +60,7 @@ final class AIInfoExtractor implements InfoProviderInterface return [ 'name' => 'AI Information Extractor', 'description' => 'Extract part info from any URL using OpenRouter LLM', - 'url' => 'https://openrouter.ai', + //'url' => 'https://openrouter.ai', 'disabled_help' => 'Configure OpenRouter API key in settings', 'settings_class' => AIExtractorSettings::class, ]; @@ -73,7 +73,7 @@ final class AIInfoExtractor implements InfoProviderInterface public function isActive(): bool { - return $this->settings->platform !== null && $this->settings->model !== ''; + return $this->settings->platform !== null && $this->settings->model !== null && $this->settings->model !== ''; } public function searchByKeyword(string $keyword): array @@ -171,7 +171,7 @@ final class AIInfoExtractor implements InfoProviderInterface $aiPlatform = $this->AIPlatformRegistry->getPlatform($this->settings->platform ?? throw new \RuntimeException('No AI platform selected') ); //'openai/gpt-5-mini' - $result = $aiPlatform->invoke($this->settings->model, $input, [ + $result = $aiPlatform->invoke($this->settings->model ?? throw new \RuntimeException('No model selected'), $input, [ 'response_format' => [ 'type' => 'json_schema', 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), diff --git a/src/Settings/AISettings/AISettings.php b/src/Settings/AISettings/AISettings.php index 0e99d6fc..732eb597 100644 --- a/src/Settings/AISettings/AISettings.php +++ b/src/Settings/AISettings/AISettings.php @@ -29,7 +29,7 @@ use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\Component\Translation\TranslatableMessage as TM; -#[Settings(label: new TM("settings.ai"), description: "settings.ai.help")] +#[Settings(label: new TM("settings.ai"))] #[SettingsIcon("fa-brain")] class AISettings { diff --git a/src/Settings/AISettings/LMStudioSettings.php b/src/Settings/AISettings/LMStudioSettings.php index ea6b9681..627961a9 100644 --- a/src/Settings/AISettings/LMStudioSettings.php +++ b/src/Settings/AISettings/LMStudioSettings.php @@ -33,8 +33,8 @@ use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\Component\Form\Extension\Core\Type\UrlType; use Symfony\Component\Translation\TranslatableMessage as TM; -#[Settings(name: 'ai_lmstudio', label: new TM("settings.ai.openrouter"), description: "settings.ai.lmstudio.help")] -#[SettingsIcon("fa-brain")] +#[Settings(name: 'ai_lmstudio', label: new TM("settings.ai.lmstudio"))] +#[SettingsIcon("fa-robot")] class LMStudioSettings implements AIPlatformSettingsInterface { use SettingsTrait; diff --git a/src/Settings/AISettings/OpenRouterSettings.php b/src/Settings/AISettings/OpenRouterSettings.php index 7b96c1d9..e083513a 100644 --- a/src/Settings/AISettings/OpenRouterSettings.php +++ b/src/Settings/AISettings/OpenRouterSettings.php @@ -33,7 +33,7 @@ use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\Component\Translation\TranslatableMessage as TM; #[Settings(name: 'ai_openrouter', label: new TM("settings.ai.openrouter"), description: "settings.ai.openrouter.help")] -#[SettingsIcon("fa-brain")] +#[SettingsIcon("fa-robot")] class OpenRouterSettings implements AIPlatformSettingsInterface { use SettingsTrait; diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index 2efd6717..876c687f 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -35,32 +35,25 @@ use Symfony\AI\Platform\Capability; use Symfony\Component\Translation\TranslatableMessage as TM; #[Settings(name: "ai_extractor", label: new TM("settings.ips.ai_extractor"), description: new TM("settings.ips.ai_extractor.description"))] -#[SettingsIcon("fa-robot")] +#[SettingsIcon("fa-plug")] class AIExtractorSettings { private const MODEL_SELECTOR_LABEL = 'ai_extractor'; use SettingsTrait; - #[SettingsParameter(label: new TM("settings.ips.ai_extractor.ai_platform"), description: new TM("settings.ips.ai_extractor.ai_platform.help"), + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.ai_platform"), formType: AiPlatformChoiceType::class, formOptions: ['platform_selector_label' => self::MODEL_SELECTOR_LABEL], - envVar: "string:PROVIDER_AI_EXTRACTOR_API_KEY", envVarMode: EnvVarMode::OVERWRITE )] public ?AIPlatforms $platform = null; - #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.description"), + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.help"), formType: AiModelsType::class, formOptions: ['platform_selector' => self::MODEL_SELECTOR_LABEL, 'filter_capability' => Capability::OUTPUT_STRUCTURED], - envVar: "string:PROVIDER_AI_EXTRACTOR_MODEL", envVarMode: EnvVarMode::OVERWRITE )] - public string $model = 'z-ai/glm-4.7'; + public ?string $model = null; - #[SettingsParameter(label: new TM("settings.ips.ai_extractor.enabled"), description: new TM("settings.ips.ai_extractor.enabled.description"), - envVar: "bool:PROVIDER_AI_EXTRACTOR_ENABLED", envVarMode: EnvVarMode::OVERWRITE - )] - public bool $enabled = false; - - #[SettingsParameter(label: new TM("settings.ips.ai_extractor.max_content_length"), description: new TM("settings.ips.ai_extractor.max_content_length.description"), - envVar: "int:PROVIDER_AI_EXTRACTOR_MAX_CONTENT_LENGTH", envVarMode: EnvVarMode::OVERWRITE + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.max_content_length"), + description: new TM("settings.ips.ai_extractor.max_content_length.description"), )] public int $maxContentLength = 50000; } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 4da88512..e16a6d69 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -2780,7 +2780,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can Name
- + part.table.si_value SI Value @@ -7218,13 +7218,13 @@ Element 1 -> Element 1.2 Subprojects - + project.info.total_build_price Total build price - + project.info.per_unit_price per unit @@ -7254,7 +7254,7 @@ Element 1 -> Element 1.2 Price - + project.bom.ext_price Extended Price @@ -10053,85 +10053,85 @@ Please note, that you can not impersonate a disabled user. If you try you will g When enabled, the datasheet field in KiCad will link to the actual PDF file (if found). When disabled, it will link to the Part-DB page instead. The Part-DB page link is always available as a separate "Part-DB URL" field. - + settings.misc.kicad_eda.editor.title KiCad autocomplete lists - + settings.misc.kicad_eda.editor.link Autocomplete settings - + settings.misc.kicad_eda.editor.description Configure whether KiCad autocomplete uses the autogenerated default lists or your custom override files. The custom files are editable here, while the default files are shown read-only for reference. - + settings.misc.kicad_eda.editor.footprints Footprints list - + settings.misc.kicad_eda.editor.footprints.help One entry per line. Used as autocomplete suggestions for KiCad footprint fields. - + settings.misc.kicad_eda.editor.symbols Symbols list - + settings.misc.kicad_eda.editor.symbols.help One entry per line. Used as autocomplete suggestions for KiCad symbol fields. - + settings.misc.kicad_eda.use_custom_list Use custom autocomplete lists - + settings.misc.kicad_eda.use_custom_list.help When enabled, KiCad autocomplete uses public/kicad/footprints_custom.txt and public/kicad/symbols_custom.txt instead of the autogenerated default files. - + settings.misc.kicad_eda.editor.custom_footprints Custom footprints list - + settings.misc.kicad_eda.editor.custom_symbols Custom symbols list - + settings.misc.kicad_eda.editor.default_footprints Default footprints list - + settings.misc.kicad_eda.editor.default_symbols Default symbols list - + settings.misc.kicad_eda.editor.default_files_help Autogenerated file shown for reference only. Changes must be made in the custom list. @@ -13067,5 +13067,41 @@ Buerklin-API Authentication server: Mapping error: Check if you have selected the right delimiter! + + + settings.ai + AI + + + + + settings.ai.openrouter + OpenRouter + + + + + settings.ai.lmstudio + LMStudio + + + + + settings.ips.ai_extractor.model + AI Model + + + + + settings.ips.ai_extractor.ai_platform + AI Platform + + + + + settings.ips.ai_extractor.model.help + The AI model that should be used for extraction. Must support structured output. + + From 4dbd92ac4d5d806f4f37275d66ad9a3bbbbb7d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 19:36:03 +0200 Subject: [PATCH 062/108] Use markdown as input for the LLM and add extracted microdata separatley --- composer.json | 7 + composer.lock | 466 +++++++++++++++--- .../DTOJsonSchemaConverter.php | 14 +- .../Providers/AIInfoExtractor.php | 85 ++-- symfony.lock | 6 - 5 files changed, 481 insertions(+), 97 deletions(-) diff --git a/composer.json b/composer.json index c7c52d5c..c4b3cb59 100644 --- a/composer.json +++ b/composer.json @@ -33,6 +33,7 @@ "jbtronics/dompdf-font-loader-bundle": "^1.0.0", "jbtronics/settings-bundle": "^3.0.0", "jfcherng/php-diff": "^6.14", + "jkphl/micrometa": "dev-master", "knpuniversity/oauth2-client-bundle": "^2.15", "league/commonmark": "^2.7", "league/csv": "^9.8.0", @@ -159,6 +160,12 @@ "App\\Tests\\": "tests/" } }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/jbtronics/micrometa" + } + ], "scripts": { "auto-scripts": { "cache:clear": "symfony-cmd", diff --git a/composer.lock b/composer.lock index 00b5e831..1963342f 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": "699f421ad81f8a1acacf8e2c4af66491", + "content-hash": "7c76e3af5fd042105a3208fdcb300a11", "packages": [ { "name": "amphp/amp", @@ -3883,16 +3883,16 @@ }, { "name": "doctrine/migrations", - "version": "3.9.6", + "version": "3.9.7", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "ffd8355cdd8505fc650d9604f058bf62aedd80a1" + "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/ffd8355cdd8505fc650d9604f058bf62aedd80a1", - "reference": "ffd8355cdd8505fc650d9604f058bf62aedd80a1", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", + "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", "shasum": "" }, "require": { @@ -3966,7 +3966,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.9.6" + "source": "https://github.com/doctrine/migrations/tree/3.9.7" }, "funding": [ { @@ -3982,7 +3982,7 @@ "type": "tidelift" } ], - "time": "2026-02-11T06:46:11+00:00" + "time": "2026-04-23T19:33:20+00:00" }, { "name": "doctrine/orm", @@ -4074,19 +4074,20 @@ }, { "name": "doctrine/persistence", - "version": "4.1.1", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09" + "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", - "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", + "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", "shasum": "" }, "require": { + "doctrine/deprecations": "^1", "doctrine/event-manager": "^1 || ^2", "php": "^8.1", "psr/cache": "^1.0 || ^2.0 || ^3.0" @@ -4097,13 +4098,13 @@ "phpstan/phpstan-phpunit": "^2", "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "^10.5.58 || ^12", - "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0", - "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Persistence\\": "src/Persistence" + "Doctrine\\Persistence\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4147,7 +4148,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/4.1.1" + "source": "https://github.com/doctrine/persistence/tree/4.2.0" }, "funding": [ { @@ -4163,7 +4164,7 @@ "type": "tidelift" } ], - "time": "2025-10-16T20:13:18+00:00" + "time": "2026-04-26T12:12:52+00:00" }, { "name": "doctrine/sql-formatter", @@ -5534,6 +5535,191 @@ ], "time": "2023-05-21T07:57:08+00:00" }, + { + "name": "jkphl/dom-factory", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/jkphl/dom-factory.git", + "reference": "dd32b8b2cc800f065c0eff8bb621d9f80147d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jkphl/dom-factory/zipball/dd32b8b2cc800f065c0eff8bb621d9f80147d45e", + "reference": "dd32b8b2cc800f065c0eff8bb621d9f80147d45e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "guzzlehttp/guzzle": "^6.0||^7.0", + "masterminds/html5": "^2.7", + "php": ">=7.2" + }, + "require-dev": { + "clue/graph-composer": "^1.1", + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.0||^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Jkphl\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joschi Kuphal", + "email": "joschi@kuphal.net", + "homepage": "https://jkphl.is", + "role": "Developer" + } + ], + "description": "Simple HTML5/XML DOM factory", + "homepage": "https://github.com/jkphl/dom-factory", + "support": { + "email": "joschi@kuphal.net", + "issues": "https://github.com/jkphl/dom-factory/issues", + "source": "https://github.com/jkphl/dom-factory" + }, + "time": "2021-06-28T11:49:36+00:00" + }, + { + "name": "jkphl/micrometa", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/jbtronics/micrometa.git", + "reference": "720f409151c2cc20add9478b7a0a635fa1707021" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jbtronics/micrometa/zipball/720f409151c2cc20add9478b7a0a635fa1707021", + "reference": "720f409151c2cc20add9478b7a0a635fa1707021", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "jkphl/dom-factory": "^1", + "jkphl/rdfa-lite-microdata": "^0.4.4", + "league/uri": "^5.0|^6.5|^7.0", + "mf2/mf2": "^0.4", + "ml/json-ld": "^1.2", + "monolog/monolog": "^1.24 || ^2 || ^3", + "php": ">=7.1.3", + "psr/cache": "^1.0|^2|^3", + "psr/log": "^1.1|^2|^3", + "symfony/cache": "^4.0|^5.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "clue/graph-composer": "^1.1", + "mf2/tests": "@dev", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^7.0 || ^8.5", + "squizlabs/php_codesniffer": "^3.3" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Jkphl\\": "src/" + } + }, + "scripts": { + "phpunit": [ + "vendor/bin/phpunit --configuration phpunit.xml.dist" + ], + "depgraph": [ + "vendor/bin/graph-composer --no-dev export . doc/dependencies.svg" + ], + "check-style": [ + "vendor/bin/phpcs -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src" + ], + "fix-style": [ + "vendor/bin/phpcbf -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src" + ], + "test": [ + "@phpunit" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joschi Kuphal", + "email": "joschi@tollwerk.de", + "homepage": "https://jkphl.is", + "role": "Developer" + } + ], + "description": "A meta parser for extracting micro information out of web documents, currently supporting Microformats 1+2, HTML Microdata, RDFa Lite 1.1 and JSON-LD", + "homepage": "https://jkphl.is/projects/micrometa/", + "support": { + "email": "joschi@tollwerk.de", + "source": "https://github.com/jkphl/micrometa", + "issues": "https://github.com/jkphl/micrometa/issues" + }, + "time": "2026-04-26T17:25:19+00:00" + }, + { + "name": "jkphl/rdfa-lite-microdata", + "version": "v0.4.7", + "source": { + "type": "git", + "url": "https://github.com/jkphl/rdfa-lite-microdata.git", + "reference": "ffc4940e8be55798257a03da7ed7d4506a13c3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jkphl/rdfa-lite-microdata/zipball/ffc4940e8be55798257a03da7ed7d4506a13c3e5", + "reference": "ffc4940e8be55798257a03da7ed7d4506a13c3e5", + "shasum": "" + }, + "require": { + "jkphl/dom-factory": "^1", + "php": ">=5.5" + }, + "require-dev": { + "clue/graph-composer": "dev-master", + "codeclimate/php-test-reporter": "^0.4.4", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "^2.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Jkphl\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joschi Kuphal", + "email": "joschi@tollwerk.de", + "homepage": "https://jkphl.is", + "role": "Developer" + } + ], + "description": "RDFa Lite 1.1 and HTML Microdata parser for web documents (HTML, SVG, XML)", + "homepage": "https://github.com/jkphl/rdfa-lite-microdata", + "support": { + "email": "joschi@tollwerk.de", + "issues": "https://github.com/jkphl/rdfa-lite-microdata/issues", + "source": "https://github.com/jkphl/rdfa-lite-microdata" + }, + "time": "2023-01-27T13:29:45+00:00" + }, { "name": "kelunik/certificate", "version": "v1.1.3", @@ -6899,6 +7085,170 @@ }, "time": "2025-07-25T09:04:22+00:00" }, + { + "name": "mf2/mf2", + "version": "0.4.6", + "source": { + "type": "git", + "url": "https://github.com/microformats/php-mf2.git", + "reference": "00b70ee7eb7f5b0585b1bd467f6c9cbd75055d23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/microformats/php-mf2/zipball/00b70ee7eb7f5b0585b1bd467f6c9cbd75055d23", + "reference": "00b70ee7eb7f5b0585b1bd467f6c9cbd75055d23", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "mf2/tests": "@dev", + "phpdocumentor/phpdocumentor": "v2.8.4", + "phpunit/phpunit": "4.8.*" + }, + "suggest": { + "barnabywalters/mf-cleaner": "To more easily handle the canonical data php-mf2 gives you", + "masterminds/html5": "Alternative HTML parser for PHP, for better HTML5 support." + }, + "bin": [ + "bin/fetch-mf2", + "bin/parse-mf2" + ], + "type": "library", + "autoload": { + "files": [ + "Mf2/Parser.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "CC0-1.0" + ], + "authors": [ + { + "name": "Barnaby Walters", + "homepage": "http://waterpigs.co.uk" + } + ], + "description": "A pure, generic microformats2 parser — makes HTML as easy to consume as a JSON API", + "keywords": [ + "html", + "microformats", + "microformats 2", + "parser", + "semantic" + ], + "support": { + "issues": "https://github.com/microformats/php-mf2/issues", + "source": "https://github.com/microformats/php-mf2/tree/master" + }, + "time": "2018-08-24T14:47:04+00:00" + }, + { + "name": "ml/iri", + "version": "1.1.4", + "target-dir": "ML/IRI", + "source": { + "type": "git", + "url": "https://github.com/lanthaler/IRI.git", + "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lanthaler/IRI/zipball/cbd44fa913e00ea624241b38cefaa99da8d71341", + "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341", + "shasum": "" + }, + "require": { + "lib-pcre": ">=4.0", + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "ML\\IRI": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Markus Lanthaler", + "email": "mail@markus-lanthaler.com", + "homepage": "http://www.markus-lanthaler.com", + "role": "Developer" + } + ], + "description": "IRI handling for PHP", + "homepage": "http://www.markus-lanthaler.com", + "keywords": [ + "URN", + "iri", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/lanthaler/IRI/issues", + "source": "https://github.com/lanthaler/IRI/tree/master" + }, + "time": "2014-01-21T13:43:39+00:00" + }, + { + "name": "ml/json-ld", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/lanthaler/JsonLD.git", + "reference": "537e68e87a6bce23e57c575cd5dcac1f67ce25d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/537e68e87a6bce23e57c575cd5dcac1f67ce25d8", + "reference": "537e68e87a6bce23e57c575cd5dcac1f67ce25d8", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ml/iri": "^1.1.1", + "php": ">=5.3.0" + }, + "require-dev": { + "json-ld/tests": "1.0", + "phpunit/phpunit": "^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ML\\JsonLD\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Markus Lanthaler", + "email": "mail@markus-lanthaler.com", + "homepage": "http://www.markus-lanthaler.com", + "role": "Developer" + } + ], + "description": "JSON-LD Processor for PHP", + "homepage": "http://www.markus-lanthaler.com", + "keywords": [ + "JSON-LD", + "jsonld" + ], + "support": { + "issues": "https://github.com/lanthaler/JsonLD/issues", + "source": "https://github.com/lanthaler/JsonLD/tree/1.2.1" + }, + "time": "2022-09-29T08:45:17+00:00" + }, { "name": "monolog/monolog", "version": "3.10.0", @@ -9409,16 +9759,16 @@ }, { "name": "rhukster/dom-sanitizer", - "version": "1.0.10", + "version": "1.0.11", "source": { "type": "git", "url": "https://github.com/rhukster/dom-sanitizer.git", - "reference": "49a98046b708a4c92f754f5b0ef1720bb85142e2" + "reference": "02d08ec8b36b93b04517d74fe82b715ef06273bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/49a98046b708a4c92f754f5b0ef1720bb85142e2", - "reference": "49a98046b708a4c92f754f5b0ef1720bb85142e2", + "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/02d08ec8b36b93b04517d74fe82b715ef06273bd", + "reference": "02d08ec8b36b93b04517d74fe82b715ef06273bd", "shasum": "" }, "require": { @@ -9448,9 +9798,9 @@ "description": "A simple but effective DOM/SVG/MathML Sanitizer for PHP 7.4+", "support": { "issues": "https://github.com/rhukster/dom-sanitizer/issues", - "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.10" + "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.11" }, - "time": "2026-04-10T17:00:11+00:00" + "time": "2026-04-23T22:56:32+00:00" }, { "name": "robrichards/xmlseclibs", @@ -13693,7 +14043,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -13752,7 +14102,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" }, "funding": [ { @@ -13776,16 +14126,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", - "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/4864388bfbd3001ce88e234fab652acd91fdc57e", + "reference": "4864388bfbd3001ce88e234fab652acd91fdc57e", "shasum": "" }, "require": { @@ -13834,7 +14184,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.37.0" }, "funding": [ { @@ -13854,11 +14204,11 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2026-04-26T13:13:48+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", @@ -13922,7 +14272,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.37.0" }, "funding": [ { @@ -13946,7 +14296,7 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -14009,7 +14359,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.37.0" }, "funding": [ { @@ -14033,7 +14383,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -14094,7 +14444,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.37.0" }, "funding": [ { @@ -14118,7 +14468,7 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", @@ -14174,7 +14524,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.37.0" }, "funding": [ { @@ -14198,7 +14548,7 @@ }, { "name": "symfony/polyfill-php84", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", @@ -14254,7 +14604,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.37.0" }, "funding": [ { @@ -14278,16 +14628,16 @@ }, { "name": "symfony/polyfill-php85", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "2c408a6bb0313e6001a83628dc5506100474254e" + "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/2c408a6bb0313e6001a83628dc5506100474254e", - "reference": "2c408a6bb0313e6001a83628dc5506100474254e", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/fcfa4973a9917cef23f2e38774da74a2b7d115ee", + "reference": "fcfa4973a9917cef23f2e38774da74a2b7d115ee", "shasum": "" }, "require": { @@ -14334,7 +14684,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.37.0" }, "funding": [ { @@ -14354,11 +14704,11 @@ "type": "tidelift" } ], - "time": "2026-04-10T16:50:15+00:00" + "time": "2026-04-26T13:10:57+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.36.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -14417,7 +14767,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.36.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" }, "funding": [ { @@ -19854,12 +20204,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "10b8a93511210c9bae3be31f4fe13c3ff974cad4" + "reference": "08cd07f04fb07fb4d316e956801d57b700cf7096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/10b8a93511210c9bae3be31f4fe13c3ff974cad4", - "reference": "10b8a93511210c9bae3be31f4fe13c3ff974cad4", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/08cd07f04fb07fb4d316e956801d57b700cf7096", + "reference": "08cd07f04fb07fb4d316e956801d57b700cf7096", "shasum": "" }, "conflict": { @@ -19882,6 +20232,7 @@ "alextselegidis/easyappointments": "<=1.5.2", "alexusmai/laravel-file-manager": "<=3.3.1", "algolia/algoliasearch-magento-2": "<=3.16.1|>=3.17.0.0-beta1,<=3.17.1", + "almirhodzic/nova-toggle-5": "<1.3", "alt-design/alt-redirect": "<1.6.4", "altcha-org/altcha": "<1.3.1", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", @@ -19978,7 +20329,7 @@ "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", - "cockpit-hq/cockpit": "<2.13.5", + "cockpit-hq/cockpit": "<2.14", "code16/sharp": "<9.20", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", @@ -20141,7 +20492,7 @@ "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8.10", + "flarum/core": "<=1.8.15|>=2.0.0.0-beta1,<=2.0.0.0-beta8", "flarum/flarum": "<0.1.0.0-beta8", "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", @@ -20178,7 +20529,7 @@ "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", "getgrav/grav": "<1.11.0.0-beta1", - "getkirby/cms": "<=5.2.1", + "getkirby/cms": "<5.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -20276,7 +20627,7 @@ "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3.4.1", - "kimai/kimai": "<=2.53", + "kimai/kimai": "<2.54", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -20720,7 +21071,7 @@ "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", "typicms/core": "<16.1.7", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1|==14.2", "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", @@ -20902,7 +21253,7 @@ "type": "tidelift" } ], - "time": "2026-04-22T18:27:19+00:00" + "time": "2026-04-24T17:22:29+00:00" }, { "name": "sebastian/cli-parser", @@ -22418,6 +22769,7 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { + "jkphl/micrometa": 20, "roave/security-advisories": 20 }, "prefer-stable": false, diff --git a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php index b9208c87..2d297243 100644 --- a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php +++ b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php @@ -54,7 +54,8 @@ final class DTOJsonSchemaConverter 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], - 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass in grams'], + 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass of the product in grams'], + 'gtin' => ['type' => ['string', 'null'], 'description' => 'Global Trade Item Number (GTIN) / EAN / UPC code'], 'parameters' => [ 'type' => 'array', 'items' => [ @@ -94,17 +95,17 @@ final class DTOJsonSchemaConverter 'items' => [ 'type' => 'object', 'properties' => [ - 'distributor_name' => ['type' => 'string'], - 'order_number' => ['type' => ['string', 'null']], + 'distributor_name' => ['type' => 'string', 'description' => 'Name of the distributor or vendor. Typically the shop name'], + 'order_number' => ['type' => ['string', 'null'], 'description' => 'The order number or SKU used by the distributor. Optional, but can help to find the product on the distributor website.'], 'product_url' => ['type' => 'string'], 'prices' => [ 'type' => 'array', 'items' => [ 'type' => 'object', 'properties' => [ - 'minimum_quantity' => ['type' => 'integer'], - 'price' => ['type' => 'number'], - 'currency' => ['type' => 'string'], + 'minimum_quantity' => ['type' => 'integer', 'description' => 'Minimum quantity for this price tier. 1 when no tiered pricing is available.'], + 'price' => ['type' => 'number', 'description' => 'Price for the given minimum quantity.'], + 'currency' => ['type' => 'string', 'description' => 'Currency ISO code, e.g. USD'], ], 'required' => ['minimum_quantity', 'price', 'currency'], ], @@ -226,6 +227,7 @@ final class DTOJsonSchemaConverter manufacturing_status: $manufacturingStatus, provider_url: $productUrl, footprint: $data['footprint'] ?? null, + gtin: $data['gtin'] ?? null, notes: null, datasheets: $datasheets, images: $images, diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index c8eff0a4..7ae858a6 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -29,10 +29,15 @@ use App\Services\AI\AIPlatformRegistry; use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Settings\InfoProviderSystem\AIExtractorSettings; +use Brick\Schema\SchemaReader; +use Jkphl\Micrometa; +use League\HTMLToMarkdown\HtmlConverter; use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; +use Symfony\Component\DomCrawler\Crawler; use Symfony\Contracts\HttpClient\HttpClientInterface; + final class AIInfoExtractor implements InfoProviderInterface { use FixAndValidateUrlTrait; @@ -95,16 +100,56 @@ final class AIInfoExtractor implements InfoProviderInterface $html = $response->getContent(); // Clean HTML - $cleanedHtml = $this->cleanHTML($html); + /*$cleanedHtml = $this->cleanHTML($html); // Truncate to max content length - $truncatedHtml = $this->truncateHTML($cleanedHtml, $this->settings->maxContentLength); + $truncatedHtml = $this->truncateHTML($cleanedHtml, $this->settings->maxContentLength);*/ + + $markdown = $this->htmlToMarkdown($html); + + //Extract structured data using traditional methods, to provide additional context to the LLM. This can help improve accuracy, especially for technical specifications that might be in tables or specific formats. + $structuredData = $this->extractStructuredData($html, $url); // Call LLM - $llmResponse = $this->callLLM($truncatedHtml, $url); + $llmResponse = $this->callLLM($markdown, $url, $structuredData); // Build and return PartDetailDTO - return $this->jsonSchemaConverter->jsonToDTO($llmResponse, $this->getProviderKey(), $url, $url, self::DISTRIBUTOR_NAME); + $result = $this->jsonSchemaConverter->jsonToDTO($llmResponse, $this->getProviderKey(), $url, $url, self::DISTRIBUTOR_NAME); + + return $result; + } + + /** + * Extracts structured data from the HTML using microformats. + * @param string $html + * @param string $url + * @return string JSON encoded structured data + */ + private function extractStructuredData(string $html, string $url): string + { + $micrometa = new Micrometa\Ports\Parser(); + $items = $micrometa($url, $html); + + return json_encode($items->toObject(), JSON_THROW_ON_ERROR); + } + + private function htmlToMarkdown(string $html): string + { + //Extract only the main content of the page to avoid overwhelming the LLM with irrelevant information. + $crawler = new Crawler($html); + $mainContent = $crawler->filter('main, article, #content')->first(); + + // If we found a specific content area, get its HTML; otherwise, use the whole body. + $htmlToConvert = $mainContent->count() ? $mainContent->html() : $html; + + //Concert to markdown + $converter = new HtmlConverter([ + 'strip_tags' => true, // Removes tags that aren't Markdown-compatible (like
) + 'hard_break' => true, // Preserves line breaks + 'remove_nodes' => 'nav footer script style' // Extra safety layer + ]); + + return $converter->convert($htmlToConvert); } public function getCapabilities(): array @@ -160,13 +205,18 @@ final class AIInfoExtractor implements InfoProviderInterface return $truncated; } - private function callLLM(string $htmlContent, string $url): array + private function callLLM(string $htmlContent, string $url, ?string $structuredData = null): array { $input = new MessageBag( Message::forSystem($this->buildSystemPrompt()), Message::ofUser("Extract part information from this webpage content:\n\nURL: $url\n\n$htmlContent") ); + if ($structuredData) { + $input->add(Message::ofUser("Following data was extracted using traditional methods, but might be incomplete or inaccurate. + Enrich it with the actual website data:\n\n".$structuredData)); + } + try { $aiPlatform = $this->AIPlatformRegistry->getPlatform($this->settings->platform ?? throw new \RuntimeException('No AI platform selected') ); @@ -187,29 +237,8 @@ final class AIInfoExtractor implements InfoProviderInterface private function buildSystemPrompt(): string { return <<<'PROMPT' -You are an expert at extracting electronic component information from web pages. Extract structured data in JSON format. - -Return ONLY a valid JSON object with this exact structure: -{ - "name": "string", - "description": "string", - "manufacturer": "string | null", - "mpn": "string | null", - "category": "string | null", - "manufacturing_status": "active|obsolete|nrfnd|discontinued|null", - "footprint": "string | null", - "mass": "number | null (in grams)", - "parameters": [{"name": "string", "value": "string", "unit": "string | null"}], - "datasheets": [{"url": "string", "description": "string"}], - "images": [{"url": "string", "description": "string"}], - "vendor_infos": [{ - "distributor_name": "string", - "order_number": "string | null", - "product_url": "string", - "prices": [{"minimum_quantity": int, "price": number, "currency": "string"}] - }], - "manufacturer_product_url": "string | null" -} +You are an expert at extracting electronic component information from web pages. Extract structured data in JSON format, from markdown extracted from a product page. +Focus on the main content of the page, such as product descriptions, specifications, and tables. Ignore navigation menus, footers, and sidebars. Rules: - manufacturing_status: Use "active", "obsolete", "nrfnd" (not recommended for new designs), "discontinued", or null diff --git a/symfony.lock b/symfony.lock index dde7df36..f8f88675 100644 --- a/symfony.lock +++ b/symfony.lock @@ -441,12 +441,6 @@ "symfony/browser-kit": { "version": "v4.2.3" }, - "symfony/cache": { - "version": "v4.2.3" - }, - "symfony/cache-contracts": { - "version": "v1.1.5" - }, "symfony/config": { "version": "v4.2.3" }, From 4a45b5d5a9c439a81c0c99d3bedc2dbf1825a002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 21:31:07 +0200 Subject: [PATCH 063/108] Improved markdown conversion and add ability to extract notes --- .../DTOJsonSchemaConverter.php | 17 ++--- .../Providers/AIInfoExtractor.php | 62 ++++++------------- 2 files changed, 28 insertions(+), 51 deletions(-) diff --git a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php index 2d297243..759c3d12 100644 --- a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php +++ b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php @@ -48,14 +48,15 @@ final class DTOJsonSchemaConverter 'type' => 'object', 'properties' => [ 'name' => ['type' => 'string', 'description' => 'Product name'], - 'description' => ['type' => 'string', 'description' => 'Product description'], + 'description' => ['type' => 'string', 'description' => 'A short description of the product, maybe containing the most important things. Onnly One line.'], 'manufacturer' => ['type' => ['string', 'null'], 'description' => 'Manufacturer name'], 'mpn' => ['type' => ['string', 'null'], 'description' => 'Manufacturer Part Number'], - 'category' => ['type' => ['string', 'null'], 'description' => 'Product category'], + 'category' => ['type' => ['string', 'null'], 'description' => 'Product category, e.g. "Passive components -> Resistors"'], 'manufacturing_status' => ['type' => ['string', 'null'], 'enum' => ['active', 'obsolete', 'nrfnd', 'discontinued', null], 'description' => 'Manufacturing status'], - 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type'], + 'footprint' => ['type' => ['string', 'null'], 'description' => 'Package/footprint type, like "SOT-23", "DIP-8", "QFN-32" etc.'], 'mass' => ['type' => ['number', 'null'], 'description' => 'Mass of the product in grams'], - 'gtin' => ['type' => ['string', 'null'], 'description' => 'Global Trade Item Number (GTIN) / EAN / UPC code'], + 'gtin' => ['type' => ['string', 'null'], 'description' => 'Global Trade Item Number (GTIN) / EAN / UPC code for barcodes'], + 'notes' => ['type' => ['string', 'null'], 'description' => 'Optional long description of the part with more details than description. Can be markdown formatted.'], 'parameters' => [ 'type' => 'array', 'items' => [ @@ -98,6 +99,7 @@ final class DTOJsonSchemaConverter 'distributor_name' => ['type' => 'string', 'description' => 'Name of the distributor or vendor. Typically the shop name'], 'order_number' => ['type' => ['string', 'null'], 'description' => 'The order number or SKU used by the distributor. Optional, but can help to find the product on the distributor website.'], 'product_url' => ['type' => 'string'], + 'prices_include_vat' => ['type' => ['boolean', 'null'], 'description' => 'Whether the prices include VAT or not. Null if unknown.'], 'prices' => [ 'type' => 'array', 'items' => [ @@ -194,8 +196,8 @@ final class DTOJsonSchemaConverter $prices[] = new PriceDTO( minimum_discount_amount: (int) ($p['minimum_quantity'] ?? 1), price: (string) ($p['price'] ?? 0), - currency_iso_code: $p['currency'] ?? 'USD', - price_related_quantity: (int) ($p['minimum_quantity'] ?? 1), + currency_iso_code: $p['currency'] ?? null, + price_related_quantity: 1, ); } } @@ -205,6 +207,7 @@ final class DTOJsonSchemaConverter order_number: $v['order_number'] ?? 'Unknown', prices: $prices, product_url: $v['product_url'] ?? $productUrl, + prices_include_vat: $v['prices_include_vat'] ?? null, ); } } @@ -228,7 +231,7 @@ final class DTOJsonSchemaConverter provider_url: $productUrl, footprint: $data['footprint'] ?? null, gtin: $data['gtin'] ?? null, - notes: null, + notes: $data['notes'], datasheets: $datasheets, images: $images, parameters: $parameters, diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 7ae858a6..92ed4e19 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -37,6 +37,8 @@ use Symfony\AI\Platform\Message\MessageBag; use Symfony\Component\DomCrawler\Crawler; use Symfony\Contracts\HttpClient\HttpClientInterface; +use function Symfony\Component\String\u; + final class AIInfoExtractor implements InfoProviderInterface { @@ -105,7 +107,10 @@ final class AIInfoExtractor implements InfoProviderInterface // Truncate to max content length $truncatedHtml = $this->truncateHTML($cleanedHtml, $this->settings->maxContentLength);*/ + //Convert html to markdown, to provide a cleaner input to the LLM. $markdown = $this->htmlToMarkdown($html); + //Truncate markdown to max content length, if needed + $markdown = u($markdown)->truncate($this->settings->maxContentLength, '... [truncated]')->toString(); //Extract structured data using traditional methods, to provide additional context to the LLM. This can help improve accuracy, especially for technical specifications that might be in tables or specific formats. $structuredData = $this->extractStructuredData($html, $url); @@ -137,10 +142,21 @@ final class AIInfoExtractor implements InfoProviderInterface { //Extract only the main content of the page to avoid overwhelming the LLM with irrelevant information. $crawler = new Crawler($html); - $mainContent = $crawler->filter('main, article, #content')->first(); + $mainContent = $crawler->filter('main, article, #content'); // If we found a specific content area, get its HTML; otherwise, use the whole body. - $htmlToConvert = $mainContent->count() ? $mainContent->html() : $html; + //Concat the html of all matched nodes, to provide more context to the LLM, especially for pages that use multiple sections for product info. + if ($mainContent->count() > 0) { + $htmlToConvert = ''; + foreach ($mainContent as $node) { + $htmlToConvert .= $node->ownerDocument->saveHTML($node); + $htmlToConvert .= "\n\n"; // Add some spacing between sections + } + } else { + //Use the whole body content, as it might contain relevant information, especially for simpler pages that don't have a clear main/content section. + $htmlToConvert = $html; + } + //Concert to markdown $converter = new HtmlConverter([ @@ -163,48 +179,6 @@ final class AIInfoExtractor implements InfoProviderInterface ]; } - private function cleanHTML(string $html): string - { - // Remove script tags - $html = preg_replace('/]*>(.*?)<\/script>/is', '', $html); - - // Remove style tags - $html = preg_replace('/]*>(.*?)<\/style>/is', '', $html); - - // Remove nav tags - $html = preg_replace('/]*>(.*?)<\/nav>/is', '', $html); - - // Remove footer tags - $html = preg_replace('/]*>(.*?)<\/footer>/is', '', $html); - - // Remove header tags - $html = preg_replace('/]*>(.*?)<\/header>/is', '', $html); - - // Remove HTML comments - $html = preg_replace('//is', '', $html); - - return $html; - } - - private function truncateHTML(string $html, int $maxLength): string - { - if (strlen($html) <= $maxLength) { - return $html; - } - - // Truncate and find the last > or space to avoid cutting tags - $truncated = substr($html, 0, $maxLength); - - // Find the last occurrence of > or space - $lastPos = max(strrpos($truncated, '>'), strrpos($truncated, ' ')); - - if ($lastPos !== false && $lastPos > $maxLength * 0.9) { - $truncated = substr($truncated, 0, $lastPos + 1); - } - - return $truncated; - } - private function callLLM(string $htmlContent, string $url, ?string $structuredData = null): array { $input = new MessageBag( From 7117926584186c462056f4cad8dc4945ed770c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 21:32:19 +0200 Subject: [PATCH 064/108] Fixed error when notes are not defined --- src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php index 759c3d12..bfc41121 100644 --- a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php +++ b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php @@ -231,7 +231,7 @@ final class DTOJsonSchemaConverter provider_url: $productUrl, footprint: $data['footprint'] ?? null, gtin: $data['gtin'] ?? null, - notes: $data['notes'], + notes: $data['notes'] ?? null, datasheets: $datasheets, images: $images, parameters: $parameters, From 0ca5a41298796ba6a8ec56c15f87747f218472a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 22:11:27 +0200 Subject: [PATCH 065/108] Added option for translating AI extracted output --- .../Providers/AIInfoExtractor.php | 11 ++++++++- .../AIExtractorSettings.php | 8 +++++++ translations/messages.en.xlf | 24 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 92ed4e19..2032f634 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -35,6 +35,7 @@ use League\HTMLToMarkdown\HtmlConverter; use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; use Symfony\Component\DomCrawler\Crawler; +use Symfony\Component\Intl\Languages; use Symfony\Contracts\HttpClient\HttpClientInterface; use function Symfony\Component\String\u; @@ -210,7 +211,7 @@ final class AIInfoExtractor implements InfoProviderInterface private function buildSystemPrompt(): string { - return <<<'PROMPT' + $tmp = <<<'PROMPT' You are an expert at extracting electronic component information from web pages. Extract structured data in JSON format, from markdown extracted from a product page. Focus on the main content of the page, such as product descriptions, specifications, and tables. Ignore navigation menus, footers, and sidebars. @@ -224,6 +225,14 @@ Rules: For parameters, combine name, value, and unit. The unit should be separate if possible. PROMPT; + + if ($this->settings->outputLanguage === null) { + $tmp .= "\n\nProvide the response in the same language of the webpage."; + } else { + $tmp .= "\n\nThe response must be in ". Languages::getName($this->settings->outputLanguage, 'en') ." language. Translate texts if needed."; + } + + return $tmp; } } diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index 876c687f..4ef9a1fa 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -32,7 +32,9 @@ use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\AI\Platform\Capability; +use Symfony\Component\Form\Extension\Core\Type\LanguageType; use Symfony\Component\Translation\TranslatableMessage as TM; +use Symfony\Component\Validator\Constraints\Language; #[Settings(name: "ai_extractor", label: new TM("settings.ips.ai_extractor"), description: new TM("settings.ips.ai_extractor.description"))] #[SettingsIcon("fa-plug")] @@ -56,4 +58,10 @@ class AIExtractorSettings description: new TM("settings.ips.ai_extractor.max_content_length.description"), )] public int $maxContentLength = 50000; + + #[Language] + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.output_language"), description: new TM("settings.ips.ai_extractor.output_language.description"), + formType: LanguageType::class, + )] + public ?string $outputLanguage = null; } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index e16a6d69..c0bf8b60 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13103,5 +13103,29 @@ Buerklin-API Authentication server: The AI model that should be used for extraction. Must support structured output. + + + settings.ips.ai_extractor.max_content_length + Max. Website Content length + + + + + settings.ips.ai_extractor.max_content_length.description + The maximum number of characters of the website that are sent to the AI service. + + + + + settings.ips.ai_extractor.output_language + Output language + + + + + settings.ips.ai_extractor.output_language.description + By default, the providers returns information in the same language as the website. With that option you can ask the AI to translate it for you. Might only work with certain models. + + From ad096aa6ff89bdae1cd090e0cbbd0992d05152f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 23:15:29 +0200 Subject: [PATCH 066/108] Improved parameter extraction & extraction of other infos --- .../DTOJsonSchemaConverter.php | 26 ++++++++++++------- .../Providers/AIInfoExtractor.php | 7 +++-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php index bfc41121..a61e7465 100644 --- a/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php +++ b/src/Services/InfoProviderSystem/DTOJsonSchemaConverter.php @@ -63,13 +63,19 @@ final class DTOJsonSchemaConverter 'type' => 'object', 'properties' => [ 'name' => ['type' => 'string'], - 'value' => ['type' => 'string'], - 'unit' => ['type' => ['string', 'null']], + 'symbol' => ['type' => ['string', 'null'], 'description' => 'An optional quantity symbol for the parameter in latex code, like R_1'], + 'value_typical' => ['type' => ['number', 'null'], 'description' => 'The typical value of the parameter. For example, for a resistor this could be 100 for a 100 Ohm resistor. Also used if only one numeric value is given. If used an unit should be given'], + 'value_min' => ['type' => ['number', 'null'], 'description' => 'If a range is given for the parameter, this is the minimum value. Null if no range is given.'], + 'value_max' => ['type' => ['number', 'null'], 'description' => 'If a range is given for the parameter, this is the maximum value. Null if not a range.'], + 'value_text' => ['type' => ['string', 'null'], 'description' => 'When a value is not numeric it can be put here as text. Only use if it does not fit in value_min, value_typical or value_max. E.g. "Yes", "Red", etc.'], + 'group' => ['type' => ['string', 'null'], 'description' => 'An optional group name for the parameter, e.g. "Electrical parameters", "Mechanical parameters" etc.'], + 'unit' => ['type' => ['string', 'null'], 'description' => 'The unit of the parameter values, e.g. kg, Ohm, V, etc.'], ], - 'required' => ['name', 'value'], + 'required' => ['name', 'value_typical', 'value_min', 'value_max', 'value_text'] ], ], 'datasheets' => [ + 'description' => 'A list of datasheets, manuals, or other technical documents related to the product. Not images, but actual documents, preferably PDFs.', 'type' => 'array', 'items' => [ 'type' => 'object', @@ -145,13 +151,15 @@ final class DTOJsonSchemaConverter $parameters = []; foreach ($data['parameters'] as $p) { if (!empty($p['name'])) { - $value = $p['value'] ?? ''; - $unit = $p['unit'] ?? null; - // Combine value and unit for parsing - $valueWithUnit = $unit ? $value . ' ' . $unit : $value; - $parameters[] = ParameterDTO::parseValueField( + $parameters[] = new ParameterDTO( name: $p['name'], - value: $valueWithUnit + value_text: $p['value_text'] ?? null, + value_typ: isset($p['value_typical']) && is_numeric($p['value_typical']) ? (float) $p['value_typical'] : null, + value_min: isset($p['value_min']) && is_numeric($p['value_min']) ? (float) $p['value_min'] : null, + value_max: isset($p['value_max']) && is_numeric($p['value_max']) ? (float) $p['value_max'] : null, + unit: $p['unit'] ?? null, + symbol: $p['symbol'] ?? null, + group: $p['group'] ?? null, ); } } diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 2032f634..379d97cc 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -217,13 +217,12 @@ Focus on the main content of the page, such as product descriptions, specificati Rules: - manufacturing_status: Use "active", "obsolete", "nrfnd" (not recommended for new designs), "discontinued", or null -- parameters: Extract technical specs like voltage, current, temperature, etc. +- parameters: Extract technical specs like voltage, current, temperature, etc. and put them into the fields according to the JSON schema. Include units if available. - prices: Extract pricing tiers with minimum_quantity, price, and currency code - URLs must be absolute (include https://...) - If information is not found, use null -- Return ONLY the JSON, no explanation text - -For parameters, combine name, value, and unit. The unit should be separate if possible. +- Try to avoid duplicating parameters, if the same parameter is mentioned multiple times, or if it is already used in another field. +- Include only the 1 to 3 most relevant images, such as the main product image or important diagrams. Ignore decorative images, logos, or icons. PROMPT; if ($this->settings->outputLanguage === null) { From 5edcc60d410628287dc9a73ffecb6065835fe54e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 23:18:09 +0200 Subject: [PATCH 067/108] Randomize UserAgent and prevent access to private networks for AI extractor --- .../Providers/AIInfoExtractor.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 379d97cc..0c2f19d9 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\Providers; use App\Exceptions\ProviderIDNotSupportedException; +use App\Helpers\RandomizeUseragentHttpClient; use App\Services\AI\AIPlatformRegistry; use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; @@ -35,6 +36,7 @@ use League\HTMLToMarkdown\HtmlConverter; use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; use Symfony\Component\DomCrawler\Crawler; +use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient; use Symfony\Component\Intl\Languages; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -55,12 +57,12 @@ final class AIInfoExtractor implements InfoProviderInterface private readonly AIPlatformRegistry $AIPlatformRegistry, private readonly DTOJsonSchemaConverter $jsonSchemaConverter, ) { - $this->httpClient = $httpClient->withOptions([ - 'timeout' => 30, - 'headers' => [ - 'User-Agent' => 'Mozilla/5.0 (compatible; Part-DB AI-Extractor/1.0)', - ], - ]); + //Use NoPrivateNetworkHttpClient to prevent SSRF vulnerabilities, and RandomizeUseragentHttpClient to make it harder for servers to block us + $this->httpClient = (new RandomizeUseragentHttpClient(new NoPrivateNetworkHttpClient($httpClient)))->withOptions( + [ + 'timeout' => 15, + ] + ); } public function getProviderInfo(): array @@ -199,7 +201,7 @@ final class AIInfoExtractor implements InfoProviderInterface $result = $aiPlatform->invoke($this->settings->model ?? throw new \RuntimeException('No model selected'), $input, [ 'response_format' => [ 'type' => 'json_schema', - 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), + 'json_schema' => $this->jsonSchemaConverter->getJSONSchema(), ] ]); } catch (\Throwable $e) { From cf34de67729c28666b2c4e46a60064e543611379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 26 Apr 2026 23:24:51 +0200 Subject: [PATCH 068/108] Allow to pass additional instructions to the AI model --- .../InfoProviderSystem/Providers/AIInfoExtractor.php | 4 ++++ .../InfoProviderSystem/AIExtractorSettings.php | 6 ++++++ .../InfoProviderSystem/InfoProviderSettings.php | 5 +++-- translations/messages.en.xlf | 12 ++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index 0c2f19d9..ef7f05a5 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -233,6 +233,10 @@ PROMPT; $tmp .= "\n\nThe response must be in ". Languages::getName($this->settings->outputLanguage, 'en') ." language. Translate texts if needed."; } + if ($this->settings->additionalInstructions) { + $tmp .= "\n\nAdditional instructions:\n" . $this->settings->additionalInstructions; + } + return $tmp; } diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index 4ef9a1fa..da5ef0f9 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -33,6 +33,7 @@ use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\AI\Platform\Capability; use Symfony\Component\Form\Extension\Core\Type\LanguageType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Translation\TranslatableMessage as TM; use Symfony\Component\Validator\Constraints\Language; @@ -64,4 +65,9 @@ class AIExtractorSettings formType: LanguageType::class, )] public ?string $outputLanguage = null; + + #[SettingsParameter(label: new TM("settings.ips.ai_extractor.additional_instructions"), description: new TM("settings.ips.ai_extractor.additional_instructions.description"), + formType: TextareaType::class, + )] + public ?string $additionalInstructions = null; } diff --git a/src/Settings/InfoProviderSystem/InfoProviderSettings.php b/src/Settings/InfoProviderSystem/InfoProviderSettings.php index be0fe746..3e2a27ef 100644 --- a/src/Settings/InfoProviderSystem/InfoProviderSettings.php +++ b/src/Settings/InfoProviderSystem/InfoProviderSettings.php @@ -40,6 +40,9 @@ class InfoProviderSettings #[EmbeddedSettings] public ?GenericWebProviderSettings $genericWebProvider = null; + #[EmbeddedSettings] + public ?AIExtractorSettings $aiExtractor = null; + #[EmbeddedSettings] public ?DigikeySettings $digikey = null; @@ -76,6 +79,4 @@ class InfoProviderSettings #[EmbeddedSettings] public ?CanopySettings $canopy = null; - #[EmbeddedSettings] - public ?AIExtractorSettings $aiExtractor = null; } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index c0bf8b60..d2c4bc47 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13127,5 +13127,17 @@ Buerklin-API Authentication server: By default, the providers returns information in the same language as the website. With that option you can ask the AI to translate it for you. Might only work with certain models. + + + settings.ips.ai_extractor.additional_instructions + Additional instructions + + + + + settings.ips.ai_extractor.additional_instructions.description + The additional instructions will be appended to the system prompt. + + From 4f67f21b33a6c35f5950da76cc115457d6ee6639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 27 Apr 2026 22:37:05 +0200 Subject: [PATCH 069/108] Allow to pass options to info providers --- .../Providers/AIInfoExtractor.php | 4 +-- .../Providers/BatchInfoProviderInterface.php | 3 ++- .../Providers/BuerklinProvider.php | 25 +++++++++++-------- .../Providers/CanopyProvider.php | 4 +-- .../Providers/ConradProvider.php | 4 +-- .../Providers/DigikeyProvider.php | 4 +-- .../Providers/Element14Provider.php | 4 +-- .../Providers/EmptyProvider.php | 4 +-- .../Providers/GenericWebProvider.php | 2 +- .../Providers/InfoProviderInterface.php | 6 +++-- .../Providers/LCSCProvider.php | 9 ++++--- .../Providers/OEMSecretsProvider.php | 10 +++++--- .../Providers/OctopartProvider.php | 4 +-- .../Providers/PollinProvider.php | 4 +-- .../Providers/ReicheltProvider.php | 4 +-- .../Providers/TMEProvider.php | 4 +-- .../Providers/TestProvider.php | 6 ++--- 17 files changed, 55 insertions(+), 46 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php index ef7f05a5..bf1ce37c 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php @@ -86,7 +86,7 @@ final class AIInfoExtractor implements InfoProviderInterface return $this->settings->platform !== null && $this->settings->model !== null && $this->settings->model !== ''; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { try { return [ @@ -96,7 +96,7 @@ final class AIInfoExtractor implements InfoProviderInterface } } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { $url = $this->fixAndValidateURL($id); diff --git a/src/Services/InfoProviderSystem/Providers/BatchInfoProviderInterface.php b/src/Services/InfoProviderSystem/Providers/BatchInfoProviderInterface.php index 549f117a..cd918439 100644 --- a/src/Services/InfoProviderSystem/Providers/BatchInfoProviderInterface.php +++ b/src/Services/InfoProviderSystem/Providers/BatchInfoProviderInterface.php @@ -34,7 +34,8 @@ interface BatchInfoProviderInterface extends InfoProviderInterface * Search for multiple keywords in a single batch operation and return the results, ordered by the keywords. * This allows for a more efficient search compared to running multiple single searches. * @param string[] $keywords + * @param array $options An associative array of options which can be used to modify the search behavior. The supported options depend on the provider and should be documented in the provider's documentation. * @return array An associative array where the key is the keyword and the value is the search results for that keyword */ - public function searchByKeywordsBatch(array $keywords): array; + public function searchByKeywordsBatch(array $keywords, array $options = []): array; } diff --git a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php index c2291107..e5017eb2 100644 --- a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php +++ b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php @@ -461,9 +461,11 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv } /** + * @param string $keyword + * @param array $options * @return PartDetailDTO[] */ - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $keyword = strtoupper(trim($keyword)); if ($keyword === '') { @@ -493,7 +495,7 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv } } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { // Detail endpoint is /products/{code}/ $response = $this->getProduct($id); @@ -588,10 +590,11 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv } /** - * @param string[] $keywords + * @param array $keywords + * @param array $options * @return array */ - public function searchByKeywordsBatch(array $keywords): array + public function searchByKeywordsBatch(array $keywords, array $options = []): array { /** @var array $results */ $results = []; @@ -643,27 +646,27 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv public function getIDFromURL(string $url): ?string { - //Inputs: - //https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/ + //Inputs: + //https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/ //https://www.buerklin.com/de/p/40F1332/ //https://www.buerklin.com/en/p/bkl-electronic/dc-connectors/072341-l/40F1332/ //https://www.buerklin.com/en/p/40F1332/ //The ID is the last part after the manufacturer/category/mpn segment and before the final slash //https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/#download should also work - + $path = parse_url($url, PHP_URL_PATH); - + if (!$path) { return null; } - + // Ensure it's actually a product URL if (strpos($path, '/p/') === false) { return null; } - + $id = basename(rtrim($path, '/')); - + return $id !== '' && $id !== 'p' ? $id : null; } diff --git a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php index 18864a49..d826c765 100644 --- a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php @@ -111,7 +111,7 @@ class CanopyProvider implements InfoProviderInterface return null; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $response = $this->httpClient->request('GET', self::SEARCH_API_URL, [ 'query' => [ @@ -177,7 +177,7 @@ class CanopyProvider implements InfoProviderInterface return new PurchaseInfoDTO(self::DISTRIBUTOR_NAME, order_number: $asin, prices: $priceDtos, product_url: $this->productPageFromASIN($asin)); } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { //Check that the id is a valid ASIN (10 characters, letters and numbers) if (!preg_match('/^[A-Z0-9]{10}$/', $id)) { diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php index 39de1e23..2e6708be 100644 --- a/src/Services/InfoProviderSystem/Providers/ConradProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -88,7 +88,7 @@ readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoPr return null; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $url = $this->settings->shopID->getAPIRoot() . self::SEARCH_ENDPOINT . '/' . $this->settings->shopID->getDomainEnd() . '/' . $this->settings->shopID->getLanguage() @@ -279,7 +279,7 @@ readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoPr ); } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { $productInfoURL = $this->settings->shopID->getAPIRoot() . '/product/1/service/' . $this->settings->shopID->getShopID() . '/product/' . $id; diff --git a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php index d7eb6e4f..e7a62aa4 100644 --- a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php @@ -106,7 +106,7 @@ class DigikeyProvider implements InfoProviderInterface return $this->settings->clientId !== null && $this->settings->clientId !== '' && $this->authTokenManager->hasToken(self::OAUTH_APP_NAME); } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $request = [ 'Keywords' => $keyword, @@ -159,7 +159,7 @@ class DigikeyProvider implements InfoProviderInterface return $result; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { try { $response = $this->digikeyClient->request('GET', '/products/v4/search/' . urlencode($id) . '/productdetails', [ diff --git a/src/Services/InfoProviderSystem/Providers/Element14Provider.php b/src/Services/InfoProviderSystem/Providers/Element14Provider.php index 9ae45728..1d9e092c 100644 --- a/src/Services/InfoProviderSystem/Providers/Element14Provider.php +++ b/src/Services/InfoProviderSystem/Providers/Element14Provider.php @@ -282,12 +282,12 @@ class Element14Provider implements InfoProviderInterface, URLHandlerInfoProvider }; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { return $this->queryByTerm('any:' . $keyword); } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { $tmp = $this->queryByTerm('id:' . $id); if (count($tmp) === 0) { diff --git a/src/Services/InfoProviderSystem/Providers/EmptyProvider.php b/src/Services/InfoProviderSystem/Providers/EmptyProvider.php index e0de9772..915a118c 100644 --- a/src/Services/InfoProviderSystem/Providers/EmptyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/EmptyProvider.php @@ -54,7 +54,7 @@ class EmptyProvider implements InfoProviderInterface return true; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { return [ @@ -69,7 +69,7 @@ class EmptyProvider implements InfoProviderInterface ]; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { throw new \RuntimeException('No part details available'); } diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index 90268c9c..d428910d 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -87,7 +87,7 @@ class GenericWebProvider implements InfoProviderInterface return $this->settings->enabled; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $url = $this->fixAndValidateURL($keyword); diff --git a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php index 1f787559..feb3466f 100644 --- a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php +++ b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php @@ -61,16 +61,18 @@ interface InfoProviderInterface /** * Searches for a keyword and returns a list of search results * @param string $keyword The keyword to search for + * @param array $options An associative array of options for the search, which can be used to pass additional parameters to the provider (e.g. filters, pagination, etc.). The content of this array is provider specific and not defined by the interface * @return SearchResultDTO[] A list of search results */ - public function searchByKeyword(string $keyword): array; + public function searchByKeyword(string $keyword, array $options = []): array; /** * Returns detailed information about the part with the given id * @param string $id + * @param array $options An associative array of options for the search, which can be used to pass additional parameters to the provider (e.g. filters, pagination, etc.). The content of this array is provider specific and not defined by the interface * @return PartDetailDTO */ - public function getDetails(string $id): PartDetailDTO; + public function getDetails(string $id, array $options = []): PartDetailDTO; /** * A list of capabilities this provider supports (which kind of data it can provide). diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php index 1b807eff..8bdd776e 100755 --- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php +++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php @@ -349,17 +349,18 @@ class LCSCProvider implements BatchInfoProviderInterface, URLHandlerInfoProvider return $result; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { return $this->queryByTerm($keyword, true); // Use lightweight mode for search } /** * Batch search multiple keywords asynchronously (like JavaScript Promise.all) - * @param array $keywords Array of keywords to search + * @param array $keywords + * @param array $options * @return array Results indexed by keyword */ - public function searchByKeywordsBatch(array $keywords): array + public function searchByKeywordsBatch(array $keywords, array $options = []): array { if (empty($keywords)) { return []; @@ -428,7 +429,7 @@ class LCSCProvider implements BatchInfoProviderInterface, URLHandlerInfoProvider return $result; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { $tmp = $this->queryByTerm($id, false); if (count($tmp) === 0) { diff --git a/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php b/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php index f7048a87..2c98e6e5 100644 --- a/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php +++ b/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php @@ -278,12 +278,13 @@ class OEMSecretsProvider implements InfoProviderInterface * and debugging with local JSON files. The results are processed, cached, and then sorted based * on the keyword and specified criteria. * - * @param string $keyword The part number to search for + * @param string $keyword + * @param array $options * @return array An array of processed product details, sorted by relevance and additional criteria. * * @throws \Exception If the JSON file used for debugging is not found or contains errors. */ - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { /* oemsecrets Part Search API 3.0.1 @@ -414,12 +415,13 @@ class OEMSecretsProvider implements InfoProviderInterface * found in the cache, they are returned. If not, an exception is thrown indicating that * the details could not be found. * - * @param string $id The unique identifier of the provider or part. + * @param string $id + * @param array $options * @return PartDetailDTO The detailed information about the part. * * @throws \Exception If no details are found for the given provider ID. */ - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { $cacheKey = $this->getCacheKey($id); $cacheItem = $this->partInfoCache->getItem($cacheKey); diff --git a/src/Services/InfoProviderSystem/Providers/OctopartProvider.php b/src/Services/InfoProviderSystem/Providers/OctopartProvider.php index 1142f4ef..684e4ff0 100644 --- a/src/Services/InfoProviderSystem/Providers/OctopartProvider.php +++ b/src/Services/InfoProviderSystem/Providers/OctopartProvider.php @@ -326,7 +326,7 @@ class OctopartProvider implements InfoProviderInterface ); } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $graphQL = sprintf(<<<'GRAPHQL' query partSearch($keyword: String, $limit: Int, $currency: String!, $country: String!, $authorizedOnly: Boolean!) { @@ -367,7 +367,7 @@ class OctopartProvider implements InfoProviderInterface return $tmp; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { //Check if we have the part cached $cached = $this->getFromCache($id); diff --git a/src/Services/InfoProviderSystem/Providers/PollinProvider.php b/src/Services/InfoProviderSystem/Providers/PollinProvider.php index 6ac969d3..7acecc3a 100644 --- a/src/Services/InfoProviderSystem/Providers/PollinProvider.php +++ b/src/Services/InfoProviderSystem/Providers/PollinProvider.php @@ -66,7 +66,7 @@ class PollinProvider implements InfoProviderInterface, URLHandlerInfoProviderInt return $this->settings->enabled; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $response = $this->client->request('GET', 'https://www.pollin.de/search', [ 'query' => [ @@ -110,7 +110,7 @@ class PollinProvider implements InfoProviderInterface, URLHandlerInfoProviderInt }; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { //Ensure that $id is numeric if (!is_numeric($id)) { diff --git a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php index 81f0a449..9dfb099f 100644 --- a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php @@ -69,7 +69,7 @@ class ReicheltProvider implements InfoProviderInterface return $this->settings->enabled; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $response = $this->client->request('GET', sprintf($this->getBaseURL() . '/shop/search/%s', $keyword)); $html = $response->getContent(); @@ -108,7 +108,7 @@ class ReicheltProvider implements InfoProviderInterface return $results; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { //Check that the ID is a number if (!is_numeric($id)) { diff --git a/src/Services/InfoProviderSystem/Providers/TMEProvider.php b/src/Services/InfoProviderSystem/Providers/TMEProvider.php index 93222517..24ba0ea7 100644 --- a/src/Services/InfoProviderSystem/Providers/TMEProvider.php +++ b/src/Services/InfoProviderSystem/Providers/TMEProvider.php @@ -69,7 +69,7 @@ class TMEProvider implements InfoProviderInterface, URLHandlerInfoProviderInterf return $this->tmeClient->isUsable(); } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { $response = $this->tmeClient->makeRequest('Products/Search', [ 'Country' => $this->settings->country, @@ -99,7 +99,7 @@ class TMEProvider implements InfoProviderInterface, URLHandlerInfoProviderInterf return $result; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { $response = $this->tmeClient->makeRequest('Products/GetProducts', [ 'Country' => $this->settings->country, diff --git a/src/Services/InfoProviderSystem/Providers/TestProvider.php b/src/Services/InfoProviderSystem/Providers/TestProvider.php index 8b78c95a..42927abd 100644 --- a/src/Services/InfoProviderSystem/Providers/TestProvider.php +++ b/src/Services/InfoProviderSystem/Providers/TestProvider.php @@ -55,7 +55,7 @@ class TestProvider implements InfoProviderInterface return true; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { return [ new SearchResultDTO(provider_key: $this->getProviderKey(), provider_id: 'element1', name: 'Element 1', description: 'fd'), @@ -72,7 +72,7 @@ class TestProvider implements InfoProviderInterface ]; } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { return new PartDetailDTO( provider_key: $this->getProviderKey(), @@ -92,4 +92,4 @@ class TestProvider implements InfoProviderInterface ] ); } -} \ No newline at end of file +} From 4cbb167e5cb440239753ef5693cadfec18f0cf5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 1 May 2026 20:11:56 +0200 Subject: [PATCH 070/108] Fixed errors --- .../InfoProviderSystem/Providers/GenericWebProvider.php | 8 ++++++-- .../InfoProviderSystem/Providers/MouserProvider.php | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index d428910d..23eee528 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -50,6 +50,8 @@ class GenericWebProvider implements InfoProviderInterface use FixAndValidateUrlTrait; + public const OPTION_CHECK_FOR_DELEGATION = 'check_for_delegation'; + public const DISTRIBUTOR_NAME = 'Website'; private readonly HttpClientInterface $httpClient; @@ -99,7 +101,7 @@ class GenericWebProvider implements InfoProviderInterface try { return [ - $this->getDetails($keyword, false) //We already tried delegation + $this->getDetails($keyword, [self::OPTION_CHECK_FOR_DELEGATION => false]) //We already tried delegation ]; } catch (ProviderIDNotSupportedException $e) { return []; } @@ -312,8 +314,10 @@ class GenericWebProvider implements InfoProviderInterface - public function getDetails(string $id, bool $check_for_delegation = true): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { + //We check for delegation by default + $check_for_delegation = $options[self::OPTION_CHECK_FOR_DELEGATION] ?? true; $url = $this->fixAndValidateURL($id); if ($check_for_delegation) { diff --git a/src/Services/InfoProviderSystem/Providers/MouserProvider.php b/src/Services/InfoProviderSystem/Providers/MouserProvider.php index 3171c994..49ca2d50 100644 --- a/src/Services/InfoProviderSystem/Providers/MouserProvider.php +++ b/src/Services/InfoProviderSystem/Providers/MouserProvider.php @@ -76,7 +76,7 @@ class MouserProvider implements InfoProviderInterface return $this->settings->apiKey !== '' && $this->settings->apiKey !== null; } - public function searchByKeyword(string $keyword): array + public function searchByKeyword(string $keyword, array $options = []): array { /* SearchByKeywordRequest description: @@ -144,7 +144,7 @@ class MouserProvider implements InfoProviderInterface return $this->responseToDTOArray($response); } - public function getDetails(string $id): PartDetailDTO + public function getDetails(string $id, array $options = []): PartDetailDTO { /* SearchByPartRequest description: From e576ded86bed61ee904c23b2f3a2bb65c9d64388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 1 May 2026 20:16:58 +0200 Subject: [PATCH 071/108] Updated composer dependencies and use upstream version for micrometa packag --- composer.json | 8 +- composer.lock | 685 +++++----- config/reference.php | 2944 +++++++++++++++++++++--------------------- 3 files changed, 1829 insertions(+), 1808 deletions(-) diff --git a/composer.json b/composer.json index c4b3cb59..b23ea92b 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,7 @@ "jbtronics/dompdf-font-loader-bundle": "^1.0.0", "jbtronics/settings-bundle": "^3.0.0", "jfcherng/php-diff": "^6.14", - "jkphl/micrometa": "dev-master", + "jkphl/micrometa": "^v3.4.0", "knpuniversity/oauth2-client-bundle": "^2.15", "league/commonmark": "^2.7", "league/csv": "^9.8.0", @@ -160,12 +160,6 @@ "App\\Tests\\": "tests/" } }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/jbtronics/micrometa" - } - ], "scripts": { "auto-scripts": { "cache:clear": "symfony-cmd", diff --git a/composer.lock b/composer.lock index 1963342f..52eb5562 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": "7c76e3af5fd042105a3208fdcb300a11", + "content-hash": "31a276e9a2b45a04facbe2d88f4a042f", "packages": [ { "name": "amphp/amp", @@ -977,16 +977,16 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", - "reference": "0b0e9328e08f38ff381afd7cba68976ed1dc714a" + "reference": "2072247e3c8126d815f20324e7aaa97c2b5ee889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/0b0e9328e08f38ff381afd7cba68976ed1dc714a", - "reference": "0b0e9328e08f38ff381afd7cba68976ed1dc714a", + "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/2072247e3c8126d815f20324e7aaa97c2b5ee889", + "reference": "2072247e3c8126d815f20324e7aaa97c2b5ee889", "shasum": "" }, "require": { @@ -1004,7 +1004,7 @@ "doctrine/mongodb-odm": "^2.10", "doctrine/orm": "^2.17 || ^3.0", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/type-info": "^7.3 || ^8.0" }, "suggest": { @@ -1061,22 +1061,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.3" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.4" }, - "time": "2026-03-27T06:51:10+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "553f7fe120c840a8db08d8e970860e209f40ebc2" + "reference": "3dc88ee48ffcdb6eee45ec1d3e9f25ea2aad4eaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/553f7fe120c840a8db08d8e970860e209f40ebc2", - "reference": "553f7fe120c840a8db08d8e970860e209f40ebc2", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/3dc88ee48ffcdb6eee45ec1d3e9f25ea2aad4eaa", + "reference": "3dc88ee48ffcdb6eee45ec1d3e9f25ea2aad4eaa", "shasum": "" }, "require": { @@ -1091,7 +1091,7 @@ "require-dev": { "doctrine/doctrine-bundle": "^2.11 || ^3.1", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "ramsey/uuid": "^4.7", "ramsey/uuid-doctrine": "^2.0", "symfony/cache": "^6.4 || ^7.0 || ^8.0", @@ -1150,22 +1150,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.3" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.3.4" }, - "time": "2026-03-27T06:51:10+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/documentation", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", - "reference": "a63a3a7f020b6a001b1228c5bd916e1a76887d1d" + "reference": "f07b444aef1f75bb07beb9f8d799213f05070e5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/documentation/zipball/a63a3a7f020b6a001b1228c5bd916e1a76887d1d", - "reference": "a63a3a7f020b6a001b1228c5bd916e1a76887d1d", + "url": "https://api.github.com/repos/api-platform/documentation/zipball/f07b444aef1f75bb07beb9f8d799213f05070e5f", + "reference": "f07b444aef1f75bb07beb9f8d799213f05070e5f", "shasum": "" }, "require": { @@ -1173,7 +1173,7 @@ "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "project", "extra": { @@ -1213,22 +1213,22 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.3.3" + "source": "https://github.com/api-platform/documentation/tree/v4.3.4" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", - "reference": "9ffbe58f8872932ed7c2afca8207c2d68629e037" + "reference": "dd7c092b9abee06e72fd58544fe714b6c2a61efa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/http-cache/zipball/9ffbe58f8872932ed7c2afca8207c2d68629e037", - "reference": "9ffbe58f8872932ed7c2afca8207c2d68629e037", + "url": "https://api.github.com/repos/api-platform/http-cache/zipball/dd7c092b9abee06e72fd58544fe714b6c2a61efa", + "reference": "dd7c092b9abee06e72fd58544fe714b6c2a61efa", "shasum": "" }, "require": { @@ -1240,7 +1240,7 @@ "require-dev": { "guzzlehttp/guzzle": "^6.0 || ^7.0 || ^8.0", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/dependency-injection": "^6.4 || ^7.0 || ^8.0", "symfony/http-client": "^6.4 || ^7.0 || ^8.0", "symfony/type-info": "^7.3 || ^8.0" @@ -1293,22 +1293,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.3.3" + "source": "https://github.com/api-platform/http-cache/tree/v4.3.4" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/hydra", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "bb9f7107a0bbfbe6e7b93130bde9829f0cc71529" + "reference": "9b0a677b21ee4f2ec255386a84bdcf1d12ea7bc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/bb9f7107a0bbfbe6e7b93130bde9829f0cc71529", - "reference": "bb9f7107a0bbfbe6e7b93130bde9829f0cc71529", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/9b0a677b21ee4f2ec255386a84bdcf1d12ea7bc4", + "reference": "9b0a677b21ee4f2ec255386a84bdcf1d12ea7bc4", "shasum": "" }, "require": { @@ -1328,7 +1328,7 @@ "api-platform/doctrine-orm": "^4.3", "phpspec/prophecy": "^1.19", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "library", "extra": { @@ -1380,22 +1380,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.3.3" + "source": "https://github.com/api-platform/hydra/tree/v4.3.4" }, - "time": "2026-03-20T09:00:10+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/json-api", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", - "reference": "64bf11cbcaaf5cba3f6fceb243ed57d1ed6e2827" + "reference": "30e399ea2266403d04fd93df83c6983cf0a30e5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-api/zipball/64bf11cbcaaf5cba3f6fceb243ed57d1ed6e2827", - "reference": "64bf11cbcaaf5cba3f6fceb243ed57d1ed6e2827", + "url": "https://api.github.com/repos/api-platform/json-api/zipball/30e399ea2266403d04fd93df83c6983cf0a30e5d", + "reference": "30e399ea2266403d04fd93df83c6983cf0a30e5d", "shasum": "" }, "require": { @@ -1412,7 +1412,7 @@ "require-dev": { "phpspec/prophecy": "^1.19", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/type-info": "^7.3 || ^8.0" }, "type": "library", @@ -1462,22 +1462,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.3.3" + "source": "https://github.com/api-platform/json-api/tree/v4.3.4" }, - "time": "2026-03-13T11:03:46+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", - "reference": "0f66e93719fd65938528aeff900737471acb515a" + "reference": "23dc2c388a08f2006b9189a0883a08f8837d7249" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-schema/zipball/0f66e93719fd65938528aeff900737471acb515a", - "reference": "0f66e93719fd65938528aeff900737471acb515a", + "url": "https://api.github.com/repos/api-platform/json-schema/zipball/23dc2c388a08f2006b9189a0883a08f8837d7249", + "reference": "23dc2c388a08f2006b9189a0883a08f8837d7249", "shasum": "" }, "require": { @@ -1491,7 +1491,7 @@ }, "require-dev": { "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "library", "extra": { @@ -1543,22 +1543,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.3.3" + "source": "https://github.com/api-platform/json-schema/tree/v4.3.4" }, - "time": "2026-03-06T15:07:49+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", - "reference": "64bd84ac44d6c6c51142a26bfa7d4c6237d20593" + "reference": "20ca6d7b5c11674c3046d710aaa0c9bc1795e54b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/jsonld/zipball/64bd84ac44d6c6c51142a26bfa7d4c6237d20593", - "reference": "64bd84ac44d6c6c51142a26bfa7d4c6237d20593", + "url": "https://api.github.com/repos/api-platform/jsonld/zipball/20ca6d7b5c11674c3046d710aaa0c9bc1795e54b", + "reference": "20ca6d7b5c11674c3046d710aaa0c9bc1795e54b", "shasum": "" }, "require": { @@ -1568,7 +1568,7 @@ "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/type-info": "^7.3 || ^8.0" }, "type": "library", @@ -1623,22 +1623,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.3.3" + "source": "https://github.com/api-platform/jsonld/tree/v4.3.4" }, - "time": "2026-03-13T08:23:46+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/metadata", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "e5d54902ad9817f1734ef39fe5b34d3c9b505f27" + "reference": "e93caa26e7992ca138f2d12f79b5b25d2d091b7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/e5d54902ad9817f1734ef39fe5b34d3c9b505f27", - "reference": "e5d54902ad9817f1734ef39fe5b34d3c9b505f27", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/e93caa26e7992ca138f2d12f79b5b25d2d091b7b", + "reference": "e93caa26e7992ca138f2d12f79b5b25d2d091b7b", "shasum": "" }, "require": { @@ -1656,7 +1656,7 @@ "api-platform/state": "^4.3", "phpspec/prophecy-phpunit": "^2.2", "phpstan/phpdoc-parser": "^1.29 || ^2.0", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/config": "^6.4 || ^7.0 || ^8.0", "symfony/routing": "^6.4 || ^7.0 || ^8.0", "symfony/var-dumper": "^6.4 || ^7.0 || ^8.0", @@ -1721,22 +1721,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.3.3" + "source": "https://github.com/api-platform/metadata/tree/v4.3.4" }, - "time": "2026-03-27T06:51:10+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/openapi", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", - "reference": "6ae725b4d2cee60972c18c4bd6148b63ccf16785" + "reference": "1562617e7500a50c2b6e6f43a0fb29a6a47e83a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/openapi/zipball/6ae725b4d2cee60972c18c4bd6148b63ccf16785", - "reference": "6ae725b4d2cee60972c18c4bd6148b63ccf16785", + "url": "https://api.github.com/repos/api-platform/openapi/zipball/1562617e7500a50c2b6e6f43a0fb29a6a47e83a2", + "reference": "1562617e7500a50c2b6e6f43a0fb29a6a47e83a2", "shasum": "" }, "require": { @@ -1756,7 +1756,7 @@ "api-platform/doctrine-orm": "^4.3", "api-platform/serializer": "^4.3", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/type-info": "^7.3 || ^8.0" }, "type": "library", @@ -1812,22 +1812,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.3.3" + "source": "https://github.com/api-platform/openapi/tree/v4.3.4" }, - "time": "2026-03-29T07:20:23+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/serializer", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "c8a62096d277b89b0f146aa90c65eeaeb1412900" + "reference": "bd7c26cc8e6858abc9661d677c15eaf4c61e08e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/c8a62096d277b89b0f146aa90c65eeaeb1412900", - "reference": "c8a62096d277b89b0f146aa90c65eeaeb1412900", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/bd7c26cc8e6858abc9661d677c15eaf4c61e08e3", + "reference": "bd7c26cc8e6858abc9661d677c15eaf4c61e08e3", "shasum": "" }, "require": { @@ -1847,7 +1847,7 @@ "api-platform/openapi": "^4.3", "doctrine/collections": "^2.1", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "sebastian/exporter": "^6.3.2 || ^7.0.2", "symfony/mercure-bundle": "*", "symfony/type-info": "^7.3 || ^8.0", @@ -1906,22 +1906,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.3.3" + "source": "https://github.com/api-platform/serializer/tree/v4.3.4" }, - "time": "2026-03-27T06:51:10+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/state", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "5387afbb9e79027b34dab731bc90e810fdd6ca60" + "reference": "dda8789e95b1627a6427edb48f9024b306fdf5ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/5387afbb9e79027b34dab731bc90e810fdd6ca60", - "reference": "5387afbb9e79027b34dab731bc90e810fdd6ca60", + "url": "https://api.github.com/repos/api-platform/state/zipball/dda8789e95b1627a6427edb48f9024b306fdf5ff", + "reference": "dda8789e95b1627a6427edb48f9024b306fdf5ff", "shasum": "" }, "require": { @@ -1936,7 +1936,7 @@ "require-dev": { "api-platform/serializer": "^4.3", "api-platform/validator": "^4.3.1", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/http-foundation": "^6.4.14 || ^7.0 || ^8.0", "symfony/object-mapper": "^7.4 || ^8.0", "symfony/type-info": "^7.4 || ^8.0", @@ -2003,22 +2003,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.3.3" + "source": "https://github.com/api-platform/state/tree/v4.3.4" }, - "time": "2026-03-29T06:54:13+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/symfony", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "69070b33f11ed7c163ba75ecfea192e460b89ce0" + "reference": "532063884e3f91a8a831322a572220cc55501a2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/69070b33f11ed7c163ba75ecfea192e460b89ce0", - "reference": "69070b33f11ed7c163ba75ecfea192e460b89ce0", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/532063884e3f91a8a831322a572220cc55501a2f", + "reference": "532063884e3f91a8a831322a572220cc55501a2f", "shasum": "" }, "require": { @@ -2049,7 +2049,7 @@ "api-platform/graphql": "^4.3", "api-platform/hal": "^4.3", "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2", + "phpunit/phpunit": "^11.5 || ^12.2", "symfony/expression-language": "^6.4 || ^7.0 || ^8.0", "symfony/intl": "^6.4 || ^7.0 || ^8.0", "symfony/mercure-bundle": "*", @@ -2131,22 +2131,22 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.3.3" + "source": "https://github.com/api-platform/symfony/tree/v4.3.4" }, - "time": "2026-03-27T06:51:10+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "api-platform/validator", - "version": "v4.3.3", + "version": "v4.3.4", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", - "reference": "3c0d486a12d7ab9b8fcfb727437b5322dc619663" + "reference": "22693bc3d3538af700cf274b99c834c37b1d1a68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/validator/zipball/3c0d486a12d7ab9b8fcfb727437b5322dc619663", - "reference": "3c0d486a12d7ab9b8fcfb727437b5322dc619663", + "url": "https://api.github.com/repos/api-platform/validator/zipball/22693bc3d3538af700cf274b99c834c37b1d1a68", + "reference": "22693bc3d3538af700cf274b99c834c37b1d1a68", "shasum": "" }, "require": { @@ -2160,7 +2160,7 @@ }, "require-dev": { "phpspec/prophecy-phpunit": "^2.2", - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^11.5 || ^12.2" }, "type": "library", "extra": { @@ -2207,9 +2207,9 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.3.3" + "source": "https://github.com/api-platform/validator/tree/v4.3.4" }, - "time": "2026-03-17T15:23:21+00:00" + "time": "2026-04-30T12:21:24+00:00" }, { "name": "beberlei/assert", @@ -5202,16 +5202,16 @@ }, { "name": "jbtronics/settings-bundle", - "version": "v3.3.0", + "version": "v3.3.1", "source": { "type": "git", "url": "https://github.com/jbtronics/settings-bundle.git", - "reference": "9cce001eef4570ca3b2766da6a8a4abd327ea438" + "reference": "ca90a8b2255482d11f10cb30c49791a7dabd5d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/9cce001eef4570ca3b2766da6a8a4abd327ea438", - "reference": "9cce001eef4570ca3b2766da6a8a4abd327ea438", + "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/ca90a8b2255482d11f10cb30c49791a7dabd5d40", + "reference": "ca90a8b2255482d11f10cb30c49791a7dabd5d40", "shasum": "" }, "require": { @@ -5284,7 +5284,7 @@ ], "support": { "issues": "https://github.com/jbtronics/settings-bundle/issues", - "source": "https://github.com/jbtronics/settings-bundle/tree/v3.3.0" + "source": "https://github.com/jbtronics/settings-bundle/tree/v3.3.1" }, "funding": [ { @@ -5296,7 +5296,7 @@ "type": "github" } ], - "time": "2026-04-21T21:26:26+00:00" + "time": "2026-04-28T10:57:15+00:00" }, { "name": "jfcherng/php-color-output", @@ -5592,16 +5592,16 @@ }, { "name": "jkphl/micrometa", - "version": "dev-master", + "version": "v3.4.0", "source": { "type": "git", - "url": "https://github.com/jbtronics/micrometa.git", - "reference": "720f409151c2cc20add9478b7a0a635fa1707021" + "url": "https://github.com/jkphl/micrometa.git", + "reference": "003583fa91eab9c62e5a47e9d4f909b2fad44de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbtronics/micrometa/zipball/720f409151c2cc20add9478b7a0a635fa1707021", - "reference": "720f409151c2cc20add9478b7a0a635fa1707021", + "url": "https://api.github.com/repos/jkphl/micrometa/zipball/003583fa91eab9c62e5a47e9d4f909b2fad44de2", + "reference": "003583fa91eab9c62e5a47e9d4f909b2fad44de2", "shasum": "" }, "require": { @@ -5624,30 +5624,13 @@ "phpunit/phpunit": "^7.0 || ^8.5", "squizlabs/php_codesniffer": "^3.3" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { "Jkphl\\": "src/" } }, - "scripts": { - "phpunit": [ - "vendor/bin/phpunit --configuration phpunit.xml.dist" - ], - "depgraph": [ - "vendor/bin/graph-composer --no-dev export . doc/dependencies.svg" - ], - "check-style": [ - "vendor/bin/phpcs -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src" - ], - "fix-style": [ - "vendor/bin/phpcbf -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src" - ], - "test": [ - "@phpunit" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -5663,10 +5646,10 @@ "homepage": "https://jkphl.is/projects/micrometa/", "support": { "email": "joschi@tollwerk.de", - "source": "https://github.com/jkphl/micrometa", - "issues": "https://github.com/jkphl/micrometa/issues" + "issues": "https://github.com/jkphl/micrometa/issues", + "source": "https://github.com/jkphl/micrometa" }, - "time": "2026-04-26T17:25:19+00:00" + "time": "2026-04-28T07:20:59+00:00" }, { "name": "jkphl/rdfa-lite-microdata", @@ -8848,16 +8831,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.7", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "31a105931bc8ffa3a123383829772e832fd8d903" + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/31a105931bc8ffa3a123383829772e832fd8d903", - "reference": "31a105931bc8ffa3a123383829772e832fd8d903", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", "shasum": "" }, "require": { @@ -8865,8 +8848,8 @@ "ext-filter": "*", "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7|^2.0", + "phpdocumentor/type-resolver": "^2.0", + "phpstan/phpdoc-parser": "^2.0", "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { @@ -8876,7 +8859,8 @@ "phpstan/phpstan-mockery": "^1.1", "phpstan/phpstan-webmozart-assert": "^1.2", "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26" + "psalm/phar": "^5.26", + "shipmonk/dead-code-detector": "^0.5.1" }, "type": "library", "extra": { @@ -8906,44 +8890,44 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.7" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" }, - "time": "2026-03-18T20:47:46+00:00" + "time": "2026-03-18T20:49:53+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.12.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", - "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18|^2.0" + "phpstan/phpdoc-parser": "^2.0" }, "require-dev": { "ext-tokenizer": "*", "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" + "psalm/phar": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-1.x": "1.x-dev", + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -8964,9 +8948,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" }, - "time": "2025-11-21T15:09:14+00:00" + "time": "2026-01-06T21:53:42+00:00" }, { "name": "phpoffice/phpspreadsheet", @@ -10089,29 +10073,29 @@ }, { "name": "sabre/uri", - "version": "3.0.3", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sabre-io/uri.git", - "reference": "4fa0b2049e06a4fbe4aea4f0aa69e7b8410a13bc" + "reference": "a926c749dddfb289b8a9b5218d16ac06affdc631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/4fa0b2049e06a4fbe4aea4f0aa69e7b8410a13bc", - "reference": "4fa0b2049e06a4fbe4aea4f0aa69e7b8410a13bc", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/a926c749dddfb289b8a9b5218d16ac06affdc631", + "reference": "a926c749dddfb289b8a9b5218d16ac06affdc631", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.2" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.94", + "friendsofphp/php-cs-fixer": "^3.95", "phpstan/extension-installer": "^1.4", "phpstan/phpstan": "^2.1", "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "rector/rector": "^2.3" + "phpunit/phpunit": "^10.5", + "rector/rector": "^2.4" }, "type": "library", "autoload": { @@ -10146,7 +10130,7 @@ "issues": "https://github.com/sabre-io/uri/issues", "source": "https://github.com/fruux/sabre-uri" }, - "time": "2026-04-01T08:19:11+00:00" + "time": "2026-04-26T04:19:03+00:00" }, { "name": "scheb/2fa-backup-code", @@ -11390,16 +11374,16 @@ }, { "name": "symfony/cache", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "467464da294734b0fb17e853e5712abc8470f819" + "reference": "3860fa12a5013b48d445909c6ea07f870e10ba7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/467464da294734b0fb17e853e5712abc8470f819", - "reference": "467464da294734b0fb17e853e5712abc8470f819", + "url": "https://api.github.com/repos/symfony/cache/zipball/3860fa12a5013b48d445909c6ea07f870e10ba7c", + "reference": "3860fa12a5013b48d445909c6ea07f870e10ba7c", "shasum": "" }, "require": { @@ -11470,7 +11454,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.4.8" + "source": "https://github.com/symfony/cache/tree/v7.4.9" }, "funding": [ { @@ -11490,7 +11474,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:15:47+00:00" + "time": "2026-04-29T13:21:53+00:00" }, { "name": "symfony/cache-contracts", @@ -11648,16 +11632,16 @@ }, { "name": "symfony/config", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b" + "reference": "d4a277b7a0f26487db16b264d935c617b7d994ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2d19dde43fa2ff720b9a40763ace7226594f503b", - "reference": "2d19dde43fa2ff720b9a40763ace7226594f503b", + "url": "https://api.github.com/repos/symfony/config/zipball/d4a277b7a0f26487db16b264d935c617b7d994ea", + "reference": "d4a277b7a0f26487db16b264d935c617b7d994ea", "shasum": "" }, "require": { @@ -11703,7 +11687,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.4.8" + "source": "https://github.com/symfony/config/tree/v7.4.9" }, "funding": [ { @@ -11723,20 +11707,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-29T14:25:20+00:00" }, { "name": "symfony/console", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" + "reference": "d7d2b64a45a89d607865927b176fa51c33ddbb58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "url": "https://api.github.com/repos/symfony/console/zipball/d7d2b64a45a89d607865927b176fa51c33ddbb58", + "reference": "d7d2b64a45a89d607865927b176fa51c33ddbb58", "shasum": "" }, "require": { @@ -11801,7 +11785,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.8" + "source": "https://github.com/symfony/console/tree/v7.4.9" }, "funding": [ { @@ -11821,20 +11805,20 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:54:39+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "symfony/css-selector", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b055f228a4178a1d6774909903905e3475f3eac8" + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b055f228a4178a1d6774909903905e3475f3eac8", - "reference": "b055f228a4178a1d6774909903905e3475f3eac8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b75663ed96cf4756e28e3105476f220f92886cc4", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4", "shasum": "" }, "require": { @@ -11870,7 +11854,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.4.8" + "source": "https://github.com/symfony/css-selector/tree/v7.4.9" }, "funding": [ { @@ -11890,20 +11874,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-18T13:18:21+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "f7025fd7b687c240426562f86ada06a93b1e771d" + "reference": "27cd9f912438d07ced76008bc66cf8b0cf4de622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f7025fd7b687c240426562f86ada06a93b1e771d", - "reference": "f7025fd7b687c240426562f86ada06a93b1e771d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/27cd9f912438d07ced76008bc66cf8b0cf4de622", + "reference": "27cd9f912438d07ced76008bc66cf8b0cf4de622", "shasum": "" }, "require": { @@ -11954,7 +11938,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.4.8" + "source": "https://github.com/symfony/dependency-injection/tree/v7.4.9" }, "funding": [ { @@ -11974,7 +11958,7 @@ "type": "tidelift" } ], - "time": "2026-03-31T06:50:29+00:00" + "time": "2026-04-30T18:38:49+00:00" }, { "name": "symfony/deprecation-contracts", @@ -12045,16 +12029,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "3f8f805e54ecb5cbd487b1eff8837a8bbd278669" + "reference": "7a87c85853f3069e3657a823c62b02952de46b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3f8f805e54ecb5cbd487b1eff8837a8bbd278669", - "reference": "3f8f805e54ecb5cbd487b1eff8837a8bbd278669", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7a87c85853f3069e3657a823c62b02952de46b0a", + "reference": "7a87c85853f3069e3657a823c62b02952de46b0a", "shasum": "" }, "require": { @@ -12134,7 +12118,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.8" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.9" }, "funding": [ { @@ -12154,7 +12138,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-29T14:19:39+00:00" }, { "name": "symfony/dom-crawler", @@ -12230,16 +12214,16 @@ }, { "name": "symfony/dotenv", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "5df79f11350166125fe754c85b87f7e13d735314" + "reference": "ba757a8564a0ccac1a26a859b83295645020ea68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/5df79f11350166125fe754c85b87f7e13d735314", - "reference": "5df79f11350166125fe754c85b87f7e13d735314", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/ba757a8564a0ccac1a26a859b83295645020ea68", + "reference": "ba757a8564a0ccac1a26a859b83295645020ea68", "shasum": "" }, "require": { @@ -12284,7 +12268,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.4.8" + "source": "https://github.com/symfony/dotenv/tree/v7.4.9" }, "funding": [ { @@ -12304,7 +12288,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T12:55:43+00:00" + "time": "2026-04-29T13:21:53+00:00" }, { "name": "symfony/error-handler", @@ -12390,16 +12374,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f57b899fa736fd71121168ef268f23c206083f0a" + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f57b899fa736fd71121168ef268f23c206083f0a", - "reference": "f57b899fa736fd71121168ef268f23c206083f0a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101", "shasum": "" }, "require": { @@ -12451,7 +12435,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.9" }, "funding": [ { @@ -12471,7 +12455,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:54:39+00:00" + "time": "2026-04-18T13:18:21+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -12619,16 +12603,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5" + "reference": "dcd8f96bcdc0f128ec406c765cc066c6035d1be3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5", - "reference": "58b9790d12f9670b7f53a1c1738febd3108970a5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/dcd8f96bcdc0f128ec406c765cc066c6035d1be3", + "reference": "dcd8f96bcdc0f128ec406c765cc066c6035d1be3", "shasum": "" }, "require": { @@ -12665,7 +12649,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.8" + "source": "https://github.com/symfony/filesystem/tree/v7.4.9" }, "funding": [ { @@ -12685,7 +12669,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-18T13:18:21+00:00" }, { "name": "symfony/finder", @@ -12830,16 +12814,16 @@ }, { "name": "symfony/form", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "fbb79fc4de32f091ec697276824331f5de3a87b4" + "reference": "b6c107af659106abec1771d9d7d22da528644d3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/fbb79fc4de32f091ec697276824331f5de3a87b4", - "reference": "fbb79fc4de32f091ec697276824331f5de3a87b4", + "url": "https://api.github.com/repos/symfony/form/zipball/b6c107af659106abec1771d9d7d22da528644d3a", + "reference": "b6c107af659106abec1771d9d7d22da528644d3a", "shasum": "" }, "require": { @@ -12909,7 +12893,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.4.8" + "source": "https://github.com/symfony/form/tree/v7.4.9" }, "funding": [ { @@ -12929,20 +12913,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-29T14:39:19+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "180533cfbac2144349044267db31d5d3df9957cb" + "reference": "601423cc0af2eb5e8c4acdf21fed553d456ff802" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/180533cfbac2144349044267db31d5d3df9957cb", - "reference": "180533cfbac2144349044267db31d5d3df9957cb", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/601423cc0af2eb5e8c4acdf21fed553d456ff802", + "reference": "601423cc0af2eb5e8c4acdf21fed553d456ff802", "shasum": "" }, "require": { @@ -12978,7 +12962,7 @@ "symfony/lock": "<6.4", "symfony/mailer": "<6.4", "symfony/messenger": "<7.4", - "symfony/mime": "<6.4", + "symfony/mime": "<6.4.37|>=7.0,<7.4.9|>=8.0,<8.0.9", "symfony/property-access": "<6.4", "symfony/property-info": "<6.4", "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", @@ -13016,7 +13000,7 @@ "symfony/lock": "^6.4|^7.0|^8.0", "symfony/mailer": "^6.4|^7.0|^8.0", "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4.37|^7.4.9|^8.0.9", "symfony/notifier": "^6.4|^7.0|^8.0", "symfony/object-mapper": "^7.3|^8.0", "symfony/polyfill-intl-icu": "~1.0", @@ -13067,7 +13051,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.4.8" + "source": "https://github.com/symfony/framework-bundle/tree/v7.4.9" }, "funding": [ { @@ -13087,20 +13071,20 @@ "type": "tidelift" } ], - "time": "2026-03-30T12:55:43+00:00" + "time": "2026-04-30T08:57:13+00:00" }, { "name": "symfony/http-client", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "01933e626c3de76bea1e22641e205e78f6a34342" + "reference": "7e941c6abf4e3bf7dca160bf0e11ef36a9f832f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/01933e626c3de76bea1e22641e205e78f6a34342", - "reference": "01933e626c3de76bea1e22641e205e78f6a34342", + "url": "https://api.github.com/repos/symfony/http-client/zipball/7e941c6abf4e3bf7dca160bf0e11ef36a9f832f6", + "reference": "7e941c6abf4e3bf7dca160bf0e11ef36a9f832f6", "shasum": "" }, "require": { @@ -13168,7 +13152,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.4.8" + "source": "https://github.com/symfony/http-client/tree/v7.4.9" }, "funding": [ { @@ -13188,7 +13172,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T12:55:43+00:00" + "time": "2026-04-29T13:25:15+00:00" }, { "name": "symfony/http-client-contracts", @@ -13645,16 +13629,16 @@ }, { "name": "symfony/mime", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "6df02f99998081032da3407a8d6c4e1dcb5d4379" + "reference": "2d550c4758ba4c47519a6667c36553d535705b0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/6df02f99998081032da3407a8d6c4e1dcb5d4379", - "reference": "6df02f99998081032da3407a8d6c4e1dcb5d4379", + "url": "https://api.github.com/repos/symfony/mime/zipball/2d550c4758ba4c47519a6667c36553d535705b0c", + "reference": "2d550c4758ba4c47519a6667c36553d535705b0c", "shasum": "" }, "require": { @@ -13710,7 +13694,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.8" + "source": "https://github.com/symfony/mime/tree/v7.4.9" }, "funding": [ { @@ -13730,20 +13714,20 @@ "type": "tidelift" } ], - "time": "2026-03-30T14:11:46+00:00" + "time": "2026-04-29T13:21:53+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "b52aeb44645a9a84a1795b973cc5c77a76df0720" + "reference": "20366bceee51838144a14805204bb792cb3d09f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/b52aeb44645a9a84a1795b973cc5c77a76df0720", - "reference": "b52aeb44645a9a84a1795b973cc5c77a76df0720", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/20366bceee51838144a14805204bb792cb3d09f2", + "reference": "20366bceee51838144a14805204bb792cb3d09f2", "shasum": "" }, "require": { @@ -13793,7 +13777,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.8" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.9" }, "funding": [ { @@ -13813,7 +13797,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:54:39+00:00" + "time": "2026-04-29T13:21:53+00:00" }, { "name": "symfony/monolog-bundle", @@ -15115,16 +15099,16 @@ }, { "name": "symfony/rate-limiter", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/rate-limiter.git", - "reference": "d55de9ec479418f58464e122e68d33886cf6f1fb" + "reference": "0b0078d29f6e64b8833492e9f76a853f23fb1a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/d55de9ec479418f58464e122e68d33886cf6f1fb", - "reference": "d55de9ec479418f58464e122e68d33886cf6f1fb", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/0b0078d29f6e64b8833492e9f76a853f23fb1a81", + "reference": "0b0078d29f6e64b8833492e9f76a853f23fb1a81", "shasum": "" }, "require": { @@ -15165,7 +15149,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v7.4.8" + "source": "https://github.com/symfony/rate-limiter/tree/v7.4.9" }, "funding": [ { @@ -15185,20 +15169,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-29T13:21:53+00:00" }, { "name": "symfony/routing", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b" + "reference": "287771d8bc86eacb30678dd10eda6c64a859951f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b", - "reference": "9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b", + "url": "https://api.github.com/repos/symfony/routing/zipball/287771d8bc86eacb30678dd10eda6c64a859951f", + "reference": "287771d8bc86eacb30678dd10eda6c64a859951f", "shasum": "" }, "require": { @@ -15250,7 +15234,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.8" + "source": "https://github.com/symfony/routing/tree/v7.4.9" }, "funding": [ { @@ -15270,7 +15254,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "symfony/runtime", @@ -15634,16 +15618,16 @@ }, { "name": "symfony/security-http", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "1b07d7d472ba967fd66697067e6274084d2d1d7c" + "reference": "a34991b13899de1f953df245395aa2196f9bc113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/1b07d7d472ba967fd66697067e6274084d2d1d7c", - "reference": "1b07d7d472ba967fd66697067e6274084d2d1d7c", + "url": "https://api.github.com/repos/symfony/security-http/zipball/a34991b13899de1f953df245395aa2196f9bc113", + "reference": "a34991b13899de1f953df245395aa2196f9bc113", "shasum": "" }, "require": { @@ -15702,7 +15686,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v7.4.8" + "source": "https://github.com/symfony/security-http/tree/v7.4.9" }, "funding": [ { @@ -15722,7 +15706,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "symfony/serializer", @@ -16534,16 +16518,16 @@ }, { "name": "symfony/type-info", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "6bf34da885ff5143a3dfd8f1b863bb8ab95f50bd" + "reference": "cafeedbf157b890e94ac5b83eaed85595106d5d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/6bf34da885ff5143a3dfd8f1b863bb8ab95f50bd", - "reference": "6bf34da885ff5143a3dfd8f1b863bb8ab95f50bd", + "url": "https://api.github.com/repos/symfony/type-info/zipball/cafeedbf157b890e94ac5b83eaed85595106d5d6", + "reference": "cafeedbf157b890e94ac5b83eaed85595106d5d6", "shasum": "" }, "require": { @@ -16593,7 +16577,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.4.8" + "source": "https://github.com/symfony/type-info/tree/v7.4.9" }, "funding": [ { @@ -16613,20 +16597,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "symfony/uid", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "6883ebdf7bf6a12b37519dbc0df62b0222401b56" + "reference": "2676b524340abcfe4d6151ec698463cebafee439" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/6883ebdf7bf6a12b37519dbc0df62b0222401b56", - "reference": "6883ebdf7bf6a12b37519dbc0df62b0222401b56", + "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439", + "reference": "2676b524340abcfe4d6151ec698463cebafee439", "shasum": "" }, "require": { @@ -16671,7 +16655,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.8" + "source": "https://github.com/symfony/uid/tree/v7.4.9" }, "funding": [ { @@ -16691,7 +16675,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-30T15:19:22+00:00" }, { "name": "symfony/ux-translator", @@ -16879,16 +16863,16 @@ }, { "name": "symfony/validator", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "8f73cbddae916756f319b3e195088da216f0f12f" + "reference": "d3bb3dcfbaa26b5782196819dac2e1097d5fae2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/8f73cbddae916756f319b3e195088da216f0f12f", - "reference": "8f73cbddae916756f319b3e195088da216f0f12f", + "url": "https://api.github.com/repos/symfony/validator/zipball/d3bb3dcfbaa26b5782196819dac2e1097d5fae2c", + "reference": "d3bb3dcfbaa26b5782196819dac2e1097d5fae2c", "shasum": "" }, "require": { @@ -16959,7 +16943,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.4.8" + "source": "https://github.com/symfony/validator/tree/v7.4.9" }, "funding": [ { @@ -16979,7 +16963,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T12:55:43+00:00" + "time": "2026-04-30T15:35:16+00:00" }, { "name": "symfony/var-dumper", @@ -17070,16 +17054,16 @@ }, { "name": "symfony/var-exporter", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "398907e89a2a56fe426f7955c6fa943ec0c77225" + "reference": "22e03a49c95ef054a43601cd159b222bfab1c701" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/398907e89a2a56fe426f7955c6fa943ec0c77225", - "reference": "398907e89a2a56fe426f7955c6fa943ec0c77225", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/22e03a49c95ef054a43601cd159b222bfab1c701", + "reference": "22e03a49c95ef054a43601cd159b222bfab1c701", "shasum": "" }, "require": { @@ -17127,7 +17111,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.4.8" + "source": "https://github.com/symfony/var-exporter/tree/v7.4.9" }, "funding": [ { @@ -17147,7 +17131,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-18T13:18:21+00:00" }, { "name": "symfony/web-link", @@ -17451,16 +17435,16 @@ }, { "name": "tecnickcom/tc-lib-barcode", - "version": "2.4.34", + "version": "2.4.37", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-barcode.git", - "reference": "4057b35150e383f0425221efaea312e5cb968902" + "reference": "86b89b0399797706a07c1fd4eec3158460b13f7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/4057b35150e383f0425221efaea312e5cb968902", - "reference": "4057b35150e383f0425221efaea312e5cb968902", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/86b89b0399797706a07c1fd4eec3158460b13f7f", + "reference": "86b89b0399797706a07c1fd4eec3158460b13f7f", "shasum": "" }, "require": { @@ -17469,7 +17453,7 @@ "ext-gd": "*", "ext-pcre": "*", "php": ">=8.1", - "tecnickcom/tc-lib-color": "^2.3" + "tecnickcom/tc-lib-color": "^2.5" }, "require-dev": { "pdepend/pdepend": "^2.16", @@ -17548,20 +17532,20 @@ "type": "custom" } ], - "time": "2026-04-20T07:15:41+00:00" + "time": "2026-04-30T19:47:34+00:00" }, { "name": "tecnickcom/tc-lib-color", - "version": "2.3.14", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-color.git", - "reference": "6fbb7daabf4f15b38d264ad9091f0745502459b9" + "reference": "ebb76dfb334b7a0b470e765a7b46c5635dce2fe0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/6fbb7daabf4f15b38d264ad9091f0745502459b9", - "reference": "6fbb7daabf4f15b38d264ad9091f0745502459b9", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/ebb76dfb334b7a0b470e765a7b46c5635dce2fe0", + "reference": "ebb76dfb334b7a0b470e765a7b46c5635dce2fe0", "shasum": "" }, "require": { @@ -17618,7 +17602,7 @@ "type": "custom" } ], - "time": "2026-04-20T07:09:08+00:00" + "time": "2026-04-30T19:21:47+00:00" }, { "name": "thecodingmachine/safe", @@ -18566,16 +18550,16 @@ }, { "name": "web-auth/webauthn-lib", - "version": "5.2.5", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "c28f27cb8f968d2b84db48587563f03bb451b60a" + "reference": "a272f254c056fb3d6c80a4801d3c7c5fedc6a08d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/c28f27cb8f968d2b84db48587563f03bb451b60a", - "reference": "c28f27cb8f968d2b84db48587563f03bb451b60a", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/a272f254c056fb3d6c80a4801d3c7c5fedc6a08d", + "reference": "a272f254c056fb3d6c80a4801d3c7c5fedc6a08d", "shasum": "" }, "require": { @@ -18583,18 +18567,18 @@ "ext-openssl": "*", "paragonie/constant_time_encoding": "^2.6|^3.0", "php": ">=8.2", - "phpdocumentor/reflection-docblock": "^5.3", + "phpdocumentor/reflection-docblock": "^5.3|^6.0", "psr/clock": "^1.0", "psr/event-dispatcher": "^1.0", "psr/log": "^1.0|^2.0|^3.0", "spomky-labs/cbor-php": "^3.0", "spomky-labs/pki-framework": "^1.0", - "symfony/clock": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0|^8.0", "symfony/deprecation-contracts": "^3.2", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", "web-auth/cose-lib": "^4.2.3" }, "suggest": { @@ -18636,7 +18620,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.5" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.0" }, "funding": [ { @@ -18648,34 +18632,35 @@ "type": "patreon" } ], - "time": "2026-03-23T21:43:02+00:00" + "time": "2026-05-01T12:14:37+00:00" }, { "name": "web-auth/webauthn-symfony-bundle", - "version": "5.2.5", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", - "reference": "91f0aff70703e20d84251c83e238da1f8fc53b24" + "reference": "40f5ae033d4bea090aaa395b906ebfa7d7fe6055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/91f0aff70703e20d84251c83e238da1f8fc53b24", - "reference": "91f0aff70703e20d84251c83e238da1f8fc53b24", + "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/40f5ae033d4bea090aaa395b906ebfa7d7fe6055", + "reference": "40f5ae033d4bea090aaa395b906ebfa7d7fe6055", "shasum": "" }, "require": { "php": ">=8.2", "psr/event-dispatcher": "^1.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/security-bundle": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/security-http": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/security-bundle": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-http": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^3.0", + "symfony/validator": "^6.4|^7.0|^8.0", "web-auth/webauthn-lib": "self.version" }, "suggest": { @@ -18718,7 +18703,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.2.5" + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.3.0" }, "funding": [ { @@ -18730,7 +18715,7 @@ "type": "patreon" } ], - "time": "2025-12-20T10:20:41+00:00" + "time": "2026-05-01T12:14:37+00:00" }, { "name": "webmozart/assert", @@ -19429,11 +19414,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.51", + "version": "2.1.54", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc3b523c45e714c70de2ac5113b958223b55dc59", - "reference": "dc3b523c45e714c70de2ac5113b958223b55dc59", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8be50c3992107dc837b17da4d140fbbdf9a5c5bd", + "reference": "8be50c3992107dc837b17da4d140fbbdf9a5c5bd", "shasum": "" }, "require": { @@ -19478,7 +19463,7 @@ "type": "github" } ], - "time": "2026-04-21T18:22:01+00:00" + "time": "2026-04-29T13:31:09+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -20204,18 +20189,18 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "08cd07f04fb07fb4d316e956801d57b700cf7096" + "reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/08cd07f04fb07fb4d316e956801d57b700cf7096", - "reference": "08cd07f04fb07fb4d316e956801d57b700cf7096", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2221f6ef09e87784e78e188aadd8f7e3a50e679a", + "reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<5.0.8", + "admidio/admidio": "<=5.0.8", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -20324,7 +20309,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<0.31.5", + "ci4-cms-erp/ci4ms": "<=0.31.6", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -20529,7 +20514,7 @@ "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", "getgrav/grav": "<1.11.0.0-beta1", - "getkirby/cms": "<5.4", + "getkirby/cms": "<4.9|>=5,<5.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -20589,7 +20574,7 @@ "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", "invoiceninja/invoiceninja": "<5.13.4", - "ipl/web": "<0.10.1", + "ipl/web": "<=0.13", "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", @@ -20825,7 +20810,7 @@ "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", - "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", + "phpoffice/phpspreadsheet": "<=1.30.3|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6", "phppgadmin/phppgadmin": "<=7.13", "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51", "phpservermon/phpservermon": "<3.6", @@ -20859,7 +20844,7 @@ "prestashop/gamification": "<2.3.2", "prestashop/prestashop": "<8.2.5|>=9.0.0.0-alpha1,<9.1", "prestashop/productcomments": "<5.0.2", - "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", + "prestashop/ps_checkout": "<5.3", "prestashop/ps_contactinfo": "<=3.3.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", @@ -20896,6 +20881,7 @@ "rhukster/dom-sanitizer": "<1.0.10", "rmccue/requests": ">=1.6,<1.8", "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", + "roadiz/openid": "<2.3.43|>=2.5,<2.5.45|>=2.6,<2.6.31|>=2.7,<2.7.18", "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5-dev", @@ -21253,7 +21239,7 @@ "type": "tidelift" } ], - "time": "2026-04-24T17:22:29+00:00" + "time": "2026-04-30T21:24:12+00:00" }, { "name": "sebastian/cli-parser", @@ -22627,16 +22613,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v7.4.8", + "version": "v7.4.9", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "79f039096c67cc1cc3f607d2ba72af86cd27e6a4" + "reference": "36dd8b8c05da059925c5804641aad9159e5b73e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/79f039096c67cc1cc3f607d2ba72af86cd27e6a4", - "reference": "79f039096c67cc1cc3f607d2ba72af86cd27e6a4", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/36dd8b8c05da059925c5804641aad9159e5b73e8", + "reference": "36dd8b8c05da059925c5804641aad9159e5b73e8", "shasum": "" }, "require": { @@ -22693,7 +22679,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.8" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.9" }, "funding": [ { @@ -22713,7 +22699,7 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-04-22T15:21:55+00:00" }, { "name": "theseer/tokenizer", @@ -22769,7 +22755,6 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "jkphl/micrometa": 20, "roave/security-advisories": 20 }, "prefer-stable": false, diff --git a/config/reference.php b/config/reference.php index 71850e24..e1304d43 100644 --- a/config/reference.php +++ b/config/reference.php @@ -128,7 +128,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * @psalm-type FrameworkConfig = array{ * secret?: scalar|Param|null, * http_method_override?: bool|Param, // Set true to enable support for the '_method' request parameter to determine the intended HTTP method on POST requests. // Default: false - * allowed_http_method_override?: list|null, + * allowed_http_method_override?: null|list, * trust_x_sendfile_type_header?: scalar|Param|null, // Set true to enable support for xsendfile in binary file responses. // Default: "%env(bool:default::SYMFONY_TRUST_X_SENDFILE_TYPE_HEADER)%" * ide?: scalar|Param|null, // Default: "%env(default::SYMFONY_IDE)%" * test?: bool|Param, @@ -136,9 +136,9 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * set_locale_from_accept_language?: bool|Param, // Whether to use the Accept-Language HTTP header to set the Request locale (only when the "_locale" request attribute is not passed). // Default: false * set_content_language_from_locale?: bool|Param, // Whether to set the Content-Language HTTP header on the Response using the Request locale. // Default: false * enabled_locales?: list, - * trusted_hosts?: list, + * trusted_hosts?: string|list, * trusted_proxies?: mixed, // Default: ["%env(default::SYMFONY_TRUSTED_PROXIES)%"] - * trusted_headers?: list, + * trusted_headers?: string|list, * error_controller?: scalar|Param|null, // Default: "error_controller" * handle_all_throwables?: bool|Param, // HttpKernel will handle all kinds of \Throwable. // Default: true * csrf_protection?: bool|array{ @@ -193,40 +193,40 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * workflows?: bool|array{ * enabled?: bool|Param, // Default: false * workflows?: array, - * definition_validators?: list, - * support_strategy?: scalar|Param|null, - * initial_marking?: list, - * events_to_dispatch?: list|null, - * places?: list, + * definition_validators?: list, + * support_strategy?: scalar|Param|null, + * initial_marking?: backed-enum|string|list, + * events_to_dispatch?: null|list, + * places?: string|list, + * }>, + * transitions?: list, + * to?: backed-enum|string|list, + * weight?: int|Param, // Default: 1 + * metadata?: array, + * }>, * metadata?: array, * }>, - * transitions?: list, - * to?: list, - * weight?: int|Param, // Default: 1 - * metadata?: array, - * }>, - * metadata?: array, - * }>, * }, * router?: bool|array{ // Router configuration * enabled?: bool|Param, // Default: false @@ -271,20 +271,20 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * version_format?: scalar|Param|null, // Default: "%%s?%%s" * json_manifest_path?: scalar|Param|null, // Default: null * base_path?: scalar|Param|null, // Default: "" - * base_urls?: list, + * base_urls?: string|list, * packages?: array, - * }>, + * strict_mode?: bool|Param, // Throw an exception if an entry is missing from the manifest.json. // Default: false + * version_strategy?: scalar|Param|null, // Default: null + * version?: scalar|Param|null, + * version_format?: scalar|Param|null, // Default: null + * json_manifest_path?: scalar|Param|null, // Default: null + * base_path?: scalar|Param|null, // Default: "" + * base_urls?: string|list, + * }>, * }, * asset_mapper?: bool|array{ // Asset Mapper configuration * enabled?: bool|Param, // Default: false - * paths?: array, + * paths?: string|array, * excluded_patterns?: list, * exclude_dotfiles?: bool|Param, // If true, any files starting with "." will be excluded from the asset mapper. // Default: true * server?: bool|Param, // If true, a "dev server" will return the assets from the public directory (true in "debug" mode only by default). // Default: true @@ -303,7 +303,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * translator?: bool|array{ // Translator configuration * enabled?: bool|Param, // Default: true - * fallbacks?: list, + * fallbacks?: string|list, * logging?: bool|Param, // Default: false * formatter?: scalar|Param|null, // Default: "translator.formatter.default" * cache_dir?: scalar|Param|null, // Default: "%kernel.cache_dir%/translations" @@ -318,22 +318,22 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * localizable_html_attributes?: list, * }, * providers?: array, - * locales?: list, - * }>, + * dsn?: scalar|Param|null, + * domains?: list, + * locales?: list, + * }>, * globals?: array, - * domain?: string|Param, - * }>, + * value?: mixed, + * message?: string|Param, + * parameters?: array, + * domain?: string|Param, + * }>, * }, * validation?: bool|array{ // Validation configuration * enabled?: bool|Param, // Default: true * cache?: scalar|Param|null, // Deprecated: Setting the "framework.validation.cache.cache" configuration option is deprecated. It will be removed in version 8.0. * enable_attributes?: bool|Param, // Default: true - * static_method?: list, + * static_method?: string|list, * translation_domain?: scalar|Param|null, // Default: "validators" * email_validation_mode?: "html5"|"html5-allow-no-tld"|"strict"|"loose"|Param, // Default: "html5" * mapping?: array{ @@ -345,8 +345,8 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * disable_translation?: bool|Param, // Default: false * auto_mapping?: array, - * }>, + * services?: list, + * }>, * }, * annotations?: bool|array{ * enabled?: bool|Param, // Default: false @@ -362,11 +362,11 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * default_context?: array, * named_serializers?: array, - * include_built_in_normalizers?: bool|Param, // Whether to include the built-in normalizers // Default: true - * include_built_in_encoders?: bool|Param, // Whether to include the built-in encoders // Default: true - * }>, + * name_converter?: scalar|Param|null, + * default_context?: array, + * include_built_in_normalizers?: bool|Param, // Whether to include the built-in normalizers // Default: true + * include_built_in_encoders?: bool|Param, // Whether to include the built-in encoders // Default: true + * }>, * }, * property_access?: bool|array{ // Property access configuration * enabled?: bool|Param, // Default: true @@ -396,40 +396,40 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * default_doctrine_dbal_provider?: scalar|Param|null, // Default: "database_connection" * default_pdo_provider?: scalar|Param|null, // Default: null * pools?: array, - * tags?: scalar|Param|null, // Default: null - * public?: bool|Param, // Default: false - * default_lifetime?: scalar|Param|null, // Default lifetime of the pool. - * provider?: scalar|Param|null, // Overwrite the setting from the default provider for this adapter. - * early_expiration_message_bus?: scalar|Param|null, - * clearer?: scalar|Param|null, - * }>, + * adapters?: string|list, + * tags?: scalar|Param|null, // Default: null + * public?: bool|Param, // Default: false + * default_lifetime?: scalar|Param|null, // Default lifetime of the pool. + * provider?: scalar|Param|null, // Overwrite the setting from the default provider for this adapter. + * early_expiration_message_bus?: scalar|Param|null, + * clearer?: scalar|Param|null, + * }>, * }, * php_errors?: array{ // PHP errors handling configuration * log?: mixed, // Use the application logger instead of the PHP logger for logging PHP errors. // Default: true * throw?: bool|Param, // Throw PHP errors as \ErrorException instances. // Default: true * }, * exceptions?: array, + * log_level?: scalar|Param|null, // The level of log message. Null to let Symfony decide. // Default: null + * status_code?: scalar|Param|null, // The status code of the response. Null or 0 to let Symfony decide. // Default: null + * log_channel?: scalar|Param|null, // The channel of log message. Null to let Symfony decide. // Default: null + * }>, * web_link?: bool|array{ // Web links configuration * enabled?: bool|Param, // Default: true * }, * lock?: bool|string|array{ // Lock configuration * enabled?: bool|Param, // Default: false - * resources?: array>, + * resources?: string|array>, * }, * semaphore?: bool|string|array{ // Semaphore configuration * enabled?: bool|Param, // Default: false - * resources?: array, + * resources?: string|array, * }, * messenger?: bool|array{ // Messenger configuration * enabled?: bool|Param, // Default: false * routing?: array, - * }>, + * senders?: list, + * }>, * serializer?: array{ * default_serializer?: scalar|Param|null, // Service id to use as the default serializer for the transports. // Default: "messenger.transport.native_php_serializer" * symfony_serializer?: array{ @@ -438,34 +438,34 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * }, * transports?: array, - * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null - * retry_strategy?: string|array{ - * service?: scalar|Param|null, // Service id to override the retry strategy entirely. // Default: null - * max_retries?: int|Param, // Default: 3 - * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 - * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: this delay = (delay * (multiple ^ retries)). // Default: 2 - * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 - * jitter?: float|Param, // Randomness to apply to the delay (between 0 and 1). // Default: 0.1 - * }, - * rate_limiter?: scalar|Param|null, // Rate limiter name to use when processing messages. // Default: null - * }>, + * dsn?: scalar|Param|null, + * serializer?: scalar|Param|null, // Service id of a custom serializer to use. // Default: null + * options?: array, + * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null + * retry_strategy?: string|array{ + * service?: scalar|Param|null, // Service id to override the retry strategy entirely. // Default: null + * max_retries?: int|Param, // Default: 3 + * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: this delay = (delay * (multiple ^ retries)). // Default: 2 + * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float|Param, // Randomness to apply to the delay (between 0 and 1). // Default: 0.1 + * }, + * rate_limiter?: scalar|Param|null, // Rate limiter name to use when processing messages. // Default: null + * }>, * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null - * stop_worker_on_signals?: list, + * stop_worker_on_signals?: int|string|list, * default_bus?: scalar|Param|null, // Default: null * buses?: array, + * default_middleware?: bool|string|array{ + * enabled?: bool|Param, // Default: true + * allow_no_handlers?: bool|Param, // Default: false + * allow_no_senders?: bool|Param, // Default: true + * }, + * middleware?: string|list, + * }>, * }>, - * }>, * }, * scheduler?: bool|array{ // Scheduler configuration * enabled?: bool|Param, // Default: false @@ -510,10 +510,10 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * retry_failed?: bool|array{ * enabled?: bool|Param, // Default: false * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null - * http_codes?: array, - * }>, + * http_codes?: int|string|array, + * }>, * max_retries?: int|Param, // Default: 3 * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 @@ -523,57 +523,57 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * mock_response_factory?: scalar|Param|null, // The id of the service that should generate mock responses. It should be either an invokable or an iterable. * scoped_clients?: array, - * headers?: array, - * max_redirects?: int|Param, // The maximum number of redirects to follow. - * http_version?: scalar|Param|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. - * resolve?: array, - * proxy?: scalar|Param|null, // The URL of the proxy to pass requests through or null for automatic detection. - * no_proxy?: scalar|Param|null, // A comma separated list of hosts that do not require a proxy to be reached. - * timeout?: float|Param, // The idle timeout, defaults to the "default_socket_timeout" ini parameter. - * max_duration?: float|Param, // The maximum execution time for the request+response as a whole. - * bindto?: scalar|Param|null, // A network interface name, IP address, a host name or a UNIX socket to bind to. - * verify_peer?: bool|Param, // Indicates if the peer should be verified in a TLS context. - * verify_host?: bool|Param, // Indicates if the host should exist as a certificate common name. - * cafile?: scalar|Param|null, // A certificate authority file. - * capath?: scalar|Param|null, // A directory that contains multiple certificate authority files. - * local_cert?: scalar|Param|null, // A PEM formatted certificate file. - * local_pk?: scalar|Param|null, // A private key file. - * passphrase?: scalar|Param|null, // The passphrase used to encrypt the "local_pk" file. - * ciphers?: scalar|Param|null, // A list of TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...). - * peer_fingerprint?: array{ // Associative array: hashing algorithm => hash(es). - * sha1?: mixed, - * pin-sha256?: mixed, - * md5?: mixed, - * }, - * crypto_method?: scalar|Param|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants. - * extra?: array, - * rate_limiter?: scalar|Param|null, // Rate limiter name to use for throttling requests. // Default: null - * caching?: bool|array{ // Caching configuration. - * enabled?: bool|Param, // Default: false - * cache_pool?: string|Param, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" - * shared?: bool|Param, // Indicates whether the cache is shared (public) or private. // Default: true - * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null - * }, - * retry_failed?: bool|array{ - * enabled?: bool|Param, // Default: false - * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null - * http_codes?: array, - * }>, - * max_retries?: int|Param, // Default: 3 - * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 - * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 - * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 - * jitter?: float|Param, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 - * }, - * }>, + * scope?: scalar|Param|null, // The regular expression that the request URL must match before adding the other options. When none is provided, the base URI is used instead. + * base_uri?: scalar|Param|null, // The URI to resolve relative URLs, following rules in RFC 3985, section 2. + * auth_basic?: scalar|Param|null, // An HTTP Basic authentication "username:password". + * auth_bearer?: scalar|Param|null, // A token enabling HTTP Bearer authorization. + * auth_ntlm?: scalar|Param|null, // A "username:password" pair to use Microsoft NTLM authentication (requires the cURL extension). + * query?: array, + * headers?: array, + * max_redirects?: int|Param, // The maximum number of redirects to follow. + * http_version?: scalar|Param|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * resolve?: array, + * proxy?: scalar|Param|null, // The URL of the proxy to pass requests through or null for automatic detection. + * no_proxy?: scalar|Param|null, // A comma separated list of hosts that do not require a proxy to be reached. + * timeout?: float|Param, // The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * max_duration?: float|Param, // The maximum execution time for the request+response as a whole. + * bindto?: scalar|Param|null, // A network interface name, IP address, a host name or a UNIX socket to bind to. + * verify_peer?: bool|Param, // Indicates if the peer should be verified in a TLS context. + * verify_host?: bool|Param, // Indicates if the host should exist as a certificate common name. + * cafile?: scalar|Param|null, // A certificate authority file. + * capath?: scalar|Param|null, // A directory that contains multiple certificate authority files. + * local_cert?: scalar|Param|null, // A PEM formatted certificate file. + * local_pk?: scalar|Param|null, // A private key file. + * passphrase?: scalar|Param|null, // The passphrase used to encrypt the "local_pk" file. + * ciphers?: scalar|Param|null, // A list of TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...). + * peer_fingerprint?: array{ // Associative array: hashing algorithm => hash(es). + * sha1?: mixed, + * pin-sha256?: mixed, + * md5?: mixed, + * }, + * crypto_method?: scalar|Param|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants. + * extra?: array, + * rate_limiter?: scalar|Param|null, // Rate limiter name to use for throttling requests. // Default: null + * caching?: bool|array{ // Caching configuration. + * enabled?: bool|Param, // Default: false + * cache_pool?: string|Param, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" + * shared?: bool|Param, // Indicates whether the cache is shared (public) or private. // Default: true + * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * }, + * retry_failed?: bool|array{ + * enabled?: bool|Param, // Default: false + * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null + * http_codes?: int|string|array, + * }>, + * max_retries?: int|Param, // Default: 3 + * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 + * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float|Param, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 + * }, + * }>, * }, * mailer?: bool|array{ // Mailer configuration * enabled?: bool|Param, // Default: true @@ -582,12 +582,12 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * transports?: array, * envelope?: array{ // Mailer Envelope configuration * sender?: scalar|Param|null, - * recipients?: list, - * allowed_recipients?: list, + * recipients?: string|list, + * allowed_recipients?: string|list, * }, * headers?: array, + * value?: mixed, + * }>, * dkim_signer?: bool|array{ // DKIM signer configuration * enabled?: bool|Param, // Default: false * key?: scalar|Param|null, // Key content, or path to key (in PEM format with the `file://` prefix) // Default: "" @@ -624,25 +624,25 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * notification_on_failed_messages?: bool|Param, // Default: false * channel_policy?: array>, * admin_recipients?: list, + * email?: scalar|Param|null, + * phone?: scalar|Param|null, // Default: "" + * }>, * }, * rate_limiter?: bool|array{ // Rate limiter configuration * enabled?: bool|Param, // Default: true * limiters?: array, - * limit?: int|Param, // The maximum allowed hits in a fixed interval or burst. - * interval?: scalar|Param|null, // Configures the fixed interval if "policy" is set to "fixed_window" or "sliding_window". The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). - * rate?: array{ // Configures the fill rate if "policy" is set to "token_bucket". - * interval?: scalar|Param|null, // Configures the rate interval. The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). - * amount?: int|Param, // Amount of tokens to add each interval. // Default: 1 - * }, - * }>, + * lock_factory?: scalar|Param|null, // The service ID of the lock factory used by this limiter (or null to disable locking). // Default: "auto" + * cache_pool?: scalar|Param|null, // The cache pool to use for storing the current limiter state. // Default: "cache.rate_limiter" + * storage_service?: scalar|Param|null, // The service ID of a custom storage implementation, this precedes any configured "cache_pool". // Default: null + * policy?: "fixed_window"|"token_bucket"|"sliding_window"|"compound"|"no_limit"|Param, // The algorithm to be used by this limiter. + * limiters?: string|list, + * limit?: int|Param, // The maximum allowed hits in a fixed interval or burst. + * interval?: scalar|Param|null, // Configures the fixed interval if "policy" is set to "fixed_window" or "sliding_window". The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * rate?: array{ // Configures the fill rate if "policy" is set to "token_bucket". + * interval?: scalar|Param|null, // Configures the rate interval. The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * amount?: int|Param, // Amount of tokens to add each interval. // Default: 1 + * }, + * }>, * }, * uid?: bool|array{ // Uid configuration * enabled?: bool|Param, // Default: true @@ -655,33 +655,33 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * html_sanitizer?: bool|array{ // HtmlSanitizer configuration * enabled?: bool|Param, // Default: false * sanitizers?: array, - * block_elements?: list, - * drop_elements?: list, - * allow_attributes?: array, - * drop_attributes?: array, - * force_attributes?: array>, - * force_https_urls?: bool|Param, // Transforms URLs using the HTTP scheme to use the HTTPS scheme instead. // Default: false - * allowed_link_schemes?: list, - * allowed_link_hosts?: list|null, - * allow_relative_links?: bool|Param, // Allows relative URLs to be used in links href attributes. // Default: false - * allowed_media_schemes?: list, - * allowed_media_hosts?: list|null, - * allow_relative_medias?: bool|Param, // Allows relative URLs to be used in media source attributes (img, audio, video, ...). // Default: false - * with_attribute_sanitizers?: list, - * without_attribute_sanitizers?: list, - * max_input_length?: int|Param, // The maximum length allowed for the sanitized input. // Default: 0 - * }>, + * allow_safe_elements?: bool|Param, // Allows "safe" elements and attributes. // Default: false + * allow_static_elements?: bool|Param, // Allows all static elements and attributes from the W3C Sanitizer API standard. // Default: false + * allow_elements?: array, + * block_elements?: string|list, + * drop_elements?: string|list, + * allow_attributes?: array, + * drop_attributes?: array, + * force_attributes?: array>, + * force_https_urls?: bool|Param, // Transforms URLs using the HTTP scheme to use the HTTPS scheme instead. // Default: false + * allowed_link_schemes?: string|list, + * allowed_link_hosts?: null|string|list, + * allow_relative_links?: bool|Param, // Allows relative URLs to be used in links href attributes. // Default: false + * allowed_media_schemes?: string|list, + * allowed_media_hosts?: null|string|list, + * allow_relative_medias?: bool|Param, // Allows relative URLs to be used in media source attributes (img, audio, video, ...). // Default: false + * with_attribute_sanitizers?: string|list, + * without_attribute_sanitizers?: string|list, + * max_input_length?: int|Param, // The maximum length allowed for the sanitized input. // Default: 0 + * }>, * }, * webhook?: bool|array{ // Webhook configuration * enabled?: bool|Param, // Default: false * message_bus?: scalar|Param|null, // The message bus to use. // Default: "messenger.default_bus" * routing?: array, + * service?: scalar|Param|null, + * secret?: scalar|Param|null, // Default: "" + * }>, * }, * remote-event?: bool|array{ // RemoteEvent configuration * enabled?: bool|Param, // Default: false @@ -694,62 +694,11 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * dbal?: array{ * default_connection?: scalar|Param|null, * types?: array, + * class?: scalar|Param|null, + * commented?: bool|Param, // Deprecated: The doctrine-bundle type commenting features were removed; the corresponding config parameter was deprecated in 2.0 and will be dropped in 3.0. + * }>, * driver_schemes?: array, * connections?: array, - * mapping_types?: array, - * default_table_options?: array, - * schema_manager_factory?: scalar|Param|null, // Default: "doctrine.dbal.default_schema_manager_factory" - * result_cache?: scalar|Param|null, - * slaves?: array, + * mapping_types?: array, + * default_table_options?: array, + * schema_manager_factory?: scalar|Param|null, // Default: "doctrine.dbal.default_schema_manager_factory" + * result_cache?: scalar|Param|null, + * slaves?: array, + * replicas?: array, * }>, - * replicas?: array, - * }>, * }, * orm?: array{ * default_entity_manager?: scalar|Param|null, @@ -828,94 +828,94 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * evict_cache?: bool|Param, // Set to true to fetch the entity from the database instead of using the cache, if any // Default: false * }, * entity_managers?: array, - * }>, - * }>, - * }, - * connection?: scalar|Param|null, - * class_metadata_factory_name?: scalar|Param|null, // Default: "Doctrine\\ORM\\Mapping\\ClassMetadataFactory" - * default_repository_class?: scalar|Param|null, // Default: "Doctrine\\ORM\\EntityRepository" - * auto_mapping?: scalar|Param|null, // Default: false - * naming_strategy?: scalar|Param|null, // Default: "doctrine.orm.naming_strategy.default" - * quote_strategy?: scalar|Param|null, // Default: "doctrine.orm.quote_strategy.default" - * typed_field_mapper?: scalar|Param|null, // Default: "doctrine.orm.typed_field_mapper.default" - * entity_listener_resolver?: scalar|Param|null, // Default: null - * fetch_mode_subselect_batch_size?: scalar|Param|null, - * repository_factory?: scalar|Param|null, // Default: "doctrine.orm.container_repository_factory" - * schema_ignore_classes?: list, - * report_fields_where_declared?: bool|Param, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.16 and will be mandatory in ORM 3.0. See https://github.com/doctrine/orm/pull/10455. // Default: true - * validate_xml_mapping?: bool|Param, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.14. See https://github.com/doctrine/orm/pull/6728. // Default: false - * second_level_cache?: array{ - * region_cache_driver?: string|array{ + * query_cache_driver?: string|array{ * type?: scalar|Param|null, // Default: null * id?: scalar|Param|null, * pool?: scalar|Param|null, * }, - * region_lock_lifetime?: scalar|Param|null, // Default: 60 - * log_enabled?: bool|Param, // Default: true - * region_lifetime?: scalar|Param|null, // Default: 3600 - * enabled?: bool|Param, // Default: true - * factory?: scalar|Param|null, - * regions?: array, + * }>, + * }>, + * }, + * connection?: scalar|Param|null, + * class_metadata_factory_name?: scalar|Param|null, // Default: "Doctrine\\ORM\\Mapping\\ClassMetadataFactory" + * default_repository_class?: scalar|Param|null, // Default: "Doctrine\\ORM\\EntityRepository" + * auto_mapping?: scalar|Param|null, // Default: false + * naming_strategy?: scalar|Param|null, // Default: "doctrine.orm.naming_strategy.default" + * quote_strategy?: scalar|Param|null, // Default: "doctrine.orm.quote_strategy.default" + * typed_field_mapper?: scalar|Param|null, // Default: "doctrine.orm.typed_field_mapper.default" + * entity_listener_resolver?: scalar|Param|null, // Default: null + * fetch_mode_subselect_batch_size?: scalar|Param|null, + * repository_factory?: scalar|Param|null, // Default: "doctrine.orm.container_repository_factory" + * schema_ignore_classes?: list, + * report_fields_where_declared?: bool|Param, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.16 and will be mandatory in ORM 3.0. See https://github.com/doctrine/orm/pull/10455. // Default: true + * validate_xml_mapping?: bool|Param, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.14. See https://github.com/doctrine/orm/pull/6728. // Default: false + * second_level_cache?: array{ + * region_cache_driver?: string|array{ * type?: scalar|Param|null, // Default: null * id?: scalar|Param|null, * pool?: scalar|Param|null, * }, - * lock_path?: scalar|Param|null, // Default: "%kernel.cache_dir%/doctrine/orm/slc/filelock" - * lock_lifetime?: scalar|Param|null, // Default: 60 - * type?: scalar|Param|null, // Default: "default" - * lifetime?: scalar|Param|null, // Default: 0 - * service?: scalar|Param|null, - * name?: scalar|Param|null, - * }>, - * loggers?: array, - * }, - * hydrators?: array, - * mappings?: array, + * loggers?: array, + * }, + * hydrators?: array, + * mappings?: array, + * dql?: array{ + * string_functions?: array, + * numeric_functions?: array, + * datetime_functions?: array, + * }, + * filters?: array, + * }>, + * identity_generation_preferences?: array, * }>, - * dql?: array{ - * string_functions?: array, - * numeric_functions?: array, - * datetime_functions?: array, - * }, - * filters?: array, - * }>, - * identity_generation_preferences?: array, - * }>, * resolve_target_entities?: array, * }, * } @@ -957,390 +957,391 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * allow_if_equal_granted_denied?: bool|Param, // Default: true * }, * password_hashers?: array, - * hash_algorithm?: scalar|Param|null, // Name of hashing algorithm for PBKDF2 (i.e. sha256, sha512, etc..) See hash_algos() for a list of supported algorithms. // Default: "sha512" - * key_length?: scalar|Param|null, // Default: 40 - * ignore_case?: bool|Param, // Default: false - * encode_as_base64?: bool|Param, // Default: true - * iterations?: scalar|Param|null, // Default: 5000 - * cost?: int|Param, // Default: null - * memory_cost?: scalar|Param|null, // Default: null - * time_cost?: scalar|Param|null, // Default: null - * id?: scalar|Param|null, - * }>, + * algorithm?: scalar|Param|null, + * migrate_from?: string|list, + * hash_algorithm?: scalar|Param|null, // Name of hashing algorithm for PBKDF2 (i.e. sha256, sha512, etc..) See hash_algos() for a list of supported algorithms. // Default: "sha512" + * key_length?: scalar|Param|null, // Default: 40 + * ignore_case?: bool|Param, // Default: false + * encode_as_base64?: bool|Param, // Default: true + * iterations?: scalar|Param|null, // Default: 5000 + * cost?: int|Param, // Default: null + * memory_cost?: scalar|Param|null, // Default: null + * time_cost?: scalar|Param|null, // Default: null + * id?: scalar|Param|null, + * }>, * providers?: array, - * }, - * entity?: array{ - * class?: scalar|Param|null, // The full entity class name of your user class. - * property?: scalar|Param|null, // Default: null - * manager_name?: scalar|Param|null, // Default: null - * }, - * memory?: array{ - * users?: array, - * }>, - * }, - * ldap?: array{ - * service?: scalar|Param|null, - * base_dn?: scalar|Param|null, - * search_dn?: scalar|Param|null, // Default: null - * search_password?: scalar|Param|null, // Default: null - * extra_fields?: list, - * default_roles?: list, - * role_fetcher?: scalar|Param|null, // Default: null - * uid_key?: scalar|Param|null, // Default: "sAMAccountName" - * filter?: scalar|Param|null, // Default: "({uid_key}={user_identifier})" - * password_attribute?: scalar|Param|null, // Default: null - * }, - * saml?: array{ - * user_class?: scalar|Param|null, - * default_roles?: list, - * }, - * }>, + * id?: scalar|Param|null, + * chain?: array{ + * providers?: string|list, + * }, + * entity?: array{ + * class?: scalar|Param|null, // The full entity class name of your user class. + * property?: scalar|Param|null, // Default: null + * manager_name?: scalar|Param|null, // Default: null + * }, + * memory?: array{ + * users?: array, + * }>, + * }, + * ldap?: array{ + * service?: scalar|Param|null, + * base_dn?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: null + * search_password?: scalar|Param|null, // Default: null + * extra_fields?: list, + * default_roles?: string|list, + * role_fetcher?: scalar|Param|null, // Default: null + * uid_key?: scalar|Param|null, // Default: "sAMAccountName" + * filter?: scalar|Param|null, // Default: "({uid_key}={user_identifier})" + * password_attribute?: scalar|Param|null, // Default: null + * }, + * saml?: array{ + * user_class?: scalar|Param|null, + * default_roles?: list, + * }, + * }>, * firewalls?: array, - * security?: bool|Param, // Default: true - * user_checker?: scalar|Param|null, // The UserChecker to use when authenticating users in this firewall. // Default: "security.user_checker" - * request_matcher?: scalar|Param|null, - * access_denied_url?: scalar|Param|null, - * access_denied_handler?: scalar|Param|null, - * entry_point?: scalar|Param|null, // An enabled authenticator name or a service id that implements "Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface". - * provider?: scalar|Param|null, - * stateless?: bool|Param, // Default: false - * lazy?: bool|Param, // Default: false - * context?: scalar|Param|null, - * logout?: array{ - * enable_csrf?: bool|Param|null, // Default: null - * csrf_token_id?: scalar|Param|null, // Default: "logout" - * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" - * csrf_token_manager?: scalar|Param|null, - * path?: scalar|Param|null, // Default: "/logout" - * target?: scalar|Param|null, // Default: "/" - * invalidate_session?: bool|Param, // Default: true - * clear_site_data?: list<"*"|"cache"|"cookies"|"storage"|"executionContexts"|Param>, - * delete_cookies?: array, - * }, - * switch_user?: array{ + * pattern?: scalar|Param|null, + * host?: scalar|Param|null, + * methods?: string|list, + * security?: bool|Param, // Default: true + * user_checker?: scalar|Param|null, // The UserChecker to use when authenticating users in this firewall. // Default: "security.user_checker" + * request_matcher?: scalar|Param|null, + * access_denied_url?: scalar|Param|null, + * access_denied_handler?: scalar|Param|null, + * entry_point?: scalar|Param|null, // An enabled authenticator name or a service id that implements "Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface". * provider?: scalar|Param|null, - * parameter?: scalar|Param|null, // Default: "_switch_user" - * role?: scalar|Param|null, // Default: "ROLE_ALLOWED_TO_SWITCH" - * target_route?: scalar|Param|null, // Default: null - * }, - * required_badges?: list, - * custom_authenticators?: list, - * login_throttling?: array{ - * limiter?: scalar|Param|null, // A service id implementing "Symfony\Component\HttpFoundation\RateLimiter\RequestRateLimiterInterface". - * max_attempts?: int|Param, // Default: 5 - * interval?: scalar|Param|null, // Default: "1 minute" - * lock_factory?: scalar|Param|null, // The service ID of the lock factory used by the login rate limiter (or null to disable locking). // Default: null - * cache_pool?: string|Param, // The cache pool to use for storing the limiter state // Default: "cache.rate_limiter" - * storage_service?: string|Param, // The service ID of a custom storage implementation, this precedes any configured "cache_pool" // Default: null - * }, - * two_factor?: array{ - * check_path?: scalar|Param|null, // Default: "/2fa_check" - * post_only?: bool|Param, // Default: true - * auth_form_path?: scalar|Param|null, // Default: "/2fa" - * always_use_default_target_path?: bool|Param, // Default: false - * default_target_path?: scalar|Param|null, // Default: "/" - * success_handler?: scalar|Param|null, // Default: null - * failure_handler?: scalar|Param|null, // Default: null - * authentication_required_handler?: scalar|Param|null, // Default: null - * auth_code_parameter_name?: scalar|Param|null, // Default: "_auth_code" - * trusted_parameter_name?: scalar|Param|null, // Default: "_trusted" - * remember_me_sets_trusted?: scalar|Param|null, // Default: false - * multi_factor?: bool|Param, // Default: false - * prepare_on_login?: bool|Param, // Default: false - * prepare_on_access_denied?: bool|Param, // Default: false - * enable_csrf?: scalar|Param|null, // Default: false - * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" - * csrf_token_id?: scalar|Param|null, // Default: "two_factor" - * csrf_header?: scalar|Param|null, // Default: null - * csrf_token_manager?: scalar|Param|null, // Default: "scheb_two_factor.csrf_token_manager" - * provider?: scalar|Param|null, // Default: null - * }, - * webauthn?: array{ - * user_provider?: scalar|Param|null, // Default: null - * options_storage?: scalar|Param|null, // Deprecated: The child node "options_storage" at path "security.firewalls..webauthn.options_storage" is deprecated. Please use the root option "options_storage" instead. // Default: null - * success_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultSuccessHandler" - * failure_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultFailureHandler" - * secured_rp_ids?: array, - * authentication?: bool|array{ - * enabled?: bool|Param, // Default: true - * profile?: scalar|Param|null, // Default: "default" - * options_builder?: scalar|Param|null, // Default: null - * routes?: array{ - * host?: scalar|Param|null, // Default: null - * options_method?: scalar|Param|null, // Default: "POST" - * options_path?: scalar|Param|null, // Default: "/login/options" - * result_method?: scalar|Param|null, // Default: "POST" - * result_path?: scalar|Param|null, // Default: "/login" - * }, - * options_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultRequestOptionsHandler" + * stateless?: bool|Param, // Default: false + * lazy?: bool|Param, // Default: false + * context?: scalar|Param|null, + * logout?: array{ + * enable_csrf?: bool|Param|null, // Default: null + * csrf_token_id?: scalar|Param|null, // Default: "logout" + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_manager?: scalar|Param|null, + * path?: scalar|Param|null, // Default: "/logout" + * target?: scalar|Param|null, // Default: "/" + * invalidate_session?: bool|Param, // Default: true + * clear_site_data?: string|list<"*"|"cache"|"cookies"|"storage"|"executionContexts"|Param>, + * delete_cookies?: string|array, * }, - * registration?: bool|array{ - * enabled?: bool|Param, // Default: false - * profile?: scalar|Param|null, // Default: "default" - * options_builder?: scalar|Param|null, // Default: null - * routes?: array{ - * host?: scalar|Param|null, // Default: null - * options_method?: scalar|Param|null, // Default: "POST" - * options_path?: scalar|Param|null, // Default: "/register/options" - * result_method?: scalar|Param|null, // Default: "POST" - * result_path?: scalar|Param|null, // Default: "/register" - * }, - * options_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultCreationOptionsHandler" + * switch_user?: array{ + * provider?: scalar|Param|null, + * parameter?: scalar|Param|null, // Default: "_switch_user" + * role?: scalar|Param|null, // Default: "ROLE_ALLOWED_TO_SWITCH" + * target_route?: scalar|Param|null, // Default: null * }, - * }, - * x509?: array{ - * provider?: scalar|Param|null, - * user?: scalar|Param|null, // Default: "SSL_CLIENT_S_DN_Email" - * credentials?: scalar|Param|null, // Default: "SSL_CLIENT_S_DN" - * user_identifier?: scalar|Param|null, // Default: "emailAddress" - * }, - * remote_user?: array{ - * provider?: scalar|Param|null, - * user?: scalar|Param|null, // Default: "REMOTE_USER" - * }, - * saml?: array{ - * provider?: scalar|Param|null, - * remember_me?: bool|Param, // Default: true - * success_handler?: scalar|Param|null, // Default: "Nbgrp\\OneloginSamlBundle\\Security\\Http\\Authentication\\SamlAuthenticationSuccessHandler" - * failure_handler?: scalar|Param|null, - * check_path?: scalar|Param|null, // Default: "/login_check" - * use_forward?: bool|Param, // Default: false - * login_path?: scalar|Param|null, // Default: "/login" - * identifier_attribute?: scalar|Param|null, // Default: null - * use_attribute_friendly_name?: bool|Param, // Default: false - * user_factory?: scalar|Param|null, // Default: null - * token_factory?: scalar|Param|null, // Default: null - * persist_user?: bool|Param, // Default: false - * always_use_default_target_path?: bool|Param, // Default: false - * default_target_path?: scalar|Param|null, // Default: "/" - * target_path_parameter?: scalar|Param|null, // Default: "_target_path" - * use_referer?: bool|Param, // Default: false - * failure_path?: scalar|Param|null, // Default: null - * failure_forward?: bool|Param, // Default: false - * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" - * }, - * login_link?: array{ - * check_route?: scalar|Param|null, // Route that will validate the login link - e.g. "app_login_link_verify". - * check_post_only?: scalar|Param|null, // If true, only HTTP POST requests to "check_route" will be handled by the authenticator. // Default: false - * signature_properties?: list, - * lifetime?: int|Param, // The lifetime of the login link in seconds. // Default: 600 - * max_uses?: int|Param, // Max number of times a login link can be used - null means unlimited within lifetime. // Default: null - * used_link_cache?: scalar|Param|null, // Cache service id used to expired links of max_uses is set. - * success_handler?: scalar|Param|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface. - * failure_handler?: scalar|Param|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface. - * provider?: scalar|Param|null, // The user provider to load users from. - * secret?: scalar|Param|null, // Default: "%kernel.secret%" - * always_use_default_target_path?: bool|Param, // Default: false - * default_target_path?: scalar|Param|null, // Default: "/" - * login_path?: scalar|Param|null, // Default: "/login" - * target_path_parameter?: scalar|Param|null, // Default: "_target_path" - * use_referer?: bool|Param, // Default: false - * failure_path?: scalar|Param|null, // Default: null - * failure_forward?: bool|Param, // Default: false - * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" - * }, - * form_login?: array{ - * provider?: scalar|Param|null, - * remember_me?: bool|Param, // Default: true - * success_handler?: scalar|Param|null, - * failure_handler?: scalar|Param|null, - * check_path?: scalar|Param|null, // Default: "/login_check" - * use_forward?: bool|Param, // Default: false - * login_path?: scalar|Param|null, // Default: "/login" - * username_parameter?: scalar|Param|null, // Default: "_username" - * password_parameter?: scalar|Param|null, // Default: "_password" - * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" - * csrf_token_id?: scalar|Param|null, // Default: "authenticate" - * enable_csrf?: bool|Param, // Default: false - * post_only?: bool|Param, // Default: true - * form_only?: bool|Param, // Default: false - * always_use_default_target_path?: bool|Param, // Default: false - * default_target_path?: scalar|Param|null, // Default: "/" - * target_path_parameter?: scalar|Param|null, // Default: "_target_path" - * use_referer?: bool|Param, // Default: false - * failure_path?: scalar|Param|null, // Default: null - * failure_forward?: bool|Param, // Default: false - * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" - * }, - * form_login_ldap?: array{ - * provider?: scalar|Param|null, - * remember_me?: bool|Param, // Default: true - * success_handler?: scalar|Param|null, - * failure_handler?: scalar|Param|null, - * check_path?: scalar|Param|null, // Default: "/login_check" - * use_forward?: bool|Param, // Default: false - * login_path?: scalar|Param|null, // Default: "/login" - * username_parameter?: scalar|Param|null, // Default: "_username" - * password_parameter?: scalar|Param|null, // Default: "_password" - * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" - * csrf_token_id?: scalar|Param|null, // Default: "authenticate" - * enable_csrf?: bool|Param, // Default: false - * post_only?: bool|Param, // Default: true - * form_only?: bool|Param, // Default: false - * always_use_default_target_path?: bool|Param, // Default: false - * default_target_path?: scalar|Param|null, // Default: "/" - * target_path_parameter?: scalar|Param|null, // Default: "_target_path" - * use_referer?: bool|Param, // Default: false - * failure_path?: scalar|Param|null, // Default: null - * failure_forward?: bool|Param, // Default: false - * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" - * service?: scalar|Param|null, // Default: "ldap" - * dn_string?: scalar|Param|null, // Default: "{user_identifier}" - * query_string?: scalar|Param|null, - * search_dn?: scalar|Param|null, // Default: "" - * search_password?: scalar|Param|null, // Default: "" - * }, - * json_login?: array{ - * provider?: scalar|Param|null, - * remember_me?: bool|Param, // Default: true - * success_handler?: scalar|Param|null, - * failure_handler?: scalar|Param|null, - * check_path?: scalar|Param|null, // Default: "/login_check" - * use_forward?: bool|Param, // Default: false - * login_path?: scalar|Param|null, // Default: "/login" - * username_path?: scalar|Param|null, // Default: "username" - * password_path?: scalar|Param|null, // Default: "password" - * }, - * json_login_ldap?: array{ - * provider?: scalar|Param|null, - * remember_me?: bool|Param, // Default: true - * success_handler?: scalar|Param|null, - * failure_handler?: scalar|Param|null, - * check_path?: scalar|Param|null, // Default: "/login_check" - * use_forward?: bool|Param, // Default: false - * login_path?: scalar|Param|null, // Default: "/login" - * username_path?: scalar|Param|null, // Default: "username" - * password_path?: scalar|Param|null, // Default: "password" - * service?: scalar|Param|null, // Default: "ldap" - * dn_string?: scalar|Param|null, // Default: "{user_identifier}" - * query_string?: scalar|Param|null, - * search_dn?: scalar|Param|null, // Default: "" - * search_password?: scalar|Param|null, // Default: "" - * }, - * access_token?: array{ - * provider?: scalar|Param|null, - * remember_me?: bool|Param, // Default: true - * success_handler?: scalar|Param|null, - * failure_handler?: scalar|Param|null, - * realm?: scalar|Param|null, // Default: null - * token_extractors?: list, - * token_handler?: string|array{ - * id?: scalar|Param|null, - * oidc_user_info?: string|array{ - * base_uri?: scalar|Param|null, // Base URI of the userinfo endpoint on the OIDC server, or the OIDC server URI to use the discovery (require "discovery" to be configured). - * discovery?: array{ // Enable the OIDC discovery. - * cache?: array{ - * id?: scalar|Param|null, // Cache service id to use to cache the OIDC discovery configuration. - * }, - * }, - * claim?: scalar|Param|null, // Claim which contains the user identifier (e.g. sub, email, etc.). // Default: "sub" - * client?: scalar|Param|null, // HttpClient service id to use to call the OIDC server. - * }, - * oidc?: array{ - * discovery?: array{ // Enable the OIDC discovery. - * base_uri?: list, - * cache?: array{ - * id?: scalar|Param|null, // Cache service id to use to cache the OIDC discovery configuration. - * }, - * }, - * claim?: scalar|Param|null, // Claim which contains the user identifier (e.g.: sub, email..). // Default: "sub" - * audience?: scalar|Param|null, // Audience set in the token, for validation purpose. - * issuers?: list, - * algorithm?: array, - * algorithms?: list, - * key?: scalar|Param|null, // Deprecated: The "key" option is deprecated and will be removed in 8.0. Use the "keyset" option instead. // JSON-encoded JWK used to sign the token (must contain a "kty" key). - * keyset?: scalar|Param|null, // JSON-encoded JWKSet used to sign the token (must contain a list of valid public keys). - * encryption?: bool|array{ - * enabled?: bool|Param, // Default: false - * enforce?: bool|Param, // When enabled, the token shall be encrypted. // Default: false - * algorithms?: list, - * keyset?: scalar|Param|null, // JSON-encoded JWKSet used to decrypt the token (must contain a list of valid private keys). - * }, - * }, - * cas?: array{ - * validation_url?: scalar|Param|null, // CAS server validation URL - * prefix?: scalar|Param|null, // CAS prefix // Default: "cas" - * http_client?: scalar|Param|null, // HTTP Client service // Default: null - * }, - * oauth2?: scalar|Param|null, + * required_badges?: list, + * custom_authenticators?: list, + * login_throttling?: array{ + * limiter?: scalar|Param|null, // A service id implementing "Symfony\Component\HttpFoundation\RateLimiter\RequestRateLimiterInterface". + * max_attempts?: int|Param, // Default: 5 + * interval?: scalar|Param|null, // Default: "1 minute" + * lock_factory?: scalar|Param|null, // The service ID of the lock factory used by the login rate limiter (or null to disable locking). // Default: null + * cache_pool?: string|Param, // The cache pool to use for storing the limiter state // Default: "cache.rate_limiter" + * storage_service?: string|Param, // The service ID of a custom storage implementation, this precedes any configured "cache_pool" // Default: null * }, - * }, - * http_basic?: array{ - * provider?: scalar|Param|null, - * realm?: scalar|Param|null, // Default: "Secured Area" - * }, - * http_basic_ldap?: array{ - * provider?: scalar|Param|null, - * realm?: scalar|Param|null, // Default: "Secured Area" - * service?: scalar|Param|null, // Default: "ldap" - * dn_string?: scalar|Param|null, // Default: "{user_identifier}" - * query_string?: scalar|Param|null, - * search_dn?: scalar|Param|null, // Default: "" - * search_password?: scalar|Param|null, // Default: "" - * }, - * remember_me?: array{ - * secret?: scalar|Param|null, // Default: "%kernel.secret%" - * service?: scalar|Param|null, - * user_providers?: list, - * catch_exceptions?: bool|Param, // Default: true - * signature_properties?: list, - * token_provider?: string|array{ - * service?: scalar|Param|null, // The service ID of a custom remember-me token provider. - * doctrine?: bool|array{ + * two_factor?: array{ + * check_path?: scalar|Param|null, // Default: "/2fa_check" + * post_only?: bool|Param, // Default: true + * auth_form_path?: scalar|Param|null, // Default: "/2fa" + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * success_handler?: scalar|Param|null, // Default: null + * failure_handler?: scalar|Param|null, // Default: null + * authentication_required_handler?: scalar|Param|null, // Default: null + * auth_code_parameter_name?: scalar|Param|null, // Default: "_auth_code" + * trusted_parameter_name?: scalar|Param|null, // Default: "_trusted" + * remember_me_sets_trusted?: scalar|Param|null, // Default: false + * multi_factor?: bool|Param, // Default: false + * prepare_on_login?: bool|Param, // Default: false + * prepare_on_access_denied?: bool|Param, // Default: false + * enable_csrf?: scalar|Param|null, // Default: false + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|Param|null, // Default: "two_factor" + * csrf_header?: scalar|Param|null, // Default: null + * csrf_token_manager?: scalar|Param|null, // Default: "scheb_two_factor.csrf_token_manager" + * provider?: scalar|Param|null, // Default: null + * }, + * webauthn?: array{ + * user_provider?: scalar|Param|null, // Default: null + * options_storage?: scalar|Param|null, // Deprecated: The child node "options_storage" at path "security.firewalls..webauthn.options_storage" is deprecated. Please use the root option "options_storage" instead. // Default: null + * success_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultSuccessHandler" + * failure_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultFailureHandler" + * secured_rp_ids?: array, + * authentication?: bool|array{ + * enabled?: bool|Param, // Default: true + * profile?: scalar|Param|null, // Default: "default" + * options_builder?: scalar|Param|null, // Default: null + * routes?: array{ + * host?: scalar|Param|null, // Default: null + * options_method?: scalar|Param|null, // Default: "POST" + * options_path?: scalar|Param|null, // Default: "/login/options" + * result_method?: scalar|Param|null, // Default: "POST" + * result_path?: scalar|Param|null, // Default: "/login" + * }, + * options_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultRequestOptionsHandler" + * }, + * registration?: bool|array{ * enabled?: bool|Param, // Default: false - * connection?: scalar|Param|null, // Default: null + * hide_existing_credentials?: bool|Param, // Default: true + * profile?: scalar|Param|null, // Default: "default" + * options_builder?: scalar|Param|null, // Default: null + * routes?: array{ + * host?: scalar|Param|null, // Default: null + * options_method?: scalar|Param|null, // Default: "POST" + * options_path?: scalar|Param|null, // Default: "/register/options" + * result_method?: scalar|Param|null, // Default: "POST" + * result_path?: scalar|Param|null, // Default: "/register" + * }, + * options_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultCreationOptionsHandler" * }, * }, - * token_verifier?: scalar|Param|null, // The service ID of a custom rememberme token verifier. - * name?: scalar|Param|null, // Default: "REMEMBERME" - * lifetime?: int|Param, // Default: 31536000 - * path?: scalar|Param|null, // Default: "/" - * domain?: scalar|Param|null, // Default: null - * secure?: true|false|"auto"|Param, // Default: null - * httponly?: bool|Param, // Default: true - * samesite?: null|"lax"|"strict"|"none"|Param, // Default: "lax" - * always_remember_me?: bool|Param, // Default: false - * remember_me_parameter?: scalar|Param|null, // Default: "_remember_me" - * }, - * }>, + * x509?: array{ + * provider?: scalar|Param|null, + * user?: scalar|Param|null, // Default: "SSL_CLIENT_S_DN_Email" + * credentials?: scalar|Param|null, // Default: "SSL_CLIENT_S_DN" + * user_identifier?: scalar|Param|null, // Default: "emailAddress" + * }, + * remote_user?: array{ + * provider?: scalar|Param|null, + * user?: scalar|Param|null, // Default: "REMOTE_USER" + * }, + * saml?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, // Default: "Nbgrp\\OneloginSamlBundle\\Security\\Http\\Authentication\\SamlAuthenticationSuccessHandler" + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * identifier_attribute?: scalar|Param|null, // Default: null + * use_attribute_friendly_name?: bool|Param, // Default: false + * user_factory?: scalar|Param|null, // Default: null + * token_factory?: scalar|Param|null, // Default: null + * persist_user?: bool|Param, // Default: false + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * }, + * login_link?: array{ + * check_route?: scalar|Param|null, // Route that will validate the login link - e.g. "app_login_link_verify". + * check_post_only?: scalar|Param|null, // If true, only HTTP POST requests to "check_route" will be handled by the authenticator. // Default: false + * signature_properties?: list, + * lifetime?: int|Param, // The lifetime of the login link in seconds. // Default: 600 + * max_uses?: int|Param, // Max number of times a login link can be used - null means unlimited within lifetime. // Default: null + * used_link_cache?: scalar|Param|null, // Cache service id used to expired links of max_uses is set. + * success_handler?: scalar|Param|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface. + * failure_handler?: scalar|Param|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface. + * provider?: scalar|Param|null, // The user provider to load users from. + * secret?: scalar|Param|null, // Default: "%kernel.secret%" + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * login_path?: scalar|Param|null, // Default: "/login" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * }, + * form_login?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_parameter?: scalar|Param|null, // Default: "_username" + * password_parameter?: scalar|Param|null, // Default: "_password" + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|Param|null, // Default: "authenticate" + * enable_csrf?: bool|Param, // Default: false + * post_only?: bool|Param, // Default: true + * form_only?: bool|Param, // Default: false + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * }, + * form_login_ldap?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_parameter?: scalar|Param|null, // Default: "_username" + * password_parameter?: scalar|Param|null, // Default: "_password" + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|Param|null, // Default: "authenticate" + * enable_csrf?: bool|Param, // Default: false + * post_only?: bool|Param, // Default: true + * form_only?: bool|Param, // Default: false + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * service?: scalar|Param|null, // Default: "ldap" + * dn_string?: scalar|Param|null, // Default: "{user_identifier}" + * query_string?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: "" + * search_password?: scalar|Param|null, // Default: "" + * }, + * json_login?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_path?: scalar|Param|null, // Default: "username" + * password_path?: scalar|Param|null, // Default: "password" + * }, + * json_login_ldap?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_path?: scalar|Param|null, // Default: "username" + * password_path?: scalar|Param|null, // Default: "password" + * service?: scalar|Param|null, // Default: "ldap" + * dn_string?: scalar|Param|null, // Default: "{user_identifier}" + * query_string?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: "" + * search_password?: scalar|Param|null, // Default: "" + * }, + * access_token?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * realm?: scalar|Param|null, // Default: null + * token_extractors?: string|list, + * token_handler?: string|array{ + * id?: scalar|Param|null, + * oidc_user_info?: string|array{ + * base_uri?: scalar|Param|null, // Base URI of the userinfo endpoint on the OIDC server, or the OIDC server URI to use the discovery (require "discovery" to be configured). + * discovery?: array{ // Enable the OIDC discovery. + * cache?: array{ + * id?: scalar|Param|null, // Cache service id to use to cache the OIDC discovery configuration. + * }, + * }, + * claim?: scalar|Param|null, // Claim which contains the user identifier (e.g. sub, email, etc.). // Default: "sub" + * client?: scalar|Param|null, // HttpClient service id to use to call the OIDC server. + * }, + * oidc?: array{ + * discovery?: array{ // Enable the OIDC discovery. + * base_uri?: string|list, + * cache?: array{ + * id?: scalar|Param|null, // Cache service id to use to cache the OIDC discovery configuration. + * }, + * }, + * claim?: scalar|Param|null, // Claim which contains the user identifier (e.g.: sub, email..). // Default: "sub" + * audience?: scalar|Param|null, // Audience set in the token, for validation purpose. + * issuers?: list, + * algorithm?: array, + * algorithms?: list, + * key?: scalar|Param|null, // Deprecated: The "key" option is deprecated and will be removed in 8.0. Use the "keyset" option instead. // JSON-encoded JWK used to sign the token (must contain a "kty" key). + * keyset?: scalar|Param|null, // JSON-encoded JWKSet used to sign the token (must contain a list of valid public keys). + * encryption?: bool|array{ + * enabled?: bool|Param, // Default: false + * enforce?: bool|Param, // When enabled, the token shall be encrypted. // Default: false + * algorithms?: list, + * keyset?: scalar|Param|null, // JSON-encoded JWKSet used to decrypt the token (must contain a list of valid private keys). + * }, + * }, + * cas?: array{ + * validation_url?: scalar|Param|null, // CAS server validation URL + * prefix?: scalar|Param|null, // CAS prefix // Default: "cas" + * http_client?: scalar|Param|null, // HTTP Client service // Default: null + * }, + * oauth2?: scalar|Param|null, + * }, + * }, + * http_basic?: array{ + * provider?: scalar|Param|null, + * realm?: scalar|Param|null, // Default: "Secured Area" + * }, + * http_basic_ldap?: array{ + * provider?: scalar|Param|null, + * realm?: scalar|Param|null, // Default: "Secured Area" + * service?: scalar|Param|null, // Default: "ldap" + * dn_string?: scalar|Param|null, // Default: "{user_identifier}" + * query_string?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: "" + * search_password?: scalar|Param|null, // Default: "" + * }, + * remember_me?: array{ + * secret?: scalar|Param|null, // Default: "%kernel.secret%" + * service?: scalar|Param|null, + * user_providers?: string|list, + * catch_exceptions?: bool|Param, // Default: true + * signature_properties?: list, + * token_provider?: string|array{ + * service?: scalar|Param|null, // The service ID of a custom remember-me token provider. + * doctrine?: bool|array{ + * enabled?: bool|Param, // Default: false + * connection?: scalar|Param|null, // Default: null + * }, + * }, + * token_verifier?: scalar|Param|null, // The service ID of a custom rememberme token verifier. + * name?: scalar|Param|null, // Default: "REMEMBERME" + * lifetime?: int|Param, // Default: 31536000 + * path?: scalar|Param|null, // Default: "/" + * domain?: scalar|Param|null, // Default: null + * secure?: true|false|"auto"|Param, // Default: null + * httponly?: bool|Param, // Default: true + * samesite?: null|"lax"|"strict"|"none"|Param, // Default: "lax" + * always_remember_me?: bool|Param, // Default: false + * remember_me_parameter?: scalar|Param|null, // Default: "_remember_me" + * }, + * }>, * access_control?: list, - * attributes?: array, - * route?: scalar|Param|null, // Default: null - * methods?: list, - * allow_if?: scalar|Param|null, // Default: null - * roles?: list, - * }>, + * request_matcher?: scalar|Param|null, // Default: null + * requires_channel?: scalar|Param|null, // Default: null + * path?: scalar|Param|null, // Use the urldecoded format. // Default: null + * host?: scalar|Param|null, // Default: null + * port?: int|Param, // Default: null + * ips?: string|list, + * attributes?: array, + * route?: scalar|Param|null, // Default: null + * methods?: string|list, + * allow_if?: scalar|Param|null, // Default: null + * roles?: string|list, + * }>, * role_hierarchy?: array>, * } * @psalm-type TwigConfig = array{ * form_themes?: list, * globals?: array, + * id?: scalar|Param|null, + * type?: scalar|Param|null, + * value?: mixed, + * }>, * autoescape_service?: scalar|Param|null, // Default: null * autoescape_service_method?: scalar|Param|null, // Default: null * base_template_class?: scalar|Param|null, // Deprecated: The child node "base_template_class" at path "twig.base_template_class" is deprecated. @@ -1351,7 +1352,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * auto_reload?: scalar|Param|null, * optimizations?: int|Param, * default_path?: scalar|Param|null, // The default path used to load templates. // Default: "%kernel.project_dir%/templates" - * file_name_pattern?: list, + * file_name_pattern?: string|list, * paths?: array, * date?: array{ // The default format options used by the date filter. * format?: scalar|Param|null, // Default: "F j, Y H:i" @@ -1379,144 +1380,144 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * use_microseconds?: scalar|Param|null, // Default: true * channels?: list, * handlers?: array, - * }>, - * accepted_levels?: list, - * min_level?: scalar|Param|null, // Default: "DEBUG" - * max_level?: scalar|Param|null, // Default: "EMERGENCY" - * buffer_size?: scalar|Param|null, // Default: 0 - * flush_on_overflow?: bool|Param, // Default: false - * handler?: scalar|Param|null, - * url?: scalar|Param|null, - * exchange?: scalar|Param|null, - * exchange_name?: scalar|Param|null, // Default: "log" - * channel?: scalar|Param|null, // Default: null - * bot_name?: scalar|Param|null, // Default: "Monolog" - * use_attachment?: scalar|Param|null, // Default: true - * use_short_attachment?: scalar|Param|null, // Default: false - * include_extra?: scalar|Param|null, // Default: false - * icon_emoji?: scalar|Param|null, // Default: null - * webhook_url?: scalar|Param|null, - * exclude_fields?: list, - * token?: scalar|Param|null, - * region?: scalar|Param|null, - * source?: scalar|Param|null, - * use_ssl?: bool|Param, // Default: true - * user?: mixed, - * title?: scalar|Param|null, // Default: null - * host?: scalar|Param|null, // Default: null - * port?: scalar|Param|null, // Default: 514 - * config?: list, - * members?: list, - * connection_string?: scalar|Param|null, - * timeout?: scalar|Param|null, - * time?: scalar|Param|null, // Default: 60 - * deduplication_level?: scalar|Param|null, // Default: 400 - * store?: scalar|Param|null, // Default: null - * connection_timeout?: scalar|Param|null, - * persistent?: bool|Param, - * message_type?: scalar|Param|null, // Default: 0 - * parse_mode?: scalar|Param|null, // Default: null - * disable_webpage_preview?: bool|Param|null, // Default: null - * disable_notification?: bool|Param|null, // Default: null - * split_long_messages?: bool|Param, // Default: false - * delay_between_messages?: bool|Param, // Default: false - * topic?: int|Param, // Default: null - * factor?: int|Param, // Default: 1 - * tags?: list, - * console_formatter_options?: mixed, // Default: [] - * formatter?: scalar|Param|null, - * nested?: bool|Param, // Default: false - * publisher?: string|array{ - * id?: scalar|Param|null, - * hostname?: scalar|Param|null, - * port?: scalar|Param|null, // Default: 12201 - * chunk_size?: scalar|Param|null, // Default: 1420 - * encoder?: "json"|"compressed_json"|Param, - * }, - * mongodb?: string|array{ - * id?: scalar|Param|null, // ID of a MongoDB\Client service - * uri?: scalar|Param|null, - * username?: scalar|Param|null, - * password?: scalar|Param|null, - * database?: scalar|Param|null, // Default: "monolog" - * collection?: scalar|Param|null, // Default: "logs" - * }, - * elasticsearch?: string|array{ - * id?: scalar|Param|null, - * hosts?: list, - * host?: scalar|Param|null, - * port?: scalar|Param|null, // Default: 9200 - * transport?: scalar|Param|null, // Default: "Http" - * user?: scalar|Param|null, // Default: null - * password?: scalar|Param|null, // Default: null - * }, - * index?: scalar|Param|null, // Default: "monolog" - * document_type?: scalar|Param|null, // Default: "logs" - * ignore_error?: scalar|Param|null, // Default: false - * redis?: string|array{ - * id?: scalar|Param|null, - * host?: scalar|Param|null, - * password?: scalar|Param|null, // Default: null - * port?: scalar|Param|null, // Default: 6379 - * database?: scalar|Param|null, // Default: 0 - * key_name?: scalar|Param|null, // Default: "monolog_redis" - * }, - * predis?: string|array{ - * id?: scalar|Param|null, - * host?: scalar|Param|null, - * }, - * from_email?: scalar|Param|null, - * to_email?: list, - * subject?: scalar|Param|null, - * content_type?: scalar|Param|null, // Default: null - * headers?: list, - * mailer?: scalar|Param|null, // Default: null - * email_prototype?: string|array{ - * id?: scalar|Param|null, - * method?: scalar|Param|null, // Default: null - * }, - * verbosity_levels?: array{ - * VERBOSITY_QUIET?: scalar|Param|null, // Default: "ERROR" - * VERBOSITY_NORMAL?: scalar|Param|null, // Default: "WARNING" - * VERBOSITY_VERBOSE?: scalar|Param|null, // Default: "NOTICE" - * VERBOSITY_VERY_VERBOSE?: scalar|Param|null, // Default: "INFO" - * VERBOSITY_DEBUG?: scalar|Param|null, // Default: "DEBUG" - * }, - * channels?: string|array{ * type?: scalar|Param|null, - * elements?: list, - * }, - * }>, + * id?: scalar|Param|null, + * enabled?: bool|Param, // Default: true + * priority?: scalar|Param|null, // Default: 0 + * level?: scalar|Param|null, // Default: "DEBUG" + * bubble?: bool|Param, // Default: true + * interactive_only?: bool|Param, // Default: false + * app_name?: scalar|Param|null, // Default: null + * include_stacktraces?: bool|Param, // Default: false + * process_psr_3_messages?: array{ + * enabled?: bool|Param|null, // Default: null + * date_format?: scalar|Param|null, + * remove_used_context_fields?: bool|Param, + * }, + * path?: scalar|Param|null, // Default: "%kernel.logs_dir%/%kernel.environment%.log" + * file_permission?: scalar|Param|null, // Default: null + * use_locking?: bool|Param, // Default: false + * filename_format?: scalar|Param|null, // Default: "{filename}-{date}" + * date_format?: scalar|Param|null, // Default: "Y-m-d" + * ident?: scalar|Param|null, // Default: false + * logopts?: scalar|Param|null, // Default: 1 + * facility?: scalar|Param|null, // Default: "user" + * max_files?: scalar|Param|null, // Default: 0 + * action_level?: scalar|Param|null, // Default: "WARNING" + * activation_strategy?: scalar|Param|null, // Default: null + * stop_buffering?: bool|Param, // Default: true + * passthru_level?: scalar|Param|null, // Default: null + * excluded_http_codes?: list, + * }>, + * accepted_levels?: list, + * min_level?: scalar|Param|null, // Default: "DEBUG" + * max_level?: scalar|Param|null, // Default: "EMERGENCY" + * buffer_size?: scalar|Param|null, // Default: 0 + * flush_on_overflow?: bool|Param, // Default: false + * handler?: scalar|Param|null, + * url?: scalar|Param|null, + * exchange?: scalar|Param|null, + * exchange_name?: scalar|Param|null, // Default: "log" + * channel?: scalar|Param|null, // Default: null + * bot_name?: scalar|Param|null, // Default: "Monolog" + * use_attachment?: scalar|Param|null, // Default: true + * use_short_attachment?: scalar|Param|null, // Default: false + * include_extra?: scalar|Param|null, // Default: false + * icon_emoji?: scalar|Param|null, // Default: null + * webhook_url?: scalar|Param|null, + * exclude_fields?: list, + * token?: scalar|Param|null, + * region?: scalar|Param|null, + * source?: scalar|Param|null, + * use_ssl?: bool|Param, // Default: true + * user?: mixed, + * title?: scalar|Param|null, // Default: null + * host?: scalar|Param|null, // Default: null + * port?: scalar|Param|null, // Default: 514 + * config?: list, + * members?: list, + * connection_string?: scalar|Param|null, + * timeout?: scalar|Param|null, + * time?: scalar|Param|null, // Default: 60 + * deduplication_level?: scalar|Param|null, // Default: 400 + * store?: scalar|Param|null, // Default: null + * connection_timeout?: scalar|Param|null, + * persistent?: bool|Param, + * message_type?: scalar|Param|null, // Default: 0 + * parse_mode?: scalar|Param|null, // Default: null + * disable_webpage_preview?: bool|Param|null, // Default: null + * disable_notification?: bool|Param|null, // Default: null + * split_long_messages?: bool|Param, // Default: false + * delay_between_messages?: bool|Param, // Default: false + * topic?: int|Param, // Default: null + * factor?: int|Param, // Default: 1 + * tags?: string|list, + * console_formatter_options?: mixed, // Default: [] + * formatter?: scalar|Param|null, + * nested?: bool|Param, // Default: false + * publisher?: string|array{ + * id?: scalar|Param|null, + * hostname?: scalar|Param|null, + * port?: scalar|Param|null, // Default: 12201 + * chunk_size?: scalar|Param|null, // Default: 1420 + * encoder?: "json"|"compressed_json"|Param, + * }, + * mongodb?: string|array{ + * id?: scalar|Param|null, // ID of a MongoDB\Client service + * uri?: scalar|Param|null, + * username?: scalar|Param|null, + * password?: scalar|Param|null, + * database?: scalar|Param|null, // Default: "monolog" + * collection?: scalar|Param|null, // Default: "logs" + * }, + * elasticsearch?: string|array{ + * id?: scalar|Param|null, + * hosts?: list, + * host?: scalar|Param|null, + * port?: scalar|Param|null, // Default: 9200 + * transport?: scalar|Param|null, // Default: "Http" + * user?: scalar|Param|null, // Default: null + * password?: scalar|Param|null, // Default: null + * }, + * index?: scalar|Param|null, // Default: "monolog" + * document_type?: scalar|Param|null, // Default: "logs" + * ignore_error?: scalar|Param|null, // Default: false + * redis?: string|array{ + * id?: scalar|Param|null, + * host?: scalar|Param|null, + * password?: scalar|Param|null, // Default: null + * port?: scalar|Param|null, // Default: 6379 + * database?: scalar|Param|null, // Default: 0 + * key_name?: scalar|Param|null, // Default: "monolog_redis" + * }, + * predis?: string|array{ + * id?: scalar|Param|null, + * host?: scalar|Param|null, + * }, + * from_email?: scalar|Param|null, + * to_email?: string|list, + * subject?: scalar|Param|null, + * content_type?: scalar|Param|null, // Default: null + * headers?: list, + * mailer?: scalar|Param|null, // Default: null + * email_prototype?: string|array{ + * id?: scalar|Param|null, + * method?: scalar|Param|null, // Default: null + * }, + * verbosity_levels?: array{ + * VERBOSITY_QUIET?: scalar|Param|null, // Default: "ERROR" + * VERBOSITY_NORMAL?: scalar|Param|null, // Default: "WARNING" + * VERBOSITY_VERBOSE?: scalar|Param|null, // Default: "NOTICE" + * VERBOSITY_VERY_VERBOSE?: scalar|Param|null, // Default: "INFO" + * VERBOSITY_DEBUG?: scalar|Param|null, // Default: "DEBUG" + * }, + * channels?: string|array{ + * type?: scalar|Param|null, + * elements?: list, + * }, + * }>, * } * @psalm-type DebugConfig = array{ * max_items?: int|Param, // Max number of displayed items past the first level, -1 means no limit. // Default: 2500 @@ -1556,52 +1557,52 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * } * @psalm-type LiipImagineConfig = array{ * resolvers?: array, - * get_options?: array, - * put_options?: array, - * proxies?: array, - * }, - * flysystem?: array{ - * filesystem_service?: scalar|Param|null, - * cache_prefix?: scalar|Param|null, // Default: "" - * root_url?: scalar|Param|null, - * visibility?: "public"|"private"|"noPredefinedVisibility"|Param, // Default: "public" - * }, - * }>, - * loaders?: array, - * allow_unresolvable_data_roots?: bool|Param, // Default: false - * bundle_resources?: array{ - * enabled?: bool|Param, // Default: false - * access_control_type?: "blacklist"|"whitelist"|Param, // Sets the access control method applied to bundle names in "access_control_list" into a blacklist or whitelist. // Default: "blacklist" - * access_control_list?: list, + * web_path?: array{ + * web_root?: scalar|Param|null, // Default: "%kernel.project_dir%/public" + * cache_prefix?: scalar|Param|null, // Default: "media/cache" * }, - * }, - * flysystem?: array{ - * filesystem_service?: scalar|Param|null, - * }, - * asset_mapper?: array, - * chain?: array{ - * loaders?: list, - * }, - * }>, + * aws_s3?: array{ + * bucket?: scalar|Param|null, + * cache?: scalar|Param|null, // Default: false + * use_psr_cache?: bool|Param, // Default: false + * acl?: scalar|Param|null, // Default: "public-read" + * cache_prefix?: scalar|Param|null, // Default: "" + * client_id?: scalar|Param|null, // Default: null + * client_config?: list, + * get_options?: array, + * put_options?: array, + * proxies?: array, + * }, + * flysystem?: array{ + * filesystem_service?: scalar|Param|null, + * cache_prefix?: scalar|Param|null, // Default: "" + * root_url?: scalar|Param|null, + * visibility?: "public"|"private"|"noPredefinedVisibility"|Param, // Default: "public" + * }, + * }>, + * loaders?: array, + * allow_unresolvable_data_roots?: bool|Param, // Default: false + * bundle_resources?: array{ + * enabled?: bool|Param, // Default: false + * access_control_type?: "blacklist"|"whitelist"|Param, // Sets the access control method applied to bundle names in "access_control_list" into a blacklist or whitelist. // Default: "blacklist" + * access_control_list?: list, + * }, + * }, + * flysystem?: array{ + * filesystem_service?: scalar|Param|null, + * }, + * asset_mapper?: array, + * chain?: array{ + * loaders?: list, + * }, + * }>, * driver?: scalar|Param|null, // Default: "gd" * cache?: scalar|Param|null, // Default: "default" * cache_base_path?: scalar|Param|null, // Default: "" @@ -1626,18 +1627,18 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * redirect_response_code?: int|Param, // Default: 302 * }, * filter_sets?: array>, - * post_processors?: array>, - * }>, + * quality?: scalar|Param|null, + * jpeg_quality?: scalar|Param|null, + * png_compression_level?: scalar|Param|null, + * png_compression_filter?: scalar|Param|null, + * format?: scalar|Param|null, + * animated?: bool|Param, + * cache?: scalar|Param|null, + * data_loader?: scalar|Param|null, + * default_image?: scalar|Param|null, + * filters?: array>, + * post_processors?: array>, + * }>, * twig?: array{ * mode?: "none"|"lazy"|"legacy"|Param, // Twig mode: none/lazy/legacy (default) // Default: "legacy" * assets_version?: scalar|Param|null, // Default: null @@ -1852,8 +1853,8 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * clickjacking?: array{ * hosts?: list, * paths?: array, + * header?: scalar|Param|null, // Default: "DENY" + * }>, * content_types?: list, * }, * external_redirects?: array{ @@ -1930,7 +1931,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * script-src?: list, * style-src?: list, * upgrade-insecure-requests?: bool|Param, // Default: false - * report-uri?: list, + * report-uri?: string|list, * worker-src?: list, * prefetch-src?: list, * report-to?: scalar|Param|null, @@ -1958,7 +1959,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * script-src?: list, * style-src?: list, * upgrade-insecure-requests?: bool|Param, // Default: false - * report-uri?: list, + * report-uri?: string|list, * worker-src?: list, * prefetch-src?: list, * report-to?: scalar|Param|null, @@ -1966,7 +1967,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * referrer_policy?: bool|array{ * enabled?: bool|Param, // Default: false - * policies?: list, + * policies?: string|list, * }, * permissions_policy?: bool|array{ * enabled?: bool|Param, // Default: false @@ -2018,12 +2019,12 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * cross_origin_isolation?: bool|array{ * enabled?: bool|Param, // Default: false * paths?: array, + * coep?: "unsafe-none"|"require-corp"|"credentialless"|Param, // Cross-Origin-Embedder-Policy (COEP) header value + * coop?: "unsafe-none"|"same-origin-allow-popups"|"same-origin"|"noopener-allow-popups"|Param, // Cross-Origin-Opener-Policy (COOP) header value + * corp?: "same-site"|"same-origin"|"cross-origin"|Param, // Cross-Origin-Resource-Policy (CORP) header value + * report_only?: bool|Param, // Use Report-Only headers instead of enforcing (applies to COEP and COOP only) // Default: false + * report_to?: scalar|Param|null, // Reporting endpoint name for violations (requires Reporting API configuration, applies to COEP and COOP only) // Default: null + * }>, * }, * } * @psalm-type TurboConfig = array{ @@ -2097,31 +2098,57 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * secured_rp_ids?: array, * counter_checker?: scalar|Param|null, // This service will check if the counter is valid. By default it throws an exception (recommended). // Default: "Webauthn\\Counter\\ThrowExceptionIfInvalid" * top_origin_validator?: scalar|Param|null, // For cross origin (e.g. iframe), this service will be in charge of verifying the top origin. // Default: null - * creation_profiles?: array, + * public_key_credential_parameters?: list, + * attestation_conveyance?: scalar|Param|null, // Default: "none" + * conditional_create?: bool|Param, // Enable Conditional Create (auto-register) for this profile. When true, user presence can be false after password authentication. See https://github.com/w3c/webauthn/wiki/Explainer:-Conditional-Create // Default: false + * }>, + * request_profiles?: bool|array, + * }>, + * client_override_policy?: array{ // Configuration for allowing client request values to override profile configuration + * user_verification?: array{ + * enabled?: bool|Param, // Whether to allow client requests to override the user verification requirement // Default: false + * allowed_values?: list, * }, - * extensions?: array, - * public_key_credential_parameters?: list, - * attestation_conveyance?: scalar|Param|null, // Default: "none" - * }>, - * request_profiles?: array, - * }>, + * authenticator_attachment?: array{ + * enabled?: bool|Param, // Whether to allow client requests to override the authenticator attachment // Default: true + * allowed_values?: list, + * }, + * resident_key?: array{ + * enabled?: bool|Param, // Whether to allow client requests to override the resident key requirement // Default: true + * allowed_values?: list, + * }, + * attestation_conveyance?: array{ + * enabled?: bool|Param, // Whether to allow client requests to override the attestation conveyance preference // Default: true + * allowed_values?: list, + * }, + * extensions?: array{ + * enabled?: bool|Param, // Whether to allow client requests to override extensions // Default: true + * }, + * mediation?: array{ + * enabled?: bool|Param, // Whether to allow client requests to request the conditional mediation flow (auto-register). // Default: false + * allowed_values?: list, + * }, + * }, * metadata?: bool|array{ // Enable the support of the Metadata Statements. Please read the documentation for this feature. * enabled?: bool|Param, // Default: false * mds_repository?: scalar|Param|null, // The Metadata Statement repository. @@ -2131,146 +2158,161 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * controllers?: bool|array{ * enabled?: bool|Param, // Default: false * creation?: array, - * allow_subdomains?: bool|Param, // Default: false - * secured_rp_ids?: array, - * }>, + * options_method?: scalar|Param|null, // Default: "POST" + * options_path?: scalar|Param|null, + * result_method?: scalar|Param|null, // Default: "POST" + * result_path?: scalar|Param|null, // Default: null + * host?: scalar|Param|null, // Default: null + * profile?: scalar|Param|null, // Default: "default" + * options_builder?: scalar|Param|null, // When set, corresponds to the ID of the Public Key Credential Creation Builder. The profile-based ebuilder is ignored. // Default: null + * user_entity_guesser?: scalar|Param|null, + * hide_existing_credentials?: scalar|Param|null, // In order to prevent username enumeration, the existing credentials can be hidden. This is highly recommended when the attestation ceremony is performed by anonymous users. // Default: false + * options_storage?: scalar|Param|null, // Deprecated: The child node "options_storage" at path "webauthn.controllers.creation..options_storage" is deprecated. Please use the root option "options_storage" instead. // Service responsible of the options/user entity storage during the ceremony // Default: null + * success_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Service\\DefaultSuccessHandler" + * failure_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Service\\DefaultFailureHandler" + * options_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultCreationOptionsHandler" + * allowed_origins?: array, + * allow_subdomains?: bool|Param, // Default: false + * secured_rp_ids?: array, + * }>, * request?: array, - * allow_subdomains?: bool|Param, // Default: false - * secured_rp_ids?: array, - * }>, + * options_method?: scalar|Param|null, // Default: "POST" + * options_path?: scalar|Param|null, + * result_method?: scalar|Param|null, // Default: "POST" + * result_path?: scalar|Param|null, // Default: null + * host?: scalar|Param|null, // Default: null + * profile?: scalar|Param|null, // Default: "default" + * options_builder?: scalar|Param|null, // When set, corresponds to the ID of the Public Key Credential Creation Builder. The profile-based ebuilder is ignored. // Default: null + * options_storage?: scalar|Param|null, // Deprecated: The child node "options_storage" at path "webauthn.controllers.request..options_storage" is deprecated. Please use the root option "options_storage" instead. // Service responsible of the options/user entity storage during the ceremony // Default: null + * success_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Service\\DefaultSuccessHandler" + * failure_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Service\\DefaultFailureHandler" + * options_handler?: scalar|Param|null, // Default: "Webauthn\\Bundle\\Security\\Handler\\DefaultRequestOptionsHandler" + * allowed_origins?: array, + * allow_subdomains?: bool|Param, // Default: false + * secured_rp_ids?: array, + * }>, + * }, + * passkey_endpoints?: bool|array{ // Enable the .well-known/passkey-endpoints discovery endpoint as defined in the W3C Passkey Endpoints specification. + * enabled?: bool|Param, // Default: false + * enroll?: string|array{ // URL to the passkey enrollment/creation interface. + * path?: scalar|Param|null, // The absolute HTTPS URL or Symfony route name. + * params?: list, + * }, + * manage?: string|array{ // URL to the passkey management interface. + * path?: scalar|Param|null, // The absolute HTTPS URL or Symfony route name. + * params?: list, + * }, + * prf_usage_details?: string|array{ // URL to informational page about PRF (Pseudo-Random Function) extension usage. + * path?: scalar|Param|null, // The absolute HTTPS URL or Symfony route name. + * params?: list, + * }, * }, * } * @psalm-type NbgrpOneloginSamlConfig = array{ // nb:group OneLogin PHP Symfony Bundle configuration * onelogin_settings?: array/saml/" - * strict?: bool|Param, - * debug?: bool|Param, - * idp?: array{ - * entityId?: scalar|Param|null, - * singleSignOnService?: array{ - * url?: scalar|Param|null, - * binding?: scalar|Param|null, + * baseurl?: scalar|Param|null, // Default: "/saml/" + * strict?: bool|Param, + * debug?: bool|Param, + * idp?: array{ + * entityId?: scalar|Param|null, + * singleSignOnService?: array{ + * url?: scalar|Param|null, + * binding?: scalar|Param|null, + * }, + * singleLogoutService?: array{ + * url?: scalar|Param|null, + * responseUrl?: scalar|Param|null, + * binding?: scalar|Param|null, + * }, + * x509cert?: scalar|Param|null, + * certFingerprint?: scalar|Param|null, + * certFingerprintAlgorithm?: "sha1"|"sha256"|"sha384"|"sha512"|Param, + * x509certMulti?: array{ + * signing?: list, + * encryption?: list, + * }, * }, - * singleLogoutService?: array{ - * url?: scalar|Param|null, - * responseUrl?: scalar|Param|null, - * binding?: scalar|Param|null, + * sp?: array{ + * entityId?: scalar|Param|null, // Default: "/saml/metadata" + * assertionConsumerService?: array{ + * url?: scalar|Param|null, // Default: "/saml/acs" + * binding?: scalar|Param|null, + * }, + * attributeConsumingService?: array{ + * serviceName?: scalar|Param|null, + * serviceDescription?: scalar|Param|null, + * requestedAttributes?: list, + * }>, + * }, + * singleLogoutService?: array{ + * url?: scalar|Param|null, // Default: "/saml/logout" + * binding?: scalar|Param|null, + * }, + * NameIDFormat?: scalar|Param|null, + * x509cert?: scalar|Param|null, + * privateKey?: scalar|Param|null, + * x509certNew?: scalar|Param|null, * }, - * x509cert?: scalar|Param|null, - * certFingerprint?: scalar|Param|null, - * certFingerprintAlgorithm?: "sha1"|"sha256"|"sha384"|"sha512"|Param, - * x509certMulti?: array{ - * signing?: list, - * encryption?: list, + * compress?: array{ + * requests?: bool|Param, + * responses?: bool|Param, * }, - * }, - * sp?: array{ - * entityId?: scalar|Param|null, // Default: "/saml/metadata" - * assertionConsumerService?: array{ - * url?: scalar|Param|null, // Default: "/saml/acs" - * binding?: scalar|Param|null, + * security?: array{ + * nameIdEncrypted?: bool|Param, + * authnRequestsSigned?: bool|Param, + * logoutRequestSigned?: bool|Param, + * logoutResponseSigned?: bool|Param, + * signMetadata?: bool|Param, + * wantMessagesSigned?: bool|Param, + * wantAssertionsEncrypted?: bool|Param, + * wantAssertionsSigned?: bool|Param, + * wantNameId?: bool|Param, + * wantNameIdEncrypted?: bool|Param, + * requestedAuthnContext?: mixed, + * requestedAuthnContextComparison?: "exact"|"minimum"|"maximum"|"better"|Param, + * wantXMLValidation?: bool|Param, + * relaxDestinationValidation?: bool|Param, + * destinationStrictlyMatches?: bool|Param, + * allowRepeatAttributeName?: bool|Param, + * rejectUnsolicitedResponsesWithInResponseTo?: bool|Param, + * signatureAlgorithm?: "http://www.w3.org/2000/09/xmldsig#rsa-sha1"|"http://www.w3.org/2000/09/xmldsig#dsa-sha1"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"|Param, + * digestAlgorithm?: "http://www.w3.org/2000/09/xmldsig#sha1"|"http://www.w3.org/2001/04/xmlenc#sha256"|"http://www.w3.org/2001/04/xmldsig-more#sha384"|"http://www.w3.org/2001/04/xmlenc#sha512"|Param, + * encryption_algorithm?: "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"|"http://www.w3.org/2001/04/xmlenc#aes128-cbc"|"http://www.w3.org/2001/04/xmlenc#aes192-cbc"|"http://www.w3.org/2001/04/xmlenc#aes256-cbc"|"http://www.w3.org/2009/xmlenc11#aes128-gcm"|"http://www.w3.org/2009/xmlenc11#aes192-gcm"|"http://www.w3.org/2009/xmlenc11#aes256-gcm"|Param, + * lowercaseUrlencoding?: bool|Param, * }, - * attributeConsumingService?: array{ - * serviceName?: scalar|Param|null, - * serviceDescription?: scalar|Param|null, - * requestedAttributes?: list, + * displayname?: scalar|Param|null, + * url?: scalar|Param|null, * }>, - * }, - * singleLogoutService?: array{ - * url?: scalar|Param|null, // Default: "/saml/logout" - * binding?: scalar|Param|null, - * }, - * NameIDFormat?: scalar|Param|null, - * x509cert?: scalar|Param|null, - * privateKey?: scalar|Param|null, - * x509certNew?: scalar|Param|null, - * }, - * compress?: array{ - * requests?: bool|Param, - * responses?: bool|Param, - * }, - * security?: array{ - * nameIdEncrypted?: bool|Param, - * authnRequestsSigned?: bool|Param, - * logoutRequestSigned?: bool|Param, - * logoutResponseSigned?: bool|Param, - * signMetadata?: bool|Param, - * wantMessagesSigned?: bool|Param, - * wantAssertionsEncrypted?: bool|Param, - * wantAssertionsSigned?: bool|Param, - * wantNameId?: bool|Param, - * wantNameIdEncrypted?: bool|Param, - * requestedAuthnContext?: mixed, - * requestedAuthnContextComparison?: "exact"|"minimum"|"maximum"|"better"|Param, - * wantXMLValidation?: bool|Param, - * relaxDestinationValidation?: bool|Param, - * destinationStrictlyMatches?: bool|Param, - * allowRepeatAttributeName?: bool|Param, - * rejectUnsolicitedResponsesWithInResponseTo?: bool|Param, - * signatureAlgorithm?: "http://www.w3.org/2000/09/xmldsig#rsa-sha1"|"http://www.w3.org/2000/09/xmldsig#dsa-sha1"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"|"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"|Param, - * digestAlgorithm?: "http://www.w3.org/2000/09/xmldsig#sha1"|"http://www.w3.org/2001/04/xmlenc#sha256"|"http://www.w3.org/2001/04/xmldsig-more#sha384"|"http://www.w3.org/2001/04/xmlenc#sha512"|Param, - * encryption_algorithm?: "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"|"http://www.w3.org/2001/04/xmlenc#aes128-cbc"|"http://www.w3.org/2001/04/xmlenc#aes192-cbc"|"http://www.w3.org/2001/04/xmlenc#aes256-cbc"|"http://www.w3.org/2009/xmlenc11#aes128-gcm"|"http://www.w3.org/2009/xmlenc11#aes192-gcm"|"http://www.w3.org/2009/xmlenc11#aes256-gcm"|Param, - * lowercaseUrlencoding?: bool|Param, - * }, - * contactPerson?: array{ - * technical?: array{ - * givenName?: scalar|Param|null, - * emailAddress?: scalar|Param|null, - * }, - * support?: array{ - * givenName?: scalar|Param|null, - * emailAddress?: scalar|Param|null, - * }, - * administrative?: array{ - * givenName?: scalar|Param|null, - * emailAddress?: scalar|Param|null, - * }, - * billing?: array{ - * givenName?: scalar|Param|null, - * emailAddress?: scalar|Param|null, - * }, - * other?: array{ - * givenName?: scalar|Param|null, - * emailAddress?: scalar|Param|null, - * }, - * }, - * organization?: list, - * }>, * use_proxy_vars?: bool|Param, // Default: false * idp_parameter_name?: scalar|Param|null, // Default: "idp" * entity_manager_name?: scalar|Param|null, @@ -2293,7 +2335,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * type?: scalar|Param|null, * elements?: list, * }, - * keys_patterns?: list, + * keys_patterns?: string|list, * } * @psalm-type DompdfFontLoaderConfig = array{ * autodiscovery?: bool|array{ @@ -2304,11 +2346,11 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * auto_install?: bool|Param, // Default: false * fonts?: list, + * normal?: scalar|Param|null, + * bold?: scalar|Param|null, + * italic?: scalar|Param|null, + * bold_italic?: scalar|Param|null, + * }>, * } * @psalm-type KnpuOauth2ClientConfig = array{ * http_client?: scalar|Param|null, // Service id of HTTP client to use (must implement GuzzleHttp\ClientInterface) // Default: null @@ -2334,18 +2376,18 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * skip_same_as_origin?: bool|Param, // Default: true * }, * paths?: array, - * allow_headers?: list, - * allow_methods?: list, - * allow_private_network?: bool|Param, - * expose_headers?: list, - * max_age?: scalar|Param|null, // Default: 0 - * hosts?: list, - * origin_regex?: bool|Param, - * forced_allow_origin_value?: scalar|Param|null, // Default: null - * skip_same_as_origin?: bool|Param, - * }>, + * allow_credentials?: bool|Param, + * allow_origin?: list, + * allow_headers?: list, + * allow_methods?: list, + * allow_private_network?: bool|Param, + * expose_headers?: list, + * max_age?: scalar|Param|null, // Default: 0 + * hosts?: list, + * origin_regex?: bool|Param, + * forced_allow_origin_value?: scalar|Param|null, // Default: null + * skip_same_as_origin?: bool|Param, + * }>, * } * @psalm-type JbtronicsSettingsConfig = array{ * search_paths?: list, @@ -2476,13 +2518,13 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * persist_authorization?: bool|Param, // Persist the SwaggerUI Authorization in the localStorage. // Default: false * versions?: list, * api_keys?: array, + * name?: scalar|Param|null, // The name of the header or query parameter containing the api key. + * type?: "query"|"header"|Param, // Whether the api key should be a query parameter or a header. + * }>, * http_auth?: array, + * scheme?: scalar|Param|null, // The OpenAPI HTTP auth scheme, for example "bearer" + * bearerFormat?: scalar|Param|null, // The OpenAPI HTTP bearer format + * }>, * swagger_ui_extra_configuration?: mixed, // To pass extra configuration to Swagger UI, like docExpansion or filter. // Default: [] * }, * http_cache?: array{ @@ -2523,9 +2565,9 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * termsOfService?: scalar|Param|null, // A URL to the Terms of Service for the API. MUST be in the format of a URL. // Default: null * tags?: list, + * name?: scalar|Param|null, + * description?: scalar|Param|null, // Default: null + * }>, * license?: array{ * name?: scalar|Param|null, // The license name used for the API. // Default: null * url?: scalar|Param|null, // URL to the license used for the API. MUST be in the format of a URL. // Default: null @@ -2547,17 +2589,17 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * exception_to_status?: array, * formats?: array, - * }>, + * mime_types?: list, + * }>, * patch_formats?: array, - * }>, + * mime_types?: list, + * }>, * docs_formats?: array, - * }>, + * mime_types?: list, + * }>, * error_formats?: array, - * }>, + * mime_types?: list, + * }>, * jsonschema_formats?: list, * defaults?: array{ * uri_template?: mixed, @@ -2629,30 +2671,30 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * policy?: mixed, * middleware?: mixed, * parameters?: array - * }>, + * key?: mixed, + * schema?: mixed, + * open_api?: mixed, + * provider?: mixed, + * filter?: mixed, + * property?: mixed, + * description?: mixed, + * properties?: mixed, + * required?: mixed, + * priority?: mixed, + * hydra?: mixed, + * constraints?: mixed, + * security?: mixed, + * security_message?: mixed, + * extra_properties?: mixed, + * filter_context?: mixed, + * native_type?: mixed, + * cast_to_array?: mixed, + * cast_to_native_type?: mixed, + * cast_fn?: mixed, + * default?: mixed, + * filter_class?: mixed, + * ... + * }>, * strict_query_parameter_validation?: mixed, * hide_hydra_operation?: mixed, * json_stream?: mixed, @@ -2693,22 +2735,22 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * cache_retention?: "none"|"short"|"long"|Param, // Prompt cache retention policy for Anthropic models // Default: "short" * }, * azure?: array, + * api_key?: string|Param, + * base_url?: string|Param, + * deployment?: string|Param, + * api_version?: string|Param, // The used API version + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * }>, * bedrock?: array, + * bedrock_runtime_client?: string|Param, // Service ID of the Bedrock runtime client to use // Default: null + * model_catalog?: string|Param, // Default: null + * }>, * cache?: array, + * platform?: string|Param, + * service?: string|Param, // The cache service id as defined under the "cache" configuration key // Default: "cache.app" + * cache_key?: string|Param, // Key used to store platform results, if not set, the current platform name will be used, the "prompt_cache_key" can be set during platform call to override this value + * ttl?: int|Param, + * }>, * cartesia?: array{ * api_key?: string|Param, * version?: string|Param, @@ -2741,23 +2783,23 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" * }, * failover?: array, - * rate_limiter?: string|Param, - * }>, + * platforms?: list, + * rate_limiter?: string|Param, + * }>, * gemini?: array{ * api_key?: string|Param, * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" * }, * generic?: array, + * base_url?: string|Param, + * api_key?: string|Param, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * model_catalog?: string|Param, // Service ID of the model catalog to use + * supports_completions?: bool|Param, // Default: true + * supports_embeddings?: bool|Param, // Default: true + * completions_path?: string|Param, // Default: "/v1/chat/completions" + * embeddings_path?: string|Param, // Default: "/v1/embeddings" + * }>, * huggingface?: array{ * api_key?: string|Param, * provider?: string|Param, // Default: "hf-inference" @@ -2810,328 +2852,328 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * }, * }, * model?: array|\Symfony\AI\Platform\Capability|Param>, - * }>>, + * class?: string|Param, // The fully qualified class name of the model (must extend Symfony\AI\Platform\Model) // Default: "Symfony\\AI\\Platform\\Model" + * capabilities?: list|\Symfony\AI\Platform\Capability|Param>, + * }>>, * agent?: array, - * }, - * keep_tool_messages?: bool|Param, // Keep tool messages in the conversation history // Default: false - * include_sources?: bool|Param, // Include sources exposed by tools as part of the tool result metadata // Default: false - * fault_tolerant_toolbox?: bool|Param, // Continue the agent run even if a tool call fails // Default: true - * speech?: bool|array{ // Speech (TTS/STT) decorator configuration - * enabled?: bool|Param, // Default: true - * text_to_speech_platform?: string|Param, // Service name of the TTS platform (e.g. ai.platform.elevenlabs). // Default: null - * speech_to_text_platform?: string|Param, // Service name of the STT platform (e.g. ai.platform.openai). // Default: null - * tts_model?: string|Param, // Text-to-speech model name // Default: null - * tts_options?: mixed, // Provider-specific TTS options // Default: [] - * stt_model?: string|Param, // Speech-to-text model name // Default: null - * stt_options?: mixed, // Provider-specific STT options // Default: [] - * }, - * }>, + * platform?: string|Param, // Service name of platform // Default: "Symfony\\AI\\Platform\\PlatformInterface" + * model?: mixed, + * memory?: mixed, // Memory configuration: string for static memory, or array with "service" key for service reference // Default: null + * prompt?: string|array{ // The system prompt configuration + * text?: string|Param, // The system prompt text + * file?: string|Param, // Path to file containing the system prompt + * include_tools?: bool|Param, // Include tool definitions at the end of the system prompt // Default: false + * enable_translation?: bool|Param, // Enable translation for the system prompt // Default: false + * translation_domain?: string|Param, // The translation domain for the system prompt // Default: null + * }, + * tools?: bool|array{ + * enabled?: bool|Param, // Default: true + * services?: list, + * }, + * keep_tool_messages?: bool|Param, // Keep tool messages in the conversation history // Default: false + * include_sources?: bool|Param, // Include sources exposed by tools as part of the tool result metadata // Default: false + * fault_tolerant_toolbox?: bool|Param, // Continue the agent run even if a tool call fails // Default: true + * speech?: bool|array{ // Speech (TTS/STT) decorator configuration + * enabled?: bool|Param, // Default: true + * text_to_speech_platform?: string|Param, // Service name of the TTS platform (e.g. ai.platform.elevenlabs). // Default: null + * speech_to_text_platform?: string|Param, // Service name of the STT platform (e.g. ai.platform.openai). // Default: null + * tts_model?: string|Param, // Text-to-speech model name // Default: null + * tts_options?: mixed, // Provider-specific TTS options // Default: [] + * stt_model?: string|Param, // Speech-to-text model name // Default: null + * stt_options?: mixed, // Provider-specific STT options // Default: [] + * }, + * }>, * multi_agent?: array>, - * fallback?: string|Param, // Service ID of the fallback agent for unmatched requests - * }>, + * orchestrator?: string|Param, // Service ID of the orchestrator agent + * handoffs?: array>, + * fallback?: string|Param, // Service ID of the fallback agent for unmatched requests + * }>, * store?: array{ * azuresearch?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * api_version?: string|Param, + * index_name?: string|Param, // The name of the store will be used if the "index_name" option is not set + * http_client?: string|Param, // Default: "http_client" + * vector_field?: string|Param, // Default: "vector" + * }>, * cache?: array, + * service?: string|Param, // Default: "cache.app" + * cache_key?: string|Param, // The name of the store will be used if the key is not set. + * strategy?: string|Param, // Default: "cosine" + * }>, * chromadb?: array, + * client?: string|Param, // Default: "Codewithkyrian\\ChromaDB\\Client" + * collection?: string|Param, + * }>, * clickhouse?: array, + * dsn?: string|Param, + * http_client?: string|Param, + * database?: string|Param, + * table?: string|Param, + * }>, * cloudflare?: array, + * account_id?: string|Param, + * api_key?: string|Param, + * index_name?: string|Param, + * dimensions?: int|Param, // Default: 1536 + * metric?: string|Param, // Default: "cosine" + * endpoint?: string|Param, + * }>, * elasticsearch?: array, + * endpoint?: string|Param, + * index_name?: string|Param, + * vectors_field?: string|Param, // Default: "_vectors" + * dimensions?: int|Param, // Default: 1536 + * similarity?: string|Param, // Default: "cosine" + * http_client?: string|Param, // Default: "http_client" + * }>, * manticoresearch?: array, + * endpoint?: string|Param, + * table?: string|Param, + * field?: string|Param, // Default: "_vectors" + * type?: string|Param, // Default: "hnsw" + * similarity?: string|Param, // Default: "cosine" + * dimensions?: int|Param, // Default: 1536 + * quantization?: string|Param, + * }>, * mariadb?: array, + * connection?: string|Param, + * table_name?: string|Param, + * index_name?: string|Param, + * vector_field_name?: string|Param, + * setup_options?: array{ + * dimensions?: int|Param, + * }, + * distance?: "cosine"|"euclidean"|"distance"|Param, // Distance metric to use for vector similarity search // Default: "euclidean" + * }>, * meilisearch?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * index_name?: string|Param, + * embedder?: string|Param, // Default: "default" + * vector_field?: string|Param, // Default: "_vectors" + * dimensions?: int|Param, // Default: 1536 + * semantic_ratio?: float|Param, // The ratio between semantic (vector) and full-text search (0.0 to 1.0). Default: 1.0 (100% semantic) // Default: 1.0 + * }>, * memory?: array, + * strategy?: string|Param, + * }>, * milvus?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * database?: string|Param, + * collection?: string|Param, + * vector_field?: string|Param, // Default: "_vectors" + * dimensions?: int|Param, // Default: 1536 + * metric_type?: string|Param, // Default: "COSINE" + * }>, * mongodb?: array, + * client?: string|Param, // Default: "MongoDB\\Client" + * database?: string|Param, + * collection?: string|Param, + * index_name?: string|Param, + * vector_field?: string|Param, // Default: "vector" + * bulk_write?: bool|Param, // Default: false + * setup_options?: array{ + * fields?: mixed, // Default: [] + * }, + * }>, * neo4j?: array, + * endpoint?: string|Param, + * username?: string|Param, + * password?: string|Param, + * database?: string|Param, + * vector_index_name?: string|Param, + * node_name?: string|Param, + * vector_field?: string|Param, // Default: "embeddings" + * dimensions?: int|Param, // Default: 1536 + * distance?: string|Param, // Default: "cosine" + * quantization?: bool|Param, + * }>, * opensearch?: array, + * endpoint?: string|Param, + * index_name?: string|Param, + * vectors_field?: string|Param, // Default: "_vectors" + * dimensions?: int|Param, // Default: 1536 + * space_type?: string|Param, // Default: "l2" + * http_client?: string|Param, // Default: "http_client" + * }>, * pinecone?: array, - * top_k?: int|Param, - * }>, + * client?: string|Param, // Default: "Probots\\Pinecone\\Client" + * index_name?: string|Param, + * namespace?: string|Param, + * filter?: list, + * top_k?: int|Param, + * }>, * postgres?: array, + * dsn?: string|Param, + * username?: string|Param, + * password?: string|Param, + * table_name?: string|Param, + * vector_field?: string|Param, // Default: "embedding" + * distance?: "cosine"|"inner_product"|"l1"|"l2"|Param, // Distance metric to use for vector similarity search // Default: "l2" + * dbal_connection?: string|Param, + * setup_options?: array{ + * vector_type?: string|Param, // Default: "vector" + * vector_size?: int|Param, // Default: 1536 + * index_method?: string|Param, // Default: "ivfflat" + * index_opclass?: string|Param, // Default: "vector_cosine_ops" + * }, + * }>, * qdrant?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * collection_name?: string|Param, // The name of the store will be used if the "collection_name" is not set + * http_client?: string|Param, // Default: "http_client" + * dimensions?: int|Param, // Default: 1536 + * distance?: string|Param, // Default: "Cosine" + * async?: bool|Param, // Default: false + * }>, * redis?: array, + * connection_parameters?: mixed, // see https://github.com/phpredis/phpredis?tab=readme-ov-file#example-1 + * client?: string|Param, // a service id of a Redis client + * index_name?: string|Param, + * key_prefix?: string|Param, // Default: "vector:" + * distance?: "COSINE"|"L2"|"IP"|Param, // Distance metric to use for vector similarity search // Default: "COSINE" + * }>, * s3vectors?: array, - * vector_bucket_name?: string|Param, - * index_name?: string|Param, - * filter?: array, - * top_k?: int|Param, // Default number of results to return // Default: 3 - * }>, + * client?: string|Param, // Service reference to an existing S3VectorsClient + * configuration?: array, + * vector_bucket_name?: string|Param, + * index_name?: string|Param, + * filter?: array, + * top_k?: int|Param, // Default number of results to return // Default: 3 + * }>, * sqlite?: array, + * dsn?: string|Param, + * connection?: string|Param, + * table_name?: string|Param, + * strategy?: string|Param, + * vec?: bool|Param, // Default: false + * distance?: "cosine"|"L2"|Param, // Default: "cosine" + * vector_dimension?: int|Param, // Default: 1536 + * }>, * supabase?: array, + * http_client?: string|Param, // Service ID of the HTTP client to use // Default: "http_client" + * url?: string|Param, + * api_key?: string|Param, + * table?: string|Param, + * vector_field?: string|Param, // Default: "embedding" + * vector_dimension?: int|Param, // Default: 1536 + * function_name?: string|Param, // Default: "match_documents" + * }>, * surrealdb?: array, + * endpoint?: string|Param, + * username?: string|Param, + * password?: string|Param, + * namespace?: string|Param, + * database?: string|Param, + * table?: string|Param, + * vector_field?: string|Param, // Default: "_vectors" + * strategy?: string|Param, // Default: "cosine" + * dimensions?: int|Param, // Default: 1536 + * namespaced_user?: bool|Param, + * }>, * typesense?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * collection?: string|Param, + * vector_field?: string|Param, // Default: "_vectors" + * dimensions?: int|Param, // Default: 1536 + * }>, * weaviate?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * http_client?: string|Param, // Default: "http_client" + * collection?: string|Param, // The name of the store will be used if the "collection" is not set + * }>, * vektor?: array, + * storage_path?: string|Param, // Default: "%kernel.project_dir%/var/share" + * dimensions?: int|Param, // Default: 1536 + * }>, * }, * message_store?: array{ * cache?: array, + * service?: string|Param, // Default: "cache.app" + * key?: string|Param, // The name of the message store will be used if the key is not set + * ttl?: int|Param, + * }>, * cloudflare?: array, + * account_id?: string|Param, + * api_key?: string|Param, + * namespace?: string|Param, + * endpoint_url?: string|Param, // If the version of the Cloudflare API is updated, use this key to support it. + * }>, * doctrine?: array{ * dbal?: array, + * connection?: string|Param, + * table_name?: string|Param, // The name of the message store will be used if the table_name is not set + * }>, * }, * meilisearch?: array, + * endpoint?: string|Param, + * api_key?: string|Param, + * index_name?: string|Param, + * }>, * memory?: array, + * identifier?: string|Param, + * }>, * mongodb?: array, + * client?: string|Param, // Default: "MongoDB\\Client" + * database?: string|Param, + * collection?: string|Param, + * }>, * pogocache?: array, + * endpoint?: string|Param, + * password?: string|Param, + * key?: string|Param, + * }>, * redis?: array, + * connection_parameters?: mixed, // see https://github.com/phpredis/phpredis?tab=readme-ov-file#example-1 + * client?: string|Param, // a service id of a Redis client + * endpoint?: string|Param, + * index_name?: string|Param, + * }>, * session?: array, + * identifier?: string|Param, + * }>, * surrealdb?: array, + * endpoint?: string|Param, + * username?: string|Param, + * password?: string|Param, + * namespace?: string|Param, + * database?: string|Param, + * table?: string|Param, + * namespaced_user?: bool|Param, // Using a namespaced user is a good practice to prevent any undesired access to a specific table, see https://surrealdb.com/docs/surrealdb/reference-guide/security-best-practices + * }>, * }, * chat?: array, + * agent?: string|Param, + * message_store?: string|Param, + * }>, * vectorizer?: array, + * platform?: string|Param, // Service name of platform // Default: "Symfony\\AI\\Platform\\PlatformInterface" + * model?: mixed, + * }>, * indexer?: array, - * filters?: list, - * vectorizer?: scalar|Param|null, // Service name of vectorizer // Default: "Symfony\\AI\\Store\\Document\\VectorizerInterface" - * store?: string|Param, // Service name of store // Default: "Symfony\\AI\\Store\\StoreInterface" - * }>, + * loader?: string|Param, // Service name of loader // Default: null + * source?: mixed, // Source identifier (file path, URL, etc.) or array of sources // Default: null + * transformers?: list, + * filters?: list, + * vectorizer?: scalar|Param|null, // Service name of vectorizer // Default: "Symfony\\AI\\Store\\Document\\VectorizerInterface" + * store?: string|Param, // Service name of store // Default: "Symfony\\AI\\Store\\StoreInterface" + * }>, * retriever?: array, + * vectorizer?: scalar|Param|null, // Service name of vectorizer // Default: "Symfony\\AI\\Store\\Document\\VectorizerInterface" + * store?: string|Param, // Service name of store // Default: "Symfony\\AI\\Store\\StoreInterface" + * }>, * } * @psalm-type ConfigType = array{ * imports?: ImportsConfig, From f13413a104992f5026a25c7f3f85574fc2e6b243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 1 May 2026 20:21:58 +0200 Subject: [PATCH 072/108] Fixed exception when github is not reachable --- src/Services/System/UpdateAvailableFacade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/System/UpdateAvailableFacade.php b/src/Services/System/UpdateAvailableFacade.php index ac3a46c0..60f66036 100644 --- a/src/Services/System/UpdateAvailableFacade.php +++ b/src/Services/System/UpdateAvailableFacade.php @@ -105,6 +105,6 @@ class UpdateAvailableFacade return $this->updateCache->get(self::CACHE_KEY, function (ItemInterface $item) { $item->expiresAfter(self::CACHE_TTL); return $this->updateChecker->getLatestVersion(); - }); + }) ?? ['version' => '0.0.1', 'url' => 'update-checking-failed']; } } From 4137bde1948c6a5287f049a1d7491acf12a8a7b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Fri, 1 May 2026 20:57:41 +0200 Subject: [PATCH 073/108] Allow to pass options to circumvent caching of info provider results / force fresh --- src/Controller/PartController.php | 6 ++- .../InfoProviderSystem/PartInfoRetriever.php | 45 ++++++++++++++++--- .../Providers/BuerklinProvider.php | 12 +++-- .../Providers/CanopyProvider.php | 4 +- .../Providers/InfoProviderInterface.php | 1 + .../Providers/OEMSecretsProvider.php | 5 +++ .../Providers/OctopartProvider.php | 4 +- 7 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index eb80d9bc..4c7ec37f 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -40,6 +40,7 @@ use App\Services\Attachments\AttachmentSubmitHandler; use App\Services\Attachments\PartPreviewGenerator; use App\Services\EntityMergers\Mergers\PartMerger; use App\Services\InfoProviderSystem\PartInfoRetriever; +use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use App\Services\LogSystem\EventCommentHelper; use App\Services\LogSystem\HistoryHelper; use App\Services\LogSystem\TimeTravel; @@ -283,7 +284,10 @@ final class PartController extends AbstractController { $this->denyAccessUnlessGranted('@info_providers.create_parts'); - $dto = $infoRetriever->getDetails($providerKey, $providerId); + //Force info providers to not use cache, when retrieving part details for creating a new part, because otherwise we might end up with outdated information + $no_cache = $request->query->getBoolean('no_cache', false); + + $dto = $infoRetriever->getDetails($providerKey, $providerId, [InfoProviderInterface::OPTION_NO_CACHE => $no_cache]); $new_part = $infoRetriever->dtoToPart($dto); if ($new_part->getCategory() === null || $new_part->getCategory()->getID() === null) { diff --git a/src/Services/InfoProviderSystem/PartInfoRetriever.php b/src/Services/InfoProviderSystem/PartInfoRetriever.php index db1895e7..53206a75 100644 --- a/src/Services/InfoProviderSystem/PartInfoRetriever.php +++ b/src/Services/InfoProviderSystem/PartInfoRetriever.php @@ -53,6 +53,7 @@ final class PartInfoRetriever * Search for a keyword in the given providers. The results can be cached * @param string[]|InfoProviderInterface[] $providers A list of providers to search in, either as provider keys or as provider instances * @param string $keyword The keyword to search for + * @param array $options An associative array of options which can be used to modify the search behavior. The supported options depend on the provider and should be documented in the provider's documentation. * @return SearchResultDTO[] The search results * @throws InfoProviderNotActiveException if any of the given providers is not active * @throws ClientException if any of the providers throws an exception during the search @@ -60,7 +61,7 @@ final class PartInfoRetriever * @throws TransportException if any of the providers throws an exception during the search * @throws OAuthReconnectRequiredException if any of the providers throws an exception during the search that indicates that the OAuth token needs to be refreshed */ - public function searchByKeyword(string $keyword, array $providers): array + public function searchByKeyword(string $keyword, array $providers, array $options = []): array { $results = []; @@ -89,15 +90,31 @@ final class PartInfoRetriever * Search for a keyword in the given provider. The result is cached for 7 days. * @return SearchResultDTO[] */ - protected function searchInProvider(InfoProviderInterface $provider, string $keyword): array + protected function searchInProvider(InfoProviderInterface $provider, string $keyword, array $options = []): array { //Generate key and escape reserved characters from the provider id $escaped_keyword = hash('xxh3', $keyword); - return $this->partInfoCache->get("search_{$provider->getProviderKey()}_{$escaped_keyword}", function (ItemInterface $item) use ($provider, $keyword) { + + $no_cache = $options[InfoProviderInterface::OPTION_NO_CACHE] ?? false; + + //Exclude the no_cache option from the options hash, since it should not affect the cache key, as it only determines whether to bypass the cache or not, but does not change the actual search results + $options_without_cache = $options; + unset($options_without_cache[InfoProviderInterface::OPTION_NO_CACHE]); + //Generate a hash for the options, to ensure that different options result in different cache entries + $options_hash = hash('xxh3', json_encode($options_without_cache, JSON_THROW_ON_ERROR)); + + $cache_key = "search_{$provider->getProviderKey()}_{$escaped_keyword}_{$options_hash}"; + + //If no_cache is set, bypass the cache and get fresh results from the provider + if ($no_cache) { + $this->partInfoCache->delete($cache_key); + } + + return $this->partInfoCache->get($cache_key, function (ItemInterface $item) use ($provider, $keyword, $options) { //Set the expiration time $item->expiresAfter(!$this->debugMode ? self::CACHE_RESULT_EXPIRATION : 10); - return $provider->searchByKeyword($keyword); + return $provider->searchByKeyword($keyword, $options); }); } @@ -106,10 +123,11 @@ final class PartInfoRetriever * The result is cached for 4 days. * @param string $provider_key * @param string $part_id + * @param array $options An associative array of options which can be used to modify the search behavior. The supported options depend on the provider and should be documented in the provider's documentation. * @return PartDetailDTO * @throws InfoProviderNotActiveException if the the given providers is not active */ - public function getDetails(string $provider_key, string $part_id): PartDetailDTO + public function getDetails(string $provider_key, string $part_id, array $options = []): PartDetailDTO { $provider = $this->provider_registry->getProviderByKey($provider_key); @@ -118,13 +136,26 @@ final class PartInfoRetriever throw InfoProviderNotActiveException::fromProvider($provider); } + //Exclude the no_cache option from the options hash, since it should not affect the cache key, as it only determines whether to bypass the cache or not, but does not change the actual search results + $options_without_cache = $options; + unset($options_without_cache[InfoProviderInterface::OPTION_NO_CACHE]); + //Generate a hash for the options, to ensure that different options result in different cache entries + $options_hash = hash('xxh3', json_encode($options_without_cache, JSON_THROW_ON_ERROR)); + //Generate key and escape reserved characters from the provider id $escaped_part_id = hash('xxh3', $part_id); - return $this->partInfoCache->get("details_{$provider_key}_{$escaped_part_id}", function (ItemInterface $item) use ($provider, $part_id) { + $cache_key = "details_{$provider_key}_{$escaped_part_id}_{$options_hash}"; + + //Delete the cache entry if no_cache is set, to ensure that the next get call will fetch fresh data from the provider, instead of returning stale data from the cache. + if ($options[InfoProviderInterface::OPTION_NO_CACHE] ?? false) { + $this->partInfoCache->delete($cache_key); + } + + return $this->partInfoCache->get($cache_key, function (ItemInterface $item) use ($provider, $part_id, $options) { //Set the expiration time $item->expiresAfter(!$this->debugMode ? self::CACHE_DETAIL_EXPIRATION : 10); - return $provider->getDetails($part_id); + return $provider->getDetails($part_id, $options); }); } diff --git a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php index e5017eb2..ca6e26e1 100644 --- a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php +++ b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php @@ -120,7 +120,7 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv ]; } - private function getProduct(string $code): array + private function getProduct(string $code, bool $use_cache = true): array { $code = strtoupper(trim($code)); if ($code === '') { @@ -132,6 +132,11 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv md5($code . '|' . $this->settings->language . '|' . $this->settings->currency) ); + if (!$use_cache) { + $this->partInfoCache->deleteItem($cacheKey); + unset($this->productCache[$cacheKey]); + } + if (isset($this->productCache[$cacheKey])) { return $this->productCache[$cacheKey]; } @@ -488,7 +493,7 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv // Fallback: try direct lookup by code try { - $product = $this->getProduct($keyword); + $product = $this->getProduct($keyword, use_cache: !($options[self::OPTION_NO_CACHE] ?? false)); return [$this->getPartDetail($product)]; } catch (\Throwable $e) { return []; @@ -498,7 +503,8 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv public function getDetails(string $id, array $options = []): PartDetailDTO { // Detail endpoint is /products/{code}/ - $response = $this->getProduct($id); + //By default use cache for details, but allow bypassing cache with option (e.g. for refresh) + $response = $this->getProduct($id, use_cache: !($options[self::OPTION_NO_CACHE] ?? false)); return $this->getPartDetail($response); } diff --git a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php index d826c765..aee30d6b 100644 --- a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php @@ -184,8 +184,10 @@ class CanopyProvider implements InfoProviderInterface throw new \InvalidArgumentException("The id must be a valid ASIN (10 characters, letters and numbers)"); } + $do_not_cache = ($options[self::OPTION_NO_CACHE] ?? false) || $this->settings->alwaysGetDetails; + //Use cached details if available and the settings allow it, to avoid unnecessary API requests, since the search results already contain most of the details - if(!$this->settings->alwaysGetDetails && ($cached = $this->getFromCache($id)) !== null) { + if(!$do_not_cache && ($cached = $this->getFromCache($id)) !== null) { return $cached; } diff --git a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php index feb3466f..8896d94b 100644 --- a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php +++ b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php @@ -28,6 +28,7 @@ use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; interface InfoProviderInterface { + public const OPTION_NO_CACHE = 'no_cache'; // if set to true, the provider should not use any cache and retrieve fresh data from the source /** * Get information about this provider diff --git a/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php b/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php index 2c98e6e5..9764517b 100644 --- a/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php +++ b/src/Services/InfoProviderSystem/Providers/OEMSecretsProvider.php @@ -424,6 +424,11 @@ class OEMSecretsProvider implements InfoProviderInterface public function getDetails(string $id, array $options = []): PartDetailDTO { $cacheKey = $this->getCacheKey($id); + + if ($options[self::OPTION_NO_CACHE] ?? false) { + $this->partInfoCache->deleteItem($cacheKey); + } + $cacheItem = $this->partInfoCache->getItem($cacheKey); if ($cacheItem->isHit()) { diff --git a/src/Services/InfoProviderSystem/Providers/OctopartProvider.php b/src/Services/InfoProviderSystem/Providers/OctopartProvider.php index 684e4ff0..de404e18 100644 --- a/src/Services/InfoProviderSystem/Providers/OctopartProvider.php +++ b/src/Services/InfoProviderSystem/Providers/OctopartProvider.php @@ -369,9 +369,11 @@ class OctopartProvider implements InfoProviderInterface public function getDetails(string $id, array $options = []): PartDetailDTO { + $no_cache = $options[self::OPTION_NO_CACHE] ?? false; + //Check if we have the part cached $cached = $this->getFromCache($id); - if ($cached !== null) { + if (!$no_cache && $cached !== null) { return $cached; } From fe4dc1f1e44aaef590d73d4558fb8e16aba4d3eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 01:40:08 +0200 Subject: [PATCH 074/108] Allow to set no_cache options via info provider UI --- src/Controller/InfoProviderController.php | 11 ++++++++-- src/Controller/PartController.php | 5 ++++- .../InfoProviderSystem/PartSearchType.php | 12 ++++++++++- .../InfoProviderSystem/PartInfoRetriever.php | 2 +- .../search/part_search.html.twig | 21 +++++++++++++++---- translations/messages.en.xlf | 18 ++++++++++++++++ 6 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/Controller/InfoProviderController.php b/src/Controller/InfoProviderController.php index deec8a57..cd076d67 100644 --- a/src/Controller/InfoProviderController.php +++ b/src/Controller/InfoProviderController.php @@ -31,6 +31,7 @@ use App\Services\InfoProviderSystem\ExistingPartFinder; use App\Services\InfoProviderSystem\PartInfoRetriever; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Services\InfoProviderSystem\Providers\GenericWebProvider; +use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use App\Settings\AppSettings; use App\Settings\InfoProviderSystem\InfoProviderGeneralSettings; use Doctrine\ORM\EntityManagerInterface; @@ -172,10 +173,15 @@ class InfoProviderController extends AbstractController $keyword = $form->get('keyword')->getData(); $providers = $form->get('providers')->getData(); + $no_cache_search = $form->get('no_cache_search')->getData(); + $no_cache_details = $form->get('no_cache_details')->getData(); + $dtos = []; try { - $dtos = $this->infoRetriever->searchByKeyword(keyword: $keyword, providers: $providers); + $dtos = $this->infoRetriever->searchByKeyword(keyword: $keyword, providers: $providers, options: [ + InfoProviderInterface::OPTION_NO_CACHE => $no_cache_search + ]); } catch (ClientException $e) { $this->addFlash('error', t('info_providers.search.error.client_exception')); $this->addFlash('error',$e->getMessage()); @@ -207,7 +213,8 @@ class InfoProviderController extends AbstractController return $this->render('info_providers/search/part_search.html.twig', [ 'form' => $form, 'results' => $results, - 'update_target' => $update_target + 'update_target' => $update_target, + 'no_cache_details' => $no_cache_details ?? false, ]); } diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index 4c7ec37f..c80afdb7 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -346,10 +346,13 @@ final class PartController extends AbstractController $this->denyAccessUnlessGranted('edit', $part); $this->denyAccessUnlessGranted('@info_providers.create_parts'); + //Force info providers to not use cache, when retrieving part details for creating a new part, because otherwise we might end up with outdated information + $no_cache = $request->query->getBoolean('no_cache', false); + //Save the old name of the target part for the template $old_name = $part->getName(); - $dto = $infoRetriever->getDetails($providerKey, $providerId); + $dto = $infoRetriever->getDetails($providerKey, $providerId, [InfoProviderInterface::OPTION_NO_CACHE => $no_cache]); $provider_part = $infoRetriever->dtoToPart($dto); $part = $partMerger->merge($part, $provider_part); diff --git a/src/Form/InfoProviderSystem/PartSearchType.php b/src/Form/InfoProviderSystem/PartSearchType.php index 9d582ca4..154c1aa3 100644 --- a/src/Form/InfoProviderSystem/PartSearchType.php +++ b/src/Form/InfoProviderSystem/PartSearchType.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace App\Form\InfoProviderSystem; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\SearchType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormBuilderInterface; @@ -40,8 +41,17 @@ class PartSearchType extends AbstractType 'help' => 'info_providers.search.providers.help', ]); + $builder->add('no_cache_search', CheckboxType::class, [ + 'label' => 'info_providers.no_cache_search', + 'required' => false, + ]); + $builder->add('no_cache_details', CheckboxType::class, [ + 'label' => 'info_providers.no_cache_details', + 'required' => false, + ]); + $builder->add('submit', SubmitType::class, [ 'label' => 'info_providers.search.submit' ]); } -} \ No newline at end of file +} diff --git a/src/Services/InfoProviderSystem/PartInfoRetriever.php b/src/Services/InfoProviderSystem/PartInfoRetriever.php index 53206a75..6c10f10e 100644 --- a/src/Services/InfoProviderSystem/PartInfoRetriever.php +++ b/src/Services/InfoProviderSystem/PartInfoRetriever.php @@ -80,7 +80,7 @@ final class PartInfoRetriever } /** @noinspection SlowArrayOperationsInLoopInspection */ - $results = array_merge($results, $this->searchInProvider($provider, $keyword)); + $results = array_merge($results, $this->searchInProvider($provider, $keyword, $options)); } return $results; diff --git a/templates/info_providers/search/part_search.html.twig b/templates/info_providers/search/part_search.html.twig index eac3507d..9e1f0834 100644 --- a/templates/info_providers/search/part_search.html.twig +++ b/templates/info_providers/search/part_search.html.twig @@ -33,6 +33,19 @@
+ + +
+
+ {{ form_row(form.no_cache_search) }} + {{ form_row(form.no_cache_details) }} +
+
+ {{ form_row(form.submit) }} {{ form_end(form) }} @@ -116,16 +129,16 @@ {% if update_target %} {# We update an existing part #} {% set href = path('info_providers_update_part', - {'providerKey': dto.provider_key, 'providerId': dto.provider_id, 'id': update_target.iD}) %} + {'providerKey': dto.provider_key, 'providerId': dto.provider_id, 'id': update_target.iD, 'no_cache': no_cache_details ? 1 : null}) %} {% else %} {# Create a fresh part #} {% set href = path('info_providers_create_part', - {'providerKey': dto.provider_key, 'providerId': dto.provider_id}) %} + {'providerKey': dto.provider_key, 'providerId': dto.provider_id, 'no_cache': no_cache_details ? 1 : null}) %} {% endif %} {# If we have no local part, then we can just show the create button #} {% if localPart is null %} + target="_blank" title="{% trans %}part.create.btn{% endtrans %}"> {% else %} {# Otherwise add a button group with all three buttons #} @@ -139,7 +152,7 @@ target="_blank" title="{% trans %}info_providers.search.show_existing_part{% endtrans %}"> - diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index d2c4bc47..f30ffb9f 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13139,5 +13139,23 @@ Buerklin-API Authentication server: The additional instructions will be appended to the system prompt.
+ + + info_providers.search.advanced_options + Advanced options + + + + + info_providers.no_cache_search + Do not cache search results / Force fresh search + + + + + info_providers.no_cache_details + Do not cache result details / Force fresh part detail retrieval + + From e77b67445c0a27a16d8dd33a340ca426126cc506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 22:08:25 +0200 Subject: [PATCH 075/108] Added cache to AIWebProvider --- ...{AIInfoExtractor.php => AIWebProvider.php} | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) rename src/Services/InfoProviderSystem/Providers/{AIInfoExtractor.php => AIWebProvider.php} (87%) diff --git a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php similarity index 87% rename from src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php rename to src/Services/InfoProviderSystem/Providers/AIWebProvider.php index bf1ce37c..d53201cc 100644 --- a/src/Services/InfoProviderSystem/Providers/AIInfoExtractor.php +++ b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php @@ -33,6 +33,7 @@ use App\Settings\InfoProviderSystem\AIExtractorSettings; use Brick\Schema\SchemaReader; use Jkphl\Micrometa; use League\HTMLToMarkdown\HtmlConverter; +use Psr\Cache\CacheItemPoolInterface; use Symfony\AI\Platform\Message\Message; use Symfony\AI\Platform\Message\MessageBag; use Symfony\Component\DomCrawler\Crawler; @@ -43,11 +44,11 @@ use Symfony\Contracts\HttpClient\HttpClientInterface; use function Symfony\Component\String\u; -final class AIInfoExtractor implements InfoProviderInterface +final class AIWebProvider implements InfoProviderInterface { use FixAndValidateUrlTrait; - private const DISTRIBUTOR_NAME = 'AI Extracted'; + private const DISTRIBUTOR_NAME = 'Website'; private readonly HttpClientInterface $httpClient; @@ -56,6 +57,7 @@ final class AIInfoExtractor implements InfoProviderInterface private readonly AIExtractorSettings $settings, private readonly AIPlatformRegistry $AIPlatformRegistry, private readonly DTOJsonSchemaConverter $jsonSchemaConverter, + private readonly CacheItemPoolInterface $partInfoCache ) { //Use NoPrivateNetworkHttpClient to prevent SSRF vulnerabilities, and RandomizeUseragentHttpClient to make it harder for servers to block us $this->httpClient = (new RandomizeUseragentHttpClient(new NoPrivateNetworkHttpClient($httpClient)))->withOptions( @@ -68,17 +70,17 @@ final class AIInfoExtractor implements InfoProviderInterface public function getProviderInfo(): array { return [ - 'name' => 'AI Information Extractor', - 'description' => 'Extract part info from any URL using OpenRouter LLM', + 'name' => 'AI Web Extractor', + 'description' => 'Extract part info from any URL using LLM', //'url' => 'https://openrouter.ai', - 'disabled_help' => 'Configure OpenRouter API key in settings', + 'disabled_help' => 'Configure AI settings', 'settings_class' => AIExtractorSettings::class, ]; } public function getProviderKey(): string { - return 'ai_extractor'; + return 'ai_web'; } public function isActive(): bool @@ -90,7 +92,7 @@ final class AIInfoExtractor implements InfoProviderInterface { try { return [ - $this->getDetails($keyword) + $this->getDetails($keyword, $options) ]; } catch (ProviderIDNotSupportedException $e) { return []; } @@ -100,16 +102,24 @@ final class AIInfoExtractor implements InfoProviderInterface { $url = $this->fixAndValidateURL($id); + //Check if we have a cached result for this URL, to avoid unnecessary LLM calls, which can be slow and costly. + $cacheKey = 'ai_web_'.hash('xxh3', $url); + + //If ignore cache option is set, skip cache and fetch fresh data + if ($options[self::OPTION_NO_CACHE] ?? false) { + $this->partInfoCache->deleteItem($cacheKey); + } + + //Return cached result if available + $cacheItem = $this->partInfoCache->getItem($cacheKey); + if ($cacheItem->isHit()) { + return $cacheItem->get(); + } + // Fetch HTML content $response = $this->httpClient->request('GET', $url); $html = $response->getContent(); - // Clean HTML - /*$cleanedHtml = $this->cleanHTML($html); - - // Truncate to max content length - $truncatedHtml = $this->truncateHTML($cleanedHtml, $this->settings->maxContentLength);*/ - //Convert html to markdown, to provide a cleaner input to the LLM. $markdown = $this->htmlToMarkdown($html); //Truncate markdown to max content length, if needed @@ -124,6 +134,11 @@ final class AIInfoExtractor implements InfoProviderInterface // Build and return PartDetailDTO $result = $this->jsonSchemaConverter->jsonToDTO($llmResponse, $this->getProviderKey(), $url, $url, self::DISTRIBUTOR_NAME); + // Cache the result for future use, to improve performance and reduce costs. + $cacheItem->set($result); + $cacheItem->expiresAfter(3600 * 2); //Cache for 2 hours, as web content can change frequently, but we still want to benefit from caching for repeated accesses. + $this->partInfoCache->save($cacheItem); + return $result; } From a2b9ee764d2890c975d58a59973b7b96cc654bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 22:12:36 +0200 Subject: [PATCH 076/108] Added tests for AIPlatformRegistry --- src/Services/AI/AIPlatformRegistry.php | 1 - tests/Services/AI/AIPlatformRegistryTest.php | 99 ++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 tests/Services/AI/AIPlatformRegistryTest.php diff --git a/src/Services/AI/AIPlatformRegistry.php b/src/Services/AI/AIPlatformRegistry.php index bf1d355c..408bb181 100644 --- a/src/Services/AI/AIPlatformRegistry.php +++ b/src/Services/AI/AIPlatformRegistry.php @@ -43,7 +43,6 @@ final readonly class AIPlatformRegistry public function __construct( SettingsManagerInterface $settingsManager, - #[AutowireIterator(tag: 'ai.platform', indexAttribute: 'name')] iterable $platforms, ) { diff --git a/tests/Services/AI/AIPlatformRegistryTest.php b/tests/Services/AI/AIPlatformRegistryTest.php new file mode 100644 index 00000000..1577f9b5 --- /dev/null +++ b/tests/Services/AI/AIPlatformRegistryTest.php @@ -0,0 +1,99 @@ +. + */ + +/** + * Tests for App\Services\AI\AIPlatformRegistry + */ +declare(strict_types=1); + +namespace App\Tests\Services\AI; + +use App\Services\AI\AIPlatformRegistry; +use App\Services\AI\AIPlatforms; +use App\Services\AI\AIPlatformSettingsInterface; +use Jbtronics\SettingsBundle\Manager\SettingsManagerInterface; +use PHPUnit\Framework\TestCase; +use Symfony\AI\Platform\PlatformInterface; + +class AIPlatformRegistryTest extends TestCase +{ + public function testRegistersEnabledPlatformsAndReturnsPlatform(): void + { + // Create a platform mock and expose it under the service tag name (openrouter) + $platformMock = $this->createMock(PlatformInterface::class); + + // Settings for OpenRouter -> enabled + $openRouterSettings = $this->createMock(AIPlatformSettingsInterface::class); + $openRouterSettings->method('isAIPlatformEnabled')->willReturn(true); + + // Settings for LMStudio -> disabled + $lmSettings = $this->createMock(AIPlatformSettingsInterface::class); + $lmSettings->method('isAIPlatformEnabled')->willReturn(false); + + // Settings manager should return the corresponding settings object depending on the requested class name + $settingsManager = $this->createMock(SettingsManagerInterface::class); + $settingsManager->method('get')->willReturnMap([ + [AIPlatforms::OPENROUTER->toSettingsClass(), $openRouterSettings], + [AIPlatforms::LMSTUDIO->toSettingsClass(), $lmSettings], + ]); + + $platforms = new \ArrayIterator([ + AIPlatforms::OPENROUTER->toServiceTagName() => $platformMock, + ]); + + $registry = new AIPlatformRegistry($settingsManager, $platforms); + + // OPENROUTER should be enabled and retrievable + $this->assertTrue($registry->isEnabled(AIPlatforms::OPENROUTER)); + $this->assertSame($platformMock, $registry->getPlatform(AIPlatforms::OPENROUTER)); + + // LMSTUDIO is either not registered or disabled -> should not be enabled + $this->assertFalse($registry->isEnabled(AIPlatforms::LMSTUDIO)); + $this->expectException(\InvalidArgumentException::class); + $registry->getPlatform(AIPlatforms::LMSTUDIO); + } + + public function testGetEnabledPlatformsReturnsIndexedArray(): void + { + $platformMock = $this->createMock(PlatformInterface::class); + + $openRouterSettings = $this->createMock(AIPlatformSettingsInterface::class); + $openRouterSettings->method('isAIPlatformEnabled')->willReturn(true); + + $settingsManager = $this->createMock(SettingsManagerInterface::class); + $settingsManager->method('get')->willReturnMap([ + [AIPlatforms::OPENROUTER->toSettingsClass(), $openRouterSettings], + [AIPlatforms::LMSTUDIO->toSettingsClass(), $this->createMock(AIPlatformSettingsInterface::class)], + ]); + + $platforms = new \ArrayIterator([ + AIPlatforms::OPENROUTER->toServiceTagName() => $platformMock, + // lmstudio not registered + ]); + + $registry = new AIPlatformRegistry($settingsManager, $platforms); + + $enabled = $registry->getEnabledPlatforms(); + + $this->assertArrayHasKey(AIPlatforms::OPENROUTER->value, $enabled); + $this->assertSame($platformMock, $enabled[AIPlatforms::OPENROUTER->value]); + } +} + From aac5b8e0becf1d87b764e5a76082a9f561d53221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 23:23:20 +0200 Subject: [PATCH 077/108] Allow to select which method should be used to in "Create from URL feature" --- src/Controller/InfoProviderController.php | 25 +++--- .../InfoProviderSystem/FromURLFormType.php | 82 +++++++++++++++++++ .../CreateFromUrlHelper.php | 52 ++++++++++++ src/Twig/MiscExtension.php | 13 ++- templates/_navbar.html.twig | 2 +- .../from_url/from_url.html.twig | 15 ++++ translations/messages.en.xlf | 24 ++++++ 7 files changed, 198 insertions(+), 15 deletions(-) create mode 100644 src/Form/InfoProviderSystem/FromURLFormType.php create mode 100644 src/Services/InfoProviderSystem/CreateFromUrlHelper.php diff --git a/src/Controller/InfoProviderController.php b/src/Controller/InfoProviderController.php index cd076d67..074d3894 100644 --- a/src/Controller/InfoProviderController.php +++ b/src/Controller/InfoProviderController.php @@ -26,8 +26,10 @@ namespace App\Controller; use App\Entity\Parts\Manufacturer; use App\Entity\Parts\Part; use App\Exceptions\OAuthReconnectRequiredException; +use App\Form\InfoProviderSystem\FromURLFormType; use App\Form\InfoProviderSystem\PartSearchType; use App\Services\InfoProviderSystem\ExistingPartFinder; +use App\Services\InfoProviderSystem\CreateFromUrlHelper; use App\Services\InfoProviderSystem\PartInfoRetriever; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Services\InfoProviderSystem\Providers\GenericWebProvider; @@ -219,35 +221,31 @@ class InfoProviderController extends AbstractController } #[Route('/from_url', name: 'info_providers_from_url')] - public function fromURL(Request $request, GenericWebProvider $provider): Response + public function fromURL(Request $request, GenericWebProvider $provider, CreateFromUrlHelper $fromUrlHelper): Response { $this->denyAccessUnlessGranted('@info_providers.create_parts'); - if (!$provider->isActive()) { + if (!$fromUrlHelper->canCreateFromUrl()) { $this->addFlash('error', "Generic Web Provider is not active. Please enable it in the provider settings."); return $this->redirectToRoute('info_providers_list'); } - $formBuilder = $this->createFormBuilder(); - $formBuilder->add('url', UrlType::class, [ - 'label' => 'info_providers.from_url.url.label', - 'required' => true, - ]); - $formBuilder->add('submit', SubmitType::class, [ - 'label' => 'info_providers.search.submit', - ]); - - $form = $formBuilder->getForm(); + $form = $this->createForm(FromURLFormType::class); $form->handleRequest($request); $partDetail = null; if ($form->isSubmitted() && $form->isValid()) { //Try to retrieve the part detail from the given URL $url = $form->get('url')->getData(); + + $method = $form->get('method')->getData(); + $no_cache = $form->get('no_cache')->getData(); + try { + //It's okay if we use the cached results here, as its just for convenience $searchResult = $this->infoRetriever->searchByKeyword( keyword: $url, - providers: [$provider] + providers: [$method], ); if (count($searchResult) === 0) { @@ -258,6 +256,7 @@ class InfoProviderController extends AbstractController return $this->redirectToRoute('info_providers_create_part', [ 'providerKey' => $searchResult->provider_key, 'providerId' => $searchResult->provider_id, + 'no_cache' => $no_cache ? 1 : null, ]); } } catch (ExceptionInterface $e) { diff --git a/src/Form/InfoProviderSystem/FromURLFormType.php b/src/Form/InfoProviderSystem/FromURLFormType.php new file mode 100644 index 00000000..cad7a0f5 --- /dev/null +++ b/src/Form/InfoProviderSystem/FromURLFormType.php @@ -0,0 +1,82 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Form\InfoProviderSystem; + +use App\Services\InfoProviderSystem\ProviderRegistry; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\UrlType; +use Symfony\Component\Form\FormBuilderInterface; + +class FromURLFormType extends AbstractType +{ + public function __construct(private readonly ProviderRegistry $providerRegistry) + { + + } + + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder->add('url', UrlType::class, [ + 'label' => 'info_providers.from_url.url.label', + 'required' => true, + ]); + + + $builder->add('method', ChoiceType::class, [ + 'expanded' => true, + 'data' => 'generic_web', //Default value + 'label' => 'info_providers.from_url.method', + 'choices' => [ + 'info_providers.from_url.method.generic_web' => 'generic_web', + 'info_providers.from_url.method.ai_web' => 'ai_web', + ], + 'choice_attr' => function ($choice, $key, $value) { + //Disable all providers that are not active + $provider = $this->providerRegistry->getProviderByKey($value); + if (!$provider->isActive()) { + return ['disabled' => 'disabled']; + } + + return []; + }, + + //Render the choices as inline radio buttons + 'label_attr' => [ + 'class' => 'radio-inline', + ], + ]); + + $builder->add('no_cache', CheckboxType::class, [ + 'label' => 'info_providers.from_url.no_cache', + 'required' => false, + ]); + + $builder->add('submit', SubmitType::class, [ + 'label' => 'info_providers.search.submit', + ]); + } +} diff --git a/src/Services/InfoProviderSystem/CreateFromUrlHelper.php b/src/Services/InfoProviderSystem/CreateFromUrlHelper.php new file mode 100644 index 00000000..46a2f767 --- /dev/null +++ b/src/Services/InfoProviderSystem/CreateFromUrlHelper.php @@ -0,0 +1,52 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem; + +use App\Entity\UserSystem\User; +use Symfony\Bundle\SecurityBundle\Security; + +final readonly class CreateFromUrlHelper +{ + public function __construct(private Security $security, private ProviderRegistry $providerRegistry) + { + } + + /** + * Checks if at least one provider can create parts from an URL and the current user is allowed to use it. + * This is used to determine if the "From URL" feature should be shown to the user. + * @return bool + */ + public function canCreateFromUrl(): bool + { + if (!$this->security->isGranted('@info_providers.create_parts')) { + return false; + } + + //Check if either the generic web provider or the ai web provider is active + $genericWebProvider = $this->providerRegistry->getProviderByKey('generic_web'); + $aiWebProvider = $this->providerRegistry->getProviderByKey('ai_web'); + + return $genericWebProvider->isActive() || $aiWebProvider->isActive(); + } +} diff --git a/src/Twig/MiscExtension.php b/src/Twig/MiscExtension.php index 390ad084..565d56f2 100644 --- a/src/Twig/MiscExtension.php +++ b/src/Twig/MiscExtension.php @@ -22,6 +22,7 @@ declare(strict_types=1); */ namespace App\Twig; +use App\Services\InfoProviderSystem\CreateFromUrlHelper; use Twig\Attribute\AsTwigFunction; use App\Settings\SettingsIcon; use Symfony\Component\HttpFoundation\Request; @@ -34,7 +35,7 @@ use Twig\Extension\AbstractExtension; final readonly class MiscExtension { - public function __construct(private EventCommentNeededHelper $eventCommentNeededHelper) + public function __construct(private EventCommentNeededHelper $eventCommentNeededHelper, private CreateFromUrlHelper $fromUrlHelper) { } @@ -84,4 +85,14 @@ final readonly class MiscExtension return $request->getBaseUrl().$request->getPathInfo().$qs; } + + /** + * Returns true if the from url provider is active, false otherwise. + * @return bool + */ + #[AsTwigFunction(name: 'create_from_url_active')] + public function create_from_url_active(): bool + { + return $this->fromUrlHelper->canCreateFromUrl(); + } } diff --git a/templates/_navbar.html.twig b/templates/_navbar.html.twig index 57331370..7719ab2b 100644 --- a/templates/_navbar.html.twig +++ b/templates/_navbar.html.twig @@ -52,7 +52,7 @@ {% trans %}info_providers.search.title{% endtrans %} - {% if settings_instance('generic_web_provider').enabled %} + {% if create_from_url_active() %}
  • diff --git a/templates/info_providers/from_url/from_url.html.twig b/templates/info_providers/from_url/from_url.html.twig index 3370a94c..15aa225f 100644 --- a/templates/info_providers/from_url/from_url.html.twig +++ b/templates/info_providers/from_url/from_url.html.twig @@ -16,6 +16,21 @@ {{ form_start(form) }} {{ form_row(form.url) }} + + {{ form_row(form.method) }} + + + +
    +
    + {{ form_row(form.no_cache) }} +
    +
    + {{ form_row(form.submit) }} {{ form_end(form) }} {% endblock %} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index f30ffb9f..cb071128 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13157,5 +13157,29 @@ Buerklin-API Authentication server: Do not cache result details / Force fresh part detail retrieval + + + info_providers.from_url.method.generic_web + Classic Web Scraper + + + + + info_providers.from_url.method.ai_web + AI Web Scraper + + + + + info_providers.from_url.method + Method + + + + + info_providers.from_url.no_cache + Ignore cache / Force fresh info retrieval + + From 889aa08b4e1abb4323e94db1dc4aa74f369753f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 23:42:26 +0200 Subject: [PATCH 078/108] Added URL delegation feature to AI provider and added option to skip that delegation --- src/Controller/InfoProviderController.php | 5 ++ src/Controller/PartController.php | 6 +- .../InfoProviderSystem/FromURLFormType.php | 5 ++ .../CreateFromUrlHelper.php | 59 +++++++++++++++++- .../Providers/AIWebProvider.php | 28 ++++++++- .../Providers/GenericWebProvider.php | 62 +++++-------------- .../Providers/InfoProviderInterface.php | 1 + .../from_url/from_url.html.twig | 1 + translations/messages.en.xlf | 6 ++ 9 files changed, 121 insertions(+), 52 deletions(-) diff --git a/src/Controller/InfoProviderController.php b/src/Controller/InfoProviderController.php index 074d3894..817a6651 100644 --- a/src/Controller/InfoProviderController.php +++ b/src/Controller/InfoProviderController.php @@ -240,12 +240,16 @@ class InfoProviderController extends AbstractController $method = $form->get('method')->getData(); $no_cache = $form->get('no_cache')->getData(); + $skip_delegation = $form->get('skip_delegation')->getData(); try { //It's okay if we use the cached results here, as its just for convenience $searchResult = $this->infoRetriever->searchByKeyword( keyword: $url, providers: [$method], + options: [ + InfoProviderInterface::OPTION_SKIP_DELEGATION => $skip_delegation, + ] ); if (count($searchResult) === 0) { @@ -257,6 +261,7 @@ class InfoProviderController extends AbstractController 'providerKey' => $searchResult->provider_key, 'providerId' => $searchResult->provider_id, 'no_cache' => $no_cache ? 1 : null, + 'skip_delegation' => $skip_delegation ? 1 : null, ]); } } catch (ExceptionInterface $e) { diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index c80afdb7..ab424f50 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -286,8 +286,12 @@ final class PartController extends AbstractController //Force info providers to not use cache, when retrieving part details for creating a new part, because otherwise we might end up with outdated information $no_cache = $request->query->getBoolean('no_cache', false); + $skip_delegation = $request->query->getBoolean('skip_delegation', false); - $dto = $infoRetriever->getDetails($providerKey, $providerId, [InfoProviderInterface::OPTION_NO_CACHE => $no_cache]); + $dto = $infoRetriever->getDetails($providerKey, $providerId, [ + InfoProviderInterface::OPTION_NO_CACHE => $no_cache, + InfoProviderInterface::OPTION_SKIP_DELEGATION => $skip_delegation, + ]); $new_part = $infoRetriever->dtoToPart($dto); if ($new_part->getCategory() === null || $new_part->getCategory()->getID() === null) { diff --git a/src/Form/InfoProviderSystem/FromURLFormType.php b/src/Form/InfoProviderSystem/FromURLFormType.php index cad7a0f5..39ef50f4 100644 --- a/src/Form/InfoProviderSystem/FromURLFormType.php +++ b/src/Form/InfoProviderSystem/FromURLFormType.php @@ -75,6 +75,11 @@ class FromURLFormType extends AbstractType 'required' => false, ]); + $builder->add('skip_delegation', CheckboxType::class, [ + 'label' => 'info_providers.from_url.skip_delegation', + 'required' => false, + ]); + $builder->add('submit', SubmitType::class, [ 'label' => 'info_providers.search.submit', ]); diff --git a/src/Services/InfoProviderSystem/CreateFromUrlHelper.php b/src/Services/InfoProviderSystem/CreateFromUrlHelper.php index 46a2f767..0291142f 100644 --- a/src/Services/InfoProviderSystem/CreateFromUrlHelper.php +++ b/src/Services/InfoProviderSystem/CreateFromUrlHelper.php @@ -24,11 +24,18 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem; use App\Entity\UserSystem\User; +use App\Exceptions\ProviderIDNotSupportedException; +use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; +use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; +use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use Symfony\Bundle\SecurityBundle\Security; final readonly class CreateFromUrlHelper { - public function __construct(private Security $security, private ProviderRegistry $providerRegistry) + public function __construct(private Security $security, + private ProviderRegistry $providerRegistry, + private PartInfoRetriever $infoRetriever, + ) { } @@ -49,4 +56,54 @@ final readonly class CreateFromUrlHelper return $genericWebProvider->isActive() || $aiWebProvider->isActive(); } + + /** + * Delegates the URL to another provider if possible, otherwise return null + * @param string $url + * @return SearchResultDTO|null + */ + public function delegateToOtherProvider(string $url, InfoProviderInterface $callingInfoProvider): ?SearchResultDTO + { + //Extract domain from url: + $host = parse_url($url, PHP_URL_HOST); + if ($host === false || $host === null) { + return null; + } + + $provider = $this->providerRegistry->getProviderHandlingDomain($host); + + if ($provider !== null && $provider->isActive() && $provider->getProviderKey() !== $callingInfoProvider->getProviderKey()) { + try { + $id = $provider->getIDFromURL($url); + if ($id !== null) { + $results = $this->infoRetriever->searchByKeyword($id, [$provider]); + if (count($results) > 0) { + return $results[0]; + } + } + return null; + } catch (ProviderIDNotSupportedException $e) { + //Ignore and continue + return null; + } + } + + return null; + } + + /** + * Delegates the URL to another provider if possible and returns the details, otherwise return null + * @param string $url + * @param InfoProviderInterface $callingInfoProvider + * @return PartDetailDTO|null + */ + public function delegateToOtherProviderDetails(string $url, InfoProviderInterface $callingInfoProvider): ?PartDetailDTO + { + $delegatedResult = $this->delegateToOtherProvider($url, $callingInfoProvider); + if ($delegatedResult !== null) { + return $this->infoRetriever->getDetailsForSearchResult($delegatedResult); + } + + return null; + } } diff --git a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php index d53201cc..8fb7e4ec 100644 --- a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php @@ -27,6 +27,7 @@ namespace App\Services\InfoProviderSystem\Providers; use App\Exceptions\ProviderIDNotSupportedException; use App\Helpers\RandomizeUseragentHttpClient; use App\Services\AI\AIPlatformRegistry; +use App\Services\InfoProviderSystem\CreateFromUrlHelper; use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Settings\InfoProviderSystem\AIExtractorSettings; @@ -57,7 +58,8 @@ final class AIWebProvider implements InfoProviderInterface private readonly AIExtractorSettings $settings, private readonly AIPlatformRegistry $AIPlatformRegistry, private readonly DTOJsonSchemaConverter $jsonSchemaConverter, - private readonly CacheItemPoolInterface $partInfoCache + private readonly CacheItemPoolInterface $partInfoCache, + private readonly CreateFromUrlHelper $createFromUrlHelper, ) { //Use NoPrivateNetworkHttpClient to prevent SSRF vulnerabilities, and RandomizeUseragentHttpClient to make it harder for servers to block us $this->httpClient = (new RandomizeUseragentHttpClient(new NoPrivateNetworkHttpClient($httpClient)))->withOptions( @@ -90,9 +92,23 @@ final class AIWebProvider implements InfoProviderInterface public function searchByKeyword(string $keyword, array $options = []): array { + $url = $this->fixAndValidateURL($keyword); + + if (!($options[self::OPTION_SKIP_DELEGATION] ?? false)) { + //Before loading the page, try to delegate to another provider + $delegatedPart = $this->createFromUrlHelper->delegateToOtherProvider($url, $this); + if ($delegatedPart !== null) { + return [$delegatedPart]; + } + } + try { + + $new_options = $options; + $new_options[self::OPTION_SKIP_DELEGATION] = true; //Skip delegation for the getDetails call to prevent infinite loops + return [ - $this->getDetails($keyword, $options) + $this->getDetails($keyword, $new_options) ]; } catch (ProviderIDNotSupportedException $e) { return []; } @@ -102,6 +118,14 @@ final class AIWebProvider implements InfoProviderInterface { $url = $this->fixAndValidateURL($id); + if (!($options[self::OPTION_SKIP_DELEGATION] ?? false)) { + //Before loading the page, try to delegate to another provider + $delegatedPart = $this->createFromUrlHelper->delegateToOtherProviderDetails($url, $this); + if ($delegatedPart !== null) { + return $delegatedPart; + } + } + //Check if we have a cached result for this URL, to avoid unnecessary LLM calls, which can be slow and costly. $cacheKey = 'ai_web_'.hash('xxh3', $url); diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index 23eee528..06a9d4c1 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -25,6 +25,7 @@ namespace App\Services\InfoProviderSystem\Providers; use App\Exceptions\ProviderIDNotSupportedException; use App\Helpers\RandomizeUseragentHttpClient; +use App\Services\InfoProviderSystem\CreateFromUrlHelper; use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\PriceDTO; @@ -50,14 +51,12 @@ class GenericWebProvider implements InfoProviderInterface use FixAndValidateUrlTrait; - public const OPTION_CHECK_FOR_DELEGATION = 'check_for_delegation'; - public const DISTRIBUTOR_NAME = 'Website'; private readonly HttpClientInterface $httpClient; public function __construct(HttpClientInterface $httpClient, private readonly GenericWebProviderSettings $settings, - private readonly ProviderRegistry $providerRegistry, private readonly PartInfoRetriever $infoRetriever, + private readonly CreateFromUrlHelper $createFromUrlHelper, ) { //Use NoPrivateNetworkHttpClient to prevent SSRF vulnerabilities, and RandomizeUseragentHttpClient to make it harder for servers to block us @@ -93,15 +92,19 @@ class GenericWebProvider implements InfoProviderInterface { $url = $this->fixAndValidateURL($keyword); - //Before loading the page, try to delegate to another provider - $delegatedPart = $this->delegateToOtherProvider($url); - if ($delegatedPart !== null) { - return [$delegatedPart]; + if (!($options[self::OPTION_SKIP_DELEGATION] ?? false)) { + //Before loading the page, try to delegate to another provider + $delegatedPart = $this->createFromUrlHelper->delegateToOtherProvider($url, $this); + if ($delegatedPart !== null) { + return [$delegatedPart]; + } } try { + $new_options = $options; + $new_options[self::OPTION_SKIP_DELEGATION] = true; //Skip delegation for the getDetails call to prevent infinite loops return [ - $this->getDetails($keyword, [self::OPTION_CHECK_FOR_DELEGATION => false]) //We already tried delegation + $this->getDetails($keyword, $new_options) ]; } catch (ProviderIDNotSupportedException $e) { return []; } @@ -278,53 +281,16 @@ class GenericWebProvider implements InfoProviderInterface return null; } - /** - * Delegates the URL to another provider if possible, otherwise return null - * @param string $url - * @return SearchResultDTO|null - */ - private function delegateToOtherProvider(string $url): ?SearchResultDTO - { - //Extract domain from url: - $host = parse_url($url, PHP_URL_HOST); - if ($host === false || $host === null) { - return null; - } - - $provider = $this->providerRegistry->getProviderHandlingDomain($host); - - if ($provider !== null && $provider->isActive() && $provider->getProviderKey() !== $this->getProviderKey()) { - try { - $id = $provider->getIDFromURL($url); - if ($id !== null) { - $results = $this->infoRetriever->searchByKeyword($id, [$provider]); - if (count($results) > 0) { - return $results[0]; - } - } - return null; - } catch (ProviderIDNotSupportedException $e) { - //Ignore and continue - return null; - } - } - - return null; - } - - public function getDetails(string $id, array $options = []): PartDetailDTO { - //We check for delegation by default - $check_for_delegation = $options[self::OPTION_CHECK_FOR_DELEGATION] ?? true; $url = $this->fixAndValidateURL($id); - if ($check_for_delegation) { + if (!($options[self::OPTION_SKIP_DELEGATION] ?? false)) { //Before loading the page, try to delegate to another provider - $delegatedPart = $this->delegateToOtherProvider($url); + $delegatedPart = $this->createFromUrlHelper->delegateToOtherProviderDetails($url, $this); if ($delegatedPart !== null) { - return $this->infoRetriever->getDetailsForSearchResult($delegatedPart); + return $delegatedPart; } } diff --git a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php index 8896d94b..a6e073a5 100644 --- a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php +++ b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php @@ -29,6 +29,7 @@ use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; interface InfoProviderInterface { public const OPTION_NO_CACHE = 'no_cache'; // if set to true, the provider should not use any cache and retrieve fresh data from the source + public const OPTION_SKIP_DELEGATION = 'skip_delegation'; // if set to true, the provider should not delegate the request to other providers, even if it supports delegation. /** * Get information about this provider diff --git a/templates/info_providers/from_url/from_url.html.twig b/templates/info_providers/from_url/from_url.html.twig index 15aa225f..49d4b116 100644 --- a/templates/info_providers/from_url/from_url.html.twig +++ b/templates/info_providers/from_url/from_url.html.twig @@ -28,6 +28,7 @@
    {{ form_row(form.no_cache) }} + {{ form_row(form.skip_delegation) }}
    diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index cb071128..fc42c414 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13181,5 +13181,11 @@ Buerklin-API Authentication server: Ignore cache / Force fresh info retrieval + + + info_providers.from_url.skip_delegation + Do not delegate to specialized info providers + + From e437bb0b7bc75c72d62a175171bb0305555131d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 23:49:07 +0200 Subject: [PATCH 079/108] Improved translations of AI related stuff in settings --- src/Settings/AISettings/LMStudioSettings.php | 2 ++ translations/messages.en.xlf | 24 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/Settings/AISettings/LMStudioSettings.php b/src/Settings/AISettings/LMStudioSettings.php index 627961a9..2bdad06e 100644 --- a/src/Settings/AISettings/LMStudioSettings.php +++ b/src/Settings/AISettings/LMStudioSettings.php @@ -31,6 +31,7 @@ use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\Component\Form\Extension\Core\Type\UrlType; +use Symfony\Component\Translation\StaticMessage; use Symfony\Component\Translation\TranslatableMessage as TM; #[Settings(name: 'ai_lmstudio', label: new TM("settings.ai.lmstudio"))] @@ -41,6 +42,7 @@ class LMStudioSettings implements AIPlatformSettingsInterface #[SettingsParameter(label: new TM("settings.ai.lmstudio.hosturl"), formType: UrlType::class, + formOptions: ["attr" => ["placeholder" => new StaticMessage("http://localhost:1234")]], envVar: "AI_LMSTUDIO_HOSTURL", envVarMode: EnvVarMode::OVERWRITE)] public ?string $hostURL = null; diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index fc42c414..8af54745 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13187,5 +13187,29 @@ Buerklin-API Authentication server: Do not delegate to specialized info providers + + + settings.ips.ai_extractor + AI Web Extractor + + + + + settings.ips.ai_extractor.description + This info provider uses an large language model (LLM) to extract detailed part information from arbitary shop URLs. + + + + + settings.ai.openrouter.help + Access to many AI models via openrouter.ai + + + + + settings.ai.lmstudio.hosturl + Host URL + + From 9c317db260d8ee0c49cbd5575659fc28b996b647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 2 May 2026 23:51:34 +0200 Subject: [PATCH 080/108] Do not translate domain canopy domain settings choices This removes clutter from the translation panel --- src/Settings/InfoProviderSystem/CanopySettings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Settings/InfoProviderSystem/CanopySettings.php b/src/Settings/InfoProviderSystem/CanopySettings.php index 0858871b..3c97a80e 100644 --- a/src/Settings/InfoProviderSystem/CanopySettings.php +++ b/src/Settings/InfoProviderSystem/CanopySettings.php @@ -72,7 +72,7 @@ class CanopySettings /** * @var string The domain used internally for the API requests. This is not necessarily the same as the domain shown to the user, which is determined by the keys of the ALLOWED_DOMAINS constant */ - #[SettingsParameter(label: new TM("settings.ips.tme.country"), formType: ChoiceType::class, formOptions: ["choices" => self::ALLOWED_DOMAINS])] + #[SettingsParameter(label: new TM("settings.ips.tme.country"), formType: ChoiceType::class, formOptions: ["choices" => self::ALLOWED_DOMAINS, 'translation_domain' => false])] public string $domain = "DE"; /** From db86b8c33001bc1d871d4e33a830394d33635d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 00:08:00 +0200 Subject: [PATCH 081/108] Accept all models for openrouter ai provider --- src/Services/AI/AcceptAllModelsCatalog.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Services/AI/AcceptAllModelsCatalog.php b/src/Services/AI/AcceptAllModelsCatalog.php index bf590128..a2f5c33a 100644 --- a/src/Services/AI/AcceptAllModelsCatalog.php +++ b/src/Services/AI/AcceptAllModelsCatalog.php @@ -34,6 +34,7 @@ use Symfony\Component\DependencyInjection\Attribute\AsDecorator; * This is a workaround for outdated/incomplete model catalogs provided by AI platforms, which do not contain all available models, or do not update their catalogs frequently enough. */ #[AsDecorator('ai.platform.model_catalog.lmstudio')] +#[AsDecorator('ai.platform.model_catalog.openrouter')] final readonly class AcceptAllModelsCatalog implements ModelCatalogInterface { From 21bad8126237a10831dd0e40a037bc691323c47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 00:18:38 +0200 Subject: [PATCH 082/108] Fixed phpstan issues --- src/Controller/TypeaheadController.php | 4 ++-- src/Form/Settings/AiPlatformChoiceType.php | 2 +- src/Services/AI/AIPlatforms.php | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Controller/TypeaheadController.php b/src/Controller/TypeaheadController.php index c4cd5607..f7e15b6d 100644 --- a/src/Controller/TypeaheadController.php +++ b/src/Controller/TypeaheadController.php @@ -244,7 +244,7 @@ class TypeaheadController extends AbstractController $capability_filter = $request->query->getEnum('capability', Capability::class); - $models = $cache->get('ai_models_'.$platform->value.'_'.($capability_filter?->value ?? 'all'), + $models = $cache->get('ai_models_'.$platform->value.'_'.($capability_filter->value ?? 'all'), function (ItemInterface $item) use ($platformRegistry, $platform, $capability_filter) { $item->expiresAfter(3600); //Cache for 1 hour if ($capability_filter === null) { @@ -253,7 +253,7 @@ class TypeaheadController extends AbstractController //Otherwise filter the models by the capability return array_filter($platformRegistry->getPlatform($platform)->getModelCatalog()->getModels(), - static fn(array $model) => in_array($capability_filter, $model['capabilities'] ?? [], true) + static fn(array $model) => in_array($capability_filter, $model['capabilities'], true) ); }); diff --git a/src/Form/Settings/AiPlatformChoiceType.php b/src/Form/Settings/AiPlatformChoiceType.php index eb48d933..82ea66b2 100644 --- a/src/Form/Settings/AiPlatformChoiceType.php +++ b/src/Form/Settings/AiPlatformChoiceType.php @@ -41,7 +41,7 @@ final class AiPlatformChoiceType extends AbstractType { } - public function getParent(): ?string + public function getParent(): string { return EnumType::class; } diff --git a/src/Services/AI/AIPlatforms.php b/src/Services/AI/AIPlatforms.php index ec772cf3..2f4d6317 100644 --- a/src/Services/AI/AIPlatforms.php +++ b/src/Services/AI/AIPlatforms.php @@ -52,8 +52,6 @@ enum AIPlatforms: string implements TranslatableInterface return match ($this) { self::LMSTUDIO => LMStudioSettings::class, self::OPENROUTER => OpenRouterSettings::class, - - default => throw new \InvalidArgumentException(sprintf('No settings class defined for AI platform "%s".', $this->name)), }; } From a15a5efdcee1a3b0a21af8d2d1348b096996b857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 00:35:49 +0200 Subject: [PATCH 083/108] Added documentation about AI features --- README.md | 1 + docs/index.md | 1 + docs/usage/ai.md | 27 +++++++++++++++++++++++ docs/usage/information_provider_system.md | 13 +++++++++++ 4 files changed, 42 insertions(+) create mode 100644 docs/usage/ai.md diff --git a/README.md b/README.md index ad37e9c6..b857711f 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ for the first time. * Automatic thumbnail generation for pictures * Use cloud providers (like Octopart, Digikey, Farnell, LCSC or TME) to automatically get part information, datasheets, and prices for parts +* Retrieve part information from arbitrary shop websites, using either conventional data extraction from structured metadata, or AI based data extraction * API to access Part-DB from other applications/scripts * [Integration with KiCad](https://docs.part-db.de/usage/eda_integration.html): Use Part-DB as the central datasource for your KiCad and see available parts from Part-DB directly inside KiCad. diff --git a/docs/index.md b/docs/index.md index c2128946..700937f4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -47,6 +47,7 @@ It is installed on a web server and so can be accessed with any browser without * Easy migration from an existing PartKeepr instance (see [here]({%link partkeepr_migration.md %})) * Use cloud providers (like Octopart, Digikey, Farnell, Mouser, or TME) to automatically get part information, datasheets, and prices for parts (see [here]({% link usage/information_provider_system.md %})) +* Retrieve part information from arbitrary shop websites, using either conventional data extraction from structured metadata, or AI based data extraction * API to access Part-DB from other applications/scripts * [Integration with KiCad]({%link usage/eda_integration.md %}): Use Part-DB as the central datasource for your KiCad and see available parts from Part-DB directly inside KiCad. diff --git a/docs/usage/ai.md b/docs/usage/ai.md new file mode 100644 index 00000000..3a1fb419 --- /dev/null +++ b/docs/usage/ai.md @@ -0,0 +1,27 @@ +--- +layout: default +title: AI features +nav_order: 6 +parent: Usage +--- + +# AI features + +Part-DB can utilize large language Models (LLMs) to provide AI-powered features that can assist you in managing your parts and projects. +For now this is mostly the ability to extract part information from websites without any structured data. + +## AI platforms + +Part-DB is platform agnostic and can work with different AI platforms, both locally and in the cloud. They can be configured in the "AI" tab in the system settings. +Currently, the following platforms are supported: + +### OpenRouter + +[OpenRouter](https://openrouter.ai/) is a platform that provides access to various LLMs, including models from OpenAI, Anthropic, and more. +You can use OpenRouter to connect to different LLMs and use them for Part-DB's AI features. +You need to supply an API key for OpenRouter to use it as an AI platform in Part-DB. + +### LMStudio + +[LMStudio](https://lmstudio.ai/) is a local LLM hosting solution that allows you to run LLMs on your own hardware. You can use LMStudio to host your own LLM and connect it to Part-DB for AI features. +Currently only LMStudio without any authentication is supported. Supply your LMStudio instance URL (including the port) to use it as an AI platform in Part-DB. diff --git a/docs/usage/information_provider_system.md b/docs/usage/information_provider_system.md index 1600d76f..7cac6328 100644 --- a/docs/usage/information_provider_system.md +++ b/docs/usage/information_provider_system.md @@ -111,6 +111,19 @@ may have privacy and security implications. Following env configuration options are available: * `PROVIDER_GENERIC_WEB_ENABLED`: Set this to `1` to enable the Generic Web URL Provider (optional, default: `0`) +### AI Web Extractor +The AI web extractor provider can extract part information from any webpage using AI-based techniques. It is designed to handle unstructured data and can extract relevant information even from websites that do not use structured data formats like Schema.org. +This provider can be particularly useful for extracting information from websites that have complex layouts or do not follow standard e-commerce practices. +It also potentially extracts more detailed information than the Generic Web URL Provider, as it is not limited to the fields defined in the Schema.org format. + +To use the AI Web Extractor, you need to setup an AI platform, in the AI settings tab, and chose a model, which support structured output. +For many use cases a small and cheap model like `google/gemini-2.5-flash-lite` will be sufficient, coming down to costs like 0.003$ per request. +For more complex websites, or if you wanna use the LLM for translation purposes too, you should consider a more powerful model. + +You can add some additional instructions for the model, which gets added to the system prompt, to tweak the output of the model. + +The provider will download the HTML of the given URL, convert it to markdown and send it to the LLM toghether with structured data extracted from the webpage via conventional methods. + ### Octopart The Octopart provider uses the [Octopart / Nexar API](https://nexar.com/api) to search for parts and get information. From 45ed095509bbc057669b6a78e4bdf07cbe7fa4cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 00:49:26 +0200 Subject: [PATCH 084/108] Updated composer dependencies --- composer.lock | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/composer.lock b/composer.lock index 52eb5562..d9795640 100644 --- a/composer.lock +++ b/composer.lock @@ -17435,16 +17435,16 @@ }, { "name": "tecnickcom/tc-lib-barcode", - "version": "2.4.37", + "version": "2.4.39", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-barcode.git", - "reference": "86b89b0399797706a07c1fd4eec3158460b13f7f" + "reference": "11886fb5a44ec0f6e77302439e9ebf55034383fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/86b89b0399797706a07c1fd4eec3158460b13f7f", - "reference": "86b89b0399797706a07c1fd4eec3158460b13f7f", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/11886fb5a44ec0f6e77302439e9ebf55034383fa", + "reference": "11886fb5a44ec0f6e77302439e9ebf55034383fa", "shasum": "" }, "require": { @@ -17528,24 +17528,24 @@ }, "funding": [ { - "url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ", - "type": "custom" + "url": "https://github.com/sponsors/tecnickcom", + "type": "github" } ], - "time": "2026-04-30T19:47:34+00:00" + "time": "2026-05-01T19:04:12+00:00" }, { "name": "tecnickcom/tc-lib-color", - "version": "2.5.0", + "version": "2.5.3", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-color.git", - "reference": "ebb76dfb334b7a0b470e765a7b46c5635dce2fe0" + "reference": "136d522f1640723e490b79171e910e647403d971" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/ebb76dfb334b7a0b470e765a7b46c5635dce2fe0", - "reference": "ebb76dfb334b7a0b470e765a7b46c5635dce2fe0", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/136d522f1640723e490b79171e910e647403d971", + "reference": "136d522f1640723e490b79171e910e647403d971", "shasum": "" }, "require": { @@ -17598,11 +17598,11 @@ }, "funding": [ { - "url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ", - "type": "custom" + "url": "https://github.com/sponsors/tecnickcom", + "type": "github" } ], - "time": "2026-04-30T19:21:47+00:00" + "time": "2026-05-01T19:02:25+00:00" }, { "name": "thecodingmachine/safe", @@ -18550,7 +18550,7 @@ }, { "name": "web-auth/webauthn-lib", - "version": "5.3.0", + "version": "5.3.1", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", @@ -18620,7 +18620,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.0" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.1" }, "funding": [ { @@ -18636,7 +18636,7 @@ }, { "name": "web-auth/webauthn-symfony-bundle", - "version": "5.3.0", + "version": "5.3.1", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", @@ -18703,7 +18703,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.3.0" + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.3.1" }, "funding": [ { @@ -19543,16 +19543,16 @@ }, { "name": "phpstan/phpstan-strict-rules", - "version": "2.0.10", + "version": "2.0.11", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "1aba28b697c1e3b6bbec8a1725f8b11b6d3e5a5f" + "reference": "9b000a578b85b32945b358b172c7b20e91189024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/1aba28b697c1e3b6bbec8a1725f8b11b6d3e5a5f", - "reference": "1aba28b697c1e3b6bbec8a1725f8b11b6d3e5a5f", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/9b000a578b85b32945b358b172c7b20e91189024", + "reference": "9b000a578b85b32945b358b172c7b20e91189024", "shasum": "" }, "require": { @@ -19588,9 +19588,9 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.10" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.11" }, - "time": "2026-02-11T14:17:32+00:00" + "time": "2026-05-02T06:54:10+00:00" }, { "name": "phpstan/phpstan-symfony", From b7cfdc310065057f4d880d0505ee40d75a940f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 01:05:41 +0200 Subject: [PATCH 085/108] Bumped ckeditor to v48 and removed ckeditor-dev-utils, as they are no longer needed This removes also many transitive dependencies --- package.json | 4 +- webpack.config.js | 22 - yarn.lock | 3117 ++++++++++----------------------------------- 3 files changed, 679 insertions(+), 2464 deletions(-) diff --git a/package.json b/package.json index 172eabc0..99636d37 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,6 @@ "@algolia/autocomplete-js": "^1.17.0", "@algolia/autocomplete-plugin-recent-searches": "^1.17.0", "@algolia/autocomplete-theme-classic": "^1.17.0", - "@ckeditor/ckeditor5-dev-translations": "^53", - "@ckeditor/ckeditor5-dev-utils": "^53", "@jbtronics/bs-treeview": "^1.0.1", "@part-db/html5-qrcode": "^4.0.0", "@zxcvbn-ts/core": "^3.0.2", @@ -51,7 +49,7 @@ "bootbox": "^6.0.0", "bootswatch": "^5.1.3", "bs-custom-file-input": "^1.3.4", - "ckeditor5": "^47.0.0", + "ckeditor5": "^48.0.0", "clipboard": "^2.0.4", "compression-webpack-plugin": "^11.1.0", "datatables.net": "^2.0.0", diff --git a/webpack.config.js b/webpack.config.js index 08050353..18893d8b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -24,8 +24,6 @@ var Encore = require('@symfony/webpack-encore'); const zlib = require('zlib'); const CompressionPlugin = require("compression-webpack-plugin"); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -const { CKEditorTranslationsPlugin } = require( '@ckeditor/ckeditor5-dev-translations' ); -const { styles } = require( '@ckeditor/ckeditor5-dev-utils' ); // Manually configure the runtime environment if not already configured yet by the "encore" command. // It's useful when you use tools that rely on webpack.config.js file. @@ -123,13 +121,6 @@ Encore // uncomment if you're having problems with a jQuery plugin .autoProvidejQuery() - .addPlugin( new CKEditorTranslationsPlugin( { - // See https://ckeditor.com/docs/ckeditor5/latest/features/ui-language.html - language: 'en', - addMainLanguageTranslationsToAllAssets: true, - additionalLanguages: 'all', - outputDirectory: 'ckeditor_translations' - } ) ) // Use raw-loader for CKEditor 5 SVG files. .addRule( { @@ -142,19 +133,6 @@ Encore loader.exclude = /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/; } ) - // Configure PostCSS loader. - .addLoader({ - test: /ckeditor5-[^/\\]+[/\\]theme[/\\].+\.css$/, - loader: 'postcss-loader', - options: { - postcssOptions: styles.getPostCssConfig( { - themeImporter: { - themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) - }, - minify: true - } ) - } - } ) ; diff --git a/yarn.lock b/yarn.lock index 9a4991c2..f9948f76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -55,7 +55,7 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.8.tgz#33706300a2f711ac9386ec8008a0f119ffdccd7b" integrity sha512-FYmpeOyL5Wy444ZGp1IW57fevpMSBMewN37j+0WULMTJZGobnvTgVEKjYIgtv5Ku4/RNNp54rtEx2/OU6l8GYA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": +"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== @@ -252,7 +252,7 @@ "@babel/template" "^7.28.6" "@babel/types" "^7.29.0" -"@babel/parser@^7.18.9", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": +"@babel/parser@^7.28.6", "@babel/parser@^7.29.0": version "7.29.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.2.tgz#58bd50b9a7951d134988a1ae177a35ef9a703ba1" integrity sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA== @@ -816,7 +816,7 @@ "@babel/parser" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== @@ -837,526 +837,459 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.7.0.tgz#cc565157bfb2f48abf7d2179ffc0ad3a685a806c" - integrity sha512-pl+x7dSoGg5JBgmfxBtnegA8sFPRSmCPZ2DZHsfvMzndgCsNsOl0lENmk+aBjHMlEHfKv0mEdSTfUYI2aKJqSw== +"@ckeditor/ckeditor5-adapter-ckfinder@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-48.0.1.tgz#5124eca82c5f23d112f7c6a07207ba5d5bc7f044" + integrity sha512-qKrdKjiMmRvuXg6gV5vS+Z/fajl4TDa5aeiCQROR1RlNPO6oSxQJFjgYoE+nDMz2bkK08qbULnq86wgQtn+r+g== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-upload" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-upload" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-alignment@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.7.0.tgz#41829e54f45267f69fdff37cd1b34a924167b663" - integrity sha512-MKt0i5RB4dxng+sOTGe7UVTCFMMMYw6lrXHKZaI4yc00U+fLrVNLThs0PdBytPKynaz8kyZhkzOM1TGX6n6Dsg== +"@ckeditor/ckeditor5-alignment@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-48.0.1.tgz#667d7e8f995dba61ebd69798459567cc6ee4acad" + integrity sha512-ZvrIrz/VXX7o3SU9VnH1NxnqY16Mh2455pqpeB0YvdWOt4LFU+jwv/5S0EJGs2HqZJiD7NH+5zIS4PgmlKryBw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-autoformat@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.7.0.tgz#a21b6d5bd476f6b701ff15068dfa4177feca7ed3" - integrity sha512-B1fJBTxtoNwG1ucFz2rxYRI9rVawbRBgzQR0lgyfy4PkRvNGfKvqn72w1CEx9d2thPPAtJJ7zsYGTp4oFcbH/g== +"@ckeditor/ckeditor5-autoformat@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-48.0.1.tgz#b93be4215942862bd6a52ac2bd414e1138136e2b" + integrity sha512-gn/CbnAPuWWxxgkIXCqUbA0XeKRsWe2Sbc2/Bf+w7rPX5MdlQ1KpfNSTiiM6R76tbWqw3RiAqDRuj6dEYTb4pQ== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-heading" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-heading" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-autosave@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.7.0.tgz#224b31010610ca65362b6b9478575f12f9122a0b" - integrity sha512-B1qq3CMi+kjcJ9MUnmQ/cpB/Zc9sR3gw6fUhvnspcvSi9J+XSRQRJctMCIZDOrbtk6uMCBV4jXyGSUb6APx1ZQ== +"@ckeditor/ckeditor5-autosave@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-48.0.1.tgz#c26767950a32d61f1b46e43484978d117cc41bdb" + integrity sha512-9pUOznmE2gmLqjVz61NDN5KK0QRcNm+o+nheu/DyEFQfboaMFPo68rkZwi1zIkdVVoNXDjqBHkU4LTVTxZJbRg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-basic-styles@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.7.0.tgz#a599be6e8569ec080f67a71b558d7f86a636be7e" - integrity sha512-enl1GhyyB0gpafbJ0w3IMol1BYTKfveCWvvLHRdqeBUHGYv3ixIAQC+gpMPLXv0dpQZLJYuJ47EglY+hjSOxXQ== +"@ckeditor/ckeditor5-basic-styles@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-48.0.1.tgz#efc04e9f75f5c2f1c23f0a3a9eaf6f900e9df524" + integrity sha512-XEdxIhB/mD9Nwd/rQK6RxtKwwVC+Nd/V1MKv4hbsKd98L8HNjWHDUY2ApXg9dAr4KdpDzDjvhT9QYJsYdQ6A8Q== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-block-quote@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.7.0.tgz#b665788d175e183be7b055eb39db2681ff95daa6" - integrity sha512-J5/CdFPL2M1x5/ko2Zr+24GhLzWuPGAO0MBo/7Wz319mPy8C7Jk2Eyjk3APwaYbJFq395RpOaqZCz3I2ROgYMA== +"@ckeditor/ckeditor5-block-quote@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-48.0.1.tgz#1f89b7d6ff2c79cdfdda7a6a6cc92d0972df6306" + integrity sha512-LWTl++pcvzxp8FL5LIyFV7bCTYU/ScFqikavPYmloVdAlusd1DAqutHxyCEADGfQZgPmG2TUVqWCBp6FQfDfzA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-bookmark@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.7.0.tgz#39fbd0fb419faa98662884d0b75babae1a265205" - integrity sha512-LeKmsvQL+9LVKwA1Ki1tNrB90zXW/lPOVgJePxax/eDfJ4wB+rwvpddmESL6Kyayh4akK6jIdqFSTWCmOzbaKA== +"@ckeditor/ckeditor5-bookmark@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-48.0.1.tgz#aee53f084c0895f9c430b900d7a2153a0602acbb" + integrity sha512-N293hFCKt95dIFGphO1Z91qvQfgUc4wUSslqXmSFY+Rsmjr6efo42Q85oukH4WPrYjOjVmYoajqXzNU7QYGdxA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-link" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-link" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" -"@ckeditor/ckeditor5-ckbox@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.7.0.tgz#c949ef81991a40a802857983050f11eb2a558b7a" - integrity sha512-yQd9JeaT4v2xcnRZq1zCCc3TKcHQ8i/6PzB8H4r8JdlHv52HzMVs6ID/Dh989AWiUWcVirTuRC5HXVLECqUOVg== +"@ckeditor/ckeditor5-ckbox@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-48.0.1.tgz#51fddb7abaa076a5192e0f790c3c2bf79fbe1013" + integrity sha512-n6o7szp3u4aHMkENBV4VWaPIhp5Zn7UwQfHoVDfYKGN2YHyRenzjmLmDZW9QP/5rXYsPHMQjYVBW8CiTVNIYqQ== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-image" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-upload" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-cloud-services" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-image" "48.0.1" + "@ckeditor/ckeditor5-link" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-upload" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" blurhash "2.0.5" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-ckfinder@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.7.0.tgz#0f35eb0bd718f73e73c1122eaa51e88f94014b8d" - integrity sha512-CJ8OwQhPA+GE9wxRcRf+e9H09pKQP84qlMY8R52yEKxlGx13t4S6XD+hknCVJ000urH/XAmpdHaPDc2XZ1X+pw== +"@ckeditor/ckeditor5-ckfinder@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-48.0.1.tgz#50d6549ea1141a2000cc946e33241ca596e64bf7" + integrity sha512-UC/oMyN5XKcjwc95hPCWcRQvzNfMCcwsrfJN4CoV/EUgQRuc4g1oUCEAgiZxrNDbHsovY5wLIuPjLIbYihJctA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-image" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-adapter-ckfinder" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-image" "48.0.1" + "@ckeditor/ckeditor5-link" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-clipboard@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.7.0.tgz#c9f30b247256032da4cef19bd2975be6dd6be5e7" - integrity sha512-cW1L289XXylwUWj9hy927fZJ+ygFZIV+5Y4cmTuf4htMuXYKOrMSDMraMc3Py8/I4nvdkegRKLDrbHmgtTBiFQ== +"@ckeditor/ckeditor5-clipboard@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-48.0.1.tgz#9507bcb0d3b3daa9e30c42930ea07817942d3ed3" + integrity sha512-uAS/vlrGZ3xGpRv4r1gr/gEp+5rUenHJsga9sLj0KXgkvg8wnbzY/hC0s58YOFRjOXQvMgkAwabvlDuRNQKWqg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-cloud-services@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.7.0.tgz#9937371c3ea61e2e55198d377d8c36acc368c507" - integrity sha512-Oic9q89t12xa7uBkzLcuF/QyUCieXFjQ5Wv5fs24+Z7mlM0kGgRlCtHHlPIw0PgwpEmk5ACWTI0TVHUpLRPJ+w== +"@ckeditor/ckeditor5-cloud-services@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-48.0.1.tgz#3d24ddabd5395e88dd95aa151cc717f9fdaecb8c" + integrity sha512-U4TSzsqnzNQ5nVogqFONL+FuQ0F8i0dzUxcSIVwgVsRojbZs0zuufHvpLy4sYDK8qJD4MZhEkcKG0FlwNNwcqQ== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-upload" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-code-block@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.7.0.tgz#097dd7c177acff173badbf6fc0204fca447f8a21" - integrity sha512-qu5CIpschxz47Z7WCn6y/2jsK8oHReQElB35njtSVUwgOcGG2n2hxCbRnEBxM0Fllh3inIwAp56s8GUsyyiv1A== +"@ckeditor/ckeditor5-code-block@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-48.0.1.tgz#822a57d2247762ffd885eaddc3dfa4cdf2f8b85f" + integrity sha512-728KFsW6Uj5Wpv+0hUEyqyLIW56Mt8EbaVjrhc3EXEKgI39vHOjgsfnxKeXmsW3Y+DDLhfx6JE5MAaIRqrGYeQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-core@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.7.0.tgz#c0fcb55cec1c1b5f851275688c0823aa8edcab84" - integrity sha512-ock9l03yxBIDHu9t+Usi3Yrx/+UKCB90aK/9DlbKp8bizwZh/48C0YOFuvY64YX/RjiXndL3VMCCYCaWzODdOw== +"@ckeditor/ckeditor5-core@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-48.0.1.tgz#eb93ffffa8f59e72403ac17854293885c428db00" + integrity sha512-jhAMvv4GCD8aPWBdYC2RFS/xtuTubgGfSKGabG5cDFn1uHv+sGIiFdLEV8jhNFKrRgdEd2jT90KYx73izdm9jw== dependencies: - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-watchdog" "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-watchdog" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-dev-translations@^53", "@ckeditor/ckeditor5-dev-translations@^53.4.0": - version "53.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-translations/-/ckeditor5-dev-translations-53.4.0.tgz#3b76d6825aadcf9c183cbc8a712033f59d860346" - integrity sha512-e76aPDJkbJen3W18QiddkklsM0V6NdBXL3pLDmnSKPqIDbknOh49Ov/ciDwxWqMIKDqf9n5PnTaRXIDONUO0TA== +"@ckeditor/ckeditor5-easy-image@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-48.0.1.tgz#2c8d1995052c6c25b689b33843fb376a65e94033" + integrity sha512-mXtS87krxR1infQ/7BIS2kY4h5dLPdJhIyPyr15W6MlT48j79CG3OfWFeXUO11RsKHFs9oB+bIqLCb8wq5Tt3w== dependencies: - "@babel/parser" "^7.18.9" - "@babel/traverse" "^7.18.9" - "@ckeditor/ckeditor5-dev-utils" "^53.4.0" - chalk "^5.0.0" - fs-extra "^11.0.0" - glob "^11.0.2" - plural-forms "^0.5.5" - pofile "^1.1.4" - rimraf "^6.0.1" - upath "^2.0.1" - webpack-sources "^3.0.0" + "@ckeditor/ckeditor5-cloud-services" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-image" "48.0.1" + "@ckeditor/ckeditor5-upload" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-dev-utils@^53", "@ckeditor/ckeditor5-dev-utils@^53.4.0": - version "53.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-53.4.0.tgz#0670275678525c8ee326fb39192256c6ac9c9c19" - integrity sha512-Ppd7MsgpeVWO5xJ9x1qcYN+ar7Cb41w8WSiJFE2VvsY7wDCxIa3FffK3adB01qFa8+criH3lzhy93PiUfm0h7w== +"@ckeditor/ckeditor5-editor-balloon@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-48.0.1.tgz#bb55c5cb78f1bf2103dfaf74b6e6ee9a3ce479e0" + integrity sha512-wpYCOpNdh4DWkGsuYX9IxK0Ednij4KecvqTcFhKS6rswkiY6dfDJq89qKuyHvOZA5Mw2cElaCCX8ogY/xKeQ5Q== dependencies: - "@ckeditor/ckeditor5-dev-translations" "^53.4.0" - "@types/postcss-import" "^14.0.3" - "@types/through2" "^2.0.41" - babel-loader "^10.0.0" - chalk "^5.0.0" - cli-cursor "^5.0.0" - cli-spinners "^3.0.0" - css-loader "^7.0.0" - cssnano "^7.0.0" - esbuild-loader "^4.0.0" - fs-extra "^11.0.0" - glob "^11.0.2" - is-interactive "^2.0.0" - mini-css-extract-plugin "^2.4.2" - mocha "^11.1.0" - pacote "^21.0.0" - postcss "^8.4.12" - postcss-import "^16.0.0" - postcss-loader "^8.0.0" - postcss-mixins "^11.0.0" - postcss-nesting "^13.0.0" - raw-loader "^4.0.1" - shelljs "^0.10.0" - simple-git "^3.27.0" - style-loader "^4.0.0" - terser-webpack-plugin "^5.0.0" - through2 "^4.0.0" - upath "^2.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-easy-image@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.7.0.tgz#04a7424c5041025f9d0c92642035dee67119b406" - integrity sha512-gk3KDAawRvr8HprcoySSl/t7pkYgVZDnZQP6dVrzyFHo5xyPxkW1DLQFsiqwVAJPr12PVBnkYUGycTwFRf2e7Q== +"@ckeditor/ckeditor5-editor-classic@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-48.0.1.tgz#0e571a7a0e52ec2a88edbb708d46e7fe4ff62b69" + integrity sha512-EUtLco5ZP1b8EsBULlh+CJ+R2QSHpTPTe43TyugsjHR2Ead03XkhR6Xw1Wbd2KBJjlgrHOi3XuXpQNtFlbZtnQ== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-upload" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-balloon@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.7.0.tgz#3b6c433d82926c930846d6d1669318f19aab83ea" - integrity sha512-VyUa59C5hTpXW8DWjRnJsdHMkQiDOCjg7bCni7/u/9XcrgYbUWVSc4PThh4H104pS9TJSyIKyCSf+OqpyCqArA== +"@ckeditor/ckeditor5-editor-decoupled@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-48.0.1.tgz#df62cf6ec1f221c5e5d25a36646aa4da0697d053" + integrity sha512-NrIjEoqpuxd+FNbI6HxW8GIskjc+s7I5LGkOfyl9BcBcVNjEfqAHmfK59X7xuZ6uPxse8X61BFgDini+qgYdHg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-classic@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.7.0.tgz#19efbb090601c42604db876d990260b5987eb076" - integrity sha512-iwLgAqrnc4Eu9YfQHTcgmrztPUgOj2Zyc8I3725WnRO2vil9Y6qFDx7JXYt3MhOfj358/D/ncIjSL0YSmyWgkw== +"@ckeditor/ckeditor5-editor-inline@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-48.0.1.tgz#fffc0e0c0e0a565a5f1fc7465e00bc84c263dbc8" + integrity sha512-ZJlG0DH548aqcNzvWAIwWrg9cOXBBv7DBKwCCPTk6D4x0VdGXnaaewdbIIj6gxIip6j9k3+YDjsloPDFAzoyBw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-decoupled@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.7.0.tgz#a245bd370464493231d89c5956b5e1b49179e9e6" - integrity sha512-qQectSzm8heNQqkaaj+wx8YXKBmuiHp0F0IneQrcruPK7UScQ8pYF83k3NO+wCga4AtPXki5IDgM3VRN/6xuiQ== +"@ckeditor/ckeditor5-editor-multi-root@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-48.0.1.tgz#5d9b139be8277eb182239ecc8768dc4758d1472c" + integrity sha512-wu0YK4QrOGUqfAvb47nSJuC3PWUJUmKS/7qY8MOyBppoa9jrHxzsnjyMvzTNBpbMy5h0qB5OXeT0nCpF1Z22oA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-editor-inline@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.7.0.tgz#73ffc87e18e5689000bedc58471e34c756d125ff" - integrity sha512-deXc6pqT/no8zIyKnydfazK3fXXOrgkuP+4AMwNrkEqB17anWduC5LcUN0OcYz9AdEECpUsNMoONkvpdMsIS6Q== +"@ckeditor/ckeditor5-emoji@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-48.0.1.tgz#4cecb17be007b77993a9fbbc561acedd1fc3a4bc" + integrity sha512-z1iTGRNwZ9zvIqLQSCr/aL2/kq/xmBMdat5j86//cG1Dv9a5TgwbhUBu9EZJLQvFnZ7FF18peX2mYY/MAyklhA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" - -"@ckeditor/ckeditor5-editor-multi-root@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.7.0.tgz#ad12bfb6cefe71085d9263bfd18a9ff2ca1ea7c5" - integrity sha512-yvJPqmm5F3Oy8QQBHhGJj2vRKWyPcbmBjQ9Y68efeMwzwVl8toELTs7Ro6Kx8bYhIxjz3MphGExSqIQXxadZCg== - dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" - -"@ckeditor/ckeditor5-emoji@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.7.0.tgz#58aa3bc2380b34297492e5d84265b131d09dfc60" - integrity sha512-bXXuPnFsDVvv7LZKoiPGKabncpKha3MNcyzseoJ+I9Ong33YUtAKwFlXje5Tuc6dp+mrDUjuRGxk0raXetj3HA== - dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-mention" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-mention" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.7.0.tgz#745faf784de5120e81c2018332524b1215ba767c" - integrity sha512-RSeJPqi0dEaJmPqisaeQwRoouKsnvAJGnBmpAzQR8eVZh4qrP7+Ek+GwSbAo5iZkhNHfmurQSF7pxQsPc/020w== +"@ckeditor/ckeditor5-engine@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-48.0.1.tgz#95825069321034aa11dc017f9188651856152b0d" + integrity sha512-qT+SOBibvH3pr4I08myvyDLv09tofA83umwsA4Mk8sG+9yqeEx2AEKUP8lu6sUzfe/WKLwOUIAT3TAWWt+Oheg== dependencies: - "@ckeditor/ckeditor5-utils" "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-enter@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.7.0.tgz#2c103f0f7decea1282c51dd30bfdf81d60e7e390" - integrity sha512-nU5vOxTBA/6UCa2qccQvPo/Aq9d9p8g9D45jlCaPJdsqf1YJO1baxpz+1qAqjCS1MfpyaarGiQ4YAhM6GEMC1g== +"@ckeditor/ckeditor5-enter@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-48.0.1.tgz#4e9368c341b509f023a23a65bd54538543643440" + integrity sha512-U48yfgYvtKNJbVO2E72KrFJjFkR06nkb//zA5uubEuwPYVQi/L3AWaXsPEviowq6Hv2nZHmOF0YcKqgNyHuBUA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-essentials@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.7.0.tgz#a6153af07a9b8607e46b61ff26f83fd5d9b5d735" - integrity sha512-h95DiV1Vbi3UtwFigM2m+2gjZtvNqU1ryIqINOaArikpqcMj5fZ6N8QblBwNSaeWwMTLIBXMJpck26g+C4zPHA== +"@ckeditor/ckeditor5-essentials@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-48.0.1.tgz#7c13f61ac18a2a814368ed6124b1c46894fae845" + integrity sha512-wLiEhL11pQBAGWRCx5mWn0FSZOUq2bTvAnAQIVLUitz3pJcH4GQsAUrCfGRLm6ZRyy+oU69MddSVFeLl1Dqs7g== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-select-all" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-undo" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-select-all" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-undo" "48.0.1" -"@ckeditor/ckeditor5-find-and-replace@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.7.0.tgz#839c917476eae202f466fa620e58f488aa5f79d1" - integrity sha512-es2Vqsh3OCQsBUdNCC8FEIPaIM7pP9jAH4w42E4/qnnZO56xjbiQAW/TNISswYiyfrhHFt6OAIVadvq5llWdyA== +"@ckeditor/ckeditor5-find-and-replace@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-48.0.1.tgz#6bd78df79f3366fe0a5e3ac4ba226f1ca889ed5d" + integrity sha512-tfyvqZRV8BC0w0c/YCpWAyIhVVce09Z/NLcptwLkFlH3pXAoYt3iOMdctmGCNXMCFaH+J21B89hNox3twmQJqw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-font@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.7.0.tgz#bf4b6158bedad9da112aef68a42a2f7a9210ebac" - integrity sha512-QJalhR9CA6tlxVydqwUv3Hunzy9oI9hqkzt4D6din1CIR+xxxp4Wokr3Zkae22jFzT7KrI7k7wAA9uD87Lu+sg== +"@ckeditor/ckeditor5-font@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-48.0.1.tgz#a977d55f294b3e38001220c2ca8a9968929fa171" + integrity sha512-mbYk3b9XGNYi6+jQ/9Rkl25RvqzPfZCZ2RMuznwSre+wrlcnLHiyJULOen5aesuhQcOVJKloVwzV7YQu+aKUXg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-fullscreen@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.7.0.tgz#cf7003c46e4ef255d28cd366a222feace4eb49e1" - integrity sha512-nOul8Dc7xeRGr84rvmoAKrAwSsWghUxPCMalLt74JVMqJR9F8pq9Yyi0Dd/5VI2X8wNCZ6IBnTQDoNbmEHN2sg== +"@ckeditor/ckeditor5-fullscreen@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-48.0.1.tgz#22838b778c7b2538a8173bac9b3ecc56009aa98d" + integrity sha512-ZczSnvffikjGUTZc8AimIrFza7ugGkDhA9v/MxWYDz8u5fvkNUO6LsJ/dM3flAQo7QbFpjf48apj1pRo2wxBCg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-editor-classic" "47.7.0" - "@ckeditor/ckeditor5-editor-decoupled" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-editor-classic" "48.0.1" + "@ckeditor/ckeditor5-editor-decoupled" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-heading@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.7.0.tgz#9f56ba371bfe1c54dae83e58cb60729c0ede9ad0" - integrity sha512-6W/7lzqNOBxhDzU+cPsBJGeRZgc44Ybaph/hmU9QHEUYdYMcPX4nCHtd5C5ydI21dWvXb2g+YLyMIbtS0m8TkQ== +"@ckeditor/ckeditor5-heading@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-48.0.1.tgz#a7b6cd10c5e0dd787c7d787fc603a8fb8b9d7e20" + integrity sha512-s/6Lx1mlTomyd5o0pE7LiqfSJfUPB3gE018lZqxKjNOPqDnZ+tuzoXxHpJnmA/Ir06giSVXxpM1LkzDL6qtROg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-paragraph" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-paragraph" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-highlight@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.7.0.tgz#ea3c6b249c0d24fecd1d81b37a4507c2d31e5f55" - integrity sha512-XTDHEMG4hyX6+eFEoJMyWzUTShWNn2If0bBr2A5YiEAVhPDVdv0zygT7V45npBDD0ja3qlLbfhSeSUfDg+c5uQ== +"@ckeditor/ckeditor5-highlight@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-48.0.1.tgz#24fd0a13d3c55df2bd1d86db23cf361b19ff672d" + integrity sha512-2Ho4bVzZDd+uZ9IujbfLGZubCugGenGddFbyZ90TT7fQGuDMcYwpsc7p655cdDOeJ0BiyYXA01gN74AK13Hf7g== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-horizontal-line@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.7.0.tgz#fb0f08a270009671eb9b2b1aef8569f199bd0f39" - integrity sha512-v+dbreSLaNFk0XrSCs2hvT4OK2JC5KTtrr8DBqq//LW7uIrW6WbONX5NksO4Pc+qRRH0k9vrd1mW3EG5MA6G8w== +"@ckeditor/ckeditor5-horizontal-line@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-48.0.1.tgz#44858471499c799e03f981900e7cbe332b4c1c60" + integrity sha512-YqUtXT8uXzCKVtv5YSq7DRItelU0+tHzTmUbxoTPNaEbW2qmKqJSzKeq1VYO6hMtyrLZKyBDmYrXf7aFAzy6Vg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" -"@ckeditor/ckeditor5-html-embed@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.7.0.tgz#0a898dc62853da5d9b4461e3f17b4dab88de689b" - integrity sha512-0gyJLXkE8V9kLVLSWa71biNN49FeqkJbDe26eIeT1baqmoFDUeGmiZZLVOgHGa8oCXUixnJDDho06gOrEHy42w== +"@ckeditor/ckeditor5-html-embed@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-48.0.1.tgz#b284ca6f931799a8eae96d713fc36b01942118ac" + integrity sha512-Y1g0iP3JVZ8Ff73XeT/5lbXzX7lmhyM7v+4sC8g+zNP7++48KKHCJGrbbllESJ/oEWX6mmsFOJJy7L0yREQHHw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" -"@ckeditor/ckeditor5-html-support@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.7.0.tgz#39483a55dddf8438c12fd2f25e16121c95561772" - integrity sha512-mczD/kr63l2QR4Pt+uJYGpvRvh96U82hTb0EJkqYei8IfWYXlsoaQxo0pQ6VoK8uOcLU0GCT5Sj2ruDnUd4uvw== +"@ckeditor/ckeditor5-html-support@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-48.0.1.tgz#73c7461fd340997acc9c8d3f6f93f5bb9a93dab3" + integrity sha512-zM1co42HVyRJlOoG+fqjlD5CuTQ4dnNONt/a14Hr8taTGODnA967VXRoakVqjEo/e5FiWXThsBZRy3GoRIWjQA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-heading" "47.7.0" - "@ckeditor/ckeditor5-image" "47.7.0" - "@ckeditor/ckeditor5-list" "47.7.0" - "@ckeditor/ckeditor5-remove-format" "47.7.0" - "@ckeditor/ckeditor5-table" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-heading" "48.0.1" + "@ckeditor/ckeditor5-image" "48.0.1" + "@ckeditor/ckeditor5-list" "48.0.1" + "@ckeditor/ckeditor5-remove-format" "48.0.1" + "@ckeditor/ckeditor5-table" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-icons@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.7.0.tgz#b35c3c62990198ca422938f904764eaa34bce913" - integrity sha512-4g4uH43E3EX9Sg4e8VYzaeD/GJINQlC1Zp8Gqdp22LRfQCXbkReVl/6dEZy//tmDm/9sBGzCSFXF4OhjowMS1Q== +"@ckeditor/ckeditor5-icons@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-48.0.1.tgz#ca04369f2381d13e13658b18de008827080019bc" + integrity sha512-aulG/+JEtn5R1Ku0pygKfYffQfARqaEB5l7g50JFvnXDSpUGHP/mx1EbzzvdNyiAAl67PpIGe8VtxyovxC5u5Q== -"@ckeditor/ckeditor5-image@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.7.0.tgz#70fccd666f3f7b6811458c942ac355c797905ec8" - integrity sha512-iTcZM9IsrhOqBZMKVv7fIU/j0ycDQgBwegCMUGHF/ZNpsAxLExSb47m3lo1SZIxINq+1D51aa6NkPGAyGubTHg== +"@ckeditor/ckeditor5-image@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-48.0.1.tgz#39589bc1c036ff785a64e90977d6bbdb26cd27fa" + integrity sha512-ISfJBqYISHo+3p++GNCTXvNSWq88XAMugyyOQWoY7oxsbfOsqsqZ5e+MjjrWgzUNKOlzR/VRzuPHTN/r4sfQtw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-undo" "47.7.0" - "@ckeditor/ckeditor5-upload" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-undo" "48.0.1" + "@ckeditor/ckeditor5-upload" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-indent@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.7.0.tgz#2b6f6996747ebab9c02ea0829cfd6f620f472017" - integrity sha512-CVmYtH3ATma0tQdaZt9hHM3j5bf8bNLbPW+99wLPnI8BMqVG+cCEUc/PuqJqq/OcUXkkrfQYUgvZ8Ki7TRGcbw== +"@ckeditor/ckeditor5-indent@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-48.0.1.tgz#af8a841c12c72aadb20eeb9e02eb0576d6c6ed7c" + integrity sha512-0YShggoO85v9WILMF07Ld9afhcpekH8NeH76QYSoBQm7hk5RRUVbAFRHnTTxXwe8KY02m/mymgtHoToZFnrZeg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-heading" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-list" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-heading" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-list" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-language@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.7.0.tgz#01748eb57b1c7c8ff8063e00e0a6df2124435a87" - integrity sha512-VsxHrcqPpojGwP+l7ZS31HrNbGIYnU57pZZH2vySvSMHB5HePGmwj9KqOtR2g1VPvZaET/1ODQRMBo+2kUk/iA== +"@ckeditor/ckeditor5-language@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-48.0.1.tgz#b7f6dc026cd69275dcb08b4211673b0184b3e69e" + integrity sha512-5pwHJFGnxId1XHg9kw9ufwDxL7ott6jT7arhoPM0C3n60XwNIf9znjjmjPtkdAR/m9+EgDSADhqSyXwIdbwyqw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-link@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.7.0.tgz#16a02d763d8bb15d0b70644eb9cff64ce5d7c72b" - integrity sha512-+ZydBFDnUYYNGhlB8wYsMOUQB+UmnU+Xlq40ld5opFxlKGMCnj/+FnyynzEj1i1wPdbaMVjUTEkojz1K/TzttQ== +"@ckeditor/ckeditor5-link@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-48.0.1.tgz#d87d9cd8f2dfb590502340f3a57a83cdcf3dc862" + integrity sha512-giGxJeWN16eS5yYm+11QOjrXFocXfknfpmvyZlRYJ7NEwruYxUuf1Co5je5x/8iKBD2Qb6RLOzhBWF2WNWvErQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-image" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-image" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-list@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.7.0.tgz#c3c477dbe2b53e0959e393e6f9bc77672413aedc" - integrity sha512-cZ/HAaVg2nPmCPpT9Ts4vGCN5XEEMnFQhKvd9J+hjOCfAZVH8dQCGIIpk+7fQIjs8i33mk8VefsSLFlZAxLUwQ== +"@ckeditor/ckeditor5-list@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-48.0.1.tgz#2e41327a007fb5ca6e555c0be6e85bce7f57dc5a" + integrity sha512-LOjn8ZDPjI2seVRUrNGqgK6csoUGNjywmJ3CyaH2U64AkXWzQ7uTvli8WkeU3XCwIjx3E11W/dwYH69k7KKX3g== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-font" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-font" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-markdown-gfm@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.7.0.tgz#a99234f8ac05902fb3db22ca4381e1ff671e439e" - integrity sha512-DgsROdfPXcF0YHzv7WbGTf4F4Li4uTYMOaI1uIPeDtkAovA+kdHjemB7/U7ZcqcphxCTrkTZYC+d0XY3ceakoQ== +"@ckeditor/ckeditor5-markdown-gfm@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-48.0.1.tgz#8593dc571deb9bb12436c4544e14ce61c585ef0c" + integrity sha512-c2uYCOSgBD9yAm2T6jh368QCfCytzl9UuM0+E/tDn8hLizBUVgAAHOrhmLOWEcKcuFW5OoJ7ly9JmL7WWKLuaw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" "@types/hast" "3.0.4" - ckeditor5 "47.7.0" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1372,423 +1305,270 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.7.0.tgz#c86629201a0857c522f4a775e4b7484c314ca7d7" - integrity sha512-RwtLuL73Ld/JoOXQobmUwZYtExtfwId3FETmzqXkVr4OT7+tYdyxDuRbELBjw0fHCPCndR90/mzlYftMbVIK+A== +"@ckeditor/ckeditor5-media-embed@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-48.0.1.tgz#3fb3a5b10d74757f3633b2b54c09606b3d2875df" + integrity sha512-npwJbS+++Vf4uLYC92cLzJGRav2fH4dPwkk7L+O1UCvf5Kg3XpP53nf9a5bIk75WLWlJnm/15Z3RMH/oTPbVNA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-undo" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-undo" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" -"@ckeditor/ckeditor5-mention@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.7.0.tgz#2a690b99530511a4ff1f92e30be5270722c89771" - integrity sha512-VLsXMWzUBz32/peIUJo0Q0hpKuEuvbmeyBLTMg+xtDquMtur2skKqvasHFW8HxJCHGCE9x57NDfVyNoeITMApQ== +"@ckeditor/ckeditor5-mention@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-48.0.1.tgz#fc4257d18a1ac8bd133177a8a87b1ebc08c8bd42" + integrity sha512-Dxidz6L+XTSGsOpzqyG0mdOKWo5XJleglZ3AjhGz7nKjcbEbQUF9PKD/FdaUi/XYJFjRcdDq8VFHUzTZ5/Zl1A== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-minimap@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.7.0.tgz#5b40cacb35182ffa1b6864da7b446c58da5d1cc7" - integrity sha512-okM1UYc83CWyrtQXZXNGK+2GICjrEgE7DGAR9ZD0RxVvNm00tGTRuM2pTEhRvbMQIN3dyrfYpzo5/EQt8X2hMw== +"@ckeditor/ckeditor5-minimap@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-48.0.1.tgz#fec2b968df751f0d438c51c8b44db28acd1b8a2c" + integrity sha512-XdqzY0KOJ9ouzz8LhoCGzLUUDmAYGU0mQ6IPlrmr0cpMS6RaMQA5kdr3YzSKIBZE56pWlRlMnGLvuqcGlqFQiw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-page-break@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.7.0.tgz#f91d8ed9b4c914afe2fc0192ab2df6ad2c234205" - integrity sha512-gxdDmu5R8VPLL6jEsycIIESUH74d+aK/8rqpvVIFkpUmGmMiLxYkpD4++5mN/1uD037kvEOvI/y+L1qH7NN5dw== +"@ckeditor/ckeditor5-page-break@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-48.0.1.tgz#b24e98e0059cd5d2a225394df7655295b7bcf1cc" + integrity sha512-ojacQc8bpkcVCon/wAXMgcws8+YQCdbDbHZehCVVtZz6knImC4y5lEcrMS1M4NqhBcGTynL7nHi/MDiw4Ry3Fw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" -"@ckeditor/ckeditor5-paragraph@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.7.0.tgz#57b643db328464e31b431d34112a7c1391341e04" - integrity sha512-4yEdALU/UT1lR/7GBm1n5u0Id30m8MmIvQ67fbmDBWK+eqH+MFLobpBMEmuU4KLBeRU5qhX4JapZPUNBOHa1YQ== +"@ckeditor/ckeditor5-paragraph@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-48.0.1.tgz#67af00da1c9b60192c5c57f7feff3a024a3450fd" + integrity sha512-/+EXLxRk8G8qcm5g6xOG2vuFd8Wq2jdGsoHNiqRa8pJnSHRMlT8+olT4tzV4FzGtaGvcTfodCjVobDhbfJNrWA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-paste-from-office@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.7.0.tgz#8648e5dbb5b6344f82f5a1fb6ca4408900f79ad2" - integrity sha512-MNFJITMDP+ar01pERwIRyrhiSkAyvwfP2LZEPzHI952guhx7SprTOC/GzcTf9mK7wabESb1uI194Xa/5Fym8wQ== +"@ckeditor/ckeditor5-paste-from-office@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-48.0.1.tgz#70e60e8f13f7c7ae9f621d0ae19f38e4d0ae0b92" + integrity sha512-vla3v7zsLz6JctSnn4XzxexE2DH6bpF7A4BNYsIsS1qeBIYmuvOU0gsVI6+viBQTGfDx++p1GGar7XuaR0loUA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" -"@ckeditor/ckeditor5-remove-format@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.7.0.tgz#1455b7fda38f27c6adbbfb85a0d201a80153c1f4" - integrity sha512-pCwoN2oqAuQ58fgsKyTWpfakCn3o+g9hH225IcJwq9IXiEHgvbvjTdK/8ATjSbPb3G+e4OFglYo7RuElGhFXqw== +"@ckeditor/ckeditor5-remove-format@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-48.0.1.tgz#44dca342f5a98f893836deb1decc18276a607f6b" + integrity sha512-LwhU/NOOjIy9ejr/zkJOBh7bTxg3kea1gXhWG7S1z6+F7K6f4mvrjiVO5yutThbp8bWLUZlKxNiSIJ79etgXdw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-restricted-editing@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.7.0.tgz#f86abcd1f243c7f17d15bd0ba4cf0c548ffc0825" - integrity sha512-jIndEBQoVHV1aotNa9Ceec/xYo33XNa2GQgxxnCcZ5GxU2GOj4qI9wbXVRES0RceLk6AH+k0j+U4jOMgpXeqIA== +"@ckeditor/ckeditor5-restricted-editing@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-48.0.1.tgz#ae00231f40347838bcfc90fead37aae948d2b592" + integrity sha512-yUIkiCC0vPo7atsC0PlKkVQDcmV4foUnZdizhdSmDnDNnDimqvLNIa0pGDb9D2MrMVUMPhv+8eCE+QpOKNm/+Q== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-select-all@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.7.0.tgz#015125a72cf9022261f561858f62fbe131cd0adf" - integrity sha512-KT+2rDWwSynw2lQBmSdrh6emKahHxMOk3GqpSwX28jR+M6sDIFvNGQ0y2AvhGbphn69Tp+fZ85p6b3A/wj52rg== +"@ckeditor/ckeditor5-select-all@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-48.0.1.tgz#923671d34423aaab7246126ed0bfaab448f57ae3" + integrity sha512-KoAQnaJ/buWUjKgj0k/p5wsOSWfi1qEJQDHWvrKY6tPuULD1/PtqVOY124Y0zai/ndZOpvT1X0tyaOXXA2ipig== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-show-blocks@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.7.0.tgz#fbe793e73594e0af18c1222821b76c9f2a0076eb" - integrity sha512-lgeWUZw8Taa2zzs5GJkARmtt2YUWD797snGZZxcLuOECicXgPonqqKceU0zHGZNC+vUul63EDXA/uDd4xRy1Vg== +"@ckeditor/ckeditor5-show-blocks@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-48.0.1.tgz#7791c7e9722c751f86aff74cf3876299cd979c7d" + integrity sha512-BR9uJxxuRhwBrVIbzw/O09q4d8iAkzz88rUHXgDe1pICzUUqrqYw0/qjzgc4EL30IvPdTtm5UmtU5dOVuFmVNg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-source-editing@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.7.0.tgz#b6232479ce523c98f7929d4a50891314023493b6" - integrity sha512-HQPVq48p6hoZus3rrGe5BY8ailE+4v/fR5kIzTT2aiCQ0mo/k6V5TcsDs5KNJBRRlXBvQt3H3Vc9gZ/6JRUizg== +"@ckeditor/ckeditor5-source-editing@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-48.0.1.tgz#73769857d147167c2190c46d3393b609016c97d4" + integrity sha512-n+uSghFxWyMg1DEWme14A8n/FLWglRtuIRBpgcUbft0Rdpe3nD44uCFNjmgbYhHjGX+Bz3DBrEbSnKxquv7kdw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-theme-lark" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-special-characters@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.7.0.tgz#f90b9fbba11f35c8d28d241812da47a26a3cce39" - integrity sha512-AhPZ9KdrytVucNdt6jMOXve/9aTiPRIdEe1WaZ4GMNhSbWEj1qeT/UbPnJm8puIJ/Epmvq7bXPjV9qgXu4/5Pw== +"@ckeditor/ckeditor5-special-characters@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-48.0.1.tgz#04a9025b7efd62a3b488512a19a3179397dfcf93" + integrity sha512-ZziowQbdNUFokvjlIe6ZBg+3IYyUW4vUiEaudiA9NPN15W6dXvJNyJ0ECYako8NtcVLB8OBR/Ow/q723TIcGQA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-style@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.7.0.tgz#cb0873a06824993d22362e55617a8efa71bf76ee" - integrity sha512-fwaXaZP7tfsstKPfm5aW+DvJB5RpaSCASEYGbvXdTvjHANL6RAKx4SX+voOyxid+vZfdbYPJ6WrARWUI/jF3DA== +"@ckeditor/ckeditor5-style@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-48.0.1.tgz#e1636cac8016622b63832951c5efee5bb6476299" + integrity sha512-bX+OaEHlvno4TrqkSB2b5J76r0zhovfRbpMzyS4Ij1KWJyVKVMesEt4tOeasUYN34q62DKQBO6aCksiuzk8r3A== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-html-support" "47.7.0" - "@ckeditor/ckeditor5-list" "47.7.0" - "@ckeditor/ckeditor5-table" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-html-support" "48.0.1" + "@ckeditor/ckeditor5-list" "48.0.1" + "@ckeditor/ckeditor5-table" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-table@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.7.0.tgz#a5a0132db64993bc2d237193a8b4096c4ed1059f" - integrity sha512-F0bnZ0j97ooDCv2AaqQyUo9J3rYQYpjAppdwilCaoYHmfpGnx++SI6rqTSfb29pHSOhXoVLwmeGR7sit4OxOYg== +"@ckeditor/ckeditor5-table@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-48.0.1.tgz#f31b2c2ab34fd9dcdca3d595589397a47e5b5dee" + integrity sha512-RVnNxYprfDE8AQtvIxZT1JJZ2En7aj/qKA+lo5E6j0CngmGRLTkXHTcTXy5YuwdKMo8RM1SAAexNzlvLHHqRQA== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-theme-lark@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.7.0.tgz#2c9d6a5449353f08749f3094b479c28874ef6de1" - integrity sha512-MKyDX8Qgg/tskT7VJZC/s71tYYstOZmYGlZj82AKRxTMYC8KB5w0ikCVzxkOAbD3eYOc8xlyZkYHQznnx6NiJA== +"@ckeditor/ckeditor5-typing@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-48.0.1.tgz#f12d114cc34b7f9b7da5e9e037b2168765e3fb49" + integrity sha512-mfUHVEnm4XuyWofg/4o+DL6h4WPPanToEJL0Ku5QZhZNqJ1jysCADXAkmOwzkSXowT4y/dyGF9do6Z8DL3PH5w== dependencies: - "@ckeditor/ckeditor5-ui" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-typing@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.7.0.tgz#ff0f2eddd60a1bd827e36cfda17bc37022d08300" - integrity sha512-oM3K004DbInyb3uq9ciCgRAO91eq/q5SFcjD7dtItwUYboD1jzTnmV6Yp+QdxX2kJLICHzsfyAgyZKTUvEZtlw== +"@ckeditor/ckeditor5-ui@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-48.0.1.tgz#4a444e2601204757f6bce6f31fd086c04dac3c7a" + integrity sha512-pRZBfqPBPXo9BaKgY+YeYg9atr7V/5MhUKDjI9WBAkg5JVKqR6eih2F9NjhrCbMEP0CeJKxdjgfl6SipnZkVkg== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - es-toolkit "1.39.5" - -"@ckeditor/ckeditor5-ui@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.7.0.tgz#78dac851009779d6189633a2deba9768cfa28613" - integrity sha512-eiNbp7JhBR/kAZ2DvT06u8KJpDhESGjIrLESGIn8/OzBYCpX+wqpx0Gj6WuKgK134bUI61qsYsLNqR15WcTaWA== - dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-editor-multi-root" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" "@types/color-convert" "2.0.4" color-convert "3.1.0" color-parse "2.0.2" - es-toolkit "1.39.5" + es-toolkit "1.45.1" vanilla-colorful "0.7.2" -"@ckeditor/ckeditor5-undo@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.7.0.tgz#c460097dd2a21f5903dca043451b6d4c2a5b7759" - integrity sha512-DGGQZX+Bf8HnOlgPWtz2kVoVAuTLtFYYkJa9ihUmrdOHlbGB/mQu5DAtZSUBp/6pYabBu1vAlkiQTIUT78wOsw== +"@ckeditor/ckeditor5-undo@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-48.0.1.tgz#195131b02e05ba772747890210e271e37e9421fe" + integrity sha512-OMezYgjdQ2ZFYM/+Z52CEGCIHIofX/MvSy/jVGXaY5ROS54prjfxkEq20yr1DepRCck319cOOCpRa9SbA/+byA== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-upload@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.7.0.tgz#d5134d3c12a7d2c097711768a733fc4e026da255" - integrity sha512-OJrDuje7ZpKDed3RPAXnuGPsNV3xuBKwLC1AwKghG7c121GPSU+uILgHL0puefrVnbZbJ+JRrMjyf1LJKFfZww== +"@ckeditor/ckeditor5-upload@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-48.0.1.tgz#df25e89bf643d32bcabf3426ae256204c7fa86e7" + integrity sha512-ssABMlpkCCXqJOZwPerqSDND5TTMGuc6h9hZ28QdMTf/wAa5DL+XdZeMSTbEU5L4PjcBtbh9ri6iLJ33c9Hxrw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" -"@ckeditor/ckeditor5-utils@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.7.0.tgz#d676f2335121e5fadb0007edc053d66f77ea6e58" - integrity sha512-HBVctgNr/0AP9QV8tZ5zg+lY15bAcS3s8tS3yVngaN0Zrmn77XIGXixqYrOX6J64gBlJ541WDb20Uo0Z2PF4+Q== +"@ckeditor/ckeditor5-utils@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-48.0.1.tgz#e865147420b70a8ea13d1213e09f88c3c0b0a86a" + integrity sha512-Oe0yUdgwJG7vSQZ0lLF04mG8EAgkE21norfVc3hyp8zJV24MB13/6lyZe3dhmWO20tEFrppXIDiEaN94nblpew== dependencies: - "@ckeditor/ckeditor5-ui" "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-ui" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-watchdog@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.7.0.tgz#a9179a52a85a51ff1c3df759e615a96eefa5d4d2" - integrity sha512-EYLj784TzBJZ5AAZzuAHGCoI12n54XPspnDxy4Un3k0fxjS0scxgB4Q5h4r3NMgeC8PfkYVeAw/I8rBZ7Dd33Q== +"@ckeditor/ckeditor5-watchdog@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-48.0.1.tgz#9f686e6845422f2f65243ce2790691ca433bfa6c" + integrity sha512-Rpn8kXTHidmozRiB7lcX5lsYl2IIQfiWNQ+rskYBNZsctOJlViPXDyyXk5yG8aSBjk1bKIbCa8wlCBrqkWqL1g== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-widget@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.7.0.tgz#bbeea896d8fc629a9414638fb92359c87d536792" - integrity sha512-HoFEdRIb8DEo0QcIUqjw0HKSCROqWdPYYM4cH0YwTMektjA4KScUTN/8SEi4IMU913bTVuKpMeFBEYot4DSziQ== +"@ckeditor/ckeditor5-widget@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-48.0.1.tgz#882cb27b54b7256ed5b54086f6caf055457de83d" + integrity sha512-bMyJW4uNIqPg4OoSCBs6AVTct8GTak8LiDZeKoA8u+yUMDb4SbLP4+5RmrGQusSseSZ6Kcf3ZMpnnhXTwtTp6w== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" -"@ckeditor/ckeditor5-word-count@47.7.0": - version "47.7.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.7.0.tgz#f745581a3b0c61f583973fe0b403d79be2a7b02c" - integrity sha512-moeWGmQ6TOR8g9nPndHvanjyTWmT0bTKRzXdTruzI5CPJgxOvFRCDZVN+gzXeFq+5juzwA9nw+OW1PF6D9N6lw== +"@ckeditor/ckeditor5-word-count@48.0.1": + version "48.0.1" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-48.0.1.tgz#0ddb6cb38ed28612d16a027fb6abb23ad89ffba0" + integrity sha512-U7mSd7AGQzWYS0W2BiicIC0RvawcCj8kARKtPjcqV50d80hgR4BPjOtNAM9u2hDfHwT8yat7KG3NJ4cyOiXUQw== dependencies: - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - ckeditor5 "47.7.0" - es-toolkit "1.39.5" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + es-toolkit "1.45.1" "@colordx/core@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.2.0.tgz#fcf1f637b3f93f12aae57bd3929f3f90a7773627" integrity sha512-wifnqsGCXRh+lJdX4975nKEPJaSk7k8rMiA/VeGrS4tOTn06WZrow6cUA7wFJKPXfcqj0rXeH4BMgGoKZvBf7g== -"@csstools/selector-resolve-nested@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" - integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== - -"@csstools/selector-specificity@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" - integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== - "@discoveryjs/json-ext@^0.6.1", "@discoveryjs/json-ext@^0.6.3": version "0.6.3" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== -"@esbuild/aix-ppc64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz#82b74f92aa78d720b714162939fb248c90addf53" - integrity sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg== - -"@esbuild/android-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz#f78cb8a3121fc205a53285adb24972db385d185d" - integrity sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ== - -"@esbuild/android-arm@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.7.tgz#593e10a1450bbfcac6cb321f61f468453bac209d" - integrity sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ== - -"@esbuild/android-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.7.tgz#453143d073326033d2d22caf9e48de4bae274b07" - integrity sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg== - -"@esbuild/darwin-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz#6f23000fb9b40b7e04b7d0606c0693bd0632f322" - integrity sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw== - -"@esbuild/darwin-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz#27393dd18bb1263c663979c5f1576e00c2d024be" - integrity sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ== - -"@esbuild/freebsd-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz#22e4638fa502d1c0027077324c97640e3adf3a62" - integrity sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w== - -"@esbuild/freebsd-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz#9224b8e4fea924ce2194e3efc3e9aebf822192d6" - integrity sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ== - -"@esbuild/linux-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz#4f5d1c27527d817b35684ae21419e57c2bda0966" - integrity sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A== - -"@esbuild/linux-arm@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz#b9e9d070c8c1c0449cf12b20eac37d70a4595921" - integrity sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA== - -"@esbuild/linux-ia32@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz#3f80fb696aa96051a94047f35c85b08b21c36f9e" - integrity sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg== - -"@esbuild/linux-loong64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz#9be1f2c28210b13ebb4156221bba356fe1675205" - integrity sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q== - -"@esbuild/linux-mips64el@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz#4ab5ee67a3dfcbcb5e8fd7883dae6e735b1163b8" - integrity sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw== - -"@esbuild/linux-ppc64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz#dac78c689f6499459c4321e5c15032c12307e7ea" - integrity sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ== - -"@esbuild/linux-riscv64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz#050f7d3b355c3a98308e935bc4d6325da91b0027" - integrity sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ== - -"@esbuild/linux-s390x@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz#d61f715ce61d43fe5844ad0d8f463f88cbe4fef6" - integrity sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw== - -"@esbuild/linux-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz#ca8e1aa478fc8209257bf3ac8f79c4dc2982f32a" - integrity sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA== - -"@esbuild/netbsd-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz#1650f2c1b948deeb3ef948f2fc30614723c09690" - integrity sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w== - -"@esbuild/netbsd-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz#65772ab342c4b3319bf0705a211050aac1b6e320" - integrity sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw== - -"@esbuild/openbsd-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz#37ed7cfa66549d7955852fce37d0c3de4e715ea1" - integrity sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A== - -"@esbuild/openbsd-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz#01bf3d385855ef50cb33db7c4b52f957c34cd179" - integrity sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg== - -"@esbuild/openharmony-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz#6c1f94b34086599aabda4eac8f638294b9877410" - integrity sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw== - -"@esbuild/sunos-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz#4b0dd17ae0a6941d2d0fd35a906392517071a90d" - integrity sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA== - -"@esbuild/win32-arm64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz#34193ab5565d6ff68ca928ac04be75102ccb2e77" - integrity sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA== - -"@esbuild/win32-ia32@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz#eb67f0e4482515d8c1894ede631c327a4da9fc4d" - integrity sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw== - -"@esbuild/win32-x64@0.27.7": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz#8fe30b3088b89b4873c3a6cc87597ae3920c0a8b" - integrity sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg== - "@formatjs/ecma402-abstract@2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz#d6ca9d3579054fe1e1a0a0b5e872e0d64922e4e1" @@ -1835,11 +1615,6 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d" integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg== -"@gar/promise-retry@^1.0.0", "@gar/promise-retry@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@gar/promise-retry/-/promise-retry-1.0.3.tgz#65e726428e794bc4453948e0a41e6de4215ce8b0" - integrity sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA== - "@hotwired/stimulus-webpack-helpers@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@hotwired/stimulus-webpack-helpers/-/stimulus-webpack-helpers-1.0.1.tgz#4cd74487adeca576c9865ac2b9fe5cb20cef16dd" @@ -1855,30 +1630,6 @@ resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.23.tgz#a6eebc9ab4a5faadae265a4cbec8cfcb5731e77c" integrity sha512-GZ7cijxEZ6Ig71u7rD6LHaRv/wcE/hNsc+nEfiWOkLNqUgLOwo5MNGWOy5ZV9ZUDSiQx1no7YxjTNnT4O6//cQ== -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@isaacs/cliui@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" - integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== - -"@isaacs/fs-minipass@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" - integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== - dependencies: - minipass "^7.0.4" - "@jbtronics/bs-treeview@^1.0.1": version "1.0.7" resolved "https://registry.yarnpkg.com/@jbtronics/bs-treeview/-/bs-treeview-1.0.7.tgz#42a5ea40ce1bfe6cffbc1b811dc4e32dd8d0273a" @@ -1964,18 +1715,6 @@ picocolors "^1.1.1" string-width "^4.2.3" -"@kwsites/file-exists@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" - integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== - dependencies: - debug "^4.1.1" - -"@kwsites/promise-deferred@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" - integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== - "@noble/ciphers@^1.0.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" @@ -1986,108 +1725,6 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/agent@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-4.0.0.tgz#2bb2b1c0a170940511554a7986ae2a8be9fedcce" - integrity sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^11.2.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/fs@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-5.0.0.tgz#674619771907342b3d1ac197aaf1deeb657e3539" - integrity sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-7.0.2.tgz#680c3271fe51401c07ee41076be678851e600ff0" - integrity sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg== - dependencies: - "@gar/promise-retry" "^1.0.0" - "@npmcli/promise-spawn" "^9.0.0" - ini "^6.0.0" - lru-cache "^11.2.1" - npm-pick-manifest "^11.0.1" - proc-log "^6.0.0" - semver "^7.3.5" - which "^6.0.0" - -"@npmcli/installed-package-contents@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz#18e5070704cfe0278f9ae48038558b6efd438426" - integrity sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA== - dependencies: - npm-bundled "^5.0.0" - npm-normalize-package-bin "^5.0.0" - -"@npmcli/node-gyp@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47" - integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ== - -"@npmcli/package-json@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.5.tgz#e29481dfc586d1625a6553799e6bec52ae0487a5" - integrity sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ== - dependencies: - "@npmcli/git" "^7.0.0" - glob "^13.0.0" - hosted-git-info "^9.0.0" - json-parse-even-better-errors "^5.0.0" - proc-log "^6.0.0" - semver "^7.5.3" - spdx-expression-parse "^4.0.0" - -"@npmcli/promise-spawn@^9.0.0": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz#20e80cbdd2f24ad263a15de3ebbb1673cb82005b" - integrity sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q== - dependencies: - which "^6.0.0" - -"@npmcli/redact@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-4.0.0.tgz#c91121e02b7559a997614a2c1057cd7fc67608c4" - integrity sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q== - -"@npmcli/run-script@^10.0.0": - version "10.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.4.tgz#99cddae483ce3dbf1a10f5683a4e6aaa02345ac0" - integrity sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg== - dependencies: - "@npmcli/node-gyp" "^5.0.0" - "@npmcli/package-json" "^7.0.0" - "@npmcli/promise-spawn" "^9.0.0" - node-gyp "^12.1.0" - proc-log "^6.0.0" - "@orchidjs/sifter@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@orchidjs/sifter/-/sifter-1.1.0.tgz#b36154ad0cda4898305d1ac44f318b41048a0438" @@ -2107,11 +1744,6 @@ dependencies: barcode-detector "^3.0.0" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" @@ -2122,64 +1754,6 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@sigstore/bundle@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83" - integrity sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A== - dependencies: - "@sigstore/protobuf-specs" "^0.5.0" - -"@sigstore/core@^3.1.0", "@sigstore/core@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.2.0.tgz#beaea6ea4d7d4caadadb7453168e35636b78830e" - integrity sha512-kxHrDQ9YgfrWUSXU0cjsQGv8JykOFZQ9ErNKbFPWzk3Hgpwu8x2hHrQ9IdA8yl+j9RTLTC3sAF3Tdq1IQCP4oA== - -"@sigstore/protobuf-specs@^0.5.0": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.1.tgz#5401e444b6ab0db7d1969c91c43e7954927a52fe" - integrity sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g== - -"@sigstore/sign@^4.1.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.1.1.tgz#34765fe4a190d693340c0771a3d150a397bcfc55" - integrity sha512-Hf4xglukg0XXQ2RiD5vSoLjdPe8OBUPA8XeVjUObheuDcWdYWrnH/BNmxZCzkAy68MzmNCxXLeurJvs6hcP2OQ== - dependencies: - "@gar/promise-retry" "^1.0.2" - "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.2.0" - "@sigstore/protobuf-specs" "^0.5.0" - make-fetch-happen "^15.0.4" - proc-log "^6.1.0" - -"@sigstore/tuf@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.2.tgz#7d2fa2abcd5afa5baf752671d14a1c6ed0ed3196" - integrity sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ== - dependencies: - "@sigstore/protobuf-specs" "^0.5.0" - tuf-js "^4.1.0" - -"@sigstore/verify@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.1.0.tgz#4046d4186421db779501fe87fa5acaa5d4d21b08" - integrity sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag== - dependencies: - "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.1.0" - "@sigstore/protobuf-specs" "^0.5.0" - -"@simple-git/args-pathspec@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@simple-git/args-pathspec/-/args-pathspec-1.0.3.tgz#9ef4a2ad5f49ab4056362d03f93f775b93118ca5" - integrity sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA== - -"@simple-git/argv-parser@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@simple-git/argv-parser/-/argv-parser-1.1.1.tgz#275b839c6eeb5030872c73b1ea839a416885da9d" - integrity sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw== - dependencies: - "@simple-git/args-pathspec" "^1.0.3" - "@sinclair/typebox@^0.34.0": version "0.34.49" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.49.tgz#4f1369234f2ecf693866476c3b2e1b54d2a9d68e" @@ -2230,19 +1804,6 @@ webpack-manifest-plugin "^5.0.1" yargs-parser "^21.0.0" -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.1.0.tgz#494b39cf5e2f6855d80031246dd236d8086069b3" - integrity sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^10.1.1" - "@types/color-convert@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.4.tgz#843398ae71e951dc5415d202dfd5e43108823eeb" @@ -2314,7 +1875,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -2338,20 +1899,6 @@ dependencies: undici-types "~7.19.0" -"@types/postcss-import@^14.0.3": - version "14.0.3" - resolved "https://registry.yarnpkg.com/@types/postcss-import/-/postcss-import-14.0.3.tgz#149236eeb5c87d5b576df5f335faa1fe49f33e5a" - integrity sha512-raZhRVTf6Vw5+QbmQ7LOHSDML71A5rj4+EqDzAbrZPfxfoGzFxMHRCq16VlddGIZpHELw0BG4G0YE2ANkdZiIQ== - dependencies: - postcss "^8.0.0" - -"@types/through2@^2.0.41": - version "2.0.41" - resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.41.tgz#3e5e1720d71ffdfa03c22f2aad6593d12a47034f" - integrity sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ== - dependencies: - "@types/node" "*" - "@types/trusted-types@^2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" @@ -2562,11 +2109,6 @@ resolved "https://registry.yarnpkg.com/@zxcvbn-ts/language-ja/-/language-ja-3.0.2.tgz#299bb6f5465f99405577491b1b31352058540c76" integrity sha512-YjQyt+eMe3EdpeJiSt81AMF8HfEXXCary/VRoG+0erZBzRjfJ1U3JdSiu9wFFxiEF8Cb5FEmTQ6nQPyraezH6Q== -abbrev@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-4.0.0.tgz#ec933f0e27b6cd60e89b5c6b2a304af42209bb05" - integrity sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA== - acorn-import-phases@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" @@ -2592,11 +2134,6 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" - integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -2604,11 +2141,6 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" @@ -2616,16 +2148,6 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.5: - version "6.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" - integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ajv@^8.0.0, ajv@^8.9.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" @@ -2641,28 +2163,13 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" - integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^6.1.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" - integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - attr-accept@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" @@ -2704,16 +2211,6 @@ bail@^2.0.0: resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -balanced-match@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" - integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== - barcode-detector@^3.0.0, barcode-detector@^3.0.5: version "3.1.2" resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.2.tgz#8032a211ebb6cb5cc25724c5c56322c77ed02503" @@ -2766,20 +2263,6 @@ bootswatch@^5.1.3: resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-5.3.8.tgz#534538ce50285e52cb715823f8b4d734f73956e7" integrity sha512-88mnH9tv+x6DV+scBxYFOpM4YSDVhyfEgbhqaEfvkHNctKI9qRcACxIP9nmBZ5mSeLXtsgax1VsRkUs1eWjlAQ== -brace-expansion@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae" - integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== - dependencies: - balanced-match "^1.0.0" - -brace-expansion@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.5.tgz#dcc3a37116b79f3e1b46db994ced5d570e930fdb" - integrity sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== - dependencies: - balanced-match "^4.0.2" - braces@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" @@ -2794,11 +2277,6 @@ brotli@^1.3.2: dependencies: base64-js "^1.1.2" -browser-stdout@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" @@ -2827,37 +2305,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -cacache@^20.0.0, cacache@^20.0.1: - version "20.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-20.0.4.tgz#9b547dc3db0c1f87cba6dbbff91fb17181b4bbb1" - integrity sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA== - dependencies: - "@npmcli/fs" "^5.0.0" - fs-minipass "^3.0.0" - glob "^13.0.0" - lru-cache "^11.1.0" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^7.0.2" - ssri "^13.0.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2886,11 +2333,6 @@ chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0: - version "5.6.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" - integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== - character-entities-html4@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" @@ -2906,18 +2348,6 @@ character-entities@^2.0.0: resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== -chokidar@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" - integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== - dependencies: - readdirp "^4.0.1" - -chownr@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" - integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== - chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" @@ -2928,84 +2358,71 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@47.7.0, ckeditor5@^47.0.0: - version "47.7.0" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.7.0.tgz#3dfc1c41e0c53130e0ddbab125b377b32f088e7a" - integrity sha512-j81Od9mv5+SkQdOV7OrwrxCqkv9p19V+x+H6ndpgTzchIn3o/pQYBG3pWloG5nb0oC9aebayxanUp/O/EIqHCQ== +ckeditor5@^48.0.0: + version "48.0.1" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-48.0.1.tgz#ee40cb3953da435cf0532680dc347389fcb1f4e2" + integrity sha512-8db92XXDEwU7KkwGBjMrWlfKifI+ISw9DHvZVMK7khY69CyAJizl9TjDQiDT0l+05KkgETzDvZ0j4RYvKq0wUg== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "47.7.0" - "@ckeditor/ckeditor5-alignment" "47.7.0" - "@ckeditor/ckeditor5-autoformat" "47.7.0" - "@ckeditor/ckeditor5-autosave" "47.7.0" - "@ckeditor/ckeditor5-basic-styles" "47.7.0" - "@ckeditor/ckeditor5-block-quote" "47.7.0" - "@ckeditor/ckeditor5-bookmark" "47.7.0" - "@ckeditor/ckeditor5-ckbox" "47.7.0" - "@ckeditor/ckeditor5-ckfinder" "47.7.0" - "@ckeditor/ckeditor5-clipboard" "47.7.0" - "@ckeditor/ckeditor5-cloud-services" "47.7.0" - "@ckeditor/ckeditor5-code-block" "47.7.0" - "@ckeditor/ckeditor5-core" "47.7.0" - "@ckeditor/ckeditor5-easy-image" "47.7.0" - "@ckeditor/ckeditor5-editor-balloon" "47.7.0" - "@ckeditor/ckeditor5-editor-classic" "47.7.0" - "@ckeditor/ckeditor5-editor-decoupled" "47.7.0" - "@ckeditor/ckeditor5-editor-inline" "47.7.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.7.0" - "@ckeditor/ckeditor5-emoji" "47.7.0" - "@ckeditor/ckeditor5-engine" "47.7.0" - "@ckeditor/ckeditor5-enter" "47.7.0" - "@ckeditor/ckeditor5-essentials" "47.7.0" - "@ckeditor/ckeditor5-find-and-replace" "47.7.0" - "@ckeditor/ckeditor5-font" "47.7.0" - "@ckeditor/ckeditor5-fullscreen" "47.7.0" - "@ckeditor/ckeditor5-heading" "47.7.0" - "@ckeditor/ckeditor5-highlight" "47.7.0" - "@ckeditor/ckeditor5-horizontal-line" "47.7.0" - "@ckeditor/ckeditor5-html-embed" "47.7.0" - "@ckeditor/ckeditor5-html-support" "47.7.0" - "@ckeditor/ckeditor5-icons" "47.7.0" - "@ckeditor/ckeditor5-image" "47.7.0" - "@ckeditor/ckeditor5-indent" "47.7.0" - "@ckeditor/ckeditor5-language" "47.7.0" - "@ckeditor/ckeditor5-link" "47.7.0" - "@ckeditor/ckeditor5-list" "47.7.0" - "@ckeditor/ckeditor5-markdown-gfm" "47.7.0" - "@ckeditor/ckeditor5-media-embed" "47.7.0" - "@ckeditor/ckeditor5-mention" "47.7.0" - "@ckeditor/ckeditor5-minimap" "47.7.0" - "@ckeditor/ckeditor5-page-break" "47.7.0" - "@ckeditor/ckeditor5-paragraph" "47.7.0" - "@ckeditor/ckeditor5-paste-from-office" "47.7.0" - "@ckeditor/ckeditor5-remove-format" "47.7.0" - "@ckeditor/ckeditor5-restricted-editing" "47.7.0" - "@ckeditor/ckeditor5-select-all" "47.7.0" - "@ckeditor/ckeditor5-show-blocks" "47.7.0" - "@ckeditor/ckeditor5-source-editing" "47.7.0" - "@ckeditor/ckeditor5-special-characters" "47.7.0" - "@ckeditor/ckeditor5-style" "47.7.0" - "@ckeditor/ckeditor5-table" "47.7.0" - "@ckeditor/ckeditor5-theme-lark" "47.7.0" - "@ckeditor/ckeditor5-typing" "47.7.0" - "@ckeditor/ckeditor5-ui" "47.7.0" - "@ckeditor/ckeditor5-undo" "47.7.0" - "@ckeditor/ckeditor5-upload" "47.7.0" - "@ckeditor/ckeditor5-utils" "47.7.0" - "@ckeditor/ckeditor5-watchdog" "47.7.0" - "@ckeditor/ckeditor5-widget" "47.7.0" - "@ckeditor/ckeditor5-word-count" "47.7.0" - -cli-cursor@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" - integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== - dependencies: - restore-cursor "^5.0.0" - -cli-spinners@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-3.4.0.tgz#1f11f6d48c4e5bc6849fcb4efa0dc98f9e7299ea" - integrity sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw== + "@ckeditor/ckeditor5-adapter-ckfinder" "48.0.1" + "@ckeditor/ckeditor5-alignment" "48.0.1" + "@ckeditor/ckeditor5-autoformat" "48.0.1" + "@ckeditor/ckeditor5-autosave" "48.0.1" + "@ckeditor/ckeditor5-basic-styles" "48.0.1" + "@ckeditor/ckeditor5-block-quote" "48.0.1" + "@ckeditor/ckeditor5-bookmark" "48.0.1" + "@ckeditor/ckeditor5-ckbox" "48.0.1" + "@ckeditor/ckeditor5-ckfinder" "48.0.1" + "@ckeditor/ckeditor5-clipboard" "48.0.1" + "@ckeditor/ckeditor5-cloud-services" "48.0.1" + "@ckeditor/ckeditor5-code-block" "48.0.1" + "@ckeditor/ckeditor5-core" "48.0.1" + "@ckeditor/ckeditor5-easy-image" "48.0.1" + "@ckeditor/ckeditor5-editor-balloon" "48.0.1" + "@ckeditor/ckeditor5-editor-classic" "48.0.1" + "@ckeditor/ckeditor5-editor-decoupled" "48.0.1" + "@ckeditor/ckeditor5-editor-inline" "48.0.1" + "@ckeditor/ckeditor5-editor-multi-root" "48.0.1" + "@ckeditor/ckeditor5-emoji" "48.0.1" + "@ckeditor/ckeditor5-engine" "48.0.1" + "@ckeditor/ckeditor5-enter" "48.0.1" + "@ckeditor/ckeditor5-essentials" "48.0.1" + "@ckeditor/ckeditor5-find-and-replace" "48.0.1" + "@ckeditor/ckeditor5-font" "48.0.1" + "@ckeditor/ckeditor5-fullscreen" "48.0.1" + "@ckeditor/ckeditor5-heading" "48.0.1" + "@ckeditor/ckeditor5-highlight" "48.0.1" + "@ckeditor/ckeditor5-horizontal-line" "48.0.1" + "@ckeditor/ckeditor5-html-embed" "48.0.1" + "@ckeditor/ckeditor5-html-support" "48.0.1" + "@ckeditor/ckeditor5-icons" "48.0.1" + "@ckeditor/ckeditor5-image" "48.0.1" + "@ckeditor/ckeditor5-indent" "48.0.1" + "@ckeditor/ckeditor5-language" "48.0.1" + "@ckeditor/ckeditor5-link" "48.0.1" + "@ckeditor/ckeditor5-list" "48.0.1" + "@ckeditor/ckeditor5-markdown-gfm" "48.0.1" + "@ckeditor/ckeditor5-media-embed" "48.0.1" + "@ckeditor/ckeditor5-mention" "48.0.1" + "@ckeditor/ckeditor5-minimap" "48.0.1" + "@ckeditor/ckeditor5-page-break" "48.0.1" + "@ckeditor/ckeditor5-paragraph" "48.0.1" + "@ckeditor/ckeditor5-paste-from-office" "48.0.1" + "@ckeditor/ckeditor5-remove-format" "48.0.1" + "@ckeditor/ckeditor5-restricted-editing" "48.0.1" + "@ckeditor/ckeditor5-select-all" "48.0.1" + "@ckeditor/ckeditor5-show-blocks" "48.0.1" + "@ckeditor/ckeditor5-source-editing" "48.0.1" + "@ckeditor/ckeditor5-special-characters" "48.0.1" + "@ckeditor/ckeditor5-style" "48.0.1" + "@ckeditor/ckeditor5-table" "48.0.1" + "@ckeditor/ckeditor5-typing" "48.0.1" + "@ckeditor/ckeditor5-ui" "48.0.1" + "@ckeditor/ckeditor5-undo" "48.0.1" + "@ckeditor/ckeditor5-upload" "48.0.1" + "@ckeditor/ckeditor5-utils" "48.0.1" + "@ckeditor/ckeditor5-watchdog" "48.0.1" + "@ckeditor/ckeditor5-widget" "48.0.1" + "@ckeditor/ckeditor5-word-count" "48.0.1" clipboard@^2.0.4: version "2.0.11" @@ -3016,15 +2433,6 @@ clipboard@^2.0.4: select "^1.1.2" tiny-emitter "^2.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3145,17 +2553,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.1.tgz#df110631a8547b5d1a98915271986f06e3011379" - integrity sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - -cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.3: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3169,7 +2567,7 @@ css-declaration-sorter@^7.2.0: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz#9c215fbda2dcf4083bae69f125688158ae847deb" integrity sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw== -css-loader@^7.0.0, css-loader@^7.1.0: +css-loader@^7.1.0: version "7.1.4" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.4.tgz#8f6bf9f8fc8cbef7d2ef6e80acc6545eaefa90b1" integrity sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw== @@ -3284,7 +2682,7 @@ cssnano-utils@^5.0.2: resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.2.tgz#92939eda38fb934151a8c87bd60764d1a27c5597" integrity sha512-kt41WLK7FLKfePzPi645Y+/NtW/nNM7Su6nlNUfJyRNW3JcuU3JU7+cWJc+JexTeZ8dRBvFufefdG2XpXkIo0A== -cssnano@^7.0.0, cssnano@^7.0.4: +cssnano@^7.0.4: version "7.1.7" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.7.tgz#152658ec9d24f080851c3010e61673d539765af7" integrity sha512-N5LGn/OlhMxDTvKACwUPMzT34SSj1b022pvUAE/Vh6r2WD1aUCbc+QNIP/JjX9VVxebdJWZQ3352Lt4oF7dQ/g== @@ -3399,18 +2797,13 @@ datatables.net@2.3.7, datatables.net@^2, datatables.net@^2.0.0: dependencies: jquery ">=1.7" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.3: +debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - decimal.js@^10.4.3: version "10.6.0" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" @@ -3445,11 +2838,6 @@ dfa@^1.2.0: resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== -diff@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" - integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== - dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -3519,11 +2907,6 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - electron-to-chromium@^1.5.328: version "1.5.341" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.341.tgz#427b826ac41d406162b7700e6032c2b9cc4ecc5c" @@ -3534,11 +2917,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3562,23 +2940,11 @@ entities@^4.2.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -env-paths@^2.2.0, env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - envinfo@^7.14.0: version "7.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== -error-ex@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" - integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== - dependencies: - is-arrayish "^0.2.1" - error-stack-parser@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" @@ -3596,63 +2962,16 @@ es-module-lexer@^2.0.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== -es-toolkit@1.39.5: - version "1.39.5" - resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.39.5.tgz#ee2a78a66aafb76c7345af0ea8c06722c78ef1fd" - integrity sha512-z9V0qU4lx1TBXDNFWfAASWk6RNU6c6+TJBKE+FLIg8u0XJ6Yw58Hi0yX8ftEouj6p1QARRlXLFfHbIli93BdQQ== +es-toolkit@1.45.1: + version "1.45.1" + resolved "https://registry.yarnpkg.com/es-toolkit/-/es-toolkit-1.45.1.tgz#21b28b2bd43178fd4c9c937c445d5bcaccce907b" + integrity sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw== -esbuild-loader@^4.0.0: - version "4.4.3" - resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-4.4.3.tgz#0d0f302e3260b2318d1256c17807dfea4bc449ed" - integrity sha512-Wpui03EzqC151xFteKlgJQhbyZl5CgnBpUHXVuao02nItULlkaTeiLdEMPTmR2zdwpEBWkXVNoT5dDOYJluUzg== - dependencies: - esbuild "^0.27.1" - get-tsconfig "^4.10.1" - loader-utils "^2.0.4" - webpack-sources "^3.3.4" - -esbuild@^0.27.1: - version "0.27.7" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.7.tgz#bcadce22b2f3fd76f257e3a64f83a64986fea11f" - integrity sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w== - optionalDependencies: - "@esbuild/aix-ppc64" "0.27.7" - "@esbuild/android-arm" "0.27.7" - "@esbuild/android-arm64" "0.27.7" - "@esbuild/android-x64" "0.27.7" - "@esbuild/darwin-arm64" "0.27.7" - "@esbuild/darwin-x64" "0.27.7" - "@esbuild/freebsd-arm64" "0.27.7" - "@esbuild/freebsd-x64" "0.27.7" - "@esbuild/linux-arm" "0.27.7" - "@esbuild/linux-arm64" "0.27.7" - "@esbuild/linux-ia32" "0.27.7" - "@esbuild/linux-loong64" "0.27.7" - "@esbuild/linux-mips64el" "0.27.7" - "@esbuild/linux-ppc64" "0.27.7" - "@esbuild/linux-riscv64" "0.27.7" - "@esbuild/linux-s390x" "0.27.7" - "@esbuild/linux-x64" "0.27.7" - "@esbuild/netbsd-arm64" "0.27.7" - "@esbuild/netbsd-x64" "0.27.7" - "@esbuild/openbsd-arm64" "0.27.7" - "@esbuild/openbsd-x64" "0.27.7" - "@esbuild/openharmony-arm64" "0.27.7" - "@esbuild/sunos-x64" "0.27.7" - "@esbuild/win32-arm64" "0.27.7" - "@esbuild/win32-ia32" "0.27.7" - "@esbuild/win32-x64" "0.27.7" - -escalade@^3.1.1, escalade@^3.2.0: +escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escape-string-regexp@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" @@ -3693,26 +3012,6 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exponential-backoff@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" - integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== - exports-loader@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-5.0.0.tgz#0e5c50baf8526237c0a2743116a3e3fa788d194f" @@ -3725,27 +3024,11 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - fast-uri@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" @@ -3756,18 +3039,6 @@ fastest-levenshtein@1.0.16, fastest-levenshtein@^1.0.12, fastest-levenshtein@^1. resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== -fastq@^1.6.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" - integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== - dependencies: - reusify "^1.0.4" - -fdir@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" - integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -3811,30 +3082,6 @@ fontkit@^2.0.4: unicode-properties "^1.4.0" unicode-trie "^2.0.0" -foreground-child@^3.1.0, foreground-child@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" - integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== - dependencies: - cross-spawn "^7.0.6" - signal-exit "^4.0.1" - -fs-extra@^11.0.0: - version "11.3.4" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" - integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -3850,73 +3097,16 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-tsconfig@^4.10.1: - version "4.14.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.14.0.tgz#985d85c52a9903864280ccc2448d413fbf1efed8" - integrity sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA== - dependencies: - resolve-pkg-maps "^1.0.0" - github-slugger@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.4.5: - version "10.5.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" - integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^11.0.2: - version "11.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" - integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== - dependencies: - foreground-child "^3.3.1" - jackspeak "^4.1.1" - minimatch "^10.1.1" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^2.0.0" - -glob@^13.0.0, glob@^13.0.3: - version "13.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d" - integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== - dependencies: - minimatch "^10.2.2" - minipass "^7.1.3" - path-scurry "^2.0.2" - good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -3924,7 +3114,7 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -4087,18 +3277,6 @@ hastscript@9.0.1, hastscript@^9.0.0: property-information "^7.0.0" space-separated-tokens "^2.0.0" -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada" - integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg== - dependencies: - lru-cache "^11.1.0" - htm@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78" @@ -4124,64 +3302,16 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" - integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== - -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^7.0.1: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" - integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore-walk@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14" - integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A== - dependencies: - minimatch "^10.0.3" - immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-fresh@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - import-local@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" @@ -4190,16 +3320,11 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -inherits@^2.0.3, inherits@~2.0.3: +inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30" - integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ== - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -4215,16 +3340,6 @@ intl-messageformat@^10.5.11: "@formatjs/icu-messageformat-parser" "2.11.4" tslib "^2.8.0" -ip-address@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" - integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" @@ -4237,43 +3352,16 @@ is-docker@^2.0.0: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-plain-obj@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" @@ -4286,16 +3374,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -4313,32 +3391,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isexe@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-4.0.0.tgz#48f6576af8e87a18feb796b7ed5e2e5903b43dca" - integrity sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw== - isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jackspeak@^4.1.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" - integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== - dependencies: - "@isaacs/cliui" "^9.0.0" - jest-regex-util@30.0.1: version "30.0.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" @@ -4376,11 +3433,6 @@ jest-worker@^30.0.5: merge-stream "^2.0.0" supports-color "^8.1.1" -jiti@^2.5.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" - integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== - jquery@>=1.7, jquery@^3.5.1: version "3.7.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" @@ -4396,13 +3448,6 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== - dependencies: - argparse "^2.0.1" - jsesc@^3.0.2, jsesc@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -4413,21 +3458,6 @@ json-formatter-js@^2.3.4: resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-2.5.23.tgz#b7dd0a1da7e6cbea8e76743d7d8dc1238866cc73" integrity sha512-Cbm8wHXjo/C56aCePP1VuKvjxoMEmL7g7Ckss1oWFFlCsvOEEbye1kTeaNNaqba1Cl6YpIOYAnK65pUQ8mDIUQ== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz#93c89f529f022e5dadc233409324f0167b1e903e" - integrity sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" @@ -4438,20 +3468,6 @@ json5@^2.1.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^6.0.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.1.tgz#b6e31717f22cc37330b081ce0051ed5de53af2f6" - integrity sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - jszip@^3.2.0: version "3.10.1" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" @@ -4494,17 +3510,12 @@ linebreak@^1.1.0: base64-js "0.0.8" unicode-trie "^2.0.0" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - loader-runner@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== -loader-utils@^2.0.0, loader-utils@^2.0.4: +loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== @@ -4552,29 +3563,11 @@ lodash@^4.17.20, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - longest-streak@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1: - version "11.3.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.3.5.tgz#29047d348c0b2793e3112a01c739bb7c6d855637" - integrity sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4582,24 +3575,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.1, make-fetch-happen@^15.0.4: - version "15.0.5" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.5.tgz#b0e3dd53d487b2733e4ea232c2bebf1bd16afb03" - integrity sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg== - dependencies: - "@gar/promise-retry" "^1.0.0" - "@npmcli/agent" "^4.0.0" - "@npmcli/redact" "^4.0.0" - cacache "^20.0.1" - http-cache-semantics "^4.1.1" - minipass "^7.0.2" - minipass-fetch "^5.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^1.0.0" - proc-log "^6.0.0" - ssri "^13.0.0" - markdown-table@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" @@ -4783,11 +3758,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - micromark-core-commonmark@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" @@ -5061,7 +4031,7 @@ micromark@^4.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" -micromatch@^4.0.0, micromatch@^4.0.8: +micromatch@^4.0.0: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -5074,17 +4044,7 @@ mime-db@^1.54.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-function@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" - integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== - -mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: +mini-css-extract-plugin@^2.6.0: version "2.10.2" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz#5c85ec9450c05d26e32531b465a15a08c3a57253" integrity sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg== @@ -5092,105 +4052,6 @@ mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: schema-utils "^4.0.0" tapable "^2.2.1" -minimatch@^10.0.3, minimatch@^10.1.1, minimatch@^10.2.2: - version "10.2.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" - integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== - dependencies: - brace-expansion "^5.0.5" - -minimatch@^9.0.4, minimatch@^9.0.5: - version "9.0.9" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" - integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== - dependencies: - brace-expansion "^2.0.2" - -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-5.0.2.tgz#3973a605ddfd8abb865e50d6fc634853c8239729" - integrity sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ== - dependencies: - minipass "^7.0.3" - minipass-sized "^2.0.0" - minizlib "^3.0.1" - optionalDependencies: - iconv-lite "^0.7.2" - -minipass-flush@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.7.tgz#145c383d5ae294b36030aa80d4e872d08bebcb73" - integrity sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-2.0.0.tgz#2228ee97e3f74f6b22ba6d1319addb7621534306" - integrity sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA== - dependencies: - minipass "^7.1.2" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2, minipass@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" - integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== - -minizlib@^3.0.1, minizlib@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" - integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== - dependencies: - minipass "^7.1.2" - -mocha@^11.1.0: - version "11.7.5" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.5.tgz#58f5bbfa5e0211ce7e5ee6128107cefc2515a627" - integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig== - dependencies: - browser-stdout "^1.3.1" - chokidar "^4.0.1" - debug "^4.3.5" - diff "^7.0.0" - escape-string-regexp "^4.0.0" - find-up "^5.0.0" - glob "^10.4.5" - he "^1.2.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - log-symbols "^4.1.0" - minimatch "^9.0.5" - ms "^2.1.3" - picocolors "^1.1.1" - serialize-javascript "^6.0.2" - strip-json-comments "^3.1.1" - supports-color "^8.1.1" - workerpool "^9.2.0" - yargs "^17.7.2" - yargs-parser "^21.1.1" - yargs-unparser "^2.0.0" - mrmime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" @@ -5206,32 +4067,11 @@ nanoid@^3.3.11: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -negotiator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" - integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== - neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-gyp@^12.1.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.3.0.tgz#a0e0d9364779451eaf4148b6f9a7366f98000b3f" - integrity sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - graceful-fs "^4.2.6" - nopt "^9.0.0" - proc-log "^6.0.0" - semver "^7.3.5" - tar "^7.5.4" - tinyglobby "^0.2.12" - undici "^6.25.0" - which "^6.0.0" - node-notifier@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-9.0.1.tgz#cea837f4c5e733936c7b9005e6545cea825d1af4" @@ -5249,81 +4089,6 @@ node-releases@^2.0.36: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.37.tgz#9bd4f10b77ba39c2b9402d4e8399c482a797f671" integrity sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg== -nopt@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-9.0.0.tgz#6bff0836b2964d24508b6b41b5a9a49c4f4a1f96" - integrity sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw== - dependencies: - abbrev "^4.0.0" - -npm-bundled@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-5.0.0.tgz#5025d847cfd06c7b8d9432df01695d0133d9ee80" - integrity sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw== - dependencies: - npm-normalize-package-bin "^5.0.0" - -npm-install-checks@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-8.0.0.tgz#f5d18e909bb8318d85093e9d8f36ac427c1cbe30" - integrity sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89" - integrity sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag== - -npm-package-arg@^13.0.0: - version "13.0.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.2.tgz#72a80f2afe8329860e63854489415e9e9a2f78a7" - integrity sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA== - dependencies: - hosted-git-info "^9.0.0" - proc-log "^6.0.0" - semver "^7.3.5" - validate-npm-package-name "^7.0.0" - -npm-packlist@^10.0.1: - version "10.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.4.tgz#aa2e0e4daf910eae8c5745c2645cf8bb8813de01" - integrity sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng== - dependencies: - ignore-walk "^8.0.0" - proc-log "^6.0.0" - -npm-pick-manifest@^11.0.1: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz#76cf6593a351849006c36b38a7326798e2a76d13" - integrity sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ== - dependencies: - npm-install-checks "^8.0.0" - npm-normalize-package-bin "^5.0.0" - npm-package-arg "^13.0.0" - semver "^7.3.5" - -npm-registry-fetch@^19.0.0: - version "19.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz#51e96d21f409a9bc4f96af218a8603e884459024" - integrity sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw== - dependencies: - "@npmcli/redact" "^4.0.0" - jsonparse "^1.3.1" - make-fetch-happen "^15.0.0" - minipass "^7.0.2" - minipass-fetch "^5.0.0" - minizlib "^3.0.1" - npm-package-arg "^13.0.0" - proc-log "^6.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -5331,20 +4096,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" - integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== - dependencies: - mimic-function "^5.0.0" - opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -5378,44 +4129,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" - integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json-from-dist@^1.0.0, package-json-from-dist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -pacote@^21.0.0: - version "21.5.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.5.0.tgz#475fe00db73585dec296590bec484109522e9e6f" - integrity sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ== - dependencies: - "@gar/promise-retry" "^1.0.0" - "@npmcli/git" "^7.0.0" - "@npmcli/installed-package-contents" "^4.0.0" - "@npmcli/package-json" "^7.0.0" - "@npmcli/promise-spawn" "^9.0.0" - "@npmcli/run-script" "^10.0.0" - cacache "^20.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^13.0.0" - npm-packlist "^10.0.1" - npm-pick-manifest "^11.0.1" - npm-registry-fetch "^19.0.0" - proc-log "^6.0.0" - sigstore "^4.0.0" - ssri "^13.0.0" - tar "^7.4.3" - pako@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -5426,29 +4144,12 @@ pako@~1.0.2, pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -5458,22 +4159,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-scurry@^2.0.0, path-scurry@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" - integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== - dependencies: - lru-cache "^11.0.0" - minipass "^7.1.2" - pdfkit@^0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/pdfkit/-/pdfkit-0.18.0.tgz#573efa7f4c78a8ab1362232a05a589b97b292216" @@ -5505,16 +4190,11 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== -picomatch@^4.0.3, picomatch@^4.0.4: +picomatch@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -5522,11 +4202,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -plural-forms@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/plural-forms/-/plural-forms-0.5.5.tgz#d15ca5597aff37373c97edc039ba11659461120e" - integrity sha512-rJw4xp22izsfJOVqta5Hyvep2lR3xPkFUtj7dyQtpf/FbxUiX7PQCajTn2EHDRylizH5N/Uqqodfdu22I0ju+g== - png-js@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.1.0.tgz#60a135216601f807b88a6d61ac93bd42a32c5ee1" @@ -5534,11 +4209,6 @@ png-js@^1.0.0: dependencies: browserify-zlib "^0.2.0" -pofile@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.4.tgz#eab7e29f5017589b2a61b2259dff608c0cad76a2" - integrity sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g== - popper.js@^1.14.7: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -5592,31 +4262,6 @@ postcss-discard-overridden@^7.0.2: resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.2.tgz#aa12b18fa1f2dc7e6d6e51fe062ed839639329c0" integrity sha512-Ym01X4v6U3sY8X0P1J9P+RTar+7JyLTOzDrxKSeaArFsLmkVu4KcAKPBWDYRIyZ/q4jwpSPnOnekeSSqXSXKUw== -postcss-import@^16.0.0: - version "16.1.1" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-16.1.1.tgz#cfbe79e6c9232b0dbbe1c18f35308825cfe8ff2a" - integrity sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.1.0.tgz#003b63c6edde948766e40f3daf7e997ae43a5ce6" - integrity sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw== - dependencies: - camelcase-css "^2.0.1" - -postcss-loader@^8.0.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.1.tgz#c3d9b35498af906fe6c25eb62583c06f619f92fc" - integrity sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow== - dependencies: - cosmiconfig "^9.0.0" - jiti "^2.5.1" - semver "^7.6.2" - postcss-merge-longhand@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.6.tgz#b24f1dfb297b1ae6d1ba33aa88176b23c2069d3c" @@ -5670,16 +4315,6 @@ postcss-minify-selectors@^7.1.0: cssesc "^3.0.0" postcss-selector-parser "^7.1.1" -postcss-mixins@^11.0.0: - version "11.0.3" - resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-11.0.3.tgz#edae34c010a3b42d94207309fe38683404e79575" - integrity sha512-HZa6DHlN7uCkp7GTFNvhpyK/Gi9+vrVG7FPl2oQdj+sXUuYo4ri9OsWBseTnvnLfWxRWOq8/VwcHcixtZPrRRg== - dependencies: - postcss-js "^4.0.1" - postcss-simple-vars "^7.0.1" - sugarss "^4.0.1" - tinyglobby "^0.2.7" - postcss-modules-extract-imports@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" @@ -5708,15 +4343,6 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^13.0.0: - version "13.0.2" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" - integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== - dependencies: - "@csstools/selector-resolve-nested" "^3.1.0" - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-normalize-charset@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.2.tgz#0d0b39ea2df240af4985f31ffa47690679a7a9a5" @@ -5810,11 +4436,6 @@ postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.1: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-simple-vars@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz#836b3097a54dcd13dbd3c36a5dbdd512fad2954c" - integrity sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A== - postcss-svgo@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.2.tgz#67ffebb2910523cba32188732bbe8d8095bda9c2" @@ -5830,12 +4451,12 @@ postcss-unique-selectors@^7.0.6: dependencies: postcss-selector-parser "^7.1.1" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.12, postcss@^8.4.40: +postcss@^8.2.14, postcss@^8.4.40: version "8.5.10" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.10.tgz#8992d8c30acf3f12169e7c09514a12fed7e48356" integrity sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ== @@ -5857,11 +4478,6 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" -proc-log@^6.0.0, proc-log@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" - integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -5872,16 +4488,6 @@ property-information@^7.0.0: resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -5889,30 +4495,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -raw-loader@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readable-stream@3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -5926,11 +4508,6 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" - integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -6083,11 +4660,6 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -6100,21 +4672,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - resolve-url-loader@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz#ee3142fb1f1e0d9db9524d539cfa166e9314f795" @@ -6126,7 +4688,7 @@ resolve-url-loader@^5.0.0: postcss "^8.2.14" source-map "0.6.1" -resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.11: +resolve@^1.20.0, resolve@^1.22.11: version "1.22.12" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== @@ -6136,40 +4698,12 @@ resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.11: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" - integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== - dependencies: - onetime "^7.0.0" - signal-exit "^4.1.0" - restructure@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rimraf@^6.0.1: - version "6.1.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.1.3.tgz#afbee236b3bd2be331d4e7ce4493bac1718981af" - integrity sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA== - dependencies: - glob "^13.0.3" - package-json-from-dist "^1.0.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6179,25 +4713,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - sax@^1.4.3, sax@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== -schema-utils@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - "schema-utils@^3.0.0 || ^4.0.0", schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" @@ -6218,7 +4738,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.6.2, semver@^7.6.3: +semver@^7.3.2, semver@^7.3.4, semver@^7.6.3: version "7.7.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== @@ -6259,52 +4779,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.10.0.tgz#e3bbae99b0f3f0cc5dce05b46a346fae2090e883" - integrity sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw== - dependencies: - execa "^5.1.1" - fast-glob "^3.3.2" - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sigstore@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.1.0.tgz#d34b92a544a05e003a2430209d26d8dfafd805a0" - integrity sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA== - dependencies: - "@sigstore/bundle" "^4.0.0" - "@sigstore/core" "^3.1.0" - "@sigstore/protobuf-specs" "^0.5.0" - "@sigstore/sign" "^4.1.0" - "@sigstore/tuf" "^4.0.1" - "@sigstore/verify" "^3.1.0" - -simple-git@^3.27.0: - version "3.36.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.36.0.tgz#019b28c0a35847ee34299c6fb63770ab1b2dffb7" - integrity sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q== - dependencies: - "@kwsites/file-exists" "^1.1.1" - "@kwsites/promise-deferred" "^1.1.1" - "@simple-git/args-pathspec" "^1.0.3" - "@simple-git/argv-parser" "^1.1.0" - debug "^4.4.0" - sirv@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.2.tgz#f775fccf10e22a40832684848d636346f41cd970" @@ -6314,28 +4793,6 @@ sirv@^3.0.2: mrmime "^2.0.0" totalist "^3.0.0" -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^8.0.3: - version "8.0.5" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" - integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.7" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" - integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== - dependencies: - ip-address "^10.0.1" - smart-buffer "^4.2.0" - source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -6369,31 +4826,6 @@ space-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.23" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz#b069e687b1291a32f126893ed76a27a745ee2133" - integrity sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw== - -ssri@^13.0.0: - version "13.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-13.0.1.tgz#2d8946614d33f4d0c84946bb370dce7a9379fd18" - integrity sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ== - dependencies: - minipass "^7.0.3" - stackframe@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" @@ -6404,7 +4836,7 @@ stimulus-use@^0.52.0: resolved "https://registry.yarnpkg.com/stimulus-use/-/stimulus-use-0.52.3.tgz#d6f35fa93277274957a2ed98a7b04b4d702cb1d6" integrity sha512-stZ5dID6FUrGCR/ChWUa0FT5Z8iqkzT6lputOAb50eF+Ayg7RzJj4U/HoRlp2NV333QfvoRidru9HLbom4hZVw== -"string-width-cjs@npm:string-width@^4.2.0": +string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6413,31 +4845,6 @@ stimulus-use@^0.52.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -6453,13 +4860,6 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6467,23 +4867,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" - integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== - dependencies: - ansi-regex "^6.2.2" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - style-loader@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" @@ -6497,11 +4880,6 @@ stylehacks@^7.0.10: browserslist "^4.28.2" postcss-selector-parser "^7.1.1" -sugarss@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383" - integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw== - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -6544,18 +4922,7 @@ tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== -tar@^7.4.3, tar@^7.5.4: - version "7.5.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.13.tgz#0d214ed56781a26edc313581c0e2d929ceeb866d" - integrity sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng== - dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.1.0" - yallist "^5.0.0" - -terser-webpack-plugin@^5.0.0, terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: +terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: version "5.4.0" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== @@ -6575,13 +4942,6 @@ terser@^5.31.1: commander "^2.20.0" source-map-support "~0.5.20" -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - tiny-emitter@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" @@ -6592,14 +4952,6 @@ tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== -tinyglobby@^0.2.12, tinyglobby@^0.2.7: - version "0.2.16" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.16.tgz#1c3b7eb953fce42b226bc5a1ee06428281aff3d6" - integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg== - dependencies: - fdir "^6.5.0" - picomatch "^4.0.4" - tmp@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" @@ -6656,15 +5008,6 @@ tslib@^2.8.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tuf-js@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.1.0.tgz#ae4ef9afa456fcb4af103dc50a43bc031f066603" - integrity sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ== - dependencies: - "@tufjs/models" "4.1.0" - debug "^4.4.3" - make-fetch-happen "^15.0.1" - type-fest@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.6.0.tgz#502f7a003b7309e96a7e17052cc2ab2c7e5c7a31" @@ -6682,11 +5025,6 @@ undici-types@~7.19.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.19.2.tgz#1b67fc26d0f157a0cba3a58a5b5c1e2276b8ba2a" integrity sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg== -undici@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.25.0.tgz#8c4efb8c998dc187fc1cfb5dde1ef19a211849fb" - integrity sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" @@ -6794,16 +5132,6 @@ unist-util-visit@^5.0.0: unist-util-is "^6.0.0" unist-util-visit-parents "^6.0.0" -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - update-browserslist-db@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" @@ -6812,14 +5140,7 @@ update-browserslist-db@^1.2.3: escalade "^3.2.0" picocolors "^1.1.1" -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -6834,11 +5155,6 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -validate-npm-package-name@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz#e57c3d721a4c8bbff454a246e7f7da811559ea0d" - integrity sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A== - vanilla-colorful@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz#3fb1f4b9f15b797e20fd1ce8e0364f33b073f4a2" @@ -6941,7 +5257,7 @@ webpack-sources@^2.2.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack-sources@^3.0.0, webpack-sources@^3.3.4: +webpack-sources@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== @@ -6983,50 +5299,11 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -which@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-6.0.1.tgz#021642443a198fb93b784a5606721cb18cfcbfce" - integrity sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg== - dependencies: - isexe "^4.0.0" - wildcard@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -workerpool@^9.2.0: - version "9.3.4" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41" - integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - ws@^8.19.0: version "8.20.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" @@ -7039,54 +5316,16 @@ xmldoc@^2.0.3: dependencies: sax "^1.4.3" -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yallist@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" - integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== - -yargs-parser@^21.0.0, yargs-parser@^21.1.1: +yargs-parser@^21.0.0: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-unparser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 54cb43d235ad1cda40c5e35fb9fe76f5e0cf8d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 01:08:14 +0200 Subject: [PATCH 086/108] Updated yarn dependencies --- yarn.lock | 511 +++++++++++++++++++++++++++--------------------------- 1 file changed, 260 insertions(+), 251 deletions(-) diff --git a/yarn.lock b/yarn.lock index f9948f76..3ea1a62b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -64,10 +64,10 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" - integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.3": + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.3.tgz#e3f5347f0589596c91d227ccb6a541d37fb1307b" + integrity sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg== "@babel/core@^7.19.6": version "7.29.0" @@ -120,16 +120,16 @@ semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz#611ff5482da9ef0db6291bcd24303400bca170fb" - integrity sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow== + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz#67328947d956f06fc7b48def269bf0489155fd42" + integrity sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" "@babel/helper-replace-supers" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.6" + "@babel/traverse" "^7.29.0" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1", "@babel/helper-create-regexp-features-plugin@^7.28.5": @@ -253,9 +253,9 @@ "@babel/types" "^7.29.0" "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": - version "7.29.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.2.tgz#58bd50b9a7951d134988a1ae177a35ef9a703ba1" - integrity sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA== + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.3.tgz#116f70a77958307fceac27747573032f8a62f88e" + integrity sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA== dependencies: "@babel/types" "^7.29.0" @@ -281,6 +281,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" +"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@^7.29.3": + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.3.tgz#2e14f9335803d892ccb67ef487e23cf9726156fe" + integrity sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" @@ -723,17 +731,18 @@ "@babel/helper-plugin-utils" "^7.28.6" "@babel/preset-env@^7.19.4": - version "7.29.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.2.tgz#5a173f22c7d8df362af1c9fe31facd320de4a86c" - integrity sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw== + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.3.tgz#2bbd5b0162e6a762adfe356f4aecdef837a3d574" + integrity sha512-ySZypNLAIH1ClygLDQzVMoGQRViATnkHkYYV6TcNDz+8+jwZCdsguGvsb3EY5d9wyWyhmF1iSuFM0Yh5XPnqSA== dependencies: - "@babel/compat-data" "^7.29.0" + "@babel/compat-data" "^7.29.3" "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array" "^7.29.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.6" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" @@ -1559,10 +1568,10 @@ "@ckeditor/ckeditor5-utils" "48.0.1" es-toolkit "1.45.1" -"@colordx/core@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.2.0.tgz#fcf1f637b3f93f12aae57bd3929f3f90a7773627" - integrity sha512-wifnqsGCXRh+lJdX4975nKEPJaSk7k8rMiA/VeGrS4tOTn06WZrow6cUA7wFJKPXfcqj0rXeH4BMgGoKZvBf7g== +"@colordx/core@^5.4.3": + version "5.4.3" + resolved "https://registry.yarnpkg.com/@colordx/core/-/core-5.4.3.tgz#35a8d239b324a6cdf9a16de9970a32c8abc24824" + integrity sha512-kIxYSfA5T8HXjav55UaaH/o/cKivF6jCCGIb8eqtcsfI46wsvlSiT8jMDyrl779qLec3c2c2oHBZo4oAhvbjrQ== "@discoveryjs/json-ext@^0.6.1", "@discoveryjs/json-ext@^0.6.3": version "0.6.3" @@ -2149,9 +2158,9 @@ ajv-keywords@^5.1.0: fast-deep-equal "^3.1.3" ajv@^8.0.0, ajv@^8.9.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" - integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== + version "8.20.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" + integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" @@ -2229,9 +2238,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.10.12: - version "2.10.20" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.20.tgz#7c99b86d43ae9be3810cac515f4675802e1f6b87" - integrity sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ== + version "2.10.25" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.25.tgz#183b45c0d3bdd12addb352426555fb3627eb022a" + integrity sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA== big.js@^5.2.2: version "5.2.2" @@ -2316,9 +2325,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782: - version "1.0.30001788" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz#31e97d1bfec332b3f2d7eea7781460c97629b3bf" - integrity sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ== + version "1.0.30001791" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz#dfb93d85c40ad380c57123e72e10f3c575786b51" + integrity sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ== ccount@^2.0.0: version "2.0.1" @@ -2641,53 +2650,53 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^7.0.15: - version "7.0.15" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.15.tgz#464501cc908de8a9c18b8a59af36a21e1d955705" - integrity sha512-60kx7lJ40//HA85cIfQXSOJFby2D2V1pOMNHVCxue3KFWCjRzmiQyL9OvI+NAhwUlaojOfF9eK3nGvrJLCBUfQ== +cssnano-preset-default@^7.0.16: + version "7.0.16" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.16.tgz#b0c9576c87488dfa00388e3a0c8b27ee946aa352" + integrity sha512-W0hiFi/ca/u2OTptL11OdApaz1vh9jyfd2ku9dMjou6KdpdgbMTagaXHKNl5kaEyRSCu9GIIaPRp5YLdqRAZMw== dependencies: browserslist "^4.28.2" css-declaration-sorter "^7.2.0" - cssnano-utils "^5.0.2" + cssnano-utils "^5.0.3" postcss-calc "^10.1.1" - postcss-colormin "^7.0.9" - postcss-convert-values "^7.0.11" - postcss-discard-comments "^7.0.7" - postcss-discard-duplicates "^7.0.3" - postcss-discard-empty "^7.0.2" - postcss-discard-overridden "^7.0.2" - postcss-merge-longhand "^7.0.6" - postcss-merge-rules "^7.0.10" - postcss-minify-font-values "^7.0.2" - postcss-minify-gradients "^7.0.4" - postcss-minify-params "^7.0.8" - postcss-minify-selectors "^7.1.0" - postcss-normalize-charset "^7.0.2" - postcss-normalize-display-values "^7.0.2" - postcss-normalize-positions "^7.0.3" - postcss-normalize-repeat-style "^7.0.3" - postcss-normalize-string "^7.0.2" - postcss-normalize-timing-functions "^7.0.2" - postcss-normalize-unicode "^7.0.8" - postcss-normalize-url "^7.0.2" - postcss-normalize-whitespace "^7.0.2" - postcss-ordered-values "^7.0.3" - postcss-reduce-initial "^7.0.8" - postcss-reduce-transforms "^7.0.2" - postcss-svgo "^7.1.2" - postcss-unique-selectors "^7.0.6" + postcss-colormin "^7.0.10" + postcss-convert-values "^7.0.12" + postcss-discard-comments "^7.0.8" + postcss-discard-duplicates "^7.0.4" + postcss-discard-empty "^7.0.3" + postcss-discard-overridden "^7.0.3" + postcss-merge-longhand "^7.0.7" + postcss-merge-rules "^7.0.11" + postcss-minify-font-values "^7.0.3" + postcss-minify-gradients "^7.0.5" + postcss-minify-params "^7.0.9" + postcss-minify-selectors "^7.1.1" + postcss-normalize-charset "^7.0.3" + postcss-normalize-display-values "^7.0.3" + postcss-normalize-positions "^7.0.4" + postcss-normalize-repeat-style "^7.0.4" + postcss-normalize-string "^7.0.3" + postcss-normalize-timing-functions "^7.0.3" + postcss-normalize-unicode "^7.0.9" + postcss-normalize-url "^7.0.3" + postcss-normalize-whitespace "^7.0.3" + postcss-ordered-values "^7.0.4" + postcss-reduce-initial "^7.0.9" + postcss-reduce-transforms "^7.0.3" + postcss-svgo "^7.1.3" + postcss-unique-selectors "^7.0.7" -cssnano-utils@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.2.tgz#92939eda38fb934151a8c87bd60764d1a27c5597" - integrity sha512-kt41WLK7FLKfePzPi645Y+/NtW/nNM7Su6nlNUfJyRNW3JcuU3JU7+cWJc+JexTeZ8dRBvFufefdG2XpXkIo0A== +cssnano-utils@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.3.tgz#f64e6a777bf37d99d6b2a6524c6b6c0681f01da0" + integrity sha512-ynIREMICLxkxm7e9bCR9sh75s4Q5drICi0ua1yxo5jH2XPBqSKkl4dOh4EbFqtUmnTMhRffHgYL0EKKkMjtJTg== cssnano@^7.0.4: - version "7.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.7.tgz#152658ec9d24f080851c3010e61673d539765af7" - integrity sha512-N5LGn/OlhMxDTvKACwUPMzT34SSj1b022pvUAE/Vh6r2WD1aUCbc+QNIP/JjX9VVxebdJWZQ3352Lt4oF7dQ/g== + version "7.1.8" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.8.tgz#a6508bd13f3b206676c6594fa19ef45a89acc9dc" + integrity sha512-OGXtXqXmwEoIGfXM2QoD35vweUAtx+J8ZvLSZHOEV0Jv9Hs9ScTdGGjRzZXun5J4PEZhEoytKig2O2NR8NXxKw== dependencies: - cssnano-preset-default "^7.0.15" + cssnano-preset-default "^7.0.16" lilconfig "^3.1.3" csso@^5.0.5: @@ -2698,11 +2707,11 @@ csso@^5.0.5: css-tree "~2.2.0" datatables.net-bs5@^2, datatables.net-bs5@^2.0.0: - version "2.3.7" - resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.3.7.tgz#ddef957ee23b03c2d4bc1d48735b39c6182e5d53" - integrity sha512-RiCEMpMXDBeMDwjSrMpmcXDU6mibRMuOn7Wk7k3SlOfLEY3FQHO7S2m+K7teXYeaNlCLyjJMU+6BUUwlBCpLFw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.3.8.tgz#7266636ff488429988ca664bc8cb0b7c5e48c563" + integrity sha512-TbFH99QSWm93Kn3teHLFKeyOqYbaiddlHvRFdXUwAvh/fjTMhACWmHG+I43ss8d23OEFHV0WIbN4lpPusZm5zw== dependencies: - datatables.net "2.3.7" + datatables.net "2.3.8" jquery ">=1.7" datatables.net-buttons-bs5@^3.0.0: @@ -2790,10 +2799,10 @@ datatables.net-select@3.1.3: datatables.net "^2" jquery ">=1.7" -datatables.net@2.3.7, datatables.net@^2, datatables.net@^2.0.0: - version "2.3.7" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.3.7.tgz#3cd34f6f5d1f40a46b5a20a4ba32604bdbcd6738" - integrity sha512-AvsjG/Nkp6OxeyBKYZauemuzQCPogE1kOtKwG4sYjvdqGCSLiGaJagQwXv4YxG+ts5vaJr6qKGG9ec3g6vTo3w== +datatables.net@2.3.8, datatables.net@^2, datatables.net@^2.0.0: + version "2.3.8" + resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.3.8.tgz#55a8dbe3bd2196951c498ab79bf44602a2bf3229" + integrity sha512-uhViowhlDlheAuo5a8TrkQqADsjrtGeOyvrigvr4t0+K3MyAWqClORXWAYIcN9VLX6iIX0C8O9gwJNd01hITRg== dependencies: jquery ">=1.7" @@ -2883,9 +2892,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^3.0.3: - version "3.4.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.1.tgz#521d04483ac12631b2aedf434a5f5390933b8789" - integrity sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw== + version "3.4.2" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.2.tgz#f0ff81be682c485505097ba8195a058d8f575218" + integrity sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA== optionalDependencies: "@types/trusted-types" "^2.0.7" @@ -2908,9 +2917,9 @@ domutils@^3.0.1: domhandler "^5.0.3" electron-to-chromium@^1.5.328: - version "1.5.341" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.341.tgz#427b826ac41d406162b7700e6032c2b9cc4ecc5c" - integrity sha512-1sZTssferjgDgaqRTc0ieP+ozzpOy7LQTPTtEW3yQFn4+ORdIAZWV5BthXPyHF7YqLvFJCUPhNhdAJQYlYUgiw== + version "1.5.349" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.349.tgz#9b9c6a6d84d1107557c18a9336099ce0ee890e5b" + integrity sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A== emoji-regex@^8.0.0: version "8.0.0" @@ -2923,12 +2932,12 @@ emojis-list@^3.0.0: integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== enhanced-resolve@^5.0.0, enhanced-resolve@^5.20.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz#eeeb3966bea62c348c40a0cc9e7912e2557d0be0" - integrity sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA== + version "5.21.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz#bb8e6fabaf74930de70e61397798750429e5b1ae" + integrity sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA== dependencies: graceful-fs "^4.2.4" - tapable "^2.3.0" + tapable "^2.3.3" entities@^2.0.0: version "2.2.0" @@ -2958,9 +2967,9 @@ es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" - integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.1.0.tgz#1dfcbb5ea3bbfb63f28e1fc3676c3676d1c9624c" + integrity sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ== es-toolkit@1.45.1: version "1.45.1" @@ -3511,9 +3520,9 @@ linebreak@^1.1.0: unicode-trie "^2.0.0" loader-runner@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" - integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== + version "4.3.2" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.2.tgz#9913d3a15971f8f635915e601fb5c9d495d918e9" + integrity sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w== loader-utils@^2.0.0: version "2.0.4" @@ -4063,9 +4072,9 @@ ms@^2.1.3: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanoid@^3.3.11: - version "3.3.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" - integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + version "3.3.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.12.tgz#ab3d912e217a6d0a514f00a72a16543a28982c05" + integrity sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ== neo-async@^2.6.2: version "2.6.2" @@ -4085,9 +4094,9 @@ node-notifier@^9.0.0: which "^2.0.2" node-releases@^2.0.36: - version "2.0.37" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.37.tgz#9bd4f10b77ba39c2b9402d4e8399c482a797f671" - integrity sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg== + version "2.0.38" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.38.tgz#791569b9e4424a044e12c3abfad418ed83ce9947" + integrity sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw== nth-check@^2.0.1: version "2.1.1" @@ -4222,93 +4231,93 @@ postcss-calc@^10.1.1: postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" -postcss-colormin@^7.0.9: - version "7.0.9" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.9.tgz#688b4f22599c9aedd3126f978580b43a4ced009f" - integrity sha512-EZpoUlmbXQUpe+g4ZaGM2kjGlHrQ7Bjzb3xHcNrC9ysI1tGoib6DAYvxg6aB7MGxsjgLF+Qx/jwZQkJ5cKDvXA== - dependencies: - "@colordx/core" "^5.2.0" - browserslist "^4.28.2" - caniuse-api "^3.0.0" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^7.0.11: - version "7.0.11" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.11.tgz#d13c80e74732d841894ba315410bfaae9be79545" - integrity sha512-H+s7P0f9jJylSysAHs3/5MhAx7GthDO05uw1h56L2xyEqpiLTFLEqBNw3PUYzD5p/AKwWaigCXf6FGELpOw9lw== - dependencies: - browserslist "^4.28.2" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^7.0.7: - version "7.0.7" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.7.tgz#6e8226e8e818e37a98c7b6af5c66aa7b730e0d17" - integrity sha512-FJhE3fSte7HaRNL4iwD8LTG9vWqj3puxXIdig6LfrFqc1TJRUhY4kXOkeTXZZfTXYny+k+SO7fd2fymj1wduJg== - dependencies: - postcss-selector-parser "^7.1.1" - -postcss-discard-duplicates@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.3.tgz#4a1c51219a1f347838744829db1064deb0758770" - integrity sha512-9cRxXwhEM/aNZon1qZyToX4NmjbFbxOGbww+0CnbYFDbbPRGZ8jg4IbM8UlA+CzkXxM35itxyaHKNqBBg/RTDg== - -postcss-discard-empty@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.2.tgz#4af6e7cb088ef807564a7e60bfe8db32feb8abcd" - integrity sha512-NZFouOmOwtngJVgkNeI1LtkzFdYqIurxgy4wq3qNvIiXFURTZ3b/K7q3dP3QitlWQ5imHDQL0qSorItQhoxb1g== - -postcss-discard-overridden@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.2.tgz#aa12b18fa1f2dc7e6d6e51fe062ed839639329c0" - integrity sha512-Ym01X4v6U3sY8X0P1J9P+RTar+7JyLTOzDrxKSeaArFsLmkVu4KcAKPBWDYRIyZ/q4jwpSPnOnekeSSqXSXKUw== - -postcss-merge-longhand@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.6.tgz#b24f1dfb297b1ae6d1ba33aa88176b23c2069d3c" - integrity sha512-lDsWeKRsssX/9vKFpingoRiuvGajtOGCJhs1kyaTJ5fzaVzs0aPPYe38UZ/ukMFEA5iuRIjQJHIkH2niYO3ubQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^7.0.10" - -postcss-merge-rules@^7.0.10: +postcss-colormin@^7.0.10: version "7.0.10" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.10.tgz#6b8d2c1e0fa72cf5c045356610c86108eb5af397" - integrity sha512-UXYKxkg8Cy1so/evF7AE/25PNXZb3E0SrvjdbtbGf+MW+doLenKqRLQzz6YZW469ktiXK2MVLFWtel/DftCV0Q== + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.10.tgz#8564621ba92496e30fc0ead4ab29be4718c30614" + integrity sha512-yFr6JezOolHLta/buLE71VKPh2mXursp4saVe98/ol8ZnEWhL+racShqPKlvd/DKWLre/39B6HhcMXf7RZ3hxg== + dependencies: + "@colordx/core" "^5.4.3" + browserslist "^4.28.2" + caniuse-api "^3.0.0" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.12.tgz#2fa2737bfe799fdff3f87309c70bcef16d971eb5" + integrity sha512-xurKu5qqk4viR3Cp3p4xBR4KfnZm4w4ys6+UBwBmeuBSNkH7+DtLnYOYnOffgtE4yx8sH9S1VZ6RAAvROXzP2Q== + dependencies: + browserslist "^4.28.2" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.8.tgz#1eaf1d8b76572cdc50074ff9945e342af678d8dc" + integrity sha512-CvvS5S9WrXblFXCEJ9nVo+4z+eA7zSC7Z88V1HEJuwlQhlFnYTIjg1xJY+BCUiG2bvICap2tXii4mP22BD108Q== + dependencies: + postcss-selector-parser "^7.1.1" + +postcss-discard-duplicates@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.4.tgz#1ddaabe81b7412e056fc406e1a2241319632869c" + integrity sha512-VBNn1+EuMZkeGVVtz0gRfbNGtx9IFgAsAV+E2pHtXPrp4qfGBkhTIiAuE/wrb+Y6Pakg9NewAlfTpYIFAWODtw== + +postcss-discard-empty@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.3.tgz#67b4b07b4fc75dfb602cd97fea61b60dda223e18" + integrity sha512-M2pyjQCU+/7cMHVtL6bKTHjv0lZnPLMpicgr67Dlth7AbuV9gjVTtUqaRwn6Pp6BwSDspUzhz8SaUrRykJU5Dw== + +postcss-discard-overridden@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.3.tgz#366895511ed1d5ffe2d16a84c530d05e554ebff0" + integrity sha512-aNovXo9UsZuRNLzHJtp13lHIvinDPfiXBPePpXkSjCbgp++iU2FqE+YxvjIsg6EdyPZsASFbfu+JcBFVsErXIQ== + +postcss-merge-longhand@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.7.tgz#9c1e2b6566c20aee31bc9167e9379cb9b8823342" + integrity sha512-b3mfYUxR388u5Pt0HPcVIUtUDn/k15UfTY9M+ORW+meCR6JLNxoZffiYvXyOYQoRYQNZyX/UFkMCM/mNHxe1qA== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^7.0.11" + +postcss-merge-rules@^7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.11.tgz#ddf279e103eb6130e35908a07faffe33c21491b0" + integrity sha512-SJUPM18g2BmPhf8BVlbwqWz4aK3pLu6u6xjfwEzra7xL6IBR10sUaiB++EzqcVfadPHrKBSMlNdP+XieykhI+Q== dependencies: browserslist "^4.28.2" caniuse-api "^3.0.0" - cssnano-utils "^5.0.2" + cssnano-utils "^5.0.3" postcss-selector-parser "^7.1.1" -postcss-minify-font-values@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.2.tgz#8d831d8ddfe75d5062451d56f10d36a31e5cbea3" - integrity sha512-Z82NUmnvhPrvMUaHfkaAVBmWQq9F8Dox4Dy0LiwbaTxfmDUWLQtS+0WCgKViwdWCPPajiY9YzoQftgqKdXkM5g== +postcss-minify-font-values@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.3.tgz#e14218a8b85e390b9602dfba6fe66a228ae90b28" + integrity sha512-yilG/VOaNI74IylQvAQQxm3/wZVBkXyYUqNUAdxqwtbWUXPsbK1q8Ms0mL83v+f8YicgcyfYCRZtWACUdYajpA== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.4.tgz#145615c2382e9c26e780a483b3ee0939688419b5" - integrity sha512-g8MNeNyN+lbwKy8DCtJ6zU6awBL0InBsSOaKmgZ1MdRLVItLQUNFNAzzzBnOp4qowOcyyB6GetTlQ0/0UNXvag== +postcss-minify-gradients@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.5.tgz#6baf5a896a067b0e9b1efb78cb75d6dced33e9b7" + integrity sha512-YraROyQRg3BI1+Hg8E05B/JPdnTm8EDSVu4P2BxdM+CRiOyfmou809+chGIqo6fQqwjPGQ947nbGncSjmTU1WQ== dependencies: - "@colordx/core" "^5.2.0" - cssnano-utils "^5.0.2" + "@colordx/core" "^5.4.3" + cssnano-utils "^5.0.3" postcss-value-parser "^4.2.0" -postcss-minify-params@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.8.tgz#5d7f6e303bbf23ebc68899c0b1443a30cc4321d6" - integrity sha512-DIUKM5DZGTmxN7KFKT+rxt0FdPDmRrdK/k3n3+6Po+N/QYn06juwagHcfOVBG0CfCHwcnI612GAUCZc3eT+ZEg== +postcss-minify-params@^7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.9.tgz#afbab58c912c1e5d97c05184a7b0df662f2e87c0" + integrity sha512-R8itbB8BhlpoYyBm1ou0dD+vJnQ3F6adQipR4UnkCHUwlo+S9WXJaDRg1RHjC8YVAtIdrQzSWvJl40HnGDTKjA== dependencies: browserslist "^4.28.2" - cssnano-utils "^5.0.2" + cssnano-utils "^5.0.3" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.1.0.tgz#578e2ab5fb1b5156c4f18d7d64861ff656fd0aea" - integrity sha512-HYl/6I0aL+UvpA10t65BSa7h+tVjBgE6oRI5N/3ylX3vtwvlDL67G3FT3vYDPnTksxr0riiyJcT0tBtyRVoloA== +postcss-minify-selectors@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.1.1.tgz#2de3a0f9fc07d745d4164adc59865b3a0c9b1b87" + integrity sha512-MZWXwSTfcpmNVJIs7tddar/275a4/zT5nG9/gEndHPRZGTAQNpiSkk8s/dq+yZVX2jKfvVn1d5X8Z5SJHWnDoQ== dependencies: browserslist "^4.28.1" caniuse-api "^3.0.0" @@ -4343,88 +4352,88 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-normalize-charset@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.2.tgz#0d0b39ea2df240af4985f31ffa47690679a7a9a5" - integrity sha512-YoINoiR4YKlzfB95Y93b0DSxWy7FLw+1SADIaznMHb88AKizpzfF80tolmiDEbYr1UM4r4Hw+NZq37SwT5f3uw== - -postcss-normalize-display-values@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.2.tgz#a90f6ec503b2c6441f04040108c5a123d7e0abe1" - integrity sha512-wu/NTSjnp8sX5TnEHVPN+eScjAtRs18ELtEduG+Ek3GxjeUDUT+VAA3PJjVIXBcVIk6fiLYFj2iKH0q99S3T2Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^7.0.3: +postcss-normalize-charset@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.3.tgz#79d185099da6d06b0eb417908e1564ba97082594" - integrity sha512-1CJI++oA3yK/fQlPUcEngUfcSWS08Pkt9fK+jVgL53mmtHDBHi0YiuB0m3D9BXwZjmfvCc2GQmFqCAF/CVcPzQ== - dependencies: - postcss-value-parser "^4.2.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.3.tgz#73862324ca03c14e37a2ef1da7a1a6139336e788" + integrity sha512-NoBfZu8PR4c2NlmjvrqQTzCzLY79hwcSRgNQ3ZiNK0ABzf9kYKloE/jNj+/8GQY1wsm8pRRgANk6ydLH8cwo0Q== -postcss-normalize-repeat-style@^7.0.3: +postcss-normalize-display-values@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.3.tgz#479c79c371d685533c73ef491d7adf9a9759e74c" - integrity sha512-RvImJ2Ml4LZSx31qC2C8LDiz65IgBNATtwEr9r3Aue+D0cCGbj4rjNojb/uGpEm4QxnOTzFqMvaDYuKiT1Cmpg== + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.3.tgz#feea4f9b52d6acf165ecfd36162b4254dd7f7ee8" + integrity sha512-ldsCX0QIt05pKIOobZtVQ48wXJecr+czw4+e1/YjVhLMqslShgpVxgPtI2CefURR8oyVoYaU/l829MMwExDMLw== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.2.tgz#a2d2111f320b88fa859212867beb8dd1f5f9e8c0" - integrity sha512-FqtrUh2BU2MnVeLeWBbJ2rwOjuDnA91XvoImc1BbgMWIxdxiPTaquflBHsmFBA3xh3pC3wPZO9W5MaIc7wU/Xw== +postcss-normalize-positions@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.4.tgz#2fc7bcb651fed59b90e21b2e81f546475be65e2d" + integrity sha512-VEvlpeGd3Ju1Hqa/oN4jaP3+ms4laYwkEL9N9u+B6k54PZjXbW1n6wI+aVprf1BQXlCYpS5+1pl/7/vHiKgARg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.2.tgz#50b5b10f99f05bc1d920c6ff471f2ab9794b3fbf" - integrity sha512-5H5fpXBnMACEXzn7k9RP7qWZ1eWg8cuZkUuFygStY7icOj+UucwMWXeMmdkF/iITvTVa7fP85tdRCJeznpdFfQ== +postcss-normalize-repeat-style@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.4.tgz#6df15d1ea9766dd53366edcf9f3dc6d0266e19c0" + integrity sha512-6mPKlY/8cSaDHxX502wERADarJsccwlky6yIrOapHH2ZgfoKAV94SbiTKfKEs4EEpdazuc3J72WsqeYk7hp9+Q== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.8.tgz#315b2f008aa4a94d02de67ec84d9e9b1cd99f9bf" - integrity sha512-imCM3cwK3hvlAG4z1AzYM24m8BPA3/Jk/S71wfbn2I6+E2b+UwFaGvlNqydihXTSl3OFPeQXztqCzg+NGeSibQ== +postcss-normalize-string@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.3.tgz#bf6f38814fc632ae8528a7cd101877835e266e47" + integrity sha512-HnEQPUchi1eznmDKEYrKUTqrprEq97SrpUYClgUkv7V2zRODD9DFoUsYU+m9ZOetmD5ku7fEMZB/lwy8IT6xVQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.3.tgz#db0034b9227a008230733cf4a86757821735104f" + integrity sha512-zmEzHdvpZBZu0OKlbJSfgASQvaayyAoVuWtvyr34IJ/LyS+DaOKvvR3EvFJ9RWWtNIx+CMvO125OVophaxNYew== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.9.tgz#f3d4f13af7471c9fcc5de184ba5ea889d7484f3b" + integrity sha512-DRAdWfeh/TjmhLJsw91vdiWCnUod9iwvM7xyS02/nF/sLsCR3A8l3pztrSUrWG8DSBqfX7yEk9FM0USaVJ2mSg== dependencies: browserslist "^4.28.2" postcss-value-parser "^4.2.0" -postcss-normalize-url@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.2.tgz#5d530aa724a31cfd6b68b904eb542fd1af9cb7d3" - integrity sha512-bLnNY7t76NLRb9QQyCVmCN4qwoHxiq6vABH/CXav9wTuR6dNGHGQ72AyO/+h2quWxZk3l7BqxNL1vtDi9H6y1g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.2.tgz#eb91bdb73f04570e4fb7055493e61b5aedd69fb7" - integrity sha512-TNSVkuhkeOhl36WruQlflxOb7HweoeZowSusNpfsM1+ZvqJ24Mc+xksu05ecMQxlu+0zgI8pyznO2EWqDCQbLA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^7.0.3: +postcss-normalize-url@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.3.tgz#8ad4cc375b9258904f88eefbfe6a9f13f3fe31b7" - integrity sha512-FTt6R9RF7NAYfpOHa2XFPm89FVuo5GiIbcfwOXFy1MYF38BeiNW9ke8ybw9Pk62eEsUlRVVbxHWA3B7ERYqOOA== + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.3.tgz#bf8807b7d0f58228cf7b958e6a024e32ec87b74e" + integrity sha512-CL93wmloq5qsffmFv+bw24MIRbmhHrp53qoh1LDAb/5TtjWEXI/np4xcP/Gw9oWCb2XyWnqHYLDUwiKRoJBA1Q== dependencies: - cssnano-utils "^5.0.2" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.8.tgz#81a3ac97722d55f415cbd18736e596b2fc9330e4" - integrity sha512-VeVRmbgpgTZuRcDQdqnsB4iYTeS2dBRV07UdwK6V3x61F1xTQ2pgIzHBIR4rQYRlXRNKBTGYYhEL1eNA7w9vaQ== +postcss-normalize-whitespace@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.3.tgz#d32556f2c97e217ec3d08d9b2e7f9d1b474e8cb9" + integrity sha512-FdHjjn+Ht5Z2ZRjNOmeCbNq6lq09sUYKpmlF/Aq0XjVNSLTL6fmHlA/3swN2wP2caY9GV/tjSDcIIyS7aN7W0A== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.4.tgz#b86108fa6f873fc78fbaa0cdc4b59cf3b3275ec3" + integrity sha512-nubSi49hDHQk4E8KIj+IbLY8Bg+8OcSUEhgyolgM+atnOvXjV7EjaR6bac4YGZoFyPa9mWoAF3EaYbWdFkKqVg== + dependencies: + cssnano-utils "^5.0.3" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.9.tgz#08e975ad180efe01ebca60e50aec23382ca8163f" + integrity sha512-ztTNPdIxXTxtBcG03E9u8v44M4ElXbMIRT7pf2onlquGula0Y83nKKxqM22FA/hMgkfCjN7ohevkVlaNwI8iOQ== dependencies: browserslist "^4.28.2" caniuse-api "^3.0.0" -postcss-reduce-transforms@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.2.tgz#f40d635a56f6417c7e02bbebb0bf082d4f84d988" - integrity sha512-OV5P9hMnf7kEkeXVXyS5ESqxbIls7a3TqFymUAV5JICO/9YCBEU+QQhQjZiDHaLwFdV7/CL481kVeBUk5FdY3w== +postcss-reduce-transforms@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.3.tgz#904b6176da1d809fc2d1f453b0eefb5db0b6ad0e" + integrity sha512-FXsnN9ZwcZTT8Yf8cAHA8qIGUXcX6WfLd9JoYhrdDfmvsVhhfqkkv7m4AC3rwFOfz+GzkUa87OCKF9dUcicd+g== dependencies: postcss-value-parser "^4.2.0" @@ -4436,18 +4445,18 @@ postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.1: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.2.tgz#67ffebb2910523cba32188732bbe8d8095bda9c2" - integrity sha512-ixExc8m+/68yuSYQzV/1DgtTup/7nI2dN9eiDS5GMRUzeCH4q9UcqeZPwcSVhdf8ay9fRwXDUHwcY5/XzQSszQ== +postcss-svgo@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.3.tgz#d225c0df52d984659277b9d9f6b255cf8b2942d3" + integrity sha512-2QfoFOYMcj8lwcVEf9WeTlkVIAm7u2QvOEhMzkQU3KUhhGX/l8hVV9EtjMv4iq3E9iI3OeeMN0YoMLbGusuigw== dependencies: postcss-value-parser "^4.2.0" svgo "^4.0.1" -postcss-unique-selectors@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.6.tgz#fdbb14c57ebb3afa4b79c086841cf23e7d1473b6" - integrity sha512-cDxnYw1QuBMW5w3svZ0BlYF0IA4Amr+1JoTLXzu6vDFPNwohN2QU+sPZNx15b930LR7ce+/600h28/cYoxO9vw== +postcss-unique-selectors@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.7.tgz#f377aa479c646a5b1049f54f603cd89d88606512" + integrity sha512-d+sCkaRnSefghOUdH8CMJZV9yUQhj2ojpe8Nw/lA+LV1UOfeleGkLTl6XdCFFSai9UJ+DJPb69FFuqthXYsY8w== dependencies: postcss-selector-parser "^7.1.1" @@ -4457,9 +4466,9 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.2.14, postcss@^8.4.40: - version "8.5.10" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.10.tgz#8992d8c30acf3f12169e7c09514a12fed7e48356" - integrity sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ== + version "8.5.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.13.tgz#6cfaf647f2e7ef69850208eccd849e0d3f65d420" + integrity sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -4872,10 +4881,10 @@ style-loader@^4.0.0: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== -stylehacks@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.10.tgz#1fdeab7bb40c85074e60286f8053700d9d7436cc" - integrity sha512-sRJ7klmhe/Fl5woJcbJUa2qP1Ueffsl1CQI4ePvqXLkZmcIuAt09aP9uT/FOFPqXh9Rh8M5UkgEnwTdTKn/Aag== +stylehacks@^7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.11.tgz#b6c97388d4f7f97560f3c69e3bfe1d3db74bb2c2" + integrity sha512-iODNfhXVLqc5LADs+Y6Oh5wJuK5ZcHbVng8aiK3y9pjMQdc5hLrBW0eFU6FtnpNrE6PoEg/MmFTU4waotj5WNg== dependencies: browserslist "^4.28.2" postcss-selector-parser "^7.1.1" @@ -4917,15 +4926,15 @@ tagged-tag@^1.0.0: resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== -tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: +tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0, tapable@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: - version "5.4.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" - integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== + version "5.5.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz#d92b8e2c892dd09c683c38120394267e8d8660ef" + integrity sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" @@ -4933,9 +4942,9 @@ terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.17: terser "^5.31.1" terser@^5.31.1: - version "5.46.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.1.tgz#40e4b1e35d5f13130f82793a8b3eeb7ec3a92eee" - integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ== + version "5.46.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.2.tgz#b9529672d5b0024c7959571c83b82f65077b2a4f" + integrity sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.15.0" @@ -5258,9 +5267,9 @@ webpack-sources@^2.2.0: source-map "^0.6.1" webpack-sources@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" - integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== + version "3.4.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.4.1.tgz#009d110999ebd9fb3a6fa8d32eec6f84d940e65d" + integrity sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A== webpack@^5.74.0: version "5.106.2" From c09fc7d4835147482056ae50814b520950c94f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 01:24:24 +0200 Subject: [PATCH 087/108] New Crowdin updates (#1358) * New translations validators.en.xlf (Portuguese, Brazilian) [ci skip] * New translations security.en.xlf (Portuguese, Brazilian) [ci skip] * New translations frontend.en.xlf (Portuguese, Brazilian) [ci skip] * New translations messages.en.xlf (English) [ci skip] * New translations validators.en.xlf (Portuguese, Brazilian) [ci skip] * New translations security.en.xlf (Portuguese, Brazilian) [ci skip] * New translations frontend.en.xlf (Portuguese, Brazilian) [ci skip] * Remove pt variants as they are actually pt-BR --- translations/frontend.pt_BR.xlf | 59 +++++++ translations/messages.en.xlf | 48 +++--- translations/security.pt_BR.xlf | 23 +++ translations/validators.pt_BR.xlf | 257 ++++++++++++++++++++++++++++++ 4 files changed, 363 insertions(+), 24 deletions(-) create mode 100644 translations/frontend.pt_BR.xlf create mode 100644 translations/security.pt_BR.xlf create mode 100644 translations/validators.pt_BR.xlf diff --git a/translations/frontend.pt_BR.xlf b/translations/frontend.pt_BR.xlf new file mode 100644 index 00000000..fb2f2335 --- /dev/null +++ b/translations/frontend.pt_BR.xlf @@ -0,0 +1,59 @@ + + + + + + search.placeholder + Pesquisar + + + + + part.labelp + Componentes + + + + + entity.select.group.new_not_added_to_DB + Novo (não adicionado ainda no DB) + + + + + user.password_strength.very_weak + Muito fraca + + + + + user.password_strength.weak + Fraca + + + + + user.password_strength.medium + Média + + + + + user.password_strength.strong + Forte + + + + + user.password_strength.very_strong + Bem forte + + + + + search.submit + Vá! + + + + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 8af54745..1a37106f 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13068,145 +13068,145 @@ Buerklin-API Authentication server: - + settings.ai AI - + settings.ai.openrouter OpenRouter - + settings.ai.lmstudio LMStudio - + settings.ips.ai_extractor.model AI Model - + settings.ips.ai_extractor.ai_platform AI Platform - + settings.ips.ai_extractor.model.help The AI model that should be used for extraction. Must support structured output. - + settings.ips.ai_extractor.max_content_length Max. Website Content length - + settings.ips.ai_extractor.max_content_length.description The maximum number of characters of the website that are sent to the AI service. - + settings.ips.ai_extractor.output_language Output language - + settings.ips.ai_extractor.output_language.description By default, the providers returns information in the same language as the website. With that option you can ask the AI to translate it for you. Might only work with certain models. - + settings.ips.ai_extractor.additional_instructions Additional instructions - + settings.ips.ai_extractor.additional_instructions.description The additional instructions will be appended to the system prompt. - + info_providers.search.advanced_options Advanced options - + info_providers.no_cache_search Do not cache search results / Force fresh search - + info_providers.no_cache_details Do not cache result details / Force fresh part detail retrieval - + info_providers.from_url.method.generic_web Classic Web Scraper - + info_providers.from_url.method.ai_web AI Web Scraper - + info_providers.from_url.method Method - + info_providers.from_url.no_cache Ignore cache / Force fresh info retrieval - + info_providers.from_url.skip_delegation Do not delegate to specialized info providers - + settings.ips.ai_extractor AI Web Extractor - + settings.ips.ai_extractor.description This info provider uses an large language model (LLM) to extract detailed part information from arbitary shop URLs. - + settings.ai.openrouter.help Access to many AI models via openrouter.ai - + settings.ai.lmstudio.hosturl Host URL diff --git a/translations/security.pt_BR.xlf b/translations/security.pt_BR.xlf new file mode 100644 index 00000000..284b32d9 --- /dev/null +++ b/translations/security.pt_BR.xlf @@ -0,0 +1,23 @@ + + + + + + user.login_error.user_disabled + Sua conta está desativada! Fale com um administrador se você acredita ser um erro. + + + + + saml.error.cannot_login_local_user_per_saml + Você não pode fazer o login na conta com um usuário local por SSO! Use sua senha de usuário local. + + + + + saml.error.cannot_login_saml_user_locally + Você não pode usar autenticação local como login como usuário SAML! Use seu login SSO. + + + + diff --git a/translations/validators.pt_BR.xlf b/translations/validators.pt_BR.xlf new file mode 100644 index 00000000..fb07b80a --- /dev/null +++ b/translations/validators.pt_BR.xlf @@ -0,0 +1,257 @@ + + + + + + part.master_attachment.must_be_picture + O anexo de pré-visualização deve ser uma imagem válida! + + + + + structural.entity.unique_name + Um elemento com esse nome já existe nesse nível! + + + + + parameters.validator.min_lesser_typical + Valor precisa ser menor ou igual ao valor típico ({{ compared_value }}). + + + + + parameters.validator.min_lesser_max + Valor precisa ser menor ao valor máximo ({{ compared_value }}). + + + + + parameters.validator.max_greater_typical + Valor precisa ser maior ou igual ao valor típico ({{ compared_value }}). + + + + + validator.user.username_already_used + Um usuário com esse nome já existe + + + + + user.invalid_username + O nome de usuário precisa conter apenas letras, números, underscores, pontos, mais ou menos e não pode começar com um @! + + + + + obsolete + + + validator.noneofitschild.self + Um elemento não pode ser seu próprio parente! + + + + + obsolete + + + validator.noneofitschild.children + Você não pode assimilar um elemento filho como pai (pode causar loops)! + + + + + validator.select_valid_category + Selecione uma categoria válida! + + + + + validator.part_lot.only_existing + Não se pode adicionar novos componentes a essa localização já que está marcado como "Somente existentes" + + + + + validator.part_lot.location_full.no_increase + Localização está cheia. Quantidade não pode ser aumentada (novo valor deve ser menor que {{ old_amount }}). + + + + + validator.part_lot.location_full + Localização está cheia. Não pode ser adicionados novos componentes a ela. + + + + + validator.part_lot.single_part + Essa localização só pode conter um único componente que já está cheio! + + + + + validator.attachment.must_not_be_null + Você precisa selecionar um tipo de anexo! + + + + + validator.orderdetail.supplier_must_not_be_null + Você precisa selecionar um fornecedor! + + + + + validator.measurement_unit.use_si_prefix_needs_unit + Para habilitar prefixos do SI, você precisa inserir um símbolo de unidade! + + + + + part.ipn.must_be_unique + Um número de componente interno precisa ser único. {{ value }} já está em uso! + + + + + validator.project.bom_entry.name_or_part_needed + Você precisa escolher um componente ou inserir um nome a uma entrada BOM que não indica um componente. + + + + + project.bom_entry.name_already_in_bom + Já existe uma entrada BOM com esse nome! + + + + + project.bom_entry.part_already_in_bom + Esse componente já existe no BOM! + + + + + project.bom_entry.mountnames_quantity_mismatch + A quantidade de nome de componentes deve coincidir com a quantidade prevista no BOM + + + + + project.bom_entry.can_not_add_own_builds_part + Você não pode adicionar um componente de produção interna ao projeto de sua lista de materiais (BOM) + + + + + project.bom_has_to_include_all_subelement_parts + O BOM do projeto precisa incluir todas as montagens de componentes dos subprojetos. Componente %part_name% do projeto %project_name% está faltando! + + + + + project.bom_entry.price_not_allowed_on_parts + Preços não são permitidos em entradas BOM associadas a um componente. Defina o preço a um componente. + + + + + validator.project_build.lot_bigger_than_needed + Você selecionou uma quantidade maior que a necessária para retirar! Remova a quantidade desnecessária. + + + + + validator.project_build.lot_smaller_than_needed + Você selecionou menos quantidade para retirar que a necessária! Adicione a quantidade necessária. + + + + + part.name.must_match_category_regex + O nome do componente não coincide com a expressão regular inserida pela categoria: %regex% + + + + + validator.attachment.name_not_blank + Adicione um valor aqui, ou insira um arquivo para automaticamente usar o nome do arquivo como nome do anexo. + + + + + validator.part_lot.owner_must_match_storage_location_owner + O dono do lote precisa coincidir com o dono da localização do armazém selecionado (%owner_name%)! + + + + + validator.part_lot.owner_must_not_be_anonymous + Um dono de lote não pode ser um usuário anônimo! + + + + + validator.part_association.must_set_an_value_if_type_is_other + Se você atribuir o tipo para "outro", então deve adicionar o valor descrição para ele! + + + + + validator.part_association.part_cannot_be_associated_with_itself + Um componente não pode ser associado a ele mesmo! + + + + + validator.part_association.already_exists + A atribuição desse componente já foi feita! + + + + + validator.part_lot.vendor_barcode_must_be_unique + O valor do código de barras do vendedor já está sendo usado por outro lote. Precisa ser único! + + + + + validator.year_2038_bug_on_32bit + Por limitações técnicas, não é possível selecionar datas depois de 19/01/2038 em um sistema de 32 bits! + + + + + validator.fileSize.invalidFormat + Formato de tamanho de arquivo inválido. Use um número inteiro com K, M, G de sufixo par Kilo, Mega ou Gigabytes. + + + + + validator.invalid_range + O intervalo atual não é válido! + + + + + validator.google_code.wrong_code + Código inválido. Confira se o seu aplicativo de autenticação está configurado corretamente e se ambos servidor e o dispositivo de autenticação estão com os horários sincronizados. + + + + + settings.synonyms.type_synonyms.collection_type.duplicate + Já existe uma tradução definida para esse tipo e idioma + + + + + validator.invalid_gtin + Esse não é um GTIN / EAN válido! + + + + From fcd598286a527e19f9310e19ca02ad078f1805db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 01:34:14 +0200 Subject: [PATCH 088/108] Fixed webpack build --- assets/controllers/elements/ckeditor_controller.js | 2 +- webpack.config.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/assets/controllers/elements/ckeditor_controller.js b/assets/controllers/elements/ckeditor_controller.js index b7c87dab..17aa9214 100644 --- a/assets/controllers/elements/ckeditor_controller.js +++ b/assets/controllers/elements/ckeditor_controller.js @@ -29,7 +29,7 @@ import "ckeditor5/ckeditor5.css";; import "../../css/components/ckeditor.css"; const translationContext = require.context( - 'ckeditor5/translations', + 'ckeditor5-translations', //Alias defined in webpack.config.js false, //Only load the translation files we will really need /(de|it|fr|ru|ja|cs|da|zh|pl|hu)\.js$/ diff --git a/webpack.config.js b/webpack.config.js index 18893d8b..60ea145f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -22,6 +22,7 @@ var Encore = require('@symfony/webpack-encore'); const zlib = require('zlib'); +const path = require('path') const CompressionPlugin = require("compression-webpack-plugin"); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; @@ -133,6 +134,10 @@ Encore loader.exclude = /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/; } ) + .addAliases({ + 'ckeditor5-translations': path.resolve(__dirname, 'node_modules/ckeditor5/dist/translations') + }) + ; From 3c9866e90d8dc0815f731b8160993b3120c7361d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 16:50:42 +0200 Subject: [PATCH 089/108] Improved AI extractor It now gives better results and use less tokens --- docs/usage/information_provider_system.md | 2 +- .../InfoProviderSystem/Providers/AIWebProvider.php | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/usage/information_provider_system.md b/docs/usage/information_provider_system.md index 7cac6328..223771c0 100644 --- a/docs/usage/information_provider_system.md +++ b/docs/usage/information_provider_system.md @@ -117,7 +117,7 @@ This provider can be particularly useful for extracting information from website It also potentially extracts more detailed information than the Generic Web URL Provider, as it is not limited to the fields defined in the Schema.org format. To use the AI Web Extractor, you need to setup an AI platform, in the AI settings tab, and chose a model, which support structured output. -For many use cases a small and cheap model like `google/gemini-2.5-flash-lite` will be sufficient, coming down to costs like 0.003$ per request. +For many use cases a small and cheap model like `google/gemini-2.5-flash-lite` will be sufficient, coming down to costs like 0.001$ per request. For more complex websites, or if you wanna use the LLM for translation purposes too, you should consider a more powerful model. You can add some additional instructions for the model, which gets added to the system prompt, to tweak the output of the model. diff --git a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php index 8fb7e4ec..7f4a3586 100644 --- a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php @@ -32,6 +32,7 @@ use App\Services\InfoProviderSystem\DTOJsonSchemaConverter; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Settings\InfoProviderSystem\AIExtractorSettings; use Brick\Schema\SchemaReader; +use Imagine\Image\Format; use Jkphl\Micrometa; use League\HTMLToMarkdown\HtmlConverter; use Psr\Cache\CacheItemPoolInterface; @@ -174,7 +175,8 @@ final class AIWebProvider implements InfoProviderInterface */ private function extractStructuredData(string $html, string $url): string { - $micrometa = new Micrometa\Ports\Parser(); + //Only parse microdata, json-ld and rdfa, as they are the most common formats for structured data on product pages. Links and microformat only create clutter for the LLM + $micrometa = new Micrometa\Ports\Parser(Micrometa\Ports\Format::JSON_LD | Micrometa\Ports\Format::MICRODATA | Micrometa\Ports\Format::RDFA_LITE); $items = $micrometa($url, $html); return json_encode($items->toObject(), JSON_THROW_ON_ERROR); @@ -264,6 +266,9 @@ Rules: - If information is not found, use null - Try to avoid duplicating parameters, if the same parameter is mentioned multiple times, or if it is already used in another field. - Include only the 1 to 3 most relevant images, such as the main product image or important diagrams. Ignore decorative images, logos, or icons. +- Extract GTIN / EAN if available, as it can be useful for matching parts across different sources, even if the part number is different. +- Include detailed product description into notes field, as it can contain important information that doesn't fit into other fields, such as features, applications, or unique selling points. + PROMPT; if ($this->settings->outputLanguage === null) { From 91bf8371adb992aa72a478639eb8245d071d5e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 3 May 2026 16:54:06 +0200 Subject: [PATCH 090/108] Show hint of google/gemini-2.5-flash-lite in placeholder --- src/Settings/InfoProviderSystem/AIExtractorSettings.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Settings/InfoProviderSystem/AIExtractorSettings.php b/src/Settings/InfoProviderSystem/AIExtractorSettings.php index da5ef0f9..af9753d9 100644 --- a/src/Settings/InfoProviderSystem/AIExtractorSettings.php +++ b/src/Settings/InfoProviderSystem/AIExtractorSettings.php @@ -34,6 +34,7 @@ use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\AI\Platform\Capability; use Symfony\Component\Form\Extension\Core\Type\LanguageType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Translation\StaticMessage; use Symfony\Component\Translation\TranslatableMessage as TM; use Symfony\Component\Validator\Constraints\Language; @@ -51,7 +52,11 @@ class AIExtractorSettings public ?AIPlatforms $platform = null; #[SettingsParameter(label: new TM("settings.ips.ai_extractor.model"), description: new TM("settings.ips.ai_extractor.model.help"), - formType: AiModelsType::class, formOptions: ['platform_selector' => self::MODEL_SELECTOR_LABEL, 'filter_capability' => Capability::OUTPUT_STRUCTURED], + formType: AiModelsType::class, formOptions: [ + 'platform_selector' => self::MODEL_SELECTOR_LABEL, 'filter_capability' => Capability::OUTPUT_STRUCTURED, + 'attr' => ['placeholder' => new StaticMessage('google/gemini-2.5-flash-lite')] + ], + )] public ?string $model = null; From d34670815090eaaab9f8a7f25a7f898e240ba779 Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Sun, 3 May 2026 23:00:31 +0200 Subject: [PATCH 091/108] Add Docker update support via Watchtower integration (#1330) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Docker update support via Watchtower integration Add web-based Docker container updates using Watchtower HTTP API. When configured with WATCHTOWER_API_URL and WATCHTOWER_API_TOKEN environment variables, administrators can trigger container updates from the Update Manager page. Features: - WatchtowerClient service for Watchtower HTTP API communication - Docker update progress page with animated Docker whale logo - Real-time step tracking: Trigger, Pull, Stop, Restart, Health Check, Verify - CSP-compatible progress bar using CSS classes - Translated UI strings via Stimulus values - Health endpoint polling to detect container restart - Watchtower setup documentation for Docker installations - WatchtowerClient made nullable for non-Docker installations - Unit tests for WatchtowerClient * Fixed translation message IDs * Switch Watchtower docs to maintained nicholas-fedor fork The original containrrr/watchtower is no longer maintained (last release Nov 2023). Point users to the drop-in compatible active fork and add an info note explaining why. No code changes — the HTTP API is identical, so WatchtowerClient works against either image. * Fixed exception when github is not reachable * Only show version string in health endpoint, when user has permissions * Do not expose watchtower API port in example docker-compose file * Show if updates, backup restore and backup download are allowed in update manager page * Report 'not authorized' for version in health endpoint if user lacks permission --------- Co-authored-by: Jan Böhmer --- .env | 6 + .../docker_update_progress_controller.js | 377 ++++++++++++++++++ docs/installation/installation_docker.md | 46 +++ src/Controller/UpdateManagerController.php | 98 +++++ .../MaintenanceModeSubscriber.php | 4 +- src/Services/System/InstallationType.php | 4 +- src/Services/System/UpdateChecker.php | 17 +- src/Services/System/UpdateExecutor.php | 17 + src/Services/System/WatchtowerClient.php | 125 ++++++ .../update_manager/docker_progress.html.twig | 235 +++++++++++ .../admin/update_manager/index.html.twig | 198 ++++++--- .../TwigBundle/Exception/error.html.twig | 2 +- .../Services/System/WatchtowerClientTest.php | 197 +++++++++ translations/messages.en.xlf | 306 ++++++++++++++ 14 files changed, 1577 insertions(+), 55 deletions(-) create mode 100644 assets/controllers/docker_update_progress_controller.js create mode 100644 src/Services/System/WatchtowerClient.php create mode 100644 templates/admin/update_manager/docker_progress.html.twig create mode 100644 tests/Services/System/WatchtowerClientTest.php diff --git a/.env b/.env index 2ea04325..8d5e5a54 100644 --- a/.env +++ b/.env @@ -76,6 +76,12 @@ DISABLE_BACKUP_RESTORE=1 # When enabled, users must confirm their password before downloading. DISABLE_BACKUP_DOWNLOAD=1 +# Watchtower integration for Docker-based updates. +# Set these to enable one-click updates via the Update Manager UI. +# See https://containrrr.dev/watchtower/ for Watchtower setup. +WATCHTOWER_API_URL= +WATCHTOWER_API_TOKEN= + ################################################################################### # SAML Single sign on-settings ################################################################################### diff --git a/assets/controllers/docker_update_progress_controller.js b/assets/controllers/docker_update_progress_controller.js new file mode 100644 index 00000000..bc4c6ff3 --- /dev/null +++ b/assets/controllers/docker_update_progress_controller.js @@ -0,0 +1,377 @@ +/* + * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). + * + * Copyright (C) 2019 - 2026 Jan Böhmer (https://github.com/jbtronics) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { Controller } from '@hotwired/stimulus'; + +/** + * Stimulus controller for Docker update progress tracking. + * + * Polls the health check endpoint to detect when the container restarts + * after a Watchtower-triggered update. Drives the step timeline UI + * with timestamps, matching the git update progress style. + */ +export default class extends Controller { + static values = { + healthUrl: String, + previousVersion: { type: String, default: 'unknown' }, + pollInterval: { type: Number, default: 5000 }, + maxWaitTime: { type: Number, default: 600000 }, // 10 minutes + // Translated UI strings (passed from Twig template) + textPulling: { type: String, default: 'Waiting for Watchtower to pull the new image...' }, + textPullingDetail: { type: String, default: 'Watchtower is checking for and downloading the latest Docker image...' }, + textRestarting: { type: String, default: 'Container is restarting with the new image...' }, + textRestartingDetail: { type: String, default: 'The container is being recreated with the updated image. This may take a moment...' }, + textSuccess: { type: String, default: 'Update Complete!' }, + textSuccessDetail: { type: String, default: 'Part-DB has been updated successfully via Docker.' }, + textTimeout: { type: String, default: 'Update Taking Longer Than Expected' }, + textTimeoutDetail: { type: String, default: 'The update may still be in progress. Check your Docker logs for details.' }, + textStepPull: { type: String, default: 'Pull Image' }, + textStepRestart: { type: String, default: 'Restart Container' }, + }; + + static targets = [ + // Header + 'headerWhale', 'titleIcon', + 'statusText', 'statusSubtext', + 'progressBar', 'elapsedTime', + // Alerts + 'stepAlert', 'stepName', 'stepMessage', + 'successAlert', 'timeoutAlert', 'errorAlert', 'errorMessage', 'warningAlert', + // Step timeline (multi-target arrays) + 'stepRow', 'stepIcon', 'stepDetail', 'stepTime', + // Version display + 'newVersion', 'previousVersion', + // Actions + 'actions', + ]; + + // Step definitions: name -> { index, progress% } + static STEPS = { + trigger: { index: 0, progress: 15 }, + pull: { index: 1, progress: 30 }, + stop: { index: 2, progress: 50 }, + restart: { index: 3, progress: 65 }, + health: { index: 4, progress: 80 }, + verify: { index: 5, progress: 100 }, + }; + + connect() { + this.serverWentDown = false; + this.serverCameBack = false; + this.startTime = Date.now(); + this.timer = null; + this.currentStep = 'pull'; // trigger is already done + this.stepTimestamps = { trigger: this.formatTime(new Date()) }; + this.consecutiveSuccessCount = 0; + + // Set the trigger step timestamp + this.setStepTimestamp(0, this.stepTimestamps.trigger); + + this.poll(); + } + + disconnect() { + if (this.timer) { + clearTimeout(this.timer); + } + } + + createTimeoutSignal(ms) { + if (typeof AbortSignal.timeout === 'function') { + return AbortSignal.timeout(ms); + } + const controller = new AbortController(); + setTimeout(() => controller.abort(), ms); + return controller.signal; + } + + async poll() { + const elapsed = Date.now() - this.startTime; + this.updateElapsedTime(elapsed); + + if (elapsed > this.maxWaitTimeValue) { + this.showTimeout(); + return; + } + + try { + const response = await fetch(this.healthUrlValue, { + cache: 'no-store', + signal: this.createTimeoutSignal(4000), + }); + + if (response.ok) { + let data; + try { + data = await response.json(); + } catch (parseError) { + this.schedulePoll(); + return; + } + + if (this.serverWentDown) { + // Server came back! Move through health check -> verify + if (!this.serverCameBack) { + this.serverCameBack = true; + this.advanceToStep('health'); + } + + this.consecutiveSuccessCount++; + + // Wait for 2 consecutive successes to confirm stability + if (this.consecutiveSuccessCount >= 2) { + this.showSuccess(data.version); + return; + } + } else { + // Server still up - Watchtower pulling image + this.showPulling(); + } + } else if (response.status === 503) { + // Maintenance mode or shutting down + this.serverWentDown = true; + this.consecutiveSuccessCount = 0; + this.advanceToStep('stop'); + } else { + if (this.serverWentDown) { + this.showRestarting(); + } else { + this.showPulling(); + } + } + } catch (e) { + // Connection refused = container is down + if (!this.serverWentDown) { + this.serverWentDown = true; + this.advanceToStep('stop'); + } + this.consecutiveSuccessCount = 0; + this.showRestarting(); + } + + this.schedulePoll(); + } + + schedulePoll() { + this.timer = setTimeout(() => this.poll(), this.pollIntervalValue); + } + + /** + * Advance the step timeline to a specific step. + * Marks all previous steps as complete with timestamps. + */ + advanceToStep(stepName) { + const steps = this.constructor.STEPS; + const targetIndex = steps[stepName]?.index; + if (targetIndex === undefined) return; + + const stepNames = Object.keys(steps); + const now = this.formatTime(new Date()); + + for (let i = 0; i < stepNames.length; i++) { + const name = stepNames[i]; + + if (i < targetIndex) { + // Completed step + this.markStepComplete(i, this.stepTimestamps[name] || now); + if (!this.stepTimestamps[name]) { + this.stepTimestamps[name] = now; + } + } else if (i === targetIndex) { + // Current active step + this.markStepActive(i); + this.stepTimestamps[name] = now; + this.setStepTimestamp(i, now); + this.currentStep = name; + } + // Steps after targetIndex remain pending (no change needed) + } + + // Update progress bar + this.updateProgressBar(steps[stepName].progress); + } + + showPulling() { + if (this.hasStatusTextTarget) { + this.statusTextTarget.textContent = this.textPullingValue; + } + if (this.hasStepNameTarget) { + this.stepNameTarget.textContent = this.textStepPullValue; + } + if (this.hasStepMessageTarget) { + this.stepMessageTarget.textContent = this.textPullingDetailValue; + } + this.updateProgressBar(30); + } + + showRestarting() { + // Advance to restart step if we haven't already + if (this.currentStep !== 'restart' && this.currentStep !== 'health' && this.currentStep !== 'verify') { + this.advanceToStep('restart'); + } + + if (this.hasStatusTextTarget) { + this.statusTextTarget.textContent = this.textRestartingValue; + } + if (this.hasStepNameTarget) { + this.stepNameTarget.textContent = this.textStepRestartValue; + } + if (this.hasStepMessageTarget) { + this.stepMessageTarget.textContent = this.textRestartingDetailValue; + } + } + + showSuccess(newVersion) { + // Advance all steps to complete + const steps = this.constructor.STEPS; + const stepNames = Object.keys(steps); + const now = this.formatTime(new Date()); + + for (let i = 0; i < stepNames.length; i++) { + const name = stepNames[i]; + this.markStepComplete(i, this.stepTimestamps[name] || now); + } + + this.updateProgressBar(100); + + // Update whale animation + if (this.hasHeaderWhaleTarget) { + this.headerWhaleTarget.classList.add('success'); + } + if (this.hasTitleIconTarget) { + this.titleIconTarget.className = 'fas fa-check-circle text-success'; + } + + if (this.hasStatusTextTarget) { + this.statusTextTarget.textContent = this.textSuccessValue; + } + if (this.hasStatusSubtextTarget) { + this.statusSubtextTarget.textContent = this.textSuccessDetailValue; + } + + // Hide step alert, show success alert + this.toggleTarget('stepAlert', false); + this.toggleTarget('successAlert', true); + this.toggleTarget('warningAlert', false); + this.toggleTarget('actions', true); + + if (this.hasNewVersionTarget) { + this.newVersionTarget.textContent = newVersion || 'latest'; + } + if (this.hasPreviousVersionTarget) { + this.previousVersionTarget.textContent = this.previousVersionValue; + } + } + + showTimeout() { + this.updateProgressBar(0); + + if (this.hasHeaderWhaleTarget) { + this.headerWhaleTarget.classList.add('timeout'); + } + if (this.hasTitleIconTarget) { + this.titleIconTarget.className = 'fas fa-exclamation-triangle text-warning'; + } + + if (this.hasStatusTextTarget) { + this.statusTextTarget.textContent = this.textTimeoutValue; + } + if (this.hasStatusSubtextTarget) { + this.statusSubtextTarget.textContent = this.textTimeoutDetailValue; + } + + this.toggleTarget('stepAlert', false); + this.toggleTarget('timeoutAlert', true); + this.toggleTarget('warningAlert', false); + this.toggleTarget('actions', true); + } + + // --- Step timeline helpers --- + + markStepComplete(index, timestamp) { + if (this.stepIconTargets[index]) { + this.stepIconTargets[index].className = 'fas fa-check-circle text-success me-3'; + } + if (this.stepRowTargets[index]) { + this.stepRowTargets[index].classList.remove('text-muted'); + } + if (timestamp) { + this.setStepTimestamp(index, timestamp); + } + } + + markStepActive(index) { + if (this.stepIconTargets[index]) { + this.stepIconTargets[index].className = 'fas fa-spinner fa-spin text-primary me-3'; + } + if (this.stepRowTargets[index]) { + this.stepRowTargets[index].classList.remove('text-muted'); + } + } + + setStepTimestamp(index, time) { + if (this.stepTimeTargets[index]) { + this.stepTimeTargets[index].textContent = time; + } + } + + // --- UI helpers --- + + toggleTarget(name, show) { + const hasMethod = 'has' + name.charAt(0).toUpperCase() + name.slice(1) + 'Target'; + if (this[hasMethod]) { + this[name + 'Target'].classList.toggle('d-none', !show); + } + } + + updateProgressBar(percent) { + if (this.hasProgressBarTarget) { + const bar = this.progressBarTarget; + // Remove all width classes + bar.classList.remove('progress-w-0', 'progress-w-15', 'progress-w-30', 'progress-w-50', 'progress-w-65', 'progress-w-80', 'progress-w-100'); + bar.classList.add('progress-w-' + percent); + bar.textContent = percent + '%'; + bar.setAttribute('aria-valuenow', percent); + + bar.classList.remove('bg-success', 'bg-danger', 'progress-bar-striped', 'progress-bar-animated'); + if (percent === 100) { + bar.classList.add('bg-success'); + } else if (percent === 0) { + bar.classList.add('bg-danger'); + } else { + bar.classList.add('progress-bar-striped', 'progress-bar-animated'); + } + } + } + + updateElapsedTime(elapsed) { + if (this.hasElapsedTimeTarget) { + const seconds = Math.floor(elapsed / 1000); + const minutes = Math.floor(seconds / 60); + const remainingSeconds = seconds % 60; + this.elapsedTimeTarget.textContent = minutes > 0 + ? `${minutes}m ${remainingSeconds}s` + : `${remainingSeconds}s`; + } + } + + formatTime(date) { + return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' }); + } +} diff --git a/docs/installation/installation_docker.md b/docs/installation/installation_docker.md index 391e1e03..ab07e010 100644 --- a/docs/installation/installation_docker.md +++ b/docs/installation/installation_docker.md @@ -224,6 +224,52 @@ docker-compose up -d docker exec --user=www-data partdb php bin/console doctrine:migrations:migrate ``` +### Automatic updates via Watchtower (Web UI) + +Part-DB supports triggering Docker container updates directly from the web interface using [Watchtower](https://github.com/nicholas-fedor/watchtower). +When configured, administrators can check for and apply updates from the **System > Update Manager** page. + +{: .info } +> The original `containrrr/watchtower` project is no longer maintained (last release November 2023). These docs use the actively maintained community fork at [`nicholas-fedor/watchtower`](https://github.com/nicholas-fedor/watchtower), which is drop-in compatible with the original HTTP API. + +To enable this feature, add a Watchtower service to your `docker-compose.yaml` and configure the connection: + +```yaml +services: + partdb: + container_name: partdb + image: jbtronics/part-db1:latest + labels: + - com.centurylinklabs.watchtower.enable=true + environment: + # ... your existing environment variables ... + + # Watchtower integration for web-based updates + - WATCHTOWER_API_URL=http://watchtower:8080 + - WATCHTOWER_API_TOKEN=your-secret-token + # ... your existing ports/volumes ... + + watchtower: + image: ghcr.io/nicholas-fedor/watchtower:latest + container_name: watchtower + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - WATCHTOWER_HTTP_API_UPDATE=true + - WATCHTOWER_HTTP_API_TOKEN=your-secret-token + - WATCHTOWER_LABEL_ENABLE=true + - WATCHTOWER_CLEANUP=true +``` + +{: .important } +> Replace `your-secret-token` with a strong, unique token. The same token must be set in both the Part-DB (`WATCHTOWER_API_TOKEN`) and Watchtower (`WATCHTOWER_HTTP_API_TOKEN`) environment variables. + +{: .info } +> `WATCHTOWER_LABEL_ENABLE=true` ensures Watchtower only manages containers with the `com.centurylinklabs.watchtower.enable=true` label, preventing it from updating other containers on the same host. + +Once configured, the Update Manager page will show the Watchtower connection status and provide an **Update via Watchtower** button when a new version is available. Clicking it triggers Watchtower to pull the latest image and recreate the Part-DB container automatically. + ## Direct use of docker image You can use the `jbtronics/part-db1:master` image directly. You have to expose port 80 to a host port and configure diff --git a/src/Controller/UpdateManagerController.php b/src/Controller/UpdateManagerController.php index 70be714d..4901da48 100644 --- a/src/Controller/UpdateManagerController.php +++ b/src/Controller/UpdateManagerController.php @@ -28,6 +28,7 @@ use App\Services\System\BackupManager; use App\Services\System\InstallationTypeDetector; use App\Services\System\UpdateChecker; use App\Services\System\UpdateExecutor; +use App\Services\System\WatchtowerClient; use Shivas\VersioningBundle\Service\VersionManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\Attribute\Autowire; @@ -56,6 +57,7 @@ class UpdateManagerController extends AbstractController private readonly BackupManager $backupManager, private readonly InstallationTypeDetector $installationTypeDetector, private readonly UserPasswordHasherInterface $passwordHasher, + private readonly WatchtowerClient $watchtowerClient, #[Autowire(env: 'bool:DISABLE_WEB_UPDATES')] private readonly bool $webUpdatesDisabled = false, #[Autowire(env: 'bool:DISABLE_BACKUP_RESTORE')] @@ -504,4 +506,100 @@ class UpdateManagerController extends AbstractController return $this->redirectToRoute('admin_update_manager'); } + + /** + * Start a Docker update via Watchtower. + */ + #[Route('/start-docker', name: 'admin_update_manager_start_docker', methods: ['POST'])] + public function startDockerUpdate(Request $request): Response + { + $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); + $this->denyAccessUnlessGranted('@system.manage_updates'); + $this->denyIfWebUpdatesDisabled(); + + // Validate CSRF token + if (!$this->isCsrfTokenValid('update_manager_start_docker', $request->request->get('_token'))) { + $this->addFlash('error', 'Invalid CSRF token'); + return $this->redirectToRoute('admin_update_manager'); + } + + // Check if Watchtower is configured and available + if (!$this->watchtowerClient->isConfigured()) { + $this->addFlash('error', 'Watchtower is not configured. Please set WATCHTOWER_API_URL and WATCHTOWER_API_TOKEN.'); + return $this->redirectToRoute('admin_update_manager'); + } + + if (!$this->watchtowerClient->isAvailable()) { + $this->addFlash('error', 'Watchtower is not reachable. Please check that the Watchtower container is running and accessible.'); + return $this->redirectToRoute('admin_update_manager'); + } + + // Create backup if requested + $createBackup = $request->request->getBoolean('backup', true); + if ($createBackup) { + try { + $this->backupManager->createBackup(); + } catch (\Throwable $e) { + $this->addFlash('error', 'Failed to create backup before update: ' . $e->getMessage()); + return $this->redirectToRoute('admin_update_manager'); + } + } + + // Trigger Watchtower update + $success = $this->watchtowerClient->triggerUpdate(); + + if (!$success) { + $this->addFlash('error', 'Failed to trigger Watchtower update. Check the logs for details.'); + return $this->redirectToRoute('admin_update_manager'); + } + + $currentVersion = $this->versionManager->getVersion()->toString(); + + // Redirect to Docker progress page + return $this->redirectToRoute('admin_update_manager_docker_progress', [ + 'previous_version' => $currentVersion, + ]); + } + + /** + * Docker update progress page. + * This page contains client-side JavaScript that polls until the container restarts. + */ + #[Route('/progress/docker', name: 'admin_update_manager_docker_progress', methods: ['GET'])] + public function dockerProgress(Request $request): Response + { + $this->denyAccessUnlessGranted('@system.manage_updates'); + + $previousVersion = $request->query->get('previous_version', 'unknown'); + + return $this->render('admin/update_manager/docker_progress.html.twig', [ + 'previous_version' => $previousVersion, + ]); + } + + /** + * Lightweight health check endpoint used by Docker update progress page. + * Returns current version so the client-side JS can detect when the container restarts with a new version. + * + * Intentionally unauthenticated: after a Docker container restart, the user's session may not survive + * (depends on session storage backend). The version string is non-sensitive public information. + * This endpoint is also whitelisted in MaintenanceModeSubscriber. + */ + #[Route('/health', name: 'admin_update_manager_health', methods: ['GET'])] + public function healthCheck(): JsonResponse + { + //Only show version if user is logged in and has permission + + $response = [ + 'status' => 'ok', + ]; + + if ($this->isGranted('@system.show_updates')) { + $response['version'] = $this->versionManager->getVersion()->toString(); + } else { + $response['version'] = "not authorized"; + } + + return $this->json($response); + } } diff --git a/src/EventSubscriber/MaintenanceModeSubscriber.php b/src/EventSubscriber/MaintenanceModeSubscriber.php index 654ba9f2..0ba5aa99 100644 --- a/src/EventSubscriber/MaintenanceModeSubscriber.php +++ b/src/EventSubscriber/MaintenanceModeSubscriber.php @@ -62,8 +62,8 @@ readonly class MaintenanceModeSubscriber implements EventSubscriberInterface return; } - //Allow to view the progress page - if (preg_match('#^/\w{2}/system/update-manager/progress#', $event->getRequest()->getPathInfo())) { + //Allow to view the progress page and health check endpoint + if (preg_match('#^/[a-z]{2}(?:_[A-Z]{2})?/system/update-manager/(progress|health)#', $event->getRequest()->getPathInfo())) { return; } diff --git a/src/Services/System/InstallationType.php b/src/Services/System/InstallationType.php index 74479bb9..2631e644 100644 --- a/src/Services/System/InstallationType.php +++ b/src/Services/System/InstallationType.php @@ -46,7 +46,7 @@ enum InstallationType: string { return match ($this) { self::GIT => true, - self::DOCKER => false, + self::DOCKER => true, // ZIP_RELEASE auto-update not yet implemented self::ZIP_RELEASE => false, self::UNKNOWN => false, @@ -57,7 +57,7 @@ enum InstallationType: string { return match ($this) { self::GIT => 'Run: php bin/console partdb:update', - self::DOCKER => 'Pull the new Docker image and recreate the container: docker-compose pull && docker-compose up -d', + self::DOCKER => 'Configure Watchtower for one-click updates, or manually: docker-compose pull && docker-compose up -d', self::ZIP_RELEASE => 'Download the new release ZIP from GitHub, extract it over your installation, and run: php bin/console doctrine:migrations:migrate && php bin/console cache:clear', self::UNKNOWN => 'Unable to determine installation type. Please update manually.', }; diff --git a/src/Services/System/UpdateChecker.php b/src/Services/System/UpdateChecker.php index fdb8d9dd..366e8d67 100644 --- a/src/Services/System/UpdateChecker.php +++ b/src/Services/System/UpdateChecker.php @@ -50,7 +50,8 @@ class UpdateChecker private readonly InstallationTypeDetector $installationTypeDetector, private readonly GitVersionInfoProvider $gitVersionInfoProvider, #[Autowire(param: 'kernel.debug')] private readonly bool $is_dev_mode, - #[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir) + #[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir, + private readonly ?WatchtowerClient $watchtowerClient = null) { } @@ -284,8 +285,16 @@ class UpdateChecker $updateBlockers[] = 'local_changes'; } - if ($installInfo['type'] === InstallationType::DOCKER) { - $updateBlockers[] = 'docker_installation'; + // Docker installations require Watchtower for auto-update + $watchtowerConfigured = $this->watchtowerClient !== null && $this->watchtowerClient->isConfigured(); + $watchtowerAvailable = $watchtowerConfigured && $this->watchtowerClient->isAvailable(); + + if ($installInfo['type'] === InstallationType::DOCKER && !$watchtowerConfigured) { + $canAutoUpdate = false; + $updateBlockers[] = 'docker_no_watchtower'; + } elseif ($installInfo['type'] === InstallationType::DOCKER && !$watchtowerAvailable) { + $canAutoUpdate = false; + $updateBlockers[] = 'docker_watchtower_unreachable'; } return [ @@ -301,6 +310,8 @@ class UpdateChecker 'can_auto_update' => $canAutoUpdate, 'update_blockers' => $updateBlockers, 'check_enabled' => $this->privacySettings->checkForUpdates, + 'watchtower_configured' => $watchtowerConfigured, + 'watchtower_available' => $watchtowerAvailable, ]; } diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index 0992663e..ccc346d5 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -299,6 +299,23 @@ class UpdateExecutor ); } + // Docker installations are updated via Watchtower - skip Git/Composer/Yarn checks + if ($installType === InstallationType::DOCKER) { + // Only check if already locked + if ($this->isLocked()) { + $lockInfo = $this->getLockInfo(); + $errors[] = sprintf( + 'An update is already in progress (started at %s).', + $lockInfo['started_at'] ?? 'unknown time' + ); + } + + return [ + 'valid' => empty($errors), + 'errors' => $errors, + ]; + } + // Check for Git installation if ($installType === InstallationType::GIT) { // Check if git is available diff --git a/src/Services/System/WatchtowerClient.php b/src/Services/System/WatchtowerClient.php new file mode 100644 index 00000000..87cc06fd --- /dev/null +++ b/src/Services/System/WatchtowerClient.php @@ -0,0 +1,125 @@ +. + */ + +declare(strict_types=1); + +namespace App\Services\System; + +use Psr\Log\LoggerInterface; +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +/** + * HTTP client for communicating with the Watchtower container updater API. + * Used to trigger Docker container updates from the Part-DB UI. + * + * @see https://containrrr.dev/watchtower/ + */ +readonly class WatchtowerClient +{ + public function __construct( + private HttpClientInterface $httpClient, + private LoggerInterface $logger, + #[Autowire(env: 'WATCHTOWER_API_URL')] private string $apiUrl, + #[Autowire(env: 'WATCHTOWER_API_TOKEN')] private string $apiToken, + ) { + } + + /** + * Whether Watchtower integration is configured (URL and token are set). + */ + public function isConfigured(): bool + { + return $this->apiUrl !== '' && $this->apiToken !== ''; + } + + /** + * Check if the Watchtower API is reachable. + * Makes a lightweight HTTP request with a short timeout. + */ + public function isAvailable(): bool + { + if (!$this->isConfigured()) { + return false; + } + + try { + $response = $this->httpClient->request('GET', $this->getUpdateEndpoint(), [ + 'headers' => $this->getAuthHeaders(), + 'timeout' => 3, + ]); + + // Any response means Watchtower is reachable + $statusCode = $response->getStatusCode(); + return $statusCode < 500; + } catch (\Throwable $e) { + $this->logger->debug('Watchtower availability check failed: ' . $e->getMessage()); + return false; + } + } + + /** + * Trigger a container update via the Watchtower HTTP API. + * This is fire-and-forget: Watchtower will pull the new image and restart the container. + * + * @return bool True if Watchtower accepted the update request + */ + public function triggerUpdate(): bool + { + if (!$this->isConfigured()) { + throw new \RuntimeException('Watchtower is not configured. Set WATCHTOWER_API_URL and WATCHTOWER_API_TOKEN.'); + } + + try { + $response = $this->httpClient->request('POST', $this->getUpdateEndpoint(), [ + 'headers' => $this->getAuthHeaders(), + 'timeout' => 10, + ]); + + $statusCode = $response->getStatusCode(); + + if ($statusCode >= 200 && $statusCode < 300) { + $this->logger->info('Watchtower update triggered successfully.'); + return true; + } + + $this->logger->error('Watchtower update request returned HTTP ' . $statusCode); + return false; + } catch (\Throwable $e) { + $this->logger->error('Failed to trigger Watchtower update: ' . $e->getMessage()); + return false; + } + } + + private function getUpdateEndpoint(): string + { + return rtrim($this->apiUrl, '/') . '/v1/update'; + } + + /** + * @return array + */ + private function getAuthHeaders(): array + { + return [ + 'Authorization' => 'Bearer ' . $this->apiToken, + ]; + } +} diff --git a/templates/admin/update_manager/docker_progress.html.twig b/templates/admin/update_manager/docker_progress.html.twig new file mode 100644 index 00000000..e43b9afa --- /dev/null +++ b/templates/admin/update_manager/docker_progress.html.twig @@ -0,0 +1,235 @@ +{% extends "main_card.html.twig" %} + +{% block title %}{% trans %}update_manager.docker.progress_title{% endtrans %}{% endblock %} + +{% block card_title %} + + {% trans %}update_manager.docker.progress_title{% endtrans %} +{% endblock %} + +{% block card_content %} + +
    + + {# Progress Header #} +
    +
    +
    +
    + + + +
    +
    ~ ~ ~ ~ ~
    +
    +
    +

    + {% trans %}update_manager.docker.updating{% endtrans %} +

    +

    + {% trans %}update_manager.docker.updating_via_watchtower{% endtrans %} +

    +
    + + {# Progress Bar #} +
    +
    + 15% +
    +
    + + {# Current Step Info #} +
    + {% trans %}update_manager.docker.step_trigger{% endtrans %}: + {% trans %}update_manager.docker.step_trigger_desc{% endtrans %} +
    + + {# Success Message #} +
    + + {% trans %}update_manager.docker.success_message{% endtrans %} +
    + {% trans %}update_manager.docker.previous_version{% endtrans %}: + {{ previous_version }} + → + {% trans %}update_manager.docker.new_version{% endtrans %}: + ... +
    + + {# Timeout Message #} +
    + + {% trans %}update_manager.docker.timeout_message{% endtrans %} +
    + + {# Error Message #} +
    + + {% trans %}update_manager.progress.error{% endtrans %}: + +
    + + {# Steps Timeline - matches git progress style #} +
    +
    + {% trans %}update_manager.docker.steps{% endtrans %} +
    +
    +
      + {# Step 1: Trigger Watchtower #} +
    • + +
      + {% trans %}update_manager.docker.step_trigger{% endtrans %} +
      {% trans %}update_manager.docker.step_trigger_desc{% endtrans %} +
      + +
    • + + {# Step 2: Pull Image #} +
    • + +
      + {% trans %}update_manager.docker.step_pull{% endtrans %} +
      {% trans %}update_manager.docker.step_pull_desc{% endtrans %} +
      + +
    • + + {# Step 3: Stop Container #} +
    • + +
      + {% trans %}update_manager.docker.step_stop{% endtrans %} +
      {% trans %}update_manager.docker.step_stop_desc{% endtrans %} +
      + +
    • + + {# Step 4: Restart Container #} +
    • + +
      + {% trans %}update_manager.docker.step_restart{% endtrans %} +
      {% trans %}update_manager.docker.step_restart_desc{% endtrans %} +
      + +
    • + + {# Step 5: Health Check #} +
    • + +
      + {% trans %}update_manager.docker.step_health{% endtrans %} +
      {% trans %}update_manager.docker.step_health_desc{% endtrans %} +
      + +
    • + + {# Step 6: Verify Version #} +
    • + +
      + {% trans %}update_manager.docker.step_verify{% endtrans %} +
      {% trans %}update_manager.docker.step_verify_desc{% endtrans %} +
      + +
    • +
    +
    +
    + + {# Elapsed Time #} +
    + + {% trans %}update_manager.docker.elapsed{% endtrans %}: + 0s +
    + + {# Actions - shown after completion or timeout #} + + + {# Warning Notice #} +
    + + {% trans %}update_manager.docker.warning{% endtrans %}: + {% trans %}update_manager.docker.do_not_close{% endtrans %} +
    +
    +{% endblock %} diff --git a/templates/admin/update_manager/index.html.twig b/templates/admin/update_manager/index.html.twig index 2c6db63c..0b4eeceb 100644 --- a/templates/admin/update_manager/index.html.twig +++ b/templates/admin/update_manager/index.html.twig @@ -75,6 +75,20 @@ {{ status.installation.type_name }} + + + {% trans %}update_manager.web_updates_allowed{% endtrans %} + {{ helper.boolean_badge(not web_updates_disabled) }} + + + {% trans %}update_manager.backup_restore_allowed{% endtrans %} + {{ helper.boolean_badge(not backup_restore_disabled) }} + + + {% trans %}update_manager.backup_download_allowed{% endtrans %} + {{ helper.boolean_badge(not backup_download_disabled) }} + + {% if status.git.is_git_install %} {% trans %}update_manager.git_branch{% endtrans %} @@ -99,25 +113,35 @@ {% endif %} - - {% trans %}update_manager.auto_update_supported{% endtrans %} - - {{ helper.boolean_badge(status.can_auto_update) }} - - - - - {% trans %}update_manager.web_updates_allowed{% endtrans %} - {{ helper.boolean_badge(not web_updates_disabled) }} - - - {% trans %}update_manager.backup_restore_allowed{% endtrans %} - {{ helper.boolean_badge(not backup_restore_disabled) }} - - - {% trans %}update_manager.backup_download_allowed{% endtrans %} - {{ helper.boolean_badge(not backup_download_disabled) }} - + {% if is_docker %} + {# Docker: show Watchtower status #} + + {% trans %}update_manager.docker.watchtower_status{% endtrans %} + + {% if status.watchtower_configured|default(false) and status.watchtower_available|default(false) %} + + {% trans %}update_manager.docker.watchtower_connected{% endtrans %} + + {% elseif status.watchtower_configured|default(false) %} + + {% trans %}update_manager.docker.watchtower_unreachable_short{% endtrans %} + + {% else %} + + {% trans %}update_manager.docker.watchtower_not_configured{% endtrans %} + + {% endif %} + + + {% else %} + {# Git/other: show update readiness #} + + {% trans %}update_manager.auto_update_supported{% endtrans %} + + {{ helper.boolean_badge(status.can_auto_update) }} + + + {% endif %} @@ -158,30 +182,63 @@ {% if status.update_available and status.can_auto_update and validation.valid and not web_updates_disabled %} -
    - - + {% if is_docker %} + {# Docker update via Watchtower #} + + -
    - -
    +
    + +
    -
    - - -
    -
    +
    + + +
    + +
    + + {% trans %}update_manager.docker.no_rollback_warning{% endtrans %} +
    + + {% else %} + {# Git update #} +
    + + + +
    + +
    + +
    + + +
    +
    + {% endif %} {% endif %} {% if status.published_at %} @@ -229,12 +286,55 @@ {# Non-auto-update installations info #} {% if not status.can_auto_update %} -
    -
    - {% trans%}update_manager.cant_auto_update{% endtrans%}: {{ status.installation.type_name }} -
    -

    {{ status.installation.update_instructions }}

    -
    + {% if is_docker and not status.watchtower_configured|default(false) %} + {# Docker without Watchtower - show setup instructions #} +
    +
    + {% trans %}update_manager.docker.setup_title{% endtrans %} +
    +
    +

    {% trans %}update_manager.docker.setup_description{% endtrans %}

    + +
    {% trans %}update_manager.docker.setup_step1{% endtrans %}
    +
    services:
    +  watchtower:
    +    image: containrrr/watchtower
    +    volumes:
    +      - /var/run/docker.sock:/var/run/docker.sock
    +    environment:
    +      - WATCHTOWER_HTTP_API_UPDATE=true
    +      - WATCHTOWER_HTTP_API_TOKEN=your-secret-token
    +      - WATCHTOWER_LABEL_ENABLE=true
    +    ports:
    +      - "8080:8080"
    + +
    {% trans %}update_manager.docker.setup_step2{% endtrans %}
    +
    WATCHTOWER_API_URL=http://watchtower:8080
    +WATCHTOWER_API_TOKEN=your-secret-token
    + +
    + + {% trans %}update_manager.docker.setup_network_hint{% endtrans %} +
    +
    +
    + {% elseif is_docker and status.watchtower_configured|default(false) and not status.watchtower_available|default(false) %} + {# Docker with Watchtower configured but not reachable #} +
    +
    + {% trans %}update_manager.docker.watchtower_unreachable_title{% endtrans %} +
    +

    {% trans %}update_manager.docker.watchtower_unreachable_description{% endtrans %}

    +
    + {% else %} + {# Other non-auto-update installations (ZIP, unknown) #} +
    +
    + {% trans%}update_manager.cant_auto_update{% endtrans%}: {{ status.installation.type_name }} +
    +

    {{ status.installation.update_instructions }}

    +
    + {% endif %} {% endif %}
    @@ -277,6 +377,9 @@ {% if release.version != status.current_version and status.can_auto_update and validation.valid and not web_updates_disabled %} + {% if is_docker %} + {# Docker: version switching not supported, only update to latest via Watchtower #} + {% else %}
    + {% endif %} {% endif %}
    diff --git a/templates/bundles/TwigBundle/Exception/error.html.twig b/templates/bundles/TwigBundle/Exception/error.html.twig index efdba462..936f5ca3 100644 --- a/templates/bundles/TwigBundle/Exception/error.html.twig +++ b/templates/bundles/TwigBundle/Exception/error.html.twig @@ -17,7 +17,7 @@ Consider yourself lucky. You found some rare error code.
    You should maybe inform your administrator about it... {% endblock %} - {% block further_actions %}

    You can try to Go Back or Visit the homepage.

    {% endblock %} + {% block further_actions %}

    You can try to Go Back or Visit the homepage.

    {% endblock %} {% block admin_contact %}

    If this error persists, please contact your {% if error_page_admin_email is not empty %} administrator. diff --git a/tests/Services/System/WatchtowerClientTest.php b/tests/Services/System/WatchtowerClientTest.php new file mode 100644 index 00000000..1de4bd2c --- /dev/null +++ b/tests/Services/System/WatchtowerClientTest.php @@ -0,0 +1,197 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Services\System; + +use App\Services\System\WatchtowerClient; +use PHPUnit\Framework\TestCase; +use Psr\Log\NullLogger; +use Symfony\Contracts\HttpClient\HttpClientInterface; +use Symfony\Contracts\HttpClient\ResponseInterface; + +final class WatchtowerClientTest extends TestCase +{ + private function createClient(string $url = 'http://watchtower:8080', string $token = 'test-token', ?HttpClientInterface $httpClient = null): WatchtowerClient + { + return new WatchtowerClient( + $httpClient ?? $this->createMock(HttpClientInterface::class), + new NullLogger(), + $url, + $token, + ); + } + + public function testIsConfiguredReturnsTrueWhenBothSet(): void + { + $client = $this->createClient('http://watchtower:8080', 'my-token'); + $this->assertTrue($client->isConfigured()); + } + + public function testIsConfiguredReturnsFalseWhenUrlEmpty(): void + { + $client = $this->createClient('', 'my-token'); + $this->assertFalse($client->isConfigured()); + } + + public function testIsConfiguredReturnsFalseWhenTokenEmpty(): void + { + $client = $this->createClient('http://watchtower:8080', ''); + $this->assertFalse($client->isConfigured()); + } + + public function testIsConfiguredReturnsFalseWhenBothEmpty(): void + { + $client = $this->createClient('', ''); + $this->assertFalse($client->isConfigured()); + } + + public function testIsAvailableReturnsFalseWhenNotConfigured(): void + { + $client = $this->createClient('', ''); + $this->assertFalse($client->isAvailable()); + } + + public function testIsAvailableReturnsTrueOnSuccessResponse(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(200); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->expects($this->once()) + ->method('request') + ->with('GET', 'http://watchtower:8080/v1/update', $this->callback(function (array $options) { + return $options['headers']['Authorization'] === 'Bearer test-token' + && $options['timeout'] === 3; + })) + ->willReturn($response); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertTrue($client->isAvailable()); + } + + public function testIsAvailableReturnsTrueOn401(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(401); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->method('request')->willReturn($response); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertTrue($client->isAvailable()); + } + + public function testIsAvailableReturnsFalseOn500(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(500); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->method('request')->willReturn($response); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertFalse($client->isAvailable()); + } + + public function testIsAvailableReturnsFalseOnException(): void + { + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->method('request')->willThrowException(new \RuntimeException('Connection refused')); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertFalse($client->isAvailable()); + } + + public function testTriggerUpdateThrowsWhenNotConfigured(): void + { + $client = $this->createClient('', ''); + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('Watchtower is not configured'); + $client->triggerUpdate(); + } + + public function testTriggerUpdateReturnsTrueOnSuccess(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(200); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->expects($this->once()) + ->method('request') + ->with('POST', 'http://watchtower:8080/v1/update', $this->callback(function (array $options) { + return $options['headers']['Authorization'] === 'Bearer test-token' + && $options['timeout'] === 10; + })) + ->willReturn($response); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertTrue($client->triggerUpdate()); + } + + public function testTriggerUpdateReturnsTrueOn202(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(202); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->method('request')->willReturn($response); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertTrue($client->triggerUpdate()); + } + + public function testTriggerUpdateReturnsFalseOnServerError(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(500); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->method('request')->willReturn($response); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertFalse($client->triggerUpdate()); + } + + public function testTriggerUpdateReturnsFalseOnException(): void + { + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->method('request')->willThrowException(new \RuntimeException('Network error')); + + $client = $this->createClient('http://watchtower:8080', 'test-token', $httpClient); + $this->assertFalse($client->triggerUpdate()); + } + + public function testUrlTrailingSlashIsNormalized(): void + { + $response = $this->createMock(ResponseInterface::class); + $response->method('getStatusCode')->willReturn(200); + + $httpClient = $this->createMock(HttpClientInterface::class); + $httpClient->expects($this->once()) + ->method('request') + ->with('GET', 'http://watchtower:8080/v1/update', $this->anything()) + ->willReturn($response); + + $client = $this->createClient('http://watchtower:8080/', 'test-token', $httpClient); + $client->isAvailable(); + } +} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 1a37106f..d5f5c183 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -13055,6 +13055,312 @@ Buerklin-API Authentication server: Backup download allowed + + + update_manager.docker.setup_title + Enable One-Click Docker Updates with Watchtower + + + + + update_manager.docker.setup_description + Part-DB can update your Docker container automatically using Watchtower, an open-source container updater. Add Watchtower as a companion container and configure the connection below. + + + + + update_manager.docker.setup_step1 + 1. Add Watchtower to your docker-compose.yml: + + + + + update_manager.docker.setup_step2 + 2. Add these environment variables to your Part-DB container: + + + + + update_manager.docker.setup_network_hint + Make sure Part-DB and Watchtower are on the same Docker network. If you use label-based filtering in Watchtower (WATCHTOWER_LABEL_ENABLE=true), add the label "com.centurylinklabs.watchtower.enable=true" to your Part-DB container. + + + + + update_manager.docker.watchtower_unreachable_title + Watchtower Not Reachable + + + + + update_manager.docker.watchtower_unreachable_description + Watchtower is configured but cannot be reached. Please verify that the Watchtower container is running and that the API URL and token are correct. + + + + + update_manager.docker.confirm_update + Are you sure you want to update Part-DB via Watchtower? The container will be restarted with the new image. Unlike Git updates, Docker updates cannot be automatically rolled back. + + + + + update_manager.docker.update_via_watchtower + Update via Watchtower to + + + + + update_manager.docker.no_rollback_warning + Docker updates cannot be automatically rolled back. A database backup will be created before updating so you can restore your data if needed. + + + + + update_manager.docker.progress_title + Docker Update in Progress + + + + + update_manager.docker.waiting_for_watchtower + Waiting for Watchtower to pull the new image... + + + + + update_manager.docker.elapsed + Elapsed + + + + + update_manager.docker.waiting_title + Update Triggered + + + + + update_manager.docker.waiting_description + Watchtower has been notified. It will pull the latest Docker image and restart the Part-DB container. + + + + + update_manager.docker.watchtower_working + Watchtower is processing the update... + + + + + update_manager.docker.watchtower_working_hint + This may take a few minutes depending on your internet speed and image size. + + + + + update_manager.docker.restarting_title + Container Restarting + + + + + update_manager.docker.restarting_description + Watchtower has pulled the new image and is restarting the Part-DB container. + + + + + update_manager.docker.restarting_hint + The page will automatically detect when the server comes back online. This usually takes 10-30 seconds. + + + + + update_manager.docker.success_title + Update Complete! + + + + + update_manager.docker.success_message + Part-DB has been successfully updated via Watchtower. + + + + + update_manager.docker.previous_version + Previous version + + + + + update_manager.docker.new_version + New version + + + + + update_manager.docker.back_to_update_manager + Back to Update Manager + + + + + update_manager.docker.go_to_homepage + Go to Homepage + + + + + update_manager.docker.timeout_title + Update Taking Longer Than Expected + + + + + update_manager.docker.timeout_message + The update is taking longer than expected. Check the Watchtower container logs for details. The update may still be in progress. + + + + + update_manager.docker.retry + Retry + + + + + update_manager.docker.warning + Warning + + + + + update_manager.docker.do_not_close + Do not close this page. It will automatically detect when the update is complete. + + + + + update_manager.docker.updating_via_watchtower + Updating via Watchtower + + + + + update_manager.docker.step_waiting + Pulling Image + + + + + update_manager.docker.steps + Update Steps + + + + + update_manager.docker.step_trigger + Trigger Update + + + + + update_manager.docker.step_trigger_desc + Watchtower has been notified to check for updates + + + + + update_manager.docker.step_pull + Pull New Image + + + + + update_manager.docker.step_pull_desc + Downloading the latest Docker image from the registry + + + + + update_manager.docker.step_restart + Restart Container + + + + + update_manager.docker.step_restart_desc + Stopping old container and starting new one + + + + + update_manager.docker.step_verify + Verify + + + + + update_manager.docker.step_verify_desc + Confirming Part-DB is running on the new version + + + + + update_manager.docker.watchtower_status + Watchtower + + + + + update_manager.docker.watchtower_connected + Connected + + + + + update_manager.docker.watchtower_unreachable_short + Unreachable + + + + + update_manager.docker.watchtower_not_configured + Not configured + + + + + update_manager.docker.step_stop + Stop Container + + + + + update_manager.docker.step_stop_desc + Gracefully stopping the current container before recreation + + + + + update_manager.docker.step_health + Health Check + + + + + update_manager.docker.step_health_desc + Waiting for the new container to pass health checks + + + + + update_manager.docker.updating + Updating Part-DB via Docker... + + part.create_from_info_provider.lot_filled_from_barcode From 673d5b5e83108e94d16433c5b081af19337f8fa9 Mon Sep 17 00:00:00 2001 From: Wieland Schopohl <55855374+wschopohl@users.noreply.github.com> Date: Mon, 4 May 2026 06:16:02 +0900 Subject: [PATCH 092/108] Fix sort order after column reorder on page reload (#1346) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When columns are reordered via colReorder and the page is reloaded, the saved sort state uses visual column indices. These were sent directly as initial_order to the server, which interprets them as original indices — causing the wrong column to be sorted. Use the saved colReorder mapping to translate visual indices back to original indices before sending initial_order in the _init request. --- .../elements/datatables/datatables_controller.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/controllers/elements/datatables/datatables_controller.js b/assets/controllers/elements/datatables/datatables_controller.js index 9ac23483..98b9cf29 100644 --- a/assets/controllers/elements/datatables/datatables_controller.js +++ b/assets/controllers/elements/datatables/datatables_controller.js @@ -113,8 +113,16 @@ export default class extends Controller { return null; } + //The saved order index is visual (post-reorder). If colReorder state + //exists, map it back to the original column index so the server sorts + //the correct column. colReorder[visualIndex] == originalIndex. + let columnIndex = order[0]; + if (saved_state.colReorder) { + columnIndex = saved_state.colReorder[columnIndex]; + } + return { - column: order[0], + column: columnIndex, dir: order[1] } }); From 0ddf4f903ef530f37cebedb1577a8deeb86e20c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 21:01:34 +0200 Subject: [PATCH 093/108] Update KiCad symbols and footprints lists (#1348) * Update KiCad symbols and footprints lists * Update KiCad symbols and footprints lists * Update KiCad symbols and footprints lists --------- Co-authored-by: github-actions[bot] --- public/kicad/footprints.txt | 7 ++++++- public/kicad/symbols.txt | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt index 551d7d9c..c893ad4b 100644 --- a/public/kicad/footprints.txt +++ b/public/kicad/footprints.txt @@ -1,4 +1,4 @@ -# Generated on Mon Apr 13 05:19:27 UTC 2026 +# Generated on Mon May 4 05:40:05 UTC 2026 # This file contains all footprints available in the offical KiCAD library Audio_Module:Reverb_BTDR-1H Audio_Module:Reverb_BTDR-1V @@ -8366,6 +8366,7 @@ Converter_DCDC:Converter_DCDC_TRACO_TMR-1SM_SMD Converter_DCDC:Converter_DCDC_TRACO_TMR10-24xxWIR_48xxWIR_72xxWIR_THT Converter_DCDC:Converter_DCDC_TRACO_TMR2-xxxxWI_THT Converter_DCDC:Converter_DCDC_TRACO_TMR4-xxxxWI_THT +Converter_DCDC:Converter_DCDC_TRACO_TMR8-xxxxWI_THT Converter_DCDC:Converter_DCDC_TRACO_TMU3-05xx_12xx_THT Converter_DCDC:Converter_DCDC_TRACO_TMU3-24xx_THT Converter_DCDC:Converter_DCDC_TRACO_TMV-051xD_121xD_Dual_THT @@ -11978,6 +11979,8 @@ Package_DFN_QFN:VQFN-48-1EP_7x7mm_P0.5mm_EP4.2x4.2mm Package_DFN_QFN:VQFN-48-1EP_7x7mm_P0.5mm_EP4.2x4.2mm_ThermalVias Package_DFN_QFN:VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm Package_DFN_QFN:VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalVias +Package_DFN_QFN:VQFN-52-1EP_6x6mm_P0.4mm_EP4.7x4.7mm +Package_DFN_QFN:VQFN-52-1EP_6x6mm_P0.4mm_EP4.7x4.7mm_ThermalVias Package_DFN_QFN:VQFN-56-1EP_8x8mm_P0.5mm_EP5.1x4.96mm Package_DFN_QFN:VQFN-56-1EP_8x8mm_P0.5mm_EP5.1x4.96mm_ThermalVias Package_DFN_QFN:VQFN-56-1EP_8x8mm_P0.5mm_EP5.5x5.06mm @@ -12028,6 +12031,8 @@ Package_DFN_QFN:WQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm Package_DFN_QFN:WQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm_ThermalVias Package_DFN_QFN:WQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm Package_DFN_QFN:WQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalVias +Package_DFN_QFN:WQFN-28-1EP_3.5x5.5mm_P0.5mm_EP2.05x4.05mm +Package_DFN_QFN:WQFN-28-1EP_3.5x5.5mm_P0.5mm_EP2.05x4.05mm_ThermalVias Package_DFN_QFN:WQFN-28-1EP_4x4mm_P0.4mm_EP2.7x2.7mm Package_DFN_QFN:WQFN-28-1EP_4x4mm_P0.4mm_EP2.7x2.7mm_ThermalVias Package_DFN_QFN:WQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt index 34e246a5..f41aa152 100644 --- a/public/kicad/symbols.txt +++ b/public/kicad/symbols.txt @@ -1,4 +1,4 @@ -# Generated on Mon Apr 13 05:20:06 UTC 2026 +# Generated on Mon May 4 05:40:43 UTC 2026 # This file contains all symbols available in the offical KiCAD library 4xxx:14528 4xxx:14529 @@ -8845,6 +8845,7 @@ Interface_USB:CH343G Interface_USB:CH343P Interface_USB:CH344Q Interface_USB:CH9102F +Interface_USB:CP2102C-Axx-xQFN24 Interface_USB:CP2102N-Axx-xQFN20 Interface_USB:CP2102N-Axx-xQFN24 Interface_USB:CP2102N-Axx-xQFN28 From ce2b7d11a948a1bd65ad637e5565c76f477228ca Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Mon, 4 May 2026 21:56:18 +0200 Subject: [PATCH 094/108] Add Quick Apply and batch update to bulk info provider import (#1316) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Quick Apply and Apply All buttons to bulk info provider import Adds the ability to apply provider search results to parts directly from the bulk import step 2 page without navigating to individual part edit forms. Includes per-result Quick Apply buttons and an Apply All button for batch operations. * Add navigation buttons and completion banner to bulk import step2 Adds Back to Jobs / Back to Parts buttons at the top of the page and a success banner when the job is completed, so users aren't stuck on the page after applying all parts. * Highlight top search result and remove skip reason prompt - Highlight the recommended/top priority result row with table-success class - Add "Top" badge to the recommended Quick Apply button - Use outline style for non-top Quick Apply buttons to differentiate - Remove the annoying "reason for skipping" prompt popup * Fix 500 error when field mapping has null field or no search results - Skip field mappings with null/empty field values in convertFieldMappingsToDto - Return empty DTO instead of throwing when no search results found - Remove unnecessary try/catch workaround in researchPart * Fix PHPStan error: remove redundant null check on BulkSearchResponseDTO * Improve bulk import UI: split active/history jobs, fix text visibility, add match highlighting - Split manage page into Active Jobs and History sections - Fix source keyword text color (remove text-muted for better visibility) - Add exact match indicators: green check badge when name or MPN matches - Add translation keys for new UI elements * Fix spinning icon, text visibility, auto-priority, and SPN match highlighting - Replace spinning icon with static icon on Active Jobs header - Match highlighting now checks source keyword against name, MPN, AND provider ID (SPN) - Show green "Match" badge in source field column when any field matches 100% - Auto-increment priority when adding new field mapping rows - Fix text-muted visibility issues on table-success background * Fix broken images and improve match highlighting consistency - Hide broken external provider images with onerror fallback - Make source keyword text green when any match is detected - All matched fields (name, MPN, SPN, or any source keyword) show green text * Fix TypeError in LCSCProvider when keyword is numeric string PHP auto-casts numeric string array keys to int. When a search keyword is a pure number (e.g., a part number like "12345"), the foreach loop passes an int to processSearchResponse() which expects string. Cast keyword to string explicitly. * Clean up stale pending jobs and add job ID to display - Auto-delete pending jobs with 0 results (from failed searches/500 errors) - Show job ID (#N) in manage page and step2 to distinguish identical jobs - Move timestamp to subtitle line on manage page for cleaner layout * Fix tests to match updated bulk search behavior (no more RuntimeException) The bulk search service now returns empty response DTOs instead of throwing RuntimeException when no results are found. Updated tests to use assertFalse(hasAnyResults()) instead of catching exceptions. * Add comprehensive test coverage for bulk import controller Covers Quick Apply, Apply All, delete, stop, mark completed/skipped/pending, manage page active/history split, stale job cleanup, research endpoints, and various error paths. Increases patch coverage significantly. * Fix duplicate test method names in bulk import tests * Fix last duplicate test method name (testQuickApplyWithNoSearchResults) * Fixed translation key in translation messages * Moved table rendering logic into macro * fixed visual glitch with button success outline * Use native httpfoundation method to convert json to an array * Show a more user friendly error message, when * Allow to automatically create new manufacturers within quick apply --------- Co-authored-by: Jan Böhmer --- assets/controllers/bulk_import_controller.js | 100 +- .../controllers/field_mapping_controller.js | 19 + .../BulkInfoProviderImportController.php | 227 +++- .../BulkInfoProviderService.php | 6 - .../Providers/LCSCProvider.php | 1 + .../bulk_import/manage.html.twig | 207 ++-- .../bulk_import/step2.html.twig | 90 +- .../BulkInfoProviderImportControllerTest.php | 990 +++++++++++++++++- translations/messages.en.xlf | 90 ++ 9 files changed, 1585 insertions(+), 145 deletions(-) diff --git a/assets/controllers/bulk_import_controller.js b/assets/controllers/bulk_import_controller.js index 49e4d60f..a04ff13e 100644 --- a/assets/controllers/bulk_import_controller.js +++ b/assets/controllers/bulk_import_controller.js @@ -3,14 +3,16 @@ import { generateCsrfHeaders } from "./csrf_protection_controller" export default class extends Controller { static targets = ["progressBar", "progressText"] - static values = { + static values = { jobId: Number, partId: Number, researchUrl: String, researchAllUrl: String, markCompletedUrl: String, markSkippedUrl: String, - markPendingUrl: String + markPendingUrl: String, + quickApplyUrl: String, + quickApplyAllUrl: String } connect() { @@ -119,13 +121,11 @@ export default class extends Controller { async markSkipped(event) { const partId = event.currentTarget.dataset.partId - const reason = prompt('Reason for skipping (optional):') || '' - + try { const url = this.markSkippedUrlValue.replace('__PART_ID__', partId) const data = await this.fetchWithErrorHandling(url, { - method: 'POST', - body: JSON.stringify({ reason }) + method: 'POST' }) if (data.success) { @@ -321,6 +321,94 @@ export default class extends Controller { } } + async quickApply(event) { + event.preventDefault() + event.stopPropagation() + + const partId = event.currentTarget.dataset.partId + const providerKey = event.currentTarget.dataset.providerKey + const providerId = event.currentTarget.dataset.providerId + const button = event.currentTarget + const originalHtml = button.innerHTML + + button.disabled = true + button.innerHTML = ' Applying...' + + try { + const url = this.quickApplyUrlValue.replace('__PART_ID__', partId) + const data = await this.fetchWithErrorHandling(url, { + method: 'POST', + body: JSON.stringify({ providerKey, providerId }) + }, 60000) + + if (data.success) { + this.updateProgressDisplay(data) + this.showSuccessMessage(data.message || 'Part updated successfully') + sessionStorage.setItem('bulkImportScrollPosition', window.scrollY.toString()) + window.location.reload() + } else { + this.showErrorMessage(data.error || 'Quick apply failed') + button.innerHTML = originalHtml + button.disabled = false + } + } catch (error) { + console.error('Error in quick apply:', error) + this.showErrorMessage(error.message || 'Quick apply failed') + button.innerHTML = originalHtml + button.disabled = false + } + } + + async quickApplyAll(event) { + event.preventDefault() + event.stopPropagation() + + if (!confirm('This will apply the top search result to all pending parts without individual review. Continue?')) { + return + } + + const button = event.currentTarget + const spinner = document.getElementById('quick-apply-all-spinner') + const originalHtml = button.innerHTML + + button.disabled = true + if (spinner) { + spinner.style.display = 'inline-block' + } + + try { + const data = await this.fetchWithErrorHandling(this.quickApplyAllUrlValue, { + method: 'POST' + }, 300000) + + if (data.success) { + this.updateProgressDisplay(data) + + let message = data.message || 'Bulk apply completed' + if (data.errors && data.errors.length > 0) { + message += '\nErrors:\n' + data.errors.join('\n') + } + + this.showSuccessMessage(message) + sessionStorage.setItem('bulkImportScrollPosition', window.scrollY.toString()) + window.location.reload() + } else { + this.showErrorMessage(data.error || 'Bulk apply failed') + button.innerHTML = originalHtml + button.disabled = false + } + } catch (error) { + console.error('Error in quick apply all:', error) + this.showErrorMessage(error.message || 'Bulk apply failed') + button.innerHTML = originalHtml + button.disabled = false + } finally { + if (spinner) { + spinner.style.display = 'none' + } + } + } + showSuccessMessage(message) { this.showToast('success', message) } diff --git a/assets/controllers/field_mapping_controller.js b/assets/controllers/field_mapping_controller.js index 9c9c8ac6..50c19a0d 100644 --- a/assets/controllers/field_mapping_controller.js +++ b/assets/controllers/field_mapping_controller.js @@ -70,6 +70,13 @@ export default class extends Controller { newFieldSelect.addEventListener('change', this.updateFieldOptions.bind(this)) } + // Auto-increment priority based on existing mappings + const nextPriority = this.getNextPriority() + const priorityInput = newRow.querySelector('input[name*="[priority]"]') + if (priorityInput) { + priorityInput.value = nextPriority + } + this.updateFieldOptions() this.updateAddButtonState() } @@ -119,6 +126,18 @@ export default class extends Controller { } } + getNextPriority() { + const priorityInputs = this.tbodyTarget.querySelectorAll('input[name*="[priority]"]') + let maxPriority = 0 + priorityInputs.forEach(input => { + const val = parseInt(input.value, 10) + if (!isNaN(val) && val > maxPriority) { + maxPriority = val + } + }) + return Math.min(maxPriority + 1, 10) + } + handleFormSubmit(event) { if (this.hasSubmitButtonTarget) { this.submitButtonTarget.disabled = true diff --git a/src/Controller/BulkInfoProviderImportController.php b/src/Controller/BulkInfoProviderImportController.php index 2d3dd7f6..a8622a28 100644 --- a/src/Controller/BulkInfoProviderImportController.php +++ b/src/Controller/BulkInfoProviderImportController.php @@ -29,11 +29,14 @@ use App\Entity\Parts\Part; use App\Entity\Parts\Supplier; use App\Entity\UserSystem\User; use App\Form\InfoProviderSystem\GlobalFieldMappingType; +use App\Services\EntityMergers\Mergers\PartMerger; use App\Services\InfoProviderSystem\BulkInfoProviderService; use App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO; use App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO; use App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO; +use App\Services\InfoProviderSystem\PartInfoRetriever; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\ORMInvalidArgumentException; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\Attribute\Autowire; @@ -66,6 +69,10 @@ class BulkInfoProviderImportController extends AbstractController { $dtos = []; foreach ($fieldMappings as $mapping) { + // Skip entries where field is null/empty (e.g. user added a row but didn't select a field) + if (empty($mapping['field'])) { + continue; + } $dtos[] = new BulkSearchFieldMappingDTO(field: $mapping['field'], providers: $mapping['providers'], priority: $mapping['priority'] ?? 1); } return $dtos; @@ -276,8 +283,8 @@ class BulkInfoProviderImportController extends AbstractController $updatedJobs = true; } - // Mark jobs with no results for deletion (failed searches) - if ($job->getResultCount() === 0 && $job->isInProgress()) { + // Mark jobs with no results for deletion (failed searches or stale pending) + if ($job->getResultCount() === 0 && ($job->isInProgress() || $job->isPending())) { $jobsToDelete[] = $job; } } @@ -297,9 +304,23 @@ class BulkInfoProviderImportController extends AbstractController } } + // Refetch after cleanup and split into active vs finished + $allJobs = $this->entityManager->getRepository(BulkInfoProviderImportJob::class) + ->findBy([], ['createdAt' => 'DESC']); + + $activeJobs = []; + $finishedJobs = []; + foreach ($allJobs as $job) { + if ($job->isCompleted() || $job->isFailed() || $job->isStopped()) { + $finishedJobs[] = $job; + } else { + $activeJobs[] = $job; + } + } + return $this->render('info_providers/bulk_import/manage.html.twig', [ - 'jobs' => $this->entityManager->getRepository(BulkInfoProviderImportJob::class) - ->findBy([], ['createdAt' => 'DESC']) // Refetch after cleanup + 'active_jobs' => $activeJobs, + 'finished_jobs' => $finishedJobs, ]); } @@ -470,22 +491,13 @@ class BulkInfoProviderImportController extends AbstractController $fieldMappingDtos = $job->getFieldMappings(); $prefetchDetails = $job->isPrefetchDetails(); - try { - $searchResultsDto = $this->bulkService->performBulkSearch([$part], $fieldMappingDtos, $prefetchDetails); - } catch (\Exception $searchException) { - // Handle "no search results found" as a normal case, not an error - if (str_contains($searchException->getMessage(), 'No search results found')) { - $searchResultsDto = null; - } else { - throw $searchException; - } - } + $searchResultsDto = $this->bulkService->performBulkSearch([$part], $fieldMappingDtos, $prefetchDetails); // Update the job's search results for this specific part efficiently $this->updatePartSearchResults($job, $searchResultsDto[0] ?? null); // Prefetch details if requested - if ($prefetchDetails && $searchResultsDto !== null) { + if ($prefetchDetails) { $this->bulkService->prefetchDetailsForResults($searchResultsDto); } @@ -515,6 +527,191 @@ class BulkInfoProviderImportController extends AbstractController } } + #[Route('/job/{jobId}/part/{partId}/quick-apply', name: 'bulk_info_provider_quick_apply', methods: ['POST'])] + public function quickApply( + int $jobId, + int $partId, + Request $request, + PartInfoRetriever $infoRetriever, + PartMerger $partMerger + ): JsonResponse { + $job = $this->validateJobAccess($jobId); + if (!$job) { + return $this->createErrorResponse('Job not found or access denied', 404, ['job_id' => $jobId]); + } + + /** @var Part $part */ + $part = $this->entityManager->getRepository(Part::class)->find($partId); + if (!$part) { + return $this->createErrorResponse('Part not found', 404, ['part_id' => $partId]); + } + + $this->denyAccessUnlessGranted('edit', $part); + + // Get provider key/id from request body, or fall back to top search result + $body = $request->toArray(); + $providerKey = $body['providerKey'] ?? null; + $providerId = $body['providerId'] ?? null; + + if (!$providerKey || !$providerId) { + $searchResults = $job->getSearchResults($this->entityManager); + foreach ($searchResults->partResults as $partResult) { + if ($partResult->part->getId() === $partId) { + $sorted = $partResult->getResultsSortedByPriority(); + if (!empty($sorted)) { + $providerKey = $sorted[0]->searchResult->provider_key; + $providerId = $sorted[0]->searchResult->provider_id; + } + break; + } + } + } + + if (!$providerKey || !$providerId) { + return $this->createErrorResponse('No search result available for this part', 400, ['part_id' => $partId]); + } + + try { + $dto = $infoRetriever->getDetails($providerKey, $providerId); + $providerPart = $infoRetriever->dtoToPart($dto); + $partMerger->merge($part, $providerPart); + + //Persist part manufacturer and supplier if they are new, to avoid issues with detached entities during merge + //Do not footprints here, as it might pollute the database with unwanted formatting footprints from the provider, + $this->entityManager->persist($part->getManufacturer()); + foreach ($part->getOrderdetails() as $orderdetail) { + $this->entityManager->persist($orderdetail->getSupplier()); + } + + try { + $this->entityManager->flush(); + } catch (ORMInvalidArgumentException $exception) { + if (str_contains($exception->getMessage(), 'not configured to cascade persist operations')) { + throw new \RuntimeException('Failed to persist merged part, as it would create new datastructures! Review the provider data by yourself.'); + } + + throw $exception; // Re-throw if it's a different ORM error + } + + $job->markPartAsCompleted($partId); + if ($job->isAllPartsCompleted() && !$job->isCompleted()) { + $job->markAsCompleted(); + } + + $this->entityManager->flush(); + + + return $this->json([ + 'success' => true, + 'message' => sprintf('Applied provider data to "%s"', $part->getName()), + 'part_id' => $partId, + 'provider_key' => $providerKey, + 'provider_id' => $providerId, + 'progress' => $job->getProgressPercentage(), + 'completed_count' => $job->getCompletedPartsCount(), + 'total_count' => $job->getPartCount(), + 'job_completed' => $job->isCompleted(), + ]); + } catch (\Exception $e) { + $this->logger->error($e); + + return $this->createErrorResponse( + 'Quick apply failed: ' . $e->getMessage(), + 500, + ['job_id' => $jobId, 'part_id' => $partId, 'exception' => $e->getMessage()] + ); + } + } + + #[Route('/job/{jobId}/quick-apply-all', name: 'bulk_info_provider_quick_apply_all', methods: ['POST'])] + public function quickApplyAll( + int $jobId, + PartInfoRetriever $infoRetriever, + PartMerger $partMerger + ): JsonResponse { + set_time_limit(600); + + $job = $this->validateJobAccess($jobId); + if (!$job) { + return $this->createErrorResponse('Job not found or access denied', 404, ['job_id' => $jobId]); + } + + $searchResults = $job->getSearchResults($this->entityManager); + $applied = 0; + $failed = 0; + $noResults = 0; + $errors = []; + + foreach ($job->getJobParts() as $jobPart) { + if ($jobPart->isCompleted() || $jobPart->isSkipped()) { + continue; + } + + $part = $jobPart->getPart(); + + if (!$this->isGranted('edit', $part)) { + $errors[] = sprintf('No edit permission for "%s"', $part->getName()); + $failed++; + continue; + } + + // Find top search result for this part + $providerKey = null; + $providerId = null; + foreach ($searchResults->partResults as $partResult) { + if ($partResult->part->getId() === $part->getId()) { + $sorted = $partResult->getResultsSortedByPriority(); + if (!empty($sorted)) { + $providerKey = $sorted[0]->searchResult->provider_key; + $providerId = $sorted[0]->searchResult->provider_id; + } + break; + } + } + + if (!$providerKey || !$providerId) { + $noResults++; + continue; + } + + try { + $dto = $infoRetriever->getDetails($providerKey, $providerId); + $providerPart = $infoRetriever->dtoToPart($dto); + $partMerger->merge($part, $providerPart); + $this->entityManager->flush(); + + $job->markPartAsCompleted($part->getId()); + $applied++; + } catch (\Exception $e) { + $this->logger->error('Quick apply failed for part', [ + 'part_id' => $part->getId(), + 'part_name' => $part->getName(), + 'error' => $e->getMessage(), + ]); + $errors[] = sprintf('Failed for "%s": %s', $part->getName(), $e->getMessage()); + $failed++; + } + } + + if ($job->isAllPartsCompleted() && !$job->isCompleted()) { + $job->markAsCompleted(); + } + $this->entityManager->flush(); + + return $this->json([ + 'success' => true, + 'applied' => $applied, + 'failed' => $failed, + 'no_results' => $noResults, + 'errors' => $errors, + 'message' => sprintf('Applied to %d parts, %d failed, %d had no results', $applied, $failed, $noResults), + 'progress' => $job->getProgressPercentage(), + 'completed_count' => $job->getCompletedPartsCount(), + 'total_count' => $job->getPartCount(), + 'job_completed' => $job->isCompleted(), + ]); + } + #[Route('/job/{jobId}/research-all', name: 'bulk_info_provider_research_all', methods: ['POST'])] public function researchAllParts(int $jobId): JsonResponse { diff --git a/src/Services/InfoProviderSystem/BulkInfoProviderService.php b/src/Services/InfoProviderSystem/BulkInfoProviderService.php index 586fb873..79420134 100644 --- a/src/Services/InfoProviderSystem/BulkInfoProviderService.php +++ b/src/Services/InfoProviderSystem/BulkInfoProviderService.php @@ -46,7 +46,6 @@ final class BulkInfoProviderService } $partResults = []; - $hasAnyResults = false; // Group providers by batch capability $batchProviders = []; @@ -88,7 +87,6 @@ final class BulkInfoProviderService ); if (!empty($allResults)) { - $hasAnyResults = true; $searchResults = $this->formatSearchResults($allResults); } @@ -99,10 +97,6 @@ final class BulkInfoProviderService ); } - if (!$hasAnyResults) { - throw new \RuntimeException('No search results found for any of the selected parts'); - } - $response = new BulkSearchResponseDTO($partResults); // Prefetch details if requested diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php index 8bdd776e..5f251b43 100755 --- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php +++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php @@ -397,6 +397,7 @@ class LCSCProvider implements BatchInfoProviderInterface, URLHandlerInfoProvider // Now collect all results (like .then() in JavaScript) foreach ($responses as $keyword => $response) { try { + $keyword = (string) $keyword; $arr = $response->toArray(); // This waits for the response $results[$keyword] = $this->processSearchResponse($arr, $keyword); } catch (\Exception $e) { diff --git a/templates/info_providers/bulk_import/manage.html.twig b/templates/info_providers/bulk_import/manage.html.twig index 9bbed906..b31dd650 100644 --- a/templates/info_providers/bulk_import/manage.html.twig +++ b/templates/info_providers/bulk_import/manage.html.twig @@ -22,103 +22,130 @@

    - {% if jobs is not empty %} -
    - - - - - - - - - - - - - - - - {% for job in jobs %} - - - - - - - - - - - - {% endfor %} - -
    {% trans %}info_providers.bulk_import.job_name{% endtrans %}{% trans %}info_providers.bulk_import.parts_count{% endtrans %}{% trans %}info_providers.bulk_import.results_count{% endtrans %}{% trans %}info_providers.bulk_import.progress{% endtrans %}{% trans %}info_providers.bulk_import.status{% endtrans %}{% trans %}info_providers.bulk_import.created_by{% endtrans %}{% trans %}info_providers.bulk_import.created_at{% endtrans %}{% trans %}info_providers.bulk_import.completed_at{% endtrans %}{% trans %}info_providers.bulk_import.action.label{% endtrans %}
    - {{ job.displayNameKey|trans(job.displayNameParams) }} - {{ job.formattedTimestamp }} - {% if job.isInProgress %} - Active - {% endif %} - {{ job.partCount }}{{ job.resultCount }} -
    -
    -
    -
    -
    - {{ job.progressPercentage }}% -
    - - {% trans with {'%current%': job.completedPartsCount + job.skippedPartsCount, '%total%': job.partCount} %}info_providers.bulk_import.progress_label{% endtrans %} - -
    - {% if job.isPending %} - {% trans %}info_providers.bulk_import.status.pending{% endtrans %} - {% elseif job.isInProgress %} - {% trans %}info_providers.bulk_import.status.in_progress{% endtrans %} - {% elseif job.isCompleted %} - {% trans %}info_providers.bulk_import.status.completed{% endtrans %} - {% elseif job.isStopped %} - {% trans %}info_providers.bulk_import.status.stopped{% endtrans %} - {% elseif job.isFailed %} - {% trans %}info_providers.bulk_import.status.failed{% endtrans %} - {% endif %} - {{ job.createdBy.fullName(true) }}{{ job.createdAt|format_datetime('short') }} - {% if job.completedAt %} - {{ job.completedAt|format_datetime('short') }} - {% else %} - - - {% endif %} - -
    - {% if job.isInProgress or job.isCompleted or job.isStopped %} - - {% trans %}info_providers.bulk_import.view_results{% endtrans %} - - {% endif %} - {% if job.canBeStopped %} - - {% endif %} - {% if job.isCompleted or job.isFailed or job.isStopped %} - - {% endif %} -
    -
    -
    - {% else %} + {% if active_jobs is empty and finished_jobs is empty %} + {% else %} + {# Active Jobs #} + {% if active_jobs is not empty %} +
    + {% trans %}info_providers.bulk_import.active_jobs{% endtrans %} + {{ active_jobs|length }} +
    + {{ _self.job_table(active_jobs, false) }} + {% endif %} + + {# Finished Jobs (History) #} + {% if finished_jobs is not empty %} +
    + {% trans %}info_providers.bulk_import.finished_jobs{% endtrans %} + {{ finished_jobs|length }} +
    + {{ _self.job_table(finished_jobs, true) }} + {% endif %} {% endif %} {% endblock %} + +{% macro job_table(jobs, showCompletedAt) %} +
    + + + + + + + + + + + {% if showCompletedAt %} + + {% endif %} + + + + + {% for job in jobs %} + {{ _self.job_row(job, showCompletedAt) }} + {% endfor %} + +
    {% trans %}info_providers.bulk_import.job_name{% endtrans %}{% trans %}info_providers.bulk_import.parts_count{% endtrans %}{% trans %}info_providers.bulk_import.results_count{% endtrans %}{% trans %}info_providers.bulk_import.progress{% endtrans %}{% trans %}info_providers.bulk_import.status{% endtrans %}{% trans %}info_providers.bulk_import.created_by{% endtrans %}{% trans %}info_providers.bulk_import.created_at{% endtrans %}{% trans %}info_providers.bulk_import.completed_at{% endtrans %}{% trans %}info_providers.bulk_import.action.label{% endtrans %}
    +
    +{% endmacro %} + +{% macro job_row(job, showCompletedAt) %} + {% set showCompletedAt = showCompletedAt|default(false) %} + + + #{{ job.id }} - {{ job.displayNameKey|trans(job.displayNameParams) }} +
    {{ job.formattedTimestamp }} + + {{ job.partCount }} + {{ job.resultCount }} + +
    +
    +
    +
    +
    + {{ job.progressPercentage }}% +
    + + {% trans with {'%current%': job.completedPartsCount + job.skippedPartsCount, '%total%': job.partCount} %}info_providers.bulk_import.progress_label{% endtrans %} + + + + {% if job.isPending %} + {% trans %}info_providers.bulk_import.status.pending{% endtrans %} + {% elseif job.isInProgress %} + {% trans %}info_providers.bulk_import.status.in_progress{% endtrans %} + {% elseif job.isCompleted %} + {% trans %}info_providers.bulk_import.status.completed{% endtrans %} + {% elseif job.isStopped %} + {% trans %}info_providers.bulk_import.status.stopped{% endtrans %} + {% elseif job.isFailed %} + {% trans %}info_providers.bulk_import.status.failed{% endtrans %} + {% endif %} + + {{ job.createdBy.fullName(true) }} + {{ job.createdAt|format_datetime('short') }} + {% if showCompletedAt %} + + {% if job.completedAt %} + {{ job.completedAt|format_datetime('short') }} + {% else %} + - + {% endif %} + + {% endif %} + +
    + {% if job.isInProgress or job.isCompleted or job.isStopped %} + + {% trans %}info_providers.bulk_import.view_results{% endtrans %} + + {% endif %} + {% if job.canBeStopped %} + + {% endif %} + {% if job.isCompleted or job.isFailed or job.isStopped %} + + {% endif %} +
    + + +{% endmacro %} diff --git a/templates/info_providers/bulk_import/step2.html.twig b/templates/info_providers/bulk_import/step2.html.twig index 559ca20a..e68202e0 100644 --- a/templates/info_providers/bulk_import/step2.html.twig +++ b/templates/info_providers/bulk_import/step2.html.twig @@ -9,22 +9,42 @@ {% block card_title %} {% trans %}info_providers.bulk_import.step2.title{% endtrans %} - {{ job.displayNameKey|trans(job.displayNameParams) }} - {{ job.formattedTimestamp }} + #{{ job.id }} - {{ job.displayNameKey|trans(job.displayNameParams) }} {% endblock %} {% block card_content %} + + + + {% if job.isCompleted %} + + {% endif %} +
    -
    {{ job.displayNameKey|trans(job.displayNameParams) }} - {{ job.formattedTimestamp }}
    +
    #{{ job.id }} - {{ job.displayNameKey|trans(job.displayNameParams) }}
    {{ job.partCount }} {% trans %}info_providers.bulk_import.parts{% endtrans %} • {{ job.resultCount }} {% trans %}info_providers.bulk_import.results{% endtrans %} • @@ -95,6 +115,13 @@ {% trans %}info_providers.bulk_import.research.all_pending{% endtrans %} +
    @@ -181,39 +208,74 @@ - {% for result in part_result.searchResults %} + {% set sortedResults = part_result.resultsSortedByPriority %} + {% for result in sortedResults %} {# @var result \App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultDTO #} {% set dto = result.searchResult %} {% set localPart = result.localPart %} - + {% set isTopResult = loop.first %} + - + {% if dto.preview_image_url %} + + {% endif %} + {# Check for matches against source keyword (what was searched) #} + {% set sourceKw = result.sourceKeyword|default('')|lower %} + {% set nameMatch = sourceKw is not empty and dto.name is not null and dto.name|lower == sourceKw %} + {% set mpnMatch = sourceKw is not empty and dto.mpn is not null and dto.mpn|lower == sourceKw %} + {% set spnMatch = sourceKw is not empty and dto.provider_id is not null and dto.provider_id|lower == sourceKw %} + {% set anyMatch = nameMatch or mpnMatch or spnMatch %} {% if dto.provider_url is not null %} - {{ dto.name }} + {{ dto.name }} {% else %} - {{ dto.name }} + {{ dto.name }} + {% endif %} + {% if nameMatch %} + {% endif %} {% if dto.mpn is not null %} -
    {{ dto.mpn }} +
    {{ dto.mpn }}
    + {% if mpnMatch %} + MPN + {% endif %} {% endif %} {{ dto.description }} {{ dto.manufacturer ?? '' }} {{ info_provider_label(dto.provider_key)|default(dto.provider_key) }} -
    {{ dto.provider_id }} +
    {{ dto.provider_id }} + {% if spnMatch %} + SPN + {% endif %} - {{ result.sourceField ?? 'unknown' }} + {% if anyMatch %} + {% trans %}info_providers.bulk_import.match{% endtrans %} + {% else %} + {{ result.sourceField ?? 'unknown' }} + {% endif %} {% if result.sourceKeyword %} -
    {{ result.sourceKeyword }} - {% endif %} +
    {{ result.sourceKeyword }} + {% endif %}
    + {% if not isCompleted %} + + {% endif %} {% set updateHref = path('info_providers_update_part', {'id': part.id, 'providerKey': dto.provider_key, 'providerId': dto.provider_id}) ~ '?jobId=' ~ job.id %} diff --git a/tests/Controller/BulkInfoProviderImportControllerTest.php b/tests/Controller/BulkInfoProviderImportControllerTest.php index ec3629fe..d768f55c 100644 --- a/tests/Controller/BulkInfoProviderImportControllerTest.php +++ b/tests/Controller/BulkInfoProviderImportControllerTest.php @@ -589,6 +589,296 @@ final class BulkInfoProviderImportControllerTest extends WebTestCase return $parts; } + public function testQuickApplyWithNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/part/1/quick-apply'); + + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertArrayHasKey('error', $response); + } + + public function testQuickApplyWithNonExistentPart(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $userRepository = $entityManager->getRepository(User::class); + $user = $userRepository->findOneBy(['name' => 'admin']); + + if (!$user) { + $this->markTestSkipped('Admin user not found in fixtures'); + } + + $parts = $this->getTestParts($entityManager, [1]); + + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + $job->setSearchResults(new BulkSearchResponseDTO([])); + + $entityManager->persist($job); + $entityManager->flush(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $job->getId() . '/part/999999/quick-apply'); + + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + + // Clean up + $entityManager->remove($job); + $entityManager->flush(); + } + + public function testQuickApplyWithNoSearchResults(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $userRepository = $entityManager->getRepository(User::class); + $user = $userRepository->findOneBy(['name' => 'admin']); + + if (!$user) { + $this->markTestSkipped('Admin user not found in fixtures'); + } + + $parts = $this->getTestParts($entityManager, [1]); + + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + // Empty search results - no provider results for any parts + $job->setSearchResults(new BulkSearchResponseDTO([ + new BulkSearchPartResultsDTO(part: $parts[0], searchResults: [], errors: []) + ])); + + $entityManager->persist($job); + $entityManager->flush(); + + // Quick apply without providing providerKey/providerId and no search results available + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $job->getId() . '/part/1/quick-apply', [], [], [ + 'CONTENT_TYPE' => 'application/json', + ], json_encode([])); + + $this->assertResponseStatusCodeSame(Response::HTTP_BAD_REQUEST); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertFalse($response['success']); + + // Clean up + $entityManager->remove($job); + $entityManager->flush(); + } + + public function testQuickApplyAccessControl(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $userRepository = $entityManager->getRepository(User::class); + $admin = $userRepository->findOneBy(['name' => 'admin']); + $readonly = $userRepository->findOneBy(['name' => 'noread']); + + if (!$admin || !$readonly) { + $this->markTestSkipped('Required test users not found in fixtures'); + } + + $parts = $this->getTestParts($entityManager, [1]); + + // Create job owned by readonly user + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($readonly); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + $job->setSearchResults(new BulkSearchResponseDTO([])); + + $entityManager->persist($job); + $entityManager->flush(); + + // Admin tries to quick apply on readonly user's job - should fail + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $job->getId() . '/part/1/quick-apply'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + + // Clean up + $jobId = $job->getId(); + $entityManager->clear(); + $persistedJob = $entityManager->find(BulkInfoProviderImportJob::class, $jobId); + if ($persistedJob) { + $entityManager->remove($persistedJob); + $entityManager->flush(); + } + } + + public function testQuickApplyAllWithNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/quick-apply-all'); + + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertArrayHasKey('error', $response); + } + + public function testQuickApplyAllWithNoResults(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $userRepository = $entityManager->getRepository(User::class); + $user = $userRepository->findOneBy(['name' => 'admin']); + + if (!$user) { + $this->markTestSkipped('Admin user not found in fixtures'); + } + + $parts = $this->getTestParts($entityManager, [1, 2]); + + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + // Empty search results for all parts + $job->setSearchResults(new BulkSearchResponseDTO([ + new BulkSearchPartResultsDTO(part: $parts[0], searchResults: [], errors: []), + new BulkSearchPartResultsDTO(part: $parts[1], searchResults: [], errors: []), + ])); + + $entityManager->persist($job); + $entityManager->flush(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $job->getId() . '/quick-apply-all'); + + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + $this->assertEquals(0, $response['applied']); + $this->assertEquals(2, $response['no_results']); + + // Clean up + $entityManager->remove($job); + $entityManager->flush(); + } + + public function testQuickApplyAllAccessControl(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $userRepository = $entityManager->getRepository(User::class); + $readonly = $userRepository->findOneBy(['name' => 'noread']); + + if (!$readonly) { + $this->markTestSkipped('Required test users not found in fixtures'); + } + + $parts = $this->getTestParts($entityManager, [1]); + + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($readonly); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + $job->setSearchResults(new BulkSearchResponseDTO([])); + + $entityManager->persist($job); + $entityManager->flush(); + + // Admin tries quick apply all on readonly user's job + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $job->getId() . '/quick-apply-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + + // Clean up + $jobId = $job->getId(); + $entityManager->clear(); + $persistedJob = $entityManager->find(BulkInfoProviderImportJob::class, $jobId); + if ($persistedJob) { + $entityManager->remove($persistedJob); + $entityManager->flush(); + } + } + + public function testStep2TemplateRenderingWithQuickApplyButtons(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = static::getContainer()->get('doctrine')->getManager(); + $partRepository = $entityManager->getRepository(Part::class); + $part = $partRepository->find(1); + + if (!$part) { + $this->markTestSkipped('Test part with ID 1 not found in fixtures'); + } + + $userRepository = $entityManager->getRepository(User::class); + $user = $userRepository->findOneBy(['name' => 'admin']); + + if (!$user) { + $this->markTestSkipped('Admin user not found in fixtures'); + } + + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + $job->addPart($part); + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + + $searchResults = new BulkSearchResponseDTO(partResults: [ + new BulkSearchPartResultsDTO(part: $part, + searchResults: [new BulkSearchPartResultDTO( + searchResult: new SearchResultDTO(provider_key: 'test_provider', provider_id: 'TEST123', name: 'Test Component', description: 'Test description', manufacturer: 'Test Mfg', mpn: 'TEST-MPN', provider_url: 'https://example.com/test', preview_image_url: null), + sourceField: 'mpn', + sourceKeyword: 'TEST-MPN', + )] + ) + ]); + + $job->setSearchResults($searchResults); + + $entityManager->persist($job); + $entityManager->flush(); + + $client->request('GET', '/tools/bulk_info_provider_import/step2/' . $job->getId()); + + if ($client->getResponse()->isRedirect()) { + $client->followRedirect(); + } + + self::assertResponseStatusCodeSame(Response::HTTP_OK); + + $content = (string) $client->getResponse()->getContent(); + // Verify quick apply buttons are rendered (Stimulus renders camelCase as kebab-case data attributes) + $this->assertStringContainsString('quick-apply-url-value', $content); + $this->assertStringContainsString('quick-apply-all-url-value', $content); + + // Clean up + $jobId = $job->getId(); + $entityManager->clear(); + $jobToRemove = $entityManager->find(BulkInfoProviderImportJob::class, $jobId); + if ($jobToRemove) { + $entityManager->remove($jobToRemove); + $entityManager->flush(); + } + } + public function testStep1Form(): void { $client = static::createClient(); @@ -735,13 +1025,9 @@ final class BulkInfoProviderImportControllerTest extends WebTestCase new BulkSearchFieldMappingDTO('test_supplier_spn', ['test'], 2) ]; - // The service should be able to process the request and throw an exception when no results are found - try { - $bulkService->performBulkSearch([$part], $fieldMappings, false); - $this->fail('Expected RuntimeException to be thrown when no search results are found'); - } catch (\RuntimeException $e) { - $this->assertStringContainsString('No search results found', $e->getMessage()); - } + // The service should return an empty response DTO when no results are found + $response = $bulkService->performBulkSearch([$part], $fieldMappings, false); + $this->assertFalse($response->hasAnyResults()); } public function testBulkInfoProviderServiceBatchProcessing(): void @@ -765,13 +1051,9 @@ final class BulkInfoProviderImportControllerTest extends WebTestCase new BulkSearchFieldMappingDTO('empty', ['test'], 1) ]; - // The service should be able to process the request and throw an exception when no results are found - try { - $response = $bulkService->performBulkSearch([$part], $fieldMappings, false); - $this->fail('Expected RuntimeException to be thrown when no search results are found'); - } catch (\RuntimeException $e) { - $this->assertStringContainsString('No search results found', $e->getMessage()); - } + // The service should return an empty response DTO when no results are found + $response = $bulkService->performBulkSearch([$part], $fieldMappings, false); + $this->assertFalse($response->hasAnyResults()); } public function testBulkInfoProviderServicePrefetchDetails(): void @@ -887,4 +1169,684 @@ final class BulkInfoProviderImportControllerTest extends WebTestCase $entityManager->remove($job); $entityManager->flush(); } + + /** + * Helper to create a job with search results for testing. + */ + private function createJobWithSearchResults(object $entityManager, object $user, array $parts, string $status = 'in_progress'): BulkInfoProviderImportJob + { + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + + $statusEnum = match ($status) { + 'pending' => BulkImportJobStatus::PENDING, + 'completed' => BulkImportJobStatus::COMPLETED, + 'stopped' => BulkImportJobStatus::STOPPED, + default => BulkImportJobStatus::IN_PROGRESS, + }; + $job->setStatus($statusEnum); + + // Create search results with a result per part + $partResults = []; + foreach ($parts as $part) { + $partResults[] = new BulkSearchPartResultsDTO( + part: $part, + searchResults: [ + new BulkSearchPartResultDTO( + searchResult: new SearchResultDTO( + provider_key: 'test_provider', + provider_id: 'TEST_' . $part->getId(), + name: $part->getName() ?? 'Test Part', + description: 'Test description', + manufacturer: 'Test Mfg', + mpn: 'MPN-' . $part->getId(), + provider_url: 'https://example.com/' . $part->getId(), + preview_image_url: null, + ), + sourceField: 'mpn', + sourceKeyword: $part->getName() ?? 'test', + localPart: null, + ), + ] + ); + } + + $job->setSearchResults(new BulkSearchResponseDTO($partResults)); + $entityManager->persist($job); + $entityManager->flush(); + + return $job; + } + + private function cleanupJob(object $entityManager, int $jobId): void + { + $entityManager->clear(); + $persistedJob = $entityManager->find(BulkInfoProviderImportJob::class, $jobId); + if ($persistedJob) { + $entityManager->remove($persistedJob); + $entityManager->flush(); + } + } + + public function testDeleteCompletedJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts, 'completed'); + $jobId = $job->getId(); + + $client->request('DELETE', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/delete'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + + // Verify job was deleted + $entityManager->clear(); + $this->assertNull($entityManager->find(BulkInfoProviderImportJob::class, $jobId)); + } + + public function testDeleteActiveJobFails(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts, 'in_progress'); + $jobId = $job->getId(); + + $client->request('DELETE', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/delete'); + $this->assertResponseStatusCodeSame(Response::HTTP_BAD_REQUEST); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testDeleteNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('DELETE', '/en/tools/bulk_info_provider_import/job/999999/delete'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + } + + public function testStopInProgressJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts, 'in_progress'); + $jobId = $job->getId(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/stop'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + + // Verify job is stopped + $entityManager->clear(); + $stoppedJob = $entityManager->find(BulkInfoProviderImportJob::class, $jobId); + $this->assertTrue($stoppedJob->isStopped()); + + $entityManager->remove($stoppedJob); + $entityManager->flush(); + } + + public function testStopNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/stop'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + } + + public function testMarkPartCompletedAutoCompletesJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + $partId = $parts[0]->getId(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/mark-completed'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + $this->assertEquals(1, $response['completed_count']); + $this->assertTrue($response['job_completed']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testMarkPartSkippedWithReason(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + $partId = $parts[0]->getId(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/mark-skipped', [ + 'reason' => 'Not needed' + ]); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + $this->assertEquals(1, $response['skipped_count']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testMarkPartPendingAfterCompleted(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + $partId = $parts[0]->getId(); + + // First mark as completed + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/mark-completed'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + + // Then mark as pending again + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/mark-pending'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + $this->assertEquals(0, $response['completed_count']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testMarkPartCompletedNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/part/1/mark-completed'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + } + + public function testQuickApplyWithValidJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + $partId = $parts[0]->getId(); + + // Quick apply will fail because test_provider doesn't exist, but it exercises the code path + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/quick-apply', [], [], [ + 'CONTENT_TYPE' => 'application/json', + ], json_encode(['providerKey' => 'test_provider', 'providerId' => 'TEST_1'])); + + // Will get 500 because test_provider doesn't exist, which exercises the catch block + $this->assertResponseStatusCodeSame(Response::HTTP_INTERNAL_SERVER_ERROR); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertFalse($response['success']); + $this->assertStringContainsString('Quick apply failed', $response['error']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testQuickApplyFallsBackToTopResult(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + $partId = $parts[0]->getId(); + + // No providerKey/providerId in body - should fall back to top search result + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/quick-apply', [], [], [ + 'CONTENT_TYPE' => 'application/json', + ], '{}'); + + // Will get 500 because test_provider doesn't exist, but exercises the fallback code path + $this->assertResponseStatusCodeSame(Response::HTTP_INTERNAL_SERVER_ERROR); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertStringContainsString('Quick apply failed', $response['error']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testQuickApplyEmptyResultsReturns400(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + // Create job with empty search results + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + $job->setSearchResults(new BulkSearchResponseDTO([ + new BulkSearchPartResultsDTO(part: $parts[0], searchResults: []) + ])); + $entityManager->persist($job); + $entityManager->flush(); + + $jobId = $job->getId(); + $partId = $parts[0]->getId(); + + // No provider specified and no search results - should return 400 + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/' . $partId . '/quick-apply', [], [], [ + 'CONTENT_TYPE' => 'application/json', + ], '{}'); + $this->assertResponseStatusCodeSame(Response::HTTP_BAD_REQUEST); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertStringContainsString('No search result available', $response['error']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testQuickApplyNonExistentPart(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/999999/quick-apply'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testQuickApplyAllWithValidJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + + // Quick apply all - will fail for test_provider but exercises the code path + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/quick-apply-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + // Should have 1 failed (because test_provider doesn't exist) + $this->assertEquals(1, $response['failed']); + $this->assertNotEmpty($response['errors']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testQuickApplyAllWithNoSearchResults(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + // Create job with empty results + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::IN_PROGRESS); + $job->setSearchResults(new BulkSearchResponseDTO([ + new BulkSearchPartResultsDTO(part: $parts[0], searchResults: []) + ])); + $entityManager->persist($job); + $entityManager->flush(); + + $jobId = $job->getId(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/quick-apply-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + $this->assertEquals(0, $response['applied']); + $this->assertEquals(1, $response['no_results']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testQuickApplyAllNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/quick-apply-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + } + + public function testQuickApplyAllSkipsCompletedParts(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + + // Mark the part as completed first + $job->markPartAsCompleted($parts[0]->getId()); + $entityManager->flush(); + + // Quick apply all should skip already-completed parts + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/quick-apply-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertEquals(0, $response['applied']); + $this->assertEquals(0, $response['failed']); + $this->assertEquals(0, $response['no_results']); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testDeleteStoppedJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts, 'stopped'); + $jobId = $job->getId(); + + $client->request('DELETE', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/delete'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + + $entityManager->clear(); + $this->assertNull($entityManager->find(BulkInfoProviderImportJob::class, $jobId)); + } + + public function testManagePageSplitsActiveAndHistory(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + // Create one active and one completed job + $activeJob = $this->createJobWithSearchResults($entityManager, $user, $parts, 'in_progress'); + $completedJob = $this->createJobWithSearchResults($entityManager, $user, $parts, 'completed'); + + $client->request('GET', '/en/tools/bulk_info_provider_import/manage'); + if ($client->getResponse()->isRedirect()) { + $client->followRedirect(); + } + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + + $content = (string) $client->getResponse()->getContent(); + $this->assertStringContainsString('Active Jobs', $content); + $this->assertStringContainsString('History', $content); + + $this->cleanupJob($entityManager, $activeJob->getId()); + $this->cleanupJob($entityManager, $completedJob->getId()); + } + + public function testManagePageCleansUpPendingJobsWithNoResults(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + // Create a pending job with no results (should be cleaned up) + $job = new BulkInfoProviderImportJob(); + $job->setCreatedBy($user); + foreach ($parts as $part) { + $job->addPart($part); + } + $job->setStatus(BulkImportJobStatus::PENDING); + $job->setSearchResults(new BulkSearchResponseDTO([])); + $entityManager->persist($job); + $entityManager->flush(); + $jobId = $job->getId(); + + // Visit manage page - should trigger cleanup + $client->request('GET', '/en/tools/bulk_info_provider_import/manage'); + if ($client->getResponse()->isRedirect()) { + $client->followRedirect(); + } + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + + // Verify the stale job was cleaned up + $entityManager->clear(); + $this->assertNull($entityManager->find(BulkInfoProviderImportJob::class, $jobId)); + } + + public function testStep2RedirectsForNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('GET', '/en/tools/bulk_info_provider_import/step2/999999'); + + // Should redirect with error flash + $this->assertResponseRedirects(); + } + + public function testStep2WithOtherUsersJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $otherUser = $entityManager->getRepository(User::class)->findOneBy(['name' => 'noread']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$otherUser || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $otherUser, $parts); + $jobId = $job->getId(); + + $client->request('GET', '/en/tools/bulk_info_provider_import/step2/' . $jobId); + + // Should redirect with access denied + $this->assertResponseRedirects(); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testResearchPartNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/part/1/research'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + } + + public function testResearchPartNonExistentPart(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/part/999999/research'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + + $this->cleanupJob($entityManager, $jobId); + } + + public function testResearchAllNonExistentJob(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/999999/research-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND); + } + + public function testResearchAllWithAllPartsCompleted(): void + { + $client = static::createClient(); + $this->loginAsUser($client, 'admin'); + + $entityManager = $client->getContainer()->get('doctrine')->getManager(); + $user = $entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $parts = $this->getTestParts($entityManager, [1]); + + if (!$user || empty($parts)) { + $this->markTestSkipped('Required fixtures not found'); + } + + $job = $this->createJobWithSearchResults($entityManager, $user, $parts); + $jobId = $job->getId(); + + // Mark all parts as completed + foreach ($parts as $part) { + $job->markPartAsCompleted($part->getId()); + } + $entityManager->flush(); + + $client->request('POST', '/en/tools/bulk_info_provider_import/job/' . $jobId . '/research-all'); + $this->assertResponseStatusCodeSame(Response::HTTP_OK); + $response = json_decode($client->getResponse()->getContent(), true); + $this->assertTrue($response['success']); + $this->assertEquals(0, $response['researched_count']); + + $this->cleanupJob($entityManager, $jobId); + } } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index d5f5c183..0044edcc 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -11211,6 +11211,96 @@ Please note, that you can not impersonate a disabled user. If you try you will g Update Part + + + info_providers.bulk_import.back_to_jobs + Back to Jobs + + + + + info_providers.bulk_import.back_to_parts + Back to Parts + + + + + info_providers.bulk_import.job_completed + Job completed! + + + + + info_providers.bulk_import.job_completed.description + All parts have been processed. You can review the results below or navigate back to the parts list. + + + + + info_providers.bulk_import.recommended + Top + + + + + info_providers.bulk_import.exact_match + Exact name match + + + + + info_providers.bulk_import.mpn_match + MPN matches + + + + + info_providers.bulk_import.active_jobs + Active Jobs + + + + + info_providers.bulk_import.finished_jobs + History + + + + + info_providers.bulk_import.spn_match + SPN matches + + + + + info_providers.bulk_import.match + Match + + + + + info_providers.bulk_import.quick_apply + Quick Apply + + + + + info_providers.bulk_import.quick_apply.tooltip + Apply this provider result to the part without opening the edit form + + + + + info_providers.bulk_import.quick_apply_all + Apply All (Top Results) + + + + + info_providers.bulk_import.quick_apply_all.tooltip + Apply the top-ranked search result to all pending parts without individual review + + info_providers.bulk_import.prefetch_details From 1d1e3008aa28dce6070d985bc2e1c71fd51b8008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 22:03:37 +0200 Subject: [PATCH 095/108] Updated dependencies --- composer.lock | 58 +++++++++++++++++++++++----------------------- yarn.lock | 64 +++++++++++++++++++++++++-------------------------- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/composer.lock b/composer.lock index d9795640..f25634d4 100644 --- a/composer.lock +++ b/composer.lock @@ -318,16 +318,16 @@ }, { "name": "amphp/hpack", - "version": "v3.2.1", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/amphp/hpack.git", - "reference": "4f293064b15682a2b178b1367ddf0b8b5feb0239" + "reference": "291da27078e7e149a9bad4d08ff05bf7d81c89f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/hpack/zipball/4f293064b15682a2b178b1367ddf0b8b5feb0239", - "reference": "4f293064b15682a2b178b1367ddf0b8b5feb0239", + "url": "https://api.github.com/repos/amphp/hpack/zipball/291da27078e7e149a9bad4d08ff05bf7d81c89f4", + "reference": "291da27078e7e149a9bad4d08ff05bf7d81c89f4", "shasum": "" }, "require": { @@ -336,7 +336,7 @@ "require-dev": { "amphp/php-cs-fixer-config": "^2", "http2jp/hpack-test-case": "^1", - "nikic/php-fuzzer": "^0.0.10", + "nikic/php-fuzzer": "^0.0.11", "phpunit/phpunit": "^7 | ^8 | ^9" }, "type": "library", @@ -380,7 +380,7 @@ ], "support": { "issues": "https://github.com/amphp/hpack/issues", - "source": "https://github.com/amphp/hpack/tree/v3.2.1" + "source": "https://github.com/amphp/hpack/tree/v3.2.2" }, "funding": [ { @@ -388,7 +388,7 @@ "type": "github" } ], - "time": "2024-03-21T19:00:16+00:00" + "time": "2026-05-03T19:28:59+00:00" }, { "name": "amphp/http", @@ -17374,16 +17374,16 @@ }, { "name": "symplify/easy-coding-standard", - "version": "13.0.4", + "version": "13.1.2", "source": { "type": "git", - "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8" + "url": "https://github.com/easy-coding-standard/ecs.git", + "reference": "6d22473d1f36945884d8cb291777166020a47770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8", - "reference": "5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8", + "url": "https://api.github.com/repos/easy-coding-standard/ecs/zipball/6d22473d1f36945884d8cb291777166020a47770", + "reference": "6d22473d1f36945884d8cb291777166020a47770", "shasum": "" }, "require": { @@ -17418,8 +17418,8 @@ "static analysis" ], "support": { - "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/13.0.4" + "issues": "https://github.com/easy-coding-standard/ecs/issues", + "source": "https://github.com/easy-coding-standard/ecs/tree/13.1.2" }, "funding": [ { @@ -17431,7 +17431,7 @@ "type": "github" } ], - "time": "2026-01-05T09:10:04+00:00" + "time": "2026-05-03T22:05:09+00:00" }, { "name": "tecnickcom/tc-lib-barcode", @@ -18479,16 +18479,16 @@ }, { "name": "web-auth/cose-lib", - "version": "4.5.1", + "version": "4.5.2", "source": { "type": "git", "url": "https://github.com/web-auth/cose-lib.git", - "reference": "3185af4df10dc537b65c140c315b88d15ae15b80" + "reference": "5b38660f90070a8e45f3dbc9528ade3b608dd77d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/3185af4df10dc537b65c140c315b88d15ae15b80", - "reference": "3185af4df10dc537b65c140c315b88d15ae15b80", + "url": "https://api.github.com/repos/web-auth/cose-lib/zipball/5b38660f90070a8e45f3dbc9528ade3b608dd77d", + "reference": "5b38660f90070a8e45f3dbc9528ade3b608dd77d", "shasum": "" }, "require": { @@ -18534,7 +18534,7 @@ ], "support": { "issues": "https://github.com/web-auth/cose-lib/issues", - "source": "https://github.com/web-auth/cose-lib/tree/4.5.1" + "source": "https://github.com/web-auth/cose-lib/tree/4.5.2" }, "funding": [ { @@ -18546,11 +18546,11 @@ "type": "patreon" } ], - "time": "2026-04-01T12:47:39+00:00" + "time": "2026-05-03T09:49:50+00:00" }, { "name": "web-auth/webauthn-lib", - "version": "5.3.1", + "version": "5.3.2", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", @@ -18620,7 +18620,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.1" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.2" }, "funding": [ { @@ -18636,16 +18636,16 @@ }, { "name": "web-auth/webauthn-symfony-bundle", - "version": "5.3.1", + "version": "5.3.2", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-symfony-bundle.git", - "reference": "40f5ae033d4bea090aaa395b906ebfa7d7fe6055" + "reference": "1d20af98b50810e8776c52b671201b6bb73ea981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/40f5ae033d4bea090aaa395b906ebfa7d7fe6055", - "reference": "40f5ae033d4bea090aaa395b906ebfa7d7fe6055", + "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/1d20af98b50810e8776c52b671201b6bb73ea981", + "reference": "1d20af98b50810e8776c52b671201b6bb73ea981", "shasum": "" }, "require": { @@ -18703,7 +18703,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.3.1" + "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/5.3.2" }, "funding": [ { @@ -18715,7 +18715,7 @@ "type": "patreon" } ], - "time": "2026-05-01T12:14:37+00:00" + "time": "2026-05-04T08:08:16+00:00" }, { "name": "webmozart/assert", diff --git a/yarn.lock b/yarn.lock index 3ea1a62b..4d43533a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2221,11 +2221,11 @@ bail@^2.0.0: integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== barcode-detector@^3.0.0, barcode-detector@^3.0.5: - version "3.1.2" - resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.2.tgz#8032a211ebb6cb5cc25724c5c56322c77ed02503" - integrity sha512-Q5kjXpVH5I3ItykNzbWmfWnNryFN1ZTWp10k9/PKJuS0RnoKR7jTrHEJODR4fn04bRomq7TJwie/Dr9fj/GoGQ== + version "3.1.3" + resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.1.3.tgz#ea3224c8cf106b91e4f05a25ff0d798cb2b380a9" + integrity sha512-omL3/x26oU9jlR0gUQcGdXIjQtMlrUGKF7xRFO1RwrQkRkRU7WLz0mgQEsdUtYBm2uX3JH+HQLrKlyTS/BxZRw== dependencies: - zxing-wasm "3.0.2" + zxing-wasm "3.0.3" base64-js@0.0.8: version "0.0.8" @@ -2238,9 +2238,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.10.12: - version "2.10.25" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.25.tgz#183b45c0d3bdd12addb352426555fb3627eb022a" - integrity sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA== + version "2.10.27" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.27.tgz#fee941c2a0b42cdf83c6427e4c830b1d0bdab2c3" + integrity sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA== big.js@^5.2.2: version "5.2.2" @@ -2650,10 +2650,10 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^7.0.16: - version "7.0.16" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.16.tgz#b0c9576c87488dfa00388e3a0c8b27ee946aa352" - integrity sha512-W0hiFi/ca/u2OTptL11OdApaz1vh9jyfd2ku9dMjou6KdpdgbMTagaXHKNl5kaEyRSCu9GIIaPRp5YLdqRAZMw== +cssnano-preset-default@^7.0.17: + version "7.0.17" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.17.tgz#6c239741cb8fd77556d0c55575de95c38f3a2537" + integrity sha512-11qO63A+czwguQFJCaTdICvbaxn0pJzz/XghLlv+OT7WyToDxAMR0Xb3/26/l0y0hQJywwNbj/SLSQlGBHE1OA== dependencies: browserslist "^4.28.2" css-declaration-sorter "^7.2.0" @@ -2670,7 +2670,7 @@ cssnano-preset-default@^7.0.16: postcss-minify-font-values "^7.0.3" postcss-minify-gradients "^7.0.5" postcss-minify-params "^7.0.9" - postcss-minify-selectors "^7.1.1" + postcss-minify-selectors "^7.1.2" postcss-normalize-charset "^7.0.3" postcss-normalize-display-values "^7.0.3" postcss-normalize-positions "^7.0.4" @@ -2692,11 +2692,11 @@ cssnano-utils@^5.0.3: integrity sha512-ynIREMICLxkxm7e9bCR9sh75s4Q5drICi0ua1yxo5jH2XPBqSKkl4dOh4EbFqtUmnTMhRffHgYL0EKKkMjtJTg== cssnano@^7.0.4: - version "7.1.8" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.8.tgz#a6508bd13f3b206676c6594fa19ef45a89acc9dc" - integrity sha512-OGXtXqXmwEoIGfXM2QoD35vweUAtx+J8ZvLSZHOEV0Jv9Hs9ScTdGGjRzZXun5J4PEZhEoytKig2O2NR8NXxKw== + version "7.1.9" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.9.tgz#1e8b5db528ae7cb175da0197adfbc559170f845e" + integrity sha512-uPR75+5Dk/WJ/YSPR1/YDHdwMM9c5FsaARljfKWgeCKLKOtJ0we21xy/RcCjn53fZnD/f6yYEIZ8pu18+GnbNQ== dependencies: - cssnano-preset-default "^7.0.16" + cssnano-preset-default "^7.0.17" lilconfig "^3.1.3" csso@^5.0.5: @@ -3039,9 +3039,9 @@ fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-uri@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" - integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.1.tgz#dd085fec2494a2a33bac6e61277374669e1dd774" + integrity sha512-h2r7rcm6Ee/J8o0LD5djLuFVcfbZxhvho4vvsbeV0aMvXjUgqv4YpxpkEx0d68l6+IleVfLAdVEfhR7QNMkGHQ== fastest-levenshtein@1.0.16, fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: version "1.0.16" @@ -4314,10 +4314,10 @@ postcss-minify-params@^7.0.9: cssnano-utils "^5.0.3" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.1.1.tgz#2de3a0f9fc07d745d4164adc59865b3a0c9b1b87" - integrity sha512-MZWXwSTfcpmNVJIs7tddar/275a4/zT5nG9/gEndHPRZGTAQNpiSkk8s/dq+yZVX2jKfvVn1d5X8Z5SJHWnDoQ== +postcss-minify-selectors@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.1.2.tgz#9cef2eb836fb95c49c11ea6d0921743c9d2f7eb3" + integrity sha512-aQtrEWKwqafNlExcKHQvPGsXR2+vlUqqJtf5XsCQcgsSb5PL4wlujWBYDJuWsP4UnQX1YHDHU8qRlD+1PzTQ+Q== dependencies: browserslist "^4.28.1" caniuse-api "^3.0.0" @@ -4466,9 +4466,9 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.2.14, postcss@^8.4.40: - version "8.5.13" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.13.tgz#6cfaf647f2e7ef69850208eccd849e0d3f65d420" - integrity sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag== + version "8.5.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.14.tgz#a66c2d7808fadf69ebb5b84a03f8bafd76c4919c" + integrity sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -5017,7 +5017,7 @@ tslib@^2.8.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -type-fest@^5.5.0: +type-fest@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.6.0.tgz#502f7a003b7309e96a7e17052cc2ab2c7e5c7a31" integrity sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA== @@ -5345,10 +5345,10 @@ zwitch@^2.0.0, zwitch@^2.0.4: resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== -zxing-wasm@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-3.0.2.tgz#3c39821f4a5d20b02bc5bacaefe7e6725d9520dd" - integrity sha512-2YMAriaYHX9wrBY2k7H0epSo+dyCaCZg/vOtt+nEDXM9ul480gkXz/9SkwpOeHcD2H5qqDG8lWDSBwpTcZpa6w== +zxing-wasm@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/zxing-wasm/-/zxing-wasm-3.0.3.tgz#f87a45f7f90420e0f8c1a587147384d1cfeb4759" + integrity sha512-DdOn/G5F+qvZELWeO5ZFFwcN611TfMybxPV0LUUoutUmiH2t47MZSB7gLV9O9YLhvudBdnzQNAoFOu4Xz8eOrQ== dependencies: "@types/emscripten" "^1.41.5" - type-fest "^5.5.0" + type-fest "^5.6.0" From 83074a240388ad52b6a6d35c29728aac58dfc582 Mon Sep 17 00:00:00 2001 From: kernchen-brc Date: Mon, 4 May 2026 22:12:30 +0200 Subject: [PATCH 096/108] Add 'Add stock' button to part stock info page (#1352) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add 'Add stock' button to part stock info page * Use outline-success style for new stock button on part info page --------- Co-authored-by: Jan Böhmer --- config/reference.php | 2 +- src/Controller/PartController.php | 41 +++++++++++++++++ templates/parts/info/_add_lot_modal.html.twig | 46 +++++++++++++++++++ templates/parts/info/_part_lots.html.twig | 8 ++++ 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 templates/parts/info/_add_lot_modal.html.twig diff --git a/config/reference.php b/config/reference.php index e1304d43..9b28c546 100644 --- a/config/reference.php +++ b/config/reference.php @@ -1713,7 +1713,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * length?: scalar|Param|null, // Default: 5 * width?: scalar|Param|null, // Default: 130 * height?: scalar|Param|null, // Default: 50 - * font?: scalar|Param|null, // Default: "/home/jan/php/Part-DB-server/vendor/gregwar/captcha-bundle/DependencyInjection/../Generator/Font/captcha.ttf" + * font?: scalar|Param|null, // Default: "/home/user/documents/Part-DB-server/vendor/gregwar/captcha-bundle/DependencyInjection/../Generator/Font/captcha.ttf" * keep_value?: scalar|Param|null, // Default: false * charset?: scalar|Param|null, // Default: "abcdefhjkmnprstuvwxyz23456789" * as_file?: scalar|Param|null, // Default: false diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index ab424f50..735a48f8 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -36,6 +36,7 @@ use App\Entity\PriceInformations\Orderdetail; use App\Entity\ProjectSystem\Project; use App\Exceptions\AttachmentDownloadException; use App\Form\Part\PartBaseType; +use App\Form\Part\PartLotType; use App\Services\Attachments\AttachmentSubmitHandler; use App\Services\Attachments\PartPreviewGenerator; use App\Services\EntityMergers\Mergers\PartMerger; @@ -128,6 +129,17 @@ final class PartController extends AbstractController $table = null; } + // Build the add-lot form for the INFO page modal (only when not in time-travel mode) + $addLotForm = null; + if ($timeTravel_timestamp === null && $this->isGranted('edit', $part)) { + $newLot = new PartLot(); + $newLot->setPart($part); + $addLotForm = $this->createForm(PartLotType::class, $newLot, [ + 'measurement_unit' => $part->getPartUnit(), + 'action' => $this->generateUrl('part_lot_add', ['id' => $part->getID()]), + ]); + } + return $this->render( 'parts/info/show_part_info.html.twig', [ @@ -140,10 +152,39 @@ final class PartController extends AbstractController 'comment_params' => $this->partInfoSettings->extractParamsFromNotes ? $parameterExtractor->extractParameters($part->getComment()) : [], 'withdraw_add_helper' => $withdrawAddHelper, 'highlightLotId' => $request->query->getInt('highlightLot', 0), + 'add_lot_form' => $addLotForm, ] ); } + #[Route(path: '/{id}/add_lot', name: 'part_lot_add', methods: ['POST'])] + public function addLot(Part $part, Request $request, EntityManagerInterface $em): Response + { + $this->denyAccessUnlessGranted('edit', $part); + + $newLot = new PartLot(); + $newLot->setPart($part); + + $form = $this->createForm(PartLotType::class, $newLot, [ + 'measurement_unit' => $part->getPartUnit(), + ]); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $em->persist($newLot); + $em->flush(); + $this->addFlash('success', 'part.edited_flash'); + return $this->redirectToRoute('part_info', [ + 'id' => $part->getID(), + 'highlightLot' => $newLot->getID(), + ]); + } + + $this->addFlash('error', 'part.created_flash.invalid'); + return $this->redirectToRoute('part_info', ['id' => $part->getID()]); + } + #[Route(path: '/{id}/edit', name: 'part_edit')] public function edit(Part $part, Request $request): Response { diff --git a/templates/parts/info/_add_lot_modal.html.twig b/templates/parts/info/_add_lot_modal.html.twig new file mode 100644 index 00000000..b31f368f --- /dev/null +++ b/templates/parts/info/_add_lot_modal.html.twig @@ -0,0 +1,46 @@ +{% if add_lot_form is not null %} +{% form_theme add_lot_form 'form/extended_bootstrap_layout.html.twig' %} + + +{% endif %} diff --git a/templates/parts/info/_part_lots.html.twig b/templates/parts/info/_part_lots.html.twig index 70e5dc4e..7e53aec1 100644 --- a/templates/parts/info/_part_lots.html.twig +++ b/templates/parts/info/_part_lots.html.twig @@ -3,6 +3,7 @@ {% include "parts/info/_withdraw_modal.html.twig" %} {% include "parts/info/_stocktake_modal.html.twig" %} +{% include "parts/info/_add_lot_modal.html.twig" %}
    @@ -126,3 +127,10 @@
    + +{% if add_lot_form is not null %} + +{% endif %} From 19d138632acd3df86a629e2ebb2adba8b78de0e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 22:28:39 +0200 Subject: [PATCH 097/108] Properly reset the sequences for postgres and database platform conversion This fixes issue #1362 --- config/reference.php | 2 +- .../Migrations/DBPlatformConvertCommand.php | 47 ++++++++++++------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/config/reference.php b/config/reference.php index 9b28c546..e1304d43 100644 --- a/config/reference.php +++ b/config/reference.php @@ -1713,7 +1713,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * length?: scalar|Param|null, // Default: 5 * width?: scalar|Param|null, // Default: 130 * height?: scalar|Param|null, // Default: 50 - * font?: scalar|Param|null, // Default: "/home/user/documents/Part-DB-server/vendor/gregwar/captcha-bundle/DependencyInjection/../Generator/Font/captcha.ttf" + * font?: scalar|Param|null, // Default: "/home/jan/php/Part-DB-server/vendor/gregwar/captcha-bundle/DependencyInjection/../Generator/Font/captcha.ttf" * keep_value?: scalar|Param|null, // Default: false * charset?: scalar|Param|null, // Default: "abcdefhjkmnprstuvwxyz23456789" * as_file?: scalar|Param|null, // Default: false diff --git a/src/Command/Migrations/DBPlatformConvertCommand.php b/src/Command/Migrations/DBPlatformConvertCommand.php index 86052bf7..d1215da4 100644 --- a/src/Command/Migrations/DBPlatformConvertCommand.php +++ b/src/Command/Migrations/DBPlatformConvertCommand.php @@ -229,24 +229,37 @@ class DBPlatformConvertCommand extends Command if ($platform instanceof PostgreSQLPlatform) { $connection->executeStatement( - //From: https://wiki.postgresql.org/wiki/Fixing_Sequences + //See https://github.com/Part-DB/Part-DB-server/issues/1362 << Date: Mon, 4 May 2026 22:37:11 +0200 Subject: [PATCH 098/108] Fixed error that made editing users impossible --- src/Controller/AdminPages/BaseAdminController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Controller/AdminPages/BaseAdminController.php b/src/Controller/AdminPages/BaseAdminController.php index c737e291..b7c25229 100644 --- a/src/Controller/AdminPages/BaseAdminController.php +++ b/src/Controller/AdminPages/BaseAdminController.php @@ -34,6 +34,7 @@ use App\Entity\Base\PartsContainingRepositoryInterface; use App\Entity\LabelSystem\LabelProcessMode; use App\Entity\LabelSystem\LabelProfile; use App\Entity\Parameters\AbstractParameter; +use App\Entity\UserSystem\User; use App\Exceptions\AttachmentDownloadException; use App\Exceptions\TwigModeException; use App\Form\AdminPages\ImportType; @@ -196,7 +197,9 @@ abstract class BaseAdminController extends AbstractController $this->commentHelper->setMessage($form['log_comment']->getData()); //In principle, the form should be disabled, if the edit permission is not granted, but for good measure, we also check it here, before saving changes. - $this->denyAccessUnlessGranted('edit', $entity); + if (!$entity instanceof User) { //Users entities does not have a simple edit permission, so we skip the check for them + $this->denyAccessUnlessGranted('edit', $entity); + } $em->persist($entity); $em->flush(); $this->addFlash('success', 'entity.edit_flash'); From 3ef4a83f4aaed3fd50031067965ceb0240c304c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 22:42:18 +0200 Subject: [PATCH 099/108] Do not change EDA info of original category or footprint when cloning Fixes #1341. We have to clone the eda info on duplicaion --- src/Entity/Parts/Category.php | 9 +++++++++ src/Entity/Parts/Footprint.php | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/Entity/Parts/Category.php b/src/Entity/Parts/Category.php index 7fca81bc..22f8a3e4 100644 --- a/src/Entity/Parts/Category.php +++ b/src/Entity/Parts/Category.php @@ -208,6 +208,15 @@ class Category extends AbstractPartsContainingDBElement $this->eda_info = new EDACategoryInfo(); } + public function __clone() + { + if ($this->id) { + //Clone EDA info to prevent changes to the original EDA info when changing the cloned category + $this->eda_info = clone $this->eda_info; + } + parent::__clone(); + } + public function getPartnameHint(): string { return $this->partname_hint; diff --git a/src/Entity/Parts/Footprint.php b/src/Entity/Parts/Footprint.php index 6b043562..3d8be686 100644 --- a/src/Entity/Parts/Footprint.php +++ b/src/Entity/Parts/Footprint.php @@ -152,6 +152,15 @@ class Footprint extends AbstractPartsContainingDBElement $this->eda_info = new EDAFootprintInfo(); } + public function __clone() + { + if ($this->id) { + //Clone EDA info to prevent changes to the original EDA info when changing the cloned category + $this->eda_info = clone $this->eda_info; + } + parent::__clone(); + } + /**************************************** * Getters ****************************************/ From 6045b50af2cc30d36109c35119a78fc934abd42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 22:51:13 +0200 Subject: [PATCH 100/108] Keep part table length selection and do not clear it at page reload Fixes issue #1350 --- assets/controllers/elements/datatables/datatables_controller.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/controllers/elements/datatables/datatables_controller.js b/assets/controllers/elements/datatables/datatables_controller.js index 98b9cf29..d945004b 100644 --- a/assets/controllers/elements/datatables/datatables_controller.js +++ b/assets/controllers/elements/datatables/datatables_controller.js @@ -83,8 +83,6 @@ export default class extends Controller { if (data) { //Do not save the start value (current page), as we want to always start at the first page on a page reload delete data.start; - //Reset the data length to the default value by deleting the length property - delete data.length; } return data; From b50617bd10bcfdd4581b3091ee82cf93ce63684d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 22:51:59 +0200 Subject: [PATCH 101/108] Added table length of 250 and 500 --- config/packages/datatables.yaml | 2 +- src/DataTables/PartsDataTable.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/packages/datatables.yaml b/config/packages/datatables.yaml index f1ea4715..fe238a1e 100644 --- a/config/packages/datatables.yaml +++ b/config/packages/datatables.yaml @@ -8,7 +8,7 @@ datatables: # Set options, as documented at https://datatables.net/reference/option/ options: - lengthMenu : [[10, 25, 50, 100], [10, 25, 50, 100]] # We add the "All" option, when part tables are generated + lengthMenu : [[10, 25, 50, 100, 250, 500], [10, 25, 50, 100, 250, 500]] # We add the "All" option, when part tables are generated #pageLength: '%partdb.table.default_page_size%' # Set to -1 to disable pagination (i.e. show all rows) by default pageLength: 50 #TODO dom: " <'row' <'col mb-2 input-group flex-nowrap' B l > <'col-auto mb-2' < p >>> diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index b34eef9d..bcf64056 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -60,7 +60,7 @@ use Symfony\Contracts\Translation\TranslatorInterface; final class PartsDataTable implements DataTableTypeInterface { - const LENGTH_MENU = [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]]; + public const LENGTH_MENU = [[10, 25, 50, 100, 250, 500, -1], [10, 25, 50, 100, 250, 500, "All"]]; public function __construct( private readonly EntityURLGenerator $urlGenerator, From 71fbbddbbe495b4f69322cc529487e7d56bf90d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 23:18:58 +0200 Subject: [PATCH 102/108] New Crowdin updates (#1361) * New translations messages.en.xlf (English) [ci skip] * New translations messages.en.xlf (German) [ci skip] * New translations messages.en.xlf (English) [ci skip] * New translations messages.en.xlf (German) [ci skip] --- translations/messages.de.xlf | 578 +++++++++++++++++++++++++++++++++-- 1 file changed, 559 insertions(+), 19 deletions(-) diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 7e070ff2..e5020c06 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -1,6 +1,6 @@ - + attachment_type.caption @@ -2779,7 +2779,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr Name - + part.table.si_value SI-Wert @@ -7217,13 +7217,13 @@ Element 1 -> Element 1.2 Unterprojekte - + project.info.total_build_price Gesamterstellpreis - + project.info.per_unit_price pro Einheit @@ -7253,7 +7253,7 @@ Element 1 -> Element 1.2 Preis - + project.bom.ext_price Gesamtpreis @@ -10052,85 +10052,85 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön Wenn aktiviert, verlinkt das Datenblatt-Feld in KiCad auf die tatsächliche PDF-Datei (sofern gefunden). Wenn deaktiviert, führt es stattdessen zur Part-DB-Seite. Der Link zur Part-DB-Seite ist immer als separates "Part-DB URL"-Feld verfügbar. - + settings.misc.kicad_eda.editor.title KiCad Autovervollständigungslisten - + settings.misc.kicad_eda.editor.link Autovervollständigungseinstellungen - + settings.misc.kicad_eda.editor.description Konfigurieren Sie, ob KiCad Autovervollständigung die automatisch generierten Standardlisten oder Ihre benutzerdefinierten Überschreibungsdateien verwendet. Die benutzerdefinierten Dateien sind hier bearbeitbar, während die Standarddateien nur lesbar zur Referenz angezeigt werden. - + settings.misc.kicad_eda.editor.footprints Footprint-Liste - + settings.misc.kicad_eda.editor.footprints.help Ein Eintrag pro Zeile. Wird als Autovervollständigungsvorschlag für KiCad-Footprintfelder verwendet. - + settings.misc.kicad_eda.editor.symbols Symbolliste - + settings.misc.kicad_eda.editor.symbols.help Ein Eintrag pro Zeile. Wird als Autovervollständigungsvorschlag für KiCad-Symbolfelder verwendet. - + settings.misc.kicad_eda.use_custom_list Benutzerdefinierte Autovervollständigungslisten verwenden - + settings.misc.kicad_eda.use_custom_list.help Wenn aktiviert, verwendet die KiCad Autovervollständigung public/kicad/footprints_custom.txt und public/kicad/symbols_custom.txt anstelle der automatisch generierten Standarddateien. - + settings.misc.kicad_eda.editor.custom_footprints Benutzerdefinierte Footprint-Liste - + settings.misc.kicad_eda.editor.custom_symbols Benutzerdefinierte Symbolliste - + settings.misc.kicad_eda.editor.default_footprints Standard Footprint-Liste - + settings.misc.kicad_eda.editor.default_symbols Standardsymboliste - + settings.misc.kicad_eda.editor.default_files_help Automatisch generierte Datei wird nur zur Referenz angezeigt. Änderungen müssen in der benutzerdefinierten Liste vorgenommen werden. @@ -11210,6 +11210,96 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön Bauteil aktualisieren + + + info_providers.bulk_import.back_to_jobs + Zurück zu Jobs + + + + + info_providers.bulk_import.back_to_parts + Zurück zu Bauteilen + + + + + info_providers.bulk_import.job_completed + Auftrag abgeschlossen! + + + + + info_providers.bulk_import.job_completed.description + Alle Bauteile wurden verarbeitet. Sie können die Ergebnisse unten überprüfen oder zur Bauteileliste zurückkehren. + + + + + info_providers.bulk_import.recommended + Top + + + + + info_providers.bulk_import.exact_match + Exakte Namensübereinstimmung + + + + + info_providers.bulk_import.mpn_match + MPN-Übereinstimmungen + + + + + info_providers.bulk_import.active_jobs + Aktive Jobs + + + + + info_providers.bulk_import.finished_jobs + Verlauf + + + + + info_providers.bulk_import.spn_match + SPN-Übereinstimmungen + + + + + info_providers.bulk_import.match + Übereinstimmung + + + + + info_providers.bulk_import.quick_apply + Schnellanwendung + + + + + info_providers.bulk_import.quick_apply.tooltip + Dieses Anbietergebnis auf das Bauteil anwenden, ohne das Bearbeitungsformular zu öffnen + + + + + info_providers.bulk_import.quick_apply_all + Alle anwenden (Top Ergebnisse) + + + + + info_providers.bulk_import.quick_apply_all.tooltip + Das bestplatzierte Suchergebnis auf alle ausstehenden Teile ohne einzelne Überprüfung anwenden + + info_providers.bulk_import.prefetch_details @@ -13053,6 +13143,312 @@ Buerklin-API-Authentication-Server: Backup-Download erlaubt + + + update_manager.docker.setup_title + Aktivieren Sie Docker-Updates mit einem Klick über Watchtower + + + + + update_manager.docker.setup_description + Part-DB kann Ihre Docker-Container automatisch mit Watchtower aktualisieren, einem Open-Source-Container-Updater. Fügen Sie Watchtower als Begleitcontainer hinzu und konfigurieren Sie die Verbindung unten. + + + + + update_manager.docker.setup_step1 + 1. Fügen Sie Watchtower zu Ihrer docker-compose.yml hinzu: + + + + + update_manager.docker.setup_step2 + 2. Fügen Sie diese Umgebungsvariablen zu Ihrem Part-DB Container hinzu: + + + + + update_manager.docker.setup_network_hint + Stellen Sie sicher, dass Part-DB und Watchtower im selben Docker-Netzwerk sind. Wenn Sie label-basierte Filterung in Watchtower verwenden (WATCHTOWER_LABEL_ENABLE=true), fügen Sie dem Part-DB Container das Label "com.centurylinklabs.watchtower.enable=true" hinzu. + + + + + update_manager.docker.watchtower_unreachable_title + Watchtower nicht erreichbar + + + + + update_manager.docker.watchtower_unreachable_description + Watchtower ist konfiguriert, kann aber nicht erreicht werden. Bitte prüfen Sie, ob der Watchtower-Container läuft und ob URL und Token korrekt sind. + + + + + update_manager.docker.confirm_update + Sind Sie sicher, dass Sie Part-DB über Watchtower aktualisieren möchten? Der Container wird mit dem neuen Image neu gestartet. Im Gegensatz zu Git-Updates können Docker-Updates nicht automatisch zurückgesetzt werden. + + + + + update_manager.docker.update_via_watchtower + Update über Watchtower zu + + + + + update_manager.docker.no_rollback_warning + Docker-Updates können nicht automatisch zurückgesetzt werden. Vor dem Update wird eine Datenbanksicherung erstellt, damit Sie Ihre Daten bei Bedarf wiederherstellen können. + + + + + update_manager.docker.progress_title + Docker-Update läuft + + + + + update_manager.docker.waiting_for_watchtower + Warte darauf, dass Watchtower das neue Image zieht... + + + + + update_manager.docker.elapsed + Verstrichen + + + + + update_manager.docker.waiting_title + Update gestartet + + + + + update_manager.docker.waiting_description + Watchtower wurde benachrichtigt. Es wird das neueste Docker-Image ziehen und den Part-DB-Container neu starten. + + + + + update_manager.docker.watchtower_working + Watchtower verarbeitet das Update... + + + + + update_manager.docker.watchtower_working_hint + Je nach Internetgeschwindigkeit und Imagegröße kann dies einige Minuten dauern. + + + + + update_manager.docker.restarting_title + Container wird neu gestartet + + + + + update_manager.docker.restarting_description + Watchtower hat das neue Image gezogen und startet den Part-DB-Container neu. + + + + + update_manager.docker.restarting_hint + Die Seite erkennt automatisch, wenn der Server wieder online ist. Dies dauert normalerweise 10-30 Sekunden. + + + + + update_manager.docker.success_title + Update abgeschlossen! + + + + + update_manager.docker.success_message + Part-DB wurde erfolgreich über Watchtower aktualisiert. + + + + + update_manager.docker.previous_version + Vorherige Version + + + + + update_manager.docker.new_version + Neue Version + + + + + update_manager.docker.back_to_update_manager + Zurück zum Update-Manager + + + + + update_manager.docker.go_to_homepage + Zur Startseite + + + + + update_manager.docker.timeout_title + Update dauert länger als erwartet + + + + + update_manager.docker.timeout_message + Das Update dauert länger als erwartet. Prüfen Sie die Watchtower-Container-Logs für Details. Das Update kann noch laufen. + + + + + update_manager.docker.retry + Erneut versuchen + + + + + update_manager.docker.warning + Warnung + + + + + update_manager.docker.do_not_close + Schließen Sie diese Seite nicht. Sie erkennt automatisch, wenn das Update abgeschlossen ist. + + + + + update_manager.docker.updating_via_watchtower + Update über Watchtower wird durchgeführt + + + + + update_manager.docker.step_waiting + Image wird gezogen + + + + + update_manager.docker.steps + Update-Schritte + + + + + update_manager.docker.step_trigger + Update auslösen + + + + + update_manager.docker.step_trigger_desc + Watchtower wurde benachrichtigt, nach Updates zu suchen + + + + + update_manager.docker.step_pull + Neues Image ziehen + + + + + update_manager.docker.step_pull_desc + Lade das neueste Docker-Image aus dem Register + + + + + update_manager.docker.step_restart + Container neu starten + + + + + update_manager.docker.step_restart_desc + Alten Container stoppen und neuen starten + + + + + update_manager.docker.step_verify + Verifizieren + + + + + update_manager.docker.step_verify_desc + Bestätige, dass Part-DB mit der neuen Version läuft + + + + + update_manager.docker.watchtower_status + Watchtower + + + + + update_manager.docker.watchtower_connected + Verbunden + + + + + update_manager.docker.watchtower_unreachable_short + Nicht erreichbar + + + + + update_manager.docker.watchtower_not_configured + Nicht konfiguriert + + + + + update_manager.docker.step_stop + Container stoppen + + + + + update_manager.docker.step_stop_desc + Aktuellen Container vor der Neuerstellung ordentlich stoppen + + + + + update_manager.docker.step_health + Health Check + + + + + update_manager.docker.step_health_desc + Warte darauf, dass der neue Container den Health Check besteht + + + + + update_manager.docker.updating + Part-DB wird über Docker aktualisiert... + + part.create_from_info_provider.lot_filled_from_barcode @@ -13065,5 +13461,149 @@ Buerklin-API-Authentication-Server: Zuordnungsfehler: Bitte prüfen Sie, ob Sie das richtige Trennzeichen ausgewählt haben! + + + settings.ai + KI + + + + + settings.ai.openrouter + OpenRouter + + + + + settings.ai.lmstudio + LMStudio + + + + + settings.ips.ai_extractor.model + KI-Modell + + + + + settings.ips.ai_extractor.ai_platform + KI-Plattform + + + + + settings.ips.ai_extractor.model.help + Das KI-Modell, das für die Extraktion verwendet werden soll. Muss strukturierte Ausgaben unterstützen. + + + + + settings.ips.ai_extractor.max_content_length + Maximale Webseitentextlänge + + + + + settings.ips.ai_extractor.max_content_length.description + Die maximale Anzahl an Zeichen der Webseite, die an den KI-Dienst gesendet werden. + + + + + settings.ips.ai_extractor.output_language + Ausgabesprache + + + + + settings.ips.ai_extractor.output_language.description + Standardmäßig liefern die Anbieter Informationen in der gleichen Sprache wie die Webseite. Mit dieser Option können Sie die KI bitten, für Sie zu übersetzen. Funktioniert möglicherweise nur mit bestimmten Modellen. + + + + + settings.ips.ai_extractor.additional_instructions + Zusätzliche Anweisungen + + + + + settings.ips.ai_extractor.additional_instructions.description + Die zusätzlichen Anweisungen werden an den System-Prompt angehängt. + + + + + info_providers.search.advanced_options + Erweiterte Optionen + + + + + info_providers.no_cache_search + Suchergebnisse nicht zwischenspeichern / Neue Suche erzwingen + + + + + info_providers.no_cache_details + Ergebnisdetails nicht zwischenspeichern / Neue Detailabfrage erzwingen + + + + + info_providers.from_url.method.generic_web + Klassischer Web-Scraper + + + + + info_providers.from_url.method.ai_web + KI Web-Scraper + + + + + info_providers.from_url.method + Methode + + + + + info_providers.from_url.no_cache + Cache ignorieren / Neue Infoabfrage erzwingen + + + + + info_providers.from_url.skip_delegation + Nicht an spezialisierte Infoanbieter delegieren + + + + + settings.ips.ai_extractor + KI Web Extraktor + + + + + settings.ips.ai_extractor.description + Dieser Infoanbieter verwendet ein großes Sprachmodell (LLM), um detaillierte Teileinformationen von beliebigen Shop-URLs zu extrahieren. + + + + + settings.ai.openrouter.help + Zugriff auf viele KI-Modelle über openrouter.ai + + + + + settings.ai.lmstudio.hosturl + Host-URL + + From 28fc2a5a2c17e5013ea8541739dc0dfa8f91cf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 4 May 2026 23:19:29 +0200 Subject: [PATCH 103/108] Bump version to 2.11.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 10c2c0c3..46b81d81 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.10.0 +2.11.0 From 9c6f9a25c58ff187a77c51234d0d7de0f8640804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 5 May 2026 22:41:38 +0200 Subject: [PATCH 104/108] Use new watchtower image in configuation example Fixes issue #1363 --- .../admin/update_manager/index.html.twig | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/templates/admin/update_manager/index.html.twig b/templates/admin/update_manager/index.html.twig index 0b4eeceb..3e4483a6 100644 --- a/templates/admin/update_manager/index.html.twig +++ b/templates/admin/update_manager/index.html.twig @@ -296,17 +296,21 @@

    {% trans %}update_manager.docker.setup_description{% endtrans %}

    {% trans %}update_manager.docker.setup_step1{% endtrans %}
    -
    services:
    -  watchtower:
    -    image: containrrr/watchtower
    -    volumes:
    -      - /var/run/docker.sock:/var/run/docker.sock
    -    environment:
    -      - WATCHTOWER_HTTP_API_UPDATE=true
    -      - WATCHTOWER_HTTP_API_TOKEN=your-secret-token
    -      - WATCHTOWER_LABEL_ENABLE=true
    -    ports:
    -      - "8080:8080"
    +
    
    +                                # See documentation for full example: https://docs.part-db.de/installation/installation_docker.html
    +                                services:
    +                                  watchtower:
    +                                    image: ghcr.io/nicholas-fedor/watchtower:latest
    +                                    container_name: watchtower
    +                                    restart: unless-stopped
    +                                    volumes:
    +                                      - /var/run/docker.sock:/var/run/docker.sock
    +                                    environment:
    +                                      - WATCHTOWER_HTTP_API_UPDATE=true
    +                                      - WATCHTOWER_HTTP_API_TOKEN=your-secret-token
    +                                      - WATCHTOWER_LABEL_ENABLE=true
    +                                      - WATCHTOWER_CLEANUP=true
    +                            
    {% trans %}update_manager.docker.setup_step2{% endtrans %}
    WATCHTOWER_API_URL=http://watchtower:8080
    
    From 38779740ec729b28e40a706f5fe66aa47b298263 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Jan=20B=C3=B6hmer?= 
    Date: Tue, 5 May 2026 23:19:56 +0200
    Subject: [PATCH 105/108] AIWebProvider: Make URLs absolute before passing them
     to the LLM
    
    This ensures that the URLs are valid afterwards, because the LLM does not know the base tag
    ---
     .../Providers/AIWebProvider.php               | 31 ++++++++++++++++---
     1 file changed, 27 insertions(+), 4 deletions(-)
    
    diff --git a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php
    index 7f4a3586..164ee341 100644
    --- a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php
    +++ b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php
    @@ -39,6 +39,7 @@ use Psr\Cache\CacheItemPoolInterface;
     use Symfony\AI\Platform\Message\Message;
     use Symfony\AI\Platform\Message\MessageBag;
     use Symfony\Component\DomCrawler\Crawler;
    +use Symfony\Component\DomCrawler\UriResolver;
     use Symfony\Component\HttpClient\NoPrivateNetworkHttpClient;
     use Symfony\Component\Intl\Languages;
     use Symfony\Contracts\HttpClient\HttpClientInterface;
    @@ -146,7 +147,7 @@ final class AIWebProvider implements InfoProviderInterface
             $html = $response->getContent();
     
             //Convert html to markdown, to provide a cleaner input to the LLM.
    -        $markdown = $this->htmlToMarkdown($html);
    +        $markdown = $this->htmlToMarkdown($html, $url);
             //Truncate markdown to max content length, if needed
             $markdown = u($markdown)->truncate($this->settings->maxContentLength, '... [truncated]')->toString();
     
    @@ -182,10 +183,32 @@ final class AIWebProvider implements InfoProviderInterface
             return json_encode($items->toObject(), JSON_THROW_ON_ERROR);
         }
     
    -    private function htmlToMarkdown(string $html): string
    +    private function htmlToMarkdown(string $html, string $url): string
         {
    -        //Extract only the main content of the page to avoid overwhelming the LLM with irrelevant information.
    +
             $crawler = new Crawler($html);
    +
    +        //Replace relative URLs with absolute URLs, to ensure that the LLM has full context and can access the links if needed.
    +        $baseUrl = $crawler->getBaseHref() ?? $url;
    +
    +        //Replace all relative links with their absolute counnterparts, to provide more context to the LLM and to ensure that any links included in the markdown are valid and can be accessed if needed.
    +        $crawler->filter('a')->each(function (Crawler $node) use ($baseUrl) {
    +            $href = $node->attr('href');
    +            if ($href) {
    +                $absoluteUrl = UriResolver::resolve($href, $baseUrl);
    +                $node->getNode(0)->setAttribute('href', $absoluteUrl);
    +            }
    +        });
    +
    +        $crawler->filter('img')->each(function (Crawler $node) use ($baseUrl) {
    +            $src = $node->attr('src');
    +            if ($src) {
    +                $absoluteUrl = UriResolver::resolve($src, $baseUrl);
    +                $node->getNode(0)->setAttribute('src', $absoluteUrl);
    +            }
    +        });
    +
    +        //Extract only the main content of the page to avoid overwhelming the LLM with irrelevant information.
             $mainContent = $crawler->filter('main, article, #content');
     
             // If we found a specific content area, get its HTML; otherwise, use the whole body.
    @@ -198,7 +221,7 @@ final class AIWebProvider implements InfoProviderInterface
                 }
             } else {
                 //Use the whole body content, as it might contain relevant information, especially for simpler pages that don't have a clear main/content section.
    -            $htmlToConvert = $html;
    +            $htmlToConvert = $crawler->outerHtml();
             }
     
     
    
    From 98c978ff1bb6a7effe17cd541dbc9f4513c2e483 Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Jan=20B=C3=B6hmer?= 
    Date: Tue, 5 May 2026 23:52:14 +0200
    Subject: [PATCH 106/108] Improved RandomizeUseragentHttpClient by not using
     old user agent strings, but different modernn profiles where also other
     headers match the user agent
    
    ---
     src/Helpers/RandomizeUseragentHttpClient.php | 138 ++++++++++++++-----
     1 file changed, 107 insertions(+), 31 deletions(-)
    
    diff --git a/src/Helpers/RandomizeUseragentHttpClient.php b/src/Helpers/RandomizeUseragentHttpClient.php
    index bca91c79..4b0d11b0 100644
    --- a/src/Helpers/RandomizeUseragentHttpClient.php
    +++ b/src/Helpers/RandomizeUseragentHttpClient.php
    @@ -29,53 +29,128 @@ use Symfony\Contracts\HttpClient\ResponseStreamInterface;
     
     /**
      * HttpClient wrapper that randomizes the user agent for each request, to make it harder for servers to detect and block us.
    + * It also sets some other headers to make the requests look more like real browser requests.
      * When we get a 503, 403 or 429, we assume that the server is blocking us and try again with a different user agent, until we run out of retries.
      */
     final class RandomizeUseragentHttpClient implements HttpClientInterface
     {
    -    public const USER_AGENTS = [
    -        "Mozilla/5.0 (Windows; U; Windows NT 10.0; Win64; x64) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/52.0.1359.302 Safari/600.6 Edge/15.25690",
    -        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",
    -        "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 8_8_3) Gecko/20100101 Firefox/51.6",
    -        "Mozilla/5.0 (Android; Android 4.4.4; E:number:20-23:00 Build/24.0.B.1.34) AppleWebKit/603.18 (KHTML, like Gecko)  Chrome/47.0.1559.384 Mobile Safari/600.5",
    -        "Mozilla/5.0 (compatible; MSIE 9.0; Windows; Windows NT 6.3; WOW64 Trident/5.0)",
    -        "Mozilla/5.0 (Windows; Windows NT 6.0; Win64; x64) AppleWebKit/602.21 (KHTML, like Gecko) Chrome/51.0.3187.154 Safari/536",
    -        "Mozilla/5.0 (iPhone; CPU iPhone OS 9_4_2; like Mac OS X) AppleWebKit/537.24 (KHTML, like Gecko)  Chrome/51.0.2432.275 Mobile Safari/535.6",
    -        "Mozilla/5.0 (U; Linux i680 ) Gecko/20100101 Firefox/57.5",
    -        "Mozilla/5.0 (Macintosh; Intel Mac OS X 8_8_6; en-US) Gecko/20100101 Firefox/53.9",
    -        "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 8_6_7) AppleWebKit/534.46 (KHTML, like Gecko) Chrome/55.0.3276.345 Safari/535",
    -        "Mozilla/5.0 (Windows; Windows NT 10.5;) AppleWebKit/535.42 (KHTML, like Gecko) Chrome/53.0.1176.353 Safari/534.0 Edge/11.95743",
    -        "Mozilla/5.0 (Linux; Android 5.1.1; MOTO G Build/LPH223) AppleWebKit/600.27 (KHTML, like Gecko)  Chrome/47.0.1604.204 Mobile Safari/535.1",
    -        "Mozilla/5.0 (iPod; CPU iPod OS 7_4_8; like Mac OS X) AppleWebKit/534.17 (KHTML, like Gecko)  Chrome/50.0.1632.146 Mobile Safari/600.4",
    -        "Mozilla/5.0 (Linux; U; Linux i570 ; en-US) Gecko/20100101 Firefox/49.9",
    -        "Mozilla/5.0 (Windows NT 10.2; WOW64; en-US) AppleWebKit/603.2 (KHTML, like Gecko) Chrome/55.0.1299.311 Safari/535",
    -        "Mozilla/5.0 (Windows; Windows NT 10.5; x64; en-US) AppleWebKit/603.39 (KHTML, like Gecko) Chrome/52.0.1443.139 Safari/536.6 Edge/13.79436",
    -        "Mozilla/5.0 (Linux; U; Android 5.1; SM-G9350T Build/MMB29M) AppleWebKit/537.15 (KHTML, like Gecko)  Chrome/55.0.2552.307 Mobile Safari/600.8",
    -        "Mozilla/5.0 (Android; Android 6.0; SAMSUNG SM-D9350V Build/MDB08L) AppleWebKit/535.30 (KHTML, like Gecko)  Chrome/53.0.1345.278 Mobile Safari/537.4",
    -        "Mozilla/5.0 (Windows; Windows NT 10.0;) AppleWebKit/534.44 (KHTML, like Gecko) Chrome/47.0.3503.387 Safari/601",
    +    private const PROFILES = [
    +        // --- CHROME ON WINDOWS ---
    +        'chrome_windows' => [
    +            'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36',
    +            'Sec-Ch-Ua' => '"Google Chrome";v="142", "Chromium";v="142", "Not=A?Brand";v="99"',
    +            'Sec-Ch-Ua-Mobile' => '?0',
    +            'Sec-Ch-Ua-Platform' => '"Windows"',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    +        ],
    +
    +        // --- CHROME ON MACOS ---
    +        'chrome_mac' => [
    +            'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36',
    +            'Sec-Ch-Ua' => '"Google Chrome";v="141", "Chromium";v="141", "Not=A?Brand";v="99"',
    +            'Sec-Ch-Ua-Mobile' => '?0',
    +            'Sec-Ch-Ua-Platform' => '"macOS"',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    +        ],
    +
    +        // --- EDGE ON WINDOWS ---
    +        'edge_windows' => [
    +            'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0',
    +            'Sec-Ch-Ua' => '"Microsoft Edge";v="142", "Chromium";v="142", "Not=A?Brand";v="99"',
    +            'Sec-Ch-Ua-Mobile' => '?0',
    +            'Sec-Ch-Ua-Platform' => '"Windows"',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    +        ],
    +
    +        // --- FIREFOX ON WINDOWS ---
    +        'firefox_windows' => [
    +            'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8',
    +            'Accept-Language' => 'en-US,en;q=0.5',
    +            // Firefox does not send Sec-Ch-Ua headers by default
    +        ],
    +
    +        // --- FIREFOX ON LINUX ---
    +        'firefox_linux' => [
    +            'User-Agent' => 'Mozilla/5.0 (X11; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8',
    +            'Accept-Language' => 'en-US,en;q=0.5',
    +        ],
    +
    +        // --- SAFARI ON MACOS ---
    +        'safari_mac' => [
    +            'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    +            'Accept-Language' => 'en-US,en;q=0.9',
    +        ],
    +
    +        // --- CHROME ON ANDROID (Mobile) ---
    +        'chrome_android' => [
    +            'User-Agent' => 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36',
    +            'Sec-Ch-Ua' => '"Google Chrome";v="142", "Chromium";v="142", "Not=A?Brand";v="99"',
    +            'Sec-Ch-Ua-Mobile' => '?1',
    +            'Sec-Ch-Ua-Platform' => '"Android"',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    +        ],
    +
    +        // --- SAFARI ON IPHONE (Mobile) ---
    +        'safari_iphone' => [
    +            'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1',
    +            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    +            'Accept-Language' => 'en-US,en;q=0.9',
    +        ],
         ];
     
    +    private const COMMON_HEADERS = [
    +        'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    +        'Accept-Language' => 'en-US,en;q=0.9',
    +        'Sec-Fetch-Dest' => 'document',
    +        'Sec-Fetch-Mode' => 'navigate',
    +        'Sec-Fetch-Site' => 'none',
    +        'Sec-Fetch-User' => '?1',
    +        'Upgrade-Insecure-Requests' => '1',
    +    ];
    +
    +    private const ENTRY_REFERERS = [
    +        'https://www.google.com/',
    +        'https://www.bing.com/',
    +        'https://duckduckgo.com/',
    +        'https://t.co/', // Twitter/X shortener
    +        'https://www.reddit.com/',
    +    ];
    +
    +    private ?string $lastUrl = null;
    +
         public function __construct(
             private readonly HttpClientInterface $client,
    -        private readonly array $userAgents = self::USER_AGENTS,
             private readonly int $repeatOnFailure = 1,
         ) {
         }
     
    -    public function getRandomUserAgent(): string
    -    {
    -        return $this->userAgents[array_rand($this->userAgents)];
    -    }
    -
         public function request(string $method, string $url, array $options = []): ResponseInterface
         {
             $repeatsLeft = $this->repeatOnFailure;
             do {
    -            $modifiedOptions = $options;
    -            if (!isset($modifiedOptions['headers']['User-Agent'])) {
    -                $modifiedOptions['headers']['User-Agent'] = $this->getRandomUserAgent();
    +            $profile = self::PROFILES[array_rand(self::PROFILES)];
    +
    +            // Merge common headers with the specific browser profile
    +            $headers = array_merge(self::COMMON_HEADERS, $profile);
    +
    +            //Add a Referer header if not already set, to make it look more like a real browser request. We use the last URL we visited as the referer, to simulate internal navigation. If we don't have a last URL (first request), we pick a random entry point from common referers.
    +            if (!isset($options['headers']['Referer'])) {
    +                if ($this->lastUrl !== null) {
    +                    // If we have a previous URL, use it (Internal Navigation)
    +                    $headers['Referer'] = $this->lastUrl;
    +                } else {
    +                    // First request? Pick an entry point (External Entry)
    +                    $headers['Referer'] = self::ENTRY_REFERERS[array_rand(self::ENTRY_REFERERS)];
    +                }
                 }
    -            $response =  $this->client->request($method, $url, $modifiedOptions);
    +
    +            // Allow manual overrides from $options
    +            $options['headers'] = array_merge($headers, $options['headers'] ?? []);
    +
    +            $response = $this->client->request($method, $url, $options);
     
                 //When we get a 503, 403 or 429, we assume that the server is blocking us and try again with a different user agent
                 if (!in_array($response->getStatusCode(), [403, 429, 503], true)) {
    @@ -83,6 +158,7 @@ final class RandomizeUseragentHttpClient implements HttpClientInterface
                 }
     
                 //Otherwise we try again with a different user agent, until we run out of retries
    +            usleep(5000); // Sleep for 5ms to avoid hammering the server too hard in case of multiple retries
             } while ($repeatsLeft-- > 0);
     
             return $response;
    @@ -95,6 +171,6 @@ final class RandomizeUseragentHttpClient implements HttpClientInterface
     
         public function withOptions(array $options): static
         {
    -        return new self($this->client->withOptions($options), $this->userAgents, $this->repeatOnFailure);
    +        return new self($this->client->withOptions($options), $this->repeatOnFailure);
         }
     }
    
    From 2e8ab8190a7065bc3f31515589d0e5efea75525e Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Jan=20B=C3=B6hmer?= 
    Date: Tue, 5 May 2026 23:53:03 +0200
    Subject: [PATCH 107/108] Bumped to version 2.11.1
    
    ---
     VERSION       |  2 +-
     composer.lock | 53 ++++++++++++++++++++++-----------------------------
     2 files changed, 24 insertions(+), 31 deletions(-)
    
    diff --git a/VERSION b/VERSION
    index 46b81d81..6ceb272e 100644
    --- a/VERSION
    +++ b/VERSION
    @@ -1 +1 @@
    -2.11.0
    +2.11.1
    diff --git a/composer.lock b/composer.lock
    index f25634d4..e4144934 100644
    --- a/composer.lock
    +++ b/composer.lock
    @@ -17374,25 +17374,25 @@
             },
             {
                 "name": "symplify/easy-coding-standard",
    -            "version": "13.1.2",
    +            "version": "13.1.3",
                 "source": {
                     "type": "git",
                     "url": "https://github.com/easy-coding-standard/ecs.git",
    -                "reference": "6d22473d1f36945884d8cb291777166020a47770"
    +                "reference": "d894d088d7ebb9326f9eed28bf251481c813b89f"
                 },
                 "dist": {
                     "type": "zip",
    -                "url": "https://api.github.com/repos/easy-coding-standard/ecs/zipball/6d22473d1f36945884d8cb291777166020a47770",
    -                "reference": "6d22473d1f36945884d8cb291777166020a47770",
    +                "url": "https://api.github.com/repos/easy-coding-standard/ecs/zipball/d894d088d7ebb9326f9eed28bf251481c813b89f",
    +                "reference": "d894d088d7ebb9326f9eed28bf251481c813b89f",
                     "shasum": ""
                 },
                 "require": {
                     "php": ">=7.2"
                 },
                 "conflict": {
    -                "friendsofphp/php-cs-fixer": "<3.92.4",
    +                "friendsofphp/php-cs-fixer": "<3.95.1",
                     "phpcsstandards/php_codesniffer": "<4.0.1",
    -                "symplify/coding-standard": "<12.1"
    +                "symplify/coding-standard": "<13.0"
                 },
                 "suggest": {
                     "ext-dom": "Needed to support checkstyle output format in class CheckstyleOutputFormatter"
    @@ -17418,20 +17418,9 @@
                     "static analysis"
                 ],
                 "support": {
    -                "issues": "https://github.com/easy-coding-standard/ecs/issues",
    -                "source": "https://github.com/easy-coding-standard/ecs/tree/13.1.2"
    +                "source": "https://github.com/easy-coding-standard/ecs/tree/13.1.3"
                 },
    -            "funding": [
    -                {
    -                    "url": "https://www.paypal.me/rectorphp",
    -                    "type": "custom"
    -                },
    -                {
    -                    "url": "https://github.com/tomasvotruba",
    -                    "type": "github"
    -                }
    -            ],
    -            "time": "2026-05-03T22:05:09+00:00"
    +            "time": "2026-05-04T21:45:57+00:00"
             },
             {
                 "name": "tecnickcom/tc-lib-barcode",
    @@ -20189,12 +20178,12 @@
                 "source": {
                     "type": "git",
                     "url": "https://github.com/Roave/SecurityAdvisories.git",
    -                "reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a"
    +                "reference": "9d468c11a8da481c22b4e610494babae032fdb03"
                 },
                 "dist": {
                     "type": "zip",
    -                "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2221f6ef09e87784e78e188aadd8f7e3a50e679a",
    -                "reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a",
    +                "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9d468c11a8da481c22b4e610494babae032fdb03",
    +                "reference": "9d468c11a8da481c22b4e610494babae032fdb03",
                     "shasum": ""
                 },
                 "conflict": {
    @@ -20254,7 +20243,7 @@
                     "awesome-support/awesome-support": "<=6.0.7",
                     "aws/aws-sdk-php": "<=3.371.3",
                     "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5",
    -                "azuracast/azuracast": "<=0.23.3",
    +                "azuracast/azuracast": "<=0.23.5",
                     "b13/seo_basics": "<0.8.2",
                     "backdrop/backdrop": "<=1.32",
                     "backpack/crud": "<3.4.9",
    @@ -20309,7 +20298,7 @@
                     "cesnet/simplesamlphp-module-proxystatistics": "<3.1",
                     "chriskacerguis/codeigniter-restserver": "<=2.7.1",
                     "chrome-php/chrome": "<1.14",
    -                "ci4-cms-erp/ci4ms": "<=0.31.6",
    +                "ci4-cms-erp/ci4ms": "<=0.31.7",
                     "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
                     "ckeditor/ckeditor": "<4.25",
                     "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3",
    @@ -20361,6 +20350,7 @@
                     "david-garcia/phpwhois": "<=4.3.1",
                     "dbrisinajumi/d2files": "<1",
                     "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta",
    +                "dedoc/scramble": ">=0.13.2,<0.13.22",
                     "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
                     "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
                     "desperado/xml-bundle": "<=0.1.7",
    @@ -20513,7 +20503,8 @@
                     "georgringer/news": "<1.3.3",
                     "geshi/geshi": "<=1.0.9.1",
                     "getformwork/formwork": "<=2.3.3",
    -                "getgrav/grav": "<1.11.0.0-beta1",
    +                "getgrav/grav": "<2.0.0.0-beta2",
    +                "getgrav/grav-plugin-api": "<1.0.0.0-beta15",
                     "getkirby/cms": "<4.9|>=5,<5.4",
                     "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1",
                     "getkirby/panel": "<2.5.14",
    @@ -20680,6 +20671,7 @@
                     "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1",
                     "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7",
                     "maximebf/debugbar": "<1.19",
    +                "mckenziearts/livewire-markdown-editor": "<1.3",
                     "mdanter/ecc": "<2",
                     "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2",
                     "mediawiki/cargo": "<3.8.3",
    @@ -20723,6 +20715,7 @@
                     "munkireport/softwareupdate": "<1.6",
                     "mustache/mustache": ">=2,<2.14.1",
                     "mwdelaney/wp-enable-svg": "<=0.2",
    +                "nabeel/phpvms": "<7.0.6",
                     "namshi/jose": "<2.2",
                     "nasirkhan/laravel-starter": "<11.11",
                     "nategood/httpful": "<1",
    @@ -20763,7 +20756,7 @@
                     "open-web-analytics/open-web-analytics": "<1.8.1",
                     "opencart/opencart": ">=0",
                     "openid/php-openid": "<2.3",
    -                "openmage/magento-lts": "<20.17",
    +                "openmage/magento-lts": "<=20.17",
                     "opensolutions/vimbadmin": "<=3.0.15",
                     "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1",
                     "orchid/platform": ">=8,<14.43",
    @@ -20812,7 +20805,7 @@
                     "phpoffice/phpexcel": "<=1.8.2",
                     "phpoffice/phpspreadsheet": "<=1.30.3|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6",
                     "phppgadmin/phppgadmin": "<=7.13",
    -                "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51",
    +                "phpseclib/phpseclib": "<=2.0.53|>=3,<=3.0.51",
                     "phpservermon/phpservermon": "<3.6",
                     "phpsysinfo/phpsysinfo": "<3.4.3",
                     "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6",
    @@ -20906,7 +20899,7 @@
                     "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev",
                     "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev",
                     "shopxo/shopxo": "<=6.4",
    -                "showdoc/showdoc": "<2.10.4",
    +                "showdoc/showdoc": "<3.8.1",
                     "shuchkin/simplexlsx": ">=1.0.12,<1.1.13",
                     "silverstripe-australia/advancedreports": ">=1,<=2",
                     "silverstripe/admin": "<1.13.19|>=2,<2.1.8",
    @@ -21119,7 +21112,7 @@
                     "webcoast/deferred-image-processing": "<1.0.2",
                     "webklex/laravel-imap": "<5.3",
                     "webklex/php-imap": "<5.3",
    -                "webonyx/graphql-php": "<=15.31.4",
    +                "webonyx/graphql-php": "<=15.32.2",
                     "webpa/webpa": "<3.1.2",
                     "webreinvent/vaahcms": "<=2.3.1",
                     "wikibase/wikibase": "<=1.39.3",
    @@ -21239,7 +21232,7 @@
                         "type": "tidelift"
                     }
                 ],
    -            "time": "2026-04-30T21:24:12+00:00"
    +            "time": "2026-05-05T21:24:41+00:00"
             },
             {
                 "name": "sebastian/cli-parser",
    
    From cb669ad4ec831efb66ae4944308058be1d45cb1e Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Jan=20B=C3=B6hmer?= 
    Date: Wed, 6 May 2026 00:08:14 +0200
    Subject: [PATCH 108/108] Fixed phpstan issues
    
    ---
     src/Helpers/RandomizeUseragentHttpClient.php                | 1 +
     src/Services/InfoProviderSystem/Providers/AIWebProvider.php | 2 ++
     2 files changed, 3 insertions(+)
    
    diff --git a/src/Helpers/RandomizeUseragentHttpClient.php b/src/Helpers/RandomizeUseragentHttpClient.php
    index 4b0d11b0..42e62d11 100644
    --- a/src/Helpers/RandomizeUseragentHttpClient.php
    +++ b/src/Helpers/RandomizeUseragentHttpClient.php
    @@ -154,6 +154,7 @@ final class RandomizeUseragentHttpClient implements HttpClientInterface
     
                 //When we get a 503, 403 or 429, we assume that the server is blocking us and try again with a different user agent
                 if (!in_array($response->getStatusCode(), [403, 429, 503], true)) {
    +                $this->lastUrl = $url; // Update last visited URL for referer in the next request
                     return $response;
                 }
     
    diff --git a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php
    index 164ee341..79f07be8 100644
    --- a/src/Services/InfoProviderSystem/Providers/AIWebProvider.php
    +++ b/src/Services/InfoProviderSystem/Providers/AIWebProvider.php
    @@ -196,6 +196,7 @@ final class AIWebProvider implements InfoProviderInterface
                 $href = $node->attr('href');
                 if ($href) {
                     $absoluteUrl = UriResolver::resolve($href, $baseUrl);
    +                //@phpstan-ignore-next-line we know that getNode(0) will always return a DOMElement, because the crawler is initialized with valid HTML and we are filtering for 'a' tags, which are always DOMElements.
                     $node->getNode(0)->setAttribute('href', $absoluteUrl);
                 }
             });
    @@ -204,6 +205,7 @@ final class AIWebProvider implements InfoProviderInterface
                 $src = $node->attr('src');
                 if ($src) {
                     $absoluteUrl = UriResolver::resolve($src, $baseUrl);
    +                //@phpstan-ignore-next-line we know that getNode(0) will always return a DOMElement, because the crawler is initialized with valid HTML and we are filtering for 'a' tags, which are always DOMElements.
                     $node->getNode(0)->setAttribute('src', $absoluteUrl);
                 }
             });